diff --git a/base/applications/CMakeLists.txt b/base/applications/CMakeLists.txt index 7f230ccc4c3..ca7fba2f8cc 100644 --- a/base/applications/CMakeLists.txt +++ b/base/applications/CMakeLists.txt @@ -36,4 +36,4 @@ add_subdirectory(taskmgr) add_subdirectory(winhlp32) add_subdirectory(winver) add_subdirectory(wordpad) -add_subdirectory(write) \ No newline at end of file +add_subdirectory(write) diff --git a/base/applications/calc/lang/he-IL.rc b/base/applications/calc/lang/he-IL.rc index be61f9673b7..b4ff3fd2b2d 100644 --- a/base/applications/calc/lang/he-IL.rc +++ b/base/applications/calc/lang/he-IL.rc @@ -151,7 +151,7 @@ BEGIN BS_NOTIFY | BS_OWNERDRAW | WS_TABSTOP PUSHBUTTON "CE",IDC_BUTTON_CE,222,38,43,18,BS_CENTER | BS_VCENTER | BS_NOTIFY | BS_OWNERDRAW | WS_TABSTOP - PUSHBUTTON "Back",IDC_BUTTON_BACK,177,38,43,18,BS_CENTER | + PUSHBUTTON "חזרה",IDC_BUTTON_BACK,177,38,43,18,BS_CENTER | BS_VCENTER | BS_NOTIFY | BS_OWNERDRAW | WS_TABSTOP RTEXT "",IDC_TEXT_OUTPUT,5,1,305,14,SS_CENTERIMAGE, WS_EX_CLIENTEDGE @@ -350,7 +350,7 @@ BEGIN BEGIN MENUITEM "רגילה", IDM_VIEW_STANDARD, CHECKED MENUITEM "מדעית", IDM_VIEW_SCIENTIFIC, CHECKED - MENUITEM "Conversion", IDM_VIEW_CONVERSION + MENUITEM "המרה", IDM_VIEW_CONVERSION MENUITEM SEPARATOR MENUITEM "הקס\tF5", IDM_VIEW_HEX, CHECKED MENUITEM "עשרוני\tF6", IDM_VIEW_DEC, CHECKED @@ -382,7 +382,7 @@ BEGIN BEGIN MENUITEM "רגילה", IDM_VIEW_STANDARD, CHECKED MENUITEM "מדעית", IDM_VIEW_SCIENTIFIC, CHECKED - MENUITEM "Conversion", IDM_VIEW_CONVERSION + MENUITEM "המרה", IDM_VIEW_CONVERSION MENUITEM SEPARATOR MENUITEM "הקס\tF5", IDM_VIEW_HEX, CHECKED MENUITEM "עשרוני\tF6", IDM_VIEW_DEC, CHECKED @@ -415,7 +415,7 @@ BEGIN BEGIN MENUITEM "רגילה", IDM_VIEW_STANDARD, CHECKED MENUITEM "מדעית", IDM_VIEW_SCIENTIFIC, CHECKED - MENUITEM "Conversion", IDM_VIEW_CONVERSION + MENUITEM "המרה", IDM_VIEW_CONVERSION MENUITEM SEPARATOR MENUITEM "קיבוץ ספרות", IDM_VIEW_GROUP, CHECKED END @@ -441,7 +441,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_CONV_ANGLE "זוית" IDS_CONV_AREA "שטח" - IDS_CONV_CONSUMPTION "Consumption (engines)" + IDS_CONV_CONSUMPTION "צריכה (מנועים)" IDS_CONV_CURRENCY "מטבע" IDS_CONV_ENERGY "אנרגיה" IDS_CONV_LENGTH "מרחק" @@ -449,7 +449,7 @@ BEGIN IDS_CONV_PRESSURE "לחץ" IDS_CONV_TEMPERATURE "טמפרטורה" IDS_CONV_TIME "זמן" - IDS_CONV_VELOCITY "Velocity" + IDS_CONV_VELOCITY "תאוצה" IDS_CONV_VOLUME "נפח" IDS_CONV_WEIGHT "משקל" END @@ -536,18 +536,18 @@ END // TYPES OF ENERGIES STRINGTABLE DISCARDABLE BEGIN - IDS_ENERGY_15_C_CALORIES "15 °C calories" + IDS_ENERGY_15_C_CALORIES "15 °C קלוריות" IDS_ENERGY_BTUS "British Thermal Units" IDS_ENERGY_ERGS "Ergs" IDS_ENERGY_EVS "Electron-Volts" IDS_ENERGY_FOOT_POUNDS "Foot-Pounds" IDS_ENERGY_IT_CALORIES "International Table calories" IDS_ENERGY_IT_KILOCALORIES "International Table kilocalories" - IDS_ENERGY_JOULES "Joules" - IDS_ENERGY_KILOJOULES "Kilojoules" - IDS_ENERGY_KILOWATT_HOURS "Kilowatt hours" - IDS_ENERGY_NUTRITION_CALORIES "Nutrition calories" - IDS_ENERGY_TH_CALORIES "Thermochemical calorie" + IDS_ENERGY_JOULES "ג'ול" + IDS_ENERGY_KILOJOULES "קילוג'ול" + IDS_ENERGY_KILOWATT_HOURS "קילוואט שעה" + IDS_ENERGY_NUTRITION_CALORIES "קלוריות תזונתיות" + IDS_ENERGY_TH_CALORIES "קלוריה תרמו כימית" END // TYPES OF LENGTHS @@ -617,11 +617,11 @@ END STRINGTABLE DISCARDABLE BEGIN IDS_PRESSURE_ATMOSPHERES "אטמוספירות" - IDS_PRESSURE_BARS "Bars" + IDS_PRESSURE_BARS "בר" IDS_PRESSURE_HECTOPASCALS "Hectopascals" - IDS_PRESSURE_KILOPASCALS "Kilopascals" + IDS_PRESSURE_KILOPASCALS "קילופסקל" IDS_PRESSURE_MM_OF_MERCURY "Millimeters of mercury" - IDS_PRESSURE_PASCALS "Pascals" + IDS_PRESSURE_PASCALS "פסקל" IDS_PRESSURE_PSI "Pounds-force per square inch" END diff --git a/base/applications/cmdutils/CMakeLists.txt b/base/applications/cmdutils/CMakeLists.txt index b36bbb77325..bfb9679c9ff 100644 --- a/base/applications/cmdutils/CMakeLists.txt +++ b/base/applications/cmdutils/CMakeLists.txt @@ -5,4 +5,5 @@ add_subdirectory(hostname) add_subdirectory(lodctr) add_subdirectory(more) add_subdirectory(reg) +add_subdirectory(taskkill) add_subdirectory(xcopy) diff --git a/base/applications/cmdutils/taskkill/CMakeLists.txt b/base/applications/cmdutils/taskkill/CMakeLists.txt new file mode 100644 index 00000000000..4b5e3498c87 --- /dev/null +++ b/base/applications/cmdutils/taskkill/CMakeLists.txt @@ -0,0 +1,6 @@ + +add_executable(taskkill taskkill.c taskkill.rc) +target_link_libraries(taskkill wine) +set_module_type(taskkill win32cui UNICODE) +add_importlibs(taskkill psapi user32 msvcrt kernel32 ntdll) +add_cd_file(TARGET taskkill DESTINATION reactos/system32 FOR all) diff --git a/base/applications/cmdutils/taskkill/taskkill.c b/base/applications/cmdutils/taskkill/taskkill.c new file mode 100644 index 00000000000..7a4d7f43bc2 --- /dev/null +++ b/base/applications/cmdutils/taskkill/taskkill.c @@ -0,0 +1,540 @@ +/* + * Task termination utility + * + * Copyright 2008 Andrew Riedi + * Copyright 2010 Andrew Nguyen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "taskkill.h" + +WINE_DEFAULT_DEBUG_CHANNEL(taskkill); + +static int force_termination; + +static WCHAR **task_list; +static unsigned int task_count; + +struct pid_close_info +{ + DWORD pid; + BOOL found; +}; + +static int taskkill_vprintfW(const WCHAR *msg, __ms_va_list va_args) +{ + int wlen; + DWORD count, ret; + WCHAR msg_buffer[8192]; + + wlen = FormatMessageW(FORMAT_MESSAGE_FROM_STRING, msg, 0, 0, msg_buffer, + sizeof(msg_buffer)/sizeof(*msg_buffer), &va_args); + + ret = WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), msg_buffer, wlen, &count, NULL); + if (!ret) + { + DWORD len; + char *msgA; + + /* On Windows WriteConsoleW() fails if the output is redirected. So fall + * back to WriteFile(), assuming the console encoding is still the right + * one in that case. + */ + len = WideCharToMultiByte(GetConsoleOutputCP(), 0, msg_buffer, wlen, + NULL, 0, NULL, NULL); + msgA = HeapAlloc(GetProcessHeap(), 0, len); + if (!msgA) + return 0; + + WideCharToMultiByte(GetConsoleOutputCP(), 0, msg_buffer, wlen, msgA, len, + NULL, NULL); + WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), msgA, len, &count, FALSE); + HeapFree(GetProcessHeap(), 0, msgA); + } + + return count; +} + +static int CDECL taskkill_printfW(const WCHAR *msg, ...) +{ + __ms_va_list va_args; + int len; + + __ms_va_start(va_args, msg); + len = taskkill_vprintfW(msg, va_args); + __ms_va_end(va_args); + + return len; +} + +static int CDECL taskkill_message_printfW(int msg, ...) +{ + __ms_va_list va_args; + WCHAR msg_buffer[8192]; + int len; + + LoadStringW(GetModuleHandleW(NULL), msg, msg_buffer, + sizeof(msg_buffer)/sizeof(WCHAR)); + + __ms_va_start(va_args, msg); + len = taskkill_vprintfW(msg_buffer, va_args); + __ms_va_end(va_args); + + return len; +} + +static int taskkill_message(int msg) +{ + static const WCHAR formatW[] = {'%','1',0}; + WCHAR msg_buffer[8192]; + + LoadStringW(GetModuleHandleW(NULL), msg, msg_buffer, + sizeof(msg_buffer)/sizeof(WCHAR)); + + return taskkill_printfW(formatW, msg_buffer); +} + +/* Post WM_CLOSE to all top-level windows belonging to the process with specified PID. */ +static BOOL CALLBACK pid_enum_proc(HWND hwnd, LPARAM lParam) +{ + struct pid_close_info *info = (struct pid_close_info *)lParam; + DWORD hwnd_pid; + + GetWindowThreadProcessId(hwnd, &hwnd_pid); + + if (hwnd_pid == info->pid) + { + PostMessageW(hwnd, WM_CLOSE, 0, 0); + info->found = TRUE; + } + + return TRUE; +} + +static DWORD *enumerate_processes(DWORD *list_count) +{ + DWORD *pid_list, alloc_bytes = 1024 * sizeof(*pid_list), needed_bytes; + + pid_list = HeapAlloc(GetProcessHeap(), 0, alloc_bytes); + if (!pid_list) + return NULL; + + for (;;) + { + DWORD *realloc_list; + + if (!EnumProcesses(pid_list, alloc_bytes, &needed_bytes)) + { + HeapFree(GetProcessHeap(), 0, pid_list); + return NULL; + } + + /* EnumProcesses can't signal an insufficient buffer condition, so the + * only way to possibly determine whether a larger buffer is required + * is to see whether the written number of bytes is the same as the + * buffer size. If so, the buffer will be reallocated to twice the + * size. */ + if (alloc_bytes != needed_bytes) + break; + + alloc_bytes *= 2; + realloc_list = HeapReAlloc(GetProcessHeap(), 0, pid_list, alloc_bytes); + if (!realloc_list) + { + HeapFree(GetProcessHeap(), 0, pid_list); + return NULL; + } + pid_list = realloc_list; + } + + *list_count = needed_bytes / sizeof(*pid_list); + return pid_list; +} + +static BOOL get_process_name_from_pid(DWORD pid, WCHAR *buf, DWORD chars) +{ + HANDLE process; + HMODULE module; + DWORD required_size; + + process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid); + if (!process) + return FALSE; + + if (!EnumProcessModules(process, &module, sizeof(module), &required_size)) + { + CloseHandle(process); + return FALSE; + } + + if (!GetModuleBaseNameW(process, module, buf, chars)) + { + CloseHandle(process); + return FALSE; + } + + CloseHandle(process); + return TRUE; +} + +/* The implemented task enumeration and termination behavior does not + * exactly match native behavior. On Windows: + * + * In the case of terminating by process name, specifying a particular + * process name more times than the number of running instances causes + * all instances to be terminated, but termination failure messages to + * be printed as many times as the difference between the specification + * quantity and the number of running instances. + * + * Successful terminations are all listed first in order, with failing + * terminations being listed at the end. + * + * A PID of zero causes taskkill to warn about the inability to terminate + * system processes. */ +static int send_close_messages(void) +{ + DWORD *pid_list, pid_list_size; + DWORD self_pid = GetCurrentProcessId(); + unsigned int i; + int status_code = 0; + + pid_list = enumerate_processes(&pid_list_size); + if (!pid_list) + { + taskkill_message(STRING_ENUM_FAILED); + return 1; + } + + for (i = 0; i < task_count; i++) + { + WCHAR *p = task_list[i]; + BOOL is_numeric = TRUE; + + /* Determine whether the string is not numeric. */ + while (*p) + { + if (!isdigitW(*p++)) + { + is_numeric = FALSE; + break; + } + } + + if (is_numeric) + { + DWORD pid = atoiW(task_list[i]); + struct pid_close_info info = { pid }; + + if (pid == self_pid) + { + taskkill_message(STRING_SELF_TERMINATION); + status_code = 1; + continue; + } + + EnumWindows(pid_enum_proc, (LPARAM)&info); + if (info.found) + taskkill_message_printfW(STRING_CLOSE_PID_SEARCH, pid); + else + { + taskkill_message_printfW(STRING_SEARCH_FAILED, task_list[i]); + status_code = 128; + } + } + else + { + DWORD index; + BOOL found_process = FALSE; + + for (index = 0; index < pid_list_size; index++) + { + WCHAR process_name[MAX_PATH]; + + if (get_process_name_from_pid(pid_list[index], process_name, MAX_PATH) && + !strcmpiW(process_name, task_list[i])) + { + struct pid_close_info info = { pid_list[index] }; + + found_process = TRUE; + if (pid_list[index] == self_pid) + { + taskkill_message(STRING_SELF_TERMINATION); + status_code = 1; + continue; + } + + EnumWindows(pid_enum_proc, (LPARAM)&info); + taskkill_message_printfW(STRING_CLOSE_PROC_SRCH, process_name, pid_list[index]); + } + } + + if (!found_process) + { + taskkill_message_printfW(STRING_SEARCH_FAILED, task_list[i]); + status_code = 128; + } + } + } + + HeapFree(GetProcessHeap(), 0, pid_list); + return status_code; +} + +static int terminate_processes(void) +{ + DWORD *pid_list, pid_list_size; + DWORD self_pid = GetCurrentProcessId(); + unsigned int i; + int status_code = 0; + + pid_list = enumerate_processes(&pid_list_size); + if (!pid_list) + { + taskkill_message(STRING_ENUM_FAILED); + return 1; + } + + for (i = 0; i < task_count; i++) + { + WCHAR *p = task_list[i]; + BOOL is_numeric = TRUE; + + /* Determine whether the string is not numeric. */ + while (*p) + { + if (!isdigitW(*p++)) + { + is_numeric = FALSE; + break; + } + } + + if (is_numeric) + { + DWORD pid = atoiW(task_list[i]); + HANDLE process; + + if (pid == self_pid) + { + taskkill_message(STRING_SELF_TERMINATION); + status_code = 1; + continue; + } + + process = OpenProcess(PROCESS_TERMINATE, FALSE, pid); + if (!process) + { + taskkill_message_printfW(STRING_SEARCH_FAILED, task_list[i]); + status_code = 128; + continue; + } + + if (!TerminateProcess(process, 0)) + { + taskkill_message_printfW(STRING_TERMINATE_FAILED, task_list[i]); + status_code = 1; + CloseHandle(process); + continue; + } + + taskkill_message_printfW(STRING_TERM_PID_SEARCH, pid); + CloseHandle(process); + } + else + { + DWORD index; + BOOL found_process = FALSE; + + for (index = 0; index < pid_list_size; index++) + { + WCHAR process_name[MAX_PATH]; + + if (get_process_name_from_pid(pid_list[index], process_name, MAX_PATH) && + !strcmpiW(process_name, task_list[i])) + { + HANDLE process; + + if (pid_list[index] == self_pid) + { + taskkill_message(STRING_SELF_TERMINATION); + status_code = 1; + continue; + } + + process = OpenProcess(PROCESS_TERMINATE, FALSE, pid_list[index]); + if (!process) + { + taskkill_message_printfW(STRING_SEARCH_FAILED, task_list[i]); + status_code = 128; + continue; + } + + if (!TerminateProcess(process, 0)) + { + taskkill_message_printfW(STRING_TERMINATE_FAILED, task_list[i]); + status_code = 1; + CloseHandle(process); + continue; + } + + found_process = TRUE; + taskkill_message_printfW(STRING_TERM_PROC_SEARCH, task_list[i], pid_list[index]); + CloseHandle(process); + } + } + + if (!found_process) + { + taskkill_message_printfW(STRING_SEARCH_FAILED, task_list[i]); + status_code = 128; + } + } + } + + HeapFree(GetProcessHeap(), 0, pid_list); + return status_code; +} + +static BOOL add_to_task_list(WCHAR *name) +{ + static unsigned int list_size = 16; + + if (!task_list) + { + task_list = HeapAlloc(GetProcessHeap(), 0, + list_size * sizeof(*task_list)); + if (!task_list) + return FALSE; + } + else if (task_count == list_size) + { + void *realloc_list; + + list_size *= 2; + realloc_list = HeapReAlloc(GetProcessHeap(), 0, task_list, + list_size * sizeof(*task_list)); + if (!realloc_list) + return FALSE; + + task_list = realloc_list; + } + + task_list[task_count++] = name; + return TRUE; +} + +/* FIXME Argument processing does not match behavior observed on Windows. + * Stringent argument counting and processing is performed, and unrecognized + * options are detected as parameters when placed after options that accept one. */ +static BOOL process_arguments(int argc, WCHAR *argv[]) +{ + static const WCHAR slashForceTerminate[] = {'/','f',0}; + static const WCHAR slashImage[] = {'/','i','m',0}; + static const WCHAR slashPID[] = {'/','p','i','d',0}; + static const WCHAR slashHelp[] = {'/','?',0}; + static const WCHAR slashTerminateChildren[] = {'/','t',0}; + + if (argc > 1) + { + int i; + BOOL has_im = 0, has_pid = 0; + + /* Only the lone help option is recognized. */ + if (argc == 2 && !strcmpW(slashHelp, argv[1])) + { + taskkill_message(STRING_USAGE); + exit(0); + } + + for (i = 1; i < argc; i++) + { + int got_im = 0, got_pid = 0; + + if (!strcmpiW(slashTerminateChildren, argv[i])) + WINE_FIXME("/T not supported\n"); + if (!strcmpiW(slashForceTerminate, argv[i])) + force_termination = 1; + /* Options /IM and /PID appear to behave identically, except for + * the fact that they cannot be specified at the same time. */ + else if ((got_im = !strcmpiW(slashImage, argv[i])) || + (got_pid = !strcmpiW(slashPID, argv[i]))) + { + if (!argv[i + 1]) + { + taskkill_message_printfW(STRING_MISSING_PARAM, argv[i]); + taskkill_message(STRING_USAGE); + return FALSE; + } + + if (got_im) has_im = 1; + if (got_pid) has_pid = 1; + + if (has_im && has_pid) + { + taskkill_message(STRING_MUTUAL_EXCLUSIVE); + taskkill_message(STRING_USAGE); + return FALSE; + } + + if (!add_to_task_list(argv[i + 1])) + return FALSE; + i++; + } + else + { + taskkill_message(STRING_INVALID_OPTION); + taskkill_message(STRING_USAGE); + return FALSE; + } + } + } + else + { + taskkill_message(STRING_MISSING_OPTION); + taskkill_message(STRING_USAGE); + return FALSE; + } + + return TRUE; +} + +int wmain(int argc, WCHAR *argv[]) +{ + int status_code = 0; + + if (!process_arguments(argc, argv)) + { + HeapFree(GetProcessHeap(), 0, task_list); + return 1; + } + + if (force_termination) + status_code = terminate_processes(); + else + status_code = send_close_messages(); + + HeapFree(GetProcessHeap(), 0, task_list); + return status_code; +} diff --git a/base/applications/cmdutils/taskkill/taskkill.h b/base/applications/cmdutils/taskkill/taskkill.h new file mode 100644 index 00000000000..7972a156f3c --- /dev/null +++ b/base/applications/cmdutils/taskkill/taskkill.h @@ -0,0 +1,37 @@ +/* + * Task termination utility private definitions + * + * Copyright 2010 Andrew Nguyen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +/* Translation IDs. */ +#define STRING_USAGE 101 +#define STRING_INVALID_OPTION 102 +#define STRING_INVALID_PARAM 103 +#define STRING_MISSING_OPTION 104 +#define STRING_MISSING_PARAM 105 +#define STRING_MUTUAL_EXCLUSIVE 106 +#define STRING_CLOSE_PID_SEARCH 107 +#define STRING_CLOSE_PROC_SRCH 108 +#define STRING_TERM_PID_SEARCH 109 +#define STRING_TERM_PROC_SEARCH 110 +#define STRING_SEARCH_FAILED 111 +#define STRING_ENUM_FAILED 112 +#define STRING_TERMINATE_FAILED 113 +#define STRING_SELF_TERMINATION 114 diff --git a/base/applications/cmdutils/taskkill/taskkill.rc b/base/applications/cmdutils/taskkill/taskkill.rc new file mode 100644 index 00000000000..ddaeda84938 --- /dev/null +++ b/base/applications/cmdutils/taskkill/taskkill.rc @@ -0,0 +1,41 @@ +/* + * Task termination utility + * + * Copyright 2010 Andrew Nguyen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "taskkill.h" + +LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT + +STRINGTABLE +{ + STRING_USAGE, "Usage: taskkill [/?] [/f] [/im ProcessName | /pid ProcessID]\n" + STRING_INVALID_OPTION, "Error: Unknown or invalid command line option specified.\n" + STRING_INVALID_PARAM, "Error: Invalid command line parameter specified.\n" + STRING_MISSING_OPTION, "Error: One of options /im or /pid must be specified.\n" + STRING_MISSING_PARAM, "Error: Option %1 expects a command line parameter.\n" + STRING_MUTUAL_EXCLUSIVE, "Error: Options /im and /pid are mutually exclusive.\n" + STRING_CLOSE_PID_SEARCH, "Close message sent to top-level windows of process with PID %1!u!.\n" + STRING_CLOSE_PROC_SRCH, "Close message sent to top-level windows of process ""%1"" with PID %2!u!.\n" + STRING_TERM_PID_SEARCH, "Process with PID %1!u! was forcibly terminated.\n" + STRING_TERM_PROC_SEARCH, "Process ""%1"" with PID %2!u! was forcibly terminated.\n" + STRING_SEARCH_FAILED, "Error: Could not find process ""%1"".\n" + STRING_ENUM_FAILED, "Error: Unable to enumerate the process list.\n" + STRING_TERMINATE_FAILED, "Error: Unable to terminate process ""%1"".\n" + STRING_SELF_TERMINATION, "Error: Process self-termination is not permitted.\n" +} diff --git a/base/applications/fontview/display.c b/base/applications/fontview/display.c index 924d6106b5b..b260d603891 100644 --- a/base/applications/fontview/display.c +++ b/base/applications/fontview/display.c @@ -88,7 +88,7 @@ Display_DrawText(HDC hDC, DISPLAYDATA* pData, int nYPos) GetTextMetrics(hDC, &tm); swprintf(szCaption, L"%s%s", pData->szTypeFaceName, pData->szFormat); - TextOutW(hDC, 0, y, szCaption, wcslen(szCaption)); + TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption)); y += tm.tmHeight + SPACING1; /* Draw a seperation Line */ @@ -103,15 +103,15 @@ Display_DrawText(HDC hDC, DISPLAYDATA* pData, int nYPos) SelectObject(hDC, pData->hCharSetFont); GetTextMetrics(hDC, &tm); swprintf(szCaption, L"abcdefghijklmnopqrstuvwxyz"); - TextOutW(hDC, 0, y, szCaption, wcslen(szCaption)); + TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption)); y += tm.tmHeight + 1; swprintf(szCaption, L"ABCDEFGHIJKLMNOPQRSTUVWXYZ"); - TextOutW(hDC, 0, y, szCaption, wcslen(szCaption)); + TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption)); y += tm.tmHeight + 1; swprintf(szCaption, L"0123456789.:,;(\"~!@#$%^&*')"); - TextOutW(hDC, 0, y, szCaption, wcslen(szCaption)); + TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption)); y += tm.tmHeight + 1; /* Draw a seperation Line */ @@ -124,18 +124,40 @@ Display_DrawText(HDC hDC, DISPLAYDATA* pData, int nYPos) for (i = 0; i < MAX_SIZES; i++) { SelectObject(hDC, pData->hFonts[i]); - TextOutW(hDC, 20, y, pData->szString, wcslen(pData->szString)); + TextOutW(hDC, 20, y, pData->szString, (INT)wcslen(pData->szString)); GetTextMetrics(hDC, &tm); y += tm.tmHeight + 1; SelectObject(hDC, pData->hSizeFont); swprintf(szSize, L"%d", pData->nSizes[i]); - TextOutW(hDC, 0, y - 13 - tm.tmDescent, szSize, wcslen(szSize)); + TextOutW(hDC, 0, y - 13 - tm.tmDescent, szSize, (INT)wcslen(szSize)); } SelectObject(hDC, hOldFont); return y; } +static int +CALLBACK +EnumFontFamProcW( + const LOGFONTW *lpelfe, + const TEXTMETRICW *lptm, + DWORD FontType, + LPARAM lParam) +{ + PNEWTEXTMETRICW pntmw = (PNEWTEXTMETRICW)lptm; + PBOOL pfOpenType = (PBOOL)lParam; + + if (FontType & TRUETYPE_FONTTYPE) + { + if (pntmw->ntmFlags & (NTM_TT_OPENTYPE | NTM_PS_OPENTYPE)) + { + *pfOpenType = TRUE; + return FALSE; + } + } + return TRUE; +} + static LRESULT Display_SetTypeFace(HWND hwnd, PEXTLOGFONTW pExtLogFont) { @@ -160,12 +182,27 @@ Display_SetTypeFace(HWND hwnd, PEXTLOGFONTW pExtLogFont) pData->hCharSetFont = CreateFontIndirectW(&logfont); /* Get font format */ - // FIXME: Get the real font format (OpenType?) SelectObject(hDC, pData->hCharSetFont); GetTextMetrics(hDC, &tm); - if ((tm.tmPitchAndFamily & TMPF_TRUETYPE) == TMPF_TRUETYPE) + if (tm.tmPitchAndFamily & TMPF_TRUETYPE) { - swprintf(pData->szFormat, L" (TrueType)"); + BOOL fOpenType = FALSE; + + EnumFontFamiliesExW(hDC, &logfont, + EnumFontFamProcW, (LPARAM)&fOpenType, 0); + + if (fOpenType) + swprintf(pData->szFormat, L" (OpenType)"); + else + swprintf(pData->szFormat, L" (TrueType)"); + } + else if (tm.tmPitchAndFamily & TMPF_VECTOR) + { + swprintf(pData->szFormat, L" (Vector)"); + } + else + { + swprintf(pData->szFormat, L" (Raster)"); } for (i = 0; i < MAX_SIZES; i++) @@ -381,7 +418,7 @@ Display_OnPrint(HWND hwnd) TEXTMETRIC tm; int copies, yPos; DISPLAYDATA* pData; - + pData = malloc(sizeof(DISPLAYDATA)); ZeroMemory(pData, sizeof(DISPLAYDATA)); diff --git a/base/applications/fontview/fontview.c b/base/applications/fontview/fontview.c index 36f1d41ab71..4deea84a424 100644 --- a/base/applications/fontview/fontview.c +++ b/base/applications/fontview/fontview.c @@ -104,14 +104,14 @@ WinMain (HINSTANCE hThisInstance, OPENFILENAMEW fontOpen; WCHAR szFileName[MAX_PATH] = L""; HLOCAL dialogTitle = NULL; - + /* Gets the title for the dialog box ready */ FormatString(FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, IDS_OPEN, 0, (LPWSTR)&dialogTitle, 0, NULL); - + /* Clears out any values of fontOpen before we use it */ ZeroMemory(&fontOpen, sizeof(fontOpen)); - + /* Sets up the open dialog box */ fontOpen.lStructSize = sizeof(fontOpen); fontOpen.hwndOwner = NULL; @@ -122,7 +122,7 @@ WinMain (HINSTANCE hThisInstance, fontOpen.nMaxFile = MAX_PATH; fontOpen.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; fontOpen.lpstrDefExt = L"ttf"; - + /* Opens up the Open File dialog box in order to chose a font file. */ if(GetOpenFileNameW(&fontOpen)) { @@ -133,7 +133,7 @@ WinMain (HINSTANCE hThisInstance, exiting the program altogether */ return 0; } - + LocalFree(dialogTitle); } else @@ -142,7 +142,7 @@ WinMain (HINSTANCE hThisInstance, fileName = argv[1]; g_fileName = fileName; } - + if (!AddFontResourceW(fileName)) { ErrorMsgBox(0, IDS_ERROR, IDS_ERROR_NOFONT, fileName); @@ -221,7 +221,7 @@ WinMain (HINSTANCE hThisInstance, RemoveFontResourceW(argv[1]); - return msg.wParam; + return (int)msg.wParam; } static LRESULT @@ -326,7 +326,7 @@ static LRESULT MainWnd_OnInstall(HWND hwnd) { DWORD fontExists; - + /* First, we have to find out if the font still exists. */ fontExists = GetFileAttributes((LPCSTR)g_fileName); if (fontExists != 0xFFFFFFFF) /* If the file does not exist */ @@ -334,11 +334,11 @@ MainWnd_OnInstall(HWND hwnd) ErrorMsgBox(0, IDS_ERROR, IDS_ERROR_NOFONT, g_fileName); return -1; } - + //CopyFile(g_fileName, NULL, TRUE); - + MessageBox(hwnd, TEXT("This function is unimplemented"), TEXT("Unimplemented"), MB_OK); - + return 0; } diff --git a/base/applications/games/solitaire/lang/en-US.rc b/base/applications/games/solitaire/lang/en-US.rc index c9e8f72681f..703c4decb32 100644 --- a/base/applications/games/solitaire/lang/en-US.rc +++ b/base/applications/games/solitaire/lang/en-US.rc @@ -5,6 +5,7 @@ * PURPOSE: English Language File for Solitaire * PROGRAMMERS: Daniel "EmuandCo" Reimer (reimer.daniel@freenet.de) */ + LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US diff --git a/base/applications/games/solitaire/lang/he-IL.rc b/base/applications/games/solitaire/lang/he-IL.rc index 7e4573e970c..2fad33df065 100644 --- a/base/applications/games/solitaire/lang/he-IL.rc +++ b/base/applications/games/solitaire/lang/he-IL.rc @@ -20,7 +20,7 @@ BEGIN AUTORADIOBUTTON "משוך &אחד", IDC_OPT_DRAWONE, 14, 19, 70, 10, WS_GROUP | WS_TABSTOP AUTORADIOBUTTON "משוך &שלושה", IDC_OPT_DRAWTHREE, 14, 32, 70, 10 - AUTOCHECKBOX "משחק קצוב בזמן", IDC_OPT_SHOWTIME, 7 ,51 ,65 ,10, WS_TABSTOP | WS_DISABLED + AUTOCHECKBOX "משחק קצוב בזמן", IDC_OPT_SHOWTIME, 7 ,51 ,72 ,10, WS_TABSTOP | WS_DISABLED AUTOCHECKBOX "שורת מצב", IDC_OPT_STATUSBAR, 7, 66, 64, 10, WS_TABSTOP DEFPUSHBUTTON "אישור", IDOK, 35, 97, 50, 14 diff --git a/base/applications/games/solitaire/lang/tr-TR.rc b/base/applications/games/solitaire/lang/tr-TR.rc new file mode 100644 index 00000000000..8029aff7726 --- /dev/null +++ b/base/applications/games/solitaire/lang/tr-TR.rc @@ -0,0 +1,94 @@ +/* + * PROJECT: Solitaire + * LICENSE: Freeware, permission to use under Public Domain + * FILE: base/applications/games/solitaire/lang/tr-TR.rc + * PURPOSE: Turkish Language File for Solitaire + * PROGRAMMERS: Daniel "EmuandCo" Reimer (reimer.daniel@freenet.de) + * TRANSLATOR: Erdem Ersoy (eersoy93) + */ + +LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT + + +/* Dialogs */ + +IDD_OPTIONS DIALOGEX DISCARDABLE 0, 0, 186, 118 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT +CAPTION "Ayarlar" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Kağıtlar", -1, 7, 7, 90, 40 + AUTORADIOBUTTON "&Tekli çek", IDC_OPT_DRAWONE, 14, 19, 70, 10, WS_GROUP | WS_TABSTOP + AUTORADIOBUTTON "&Üçlü çek", IDC_OPT_DRAWTHREE, 14, 32, 70, 10 + + AUTOCHECKBOX "&Süreyi göster", IDC_OPT_SHOWTIME, 7 ,51 ,65 ,10, WS_TABSTOP | WS_DISABLED + AUTOCHECKBOX "&Durum çubuğu", IDC_OPT_STATUSBAR, 7, 66, 64, 10, WS_TABSTOP + + DEFPUSHBUTTON "Tamam", IDOK, 35, 97, 50, 14 + PUSHBUTTON "Vazgeç", IDCANCEL, 101, 97, 50, 14 +END + + +IDD_CARDBACK DIALOGEX 6, 6, 186, 104 +CAPTION "Deste Seç" +FONT 8, "MS Shell Dlg" +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT +BEGIN + CONTROL "", IDC_CARDBACK1, "Static", SS_NOTIFY, 4, 7, 26, 32 + CONTROL "", IDC_CARDBACK2, "Static", SS_NOTIFY, 34, 7, 26, 32 + CONTROL "", IDC_CARDBACK3, "Static", SS_NOTIFY, 64, 7, 26, 32 + CONTROL "", IDC_CARDBACK4, "Static", SS_NOTIFY, 94, 7, 26, 32 + CONTROL "", IDC_CARDBACK5, "Static", SS_NOTIFY, 124, 7, 26, 32 + CONTROL "", IDC_CARDBACK6, "Static", SS_NOTIFY, 154, 7, 26, 32 + CONTROL "", IDC_CARDBACK7, "Static", SS_NOTIFY, 4, 46, 26, 32 + CONTROL "", IDC_CARDBACK8, "Static", SS_NOTIFY, 34, 46, 26, 32 + CONTROL "", IDC_CARDBACK9, "Static", SS_NOTIFY, 64, 46, 26, 32 + CONTROL "", IDC_CARDBACK10, "Static", SS_NOTIFY, 94, 46, 26, 32 + CONTROL "", IDC_CARDBACK11, "Static", SS_NOTIFY, 124, 46, 26, 32 + CONTROL "", IDC_CARDBACK12, "Static", SS_NOTIFY, 154, 46, 26, 32 + DEFPUSHBUTTON "Tamam", IDOK, 66, 84, 54, 13 + PUSHBUTTON "Vazgeç", IDCANCEL, 126, 84, 54, 13 +END + + +/* Strings */ + +STRINGTABLE +BEGIN + IDS_SOL_NAME "Solitaire" + IDS_SOL_ABOUT "Solitaire, J Brown tarafından yapılmıştır.\n\nCardLib sürümü: 1.0" + IDS_SOL_QUIT "Bu oyundan çıkmak ister misiniz?" + IDS_SOL_WIN "Tebrikler, kazandınız!" + IDS_SOL_DEAL "Tekrar dağıtılsın mı?" +END + + +/* Menus */ + +IDR_MENU1 MENU DISCARDABLE +BEGIN + POPUP "&Oyun" + BEGIN + MENUITEM "&Dağıt\tF2", IDM_GAME_NEW + MENUITEM SEPARATOR + MENUITEM "D&esteler", IDM_GAME_DECK + MENUITEM "&Ayarlar", IDM_GAME_OPTIONS + MENUITEM SEPARATOR + MENUITEM "&Çıkış", IDM_GAME_EXIT + END + POPUP "&Yardım" + BEGIN + MENUITEM "&İçerik\tF1", IDM_HELP_CONTENTS + MENUITEM "&Hakkında", IDM_HELP_ABOUT + END +END + + + +/* Accelerator */ + +IDR_ACCELERATOR1 ACCELERATORS DISCARDABLE +BEGIN + VK_F1, IDM_HELP_CONTENTS, VIRTKEY, NOINVERT + VK_F2, IDM_GAME_NEW, VIRTKEY, NOINVERT +END diff --git a/base/applications/games/solitaire/rsrc.rc b/base/applications/games/solitaire/rsrc.rc index e82509fa55c..1a44a52445f 100644 --- a/base/applications/games/solitaire/rsrc.rc +++ b/base/applications/games/solitaire/rsrc.rc @@ -81,6 +81,9 @@ IDI_SOLITAIRE ICON DISCARDABLE "solitaire.ico" #ifdef LANGUAGE_TH_TH #include "lang/th-TH.rc" #endif +#ifdef LANGUAGE_TR_TR + #include "lang/tr-TR.rc" +#endif #ifdef LANGUAGE_UK_UA #include "lang/uk-UA.rc" #endif diff --git a/base/applications/games/spider/lang/tr-TR.rc b/base/applications/games/spider/lang/tr-TR.rc new file mode 100644 index 00000000000..9b14a2ae32b --- /dev/null +++ b/base/applications/games/spider/lang/tr-TR.rc @@ -0,0 +1,86 @@ +/* + * PROJECT: Spider Solitaire + * LICENSE: See COPYING in top level directory + * FILE: base/applications/games/spider/lang/tr-TR.rc + * PURPOSE: Turkish Language File for Spider Solitaire + * TRANSLATOR: Erdem Ersoy (eersoy93) + */ + +LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT + +/* Dialogs */ + +IDD_CARDBACK DIALOGEX 6, 6, 186, 104 +CAPTION "Deste Seç" +FONT 8, "MS Shell Dlg" +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT +BEGIN + CONTROL "", IDC_CARDBACK1, "Static", SS_NOTIFY, 4, 7, 26, 32 + CONTROL "", IDC_CARDBACK2, "Static", SS_NOTIFY, 34, 7, 26, 32 + CONTROL "", IDC_CARDBACK3, "Static", SS_NOTIFY, 64, 7, 26, 32 + CONTROL "", IDC_CARDBACK4, "Static", SS_NOTIFY, 94, 7, 26, 32 + CONTROL "", IDC_CARDBACK5, "Static", SS_NOTIFY, 124, 7, 26, 32 + CONTROL "", IDC_CARDBACK6, "Static", SS_NOTIFY, 154, 7, 26, 32 + CONTROL "", IDC_CARDBACK7, "Static", SS_NOTIFY, 4, 46, 26, 32 + CONTROL "", IDC_CARDBACK8, "Static", SS_NOTIFY, 34, 46, 26, 32 + CONTROL "", IDC_CARDBACK9, "Static", SS_NOTIFY, 64, 46, 26, 32 + CONTROL "", IDC_CARDBACK10, "Static", SS_NOTIFY, 94, 46, 26, 32 + CONTROL "", IDC_CARDBACK11, "Static", SS_NOTIFY, 124, 46, 26, 32 + CONTROL "", IDC_CARDBACK12, "Static", SS_NOTIFY, 154, 46, 26, 32 + DEFPUSHBUTTON "Tamam", IDOK, 66, 84, 54, 13 + PUSHBUTTON "Vazgeç", IDCANCEL, 126, 84, 54, 13 +END + +IDD_DIFFICULTY DIALOGEX DISCARDABLE 100, 100, 106, 80 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT +CAPTION "Zorluk" +FONT 8, "MS Shell Dlg" +BEGIN + AUTORADIOBUTTON "Kolay: &Tek renk", IDC_DIF_ONECOLOR, 8, 10, 80, 10, WS_GROUP | WS_TABSTOP + AUTORADIOBUTTON "Orta: &İki renk", IDC_DIF_TWOCOLORS, 8, 23, 80, 10 + AUTORADIOBUTTON "Zor: &Dört Renk", IDC_DIF_FOURCOLORS, 8, 36, 80, 10 + + DEFPUSHBUTTON "Tamam", IDOK, 8, 58, 40, 14 + PUSHBUTTON "Vazgeç", IDCANCEL, 58, 58, 40, 14 +END + +/* Strings */ + +STRINGTABLE +BEGIN + IDS_SPI_NAME "Spider" + IDS_SPI_ABOUT "Spider Solitaire Gregor Schneider tarafından yapılmıştır.\n\nCardLib sürümü: 1.0" + IDS_SPI_QUIT "Bu oyundan çıkmak ister misiniz?" + IDS_SPI_WIN "Tebrikler, kazandınız!" + IDS_SPI_DEAL "Tekrar dağıtılsın mı?" +END + + +/* Menus */ + +IDR_MENU1 MENU DISCARDABLE +BEGIN + POPUP "&Oyun" + BEGIN + MENUITEM "&Yeni oyun\tF2", IDM_GAME_NEW + MENUITEM SEPARATOR + MENUITEM "&Desteler", IDM_GAME_DECK + MENUITEM SEPARATOR + MENUITEM "&Çıkış", IDM_GAME_EXIT + END + POPUP "&Yardım" + BEGIN + MENUITEM "&İçerik\tF1", IDM_HELP_CONTENTS + MENUITEM "&Hakkında", IDM_HELP_ABOUT + END +END + + + +/* Accelerator */ + +IDR_ACCELERATOR1 ACCELERATORS DISCARDABLE +BEGIN + VK_F1, IDM_HELP_CONTENTS, VIRTKEY, NOINVERT + VK_F2, IDM_GAME_NEW, VIRTKEY, NOINVERT +END diff --git a/base/applications/games/spider/rsrc.rc b/base/applications/games/spider/rsrc.rc index f07991458fe..c87dc29c4f4 100644 --- a/base/applications/games/spider/rsrc.rc +++ b/base/applications/games/spider/rsrc.rc @@ -57,6 +57,9 @@ IDI_SPIDER ICON DISCARDABLE "spider.ico" #ifdef LANGUAGE_SV_SE #include "lang/sv-SE.rc" #endif +#ifdef LANGUAGE_TR_TR + #include "lang/tr-TR.rc" +#endif #ifdef LANGUAGE_UK_UA #include "lang/uk-UA.rc" #endif diff --git a/base/applications/games/winmine/lang/he-IL.rc b/base/applications/games/winmine/lang/he-IL.rc index 4ad084872f3..aaddc4c40dd 100644 --- a/base/applications/games/winmine/lang/he-IL.rc +++ b/base/applications/games/winmine/lang/he-IL.rc @@ -35,7 +35,7 @@ BEGIN POPUP "&אפשרויות" BEGIN MENUITEM "&חדש\tF2", IDM_NEW MENUITEM SEPARATOR - MENUITEM "&Mark Question", IDM_MARKQ // to be invented + MENUITEM "סימון בשאלה", IDM_MARKQ // to be invented MENUITEM SEPARATOR MENUITEM "&מתחיל", IDM_BEGINNER MENUITEM "מ&תקדם", IDM_ADVANCED diff --git a/base/applications/games/winmine/lang/tr-TR.rc b/base/applications/games/winmine/lang/tr-TR.rc index 2d3e78accec..3c2dcad1ffa 100644 --- a/base/applications/games/winmine/lang/tr-TR.rc +++ b/base/applications/games/winmine/lang/tr-TR.rc @@ -2,7 +2,8 @@ * WineMine * Turkish Language Support * - * Copyright 2006 Fatih Aþýcý + * Copyright 2006 Fatih Aşıcı + * Copyright 2013 Erdem Ersoy (eersoy93) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -22,40 +23,40 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT STRINGTABLE BEGIN - IDS_APPNAME, "Wine Mayýn Tarlasý" + IDS_APPNAME, "Wine Mayın Tarlası" IDS_NOBODY, "Hiç kimse" - IDS_ABOUT, "Telif hakký 2000, Joshua Thielen" + IDS_ABOUT, "Telif hakkı: Joshua Thielen, 2000" END MENU_WINEMINE MENU BEGIN POPUP "&Seçenekler" BEGIN - MENUITEM "&Yeni\tF2", IDM_NEW + MENUITEM "&Yeni\tF2", IDM_NEW MENUITEM SEPARATOR - MENUITEM "&Soru Ýþareti", IDM_MARKQ + MENUITEM "&Soru İmi", IDM_MARKQ MENUITEM SEPARATOR - MENUITEM "&Acemi", IDM_BEGINNER - MENUITEM "&Geliþmiþ", IDM_ADVANCED - MENUITEM "&Uzman", IDM_EXPERT - MENUITEM "&Özel", IDM_CUSTOM + MENUITEM "&Başlangıç", IDM_BEGINNER + MENUITEM "&Orta", IDM_ADVANCED + MENUITEM "&İleri", IDM_EXPERT + MENUITEM "&Özel", IDM_CUSTOM MENUITEM SEPARATOR - MENUITEM "&Çýkýþ\tAlt+X", IDM_EXIT + MENUITEM "&Çıkış\tAlt+X", IDM_EXIT END POPUP "&Bilgi" BEGIN - MENUITEM "&En Kýsa Süreler", IDM_TIMES - MENUITEM "&Hakkýnda", IDM_ABOUT + MENUITEM "&En Kısa Süreler", IDM_TIMES + MENUITEM "&Hakkında", IDM_ABOUT END END DLG_TIMES DIALOGEX 0, 0, 160, 80 STYLE DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP | DS_SHELLFONT -CAPTION "En Kýsa Süreler" +CAPTION "En Kısa Süreler" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "En Kýsa Süreler", -1, 10, 10, 140, 45 - LTEXT "Acemi", -1, 20, 20, 40, 8 - LTEXT "Geliþmiþ", -1, 20, 30, 40, 8 - LTEXT "Uzman", -1, 20, 40, 40, 8 + GROUPBOX "En Kısa Süreler", -1, 10, 10, 140, 45 + LTEXT "Başlangıç", -1, 20, 20, 40, 8 + LTEXT "Orta", -1, 20, 30, 40, 8 + LTEXT "İleri", -1, 20, 40, 40, 8 LTEXT "999", IDC_TIME1, 70, 20, 15, 8 LTEXT "999", IDC_TIME2, 70, 30, 15, 8 LTEXT "999", IDC_TIME3, 70, 40, 15, 8 @@ -70,9 +71,9 @@ STYLE DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP | DS_SHEL CAPTION "Tebrikler!" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Lütfen adýnýzý girin", -1, 10, 10, 150, 10 + LTEXT "Lütfen adınızı giriniz:", -1, 10, 10, 150, 10 EDITTEXT IDC_EDITNAME, 25, 20, 110, 12 - DEFPUSHBUTTON "Tamam", IDOK, 60, 40, 40, 15 + DEFPUSHBUTTON "Tamam", IDOK, 60, 40, 40, 15 END DLG_CUSTOM DIALOGEX 0, 0, 100, 100 @@ -80,12 +81,12 @@ STYLE DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP | DS_SHEL CAPTION "Özel Oyun" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Satýrlar", -1, 5, 5, 30, 10 + LTEXT "Satırlar", -1, 5, 5, 30, 10 LTEXT "Sütunlar", -1, 5, 35, 30, 10 - LTEXT "Mayýnlar", -1, 5, 65, 30, 10 + LTEXT "Mayınlar", -1, 5, 65, 30, 10 EDITTEXT IDC_EDITROWS, 5, 15, 20, 12, ES_NUMBER EDITTEXT IDC_EDITCOLS, 5, 45, 20, 12, ES_NUMBER EDITTEXT IDC_EDITMINES, 5, 75, 20, 12, ES_NUMBER - DEFPUSHBUTTON "Tamam", IDOK, 40, 30, 50, 15 - PUSHBUTTON "Ýptal", IDCANCEL, 40, 50, 50, 15 + DEFPUSHBUTTON "Tamam", IDOK, 40, 30, 50, 15 + PUSHBUTTON "Vazgeç", IDCANCEL, 40, 50, 50, 15 END diff --git a/base/applications/games/winmine/lang/uk-UA.rc b/base/applications/games/winmine/lang/uk-UA.rc index f9e0f5bbd8e..6c34054d7ca 100644 --- a/base/applications/games/winmine/lang/uk-UA.rc +++ b/base/applications/games/winmine/lang/uk-UA.rc @@ -1,4 +1,3 @@ -/* /* * WineMine * Ukrainian Language Support diff --git a/base/applications/msconfig/lang/he-IL.rc b/base/applications/msconfig/lang/he-IL.rc index 7e9977dbf69..f884ee23a77 100644 --- a/base/applications/msconfig/lang/he-IL.rc +++ b/base/applications/msconfig/lang/he-IL.rc @@ -66,10 +66,10 @@ STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "בחירת אתחול", -1, 10, 10, 340, 150,0,WS_EX_TRANSPARENT - CONTROL "אתחול רגיל - טען את כל מנהלי ההתקנים והשירותים", IDC_CBX_NORMAL_START, "Button", 0x50010009, 20, 30, 180, 10 + CONTROL "אתחול רגיל - טען את כל מנהלי ההתקנים והשירותים", IDC_CBX_NORMAL_START, "Button", 0x50010009, 20, 30, 191, 10 CONTROL "אתחול מאבחן - טען התקנים ושירותים בסיסיים בלבד", IDC_CBX_DIAGNOSTIC_START, "Button", 0x50010009, 20, 45, 195, 10 CONTROL "אתחול סלקטיבי", IDC_CBX_SELECTIVE_STARTUP, "Button", 0x50010009, 20, 60, 70, 10 - AUTOCHECKBOX "עבד את הקובץ SYSTEM.INI", IDC_CBX_SYSTEM_INI, 30, 80, 95, 10 + AUTOCHECKBOX "עבד את הקובץ SYSTEM.INI", IDC_CBX_SYSTEM_INI, 30, 80, 105, 10 AUTOCHECKBOX "&טען שירותי מערכת", IDC_CBX_SYSTEM_SERVICE, 30, 95, 90, 10 AUTOCHECKBOX "טען פריטי אתחול", IDC_CBX_STARTUP_ITEM, 30, 110, 75, 10 END @@ -79,8 +79,8 @@ STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN FONT 8, "MS Shell Dlg" BEGIN LISTBOX IDC_LIST_BOX, 10, 10, 340, 50, WS_CHILD | WS_VISIBLE | WS_TABSTOP | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL - PUSHBUTTON "&בדוק את כל נתיבי האתחול", IDC_BTN_CHECK_BOOT_PATH, 10, 65, 70, 12 - PUSHBUTTON "&קבע כברירת מחדל", IDC_BTN_SET_DEFAULT_BOOT, 100, 65, 70, 12 + PUSHBUTTON "&בדוק את כל נתיבי האתחול", IDC_BTN_CHECK_BOOT_PATH, 114, 65, 97, 12 + PUSHBUTTON "&קבע כברירת מחדל", IDC_BTN_SET_DEFAULT_BOOT, 198, 65, 70, 12 PUSHBUTTON "הזז למעלה", IDC_BTN_MOVE_UP_BOOT_OPTION, 190, 65, 70, 12 PUSHBUTTON "הזז למטה", IDC_BTN_MOVE_DOWN_BOOT_OPTION, 280, 65, 70, 12 GROUPBOX "אפשרויות אתחול", -1, 10, 80, 250, 90,0,WS_EX_TRANSPARENT @@ -91,8 +91,8 @@ BEGIN CHECKBOX "/S&OS", IDC_CBX_SOS, 15, 150, 50, 10 PUSHBUTTON "&אפשרויות מתקדמות", IDC_BTN_ADVANCED_OPTIONS, 100, 150, 70, 12 LTEXT "זמן קצוב:", -1, 280, 91, 30, 10 - EDITTEXT IDC_TXT_BOOT_TIMEOUT, 310, 90, 25, 12, ES_LEFT - LTEXT "שניות", -1, 340, 91, 15, 10 + EDITTEXT IDC_TXT_BOOT_TIMEOUT, 303, 90, 25, 12, ES_LEFT + LTEXT "שניות", -1, 330, 91, 21, 10 END IDD_FREELDR_ADVANCED_PAGE DIALOGEX DISCARDABLE 0, 0, 175, 175 diff --git a/base/applications/mscutils/eventvwr/lang/he-IL.rc b/base/applications/mscutils/eventvwr/lang/he-IL.rc index 60bc09dfbdc..23bcefd010a 100644 --- a/base/applications/mscutils/eventvwr/lang/he-IL.rc +++ b/base/applications/mscutils/eventvwr/lang/he-IL.rc @@ -50,10 +50,10 @@ END IDD_PROGRESSBOX DIALOGEX 0, 0, 230, 40 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER -CAPTION "חכה.." +CAPTION "נא להמתין..." FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - CTEXT "טוען יומני אירועים. נא לחכות...",IDC_STATIC,0,15,230,8,SS_NOPREFIX + CTEXT "טוען יומני אירועים, נא להמתין...",IDC_STATIC,0,15,230,8,SS_NOPREFIX END IDD_EVENTDETAILDIALOG DIALOGEX 0, 0, 276, 282 diff --git a/base/applications/mscutils/servman/lang/he-IL.rc b/base/applications/mscutils/servman/lang/he-IL.rc index 9dc7d24cb7d..6516c0c8ef5 100644 --- a/base/applications/mscutils/servman/lang/he-IL.rc +++ b/base/applications/mscutils/servman/lang/he-IL.rc @@ -148,29 +148,29 @@ BEGIN END IDD_DLG_DEPEND_STOP DIALOGEX 6,6,240,148 -CAPTION "Stop Other Services" +CAPTION "עצירת שירותים אחרים" FONT 8, "MS Shell Dlg",0,0 STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | DS_MODALFRAME BEGIN ICON IDI_WARNING, IDC_STATIC, 10, 8, 24, 22 LTEXT "", IDC_STOP_DEPENDS, 40, 8, 170, 25 LISTBOX IDC_STOP_DEPENDS_LB, 15, 40, 210, 70, WS_CHILD | WS_VISIBLE | WS_EX_STATICEDGE | LBS_NOSEL - LTEXT "Do you want to stop these services?",IDC_STATIC, 15, 110, 150, 10 - DEFPUSHBUTTON "Yes", IDOK, 60, 129, 54, 14 - PUSHBUTTON "No", IDCANCEL, 120, 129, 54, 14 + LTEXT "האם ברצונך לעצור את השירותים הבאים?",IDC_STATIC, 15, 110, 150, 10 + DEFPUSHBUTTON "כן", IDOK, 60, 129, 54, 14 + PUSHBUTTON "לא", IDCANCEL, 120, 129, 54, 14 END IDD_DLG_HELP_OPTIONS DIALOGEX 6,6,200,150 -CAPTION "Options" +CAPTION "אפשרויות" FONT 8, "MS Shell Dlg",0,0 STYLE 0x10CF0000 BEGIN LTEXT "", IDC_CREATE_HELP, 6, 5, 200, 150 - PUSHBUTTON "Ok", IDOK, 75, 130, 44, 13 + PUSHBUTTON "אישור", IDOK, 75, 130, 44, 13 END IDD_DLG_PROGRESS DIALOGEX 6,6,255,89 -CAPTION "Service Control" +CAPTION "בקרת שירות" FONT 8, "MS Shell Dlg",0,0 STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | WS_VISIBLE | DS_MODALFRAME EXSTYLE WS_EX_TOOLWINDOW @@ -178,48 +178,48 @@ BEGIN CONTROL "", IDC_SERVCON_PROGRESS, "msctls_progress32", 0x50000000, 8, 46, 238, 13 LTEXT "", IDC_SERVCON_INFO, 8, 5, 236, 11 LTEXT "", IDC_SERVCON_NAME, 8, 25, 66, 11 - PUSHBUTTON "&Close", IDOK, 100, 70, 54, 13 + PUSHBUTTON "סגור", IDOK, 100, 70, 54, 13 END STRINGTABLE DISCARDABLE BEGIN - IDS_FIRSTCOLUMN "Name" - IDS_SECONDCOLUMN "Description" - IDS_THIRDCOLUMN "Status" - IDS_FOURTHCOLUMN "Startup Type" - IDS_FITHCOLUMN "Log On As" + IDS_FIRSTCOLUMN "שם" + IDS_SECONDCOLUMN "תיאור" + IDS_THIRDCOLUMN "מצב" + IDS_FOURTHCOLUMN "סוג הפעלה" + IDS_FITHCOLUMN "התחבר כ" END STRINGTABLE DISCARDABLE BEGIN - IDS_SERVICES_STARTED "Started" - IDS_SERVICES_STOPPED "Stopped" - IDS_SERVICES_AUTO "Automatic" - IDS_SERVICES_MAN "Manual" - IDS_SERVICES_DIS "Disabled" + IDS_SERVICES_STARTED "הופעל" + IDS_SERVICES_STOPPED "נעצר" + IDS_SERVICES_AUTO "אוטומטי" + IDS_SERVICES_MAN "ידני" + IDS_SERVICES_DIS "הופסק" END STRINGTABLE DISCARDABLE BEGIN - IDS_NUM_SERVICES "Num Services: %d" - IDS_STOP_DEPENDS "When %s stops, these other services will also stop" - IDS_NO_DEPENDS "" + IDS_NUM_SERVICES "מספר השירותים: %d" + IDS_STOP_DEPENDS "מתי ש %s יעצור, השירותים הללו גם יעצרו." + IDS_NO_DEPENDS "<אין יחסי תלות>" IDS_LICENSE "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA." END STRINGTABLE DISCARDABLE BEGIN - IDS_TOOLTIP_PROP "Properties" - IDS_TOOLTIP_REFRESH "Refresh" - IDS_TOOLTIP_EXPORT "Export list" - IDS_TOOLTIP_CREATE "Create a new service" - IDS_TOOLTIP_DELETE "Deletes an existing service" - IDS_TOOLTIP_START "Start service" - IDS_TOOLTIP_STOP "Stop service" - IDS_TOOLTIP_PAUSE "Pause service" - IDS_TOOLTIP_RESTART "Restart service" + IDS_TOOLTIP_PROP "מאפיינים" + IDS_TOOLTIP_REFRESH "רענון" + IDS_TOOLTIP_EXPORT "יצא רשימה" + IDS_TOOLTIP_CREATE "יצירת שירות חדש" + IDS_TOOLTIP_DELETE "מחיקת שירות קיים" + IDS_TOOLTIP_START "הפעל שירות" + IDS_TOOLTIP_STOP "עצור שירות" + IDS_TOOLTIP_PAUSE "השעה שירות" + IDS_TOOLTIP_RESTART "אתחול שירות" END STRINGTABLE DISCARDABLE @@ -228,8 +228,8 @@ BEGIN IDS_PROGRESS_INFO_STOP "ReactOS is attempting to stop the following service" IDS_PROGRESS_INFO_PAUSE "ReactOS is attempting to pause the following service" IDS_PROGRESS_INFO_RESUME "ReactOS is attempting to resume the following service" - IDS_CREATE_SUCCESS "Service Created Succesfully" - IDS_DELETE_SUCCESS "Service Deleted Succesfully" + IDS_CREATE_SUCCESS "השירות נוצר בהצלחה" + IDS_DELETE_SUCCESS "השירות נמחק בהצלחה" IDS_CREATE_REQ "Fields marked with an\nasterix are mandatory" IDS_DELETE_STOP "You must manually stop the service before deleting!" END @@ -264,8 +264,8 @@ BEGIN IDS_HINT_DETAILS " Display information about each item in a window." IDS_HINT_CUST " Customizes the view." - IDS_HINT_HELP " Display help window." - IDS_HINT_ABOUT " About ReactOS Service Manager." + IDS_HINT_HELP " מציג חלון עזרה." + IDS_HINT_ABOUT " אודות מנהל השירותים של ReactOS" IDS_HINT_SYS_RESTORE " Restores this window to normal size." IDS_HINT_SYS_MOVE " Moves this window." @@ -278,5 +278,5 @@ END /* Application title */ STRINGTABLE DISCARDABLE BEGIN - IDS_APPNAME "ReactOS Service Manager" + IDS_APPNAME "מנהל השירותים של ReactOS" END diff --git a/base/applications/mspaint/lang/he-IL.rc b/base/applications/mspaint/lang/he-IL.rc index 3aaa9181e63..2d47beb704d 100644 --- a/base/applications/mspaint/lang/he-IL.rc +++ b/base/applications/mspaint/lang/he-IL.rc @@ -33,7 +33,7 @@ BEGIN MENUITEM "העתק\tCtrl+C", IDM_EDITCOPY MENUITEM "הדבק\tCtrl+V", IDM_EDITPASTE MENUITEM "מחק בחירה\tDel", IDM_EDITDELETESELECTION - MENUITEM "Invert selection", IDM_EDITINVERTSELECTION + MENUITEM "הפוך בחירה", IDM_EDITINVERTSELECTION MENUITEM "בחר הכל\tCtrl+A", IDM_EDITSELECTALL MENUITEM SEPARATOR MENUITEM "העתק ל...", IDM_EDITCOPYTO @@ -44,10 +44,10 @@ BEGIN BEGIN MENUITEM "ערכת כלים\tCtrl+T", IDM_VIEWTOOLBOX, CHECKED MENUITEM "ערכת צבעים\tCtrl+L", IDM_VIEWCOLORPALETTE, CHECKED - MENUITEM "Status bar", IDM_VIEWSTATUSBAR, CHECKED - MENUITEM "Text Toolbar", IDM_FORMATICONBAR, CHECKED, GRAYED + MENUITEM "שורת מצב", IDM_VIEWSTATUSBAR, CHECKED + MENUITEM "סרגל טקסט", IDM_FORMATICONBAR, CHECKED, GRAYED MENUITEM SEPARATOR - POPUP "Zoom" + POPUP "הגדלה" BEGIN POPUP "הגדרת משתמש" BEGIN @@ -61,7 +61,7 @@ BEGIN END MENUITEM SEPARATOR MENUITEM "הראה רשת\tCtrl+G", IDM_VIEWSHOWGRID - MENUITEM "Show miniature", IDM_VIEWSHOWMINIATURE + MENUITEM "הראה ממוזער", IDM_VIEWSHOWMINIATURE END MENUITEM "מסך מלא\tCtrl+F", IDM_VIEWFULLSCREEN END @@ -72,14 +72,14 @@ BEGIN MENUITEM "שנה גודל...\tCtrl+W", IDM_IMAGECHANGESIZE MENUITEM "חתוך", IDM_IMAGECROP MENUITEM "הפוך צבעים\tCtrl+I", IDM_IMAGEINVERTCOLORS - MENUITEM "Attributes...\tCtrl+E", IDM_IMAGEATTRIBUTES + MENUITEM "תכונות...\tCtrl+E", IDM_IMAGEATTRIBUTES MENUITEM "מחק תמונה\tCtrl+Shft+N", IDM_IMAGEDELETEIMAGE MENUITEM "צביעה אטומה", IDM_IMAGEDRAWOPAQUE END POPUP "&צבעים" BEGIN - MENUITEM "Edit palette...", IDM_COLORSEDITPALETTE + MENUITEM "עריכת ערכה...", IDM_COLORSEDITPALETTE END POPUP "&?" @@ -119,8 +119,8 @@ FONT 8, "MS Shell Dlg" CAPTION "סובב והפוך את התמונה" BEGIN GROUPBOX "סובב או הפוך", IDD_MIRRORROTATEGROUP, 6, 6, 112, 86 - AUTORADIOBUTTON "Mirror horizontally", IDD_MIRRORROTATERB1, 12, 18, 100, 10, WS_GROUP - AUTORADIOBUTTON "Mirror vertically", IDD_MIRRORROTATERB2, 12, 30, 100, 10 + AUTORADIOBUTTON "מראה אופקית", IDD_MIRRORROTATERB1, 12, 18, 100, 10, WS_GROUP + AUTORADIOBUTTON "מראה אנכית", IDD_MIRRORROTATERB2, 12, 30, 100, 10 AUTORADIOBUTTON "סובב בזווית", IDD_MIRRORROTATERB3, 12, 42, 100, 10 AUTORADIOBUTTON "90°", IDD_MIRRORROTATERB4, 42, 54, 50, 10, WS_GROUP | WS_DISABLED AUTORADIOBUTTON "180°", IDD_MIRRORROTATERB5, 42, 66, 50, 10, WS_DISABLED @@ -146,7 +146,7 @@ BEGIN LTEXT "לא זמין", IDD_ATTRIBUTESTEXT8, 60, 25, 90, 10 GROUPBOX "יחידות מדידה", IDD_ATTRIBUTESGROUP1, 6, 57, 158, 27 AUTORADIOBUTTON "אינצ'ים", IDD_ATTRIBUTESRB1, 12, 69, 45, 10, WS_GROUP - AUTORADIOBUTTON "סנטימטרים", IDD_ATTRIBUTESRB2, 62, 69, 45, 10 + AUTORADIOBUTTON "סנטימטרים", IDD_ATTRIBUTESRB2, 55, 69, 51, 10 AUTORADIOBUTTON "פיקסלים", IDD_ATTRIBUTESRB3, 112, 69, 45, 10 GROUPBOX "צבעים", IDD_ATTRIBUTESGROUP2, 6, 88, 158, 27 AUTORADIOBUTTON "שחור ולבן", IDD_ATTRIBUTESRB4, 12, 100, 70, 10, WS_GROUP @@ -182,12 +182,12 @@ BEGIN IDS_INFOTEXT, "Paint for ReactOS is available under the GNU Lesser General Public License (LGPL) version 3 (see www.gnu.org)" IDS_SAVEPROMPTTEXT, "האם ברצונך לשמור את השינויים של %s?" IDS_DEFAULTFILENAME, "ללא שם.bmp" - IDS_MINIATURETITLE, "Miniature" + IDS_MINIATURETITLE, "ממוזער" IDS_TOOLTIP1, "בחירה חופשית" - IDS_TOOLTIP2, "Selection" + IDS_TOOLTIP2, "בחירה" IDS_TOOLTIP3, "מחק" IDS_TOOLTIP4, "מלא עם צבע" - IDS_TOOLTIP5, "Select color" + IDS_TOOLTIP5, "בחירת צבע" IDS_TOOLTIP6, "זכוכית מגדלת" IDS_TOOLTIP7, "עפרון" IDS_TOOLTIP8, "מברשת" @@ -201,6 +201,6 @@ BEGIN IDS_TOOLTIP16, "מרובע עם קודקודים מרובעים" IDS_OPENFILTER, "קבצי מפת סיביות (*.bmp;*.dib)\1*.bmp;*.dib\1All files (*.*)\1*.*\1" IDS_SAVEFILTER, "קבצי מפת סיביות של 24 סיביות (*.bmp;*.dib)\1*.bmp;*.dib\1" - IDS_FILESIZE, "%d bytes" + IDS_FILESIZE, "%d בתים" IDS_PRINTRES, "%d x %d פיקסלים למטר" END diff --git a/base/applications/mspaint/winproc.c b/base/applications/mspaint/winproc.c index c22898cb3d1..75fd2875ee8 100644 --- a/base/applications/mspaint/winproc.c +++ b/base/applications/mspaint/winproc.c @@ -710,12 +710,38 @@ WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) SendMessage(hwnd, WM_CLOSE, wParam, lParam); break; case IDM_FILENEW: - ShowWindow(hSelection, SW_HIDE); - clearHistory(); - - Rectangle(hDrawingDC, 0 - 1, 0 - 1, imgXRes + 1, imgYRes + 1); - SendMessage(hImageArea, WM_PAINT, 0, 0); + { + BOOL reset = TRUE; + if (!imageSaved) + { + TCHAR programname[20]; + TCHAR saveprompttext[100]; + TCHAR temptext[500]; + LoadString(hProgInstance, IDS_PROGRAMNAME, programname, SIZEOF(programname)); + LoadString(hProgInstance, IDS_SAVEPROMPTTEXT, saveprompttext, SIZEOF(saveprompttext)); + _stprintf(temptext, saveprompttext, filename); + switch (MessageBox(hwnd, temptext, programname, MB_YESNOCANCEL | MB_ICONQUESTION)) + { + case IDNO: + imageSaved = TRUE; + break; + case IDYES: + SendMessage(hwnd, WM_COMMAND, IDM_FILESAVEAS, 0); + break; + case IDCANCEL: + reset = FALSE; + break; + } + } + if (reset && imageSaved) + { + Rectangle(hDrawingDC, 0 - 1, 0 - 1, imgXRes + 1, imgYRes + 1); + SendMessage(hImageArea, WM_PAINT, 0, 0); + updateCanvasAndScrollbars(); + clearHistory(); + } break; + } case IDM_FILEOPEN: if (GetOpenFileName(&ofn) != 0) { diff --git a/base/applications/mstsc/lang/en-US.rc b/base/applications/mstsc/lang/en-US.rc index a57cbd86bfc..5ce60a1dafe 100644 --- a/base/applications/mstsc/lang/en-US.rc +++ b/base/applications/mstsc/lang/en-US.rc @@ -48,7 +48,7 @@ BEGIN END -STRINGTABLE +STRINGTABLE BEGIN IDS_TAB_GENERAL "General" IDS_TAB_DISPLAY "Display" diff --git a/base/applications/mstsc/lang/he-IL.rc b/base/applications/mstsc/lang/he-IL.rc index b64473bfd34..b88b359dcd7 100644 --- a/base/applications/mstsc/lang/he-IL.rc +++ b/base/applications/mstsc/lang/he-IL.rc @@ -27,13 +27,13 @@ BEGIN GROUPBOX "צבעים",IDC_STATIC,7,83,228,85 ICON "", IDC_REMICON, 15,19,20,20 ICON "", IDC_COLORSICON, 15,98,20,20 - LTEXT "בחר את גודלו של שולחן העבודה המרוחק שלך. גרור את המחוון עד\nלקצה השמאלי כדי להשתמש במסך מלא.",IDC_STATIC,53,22,175,21 - CONTROL "", IDC_GEOSLIDER, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 56, 42, 124, 17 + LTEXT "בחר את גודלו של שולחן העבודה המרוחק שלך. גרור את המחוון עד\nלקצה השמאלי כדי להשתמש במסך מלא.",IDC_STATIC,51,19,175,25 + CONTROL "", IDC_GEOSLIDER, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 57, 48, 124, 17 COMBOBOX IDC_BPPCOMBO,56,102,128,80, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP CONTROL "",IDC_COLORIMAGE,"Static",SS_OWNERDRAW | SS_SUNKEN, 56,121,127,10 LTEXT "שימו לב: ההגדרות במחשב המרוחק יכולות לשנות את ההגדרות שלכם.",IDC_STATIC,56,143,165,18 - LTEXT "פחות",IDC_STATIC,35,42,15,8 - LTEXT "יותר",IDC_STATIC,189,42,17,8 + LTEXT "פחות",IDC_STATIC,40,51,19,8 + LTEXT "יותר",IDC_STATIC,183,51,19,8 LTEXT "", IDC_SETTINGS_RESOLUTION_TEXT, 56, 62, 120, 10, SS_CENTER END @@ -48,14 +48,14 @@ BEGIN END -STRINGTABLE +STRINGTABLE BEGIN IDS_TAB_GENERAL "כללי" IDS_TAB_DISPLAY "תצוגה" IDS_256COLORS "256 צבעים" - IDS_HIGHCOLOR15 "32,768 צבעים (15 bit)" - IDS_HIGHCOLOR16 "65,536 צבעים (16 bit)" - IDS_HIGHCOLOR24 "16,777,216 צבעים (24 bit)" + IDS_HIGHCOLOR15 "32,768 צבעים (15 סיביות)" + IDS_HIGHCOLOR16 "65,536 צבעים (16 סיביות)" + IDS_HIGHCOLOR24 "16,777,216 צבעים (24 סיביות)" IDS_PIXEL "%lux%lu פיקסלים" IDS_FULLSCREEN "מסך מלא" IDS_BROWSESERVER "" diff --git a/base/applications/network/telnet/doc/ssh.txt b/base/applications/network/telnet/doc/ssh.txt index 077d79ba394..89d3f29d1a1 100644 --- a/base/applications/network/telnet/doc/ssh.txt +++ b/base/applications/network/telnet/doc/ssh.txt @@ -19,4 +19,4 @@ Unfortunately, all the ssh clients I've found don't work this way. You can outp 3) Get Openssh from http://www.openssh.com 4) Modify Openssh so it will compile, and get rid of all the termios stuff -Obviously this is a lot of work. If you need a good ssh client, try PuTTY from http://www.chiark.greenend.org.uk/~sgtatham/putty/. It may be possible to integrate PuTTY and Telnet, and that would certainly be easier than the above option. PuTTY is licensed under the MIT license, which seems to be compatible with the GPL. The primary advantage of integrating the two projects is that PuTTY would gain the key mappings that telnet has, and telnet would gain encryption. \ No newline at end of file +Obviously this is a lot of work. If you need a good ssh client, try PuTTY from http://www.chiark.greenend.org.uk/~sgtatham/putty/. It may be possible to integrate PuTTY and Telnet, and that would certainly be easier than the above option. PuTTY is licensed under the MIT license, which seems to be compatible with the GPL. The primary advantage of integrating the two projects is that PuTTY would gain the key mappings that telnet has, and telnet would gain encryption. diff --git a/base/applications/network/wlanconf/CMakeLists.txt b/base/applications/network/wlanconf/CMakeLists.txt index d7a9f7c2b9c..fe931b3a442 100644 --- a/base/applications/network/wlanconf/CMakeLists.txt +++ b/base/applications/network/wlanconf/CMakeLists.txt @@ -4,12 +4,6 @@ include_directories( ${REACTOS_SOURCE_DIR}/include/reactos/drivers/ndisuio) add_executable(wlanconf wlanconf.c wlanconf.rc) -# FIXME: http://www.cmake.org/Bug/view.php?id=12998 -if(NOT MSVC) - #add_target_compile_flags(wlanconf "-Wno-format") - set_source_files_properties(wlanconf.c PROPERTIES COMPILE_FLAGS "-Wno-format") -endif() - -set_module_type(wlanconf win32cui) +set_module_type(wlanconf win32cui UNICODE) add_importlibs(wlanconf msvcrt user32 iphlpapi kernel32) add_cd_file(TARGET wlanconf DESTINATION reactos/system32 FOR all) diff --git a/base/applications/network/wlanconf/wlanconf.c b/base/applications/network/wlanconf/wlanconf.c index 0333017fdd2..56dd56e17b4 100644 --- a/base/applications/network/wlanconf/wlanconf.c +++ b/base/applications/network/wlanconf/wlanconf.c @@ -25,8 +25,8 @@ BOOL bScan = FALSE; BOOL bConnect = FALSE; -char *sSsid = NULL; -char *sWepKey = NULL; +WCHAR *sSsid = NULL; +WCHAR *sWepKey = NULL; BOOL bAdhoc = FALSE; BOOL bDisconnect = FALSE; @@ -35,12 +35,12 @@ BOOL bDisconnect = FALSE; the command prompt. */ VOID PrintResourceString(INT resID, ...) { - TCHAR szMsgBuf[MAX_BUFFER_SIZE]; + WCHAR szMsgBuf[MAX_BUFFER_SIZE]; va_list arg_ptr; va_start(arg_ptr, resID); - LoadString(GetModuleHandle(NULL), resID, szMsgBuf, MAX_BUFFER_SIZE); - _vtprintf(szMsgBuf, arg_ptr); + LoadStringW(GetModuleHandle(NULL), resID, szMsgBuf, MAX_BUFFER_SIZE); + vwprintf(szMsgBuf, arg_ptr); va_end(arg_ptr); } @@ -49,22 +49,22 @@ DWORD DoFormatMessage(DWORD ErrorCode) LPVOID lpMsgBuf; DWORD RetVal; - if ((RetVal = FormatMessage( + if ((RetVal = FormatMessageW( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, ErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default language */ - (LPTSTR) &lpMsgBuf, + (LPWSTR) &lpMsgBuf, 0, NULL ))) { - _tprintf(_T("%s"), (LPTSTR)lpMsgBuf); + printf("%S", (LPWSTR)lpMsgBuf); LocalFree(lpMsgBuf); - /* return number of TCHAR's stored in output buffer + /* return number of WCHAR's stored in output buffer * excluding '\0' - as FormatMessage does*/ return RetVal; } @@ -285,47 +285,18 @@ WlanDisconnect(HANDLE hAdapter, PIP_ADAPTER_INDEX_MAP IpInfo) static UCHAR -CharToHex(CHAR Char) +CharToHex(WCHAR Char) { - Char = toupper(Char); + if ((Char >= L'0') && (Char <= L'9')) + return Char - L'0'; - switch (Char) - { - case '0': - return 0x0; - case '1': - return 0x1; - case '2': - return 0x2; - case '3': - return 0x3; - case '4': - return 0x4; - case '5': - return 0x5; - case '6': - return 0x6; - case '7': - return 0x7; - case '8': - return 0x8; - case '9': - return 0x9; - case 'A': - return 0xA; - case 'B': - return 0xB; - case 'C': - return 0xC; - case 'D': - return 0xD; - case 'E': - return 0xE; - case 'F': - return 0xF; - default: - return 0; - } + if ((Char >= L'a') && (Char <= L'f')) + return Char - L'a' + 10; + + if ((Char >= L'A') && (Char <= L'F')) + return Char - L'A' + 10; + + return 0; } BOOL @@ -338,7 +309,7 @@ WlanPrintCurrentStatus(HANDLE hAdapter) PNDIS_802_11_SSID SsidInfo; CHAR SsidBuffer[NDIS_802_11_LENGTH_SSID + 1]; DWORD i; - TCHAR szMsgBuf[128]; + WCHAR szMsgBuf[128]; QueryOidSize = FIELD_OFFSET(NDISUIO_QUERY_OID, Data) + sizeof(NDIS_802_11_SSID); QueryOid = HeapAlloc(GetProcessHeap(), 0, QueryOidSize); @@ -393,19 +364,19 @@ WlanPrintCurrentStatus(HANDLE hAdapter) PrintResourceString(IDS_MSG_CURRENT_WIRELESS); } - _tprintf(_T("SSID: %hs\n"), SsidBuffer); + printf("SSID: %s\n", SsidBuffer); - _tprintf(_T("BSSID: ")); + printf("BSSID: "); for (i = 0; i < sizeof(NDIS_802_11_MAC_ADDRESS); i++) { UINT BssidData = QueryOid->Data[i]; - _tprintf(_T("%.2x"), BssidData); + printf("%.2x", BssidData); if (i != sizeof(NDIS_802_11_MAC_ADDRESS) - 1) - _tprintf(_T(":")); + printf(":"); } - _tprintf(_T("\n")); + printf("\n"); HeapFree(GetProcessHeap(), 0, QueryOid); QueryOidSize = sizeof(NDISUIO_QUERY_OID); @@ -429,10 +400,10 @@ WlanPrintCurrentStatus(HANDLE hAdapter) return FALSE; } - LoadString(GetModuleHandle(NULL), - *(PUINT)QueryOid->Data == Ndis802_11IBSS ? IDS_ADHOC : IDS_INFRASTRUCTURE, - szMsgBuf, - COUNT_OF(szMsgBuf)); + LoadStringW(GetModuleHandle(NULL), + *(PUINT)QueryOid->Data == Ndis802_11IBSS ? IDS_ADHOC : IDS_INFRASTRUCTURE, + szMsgBuf, + COUNT_OF(szMsgBuf)); PrintResourceString(IDS_MSG_NETWORK_MODE, szMsgBuf); QueryOid->Oid = OID_802_11_WEP_STATUS; @@ -451,13 +422,13 @@ WlanPrintCurrentStatus(HANDLE hAdapter) return FALSE; } - LoadString(GetModuleHandle(NULL), - *(PUINT)QueryOid->Data == Ndis802_11WEPEnabled ? IDS_YES : IDS_NO, - szMsgBuf, - COUNT_OF(szMsgBuf)); + LoadStringW(GetModuleHandle(NULL), + *(PUINT)QueryOid->Data == Ndis802_11WEPEnabled ? IDS_YES : IDS_NO, + szMsgBuf, + COUNT_OF(szMsgBuf)); PrintResourceString(IDS_MSG_WEP_ENABLED, szMsgBuf); - _tprintf(_T("\n")); + printf("\n"); QueryOid->Oid = OID_802_11_RSSI; bSuccess = DeviceIoControl(hAdapter, @@ -471,7 +442,7 @@ WlanPrintCurrentStatus(HANDLE hAdapter) if (bSuccess) { /* This OID is optional */ - _tprintf(_T("RSSI: %i dBm\n"), *(PINT)QueryOid->Data); + printf("RSSI: %i dBm\n", *(PINT)QueryOid->Data); } QueryOid->Oid = OID_802_11_TX_POWER_LEVEL; @@ -490,7 +461,7 @@ WlanPrintCurrentStatus(HANDLE hAdapter) PrintResourceString(IDS_MSG_TRANSMISSION_POWER, *(PUINT)QueryOid->Data); } - _tprintf(_T("\n")); + printf("\n"); QueryOid->Oid = OID_802_11_NUMBER_OF_ANTENNAS; @@ -548,7 +519,7 @@ WlanPrintCurrentStatus(HANDLE hAdapter) PrintResourceString(IDS_MSG_RECEIVE_ANTENNA_ANY); } - _tprintf(_T("\n")); + printf("\n"); QueryOid->Oid = OID_802_11_FRAGMENTATION_THRESHOLD; @@ -584,13 +555,14 @@ WlanPrintCurrentStatus(HANDLE hAdapter) HeapFree(GetProcessHeap(), 0, QueryOid); - _tprintf(_T("\n")); + printf("\n"); return TRUE; } BOOL WlanConnect(HANDLE hAdapter) { + CHAR SsidBuffer[NDIS_802_11_LENGTH_SSID + 1]; BOOL bSuccess; DWORD dwBytesReturned, SetOidSize; PNDISUIO_SET_OID SetOid; @@ -646,7 +618,7 @@ WlanConnect(HANDLE hAdapter) SetOidSize = FIELD_OFFSET(NDISUIO_SET_OID, Data) + FIELD_OFFSET(NDIS_802_11_WEP, KeyMaterial) + - (strlen(sWepKey) >> 1); + (wcslen(sWepKey) >> 1); SetOid = HeapAlloc(GetProcessHeap(), 0, SetOidSize); if (!SetOid) return FALSE; @@ -656,7 +628,7 @@ WlanConnect(HANDLE hAdapter) WepData = (PNDIS_802_11_WEP)SetOid->Data; WepData->KeyIndex = 0x80000000; - WepData->KeyLength = strlen(sWepKey) >> 1; + WepData->KeyLength = wcslen(sWepKey) >> 1; WepData->Length = FIELD_OFFSET(NDIS_802_11_WEP, KeyMaterial) + WepData->KeyLength; /* Assemble the hex key */ @@ -735,8 +707,9 @@ WlanConnect(HANDLE hAdapter) SetOid->Oid = OID_802_11_SSID; Ssid = (PNDIS_802_11_SSID)SetOid->Data; - RtlCopyMemory(Ssid->Ssid, sSsid, strlen(sSsid)); - Ssid->SsidLength = strlen(sSsid); + snprintf(SsidBuffer, sizeof(SsidBuffer), "%S", sSsid); + RtlCopyMemory(Ssid->Ssid, SsidBuffer, strlen(SsidBuffer)); + Ssid->SsidLength = strlen(SsidBuffer); bSuccess = DeviceIoControl(hAdapter, IOCTL_NDISUIO_SET_OID_VALUE, @@ -766,7 +739,7 @@ WlanScan(HANDLE hAdapter) DWORD QueryOidSize; PNDIS_802_11_BSSID_LIST BssidList; DWORD i, j; - TCHAR szMsgBuf[128]; + WCHAR szMsgBuf[128]; SetOid.Oid = OID_802_11_BSSID_LIST_SCAN; @@ -824,29 +797,29 @@ WlanScan(HANDLE hAdapter) RtlCopyMemory(SsidBuffer, Ssid->Ssid, Ssid->SsidLength); SsidBuffer[Ssid->SsidLength] = 0; - _tprintf(_T("\nSSID: %hs\n"), SsidBuffer); + printf("\nSSID: %s\n", SsidBuffer); - _tprintf(_T("BSSID: ")); + printf("BSSID: "); for (j = 0; j < sizeof(NDIS_802_11_MAC_ADDRESS); j++) { UINT BssidData = BssidInfo->MacAddress[j]; - _tprintf(_T("%.2x"), BssidData); + printf("%.2x", BssidData); if (j != sizeof(NDIS_802_11_MAC_ADDRESS) - 1) - _tprintf(_T(":")); + printf(":"); } - _tprintf(_T("\n")); + printf("\n"); - LoadString(GetModuleHandle(NULL), - BssidInfo->Privacy == 0 ? IDS_NO : IDS_YES, - szMsgBuf, - COUNT_OF(szMsgBuf)); + LoadStringW(GetModuleHandle(NULL), + BssidInfo->Privacy == 0 ? IDS_NO : IDS_YES, + szMsgBuf, + COUNT_OF(szMsgBuf)); PrintResourceString(IDS_MSG_ENCRYPTED, szMsgBuf); - LoadString(GetModuleHandle(NULL), - NetworkType == Ndis802_11IBSS ? IDS_ADHOC : IDS_INFRASTRUCTURE, - szMsgBuf, - COUNT_OF(szMsgBuf)); + LoadStringW(GetModuleHandle(NULL), + NetworkType == Ndis802_11IBSS ? IDS_ADHOC : IDS_INFRASTRUCTURE, + szMsgBuf, + COUNT_OF(szMsgBuf)); PrintResourceString(IDS_MSG_NETWORK_TYPE, szMsgBuf); PrintResourceString(IDS_MSG_RSSI, (int)Rssi); PrintResourceString(IDS_MSG_SUPPORT_RATE); @@ -863,16 +836,16 @@ WlanScan(HANDLE hAdapter) if (Rate & 0x01) { /* Bit 0 is set so we need to add 0.5 */ - _tprintf(_T("%u.5 "), (Rate >> 1)); + printf("%u.5 ", (Rate >> 1)); } else { /* Bit 0 is clear so just print the conversion */ - _tprintf(_T("%u "), (Rate >> 1)); + printf("%u ", (Rate >> 1)); } } } - _tprintf(_T("\n")); + printf("\n"); /* Move to the next entry */ BssidInfo = (PNDIS_WLAN_BSSID)((PUCHAR)BssidInfo + BssidInfo->Length); @@ -884,23 +857,23 @@ WlanScan(HANDLE hAdapter) return bSuccess; } -BOOL ParseCmdline(int argc, char *argv[]) +BOOL ParseCmdline(int argc, WCHAR *argv[]) { INT i; for (i = 1; i < argc; i++) { - if (argv[i][0] == '-') + if (argv[i][0] == L'-') { switch (argv[i][1]) { - case 's': + case L's': bScan = TRUE; break; - case 'd': + case L'd': bDisconnect = TRUE; break; - case 'c': + case L'c': if (i == argc - 1) { PrintResourceString(IDS_USAGE); @@ -909,7 +882,7 @@ BOOL ParseCmdline(int argc, char *argv[]) bConnect = TRUE; sSsid = argv[++i]; break; - case 'w': + case L'w': if (i == argc - 1) { PrintResourceString(IDS_USAGE); @@ -917,7 +890,7 @@ BOOL ParseCmdline(int argc, char *argv[]) } sWepKey = argv[++i]; break; - case 'a': + case L'a': bAdhoc = TRUE; break; default : @@ -936,7 +909,7 @@ BOOL ParseCmdline(int argc, char *argv[]) return TRUE; } -int main(int argc, char *argv[]) +int wmain(int argc, WCHAR *argv[]) { HANDLE hAdapter; IP_ADAPTER_INDEX_MAP IpInfo; diff --git a/base/applications/notepad/lang/he-IL.rc b/base/applications/notepad/lang/he-IL.rc index b3a1558948f..06efbb52c33 100644 --- a/base/applications/notepad/lang/he-IL.rc +++ b/base/applications/notepad/lang/he-IL.rc @@ -106,13 +106,13 @@ LTEXT "כותרת תחתונה:", 0x142, 10, 24, 40, 15 EDITTEXT 0x143, 60, 22,110, 12, WS_BORDER | WS_TABSTOP GROUPBOX "שוליים:", 0x144, 10, 43,160, 45 -LTEXT "שמאליים:", 0x145, 20, 55, 30, 10, WS_CHILD +LTEXT "שמאליים:", 0x145, 14, 55, 35, 10, WS_CHILD EDITTEXT /*STRING_PAGESETUP_LEFTVALUE,*/ 0x147, 50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP LTEXT "עליונים:", 0x148, 20, 73, 30, 10, WS_CHILD EDITTEXT /*STRING_PAGESETUP_TOPVALUE,*/ 0x14A, 50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP LTEXT "ימניים:", 0x14B, 100, 55, 30, 10, WS_CHILD EDITTEXT /*STRING_PAGESETUP_RIGHTVALUE,*/ 0x14D, 130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP -LTEXT "תחתונים:", 0x14E, 100, 73, 30, 10, WS_CHILD +LTEXT "תחתונים:", 0x14E, 97, 73, 33, 10, WS_CHILD EDITTEXT /*STRING_PAGESETUP_BOTTOMVALUE,*/ 0x150, 130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP DEFPUSHBUTTON "אישור", IDOK, 180, 3, 40, 15, WS_TABSTOP @@ -139,7 +139,7 @@ FONT 8, "MS Shell Dlg" CAPTION "מעבר אל שורה" BEGIN EDITTEXT ID_LINENUMBER,54,10,106,12,WS_CHILD | WS_BORDER | WS_TABSTOP -LTEXT "מספר שורה:",0x155,5,12,41,12,WS_CHILD | WS_TABSTOP | ES_NUMBER +LTEXT "מספר שורה:",0x155,3,12,43,11,WS_CHILD | WS_TABSTOP | ES_NUMBER DEFPUSHBUTTON "אישור", IDOK, 75, 30, 40, 15, WS_CHILD | WS_TABSTOP PUSHBUTTON "ביטול", IDCANCEL, 120, 30, 40, 15, WS_CHILD | WS_TABSTOP END @@ -196,7 +196,7 @@ STRING_OUT_OF_MEMORY, "Not enough memory to complete t task. \nClose one or more applications to increase the amount of \nfree memory." STRING_CANNOTFIND "לא יכול למצוא את '%s'" STRING_ANSI, "ANSI" -STRING_UNICODE, "Unicode" +STRING_UNICODE, "יוניקוד" STRING_UNICODE_BE, "Unicode (big endian)" STRING_UTF8, "UTF-8" STRING_CRLF, "חלונות" diff --git a/base/applications/rapps/lang/he-IL.rc b/base/applications/rapps/lang/he-IL.rc index aa3803808f8..f090f037419 100644 --- a/base/applications/rapps/lang/he-IL.rc +++ b/base/applications/rapps/lang/he-IL.rc @@ -30,8 +30,8 @@ IDR_LINKMENU MENU BEGIN POPUP "popup" BEGIN - MENUITEM "פתיחת קישור בדפדפן", ID_OPEN_LINK - MENUITEM "העתקת קישור", ID_COPY_LINK + MENUITEM "פתיחת הקישור בדפדפן", ID_OPEN_LINK + MENUITEM "העתקת הקישור", ID_COPY_LINK END END @@ -56,8 +56,8 @@ FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "כללי", -1, 4, 2, 240, 61 AUTOCHECKBOX "שמור מיקום חלון", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12 - AUTOCHECKBOX "&Update the list of accessible programs at start", IDC_UPDATE_AVLIST, 15, 29, 222, 12 - AUTOCHECKBOX "&Log of installation and removal of programs", IDC_LOG_ENABLED, 15, 46, 219, 12 + AUTOCHECKBOX "עדכן את רשימת התוכניות האפשרויות בהפעלה", IDC_UPDATE_AVLIST, 15, 29, 222, 12 + AUTOCHECKBOX "תעד התקנה והסרה של תכניות", IDC_LOG_ENABLED, 15, 46, 219, 12 GROUPBOX "הורדה", -1, 4, 65, 240, 51 LTEXT "תיקיית הורדות:", -1, 16, 75, 100, 9 @@ -156,7 +156,7 @@ BEGIN IDS_CAT_AUDIO "צלילים" IDS_CAT_DEVEL "פיתוח" IDS_CAT_DRIVERS "מנהלי התקנים" - IDS_CAT_EDU "Edutainment" + IDS_CAT_EDU "בידור" IDS_CAT_ENGINEER "הנדסה" IDS_CAT_FINANCE "כלכלי" IDS_CAT_GAMES "משחקים וכיף" @@ -178,7 +178,7 @@ BEGIN IDS_UNINSTALL "הסרה" IDS_MODIFY "שינוי" IDS_APPS_COUNT "ספירת יישומים: %d" - IDS_WELCOME_TITLE "Welcome to ReactOS Applications Manager!\n\n" + IDS_WELCOME_TITLE "ברוכים הבאים למנהל היישומים של ReactOS!\n\n" IDS_WELCOME_TEXT "Choose a category on the left, then choose an application to install or uninstall.\nReactOS Web Site: " IDS_WELCOME_URL "http://www.reactos.org" IDS_INSTALLED "מותקן" diff --git a/base/applications/regedit/lang/fr-FR.rc b/base/applications/regedit/lang/fr-FR.rc index 62d06533159..46f29a26044 100644 --- a/base/applications/regedit/lang/fr-FR.rc +++ b/base/applications/regedit/lang/fr-FR.rc @@ -342,7 +342,7 @@ BEGIN ID_EDIT_RENAME "Renomme la sélection" ID_EDIT_COPYKEYNAME "Copie le nom de la clé sélectionnée vers le presse-papier" ID_EDIT_FIND "Recherche du texte dans une clé, une valeur ou des données" - ID_EDIT_FINDNEXT "Recherche l'occurence suivante du texte de la dernière recherche" + ID_EDIT_FINDNEXT "Recherche l'occurrence suivante du texte de la dernière recherche" END STRINGTABLE DISCARDABLE diff --git a/base/applications/regedit/lang/he-IL.rc b/base/applications/regedit/lang/he-IL.rc index 519893f68b0..0c0f89d1844 100644 --- a/base/applications/regedit/lang/he-IL.rc +++ b/base/applications/regedit/lang/he-IL.rc @@ -194,7 +194,7 @@ END IDD_EDIT_MULTI_STRING DIALOGEX 32, 24, 252, 174 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Edit Multi-String" +CAPTION "עריכת מרובה מחרזות" FONT 8, "MS Shell Dlg" BEGIN LTEXT "שם הערך:",IDC_STATIC,6,6,134,8 @@ -223,7 +223,7 @@ END IDD_EDIT_DWORD DIALOGEX 32, 24, 252, 104 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Edit DWORD" +CAPTION "עריכת DWORD" FONT 8, "MS Shell Dlg" BEGIN LTEXT "שם הערך:",IDC_STATIC,6,6,134,8 @@ -264,10 +264,10 @@ FONT 8, "MS Shell Dlg" CONTROL "", IDC_MEMORY_LIST, "SysListView32", LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 10, 101, 261, 31 LTEXT "יציאה:", IDC_STATIC, 10, 134, 38, 8 CONTROL "", IDC_PORT_LIST, "SysListView32", LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 10, 144, 261, 31 - LTEXT "Device specific data:", IDC_STATIC, 10, 177, 80, 8 + LTEXT "מידע מסוים של ההתקן:", IDC_STATIC, 10, 177, 80, 8 CONTROL "", IDC_DEVICE_LIST, "SysListView32", LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 10, 188, 261, 31 GROUPBOX "שימוש", IDC_STATIC, 10, 219, 125, 39 - LTEXT "Undetermined", IDC_UNDETERMINED, 18, 230, 46, 8, WS_DISABLED + LTEXT "לא נקבע", IDC_UNDETERMINED, 18, 230, 46, 8, WS_DISABLED LTEXT "משותף", IDC_SHARED, 18, 240, 48, 8, WS_DISABLED LTEXT "התקן בלעדי", IDC_DEVICE_EXCLUSIVE, 72, 230, 58, 8, WS_DISABLED LTEXT "מנהל התקן בלעדי", IDC_DRIVER_EXCLUSIVE, 72, 240, 54, 8, WS_DISABLED @@ -378,41 +378,41 @@ END STRINGTABLE DISCARDABLE BEGIN IDS_BINARY_EMPTY "(zero-length binary value)" - IDS_DEFAULT_VALUE_NAME "(Default)" - IDS_VALUE_NOT_SET "(value not set)" + IDS_DEFAULT_VALUE_NAME "(ברירת מחדל)" + IDS_VALUE_NOT_SET "(ערך לא נקבע)" IDS_UNKNOWN_TYPE "Unknown type: (0x%lx)" - IDS_MY_COMPUTER "My Computer" - IDS_IMPORT_REG_FILE "Import Registry File" - IDS_EXPORT_REG_FILE "Export Registry File" - IDS_LOAD_HIVE "Load Hive" - IDS_UNLOAD_HIVE "Unload Hive" + IDS_MY_COMPUTER "המחשב שלי" + IDS_IMPORT_REG_FILE "יבא קובץ רשום" + IDS_EXPORT_REG_FILE "יצא קובץ רשום" + IDS_LOAD_HIVE "טעינת כוורת" + IDS_UNLOAD_HIVE "פריקת כוורת" IDS_INVALID_DWORD "(invalid DWORD value)" END STRINGTABLE DISCARDABLE BEGIN - IDS_FLT_REGFILE "Registration File" - IDS_FLT_REGFILES "Registration Files (*.reg)" + IDS_FLT_REGFILE "קובץ רשום" + IDS_FLT_REGFILES "קבצי רשום (*.reg)" IDS_FLT_REGFILES_FLT "*.reg" - IDS_FLT_HIVFILES "Registry Hive Files (*.*)" + IDS_FLT_HIVFILES "קבצי כוורות רשום (*.*)" IDS_FLT_HIVFILES_FLT "*.*" - IDS_FLT_REGEDIT4 "Win9x/NT4 Registration Files (REGEDIT4) (*.reg)" + IDS_FLT_REGEDIT4 "Win9x/NT4 קבצי רשום (REGEDIT4) (*.reg)" IDS_FLT_REGEDIT4_FLT "*.reg" - IDS_FLT_ALLFILES "All Files (*.*)" + IDS_FLT_ALLFILES "כל הקבצים (*.*)" IDS_FLT_ALLFILES_FLT "*.*" END STRINGTABLE DISCARDABLE BEGIN - IDS_ACCESS_FULLCONTROL "Full Control" - IDS_ACCESS_READ "Read" + IDS_ACCESS_FULLCONTROL "שליטה מלאה" + IDS_ACCESS_READ "קרא" IDS_ACCESS_QUERYVALUE "Query Value" - IDS_ACCESS_SETVALUE "Set Value" - IDS_ACCESS_CREATESUBKEY "Create Subkey" + IDS_ACCESS_SETVALUE "קבע ערך" + IDS_ACCESS_CREATESUBKEY "צור מפתח משנה" IDS_ACCESS_ENUMERATESUBKEYS "Enumerate Subkeys" IDS_ACCESS_NOTIFY "Notify" - IDS_ACCESS_CREATELINK "Create Link" - IDS_ACCESS_DELETE "Delete" + IDS_ACCESS_CREATELINK "צור קישור" + IDS_ACCESS_DELETE "מחק" IDS_ACCESS_WRITEDAC "Write DAC" IDS_ACCESS_WRITEOWNER "Write Owner" IDS_ACCESS_READCONTROL "Read Control" @@ -427,9 +427,9 @@ END STRINGTABLE DISCARDABLE BEGIN - IDS_EXPAND "&Expand" - IDS_COLLAPSE "&Collapse" - IDS_GOTO_SUGGESTED_KEY "&Go to '%s'" + IDS_EXPAND "הרחב" + IDS_COLLAPSE "כווץ" + IDS_GOTO_SUGGESTED_KEY "עבור אל '%s'" IDS_FINISHEDFIND "Finished searching through the registry." END @@ -444,39 +444,39 @@ END STRINGTABLE DISCARDABLE BEGIN IDS_BUSNUMBER "Bus Number" - IDS_INTERFACE "Interface" - IDS_DMA_CHANNEL "Channel" - IDS_DMA_PORT "Port" - IDS_INTERRUPT_VECTOR "Vector" + IDS_INTERFACE "ממשק" + IDS_DMA_CHANNEL "ערוץ" + IDS_DMA_PORT "יציאה" + IDS_INTERRUPT_VECTOR "וקטור" IDS_INTERRUPT_LEVEL "Level" - IDS_INTERRUPT_AFFINITY "Affinity" - IDS_INTERRUPT_TYPE "Type" - IDS_MEMORY_ADDRESS "Physical Address" - IDS_MEMORY_LENGTH "Length" - IDS_MEMORY_ACCESS "Access" - IDS_PORT_ADDRESS "Physical Address" - IDS_PORT_LENGTH "Length" - IDS_PORT_ACCESS "Access" - IDS_SPECIFIC_RESERVED1 "Reserved 1" - IDS_SPECIFIC_RESERVED2 "Reserved 2" + IDS_INTERRUPT_AFFINITY "שייכות" + IDS_INTERRUPT_TYPE "סוג" + IDS_MEMORY_ADDRESS "כתובת פיזית" + IDS_MEMORY_LENGTH "אורך" + IDS_MEMORY_ACCESS "גישה" + IDS_PORT_ADDRESS "כתובת פיזית" + IDS_PORT_LENGTH "אורך" + IDS_PORT_ACCESS "גישה" + IDS_SPECIFIC_RESERVED1 "שמור 1" + IDS_SPECIFIC_RESERVED2 "שמור 2" IDS_SPECIFIC_DATASIZE "Data Size" END STRINGTABLE DISCARDABLE BEGIN - IDS_PORT_PORT_IO "Port" - IDS_PORT_MEMORY_IO "Memory" + IDS_PORT_PORT_IO "יציאה" + IDS_PORT_MEMORY_IO "זיכרון" IDS_INTERRUPT_EDGE_SENSITIVE "Edge Sensitive" IDS_INTERRUPT_LEVEL_SENSITIVE "Level Sensitive" - IDS_MEMORY_READ_ONLY "Read Only" - IDS_MEMORY_WRITE_ONLY "Write Only" - IDS_MEMORY_READ_WRITE "Read / Write" + IDS_MEMORY_READ_ONLY "קריאה בלבד" + IDS_MEMORY_WRITE_ONLY "כתיבה בלבד" + IDS_MEMORY_READ_WRITE "קריאה / כתיבה" END STRINGTABLE DISCARDABLE BEGIN - IDS_BUS_UNDEFINED "Undefined" - IDS_BUS_INTERNAL "Internal" + IDS_BUS_UNDEFINED "לא מוגדר" + IDS_BUS_INTERNAL "פנימי" IDS_BUS_ISA "ISA" IDS_BUS_EISA "EISA" IDS_BUS_MICROCHANNEL "MicroChannel" @@ -506,9 +506,9 @@ IDD_EXPORTRANGE DIALOGEX DISCARDABLE 50, 50, 370, 50 STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_BORDER FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Export Range",IDC_STATIC,2,0,366,48 - CONTROL "&All",IDC_EXPORT_ALL,"Button",BS_AUTORADIOBUTTON,10,10, 29,11 - CONTROL "S&elected Branch",IDC_EXPORT_BRANCH,"Button",BS_AUTORADIOBUTTON,10,22, 100,11 + GROUPBOX "טווח יצוא",IDC_STATIC,2,0,366,48 + CONTROL "הכל",IDC_EXPORT_ALL,"Button",BS_AUTORADIOBUTTON,10,10, 29,11 + CONTROL "בחירת ענף",IDC_EXPORT_BRANCH,"Button",BS_AUTORADIOBUTTON,10,22, 100,11 EDITTEXT IDC_EXPORT_BRANCH_TEXT,30,34,335,12 END @@ -517,53 +517,53 @@ END // IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Load Hive" +CAPTION "טעינת כוורות" FONT 8, "Ms Shell Dlg" { - LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT + LTEXT "מפתח:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13 - DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14 - PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14 + DEFPUSHBUTTON "אישור", IDOK, 140, 17, 50, 14 + PUSHBUTTON "ביטול", IDCANCEL, 89, 17, 50, 14 } IDD_ADDFAVORITES DIALOGEX DISCARDABLE 0, 0, 186, 46 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Add to Favorites" +CAPTION "הוספה למועדפים" FONT 8, "MS Shell Dlg" BEGIN - DEFPUSHBUTTON "OK",IDOK,129,7,50,14 - PUSHBUTTON "Cancel",IDCANCEL,129,24,50,14 - LTEXT "&Favorite Name:",IDC_STATIC,7,7,70,10 + DEFPUSHBUTTON "אישור",IDOK,129,7,50,14 + PUSHBUTTON "ביטול",IDCANCEL,129,24,50,14 + LTEXT "שם מועדף:",IDC_STATIC,7,7,70,10 EDITTEXT IDC_FAVORITENAME,7,26,110,13,ES_AUTOHSCROLL END IDD_REMOVEFAVORITES DIALOGEX DISCARDABLE 0, 0, 164, 135 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Remove Favorites" +CAPTION "הסרת מועדפים" FONT 8, "MS Shell Dlg" BEGIN - DEFPUSHBUTTON "OK",IDOK,107,114,50,14 - PUSHBUTTON "Cancel",IDCANCEL,7,114,50,14 + DEFPUSHBUTTON "אישור",IDOK,107,114,50,14 + PUSHBUTTON "ביטול",IDCANCEL,7,114,50,14 CONTROL "List1",IDC_FAVORITESLIST,"SysListView32",LVS_LIST | WS_BORDER | WS_TABSTOP,7,20,150,90 - LTEXT "Select Favorite(s):",IDC_STATIC,7,7,99,12 + LTEXT "בחירת מועדפים:",IDC_STATIC,7,7,99,12 END IDD_FIND DIALOGEX DISCARDABLE 0, 0, 254, 82 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Find" +CAPTION "חפש" FONT 8, "MS Shell Dlg" BEGIN - DEFPUSHBUTTON "&Find Next",IDOK,197,7,50,14 - PUSHBUTTON "Cancel",IDCANCEL,197,24,50,14 - GROUPBOX "Look at",IDC_STATIC,7,25,63,51 + DEFPUSHBUTTON "חפש את הבא:",IDOK,197,7,50,14 + PUSHBUTTON "ביטול",IDCANCEL,197,24,50,14 + GROUPBOX "חפש ב",IDC_STATIC,7,25,63,51 LTEXT "Fi&nd what:",IDC_STATIC,7,8,37,10 EDITTEXT IDC_FINDWHAT,47,7,142,13,ES_AUTOHSCROLL - CONTROL "&Keys",IDC_LOOKAT_KEYS,"Button",BS_AUTOCHECKBOX | + CONTROL "מפתחות",IDC_LOOKAT_KEYS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,36,35,8 - CONTROL "&Values",IDC_LOOKAT_VALUES,"Button",BS_AUTOCHECKBOX | + CONTROL "ערכים",IDC_LOOKAT_VALUES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,48,36,8 - CONTROL "&Data",IDC_LOOKAT_DATA,"Button",BS_AUTOCHECKBOX | + CONTROL "מידע",IDC_LOOKAT_DATA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,60,42,8 CONTROL "Match &whole string only",IDC_MATCHSTRING,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,83,32,94,13 @@ -574,12 +574,12 @@ END IDD_FINDING DIALOGEX 0, 0, 145, 50 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Find" +CAPTION "חפש" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN ICON IDI_REGEDIT,IDC_STATIC,7,7,20,20 - DEFPUSHBUTTON "&Cancel",IDCANCEL,93,29,45,14 - LTEXT "Searching the registry...",IDC_STATIC,33,12,83,8 + DEFPUSHBUTTON "ביטול",IDCANCEL,93,29,45,14 + LTEXT "מחפש ברשום...",IDC_STATIC,33,12,83,8 END /* diff --git a/base/applications/regedit/lang/ja-JP.rc b/base/applications/regedit/lang/ja-JP.rc index bda2023af57..7e2fb12ba1a 100644 --- a/base/applications/regedit/lang/ja-JP.rc +++ b/base/applications/regedit/lang/ja-JP.rc @@ -55,7 +55,7 @@ BEGIN MENUITEM SEPARATOR MENUITEM "ハイブの読み込み...", ID_REGISTRY_LOADHIVE, GRAYED - MENUITEM "ハイブのアンロード...", ID_REGISTRY_UNLOADHIVE, GRAYED + MENUITEM "ハイブのアンロード...", ID_REGISTRY_UNLOADHIVE, GRAYED MENUITEM SEPARATOR MENUITEM "ネットワーク レジストリへの接続(&C)...", ID_REGISTRY_CONNECTNETWORKREGISTRY @@ -80,7 +80,7 @@ BEGIN MENUITEM "バイナリ値(&B)", ID_EDIT_NEW_BINARYVALUE MENUITEM "DWORD 値(&D)", ID_EDIT_NEW_DWORDVALUE MENUITEM "複数行文字列値(&M)", ID_EDIT_NEW_MULTISTRINGVALUE - MENUITEM "展開可能 な文字列値(&E)", ID_EDIT_NEW_EXPANDABLESTRINGVALUE + MENUITEM "展開可能な文字列値(&E)", ID_EDIT_NEW_EXPANDABLESTRINGVALUE END MENUITEM SEPARATOR MENUITEM "アクセス許可(&P)...", ID_EDIT_PERMISSIONS @@ -93,7 +93,7 @@ BEGIN MENUITEM "検索(&F)\tCtrl+F", ID_EDIT_FIND MENUITEM "次を検索(&X)\tF3", ID_EDIT_FINDNEXT END - POPUP "表 示(&V)" + POPUP "表示(&V)" BEGIN MENUITEM "ステータス バー(&B)", ID_VIEW_STATUSBAR MENUITEM SEPARATOR @@ -134,7 +134,7 @@ BEGIN MENUITEM "バイナリ値(&B)", ID_EDIT_NEW_BINARYVALUE MENUITEM "DWORD 値(&D)", ID_EDIT_NEW_DWORDVALUE MENUITEM "複数行文字列値(&M)", ID_EDIT_NEW_MULTISTRINGVALUE - MENUITEM "展開可能 な文字列値(&E)", ID_EDIT_NEW_EXPANDABLESTRINGVALUE + MENUITEM "展開可能な文字列値(&E)", ID_EDIT_NEW_EXPANDABLESTRINGVALUE END END POPUP "" @@ -148,7 +148,7 @@ BEGIN MENUITEM "バイナリ値(&B)", ID_EDIT_NEW_BINARYVALUE MENUITEM "DWORD 値(&D)", ID_EDIT_NEW_DWORDVALUE MENUITEM "複数行文字列値(&M)", ID_EDIT_NEW_MULTISTRINGVALUE - MENUITEM "展開可能 な文字列値(&E)", ID_EDIT_NEW_EXPANDABLESTRINGVALUE + MENUITEM "展開可能な文字列値(&E)", ID_EDIT_NEW_EXPANDABLESTRINGVALUE END MENUITEM "検索(&F)", ID_EDIT_FIND MENUITEM SEPARATOR @@ -240,12 +240,12 @@ END IDD_EDIT_RESOURCE_LIST DIALOGEX 32, 24, 170, 120 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Resource List" -FONT 8, "MS Shell Dlg" +CAPTION "リソース リスト" +FONT 9, "MS UI Gothic" { CONTROL "", IDC_RESOURCE_LIST, "SysListView32", LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP, 10, 10, 150, 75 DEFPUSHBUTTON "OK", IDOK, 27, 100, 50, 14 - PUSHBUTTON "Show...", IDC_SHOW_RESOURCE, 93, 100, 50, 14, WS_DISABLED + PUSHBUTTON "表示(S)...", IDC_SHOW_RESOURCE, 93, 100, 50, 14, WS_DISABLED } @@ -307,7 +307,7 @@ BEGIN ID_EDIT_MENU "値やキーを編集するコマンドです。" ID_VIEW_MENU "レジストリ ウィンドウをカスタマイズするコマンドです。" ID_FAVOURITES_MENU "頻繁に使用されるキーにアクセスするコマンドです。" - ID_HELP_MENU "ヘルプとレジストリ エディタのバージョン情報を表 示するコマンドです。" + ID_HELP_MENU "ヘルプとレジストリ エディタのバージョン情報を表示するコマンドです。" ID_EDIT_NEW_MENU "新しいキーや値を作成するコマンドです。" END @@ -317,21 +317,21 @@ BEGIN ID_EDIT_NEW_KEY "新しいキーを追加します。" ID_EDIT_NEW_STRINGVALUE "新しい文字列値を追加します。" ID_EDIT_NEW_BINARYVALUE "新しいバイナリ値を追加します。" - ID_EDIT_NEW_DWORDVALUE "新しい複数行文字列値を追加します。" + ID_EDIT_NEW_DWORDVALUE "新しい DWORD 値を追加します。" ID_REGISTRY_IMPORTREGISTRYFILE "テキスト ファイルをレジストリにインポートします。" ID_REGISTRY_EXPORTREGISTRYFILE "レジストリの一部または全体をテキスト ファイルにエクスポートします。" ID_REGISTRY_LOADHIVE - "Loads a hive file into the registry" + "ハイブ ファイルをレジストリに読み込みます。" ID_REGISTRY_UNLOADHIVE - "Unloads a hive from the registry" + "レジストリからハイブをアンロードします。" ID_REGISTRY_CONNECTNETWORKREGISTRY "リモート コンピュータのレジストリに接続します。" ID_REGISTRY_DISCONNECTNETWORKREGISTRY "リモート コンピュータのレジストリを切断します。" ID_REGISTRY_PRINT "レジストリの一部または全体を印刷します。" /* ID_HELP_HELPTOPICS "レジストリ エディタのヘルプを開きます。" */ - ID_HELP_ABOUT "プログラムの情報、バージョン番号および著作権を表 示します。" + ID_HELP_ABOUT "プログラムの情報、バージョン番号および著作権を表示します。" END STRINGTABLE DISCARDABLE @@ -339,8 +339,8 @@ BEGIN ID_REGISTRY_EXIT "レジストリ エディタを終了します。" ID_FAVOURITES_ADDTOFAVOURITES "お気に入りの一覧にキーを追加します。" ID_FAVOURITES_REMOVEFAVOURITE "お気に入りの一覧からキーを削除します。" - ID_VIEW_STATUSBAR "ステータス バーの表 示/非表 示を切り替えます。" - ID_VIEW_SPLIT "2 つのパネルの境界の位置を変更します。" + ID_VIEW_STATUSBAR "ステータス バーの表示/非表示を切り替えます。" + ID_VIEW_SPLIT "2つのパネルの境界の位置を変更します。" ID_VIEW_REFRESH "ウィンドウの内容を最新の情報に更新します。" ID_EDIT_DELETE "選択範囲を削除します。" ID_EDIT_RENAME "名前を変更します。" @@ -369,7 +369,7 @@ BEGIN IDS_ERR_RENVAL_CAPTION "値の名前を変更するときにエラーが発生しました。" IDS_ERR_RENVAL_TOEMPTY "%s の名前を変更できません。指定された値の名前には文字が含まれていません。別の名前でやり直してください。" IDS_QUERY_IMPORT_HIVE_CAPTION "Confirm Key Restoration" - IDS_QUERY_IMPORT_HIVE_MSG "A key will be restored on top of the currently selected key.\nAll values and subkeys of this key will be deleted.\nDo you want to continue the operation?" + IDS_QUERY_IMPORT_HIVE_MSG "現在選択中のキーの最上部にキーが格納されます。\nこのキーのすべての値とサブキーが削除されます。\nこの処理を続行しますか?" IDS_NEW_KEY "新しいキー #%d" IDS_NEW_VALUE "新しい値 #%d" END @@ -383,8 +383,8 @@ BEGIN IDS_MY_COMPUTER "マイ コンピュータ" IDS_IMPORT_REG_FILE "レジストリ ファイルのインポート" IDS_EXPORT_REG_FILE "レジストリ ファイルのエクスポート" - IDS_LOAD_HIVE "Load Hive" - IDS_UNLOAD_HIVE "Unload Hive" + IDS_LOAD_HIVE "ハイブを読み込む" + IDS_UNLOAD_HIVE "ハイブをアンロードする" IDS_INVALID_DWORD "(無効な DWORD 値)" END @@ -434,10 +434,10 @@ END STRINGTABLE DISCARDABLE BEGIN - IDS_IMPORT_PROMPT "Adding information can unintentionally change or delete values and cause components to stop working correctly.\nIf you do not trust the source of this information in '%s', do not add it to registry.\n\nAre you sure you want to continue?" - IDS_IMPORT_OK "The keys and values contained in '%s' have been successfully added to the registry." - IDS_IMPORT_ERROR "Cannot import '%s': Error opening the file. There may be a disk, file system error or file may not exist." - IDS_EXPORT_ERROR "Cannot export '%s': Error creating or writing to the file. There may be a disk or file system error." + IDS_IMPORT_PROMPT "情報を追加することは、意図せずに値を変更または削除し、コンポーネントの正しい動作の停止を引き起こすかも知れません。\nもし '%1' の情報の入手元を信頼していないのなら、レジストリに追加しないで下さい。\n\n続行しますか?" + IDS_IMPORT_OK "'%1' に含まれるキーと値は、正しくレジストリに追加されました。" + IDS_IMPORT_ERROR "'%1' をインポートできません: ファイルを開くときにエラーが発生しました。ディスクかファイル システムのエラー、もしくはファイルが存在していないのかも知れません。" + IDS_EXPORT_ERROR "'%1' をエクスポートできません: ファイルを作成または書き込むときにエラーが発生しました。ディスクかファイル システムのエラーかも知れません。" END STRINGTABLE DISCARDABLE @@ -506,20 +506,20 @@ STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_B FONT 9, "MS UI Gothic" BEGIN GROUPBOX "エクスポート範囲",IDC_STATIC,2,0,366,48 - CONTROL "すべて(&A)",IDC_EXPORT_ALL,"Button",BS_AUTORADIOBUTTON,10,10, 29,11 - CONTROL "選択された部分(&E)",IDC_EXPORT_BRANCH,"Button",BS_AUTORADIOBUTTON,10,22, 100,11 + CONTROL "すべて(&A)",IDC_EXPORT_ALL,"Button",BS_AUTORADIOBUTTON,10,10,100,11 + CONTROL "選択された部分(&E)",IDC_EXPORT_BRANCH,"Button",BS_AUTORADIOBUTTON,10,22,100,11 EDITTEXT IDC_EXPORT_BRANCH_TEXT,30,34,335,12 END IDD_LOADHIVE DIALOGEX DISCARDABLE 0, 0, 193, 34 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Load Hive" -FONT 8, "Ms Shell Dlg" +CAPTION "ハイブを読み込む" +FONT 9, "MS UI Gothic" { - LTEXT "&Key:", IDC_STATIC, 4, 4, 15, 8, SS_LEFT - EDITTEXT IDC_EDIT_KEY, 23, 2, 167, 13 + LTEXT "キー(&K):", IDC_STATIC, 4, 4, 25, 8, SS_LEFT + EDITTEXT IDC_EDIT_KEY, 33, 2, 157, 13 DEFPUSHBUTTON "OK", IDOK, 140, 17, 50, 14 - PUSHBUTTON "Cancel", IDCANCEL, 89, 17, 50, 14 + PUSHBUTTON "キャンセル", IDCANCEL, 89, 17, 50, 14 } IDD_ADDFAVORITES DIALOGEX DISCARDABLE 0, 0, 186, 46 @@ -553,8 +553,8 @@ BEGIN DEFPUSHBUTTON "次を検索(&F)",IDOK,197,7,50,14 PUSHBUTTON "キャンセル",IDCANCEL,197,24,50,14 GROUPBOX "検索対象",IDC_STATIC,7,25,63,51 - LTEXT "検索する値(&N):",IDC_STATIC,7,8,37,10 - EDITTEXT IDC_FINDWHAT,47,7,142,13,ES_AUTOHSCROLL + LTEXT "検索する値(&N):",IDC_STATIC,7,8,50,10 + EDITTEXT IDC_FINDWHAT,57,7,135,13,ES_AUTOHSCROLL CONTROL "キー(&K)",IDC_LOOKAT_KEYS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,36,35,8 CONTROL "値(&V)",IDC_LOOKAT_VALUES,"Button",BS_AUTOCHECKBOX | @@ -597,7 +597,7 @@ END *STRINGTABLE DISCARDABLE *BEGIN * ID_HELP_HELPTOPICS "レジストリ エディタのヘルプを開きます。" - * ID_HELP_ABOUT "プログラムの情報、バージョン番号および著作権を表\示します。" + * ID_HELP_ABOUT "プログラムの情報、バージョン番号および著作権を表示します。" *END */ diff --git a/base/applications/screensavers/3dtext/lang/he-IL.rc b/base/applications/screensavers/3dtext/lang/he-IL.rc index 1e8a50de2ae..5e1ce2acd84 100644 --- a/base/applications/screensavers/3dtext/lang/he-IL.rc +++ b/base/applications/screensavers/3dtext/lang/he-IL.rc @@ -8,7 +8,7 @@ BEGIN DEFPUSHBUTTON "אישור",IDOK,216,7,50,14 PUSHBUTTON "ביטול",IDCANCEL,216,24,50,14 EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL - LTEXT "טקסט מותאם אישית:",IDC_STATIC,18,17,65,8 + LTEXT "טקסט מותאם אישית:",IDC_STATIC,18,17,77,8 END STRINGTABLE DISCARDABLE diff --git a/base/applications/screensavers/logon/logon.c b/base/applications/screensavers/logon/logon.c index 0ea846fcc16..182d6087eca 100644 --- a/base/applications/screensavers/logon/logon.c +++ b/base/applications/screensavers/logon/logon.c @@ -31,60 +31,59 @@ #define RANDOM( min, max ) ((rand() % (int)(((max)+1) - (min))) + (min)) -#define APPNAME _T("Logon") -#define APP_TIMER 1 -#define APP_TIMER_INTERVAL 2000 +#define APPNAME _T("Logon") +#define APP_TIMER 1 +#define APP_TIMER_INTERVAL 2000 -HBITMAP GetScreenSaverBitmap (void) +HBITMAP +GetScreenSaverBitmap(VOID) { - OSVERSIONINFOEX osvi; + OSVERSIONINFOEX osvi; - ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); - GetVersionEx ((OSVERSIONINFO *) &osvi); + ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + GetVersionEx ((OSVERSIONINFO *) &osvi); - switch(osvi.wProductType) - { - case VER_NT_WORKSTATION: - return LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_WORKSTATION), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION); - break; - default: - return LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_SERVER), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION); - break; - } + switch(osvi.wProductType) + { + case VER_NT_WORKSTATION: + return LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_WORKSTATION), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION); + break; + default: + return LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_SERVER), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION); + break; + } } -LRESULT CALLBACK +LRESULT +CALLBACK ScreenSaverProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - static RECT rect; - static HBITMAP bitmap; + static RECT rect; + static HBITMAP bitmap; - switch (message) - { - case WM_CREATE: - { - bitmap = GetScreenSaverBitmap (); + switch (message) + { + case WM_CREATE: + { + bitmap = GetScreenSaverBitmap (); + if (bitmap == NULL) + { + MessageBox(hWnd, + _T("Fatal Error: Could not load bitmap"), + _T("Error"), + MB_OK | MB_ICONEXCLAMATION); + } - if(bitmap == NULL) - { - MessageBox( - hWnd, - _T("Fatal Error: Could not load bitmap"), - _T("Error"), - MB_OK | MB_ICONEXCLAMATION); - } + SetTimer(hWnd, + APP_TIMER, + APP_TIMER_INTERVAL, + NULL); - SetTimer ( - hWnd, - APP_TIMER, - APP_TIMER_INTERVAL, - NULL); - - break; - } - case WM_PAINT: - { + break; + } + case WM_PAINT: + { BITMAP bm; /* Bitmap structure as seen in bmWidth & bmHeight */ PAINTSTRUCT ps; HDC hdc; @@ -135,36 +134,40 @@ ScreenSaverProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) EndPaint(hWnd, &ps); break; - } + } case WM_TIMER: { InvalidateRect(hWnd, NULL, 1); break; } - case WM_DESTROY: - { - KillTimer (hWnd, APP_TIMER); - DeleteObject(bitmap); - PostQuitMessage(0); - break; - } + case WM_DESTROY: + { + KillTimer(hWnd, APP_TIMER); + DeleteObject(bitmap); + PostQuitMessage(0); + break; + } default: // Pass Windows Messages to the default screensaver window procedure return DefScreenSaverProc(hWnd, message, wParam, lParam); } - return 0; + return 0; } -BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +BOOL +WINAPI +ScreenSaverConfigureDialog(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { return FALSE; } // This function is only called one time before opening the configuration dialog. // Use it to show a message that no configuration is necesssary and return FALSE to indicate that no configuration dialog shall be opened. -BOOL WINAPI RegisterDialogClasses(HANDLE hInst) +BOOL +WINAPI +RegisterDialogClasses(HANDLE hInst) { TCHAR szMessage[256]; TCHAR szTitle[25]; diff --git a/base/applications/shutdown/lang/he-IL.rc b/base/applications/shutdown/lang/he-IL.rc index e2e040ed68e..de2825f6a56 100644 --- a/base/applications/shutdown/lang/he-IL.rc +++ b/base/applications/shutdown/lang/he-IL.rc @@ -15,13 +15,13 @@ BEGIN PUSHBUTTON "סייר...",IDC_BROWSE_SYSTEM,179,53,50,14 CTEXT "Which action do you want these computers to execute?", IDC_ACTION,14,81,20,14 COMBOBOX IDC_ACTION_TYPE,37,79,129,14,WS_TABSTOP | CBS_DROPDOWN - CHECKBOX "הזהר משתמשים",IDC_WARN_USERS,178,79,50,14,BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "הזהר משתמשים",IDC_WARN_USERS,167,78,68,14,BS_AUTOCHECKBOX | WS_TABSTOP CTEXT "הצג אזהרה ל-",IDC_SHOW_WARN_ONE,11,99,65,14 EDITTEXT IDC_SHOW_WARN,78,97,41,14 CTEXT "שניה/ות",IDC_SHOW_WARN_TWO,124,99,32,10 GROUPBOX "מעקב אירועי כיבוי",IDC_STATIC,5,114,224,114 CTEXT "סיבה:",IDC_STATIC,16,130,27,8 - CHECKBOX "מתוכנן...",IDC_PLANNED,175,130,40,12,BS_AUTOCHECKBOX | WS_TABSTOP + CHECKBOX "מתוכנן...",IDC_PLANNED,175,130,43,12,BS_AUTOCHECKBOX | WS_TABSTOP COMBOBOX IDC_REASON_CODE,17,142,198,13,WS_TABSTOP | CBS_DROPDOWN CTEXT "הערה:",IDC_COMMENT_CAPTION,17,159,30,8 EDITTEXT IDC_COMMENT_TEXT,17,171,198,50,WS_VSCROLL diff --git a/base/applications/sndvol32/lang/en-US.rc b/base/applications/sndvol32/lang/en-US.rc index 7cfb7463cff..ab60131c3c5 100644 --- a/base/applications/sndvol32/lang/en-US.rc +++ b/base/applications/sndvol32/lang/en-US.rc @@ -47,11 +47,11 @@ STYLE WS_POPUP | WS_BORDER FONT 8, "MS Shell Dlg" BEGIN LTEXT "Master", IDC_LINE_NAME, 4, 7, 100, 15 - CONTROL "", -1, "static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 4, 30, 82, 1 + CONTROL "", -1, "static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 4, 30, 82, 1 LTEXT "Balance", -1, 4, 35, 80, 42 LTEXT "Volume", -1, 4, 100, 77, 108 CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 25, 55, 85, 30 CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | TBS_AUTOTICKS | TBS_BOTH | TBS_DOWNISLEFT | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 32, 115, 30, 70 CHECKBOX "&Mute", IDC_LINE_SWITCH, 4, 190, 90, 12, BS_AUTOCHECKBOX - CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 130, 7, 1, 200 + CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 130, 7, 1, 200 END diff --git a/base/applications/sndvol32/lang/he-IL.rc b/base/applications/sndvol32/lang/he-IL.rc index 10820ad6bd5..cb469f26427 100644 --- a/base/applications/sndvol32/lang/he-IL.rc +++ b/base/applications/sndvol32/lang/he-IL.rc @@ -5,7 +5,7 @@ BEGIN POPUP "אפשרויות" BEGIN MENUITEM "מאפיינים", IDC_PROPERTIES - MENUITEM "&Advanced Controls", IDC_ADVANCED_CONTROLS + MENUITEM "בקרים מתקדמים", IDC_ADVANCED_CONTROLS MENUITEM SEPARATOR MENUITEM "יציאה", IDC_EXIT END @@ -47,11 +47,11 @@ STYLE WS_POPUP | WS_BORDER FONT 8, "MS Shell Dlg" BEGIN LTEXT "ראשי", IDC_LINE_NAME, 4, 7, 100, 15 - CONTROL "", -1, "static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 4, 30, 82, 1 + CONTROL "", -1, "static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 4, 30, 82, 1 LTEXT "איזון", -1, 4, 35, 80, 42 LTEXT "עוצמה", -1, 4, 100, 77, 108 CONTROL "", IDC_LINE_SLIDER_HORZ, "msctls_trackbar32", TBS_HORZ | TBS_AUTOTICKS | TBS_BOTH | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 25, 55, 85, 30 CONTROL "", IDC_LINE_SLIDER_VERT, "msctls_trackbar32", TBS_VERT | TBS_AUTOTICKS | TBS_BOTH | TBS_DOWNISLEFT | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 32, 115, 30, 70 CHECKBOX "השתק", IDC_LINE_SWITCH, 4, 190, 90, 12, BS_AUTOCHECKBOX - CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 130, 7, 1, 200 + CONTROL "", IDC_LINE_SEP, "static", SS_ETCHEDVERT | WS_CHILD | WS_VISIBLE, 130, 7, 1, 200 END diff --git a/base/applications/taskmgr/lang/he-IL.rc b/base/applications/taskmgr/lang/he-IL.rc index 55d0f627ba5..0651bee857b 100644 --- a/base/applications/taskmgr/lang/he-IL.rc +++ b/base/applications/taskmgr/lang/he-IL.rc @@ -50,11 +50,11 @@ BEGIN END POPUP "&חלונות" BEGIN - MENUITEM "Tile &Horizontally", ID_WINDOWS_TILEHORIZONTALLY - MENUITEM "Tile &Vertically", ID_WINDOWS_TILEVERTICALLY + MENUITEM "חלונות מוערמים", ID_WINDOWS_TILEHORIZONTALLY + MENUITEM "חלונות זה לצד זה", ID_WINDOWS_TILEVERTICALLY MENUITEM "&מזער", ID_WINDOWS_MINIMIZE MENUITEM "&הגדל", ID_WINDOWS_MAXIMIZE - MENUITEM "&Cascade", ID_WINDOWS_CASCADE + MENUITEM "מדורג", ID_WINDOWS_CASCADE MENUITEM "ה&בא לפנים", ID_WINDOWS_BRINGTOFRONT END POPUP "&עזרה" @@ -67,11 +67,11 @@ END IDR_WINDOWSMENU MENU DISCARDABLE BEGIN - MENUITEM "Tile &Horizontally", ID_WINDOWS_TILEHORIZONTALLY - MENUITEM "Tile &Vertically", ID_WINDOWS_TILEVERTICALLY + MENUITEM "חלונות מוערמים", ID_WINDOWS_TILEHORIZONTALLY + MENUITEM "חלונות זה לצד זה", ID_WINDOWS_TILEVERTICALLY MENUITEM "&מזער", ID_WINDOWS_MINIMIZE MENUITEM "&הגדל", ID_WINDOWS_MAXIMIZE - MENUITEM "&Cascade", ID_WINDOWS_CASCADE + MENUITEM "מדורג", ID_WINDOWS_CASCADE MENUITEM "ה&בא לפנים", ID_WINDOWS_BRINGTOFRONT END @@ -98,7 +98,7 @@ BEGIN MENUITEM "Tile &Vertically", ID_WINDOWS_TILEVERTICALLY MENUITEM "&מזער", ID_WINDOWS_MINIMIZE MENUITEM "&הגדל", ID_WINDOWS_MAXIMIZE - MENUITEM "&Cascade", ID_WINDOWS_CASCADE + MENUITEM "מדורג", ID_WINDOWS_CASCADE MENUITEM SEPARATOR MENUITEM "&סיים משימה", ID_APPLICATION_PAGE_ENDTASK MENUITEM "&עבור אל תהליך", ID_APPLICATION_PAGE_GOTOPROCESS @@ -183,7 +183,7 @@ BEGIN WS_BORDER | WS_TABSTOP,7,7,233,177 PUSHBUTTON "&סיים תהליך",IDC_ENDPROCESS,171,189,69,14 CONTROL "&הראה תהליכים מכל המשתמשים",IDC_SHOWALLPROCESSES, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,191,111,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,191,126,10 END //IDD_PERFORMANCE_PAGE DIALOGEX 0, 0, 247, 210 @@ -195,10 +195,10 @@ BEGIN GROUPBOX "שימוש בזיכרון",IDC_MEM_USAGE_FRAME,5,63,60,54,BS_LEFTTEXT,WS_EX_TRANSPARENT GROUPBOX "סך הכל",IDC_TOTALS_FRAME,5,122,111,39,0,WS_EX_TRANSPARENT GROUPBOX "Commit Charge (K)",IDC_COMMIT_CHARGE_FRAME,5,166,111,39,0,WS_EX_TRANSPARENT - GROUPBOX "Physical Memory (K)",IDC_PHYSICAL_MEMORY_FRAME,131,122,111,39,0,WS_EX_TRANSPARENT - GROUPBOX "Kernel Memory (K)",IDC_KERNEL_MEMORY_FRAME,131,166,111,39,0,WS_EX_TRANSPARENT + GROUPBOX "זכרון פיזי (K)",IDC_PHYSICAL_MEMORY_FRAME,131,122,111,39,0,WS_EX_TRANSPARENT + GROUPBOX "זיכרון ליבה (K)",IDC_KERNEL_MEMORY_FRAME,131,166,111,39,0,WS_EX_TRANSPARENT LTEXT "מזהים יחודיים",IDS_TOTALS_HANDLE_COUNT,12,131,27,8 - LTEXT "Threads",IDS_TOTALS_THREAD_COUNT,12,140,27,8 + LTEXT "תהליכי משנה",IDS_TOTALS_THREAD_COUNT,12,140,27,8 LTEXT "תהליכים",IDS_TOTALS_PROCESS_COUNT,12,149,34,8 EDITTEXT IDC_TOTALS_HANDLE_COUNT,65,131,45,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP @@ -206,9 +206,9 @@ BEGIN ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_TOTALS_PROCESS_COUNT,65,149,45,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "Total",IDS_COMMIT_CHARGE_TOTAL,12,175,27,8 - LTEXT "Limit",IDS_COMMIT_CHARGE_LIMIT,12,184,15,8,NOT WS_BORDER - LTEXT "Peak",IDS_COMMIT_CHARGE_PEAK,12,193,34,8 + LTEXT "סה""כ",IDS_COMMIT_CHARGE_TOTAL,12,175,27,8 + LTEXT "הגבלה",IDS_COMMIT_CHARGE_LIMIT,12,184,15,8,NOT WS_BORDER + LTEXT "שיא",IDS_COMMIT_CHARGE_PEAK,12,193,34,8 EDITTEXT IDC_COMMIT_CHARGE_TOTAL,65,174,45,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_COMMIT_CHARGE_LIMIT,65,184,45,8,ES_RIGHT | @@ -251,7 +251,7 @@ BEGIN CONTROL "List2",IDC_DEBUG_CHANNELS_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP | LVS_SORTASCENDING,7,7,233,177 - PUSHBUTTON "Close",IDOK,171,189,69,14 + PUSHBUTTON "סגירה",IDOK,171,189,69,14 END IDD_AFFINITY_DIALOG DIALOGEX DISCARDABLE 0, 0, 231, 154 diff --git a/base/applications/wordpad/He.rc b/base/applications/wordpad/He.rc index 05f2768adbb..21ff7b80c5a 100644 --- a/base/applications/wordpad/He.rc +++ b/base/applications/wordpad/He.rc @@ -162,14 +162,14 @@ STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU CAPTION "עיצוב פסקה" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Indentation", -1, 10, 10, 120, 68 - LTEXT "Left", -1, 15, 22, 40, 13 + GROUPBOX "ריווח", -1, 10, 10, 120, 68 + LTEXT "שמאל", -1, 15, 22, 40, 13 EDITTEXT IDC_PARA_LEFT, 55, 20, 60, 13 - LTEXT "Right", -1, 15, 40, 40, 13 + LTEXT "ימין", -1, 15, 40, 40, 13 EDITTEXT IDC_PARA_RIGHT, 55, 38, 60, 13 - LTEXT "First line", -1, 15, 58, 40, 13 + LTEXT "שורה ראשונה", -1, 15, 58, 40, 13 EDITTEXT IDC_PARA_FIRST, 55, 56, 60, 13 - LTEXT "Alignment", -1, 15, 87, 40, 13 + LTEXT "יישור", -1, 15, 87, 40, 13 COMBOBOX IDC_PARA_ALIGN, 55, 85, 60, 60, CBS_DROPDOWNLIST PUSHBUTTON "אישור", IDOK, 137, 15, 50, 15 PUSHBUTTON "ביטול", IDCANCEL, 137, 33, 50, 15 @@ -177,7 +177,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -CAPTION "Tabs" +CAPTION "טאבים" FONT 8, "MS SHell DLg" BEGIN GROUPBOX "Tab stops", -1, 10, 10, 120, 90 diff --git a/base/services/tcpsvcs/CMakeLists.txt b/base/services/tcpsvcs/CMakeLists.txt index 75009677cee..d3b267bc060 100644 --- a/base/services/tcpsvcs/CMakeLists.txt +++ b/base/services/tcpsvcs/CMakeLists.txt @@ -19,4 +19,4 @@ add_pch(tcpsvcs tcpsvcs.h) add_cd_file(TARGET tcpsvcs DESTINATION reactos/system32 FOR all) -add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/quotes DESTINATION reactos/system32/drivers/etc FOR all) \ No newline at end of file +add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/quotes DESTINATION reactos/system32/drivers/etc FOR all) diff --git a/base/setup/reactos/lang/en-US.rc b/base/setup/reactos/lang/en-US.rc index 2c4f76c6785..3f46405db92 100644 --- a/base/setup/reactos/lang/en-US.rc +++ b/base/setup/reactos/lang/en-US.rc @@ -124,7 +124,7 @@ FONT 8, "MS Shell Dlg" BEGIN CONTROL "Completing the first stage of ReactOS Setup", IDC_FINISHTITLE, "Button", BS_GROUPBOX, 10,0,297,172 LTEXT "You have successfully completed the first stage of ReactOS Setup.", IDC_STATIC, 20, 50, 277, 10 - + LTEXT "When you click Finish, your computer will restart.", IDC_STATIC, 20, 80, 277, 10 CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 120, 277, 8 LTEXT "If there is a CD in a drive, remove it. Then, to restart your computer, click Finish.", IDC_STATIC, 10, 180, 297, 20 diff --git a/base/setup/reactos/lang/he-IL.rc b/base/setup/reactos/lang/he-IL.rc index bfe03e84bf2..1a52d0cf729 100644 --- a/base/setup/reactos/lang/he-IL.rc +++ b/base/setup/reactos/lang/he-IL.rc @@ -1,4 +1,5 @@ -// Translate by Baruch Rutman +// Translated by Baruch Rutman + LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT IDD_STARTPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 @@ -6,9 +7,9 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "התקנת ReactOS" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Welcome to the ReactOS Setup Wizard.", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "You cannot install ReactOS directly from this CD yet! Please restart your computer from this CD in order to install ReactOS.", IDC_STATIC, 115, 40, 195, 100 - LTEXT "Click Finish to exit the Setup.", IDC_STATIC, 115, 169, 195, 17 + LTEXT "ברוכים הבאים לאשף ההתקנה של ReactOS/", IDC_STARTTITLE, 115, 8, 195, 24 + LTEXT "עדיין אי אפשר להתקין את ReactOS ישירות מהתקליטור הזה! נא אתחל מחדש מחשבך מהדיסק כדי להתקין את ReactOS.", IDC_STATIC, 115, 40, 195, 100 + LTEXT "לחץ על סיום כדי לסיים את ההתקנה.", IDC_STATIC, 115, 169, 195, 17 END IDD_LANGSELPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 @@ -17,11 +18,11 @@ CAPTION "התקנת ReactOS" FONT 8, "MS Shell Dlg" BEGIN CONTROL "IDB_LOGO", IDB_ROSLOGO, "Static", WS_CHILD | WS_VISIBLE | SS_OWNERDRAW, 18, 0, 290, 99 - CONTROL "Setup language:", IDC_STATIC, "Static", WS_CHILD | WS_VISIBLE | WS_GROUP | SS_RIGHT, 20, 109, 106, 11 + CONTROL "שפת התקנה:", IDC_STATIC, "Static", WS_CHILD | WS_VISIBLE | WS_GROUP | SS_RIGHT, 20, 109, 106, 11 CONTROL "", IDC_LANGUAGES, "ComboBox", WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST, 132, 107, 176, 142 - CONTROL "Keyboard or input method:", IDC_STATIC, "Static", WS_CHILD | WS_VISIBLE | WS_GROUP | SS_RIGHT, 20, 142, 106, 11 + CONTROL "מקלדת או שיטת הזנה:", IDC_STATIC, "Static", WS_CHILD | WS_VISIBLE | WS_GROUP | SS_RIGHT, 20, 142, 106, 11 CONTROL "", IDC_KEYLAYOUT, "ComboBox", WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST, 132, 141, 176, 81 - LTEXT "Click Next to select the setup type.", IDC_STATIC, 10, 180 ,297, 10 + LTEXT "לחץ על הבא כדי לבחור סוג התקנה:", IDC_STATIC, 10, 180 ,297, 10 END IDD_TYPEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 @@ -29,10 +30,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "התקנת ReactOS" FONT 8, "MS Shell Dlg" BEGIN - CONTROL "Type of setup", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172 - CONTROL "Install ReactOS", IDC_INSTALL, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 20, 15, 277, 10 - CONTROL "Repair or update an installed ReactOS", IDC_SETUP, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 20, 30, 277, 10 - LTEXT "Click Next to setup the devices.", IDC_STATIC, 10, 180 ,297, 10 + CONTROL "סוג התקנה", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172 + CONTROL "התקנת ReactOS", IDC_INSTALL, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 20, 15, 277, 10 + CONTROL "תיקון או עדכון גרסה קיימת", IDC_SETUP, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 20, 30, 277, 10 + LTEXT "לחץ על הבא כדי להגדיר את ההתקנים", IDC_STATIC, 10, 180 ,297, 10 END IDD_DEVICEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 @@ -40,14 +41,14 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "התקנת ReactOS" FONT 8, "MS Shell Dlg" BEGIN - CONTROL "Device settings", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172 - LTEXT "Computer:", IDC_STATIC, 20,15, 80, 10 + CONTROL "הגדרות התקנים", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172 + LTEXT "מחשב:", IDC_STATIC, 20,15, 80, 10 CONTROL "", IDC_COMPUTER, "ComboBox", WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST , 100, 15, 180, 80 - LTEXT "Display:", IDC_STATIC, 20,35, 80, 10 + LTEXT "תצוגה:", IDC_STATIC, 20,35, 80, 10 CONTROL "", IDC_DISPLAY, "ComboBox", WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST , 100, 35, 180, 80 - LTEXT "Keyboard:", IDC_STATIC, 20,55, 80, 10 + LTEXT "תצוגה:", IDC_STATIC, 20,55, 80, 10 CONTROL "", IDC_KEYBOARD, "ComboBox", WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST , 100, 55, 180, 80 - LTEXT "Click Next to setup of the installation device.", IDC_STATIC, 10, 180 ,277, 20 + LTEXT "לחץ על הבא כדי להגדיר את התקן ההתקנה.", IDC_STATIC, 10, 180 ,277, 20 END IDD_DRIVEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 @@ -55,37 +56,37 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "התקנת ReactOS" FONT 8, "MS Shell Dlg" BEGIN - CONTROL "Partition for ReactOS installation", IDC_STATIC, "Button", BS_GROUPBOX, 10,1,298,176 + CONTROL "מחיצה עבור התקנת ReactOS", IDC_STATIC, "Button", BS_GROUPBOX, 10,1,298,176 LISTBOX IDC_PARTITION, 20,12,278,142,LBS_HASSTRINGS | WS_VSCROLL - PUSHBUTTON "&Create", IDC_PARTCREATE, 20,155,50,15 - PUSHBUTTON "&Delete", IDC_PARTDELETE, 76,155,50,15 - PUSHBUTTON "D&river", IDC_DEVICEDRIVER, 162,155,50,15, WS_DISABLED - PUSHBUTTON "&Advanced Options...", IDC_PARTMOREOPTS, 218,155,80,15 - LTEXT "Click Next to check the summary.", IDC_STATIC, 10, 180 ,277, 20 + PUSHBUTTON "צור", IDC_PARTCREATE, 20,155,50,15 + PUSHBUTTON "מחק", IDC_PARTDELETE, 76,155,50,15 + PUSHBUTTON "טעינת מנהל התקן", IDC_DEVICEDRIVER, 162,155,50,15, WS_DISABLED + PUSHBUTTON "אפשרויות מתקדמות...", IDC_PARTMOREOPTS, 218,155,80,15 + LTEXT "לחץ על הבא כדי לראות סיכום.", IDC_STATIC, 10, 180 ,277, 20 END IDD_PARTITION DIALOGEX DISCARDABLE 0, 0, 145, 90 STYLE WS_VISIBLE|WS_CAPTION|WS_THICKFRAME -CAPTION "Create Partition" +CAPTION "יצירת מחיצה" FONT 8, "MS Shell Dlg" BEGIN CONTROL "",IDC_UPDOWN1,"msctls_updown32", WS_VISIBLE,104,22,9,13 - CONTROL "Create and format partition",IDC_STATIC,"Button",BS_GROUPBOX,7,5,129,57 - LTEXT "Size:",IDC_STATIC, 13,24,27,9 + CONTROL "יצירת ואתחול המחיצה",IDC_STATIC,"Button",BS_GROUPBOX,7,5,129,57 + LTEXT "גודל:",IDC_STATIC, 13,24,27,9 EDITTEXT IDC_PARTSIZE,52,23,53,13, WS_VISIBLE|WS_TABSTOP - LTEXT "GB",IDC_UNIT, 117,24,14,9 - LTEXT "Filesystem:",IDC_STATIC,13,46,35,9 + LTEXT "ג""ב",IDC_UNIT, 117,24,14,9 + LTEXT "מערכת קבצים:",IDC_STATIC,13,46,35,9 CONTROL "",IDC_FSTYPE,"ComboBox",WS_VISIBLE|WS_TABSTOP|CBS_DROPDOWNLIST,52,42,79,50 - PUSHBUTTON "&OK",IDOK,35,68,47,15, WS_VISIBLE|WS_TABSTOP - PUSHBUTTON "&Cancel",IDCANCEL,87,68,47,15, WS_VISIBLE|WS_TABSTOP + PUSHBUTTON "אישור",IDOK,35,68,47,15, WS_VISIBLE|WS_TABSTOP + PUSHBUTTON "ביטול",IDCANCEL,87,68,47,15, WS_VISIBLE|WS_TABSTOP END IDD_BOOTOPTIONS DIALOGEX DISCARDABLE 0, 0, 305, 116 STYLE WS_VISIBLE|WS_CAPTION|WS_THICKFRAME -CAPTION "Advanced Partition Settings" +CAPTION "הגדרות מחיצה מתקדמות" FONT 8, "MS Shell Dlg" BEGIN - CONTROL "Installation folder", IDC_STATIC, "Button", BS_GROUPBOX, 4,1,298,30 + CONTROL "תיקיית התקנה", IDC_STATIC, "Button", BS_GROUPBOX, 4,1,298,30 EDITTEXT IDC_PATH, 10,11,278,13, WS_VISIBLE CONTROL "Boot loader installation", IDC_STATIC, "Button", BS_GROUPBOX, 4,36,298,52 @@ -93,8 +94,8 @@ BEGIN CONTROL "Install boot loader on the hard disk (MBR and VBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,46,278,11 CONTROL "Install boot loader on the hard disk (VBR only)", IDC_INSTVBRONLY, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,57,278,11 CONTROL "No installation of bootloader", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,68,278,11 - PUSHBUTTON "&OK", IDOK, 180,94,50,15, WS_TABSTOP | WS_VISIBLE - PUSHBUTTON "&Cancel", IDCANCEL, 240,94,50,15, WS_TABSTOP | WS_VISIBLE + PUSHBUTTON "אישור", IDOK, 180,94,50,15, WS_TABSTOP | WS_VISIBLE + PUSHBUTTON "ביטול", IDCANCEL, 240,94,50,15, WS_TABSTOP | WS_VISIBLE END IDD_SUMMARYPAGE DIALOGEX 0, 0, 317, 193 @@ -102,8 +103,8 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "התקנת ReactOS" FONT 8, "MS Shell Dlg" BEGIN - CONTROL "Installation summary", IDC_ACTION, "Button", BS_GROUPBOX, 10,0,297,172 - LTEXT "Click Next to start the installation process.", IDC_STATIC, 10, 180 ,277, 20 + CONTROL "סיכום ההתקנה", IDC_ACTION, "Button", BS_GROUPBOX, 10,0,297,172 + LTEXT "לחץ על הבא כדי להתחיל בתהליך ההתקנה.", IDC_STATIC, 10, 180 ,277, 20 END IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 @@ -111,7 +112,7 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "התקנת ReactOS" FONT 8, "MS Shell Dlg" BEGIN - CONTROL "Setup action", IDC_ACTION, "Button", BS_GROUPBOX, 10,0,297,172 + CONTROL "פעולת ההתקנה", IDC_ACTION, "Button", BS_GROUPBOX, 10,0,297,172 LTEXT "Install files...", IDC_ACTIVITY, 20, 50, 277, 10 LTEXT "test.txt", IDC_ITEM, 30, 80, 257, 10 CONTROL "", IDC_PROCESSPROGRESS, "msctls_progress32", @@ -120,12 +121,12 @@ END IDD_RESTARTPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Completing ReactOS Setup" +CAPTION "השלמת התקנת ReactOS" FONT 8, "MS Shell Dlg" BEGIN CONTROL "Completing the first stage of ReactOS Setup", IDC_FINISHTITLE, "Button", BS_GROUPBOX, 10,0,297,172 LTEXT "You have successfully completed the first stage of ReactOS Setup.", IDC_STATIC, 20, 50, 277, 10 - + LTEXT "When you click Finish, your computer will restart.", IDC_STATIC, 20, 80, 277, 10 CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 120, 277, 8 LTEXT "If there is a CD in a drive, remove it. Then, to restart your computer, click Finish.", IDC_STATIC, 10, 180, 297, 20 @@ -133,10 +134,10 @@ END STRINGTABLE BEGIN - IDS_LANGTITLE "Language Selection" + IDS_LANGTITLE "בחירת שפה" IDS_LANGSUBTITLE "Choose language for setup and final system." - IDS_TYPETITLE "Welcome to ReactOS Setup" - IDS_TYPESUBTITLE "Choose setup type." + IDS_TYPETITLE "ברוכים הבאים אל תכנית ההתקנה של ReactOS" + IDS_TYPESUBTITLE "בחירת סוג התקנה." IDS_DEVICETITLE "Setup the basic devices" IDS_DEVICESUBTITLE "Set the settings of display and keyboard." IDS_DRIVETITLE "Setup the installation partition and system folder" diff --git a/base/setup/usetup/lang/he-IL.h b/base/setup/usetup/lang/he-IL.h index 3dba3f8ee15..eb869b7cfb3 100644 --- a/base/setup/usetup/lang/he-IL.h +++ b/base/setup/usetup/lang/he-IL.h @@ -12,37 +12,37 @@ static MUI_ENTRY heILLanguagePageEntries[] = { 4, 3, - " ReactOS " KERNEL_VERSION_STR " ", + " ReactOS " KERNEL_VERSION_STR " ", TEXT_STYLE_UNDERLINE }, { 6, 8, - " ", + " ", TEXT_STYLE_NORMAL }, { 8, 10, - "\x07 Please choose the language used for the installation process.", + "\x07 .", TEXT_STYLE_NORMAL }, { 8, 11, - " ENTER.", + " .ENTER ", TEXT_STYLE_NORMAL }, { 8, 13, - "\x07 This Language will be the default language for the final system.", + "\x07 . ", TEXT_STYLE_NORMAL }, { 0, 0, - "ENTER = F3 = ", + " = F3 = ENTER", TEXT_TYPE_STATUS | TEXT_PADDING_BIG }, { @@ -58,55 +58,55 @@ static MUI_ENTRY heILWelcomePageEntries[] = { 4, 3, - " ReactOS " KERNEL_VERSION_STR " ", + " ReactOS " KERNEL_VERSION_STR " ", TEXT_STYLE_UNDERLINE }, { 6, 8, - " ReactOS", + "ReactOS ", TEXT_STYLE_HIGHLIGHT }, { 6, 11, - "This part of the setup copies the ReactOS Operating System to your", + " ", TEXT_STYLE_NORMAL }, { 6, 12, - "computer and prepares the second part of the setup.", + " .", TEXT_STYLE_NORMAL }, { 8, 15, - "\x07 ENTER ReactOS", + "\x07 ReactOS ENTER ", TEXT_STYLE_NORMAL }, { 8, 17, - "\x07 Press R to repair or update ReactOS.", + "\x07 .ReactOS R ", TEXT_STYLE_NORMAL }, { 8, 19, - "\x07 Press L to view the ReactOS Licensing Terms and Conditions.", + "\x07 .ReactOS L ", TEXT_STYLE_NORMAL }, { 8, 21, - "\x07 Press F3 to quit without installing ReactOS.", + "\x07 .ReactOS F3 ", TEXT_STYLE_NORMAL }, { 6, 23, - "For more information on ReactOS, please visit:", + ": ,ReactOS ", TEXT_STYLE_NORMAL }, { @@ -118,7 +118,7 @@ static MUI_ENTRY heILWelcomePageEntries[] = { 0, 0, - "ENTER = R = L = F3 = ", + " = F3 = L = R = ENTER", TEXT_TYPE_STATUS | TEXT_PADDING_BIG }, { @@ -134,43 +134,43 @@ static MUI_ENTRY heILIntroPageEntries[] = { 4, 3, - " ReactOS " KERNEL_VERSION_STR " Setup ", + " ReactOS " KERNEL_VERSION_STR " ", TEXT_STYLE_UNDERLINE }, { 6, 8, - "ReactOS Setup is in an early development phase. It does not yet", + " . ReactOS ", TEXT_STYLE_NORMAL }, { 6, 9, - "support all the functions of a fully usable setup application.", + ". ", TEXT_STYLE_NORMAL }, { 6, 12, - "The following limitations apply:", + ": ", TEXT_STYLE_NORMAL }, { 8, 13, - "- Setup can not handle more than one primary partition per disk.", + ". -", TEXT_STYLE_NORMAL }, { 8, 14, - "- Setup can not delete a primary partition from a disk", + " -", TEXT_STYLE_NORMAL }, { 8, 15, - " as long as extended partitions exist on this disk.", + ". ", TEXT_STYLE_NORMAL }, { diff --git a/base/setup/usetup/mui.c b/base/setup/usetup/mui.c index ab1568cf73b..174f2f96313 100644 --- a/base/setup/usetup/mui.c +++ b/base/setup/usetup/mui.c @@ -614,7 +614,7 @@ AddFontsSettingsToRegistry(IN const MUI_SUBFONT * MuiSubFonts) ULONG uIndex = 0; RtlInitUnicodeString(&KeyName, - L"\\Registry\\Machine\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SysFontSubstitutes"); + L"\\Registry\\Machine\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes"); InitializeObjectAttributes(&ObjectAttributes, &KeyName, OBJ_CASE_INSENSITIVE, diff --git a/base/setup/usetup/muifonts.h b/base/setup/usetup/muifonts.h index db0a4faa46f..cc08b8143ed 100644 --- a/base/setup/usetup/muifonts.h +++ b/base/setup/usetup/muifonts.h @@ -7,9 +7,10 @@ MUI_SUBFONT LatinFonts[] = { L"Arial", L"Liberation Sans" }, { L"Courier", L"FreeMono" }, { L"Courier New", L"FreeMono" }, - { L"Fixedsys", L"Fixedsys Excelsior 3.01" }, + { L"Fixedsys", L"Fixedsys Excelsior 3.01-L2" }, { L"Helv", L"Tahoma" }, { L"Helvetica", L"Liberation Sans" }, + { L"Lucida Console", L"DejaVu Sans Mono" }, { L"MS Sans Serif", L"Tahoma" }, { L"MS Shell Dlg", L"Tahoma" }, { L"MS Shell Dlg 2", L"Tahoma" }, @@ -24,9 +25,10 @@ MUI_SUBFONT CyrillicFonts[] = { L"Arial", L"Liberation Sans" }, { L"Courier", L"FreeMono" }, { L"Courier New", L"FreeMono" }, - { L"Fixedsys", L"Fixedsys Excelsior 3.01" }, + { L"Fixedsys", L"Fixedsys Excelsior 3.01-L2" }, { L"Helv", L"Tahoma" }, { L"Helvetica", L"Liberation Sans" }, + { L"Lucida Console", L"DejaVu Sans Mono" }, { L"MS Sans Serif", L"Tahoma" }, { L"MS Shell Dlg", L"Tahoma" }, { L"MS Shell Dlg 2", L"Tahoma" }, @@ -41,9 +43,10 @@ MUI_SUBFONT GreekFonts[] = { L"Arial", L"Liberation Sans" }, { L"Courier", L"FreeMono" }, { L"Courier New", L"FreeMono" }, - { L"Fixedsys", L"Fixedsys Excelsior 3.01" }, + { L"Fixedsys", L"Fixedsys Excelsior 3.01-L2" }, { L"Helv", L"DejaVu Sans" }, { L"Helvetica", L"Liberation Sans" }, + { L"Lucida Console", L"DejaVu Sans Mono" }, { L"MS Sans Serif", L"DejaVu Sans" }, { L"MS Shell Dlg", L"DejaVu Sans" }, { L"MS Shell Dlg 2", L"DejaVu Sans" }, @@ -58,9 +61,10 @@ MUI_SUBFONT HebrewFonts[] = { L"Arial", L"DejaVu Sans" }, { L"Courier", L"FreeMono" }, { L"Courier New", L"FreeMono" }, - { L"Fixedsys", L"Fixedsys Excelsior 3.01" }, + { L"Fixedsys", L"Fixedsys Excelsior 3.01-L2" }, { L"Helv", L"DejaVu Sans" }, { L"Helvetica", L"DejaVu Sans" }, + { L"Lucida Console", L"DejaVu Sans Mono" }, { L"MS Sans Serif", L"DejaVu Sans" }, { L"MS Shell Dlg", L"DejaVu Sans" }, { L"MS Shell Dlg 2", L"DejaVu Sans" }, @@ -75,9 +79,10 @@ MUI_SUBFONT CJKFonts[] = { L"Arial", L"Liberation Sans" }, { L"Courier", L"FreeMono" }, { L"Courier New", L"FreeMono" }, - { L"Fixedsys", L"Fixedsys Excelsior 3.01" }, + { L"Fixedsys", L"Fixedsys Excelsior 3.01-L2" }, { L"Helv", L"Droid Sans Fallback" }, { L"Helvetica", L"Liberation Sans" }, + { L"Lucida Console", L"DejaVu Sans Mono" }, { L"MS Sans Serif", L"Droid Sans Fallback" }, { L"MS Shell Dlg", L"Droid Sans Fallback" }, { L"MS Shell Dlg 2", L"Droid Sans Fallback" }, @@ -94,9 +99,10 @@ MUI_SUBFONT UnicodeFonts[] = { L"Arial", L"DejaVu Sans" }, { L"Courier", L"DejaVu Sans Mono" }, { L"Courier New", L"DejaVu Sans Mono" }, - { L"Fixedsys", L"Fixedsys Excelsior 3.01" }, + { L"Fixedsys", L"Fixedsys Excelsior 3.01-L2" }, { L"Helv", L"DejaVu Sans" }, { L"Helvetica", L"DejaVu Sans" }, + { L"Lucida Console", L"DejaVu Sans Mono" }, { L"MS Sans Serif", L"DejaVu Sans" }, { L"MS Shell Dlg", L"DejaVu Sans" }, { L"MS Shell Dlg 2", L"DejaVu Sans" }, diff --git a/base/setup/usetup/registry.c b/base/setup/usetup/registry.c index d93e7079f8d..0ae7ab72817 100644 --- a/base/setup/usetup/registry.c +++ b/base/setup/usetup/registry.c @@ -47,6 +47,18 @@ #define FLG_ADDREG_TYPE_MASK (0xFFFF0000 | FLG_ADDREG_BINVALUETYPE) #endif +#ifdef _M_IX86 +#define Architecture L"x86" +#elif defined(_M_AMD64) +#define Architecture L"amd64" +#elif defined(_M_IA64) +#define Architecture L"ia64" +#elif defined(_M_ARM) +#define Architecture L"arm" +#elif defined(_M_PPC) +#define Architecture L"ppc" +#endif + #include typedef struct _REG_DISK_MOUNT_INFO @@ -643,6 +655,11 @@ ImportRegistryFile(PWSTR Filename, DPRINT1("registry_callback() failed\n"); } + if (!registry_callback (hInf, L"AddReg.NT" Architecture, FALSE)) + { + DPRINT1("registry_callback() failed\n"); + } + InfCloseFile (hInf); return TRUE; diff --git a/base/setup/vmwinst/lang/he-IL.rc b/base/setup/vmwinst/lang/he-IL.rc index 4b21a1f2f45..3f596c9c794 100644 --- a/base/setup/vmwinst/lang/he-IL.rc +++ b/base/setup/vmwinst/lang/he-IL.rc @@ -7,7 +7,7 @@ CAPTION "התקנת מנהל ההתקן של כרטיס המסך" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN LTEXT "תכנית ההתקנה זיהתה שהינך מריץ את ReactOS בתוך VMware(r)", -1, 117, 8, 140, 24 - LTEXT "If you like to install the VMware(r) SVGA driver click 'Next', otherwise click 'Cancel'.", -1, 117, 140, 140, 24 + LTEXT "אם ברצונך להתקין את מנהל ההתקן של VMware(r) SVGA לחץ על 'הבא', אם אחרת לחץ על 'ביטול'.", -1, 117, 140, 140, 24 END IDD_INSERT_VMWARE_TOOLS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT @@ -44,7 +44,7 @@ BEGIN PUSHBUTTON "1792x1344", 3136, 195, 30, 65, 15, BS_AUTORADIOBUTTON PUSHBUTTON "1856x1392", 3248, 195, 45, 65, 15, BS_AUTORADIOBUTTON PUSHBUTTON "1920x1440", 3360, 195, 60, 50, 15, BS_AUTORADIOBUTTON - LTEXT "Please select your favorite color quality:", -1, 25, 93, 225, 12 + LTEXT "נא בחר את איכות הצבעים המועדפת עליך:", -1, 25, 93, 225, 12 COMBOBOX IDC_COLORQUALITY, 25, 105, 75, 80, CBS_DROPDOWNLIST | WS_TABSTOP END diff --git a/base/shell/cmd/todo.txt b/base/shell/cmd/todo.txt index b9895bdd6d5..f9571d3e3a6 100644 --- a/base/shell/cmd/todo.txt +++ b/base/shell/cmd/todo.txt @@ -21,4 +21,4 @@ This is mostly done thanks to Greatlord(cmd.c is the hardest spot that is left). Not sure where to put this code even *Reg Testing -We need more batch files like the one Royce made for "set /a". What out for if bugs when doing this... could lead to in the wrong direction when looking for a regression. \ No newline at end of file +We need more batch files like the one Royce made for "set /a". What out for if bugs when doing this... could lead to in the wrong direction when looking for a regression. diff --git a/base/shell/explorer-new/dragdrop.c b/base/shell/explorer-new/dragdrop.c index 100c84d415b..ae1cb640160 100644 --- a/base/shell/explorer-new/dragdrop.c +++ b/base/shell/explorer-new/dragdrop.c @@ -131,14 +131,11 @@ CreateDropTarget(IN HWND hwndTarget, HRESULT hr; This = HeapAlloc(hProcessHeap, - 0, + HEAP_ZERO_MEMORY, FIELD_OFFSET(IDropTargetImpl, Formats[nSupportedFormats])); if (This != NULL) { - ZeroMemory(This, - sizeof(*This)); - This->lpVtbl = &IDropTargetImpl_Vtbl; This->Ref = 1; This->hwndTarget = hwndTarget; diff --git a/base/shell/explorer-new/explorer.c b/base/shell/explorer-new/explorer.c index c3da293e211..5c9ab725a15 100644 --- a/base/shell/explorer-new/explorer.c +++ b/base/shell/explorer-new/explorer.c @@ -332,7 +332,7 @@ GetVersionInfoString(IN TCHAR *szFileName, (LPVOID *)&lpszLocalBuf, &cbLen) != 0) { - wcsncpy(szBuffer, lpszLocalBuf, cbBufLen); + _tcsncpy(szBuffer, lpszLocalBuf, cbBufLen / sizeof(*szBuffer)); bRet = TRUE; break; @@ -401,6 +401,8 @@ _tWinMain(IN HINSTANCE hInstance, InitCommonControls(); OleInitialize(NULL); + ProcessStartupItems(); + if (GetShellWindow() == NULL) CreateShellDesktop = TRUE; @@ -424,8 +426,6 @@ _tWinMain(IN HINSTANCE hInstance, /* WinXP: Notify msgina to hide the welcome screen */ if (!SetShellReadyEvent(TEXT("msgina: ShellReadyEvent"))) SetShellReadyEvent(TEXT("Global\\msgina: ShellReadyEvent")); - - ProcessStartupItems(); } else { diff --git a/base/shell/explorer-new/lang/he-IL.rc b/base/shell/explorer-new/lang/he-IL.rc index 629cd0df1a3..db12f920a5a 100644 --- a/base/shell/explorer-new/lang/he-IL.rc +++ b/base/shell/explorer-new/lang/he-IL.rc @@ -104,7 +104,7 @@ BEGIN AUTOCHECKBOX "החבא סמלים לא פעילים", IDC_TASKBARPROP_HIDEICONS, 13,70,125,10, WS_DISABLED PUSHBUTTON "התאם אישית...", IDC_TASKBARPROP_ICONCUST, 188,70,50,14, WS_DISABLED GROUPBOX "סמלי המערכת", IDC_STATIC, 6,97,240,84, WS_DISABLED - LTEXT "Select which system icons to always show.", IDC_STATIC, 13,112,223,16, WS_DISABLED + LTEXT "בחר אילו סמלי מערכת כל הזמן יהיו נראים.", IDC_STATIC, 13,112,223,16, WS_DISABLED AUTOCHECKBOX "שעון", IDC_TASKBARPROP_CLOCK, 13,126,200,10, WS_DISABLED AUTOCHECKBOX "בקרת עוצמה", IDC_TASKBARPROP_VOLUME, 13,139,200,10, WS_DISABLED AUTOCHECKBOX "רשת", IDC_TASKBARPROP_NETWORK, 13,152,200,10, WS_DISABLED @@ -117,7 +117,7 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPT CAPTION "סרגלי כלים" FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN - LTEXT "Select which toolbars to add to the taskbar.", IDC_STATIC, 7,7,223,12, WS_DISABLED + LTEXT "בחר אילו סרגלי כלים להוסיף לשורת המשימות.", IDC_STATIC, 7,7,223,12, WS_DISABLED CONTROL "", IDC_TASKBARPROP_DESKBANDLIST, "SysTreeView32",WS_BORDER | WS_TABSTOP | WS_DISABLED, 7,20,236,160, WS_EX_CLIENTEDGE END @@ -143,5 +143,5 @@ END STRINGTABLE DISCARDABLE BEGIN - IDS_TASKBAR_STARTMENU_PROP_CAPTION "Taskbar and Start Menu" + IDS_TASKBAR_STARTMENU_PROP_CAPTION "שורת המשימות ושולחן העבודה" END diff --git a/base/shell/explorer-new/precomp.h b/base/shell/explorer-new/precomp.h index 11e6df1fa0e..56e4a4b6828 100644 --- a/base/shell/explorer-new/precomp.h +++ b/base/shell/explorer-new/precomp.h @@ -79,12 +79,12 @@ Win32DbgPrint(const char *filename, int line, const char *lpFormat, ...) } #define ASSERT(cond) \ - if (!(cond)) { \ + do if (!(cond)) { \ Win32DbgPrint(__FILE__, __LINE__, "ASSERTION %s FAILED!\n", #cond); \ - } + } while (0) #define DbgPrint(fmt, ...) \ - Win32DbgPrint(__FILE__, __LINE__, fmt, ##__VA_ARGS__); + Win32DbgPrint(__FILE__, __LINE__, fmt, ##__VA_ARGS__) extern HINSTANCE hExplorerInstance; extern HMODULE hUser32; @@ -170,6 +170,8 @@ GetExplorerRegValueSet(IN HKEY hKey, * traywnd.c */ +#define TWM_OPENSTARTMENU (WM_USER + 260) + typedef HMENU (*PCREATECTXMENU)(IN HWND hWndOwner, IN PVOID *ppcmContext, IN PVOID Context OPTIONAL); @@ -426,7 +428,7 @@ TrayNotify_NotifyMsg(IN HWND hwnd, * taskswnd.c */ -#define TSWM_ENABLEGROUPING (WM_USER + 1) +#define TSWM_ENABLEGROUPING (WM_USER + 1) #define TSWM_UPDATETASKBARPOS (WM_USER + 2) BOOL diff --git a/base/shell/explorer-new/startmnu.c b/base/shell/explorer-new/startmnu.c index e5f2f159276..845f53835e9 100644 --- a/base/shell/explorer-new/startmnu.c +++ b/base/shell/explorer-new/startmnu.c @@ -773,14 +773,11 @@ IStartMenuSiteImpl_Construct(IN ITrayWindow *Tray) IStartMenuSiteImpl *This; This = HeapAlloc(hProcessHeap, - 0, + HEAP_ZERO_MEMORY, sizeof(*This)); if (This == NULL) return NULL; - ZeroMemory(This, - sizeof(*This)); - This->lpVtbl = &IStartMenuSiteImpl_Vtbl; This->lpServiceProviderVtbl = &IServiceProviderImpl_Vtbl; This->lpStartMenuCallbackVtbl = &ITrayPrivImpl_Vtbl; diff --git a/base/shell/explorer-new/startup.c b/base/shell/explorer-new/startup.c index b59fda32e89..4d4295bb5df 100644 --- a/base/shell/explorer-new/startup.c +++ b/base/shell/explorer-new/startup.c @@ -26,19 +26,16 @@ * Also, 119941 has some info on grpconv.exe * The operations performed are (by order of execution): * - * Startup (before the user logs in) - * - Services (NT, ?semi-synchronous?, not implemented yet) - * - HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce (9x, asynch) - * - HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices (9x, asynch) - * * After log in - * - HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce (all, synch) - * - HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run (all, asynch) - * - HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run (all, asynch) - * - Startup folders (all, ?asynch?, no imp) - * - HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce (all, asynch) + * - HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx (synch, no imp) + * - HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce (synch) + * - HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run (asynch) + * - HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run (asynch) + * - All users Startup folder "%ALLUSERSPROFILE%\Start Menu\Programs\Startup" (asynch, no imp) + * - Current user Startup folder "%USERPROFILE%\Start Menu\Programs\Startup" (asynch, no imp) + * - HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce (asynch) * - * Somewhere in there is processing the RunOnceEx entries (also no imp) + * None is processed in Safe Mode // FIXME: Check RunOnceEx in Safe Mode */ #include "precomp.h" @@ -78,12 +75,12 @@ static int runCmd(LPWSTR cmdline, LPCWSTR dir, BOOL wait, BOOL minimized) if (!CreateProcessW(NULL, szCmdLineExp, NULL, NULL, FALSE, 0, NULL, dir, &si, &info)) { - printf("Failed to run command (%ld)\n", GetLastError()); + DbgPrint("Failed to run command (%lu)\n", GetLastError()); return INVALID_RUNCMD_RETURN; } - printf("Successfully ran command\n"); + DbgPrint("Successfully ran command\n"); if (wait) { /* wait for the process to exit */ @@ -110,87 +107,116 @@ static int runCmd(LPWSTR cmdline, LPCWSTR dir, BOOL wait, BOOL minimized) static BOOL ProcessRunKeys(HKEY hkRoot, LPCWSTR szKeyName, BOOL bDelete, BOOL bSynchronous) { - static const WCHAR WINKEY_NAME[]={'S','o','f','t','w','a','r','e','\\', - 'M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\', - 'C','u','r','r','e','n','t','V','e','r','s','i','o','n',0}; - HKEY hkWin = NULL, hkRun=NULL; + HKEY hkWin = NULL, hkRun = NULL; LONG res = ERROR_SUCCESS; - DWORD i, nMaxCmdLine = 0, nMaxValue = 0; + DWORD i, cbMaxCmdLine = 0, cchMaxValue = 0; WCHAR *szCmdLine = NULL; WCHAR *szValue = NULL; if (hkRoot == HKEY_LOCAL_MACHINE) - wprintf(L"processing %s entries under HKLM\n", szKeyName); + DbgPrint("processing %ls entries under HKLM\n", szKeyName); else - wprintf(L"processing %s entries under HKCU\n", szKeyName); + DbgPrint("processing %ls entries under HKCU\n", szKeyName); - if ((res = RegOpenKeyExW(hkRoot, WINKEY_NAME, 0, KEY_READ, &hkWin)) != ERROR_SUCCESS) + res = RegOpenKeyExW(hkRoot, + L"Software\\Microsoft\\Windows\\CurrentVersion", + 0, + KEY_READ, + &hkWin); + if (res != ERROR_SUCCESS) { - printf("RegOpenKey failed on Software\\Microsoft\\Windows\\CurrentVersion (%ld)\n", - res); + DbgPrint("RegOpenKey failed on Software\\Microsoft\\Windows\\CurrentVersion (%ld)\n", res); goto end; } - if ((res = RegOpenKeyExW(hkWin, szKeyName, 0, bDelete?KEY_ALL_ACCESS:KEY_READ, &hkRun))!= - ERROR_SUCCESS) + res = RegOpenKeyExW(hkWin, + szKeyName, + 0, + bDelete ? KEY_ALL_ACCESS : KEY_READ, + &hkRun); + if (res != ERROR_SUCCESS) { if (res == ERROR_FILE_NOT_FOUND) { - printf("Key doesn't exist - nothing to be done\n"); + DbgPrint("Key doesn't exist - nothing to be done\n"); res = ERROR_SUCCESS; } else - printf("RegOpenKey failed on run key (%ld)\n", res); + DbgPrint("RegOpenKeyEx failed on run key (%ld)\n", res); goto end; } - if ((res = RegQueryInfoKeyW(hkRun, NULL, NULL, NULL, NULL, NULL, NULL, &i, &nMaxValue, - &nMaxCmdLine, NULL, NULL)) != ERROR_SUCCESS) + res = RegQueryInfoKeyW(hkRun, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + &i, + &cchMaxValue, + &cbMaxCmdLine, + NULL, + NULL); + if (res != ERROR_SUCCESS) { - printf("Couldn't query key info (%ld)\n", res); + DbgPrint("Couldn't query key info (%ld)\n", res); goto end; } if (i == 0) { - printf("No commands to execute.\n"); + DbgPrint("No commands to execute.\n"); res = ERROR_SUCCESS; goto end; } - if ((szCmdLine = malloc(nMaxCmdLine)) == NULL) + szCmdLine = HeapAlloc(hProcessHeap, + 0, + cbMaxCmdLine); + if (szCmdLine == NULL) { - printf("Couldn't allocate memory for the commands to be executed\n"); + DbgPrint("Couldn't allocate memory for the commands to be executed\n"); res = ERROR_NOT_ENOUGH_MEMORY; goto end; } - if ((szValue = malloc((++nMaxValue)*sizeof(*szValue))) == NULL) + ++cchMaxValue; + szValue = HeapAlloc(hProcessHeap, + 0, + cchMaxValue * sizeof(*szValue)); + if (szValue == NULL) { - printf("Couldn't allocate memory for the value names\n"); + DbgPrint("Couldn't allocate memory for the value names\n"); - free(szCmdLine); res = ERROR_NOT_ENOUGH_MEMORY; goto end; } - while(i > 0) + while (i > 0) { - DWORD nValLength=nMaxValue, nDataLength=nMaxCmdLine; + DWORD cchValLength = cchMaxValue, cbDataLength = cbMaxCmdLine; DWORD type; --i; - if ((res = RegEnumValueW(hkRun, i, szValue, &nValLength, 0, &type, - (LPBYTE)szCmdLine, &nDataLength)) != ERROR_SUCCESS) + res = RegEnumValueW(hkRun, + i, + szValue, + &cchValLength, + 0, + &type, + (PBYTE)szCmdLine, + &cbDataLength); + if (res != ERROR_SUCCESS) { - printf("Couldn't read in value %ld - %ld\n", i, res); + DbgPrint("Couldn't read in value %lu - %ld\n", i, res); continue; } @@ -200,35 +226,37 @@ static BOOL ProcessRunKeys(HKEY hkRoot, LPCWSTR szKeyName, BOOL bDelete, if (bDelete && (res = RegDeleteValueW(hkRun, szValue)) != ERROR_SUCCESS) { - printf("Couldn't delete value - %ld, %ld. Running command anyways.\n", i, res); + DbgPrint("Couldn't delete value - %lu, %ld. Running command anyways.\n", i, res); } if (type != REG_SZ) { - printf("Incorrect type of value #%ld (%ld)\n", i, type); + DbgPrint("Incorrect type of value #%lu (%lu)\n", i, type); continue; } - if ((res = runCmd(szCmdLine, NULL, bSynchronous, FALSE)) == INVALID_RUNCMD_RETURN) + res = runCmd(szCmdLine, NULL, bSynchronous, FALSE); + if (res == INVALID_RUNCMD_RETURN) { - printf("Error running cmd #%ld (%ld)\n", i, GetLastError()); + DbgPrint("Error running cmd #%lu (%lu)\n", i, GetLastError()); } - printf("Done processing cmd #%ld\n", i); + DbgPrint("Done processing cmd #%lu\n", i); } - free(szValue); - free(szCmdLine); res = ERROR_SUCCESS; - end: + if (szValue != NULL) + HeapFree(hProcessHeap, 0, szValue); + if (szCmdLine != NULL) + HeapFree(hProcessHeap, 0, szCmdLine); if (hkRun != NULL) RegCloseKey(hkRun); if (hkWin != NULL) RegCloseKey(hkWin); - printf("done\n"); + DbgPrint("done\n"); return res == ERROR_SUCCESS ? TRUE : FALSE; } @@ -237,26 +265,25 @@ end: int ProcessStartupItems(VOID) { + /* TODO: ProcessRunKeys already checks SM_CLEANBOOT -- items prefixed with * should probably run even in safe mode */ BOOL bNormalBoot = GetSystemMetrics(SM_CLEANBOOT) == 0; /* Perform the operations that are performed every boot */ /* First, set the current directory to SystemRoot */ - TCHAR gen_path[MAX_PATH]; + WCHAR gen_path[MAX_PATH]; DWORD res; HKEY hSessionKey, hKey; HRESULT hr; - res = GetWindowsDirectory(gen_path, sizeof(gen_path)); - + res = GetWindowsDirectoryW(gen_path, sizeof(gen_path) / sizeof(gen_path[0])); if (res == 0) { - printf("Couldn't get the windows directory - error %ld\n", - GetLastError()); + DbgPrint("Couldn't get the windows directory - error %lu\n", GetLastError()); return 100; } - if (!SetCurrentDirectory(gen_path)) + if (!SetCurrentDirectoryW(gen_path)) { - wprintf(L"Cannot set the dir to %s (%ld)\n", gen_path, GetLastError()); + DbgPrint("Cannot set the dir to %ls (%lu)\n", gen_path, GetLastError()); return 100; } @@ -267,7 +294,7 @@ ProcessStartupItems(VOID) LONG Error; DWORD dwDisp; - Error = RegCreateKeyEx(hSessionKey, L"StartupHasBeenRun", 0, NULL, REG_OPTION_VOLATILE, KEY_WRITE, NULL, &hKey, &dwDisp); + Error = RegCreateKeyExW(hSessionKey, L"StartupHasBeenRun", 0, NULL, REG_OPTION_VOLATILE, KEY_WRITE, NULL, &hKey, &dwDisp); RegCloseKey(hSessionKey); if (Error == ERROR_SUCCESS) { @@ -284,6 +311,8 @@ ProcessStartupItems(VOID) * stopping if one fails, skipping if necessary. */ res = TRUE; + /* TODO: RunOnceEx */ + if (res && (SHRestricted(REST_NOLOCALMACHINERUNONCE) == 0)) res = ProcessRunKeys(HKEY_LOCAL_MACHINE, L"RunOnce", TRUE, TRUE); @@ -293,10 +322,15 @@ ProcessStartupItems(VOID) if (res && bNormalBoot && (SHRestricted(REST_NOCURRENTUSERRUNONCE) == 0)) res = ProcessRunKeys(HKEY_CURRENT_USER, L"Run", FALSE, FALSE); + /* TODO: All users Startup folder */ + + /* TODO: Current user Startup folder */ + + /* TODO: HKCU\RunOnce runs even if StartupHasBeenRun exists */ if (res && bNormalBoot && (SHRestricted(REST_NOCURRENTUSERRUNONCE) == 0)) res = ProcessRunKeys(HKEY_CURRENT_USER, L"RunOnce", TRUE, FALSE); - printf("Operation done\n"); + DbgPrint("Operation done\n"); return res ? 0 : 101; } diff --git a/base/shell/explorer-new/taskband.c b/base/shell/explorer-new/taskband.c index dc7a54f5ba8..b884a7ae78f 100644 --- a/base/shell/explorer-new/taskband.c +++ b/base/shell/explorer-new/taskband.c @@ -629,13 +629,11 @@ ITaskBandImpl_Construct(IN OUT ITrayWindow *Tray) ITaskBandImpl *This; This = HeapAlloc(hProcessHeap, - 0, + HEAP_ZERO_MEMORY, sizeof(*This)); if (This == NULL) return NULL; - ZeroMemory(This, - sizeof(*This)); This->lpVtbl = &ITaskBandImpl_Vtbl; This->lpDeskBandVtbl = &IDeskBandImpl_Vtbl; This->lpObjectWithSiteVtbl = &IObjectWithSiteImpl_Vtbl; diff --git a/base/shell/explorer-new/taskswnd.c b/base/shell/explorer-new/taskswnd.c index 54ee6436439..5b1abb7fe41 100644 --- a/base/shell/explorer-new/taskswnd.c +++ b/base/shell/explorer-new/taskswnd.c @@ -709,13 +709,10 @@ TaskSwitchWnd_AddToTaskGroup(IN OUT PTASK_SWITCH_WND This, /* Allocate a new task group */ TaskGroup = HeapAlloc(hProcessHeap, - 0, + HEAP_ZERO_MEMORY, sizeof(*TaskGroup)); if (TaskGroup != NULL) { - ZeroMemory(TaskGroup, - sizeof(*TaskGroup)); - TaskGroup->dwTaskCount = 1; TaskGroup->dwProcessId = dwProcessId; TaskGroup->Index = -1; @@ -1465,7 +1462,7 @@ TaskSwitchWnd_Create(IN OUT PTASK_SWITCH_WND This) sizeof(TBBUTTON), 0); - This->TaskIcons = ImageList_Create(16, 16, ILC_COLOR32, 0, 1000); + This->TaskIcons = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 1000); SendMessage(This->hWndToolbar, TB_SETIMAGELIST, 0, (LPARAM)This->TaskIcons); /* Calculate the default button size. Don't save this in This->ButtonSize.cx so that @@ -2065,13 +2062,11 @@ ForwardContextMenuMsg: { LPCREATESTRUCT CreateStruct = (LPCREATESTRUCT)lParam; This = HeapAlloc(hProcessHeap, - 0, + HEAP_ZERO_MEMORY, sizeof(*This)); if (This == NULL) return FALSE; - ZeroMemory(This, - sizeof(*This)); This->hWnd = hwnd; This->hWndNotify = CreateStruct->hwndParent; This->Tray = (ITrayWindow*)CreateStruct->lpCreateParams; diff --git a/base/shell/explorer-new/tbsite.c b/base/shell/explorer-new/tbsite.c index 3cc190dd1e6..d27240b67cc 100644 --- a/base/shell/explorer-new/tbsite.c +++ b/base/shell/explorer-new/tbsite.c @@ -910,13 +910,11 @@ ITrayBandSiteImpl_Construct(IN OUT ITrayWindow *Tray, *phwndTaskSwitch = NULL; This = HeapAlloc(hProcessHeap, - 0, + HEAP_ZERO_MEMORY, sizeof(*This)); if (This == NULL) return NULL; - ZeroMemory(This, - sizeof(*This)); This->lpVtbl = &ITrayBandSiteImpl_Vtbl; This->lpBandSiteVtbl = &IBandSiteImpl_Vtbl; This->Ref = 1; diff --git a/base/shell/explorer-new/trayntfy.c b/base/shell/explorer-new/trayntfy.c index aa877a8f1a0..2f156d482be 100644 --- a/base/shell/explorer-new/trayntfy.c +++ b/base/shell/explorer-new/trayntfy.c @@ -51,11 +51,12 @@ SysPagerWnd_CreateNotifyItemData(IN OUT PSYS_PAGER_WND_DATA This) PNOTIFY_ITEM *findNotifyPointer = &This->NotifyItems; PNOTIFY_ITEM notifyItem; - notifyItem = malloc(sizeof(*notifyItem)); + notifyItem = HeapAlloc(hProcessHeap, + HEAP_ZERO_MEMORY, + sizeof(*notifyItem)); if (notifyItem == NULL) return NULL; - ZeroMemory(notifyItem, sizeof(*notifyItem)); notifyItem->next = NULL; while (*findNotifyPointer != NULL) @@ -248,7 +249,9 @@ SysPagerWnd_RemoveButton(IN OUT PSYS_PAGER_WND_DATA This, if (!(deleteItem->iconData.dwState & NIS_HIDDEN)) This->VisibleButtonCount--; - free(deleteItem); + HeapFree(hProcessHeap, + 0, + deleteItem); This->ButtonCount--; while (updateItem != NULL) @@ -377,7 +380,7 @@ SysPagerWnd_Create(IN OUT PSYS_PAGER_WND_DATA This) sizeof(TBBUTTON), 0); - This->SysIcons = ImageList_Create(16, 16, ILC_COLOR32, 0, 1000); + This->SysIcons = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 1000); SendMessage(This->hWndToolbar, TB_SETIMAGELIST, 0, (LPARAM)This->SysIcons); BtnSize.cx = BtnSize.cy = 18; @@ -615,12 +618,10 @@ CreateSysPagerWnd(IN HWND hWndParent, HWND hWnd = NULL; SpData = HeapAlloc(hProcessHeap, - 0, + HEAP_ZERO_MEMORY, sizeof(*SpData)); if (SpData != NULL) { - ZeroMemory(SpData, sizeof(*SpData)); - /* Create the window. The tray window is going to move it to the correct position and resize it as needed. */ dwStyle = WS_CHILD | WS_CLIPSIBLINGS; @@ -757,7 +758,7 @@ TrayClockWnd_UpdateTheme(IN OUT PTRAY_CLOCK_WND_DATA This) TMT_FONT, &clockFont); - hFont = CreateFontIndirect(&clockFont); + hFont = CreateFontIndirectW(&clockFont); TrayClockWnd_SetFont(This, hFont, @@ -1357,13 +1358,10 @@ CreateTrayClockWnd(IN HWND hWndParent, HWND hWnd = NULL; TcData = HeapAlloc(hProcessHeap, - 0, + HEAP_ZERO_MEMORY, sizeof(*TcData)); if (TcData != NULL) { - ZeroMemory(TcData, - sizeof(*TcData)); - TcData->IsHorizontal = TRUE; /* Create the window. The tray window is going to move it to the correct position and resize it as needed. */ @@ -1841,13 +1839,10 @@ CreateTrayNotifyWnd(IN OUT ITrayWindow *TrayWindow, return NULL; TnData = HeapAlloc(hProcessHeap, - 0, + HEAP_ZERO_MEMORY, sizeof(*TnData)); if (TnData != NULL) { - ZeroMemory(TnData, - sizeof(*TnData)); - TnData->TrayWindow = TrayWindow; TnData->HideClock = bHideClock; diff --git a/base/shell/explorer-new/traywnd.c b/base/shell/explorer-new/traywnd.c index 194c9ff5e73..c5cd756d917 100644 --- a/base/shell/explorer-new/traywnd.c +++ b/base/shell/explorer-new/traywnd.c @@ -1620,13 +1620,11 @@ ITrayWindowImpl_Construct(VOID) ITrayWindowImpl *This; This = HeapAlloc(hProcessHeap, - 0, + HEAP_ZERO_MEMORY, sizeof(*This)); if (This == NULL) return NULL; - ZeroMemory(This, - sizeof(*This)); This->lpVtbl = &ITrayWindowImpl_Vtbl; This->lpVtblShellDesktopTray = &IShellDesktopTrayImpl_Vtbl; This->Ref = 1; @@ -2532,6 +2530,10 @@ HandleTrayContextMenu: DestroyWindow(hwnd); break; + case TWM_OPENSTARTMENU: + SendMessage(This->hWnd, WM_COMMAND, MAKEWPARAM(BN_CLICKED, IDC_STARTBTN), (LPARAM)This->hwndStart); + break; + case WM_COMMAND: if ((HWND)lParam == This->hwndStart) { diff --git a/base/shell/explorer/explorer-he.rc b/base/shell/explorer/explorer-he.rc new file mode 100644 index 00000000000..52dd8848dd3 --- /dev/null +++ b/base/shell/explorer/explorer-he.rc @@ -0,0 +1,405 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Hebrew resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDM_MDIFRAME MENU DISCARDABLE +BEGIN + POPUP "&קובץ" + BEGIN + MENUITEM "הרצה...", ID_EXECUTE + MENUITEM SEPARATOR + MENUITEM "יציאה", ID_FILE_EXIT + END + POPUP "תצוגה" + BEGIN + MENUITEM "סרגל כלים", ID_VIEW_TOOL_BAR + MENUITEM "סרגל תוספת", ID_VIEW_EXTRA_BAR + MENUITEM "סרגל כונן", ID_VIEW_DRIVE_BAR + MENUITEM "סרגל צד", ID_VIEW_SIDE_BAR + MENUITEM "שורת מצב", ID_VIEW_STATUSBAR + MENUITEM SEPARATOR + MENUITEM "רענון\tF5", ID_REFRESH + MENUITEM "מסך מלא\tCtrl+Shift+S", ID_VIEW_FULLSCREEN + MENUITEM "SDI", ID_VIEW_SDI + END + POPUP "חלון" + BEGIN + MENUITEM "חלון חדש", ID_WINDOW_NEW + MENUITEM "מדורגים\tShift+F5", ID_WINDOW_CASCADE + MENUITEM "חלונות מוערמים", ID_WINDOW_TILE_HORZ + MENUITEM "חלונות זה לצד זה\tShift+F4", ID_WINDOW_TILE_VERT + MENUITEM "סדר אוטומטית", ID_WINDOW_AUTOSORT + MENUITEM "סדר סמלים", ID_WINDOW_ARRANGE + END + POPUP "כלים" + BEGIN + MENUITEM "אפשרויות", ID_TOOLS_OPTIONS + END + POPUP "עזרה" + BEGIN + MENUITEM "שאלות ותשובות...", ID_EXPLORER_FAQ + MENUITEM "אודות הסייר...", ID_ABOUT_EXPLORER + MENUITEM "אודות מערכת ההפעלה...", ID_ABOUT_WINDOWS + END +END + +IDM_DESKTOPBAR MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "הגדרות...", ID_DESKTOPBAR_SETTINGS + MENUITEM "מנהל המשימות...", ID_TASKMGR + MENUITEM SEPARATOR + MENUITEM "אודות הסייר...", ID_ABOUT_EXPLORER + END +END + +IDM_VOLUME MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "פתח בקרת עוצמה", ID_TRAY_VOLUME + MENUITEM "התאם תכונות שמע", ID_VOLUME_PROPERTIES + END +END + +IDM_NOTIFYAREA MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "הראה סמלים מוסתרים", ID_SHOW_HIDDEN_ICONS + MENUITEM "Show Icon &Button", ID_SHOW_ICON_BUTTON + MENUITEM "הגדר התראות...", ID_CONFIG_NOTIFYAREA + MENUITEM "התאמת תאריך/שעה...", ID_CONFIG_TIME + MENUITEM SEPARATOR + MENUITEM "אודות הסייר...", ID_ABOUT_EXPLORER + END +END + +IDM_SDIFRAME MENU DISCARDABLE +BEGIN + POPUP "קובץ" + BEGIN + MENUITEM "הרצה...", ID_EXECUTE + MENUITEM SEPARATOR + MENUITEM "יציאה", ID_FILE_EXIT + END + POPUP "תצוגה" + BEGIN + MENUITEM "סרגל כלים", ID_VIEW_TOOL_BAR + MENUITEM "סרגל צד", ID_VIEW_SIDE_BAR, GRAYED + MENUITEM "שורת המצב", ID_VIEW_STATUSBAR + MENUITEM SEPARATOR + MENUITEM "רענון\tF5", ID_REFRESH + MENUITEM "מסך מלא\tCtrl+Shift+S", ID_VIEW_FULLSCREEN + MENUITEM "&MDI", ID_VIEW_MDI + END + POPUP "כלים" + BEGIN + MENUITEM "אפשרויות", ID_TOOLS_OPTIONS + END + POPUP "עזרה" + BEGIN + MENUITEM "שאלות ותשובות...", ID_EXPLORER_FAQ + MENUITEM "אודות הסייר...", ID_ABOUT_EXPLORER + MENUITEM "אודות מערכת ההפעלה...", ID_ABOUT_WINDOWS + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_EXECUTE DIALOGEX DISCARDABLE 15, 13, 210, 63 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "הרצה" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "",101,"Static",SS_SIMPLE | SS_NOPREFIX,3,6,150,10 + CONTROL "פקודה:",-1,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,3, + 18,60,10 + EDITTEXT 201,3,29,134,12,ES_AUTOHSCROLL + CONTROL "As &Symbol",214,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3, + 45,71,12 + DEFPUSHBUTTON "אישור",1,158,6,47,14 + PUSHBUTTON "ביטול",2,158,23,47,14 + PUSHBUTTON "עזרה",254,158,43,47,14 +END + +IDD_SEARCH_PROGRAM DIALOGEX 0, 0, 200, 65 +STYLE DS_SHELLFONT | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | + WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_APPWINDOW +CAPTION "חיפוש תכנית בתפריט התחל" +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + LTEXT "מסנן:",IDC_STATIC,7,9,18,8 + EDITTEXT IDC_FILTER,34,7,100,14,ES_AUTOHSCROLL + CONTROL "List1",IDC_PROGRAMS_FOUND,"SysListView32",LVS_REPORT | + LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | + WS_TABSTOP,7,25,186,33 + PUSHBUTTON "בדוק כניסות",IDC_CHECK_ENTRIES,143,7,50,14 +END + +IDD_DESKBAR_DESKTOP DIALOGEX DISCARDABLE 0, 0, 212, 194 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "מאפייני שולחן העבודה" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Please select your preferred icon alignment algorithm:", + IDC_STATIC,7,7,166,8 + CONTROL "left/top dwn",IDC_ICON_ALIGN_0,"Button",BS_OWNERDRAW | + BS_BOTTOM | WS_TABSTOP,7,25,46,44 + CONTROL "left/top right",IDC_ICON_ALIGN_1,"Button",BS_OWNERDRAW | + BS_BOTTOM | WS_TABSTOP,57,25,46,44 + CONTROL "right/top left",IDC_ICON_ALIGN_2,"Button",BS_OWNERDRAW | + BS_BOTTOM | WS_TABSTOP,110,25,46,44 + CONTROL "rig./top dwn",IDC_ICON_ALIGN_3,"Button",BS_OWNERDRAW | + BS_BOTTOM | WS_TABSTOP,159,25,46,44 + CONTROL "left/bot. up",IDC_ICON_ALIGN_4,"Button",BS_OWNERDRAW | + BS_BOTTOM | WS_TABSTOP,7,73,46,44 + CONTROL "left/bot. right",IDC_ICON_ALIGN_5,"Button",BS_OWNERDRAW | + BS_BOTTOM | WS_TABSTOP,57,73,46,44 + CONTROL "right/bot. left",IDC_ICON_ALIGN_6,"Button",BS_OWNERDRAW | + BS_BOTTOM | WS_TABSTOP,110,73,46,44 + CONTROL "rig./bot. up",IDC_ICON_ALIGN_7,"Button",BS_OWNERDRAW | + BS_BOTTOM | WS_TABSTOP,159,73,46,44 + CONTROL "border down",IDC_ICON_ALIGN_8,"Button",BS_OWNERDRAW | + BS_BOTTOM | WS_TABSTOP,7,121,46,44 + CONTROL "border H/V",IDC_ICON_ALIGN_9,"Button",BS_OWNERDRAW | + BS_BOTTOM | WS_TABSTOP,57,121,46,44 + CONTROL "round about",IDC_ICON_ALIGN_10,"Button",BS_OWNERDRAW | + BS_BOTTOM | WS_TABSTOP,110,121,46,44 + CONTROL "",IDC_ICON_ALIGN_11,"Button",BS_OWNERDRAW | BS_BOTTOM | + WS_TABSTOP,159,121,46,44 +// CONTROL "Display &Version Number",ID_DESKTOP_VERSION,"Button", +// BS_AUTOCHECKBOX | WS_TABSTOP,7,177,91,10 +END + +IDD_DESKBAR_TASKBAR DIALOGEX DISCARDABLE 0, 0, 210, 194 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "מאפייני שורת המשימות" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "הצג שעון",ID_SHOW_CLOCK,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,7,152,52,10 + CONTROL "הסתר סמלי התראות לא פעילים", + ID_HIDE_INACTIVE_ICONS,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,7,174,111,10 + PUSHBUTTON "התראות...",ID_CONFIG_NOTIFYAREA,153,173,50,14 +END + +IDD_DESKBAR_STARTMENU DIALOGEX DISCARDABLE 0, 0, 210, 194 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "מאפייני תפריט התחל" +FONT 8, "MS Shell Dlg" +BEGIN +END + +IDD_NOTIFYAREA DIALOGEX 0, 0, 208, 174 +STYLE DS_SHELLFONT | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | + WS_SYSMENU | WS_THICKFRAME +EXSTYLE WS_EX_APPWINDOW +CAPTION "Configure Notification Icons" +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + CONTROL "Tree1",IDC_NOTIFY_ICONS,"SysTreeView32",TVS_HASLINES | + TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,7,7,194,31 + LTEXT "&Tooltip Text:",IDC_LABEL1,7,44,40,8 + EDITTEXT IDC_NOTIFY_TOOLTIP,58,42,143,14,ES_AUTOHSCROLL + LTEXT "W&indow Title:",IDC_LABEL2,7,63,44,8 + EDITTEXT IDC_NOTIFY_TITLE,58,60,143,14,ES_AUTOHSCROLL + LTEXT "&Module Path:",IDC_LABEL3,7,81,43,8 + EDITTEXT IDC_NOTIFY_MODULE,58,78,143,14,ES_AUTOHSCROLL + GROUPBOX "&Display Mode",IDC_LABEL4,7,96,157,28 + CONTROL "&show",IDC_NOTIFY_SHOW,"Button",BS_AUTORADIOBUTTON | + WS_TABSTOP,15,108,33,10 + CONTROL "&hide",IDC_NOTIFY_HIDE,"Button",BS_AUTORADIOBUTTON,66, + 108,29,10 + CONTROL "a&utohide",IDC_NOTIFY_AUTOHIDE,"Button", + BS_AUTORADIOBUTTON,112,108,43,10 + ICON "",IDC_PICTURE,173,101,21,20 + LTEXT "&Last Change:",IDC_LABEL6,7,132,43,8 + EDITTEXT IDC_LAST_CHANGE,59,129,105,14,ES_AUTOHSCROLL | + ES_READONLY + CONTROL "sho&w hidden",ID_SHOW_HIDDEN_ICONS,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,7,154,56,10 + DEFPUSHBUTTON "&OK",IDOK,91,153,50,14,WS_GROUP + PUSHBUTTON "&Cancel",IDCANCEL,151,153,50,14 +END + +IDD_MDI_SDI DIALOGEX 0, 0, 194, 157 +STYLE DS_SHELLFONT | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_APPWINDOW +CAPTION "Choose Explorer window mode" +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + LTEXT "Please select your preferred Explorer user interface:", + IDC_STATIC,7,7,160,8 + CONTROL "&MDI (Multiple Document Interface)",IDC_MDI,"Button", + BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,7,31,124,10 + CONTROL "&SDI (Single Document Interface)",IDC_SDI,"Button", + BS_AUTORADIOBUTTON,7,62,118,10 + CONTROL 170,IDC_STATIC,"Static",SS_BITMAP,145,23,15,13 + CONTROL 171,IDC_STATIC,"Static",SS_BITMAP,145,57,15,13 + CONTROL "Open Subfolders in s&eparate windows", + IDC_SEPARATE_SUBFOLDERS,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,7,90,135,10 + LTEXT "This setting will be used as default for all Explorer windows in the future.", + IDC_STATIC,7,111,174,22 + DEFPUSHBUTTON "אישור",IDOK,29,136,50,14,WS_GROUP + PUSHBUTTON "ביטול",IDCANCEL,106,136,50,14 +END + +IDD_ABOUT_EXPLORER DIALOGEX DISCARDABLE 0, 0, 199, 106 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "אודות סייר ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "סייר ReactOS",IDC_ROS_EXPLORER,91,13,104,11 + LTEXT "גרסה 0.9",IDC_VERSION_TXT,91,27,104,8 + LTEXT "(c) 2003-2005 Martin Fuchs",IDC_STATIC,91,42,104,8 + LTEXT "",IDC_WIN_VERSION,91,58,98,22 + LTEXT "http://www.sky.franken.de/explorer/",IDC_WWW,17,84,129, + 8 + CONTROL "אישור",IDOK,"Button",BS_OWNERDRAW | BS_FLAT | WS_GROUP, + 154,90,38,12 +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE MOVEABLE PURE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE MOVEABLE PURE +BEGIN + "#include \r\n" + "\0" +END + +3 TEXTINCLUDE MOVEABLE PURE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + IDS_TITLE "ReactOS סייר" + IDS_START "התחל" + IDS_LOGOFF "התנתקות..." + IDS_SHUTDOWN "כיבוי..." + IDS_RESTART "הפעלה מחדש..." + IDS_LAUNCH "הפעלה..." + IDS_START_HELP "עזרה" + IDS_SEARCH_FILES "חיפוש..." + IDS_DOCUMENTS "המסמכים שלי" + IDS_FAVORITES "מועדפים" + IDS_PROGRAMS "תכניות" + IDS_SETTINGS "הגדרות" + IDS_EXPLORE "סייר" + IDS_EMPTY "(ריק)" + IDS_RECENT "מסמכים אחרונים" + IDS_ADMIN "ניהול" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_STARTMENU "תפריט התחל" + IDS_MINIMIZE_ALL "מזער את כל החלונות" + IDS_DESKTOP_NUM "שולחן עבודה %d" + IDS_VOLUME "עוצמה" + IDS_ITEMS_CUR "פריטים נוכחיים" + IDS_ITEMS_CONFIGURED "הגדרה" + IDS_ITEMS_VISIBLE "נראה" + IDS_ITEMS_HIDDEN "מוסתר" + IDS_NOTIFY_SHOW "הראה" + IDS_NOTIFY_HIDE "הסתר" + IDS_NOTIFY_AUTOHIDE "הסתר אוטומטית" + IDS_SHOW_HIDDEN_ICONS "הצג סמלים מוסתרים" + IDS_HIDE_ICONS "הסתר סמלים" + IDS_TERMINATE "סגור את הסייר" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_NETWORK "רשת" + IDS_CONNECTIONS "חיבורי רשת" + IDS_DRIVES "כוננים" + IDS_SEARCH_COMPUTER "חיפוש מחשב..." + IDS_SETTINGS_MENU "תפריט ההגדרות" + IDS_CONTROL_PANEL "לוח הבקרה" + IDS_PRINTERS "מדפסות" + IDS_BROWSE "עייו בקבצים" + IDS_SEARCH_PRG "חיפוש תכנית..." + IDS_ALL_USERS "כל המשתמשים\\" + IDS_SEARCH "חיפוש" + IDS_ABOUT_EXPLORER "אודות הסייר" + IDS_LAUNCH_MANY_PROGRAMS + "You have selected more than one program.\nAre you sure you want to launch all of them?" + IDS_DESKTOPBAR_SETTINGS "הגדרות שולחן העבודה" + IDS_DESKTOP "שולחן העבודה" + IDS_TASKBAR "שורת המשימות" + IDS_NAMECOLUMN "שם" + IDS_PATHCOLUMN "נתיב" + IDS_MENUCOLUMN "נתיב התפריט" +END + +#endif // Hebrew resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + + + + diff --git a/base/shell/explorer/explorer_intres.rc b/base/shell/explorer/explorer_intres.rc index 42348af7295..e7e1e099a63 100644 --- a/base/shell/explorer/explorer_intres.rc +++ b/base/shell/explorer/explorer_intres.rc @@ -128,6 +128,7 @@ BEGIN "#include ""explorer-sv.rc""\r\n" "\r\n" "#pragma code_page(65001)" + "#include ""explorer-he.rc""\r\n" "#include ""explorer-pl.rc""\r\n" "#include ""explorer-ro.rc""\r\n" "#include ""explorer-ru.rc""\r\n" @@ -267,6 +268,9 @@ CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST DISCARDABLE PURE "explorer.exe.ma // UTF-8 #pragma code_page(65001) +#ifdef LANGUAGE_HE_IL + #include "explorer-he.rc" +#endif #ifdef LANGUAGE_PL_PL #include "explorer-pl.rc" #endif diff --git a/base/shell/explorer/taskbar/taskbar.cpp b/base/shell/explorer/taskbar/taskbar.cpp index d2c5144704d..19d26f17527 100644 --- a/base/shell/explorer/taskbar/taskbar.cpp +++ b/base/shell/explorer/taskbar/taskbar.cpp @@ -516,33 +516,39 @@ void TaskBar::Refresh() for(set::reverse_iterator it=btn_idx_to_delete.rbegin(); it!=btn_idx_to_delete.rend(); ++it) { int idx = *it; - SendMessage(_htoolbar, TB_DELETEBUTTON, idx, 0); + if (!SendMessage(_htoolbar, TB_DELETEBUTTON, idx, 0)) + MessageBoxW(NULL, L"failed to delete button", NULL, MB_OK); - for(TaskBarMap::iterator it=_map.begin(); it!=_map.end(); ++it) { - TaskBarEntry& entry = it->second; + + for(TaskBarMap::iterator it2=_map.begin(); it2!=_map.end(); ++it2) { + TaskBarEntry& entry = it2->second; // adjust button indexes if (entry._btn_idx > idx) { --entry._btn_idx; +#if 0 --entry._bmp_idx; - + TBBUTTONINFO info; info.cbSize = sizeof(TBBUTTONINFO); info.dwMask = TBIF_IMAGE; info.iImage = entry._bmp_idx; - SendMessage(_htoolbar, TB_SETBUTTONINFO, entry._id, (LPARAM)&info); + if (!SendMessage(_htoolbar, TB_SETBUTTONINFO, entry._id, (LPARAM)&info)) + MessageBoxW(NULL, L"failed to set button info", NULL, MB_OK); +#endif } } + } for(set::iterator it=hbmp_to_delete.begin(); it!=hbmp_to_delete.end(); ++it) { HBITMAP hbmp = *it; - +#if 0 TBREPLACEBITMAP tbrepl = {0, (UINT_PTR)hbmp, 0, 0}; SendMessage(_htoolbar, TB_REPLACEBITMAP, 0, (LPARAM)&tbrepl); - +#endif DeleteObject(hbmp); for(TaskBarMap::iterator it=_map.begin(); it!=_map.end(); ++it) diff --git a/base/system/services/database.c b/base/system/services/database.c index 989c41ef41e..0c2a50d5e81 100644 --- a/base/system/services/database.c +++ b/base/system/services/database.c @@ -36,10 +36,10 @@ LIST_ENTRY ImageListHead; LIST_ENTRY ServiceListHead; static RTL_RESOURCE DatabaseLock; -static DWORD dwResumeCount = 1; +static DWORD ResumeCount = 1; static CRITICAL_SECTION ControlServiceCriticalSection; -static DWORD dwPipeTimeout = 30000; /* 30 Seconds */ +static DWORD PipeTimeout = 30000; /* 30 Seconds */ /* FUNCTIONS *****************************************************************/ @@ -110,7 +110,7 @@ ScmCreateNewControlPipe(PSERVICE_IMAGE pServiceImage) 100, 8000, 4, - dwPipeTimeout, + PipeTimeout, NULL); DPRINT("CreateNamedPipeW(%S) done\n", szControlPipeName); if (pServiceImage->hControlPipe == INVALID_HANDLE_VALUE) @@ -380,7 +380,7 @@ ScmCreateNewServiceRecord(LPCWSTR lpServiceName, lpService->lpDisplayName = lpService->lpServiceName; /* Set the resume count */ - lpService->dwResumeCount = dwResumeCount++; + lpService->dwResumeCount = ResumeCount++; /* Append service record */ InsertTailList(&ServiceListHead, @@ -941,7 +941,7 @@ ScmControlService(PSERVICE Service, DPRINT1("dwError: ERROR_IO_PENDING\n"); dwError = WaitForSingleObject(Service->lpImage->hControlPipe, - dwPipeTimeout); + PipeTimeout); DPRINT1("WaitForSingleObject() returned %lu\n", dwError); if (dwError == WAIT_TIMEOUT) @@ -995,7 +995,7 @@ ScmControlService(PSERVICE Service, DPRINT1("dwError: ERROR_IO_PENDING\n"); dwError = WaitForSingleObject(Service->lpImage->hControlPipe, - dwPipeTimeout); + PipeTimeout); DPRINT1("WaitForSingleObject() returned %lu\n", dwError); if (dwError == WAIT_TIMEOUT) @@ -1192,7 +1192,7 @@ ScmSendStartCommand(PSERVICE Service, DPRINT1("dwError: ERROR_IO_PENDING\n"); dwError = WaitForSingleObject(Service->lpImage->hControlPipe, - dwPipeTimeout); + PipeTimeout); DPRINT1("WaitForSingleObject() returned %lu\n", dwError); if (dwError == WAIT_TIMEOUT) @@ -1246,7 +1246,7 @@ ScmSendStartCommand(PSERVICE Service, DPRINT1("dwError: ERROR_IO_PENDING\n"); dwError = WaitForSingleObject(Service->lpImage->hControlPipe, - dwPipeTimeout); + PipeTimeout); DPRINT1("WaitForSingleObject() returned %lu\n", dwError); if (dwError == WAIT_TIMEOUT) @@ -1354,7 +1354,7 @@ ScmWaitForServiceConnect(PSERVICE Service) DPRINT("dwError: ERROR_IO_PENDING\n"); dwError = WaitForSingleObject(Service->lpImage->hControlPipe, - dwPipeTimeout); + PipeTimeout); DPRINT("WaitForSingleObject() returned %lu\n", dwError); if (dwError == WAIT_TIMEOUT) @@ -1411,7 +1411,7 @@ ScmWaitForServiceConnect(PSERVICE Service) DPRINT("dwError: ERROR_IO_PENDING\n"); dwError = WaitForSingleObject(Service->lpImage->hControlPipe, - dwPipeTimeout); + PipeTimeout); if (dwError == WAIT_TIMEOUT) { DPRINT("WaitForSingleObject() returned WAIT_TIMEOUT\n"); @@ -1927,7 +1927,7 @@ ScmInitNamedPipeCriticalSection(VOID) L"ServicesPipeTimeout", 0, NULL, - (LPBYTE)&dwPipeTimeout, + (LPBYTE)&PipeTimeout, &dwKeySize); RegCloseKey(hKey); diff --git a/base/system/services/groupdb.c b/base/system/services/groupdb.c index fdd40fdf096..c5452ecd930 100644 --- a/base/system/services/groupdb.c +++ b/base/system/services/groupdb.c @@ -96,7 +96,7 @@ CreateGroupOrderListRoutine(PWSTR ValueName, { PSERVICE_GROUP Group; - DPRINT("CreateGroupOrderListRoutine(%S, %x, %x, %x, %x, %x)\n", + DPRINT("CreateGroupOrderListRoutine(%S, %x, %p, %x, %p, %p)\n", ValueName, ValueType, ValueData, ValueLength, Context, EntryContext); if (ValueType == REG_BINARY && @@ -172,7 +172,7 @@ CreateGroupListRoutine(PWSTR ValueName, QueryTable, (PVOID)Group, NULL); - DPRINT("%x %d %S\n", Status, Group->TagCount, (PWSTR)ValueData); + DPRINT("%x %lu %S\n", Status, Group->TagCount, (PWSTR)ValueData); InsertTailList(&GroupListHead, &Group->GroupListEntry); diff --git a/base/system/services/rpcserver.c b/base/system/services/rpcserver.c index af6eed4aa1f..4c877d27b00 100644 --- a/base/system/services/rpcserver.c +++ b/base/system/services/rpcserver.c @@ -1619,7 +1619,7 @@ DWORD RSetServiceStatus( WCHAR szErrorBuffer[32]; DPRINT("RSetServiceStatus() called\n"); - DPRINT("hServiceStatus = %p\n", hServiceStatus); + DPRINT("hServiceStatus = %lu\n", hServiceStatus); DPRINT("dwServiceType = %lu\n", lpServiceStatus->dwServiceType); DPRINT("dwCurrentState = %lu\n", lpServiceStatus->dwCurrentState); DPRINT("dwControlsAccepted = %lu\n", lpServiceStatus->dwControlsAccepted); @@ -2655,7 +2655,6 @@ DWORD RQueryServiceConfigW( LPWSTR lpDependencies = NULL; DWORD dwDependenciesLength = 0; DWORD dwRequiredSize; - LPQUERY_SERVICE_CONFIGW lpConfig = NULL; WCHAR lpEmptyString[] = {0,0}; LPWSTR lpStr; @@ -2718,7 +2717,7 @@ DWORD RQueryServiceConfigW( else dwRequiredSize += 2 * sizeof(WCHAR); - if (lpService->lpGroup != NULL) + if ((lpService->lpGroup != NULL) && (lpService->lpGroup->lpGroupName != NULL)) dwRequiredSize += (DWORD)((wcslen(lpService->lpGroup->lpGroupName) + 1) * sizeof(WCHAR)); else dwRequiredSize += 2 * sizeof(WCHAR); @@ -2744,13 +2743,12 @@ DWORD RQueryServiceConfigW( } else { - lpConfig = (LPQUERY_SERVICE_CONFIGW)lpServiceConfig; - lpConfig->dwServiceType = lpService->Status.dwServiceType; - lpConfig->dwStartType = lpService->dwStartType; - lpConfig->dwErrorControl = lpService->dwErrorControl; - lpConfig->dwTagId = lpService->dwTag; + lpServiceConfig->dwServiceType = lpService->Status.dwServiceType; + lpServiceConfig->dwStartType = lpService->dwStartType; + lpServiceConfig->dwErrorControl = lpService->dwErrorControl; + lpServiceConfig->dwTagId = lpService->dwTag; - lpStr = (LPWSTR)(lpConfig + 1); + lpStr = (LPWSTR)(lpServiceConfig + 1); /* Append the image path */ if (lpImagePath != NULL) @@ -2762,11 +2760,11 @@ DWORD RQueryServiceConfigW( wcscpy(lpStr, lpEmptyString); } - lpConfig->lpBinaryPathName = (LPWSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpConfig); + lpServiceConfig->lpBinaryPathName = (LPWSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpServiceConfig); lpStr += (wcslen(lpStr) + 1); /* Append the group name */ - if (lpService->lpGroup != NULL) + if ((lpService->lpGroup != NULL) && (lpService->lpGroup->lpGroupName != NULL)) { wcscpy(lpStr, lpService->lpGroup->lpGroupName); } @@ -2775,7 +2773,7 @@ DWORD RQueryServiceConfigW( wcscpy(lpStr, lpEmptyString); } - lpConfig->lpLoadOrderGroup = (LPWSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpConfig); + lpServiceConfig->lpLoadOrderGroup = (LPWSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpServiceConfig); lpStr += (wcslen(lpStr) + 1); /* Append Dependencies */ @@ -2790,7 +2788,7 @@ DWORD RQueryServiceConfigW( wcscpy(lpStr, lpEmptyString); } - lpConfig->lpDependencies = (LPWSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpConfig); + lpServiceConfig->lpDependencies = (LPWSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpServiceConfig); if (lpDependencies != NULL) lpStr += dwDependenciesLength; else @@ -2806,7 +2804,7 @@ DWORD RQueryServiceConfigW( wcscpy(lpStr, lpEmptyString); } - lpConfig->lpServiceStartName = (LPWSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpConfig); + lpServiceConfig->lpServiceStartName = (LPWSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpServiceConfig); lpStr += (wcslen(lpStr) + 1); /* Append the display name */ @@ -2819,7 +2817,7 @@ DWORD RQueryServiceConfigW( wcscpy(lpStr, lpEmptyString); } - lpConfig->lpDisplayName = (LPWSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpConfig); + lpServiceConfig->lpDisplayName = (LPWSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpServiceConfig); } if (pcbBytesNeeded != NULL) @@ -2898,6 +2896,8 @@ DWORD RStartServiceW( PSERVICE_HANDLE hSvc; PSERVICE lpService = NULL; SC_RPC_LOCK Lock = NULL; + +#ifndef NDEBUG DWORD i; DPRINT("RStartServiceW(%p %lu %p) called\n", hService, argc, argv); @@ -2906,9 +2906,10 @@ DWORD RStartServiceW( { for (i = 0; i < argc; i++) { - DPRINT(" argv[%lu]: %S\n", i, argv[i]); + DPRINT(" argv[%lu]: %S\n", i, argv[i].StringPtr); } } +#endif if (ScmShutdown) return ERROR_SHUTDOWN_IN_PROGRESS; @@ -3732,6 +3733,11 @@ DWORD REnumServicesStatusA( DPRINT("REnumServicesStatusA() called\n"); + if (pcbBytesNeeded == NULL || lpServicesReturned == NULL) + { + return ERROR_INVALID_ADDRESS; + } + if ((dwBufSize > 0) && (lpBuffer)) { lpStatusPtrW = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwBufSize); @@ -3892,7 +3898,6 @@ DWORD RQueryServiceConfigA( LPWSTR lpDependencies = NULL; DWORD dwDependenciesLength = 0; DWORD dwRequiredSize; - LPQUERY_SERVICE_CONFIGA lpConfig = NULL; CHAR lpEmptyString[]={0,0}; LPSTR lpStr; @@ -3982,11 +3987,10 @@ DWORD RQueryServiceConfigA( } else { - lpConfig = (LPQUERY_SERVICE_CONFIGA)lpServiceConfig; - lpConfig->dwServiceType = lpService->Status.dwServiceType; - lpConfig->dwStartType = lpService->dwStartType; - lpConfig->dwErrorControl = lpService->dwErrorControl; - lpConfig->dwTagId = lpService->dwTag; + lpServiceConfig->dwServiceType = lpService->Status.dwServiceType; + lpServiceConfig->dwStartType = lpService->dwStartType; + lpServiceConfig->dwErrorControl = lpService->dwErrorControl; + lpServiceConfig->dwTagId = lpService->dwTag; lpStr = (LPSTR)(lpServiceConfig + 1); @@ -4009,7 +4013,7 @@ DWORD RQueryServiceConfigA( strcpy(lpStr, lpEmptyString); } - lpConfig->lpBinaryPathName = (LPSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpConfig); + lpServiceConfig->lpBinaryPathName = (LPSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpServiceConfig); lpStr += (strlen((LPSTR)lpStr) + 1); if (lpService->lpGroup && lpService->lpGroup->lpGroupName) @@ -4028,7 +4032,7 @@ DWORD RQueryServiceConfigA( strcpy(lpStr, lpEmptyString); } - lpConfig->lpLoadOrderGroup = (LPSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpConfig); + lpServiceConfig->lpLoadOrderGroup = (LPSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpServiceConfig); lpStr += (strlen(lpStr) + 1); /* Append Dependencies */ @@ -4048,7 +4052,7 @@ DWORD RQueryServiceConfigA( strcpy(lpStr, lpEmptyString); } - lpConfig->lpDependencies = (LPSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpConfig); + lpServiceConfig->lpDependencies = (LPSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpServiceConfig); if (lpDependencies) lpStr += dwDependenciesLength; else @@ -4070,7 +4074,7 @@ DWORD RQueryServiceConfigA( strcpy(lpStr, lpEmptyString); } - lpConfig->lpServiceStartName = (LPSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpConfig); + lpServiceConfig->lpServiceStartName = (LPSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpServiceConfig); lpStr += (strlen(lpStr) + 1); if (lpService->lpDisplayName) @@ -4089,7 +4093,7 @@ DWORD RQueryServiceConfigA( strcpy(lpStr, lpEmptyString); } - lpConfig->lpDisplayName = (LPSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpConfig); + lpServiceConfig->lpDisplayName = (LPSTR)((ULONG_PTR)lpStr - (ULONG_PTR)lpServiceConfig); } if (pcbBytesNeeded != NULL) @@ -4499,6 +4503,11 @@ DWORD REnumServiceGroupW( return ERROR_INVALID_HANDLE; } + if (pcbBytesNeeded == NULL || lpServicesReturned == NULL) + { + return ERROR_INVALID_ADDRESS; + } + *pcbBytesNeeded = 0; *lpServicesReturned = 0; @@ -5751,6 +5760,11 @@ DWORD REnumServicesStatusExA( DPRINT("REnumServicesStatusExA() called\n"); + if (pcbBytesNeeded == NULL || lpServicesReturned == NULL) + { + return ERROR_INVALID_ADDRESS; + } + if (pszGroupName) { pszGroupNameW = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (strlen(pszGroupName) + 1) * sizeof(WCHAR)); @@ -5896,6 +5910,11 @@ DWORD REnumServicesStatusExW( return ERROR_INVALID_HANDLE; } + if (pcbBytesNeeded == NULL || lpServicesReturned == NULL) + { + return ERROR_INVALID_ADDRESS; + } + *pcbBytesNeeded = 0; *lpServicesReturned = 0; diff --git a/base/system/services/services.c b/base/system/services/services.c index 1245fd373ed..2edb6e75887 100644 --- a/base/system/services/services.c +++ b/base/system/services/services.c @@ -55,7 +55,7 @@ ScmLogError(DWORD dwEventId, L"Service Control Manager"); if (hLog == NULL) { - DPRINT1("ScmLogEvent: RegisterEventSourceW failed %d\n", GetLastError()); + DPRINT1("ScmLogEvent: RegisterEventSourceW failed %lu\n", GetLastError()); return; } @@ -69,7 +69,7 @@ ScmLogError(DWORD dwEventId, lpStrings, NULL)) { - DPRINT1("ScmLogEvent: ReportEventW failed %d\n", GetLastError()); + DPRINT1("ScmLogEvent: ReportEventW failed %lu\n", GetLastError()); } DeregisterEventSource(hLog); @@ -153,7 +153,7 @@ ScmNamedPipeHandleRequest(PVOID Request, PVOID Reply, LPDWORD ReplySize) { - DbgPrint("SCM READ: %s\n", Request); + DbgPrint("SCM READ: %p\n", Request); *ReplySize = 0; return FALSE; @@ -173,7 +173,7 @@ ScmNamedPipeThread(LPVOID Context) hPipe = (HANDLE)Context; - DPRINT("ScmNamedPipeThread(%x) - Accepting SCM commands through named pipe\n", hPipe); + DPRINT("ScmNamedPipeThread(%p) - Accepting SCM commands through named pipe\n", hPipe); for (;;) { @@ -201,13 +201,13 @@ ScmNamedPipeThread(LPVOID Context) } } - DPRINT("ScmNamedPipeThread(%x) - Disconnecting named pipe connection\n", hPipe); + DPRINT("ScmNamedPipeThread(%p) - Disconnecting named pipe connection\n", hPipe); FlushFileBuffers(hPipe); DisconnectNamedPipe(hPipe); CloseHandle(hPipe); - DPRINT("ScmNamedPipeThread(%x) - Done.\n", hPipe); + DPRINT("ScmNamedPipeThread(%p) - Done.\n", hPipe); return ERROR_SUCCESS; } @@ -233,11 +233,11 @@ ScmCreateNamedPipe(VOID) NULL); if (hPipe == INVALID_HANDLE_VALUE) { - DPRINT("CreateNamedPipe() failed (%d)\n", GetLastError()); + DPRINT("CreateNamedPipe() failed (%lu)\n", GetLastError()); return FALSE; } - DPRINT("CreateNamedPipe() - calling ConnectNamedPipe(%x)\n", hPipe); + DPRINT("CreateNamedPipe() - calling ConnectNamedPipe(%p)\n", hPipe); bConnected = ConnectNamedPipe(hPipe, NULL) ? TRUE : (GetLastError() == ERROR_PIPE_CONNECTED); DPRINT("CreateNamedPipe() - ConnectNamedPipe() returned %d\n", bConnected); @@ -253,7 +253,7 @@ ScmCreateNamedPipe(VOID) &dwThreadId); if (!hThread) { - DPRINT("Could not create thread (%d)\n", GetLastError()); + DPRINT("Could not create thread (%lu)\n", GetLastError()); DisconnectNamedPipe(hPipe); CloseHandle(hPipe); DPRINT("CreateNamedPipe() - returning FALSE\n"); @@ -278,7 +278,7 @@ DWORD WINAPI ScmNamedPipeListenerThread(LPVOID Context) { // HANDLE hPipe; - DPRINT("ScmNamedPipeListenerThread(%x) - aka SCM.\n", Context); + DPRINT("ScmNamedPipeListenerThread(%p) - aka SCM.\n", Context); // hPipe = (HANDLE)Context; for (;;) @@ -294,7 +294,7 @@ ScmNamedPipeListenerThread(LPVOID Context) DPRINT("\nSCM: named pipe session created.\n"); Sleep(10); } - DPRINT("\n\nWARNING: ScmNamedPipeListenerThread(%x) - Aborted.\n\n", Context); + DPRINT("\n\nWARNING: ScmNamedPipeListenerThread(%p) - Aborted.\n\n", Context); return ERROR_SUCCESS; } diff --git a/base/system/winlogon/lang/he-IL.rc b/base/system/winlogon/lang/he-IL.rc index 14effd44c4a..1a9fc45b16b 100644 --- a/base/system/winlogon/lang/he-IL.rc +++ b/base/system/winlogon/lang/he-IL.rc @@ -17,7 +17,7 @@ FONT 8, "MS Shell Dlg" BEGIN LTEXT "The Logon User Interface DLL %s failed to load.", IDC_GINALOADFAILED, 39, 16, 156, 24 LTEXT "Contact your system administrator to replace the DLL, or restore the original DLL.", IDC_GINALOADFAILEDCONTACT, 39, 53, 151, 25 - DEFPUSHBUTTON "הפעל מחדש", 1, 80, 91, 68, 14 + DEFPUSHBUTTON "הפעל מחדש", 1, 59, 32, 49, 14 END STRINGTABLE diff --git a/base/system/winlogon/sas.c b/base/system/winlogon/sas.c index dfbe97eee29..5d2c226d9ee 100644 --- a/base/system/winlogon/sas.c +++ b/base/system/winlogon/sas.c @@ -23,8 +23,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(winlogon); #define HK_CTRL_ALT_DEL 0 #define HK_CTRL_SHIFT_ESC 1 -static BOOL inScrn = FALSE; - /* FUNCTIONS ****************************************************************/ static BOOL @@ -702,7 +700,7 @@ HandleLogoff( UnloadUserProfile(Session->UserToken, Session->hProfileInfo); CloseHandle(Session->UserToken); UpdatePerUserSystemParameters(0, FALSE); - Session->LogonStatus = WKSTA_IS_LOGGED_OFF; + Session->LogonState = STATE_LOGGED_OFF; Session->UserToken = NULL; return STATUS_SUCCESS; } @@ -830,7 +828,7 @@ DoGenericAction( if (HandleLogon(Session)) { SwitchDesktop(Session->ApplicationDesktop); - Session->LogonStatus = WKSTA_IS_LOGGED_ON; + Session->LogonState = STATE_LOGGED_ON; } else Session->Gina.Functions.WlxDisplaySASNotice(Session->Gina.Context); @@ -841,7 +839,7 @@ DoGenericAction( if (Session->Gina.Functions.WlxIsLockOk(Session->Gina.Context)) { SwitchDesktop(WLSession->WinlogonDesktop); - Session->LogonStatus = WKSTA_IS_LOCKED; + Session->LogonState = STATE_LOCKED; Session->Gina.Functions.WlxDisplayLockedNotice(Session->Gina.Context); } break; @@ -849,7 +847,7 @@ DoGenericAction( case WLX_SAS_ACTION_SHUTDOWN: /* 0x05 */ case WLX_SAS_ACTION_SHUTDOWN_POWER_OFF: /* 0x0a */ case WLX_SAS_ACTION_SHUTDOWN_REBOOT: /* 0x0b */ - if (Session->LogonStatus != WKSTA_IS_LOGGED_OFF) + if (Session->LogonState != STATE_LOGGED_OFF) { if (!Session->Gina.Functions.WlxIsLogoffOk(Session->Gina.Context)) break; @@ -882,7 +880,7 @@ DoGenericAction( break; case WLX_SAS_ACTION_UNLOCK_WKSTA: /* 0x08 */ SwitchDesktop(WLSession->ApplicationDesktop); - Session->LogonStatus = WKSTA_IS_LOGGED_ON; + Session->LogonState = STATE_LOGGED_ON; break; default: WARN("Unknown SAS action 0x%lx\n", wlxAction); @@ -896,9 +894,9 @@ DispatchSAS( { DWORD wlxAction = WLX_SAS_ACTION_NONE; - if (Session->LogonStatus == WKSTA_IS_LOGGED_ON) + if (Session->LogonState == STATE_LOGGED_ON) wlxAction = (DWORD)Session->Gina.Functions.WlxLoggedOnSAS(Session->Gina.Context, dwSasType, NULL); - else if (Session->LogonStatus == WKSTA_IS_LOCKED) + else if (Session->LogonState == STATE_LOCKED) wlxAction = (DWORD)Session->Gina.Functions.WlxWkstaLockedSAS(Session->Gina.Context, dwSasType); else { @@ -940,9 +938,9 @@ DispatchSAS( } else { + StartScreenSaver(Session); if (bSecure) DoGenericAction(Session, WLX_SAS_ACTION_LOCK_WKSTA); - StartScreenSaver(Session); } } else if (dwSasType == WLX_SAS_TYPE_SCRNSVR_ACTIVITY) @@ -1154,24 +1152,12 @@ SASWindowProc( } case LN_START_SCREENSAVE: { - BOOL bSecure = FALSE; - - if (inScrn) - break; - - inScrn = TRUE; - - // lParam 1 == Secure - if (lParam) - { - if (Session->Gina.Functions.WlxScreenSaverNotify(Session->Gina.Context, &bSecure)) - { - if (bSecure) DoGenericAction(Session, WLX_SAS_ACTION_LOCK_WKSTA); - } - } - - StartScreenSaver(Session); - inScrn = FALSE; + DispatchSAS(Session, WLX_SAS_TYPE_SCRNSVR_TIMEOUT); + break; + } + case LN_LOCK_WORKSTATION: + { + DoGenericAction(Session, WLX_SAS_ACTION_LOCK_WKSTA); break; } default: diff --git a/base/system/winlogon/screensaver.c b/base/system/winlogon/screensaver.c index 4765d1c524b..321c87b6fa3 100644 --- a/base/system/winlogon/screensaver.c +++ b/base/system/winlogon/screensaver.c @@ -15,348 +15,362 @@ WINE_DEFAULT_DEBUG_CHANNEL(winlogon); /* FUNCTIONS ****************************************************************/ #ifndef USE_GETLASTINPUTINFO -static LRESULT CALLBACK -KeyboardActivityProc( - IN INT nCode, - IN WPARAM wParam, - IN LPARAM lParam) +static +LRESULT +CALLBACK +KeyboardActivityProc(IN INT nCode, + IN WPARAM wParam, + IN LPARAM lParam) { - InterlockedExchange((LONG*)&WLSession->LastActivity, ((PKBDLLHOOKSTRUCT)lParam)->time); - return CallNextHookEx(NULL, nCode, wParam, lParam); + InterlockedExchange((LONG*)&WLSession->LastActivity, ((PKBDLLHOOKSTRUCT)lParam)->time); + return CallNextHookEx(NULL, nCode, wParam, lParam); } -static LRESULT CALLBACK -MouseActivityProc( - IN INT nCode, - IN WPARAM wParam, - IN LPARAM lParam) + +static +LRESULT +CALLBACK +MouseActivityProc(IN INT nCode, + IN WPARAM wParam, + IN LPARAM lParam) { - InterlockedExchange((LONG*)&WLSession->LastActivity, ((PMSLLHOOKSTRUCT)lParam)->time); - return CallNextHookEx(NULL, nCode, wParam, lParam); + InterlockedExchange((LONG*)&WLSession->LastActivity, ((PMSLLHOOKSTRUCT)lParam)->time); + return CallNextHookEx(NULL, nCode, wParam, lParam); } #endif -static VOID -LoadScreenSaverParameters( - OUT LPDWORD Timeout) -{ - BOOL Enabled; - if (!SystemParametersInfoW(SPI_GETSCREENSAVETIMEOUT, 0, Timeout, 0)) - { - WARN("WL: Unable to get screen saver timeout (error %lu). Disabling it\n", GetLastError()); - *Timeout = INFINITE; - } - else if (!SystemParametersInfoW(SPI_GETSCREENSAVEACTIVE, 0, &Enabled, 0)) - { - WARN("WL: Unable to check if screen saver is enabled (error %lu). Disabling it\n", GetLastError()); - *Timeout = INFINITE; - } - else if (!Enabled) - { - TRACE("WL: Screen saver is disabled\n"); - *Timeout = INFINITE; - } - else - { - TRACE("WL: Screen saver timeout: %lu seconds\n", *Timeout); - *Timeout *= 1000; - } +static +VOID +LoadScreenSaverParameters(OUT LPDWORD Timeout) +{ + BOOL Enabled; + + if (!SystemParametersInfoW(SPI_GETSCREENSAVETIMEOUT, 0, Timeout, 0)) + { + WARN("WL: Unable to get screen saver timeout (error %lu). Disabling it\n", GetLastError()); + *Timeout = INFINITE; + } + else if (!SystemParametersInfoW(SPI_GETSCREENSAVEACTIVE, 0, &Enabled, 0)) + { + WARN("WL: Unable to check if screen saver is enabled (error %lu). Disabling it\n", GetLastError()); + *Timeout = INFINITE; + } + else if (!Enabled) + { + TRACE("WL: Screen saver is disabled\n"); + *Timeout = INFINITE; + } + else + { + TRACE("WL: Screen saver timeout: %lu seconds\n", *Timeout); + *Timeout *= 1000; + } } -static DWORD WINAPI -ScreenSaverThreadMain( - IN LPVOID lpParameter) + +static +DWORD +WINAPI +ScreenSaverThreadMain(IN LPVOID lpParameter) { - PWLSESSION Session = (PWLSESSION)lpParameter; - HANDLE HandleArray[3]; + PWLSESSION Session = (PWLSESSION)lpParameter; + HANDLE HandleArray[3]; #ifdef USE_GETLASTINPUTINFO - LASTINPUTINFO lastInputInfo; + LASTINPUTINFO lastInputInfo; #else - DWORD LastActivity; + DWORD LastActivity; #endif - DWORD TimeToWait; - DWORD Timeout; /* Timeout before screen saver starts, in milliseconds */ - DWORD ret; + DWORD TimeToWait; + DWORD Timeout; /* Timeout before screen saver starts, in milliseconds */ + DWORD ret; - if (!ImpersonateLoggedOnUser(Session->UserToken)) - { - ERR("ImpersonateLoggedOnUser() failed with error %lu\n", GetLastError()); - return 0; - } + if (!ImpersonateLoggedOnUser(Session->UserToken)) + { + ERR("ImpersonateLoggedOnUser() failed with error %lu\n", GetLastError()); + return 0; + } - Session->hUserActivity = CreateEventW(NULL, FALSE, FALSE, NULL); - if (!Session->hUserActivity) - { - ERR("WL: Unable to create event (error %lu)\n", GetLastError()); - goto cleanup; - } + Session->hUserActivity = CreateEventW(NULL, FALSE, FALSE, NULL); + if (!Session->hUserActivity) + { + ERR("WL: Unable to create event (error %lu)\n", GetLastError()); + goto cleanup; + } - Session->hEndOfScreenSaver = CreateEventW(NULL, FALSE, FALSE, NULL); - if (!Session->hEndOfScreenSaver) - { - ERR("WL: Unable to create event (error %lu)\n", GetLastError()); - goto cleanup; - } + Session->hEndOfScreenSaver = CreateEventW(NULL, FALSE, FALSE, NULL); + if (!Session->hEndOfScreenSaver) + { + ERR("WL: Unable to create event (error %lu)\n", GetLastError()); + goto cleanup; + } - HandleArray[0] = Session->hEndOfScreenSaverThread; - HandleArray[1] = Session->hScreenSaverParametersChanged; - HandleArray[2] = Session->hEndOfScreenSaver; + HandleArray[0] = Session->hEndOfScreenSaverThread; + HandleArray[1] = Session->hScreenSaverParametersChanged; + HandleArray[2] = Session->hEndOfScreenSaver; - LoadScreenSaverParameters(&Timeout); + LoadScreenSaverParameters(&Timeout); #ifndef USE_GETLASTINPUTINFO - InterlockedExchange((LONG*)&Session->LastActivity, GetTickCount()); + InterlockedExchange((LONG*)&Session->LastActivity, GetTickCount()); #else - lastInputInfo.cbSize = sizeof(LASTINPUTINFO); + lastInputInfo.cbSize = sizeof(LASTINPUTINFO); #endif - for (;;) - { - /* See the time of last activity and calculate a timeout */ + for (;;) + { + /* See the time of last activity and calculate a timeout */ #ifndef USE_GETLASTINPUTINFO - LastActivity = InterlockedCompareExchange((LONG*)&Session->LastActivity, 0, 0); - TimeToWait = Timeout - (GetTickCount() - LastActivity); + LastActivity = InterlockedCompareExchange((LONG*)&Session->LastActivity, 0, 0); + TimeToWait = Timeout - (GetTickCount() - LastActivity); #else - if (GetLastInputInfo(&lastInputInfo)) - TimeToWait = Timeout - (GetTickCount() - lastInputInfo.dwTime); - else - { - WARN("GetLastInputInfo() failed with error %lu\n", GetLastError()); - TimeToWait = 10; /* Try again in 10 ms */ - } + if (GetLastInputInfo(&lastInputInfo)) + TimeToWait = Timeout - (GetTickCount() - lastInputInfo.dwTime); + else + { + WARN("GetLastInputInfo() failed with error %lu\n", GetLastError()); + TimeToWait = 10; /* Try again in 10 ms */ + } #endif - if (TimeToWait > Timeout) - { - /* GetTickCount() got back to 0 */ - TimeToWait = Timeout; - } - /* Wait for the timeout, or the end of this thread */ - ret = WaitForMultipleObjects(2, HandleArray, FALSE, TimeToWait); - if (ret == WAIT_OBJECT_0) - break; - else if (ret == WAIT_OBJECT_0 + 1) - LoadScreenSaverParameters(&Timeout); + if (TimeToWait > Timeout) + { + /* GetTickCount() got back to 0 */ + TimeToWait = Timeout; + } - /* Check if we didn't had recent activity */ + /* Wait for the timeout, or the end of this thread */ + ret = WaitForMultipleObjects(2, HandleArray, FALSE, TimeToWait); + if (ret == WAIT_OBJECT_0) + break; + else if (ret == WAIT_OBJECT_0 + 1) + LoadScreenSaverParameters(&Timeout); + + /* Check if we didn't had recent activity */ #ifndef USE_GETLASTINPUTINFO - LastActivity = InterlockedCompareExchange((LONG*)&Session->LastActivity, 0, 0); - if (LastActivity + Timeout > GetTickCount()) - continue; + LastActivity = InterlockedCompareExchange((LONG*)&Session->LastActivity, 0, 0); + if (LastActivity + Timeout > GetTickCount()) + continue; #else - if (!GetLastInputInfo(&lastInputInfo)) - { - WARN("GetLastInputInfo() failed with error %lu\n", GetLastError()); - continue; - } - if (lastInputInfo.dwTime + Timeout > GetTickCount()) - continue; + if (!GetLastInputInfo(&lastInputInfo)) + { + WARN("GetLastInputInfo() failed with error %lu\n", GetLastError()); + continue; + } + + if (lastInputInfo.dwTime + Timeout > GetTickCount()) + continue; #endif - /* Run screen saver */ - PostMessageW(Session->SASWindow, WLX_WM_SAS, WLX_SAS_TYPE_SCRNSVR_TIMEOUT, 0); + /* Run screen saver */ + PostMessageW(Session->SASWindow, WLX_WM_SAS, WLX_SAS_TYPE_SCRNSVR_TIMEOUT, 0); - /* Wait for the end of this thread or of the screen saver */ - ret = WaitForMultipleObjects(3, HandleArray, FALSE, INFINITE); - if (ret == WAIT_OBJECT_0) - break; - else if (ret == WAIT_OBJECT_0 + 1) - LoadScreenSaverParameters(&Timeout); - else if (ret == WAIT_OBJECT_0 + 2) - SystemParametersInfoW(SPI_SETSCREENSAVERRUNNING, FALSE, NULL, 0); - } + /* Wait for the end of this thread or of the screen saver */ + ret = WaitForMultipleObjects(3, HandleArray, FALSE, INFINITE); + if (ret == WAIT_OBJECT_0) + break; + else if (ret == WAIT_OBJECT_0 + 1) + LoadScreenSaverParameters(&Timeout); + else if (ret == WAIT_OBJECT_0 + 2) + SystemParametersInfoW(SPI_SETSCREENSAVERRUNNING, FALSE, NULL, 0); + } cleanup: - RevertToSelf(); - if (Session->hUserActivity) - CloseHandle(Session->hUserActivity); - if (Session->hEndOfScreenSaver) - CloseHandle(Session->hEndOfScreenSaver); + RevertToSelf(); + if (Session->hUserActivity) + CloseHandle(Session->hUserActivity); + + if (Session->hEndOfScreenSaver) + CloseHandle(Session->hEndOfScreenSaver); + #ifndef USE_GETLASTINPUTINFO - if (Session->KeyboardHook) - UnhookWindowsHookEx(Session->KeyboardHook); - if (Session->MouseHook) - UnhookWindowsHookEx(Session->MouseHook); + if (Session->KeyboardHook) + UnhookWindowsHookEx(Session->KeyboardHook); + + if (Session->MouseHook) + UnhookWindowsHookEx(Session->MouseHook); #endif - CloseHandle(Session->hEndOfScreenSaverThread); - CloseHandle(Session->hScreenSaverParametersChanged); - return 0; + + CloseHandle(Session->hEndOfScreenSaverThread); + CloseHandle(Session->hScreenSaverParametersChanged); + return 0; } + BOOL -InitializeScreenSaver( - IN OUT PWLSESSION Session) +InitializeScreenSaver(IN OUT PWLSESSION Session) { - HANDLE ScreenSaverThread; + HANDLE ScreenSaverThread; #ifndef USE_GETLASTINPUTINFO - /* Register hooks to detect keyboard and mouse activity */ - Session->KeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardActivityProc, hAppInstance, 0); - if (!Session->KeyboardHook) - { - ERR("WL: Unable to register keyboard hook\n"); - return FALSE; - } - Session->MouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseActivityProc, hAppInstance, 0); - if (!Session->MouseHook) - { - ERR("WL: Unable to register mouse hook\n"); - return FALSE; - } + /* Register hooks to detect keyboard and mouse activity */ + Session->KeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardActivityProc, hAppInstance, 0); + if (!Session->KeyboardHook) + { + ERR("WL: Unable to register keyboard hook\n"); + return FALSE; + } + + Session->MouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseActivityProc, hAppInstance, 0); + if (!Session->MouseHook) + { + ERR("WL: Unable to register mouse hook\n"); + return FALSE; + } #endif - Session->hScreenSaverParametersChanged = CreateEventW(NULL, FALSE, FALSE, NULL); - if (!Session->hScreenSaverParametersChanged) - { - WARN("WL: Unable to create screen saver event (error %lu)\n", GetLastError()); - return TRUE; - } - Session->hEndOfScreenSaverThread = CreateEventW(NULL, FALSE, FALSE, NULL); - if (!Session->hEndOfScreenSaverThread) - { - WARN("WL: Unable to create screen saver event (error %lu)\n", GetLastError()); - CloseHandle(Session->hScreenSaverParametersChanged); - return TRUE; - } + Session->hScreenSaverParametersChanged = CreateEventW(NULL, FALSE, FALSE, NULL); + if (!Session->hScreenSaverParametersChanged) + { + WARN("WL: Unable to create screen saver event (error %lu)\n", GetLastError()); + return TRUE; + } - ScreenSaverThread = CreateThread( - NULL, - 0, - ScreenSaverThreadMain, - Session, - 0, - NULL); - if (ScreenSaverThread) - CloseHandle(ScreenSaverThread); - else - ERR("WL: Unable to start screen saver thread\n"); + Session->hEndOfScreenSaverThread = CreateEventW(NULL, FALSE, FALSE, NULL); + if (!Session->hEndOfScreenSaverThread) + { + WARN("WL: Unable to create screen saver event (error %lu)\n", GetLastError()); + CloseHandle(Session->hScreenSaverParametersChanged); + return TRUE; + } - return TRUE; + ScreenSaverThread = CreateThread(NULL, + 0, + ScreenSaverThreadMain, + Session, + 0, + NULL); + if (ScreenSaverThread) + CloseHandle(ScreenSaverThread); + else + ERR("WL: Unable to start screen saver thread\n"); + + return TRUE; } + VOID -StartScreenSaver( - IN PWLSESSION Session) +StartScreenSaver(IN PWLSESSION Session) { - HKEY hKey = NULL, hCurrentUser = NULL; - WCHAR szApplicationName[MAX_PATH]; - WCHAR szCommandLine[MAX_PATH + 3]; - DWORD bufferSize = sizeof(szApplicationName) - sizeof(WCHAR); - DWORD dwType; - STARTUPINFOW StartupInfo; - PROCESS_INFORMATION ProcessInformation; - HANDLE HandleArray[2]; - LONG rc; - DWORD Status; - BOOL ret = FALSE; + HKEY hKey = NULL, hCurrentUser = NULL; + WCHAR szApplicationName[MAX_PATH]; + WCHAR szCommandLine[MAX_PATH + 3]; + DWORD bufferSize = sizeof(szApplicationName) - sizeof(WCHAR); + DWORD dwType; + STARTUPINFOW StartupInfo; + PROCESS_INFORMATION ProcessInformation; + HANDLE HandleArray[2]; + LONG rc; + DWORD Status; + BOOL ret = FALSE; - if (!ImpersonateLoggedOnUser(Session->UserToken)) - { - ERR("WL: ImpersonateLoggedOnUser() failed with error %lu\n", GetLastError()); - goto cleanup; - } + if (!ImpersonateLoggedOnUser(Session->UserToken)) + { + ERR("WL: ImpersonateLoggedOnUser() failed with error %lu\n", GetLastError()); + goto cleanup; + } - rc = RegOpenCurrentUser( - KEY_READ, - &hCurrentUser); - if (rc != ERROR_SUCCESS) - { - ERR("WL: RegOpenCurrentUser Error!\n"); - goto cleanup; - } + rc = RegOpenCurrentUser(KEY_READ, + &hCurrentUser); + if (rc != ERROR_SUCCESS) + { + ERR("WL: RegOpenCurrentUser Error!\n"); + goto cleanup; + } - rc = RegOpenKeyExW( - hCurrentUser, - L"Control Panel\\Desktop", - 0, - KEY_QUERY_VALUE, - &hKey); - if (rc != ERROR_SUCCESS) - { - ERR("WL: RegOpenKeyEx Error!\n"); - goto cleanup; - } + rc = RegOpenKeyExW(hCurrentUser, + L"Control Panel\\Desktop", + 0, + KEY_QUERY_VALUE, + &hKey); + if (rc != ERROR_SUCCESS) + { + ERR("WL: RegOpenKeyEx Error!\n"); + goto cleanup; + } - rc = RegQueryValueExW( - hKey, - L"SCRNSAVE.EXE", - 0, - &dwType, - (LPBYTE)szApplicationName, - &bufferSize); - if (rc != ERROR_SUCCESS || dwType != REG_SZ) - { - ERR("WL: RegQueryValueEx Error!\n"); - goto cleanup; - } + rc = RegQueryValueExW(hKey, + L"SCRNSAVE.EXE", + 0, + &dwType, + (LPBYTE)szApplicationName, + &bufferSize); + if (rc != ERROR_SUCCESS || dwType != REG_SZ) + { + ERR("WL: RegQueryValueEx Error!\n"); + goto cleanup; + } - if (bufferSize == 0) - { - ERR("WL: Buffer size is NULL!\n"); - goto cleanup; - } + if (bufferSize == 0) + { + ERR("WL: Buffer size is NULL!\n"); + goto cleanup; + } - szApplicationName[bufferSize / sizeof(WCHAR)] = 0; /* Terminate the string */ + szApplicationName[bufferSize / sizeof(WCHAR)] = 0; /* Terminate the string */ - if (wcslen(szApplicationName) == 0) - { - ERR("WL: Application Name length is zero!\n"); - goto cleanup; - } + if (wcslen(szApplicationName) == 0) + { + ERR("WL: Application Name length is zero!\n"); + goto cleanup; + } - wsprintfW(szCommandLine, L"%s /s", szApplicationName); - TRACE("WL: Executing %S\n", szCommandLine); + wsprintfW(szCommandLine, L"%s /s", szApplicationName); + TRACE("WL: Executing %S\n", szCommandLine); - ZeroMemory(&StartupInfo, sizeof(STARTUPINFOW)); - ZeroMemory(&ProcessInformation, sizeof(PROCESS_INFORMATION)); - StartupInfo.cb = sizeof(STARTUPINFOW); - StartupInfo.dwFlags = STARTF_SCRNSAVER; - /* FIXME: run the screen saver on the screen saver desktop */ - ret = CreateProcessW( - szApplicationName, - szCommandLine, - NULL, - NULL, - FALSE, - 0, - NULL, - NULL, - &StartupInfo, - &ProcessInformation); - if (!ret) - { - ERR("WL: Unable to start %S, error %lu\n", szApplicationName, GetLastError()); - goto cleanup; - } - CloseHandle(ProcessInformation.hThread); + ZeroMemory(&StartupInfo, sizeof(STARTUPINFOW)); + ZeroMemory(&ProcessInformation, sizeof(PROCESS_INFORMATION)); + StartupInfo.cb = sizeof(STARTUPINFOW); + StartupInfo.dwFlags = STARTF_SCRNSAVER; - SystemParametersInfoW(SPI_SETSCREENSAVERRUNNING, TRUE, NULL, 0); + /* FIXME: run the screen saver on the screen saver desktop */ + ret = CreateProcessW(szApplicationName, + szCommandLine, + NULL, + NULL, + FALSE, + 0, + NULL, + NULL, + &StartupInfo, + &ProcessInformation); + if (!ret) + { + ERR("WL: Unable to start %S, error %lu\n", szApplicationName, GetLastError()); + goto cleanup; + } - /* Wait the end of the process or some other activity */ - ResetEvent(Session->hUserActivity); - HandleArray[0] = ProcessInformation.hProcess; - HandleArray[1] = Session->hUserActivity; - Status = WaitForMultipleObjects(2, HandleArray, FALSE, INFINITE); - if (Status == WAIT_OBJECT_0 + 1) - { - /* Kill the screen saver */ - TerminateProcess(ProcessInformation.hProcess, 0); - } - SetEvent(Session->hEndOfScreenSaver); + CloseHandle(ProcessInformation.hThread); - CloseHandle(ProcessInformation.hProcess); + SystemParametersInfoW(SPI_SETSCREENSAVERRUNNING, TRUE, NULL, 0); + + /* Wait the end of the process or some other activity */ + ResetEvent(Session->hUserActivity); + HandleArray[0] = ProcessInformation.hProcess; + HandleArray[1] = Session->hUserActivity; + Status = WaitForMultipleObjects(2, HandleArray, FALSE, INFINITE); + if (Status == WAIT_OBJECT_0 + 1) + { + /* Kill the screen saver */ + TerminateProcess(ProcessInformation.hProcess, 0); + } + + SetEvent(Session->hEndOfScreenSaver); + + CloseHandle(ProcessInformation.hProcess); cleanup: - RevertToSelf(); - if (hKey) - RegCloseKey(hKey); - if (hCurrentUser) - RegCloseKey(hCurrentUser); - if (!ret) - { - PostMessageW(Session->SASWindow, WLX_WM_SAS, WLX_SAS_TYPE_SCRNSVR_ACTIVITY, 0); + RevertToSelf(); + if (hKey) + RegCloseKey(hKey); + + if (hCurrentUser) + RegCloseKey(hCurrentUser); + + if (!ret) + { + PostMessageW(Session->SASWindow, WLX_WM_SAS, WLX_SAS_TYPE_SCRNSVR_ACTIVITY, 0); #ifndef USE_GETLASTINPUTINFO - InterlockedExchange((LONG*)&Session->LastActivity, GetTickCount()); + InterlockedExchange((LONG*)&Session->LastActivity, GetTickCount()); #endif - } + } } diff --git a/base/system/winlogon/setup.c b/base/system/winlogon/setup.c index 31842902f64..6927550e5d3 100644 --- a/base/system/winlogon/setup.c +++ b/base/system/winlogon/setup.c @@ -17,142 +17,147 @@ WINE_DEFAULT_DEBUG_CHANNEL(winlogon); DWORD GetSetupType(VOID) { - DWORD dwError; - HKEY hKey; - DWORD dwType; - DWORD dwSize; - DWORD dwSetupType; + DWORD dwError; + HKEY hKey; + DWORD dwType; + DWORD dwSize; + DWORD dwSetupType; - TRACE("GetSetupType()\n"); + TRACE("GetSetupType()\n"); - /* Open key */ - dwError = RegOpenKeyExW( - HKEY_LOCAL_MACHINE, - L"SYSTEM\\Setup", - 0, - KEY_QUERY_VALUE, - &hKey); - if (dwError != ERROR_SUCCESS) - return 0; + /* Open key */ + dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE, + L"SYSTEM\\Setup", + 0, + KEY_QUERY_VALUE, + &hKey); + if (dwError != ERROR_SUCCESS) + return 0; - /* Read key */ - dwSize = sizeof(DWORD); - dwError = RegQueryValueExW( - hKey, - L"SetupType", - NULL, - &dwType, - (LPBYTE)&dwSetupType, - &dwSize); + /* Read key */ + dwSize = sizeof(DWORD); + dwError = RegQueryValueExW(hKey, + L"SetupType", + NULL, + &dwType, + (LPBYTE)&dwSetupType, + &dwSize); - /* Close key, and check if returned values are correct */ - RegCloseKey(hKey); - if (dwError != ERROR_SUCCESS || dwType != REG_DWORD || dwSize != sizeof(DWORD)) - return 0; + /* Close key, and check if returned values are correct */ + RegCloseKey(hKey); + if (dwError != ERROR_SUCCESS || dwType != REG_DWORD || dwSize != sizeof(DWORD)) + return 0; - TRACE("GetSetupType() returns %lu\n", dwSetupType); - return dwSetupType; + TRACE("GetSetupType() returns %lu\n", dwSetupType); + return dwSetupType; } -static DWORD WINAPI -RunSetupThreadProc( - IN LPVOID lpParameter) + +static +DWORD +WINAPI +RunSetupThreadProc(IN LPVOID lpParameter) { - PROCESS_INFORMATION ProcessInformation; - STARTUPINFOW StartupInfo; - WCHAR Shell[MAX_PATH]; - WCHAR CommandLine[MAX_PATH]; - BOOL Result; - DWORD dwError; - HKEY hKey; - DWORD dwType; - DWORD dwSize; - DWORD dwExitCode; + PROCESS_INFORMATION ProcessInformation; + STARTUPINFOW StartupInfo; + WCHAR Shell[MAX_PATH]; + WCHAR CommandLine[MAX_PATH]; + BOOL Result; + DWORD dwError; + HKEY hKey; + DWORD dwType; + DWORD dwSize; + DWORD dwExitCode; - TRACE("RunSetup() called\n"); + TRACE("RunSetup() called\n"); - /* Open key */ - dwError = RegOpenKeyExW( - HKEY_LOCAL_MACHINE, - L"SYSTEM\\Setup", - 0, - KEY_QUERY_VALUE, - &hKey); - if (dwError != ERROR_SUCCESS) - return FALSE; + /* Open key */ + dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE, + L"SYSTEM\\Setup", + 0, + KEY_QUERY_VALUE, + &hKey); + if (dwError != ERROR_SUCCESS) + return FALSE; - /* Read key */ - dwSize = (sizeof(Shell) / sizeof(Shell[0])) - 1; - dwError = RegQueryValueExW( - hKey, - L"CmdLine", - NULL, - &dwType, - (LPBYTE)Shell, - &dwSize); - RegCloseKey(hKey); - if (dwError != ERROR_SUCCESS) - return FALSE; + /* Read key */ + dwSize = (sizeof(Shell) / sizeof(Shell[0])) - 1; + dwError = RegQueryValueExW(hKey, + L"CmdLine", + NULL, + &dwType, + (LPBYTE)Shell, + &dwSize); + RegCloseKey(hKey); + if (dwError != ERROR_SUCCESS) + return FALSE; - /* Finish string */ - Shell[dwSize / sizeof(WCHAR)] = UNICODE_NULL; + /* Finish string */ + Shell[dwSize / sizeof(WCHAR)] = UNICODE_NULL; - /* Expand string (if applicable) */ - if (dwType == REG_EXPAND_SZ) - ExpandEnvironmentStringsW(Shell, CommandLine, MAX_PATH); - else if (dwType == REG_SZ) - wcscpy(CommandLine, Shell); - else - return FALSE; + /* Expand string (if applicable) */ + if (dwType == REG_EXPAND_SZ) + ExpandEnvironmentStringsW(Shell, CommandLine, MAX_PATH); + else if (dwType == REG_SZ) + wcscpy(CommandLine, Shell); + else + return FALSE; - TRACE("Should run '%s' now\n", debugstr_w(CommandLine)); + TRACE("Should run '%s' now\n", debugstr_w(CommandLine)); - /* Start process */ - StartupInfo.cb = sizeof(StartupInfo); - StartupInfo.lpReserved = NULL; - StartupInfo.lpDesktop = NULL; - StartupInfo.lpTitle = NULL; - StartupInfo.dwFlags = 0; - StartupInfo.cbReserved2 = 0; - StartupInfo.lpReserved2 = 0; - Result = CreateProcessW( - NULL, - CommandLine, - NULL, - NULL, - FALSE, - DETACHED_PROCESS, - NULL, - NULL, - &StartupInfo, - &ProcessInformation); - if (!Result) - { - TRACE("Failed to run setup process\n"); - return FALSE; - } + /* Start process */ + StartupInfo.cb = sizeof(StartupInfo); + StartupInfo.lpReserved = NULL; + StartupInfo.lpDesktop = NULL; + StartupInfo.lpTitle = NULL; + StartupInfo.dwFlags = 0; + StartupInfo.cbReserved2 = 0; + StartupInfo.lpReserved2 = 0; - /* Wait for process termination */ - WaitForSingleObject(ProcessInformation.hProcess, INFINITE); + Result = CreateProcessW(NULL, + CommandLine, + NULL, + NULL, + FALSE, + DETACHED_PROCESS, + NULL, + NULL, + &StartupInfo, + &ProcessInformation); + if (!Result) + { + TRACE("Failed to run setup process\n"); + return FALSE; + } - GetExitCodeProcess(ProcessInformation.hProcess, &dwExitCode); + /* Wait for process termination */ + WaitForSingleObject(ProcessInformation.hProcess, INFINITE); - /* Close handles */ - CloseHandle(ProcessInformation.hThread); - CloseHandle(ProcessInformation.hProcess); + GetExitCodeProcess(ProcessInformation.hProcess, &dwExitCode); - TRACE ("RunSetup() done\n"); + /* Close handles */ + CloseHandle(ProcessInformation.hThread); + CloseHandle(ProcessInformation.hProcess); - return TRUE; + TRACE ("RunSetup() done\n"); + + return TRUE; } + BOOL RunSetup(VOID) { - HANDLE hThread; + HANDLE hThread; - hThread = CreateThread(NULL, 0, RunSetupThreadProc, NULL, 0, NULL); - return hThread != NULL; + hThread = CreateThread(NULL, + 0, + RunSetupThreadProc, + NULL, + 0, + NULL); + + return hThread != NULL; } /* EOF */ diff --git a/base/system/winlogon/winlogon.c b/base/system/winlogon/winlogon.c index e182ecdf13e..4349f1370fa 100644 --- a/base/system/winlogon/winlogon.c +++ b/base/system/winlogon/winlogon.c @@ -21,96 +21,97 @@ PWLSESSION WLSession = NULL; /* FUNCTIONS *****************************************************************/ -static BOOL +static +BOOL StartServicesManager(VOID) { - STARTUPINFOW StartupInfo; - PROCESS_INFORMATION ProcessInformation; - LPCWSTR ServiceString = L"services.exe"; - BOOL res; + STARTUPINFOW StartupInfo; + PROCESS_INFORMATION ProcessInformation; + LPCWSTR ServiceString = L"services.exe"; + BOOL res; - /* Start the service control manager (services.exe) */ - ZeroMemory(&StartupInfo, sizeof(STARTUPINFOW)); - StartupInfo.cb = sizeof(StartupInfo); - StartupInfo.lpReserved = NULL; - StartupInfo.lpDesktop = NULL; - StartupInfo.lpTitle = NULL; - StartupInfo.dwFlags = 0; - StartupInfo.cbReserved2 = 0; - StartupInfo.lpReserved2 = 0; + /* Start the service control manager (services.exe) */ + ZeroMemory(&StartupInfo, sizeof(STARTUPINFOW)); + StartupInfo.cb = sizeof(StartupInfo); + StartupInfo.lpReserved = NULL; + StartupInfo.lpDesktop = NULL; + StartupInfo.lpTitle = NULL; + StartupInfo.dwFlags = 0; + StartupInfo.cbReserved2 = 0; + StartupInfo.lpReserved2 = 0; - TRACE("WL: Creating new process - %S\n", ServiceString); + TRACE("WL: Creating new process - %S\n", ServiceString); - res = CreateProcessW( - ServiceString, - NULL, - NULL, - NULL, - FALSE, - DETACHED_PROCESS, - NULL, - NULL, - &StartupInfo, - &ProcessInformation); - if (!res) - { - ERR("WL: Failed to execute services (error %lu)\n", GetLastError()); - return FALSE; - } + res = CreateProcessW(ServiceString, + NULL, + NULL, + NULL, + FALSE, + DETACHED_PROCESS, + NULL, + NULL, + &StartupInfo, + &ProcessInformation); + if (!res) + { + ERR("WL: Failed to execute services (error %lu)\n", GetLastError()); + return FALSE; + } - TRACE("WL: Created new process - %S\n", ServiceString); + TRACE("WL: Created new process - %S\n", ServiceString); - CloseHandle(ProcessInformation.hThread); - CloseHandle(ProcessInformation.hProcess); + CloseHandle(ProcessInformation.hThread); + CloseHandle(ProcessInformation.hProcess); - TRACE("WL: StartServicesManager() done.\n"); + TRACE("WL: StartServicesManager() done.\n"); - return TRUE; + return TRUE; } -static BOOL +static +BOOL StartLsass(VOID) { - STARTUPINFOW StartupInfo; - PROCESS_INFORMATION ProcessInformation; - LPCWSTR ServiceString = L"lsass.exe"; - BOOL res; + STARTUPINFOW StartupInfo; + PROCESS_INFORMATION ProcessInformation; + LPCWSTR ServiceString = L"lsass.exe"; + BOOL res; - /* Start the local security authority subsystem (lsass.exe) */ - ZeroMemory(&StartupInfo, sizeof(STARTUPINFOW)); - StartupInfo.cb = sizeof(StartupInfo); - StartupInfo.lpReserved = NULL; - StartupInfo.lpDesktop = NULL; - StartupInfo.lpTitle = NULL; - StartupInfo.dwFlags = 0; - StartupInfo.cbReserved2 = 0; - StartupInfo.lpReserved2 = 0; + /* Start the local security authority subsystem (lsass.exe) */ + ZeroMemory(&StartupInfo, sizeof(STARTUPINFOW)); + StartupInfo.cb = sizeof(StartupInfo); + StartupInfo.lpReserved = NULL; + StartupInfo.lpDesktop = NULL; + StartupInfo.lpTitle = NULL; + StartupInfo.dwFlags = 0; + StartupInfo.cbReserved2 = 0; + StartupInfo.lpReserved2 = 0; - TRACE("WL: Creating new process - %S\n", ServiceString); + TRACE("WL: Creating new process - %S\n", ServiceString); - res = CreateProcessW( - ServiceString, - NULL, - NULL, - NULL, - FALSE, - DETACHED_PROCESS, - NULL, - NULL, - &StartupInfo, - &ProcessInformation); + res = CreateProcessW(ServiceString, + NULL, + NULL, + NULL, + FALSE, + DETACHED_PROCESS, + NULL, + NULL, + &StartupInfo, + &ProcessInformation); - TRACE("WL: Created new process - %S\n", ServiceString); + TRACE("WL: Created new process - %S\n", ServiceString); - CloseHandle(ProcessInformation.hThread); - CloseHandle(ProcessInformation.hProcess); + CloseHandle(ProcessInformation.hThread); + CloseHandle(ProcessInformation.hProcess); - return res; + return res; } -static VOID +static +VOID WaitForLsass(VOID) { HANDLE hEvent; @@ -146,18 +147,19 @@ WaitForLsass(VOID) } -static BOOL -InitKeyboardLayouts() +static +BOOL +InitKeyboardLayouts(VOID) { WCHAR wszKeyName[12], wszKLID[10]; - DWORD dwSize = sizeof(wszKLID), dwType, i = 1; + DWORD dwSize = sizeof(wszKLID), dwType, i = 1; HKEY hKey; UINT Flags; BOOL bRet = FALSE; /* Open registry key with preloaded layouts */ - if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Keyboard Layout\\Preload", 0, KEY_READ, &hKey) == ERROR_SUCCESS) - { + if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Keyboard Layout\\Preload", 0, KEY_READ, &hKey) == ERROR_SUCCESS) + { while(TRUE) { /* Read values with integer names only */ @@ -195,9 +197,9 @@ InitKeyboardLayouts() /* Close the key now */ RegCloseKey(hKey); - } - else - WARN("RegOpenKeyExW(Keyboard Layout\\Preload) failed!\n"); + } + else + WARN("RegOpenKeyExW(Keyboard Layout\\Preload) failed!\n"); if (!bRet) { @@ -211,234 +213,242 @@ InitKeyboardLayouts() BOOL -DisplayStatusMessage( - IN PWLSESSION Session, - IN HDESK hDesktop, - IN UINT ResourceId) +DisplayStatusMessage(IN PWLSESSION Session, + IN HDESK hDesktop, + IN UINT ResourceId) { - WCHAR StatusMsg[MAX_PATH]; + WCHAR StatusMsg[MAX_PATH]; - if (Session->Gina.Version < WLX_VERSION_1_3) - return TRUE; + if (Session->Gina.Version < WLX_VERSION_1_3) + return TRUE; - if (Session->SuppressStatus) - return TRUE; + if (Session->SuppressStatus) + return TRUE; - if (LoadStringW(hAppInstance, ResourceId, StatusMsg, MAX_PATH) == 0) - return FALSE; + if (LoadStringW(hAppInstance, ResourceId, StatusMsg, MAX_PATH) == 0) + return FALSE; - return Session->Gina.Functions.WlxDisplayStatusMessage(Session->Gina.Context, hDesktop, 0, NULL, StatusMsg); + return Session->Gina.Functions.WlxDisplayStatusMessage(Session->Gina.Context, hDesktop, 0, NULL, StatusMsg); } + BOOL -RemoveStatusMessage( - IN PWLSESSION Session) +RemoveStatusMessage(IN PWLSESSION Session) { - if (Session->Gina.Version < WLX_VERSION_1_3) - return TRUE; + if (Session->Gina.Version < WLX_VERSION_1_3) + return TRUE; - return Session->Gina.Functions.WlxRemoveStatusMessage(Session->Gina.Context); + return Session->Gina.Functions.WlxRemoveStatusMessage(Session->Gina.Context); } -static INT_PTR CALLBACK -GinaLoadFailedWindowProc( - IN HWND hwndDlg, - IN UINT uMsg, - IN WPARAM wParam, - IN LPARAM lParam) + +static +INT_PTR +CALLBACK +GinaLoadFailedWindowProc(IN HWND hwndDlg, + IN UINT uMsg, + IN WPARAM wParam, + IN LPARAM lParam) { - switch (uMsg) - { - case WM_COMMAND: - { - switch (LOWORD(wParam)) - { - case IDOK: - EndDialog(hwndDlg, IDOK); - return TRUE; - } - break; - } - case WM_INITDIALOG: - { - int len; - WCHAR templateText[MAX_PATH], text[MAX_PATH]; + switch (uMsg) + { + case WM_COMMAND: + { + switch (LOWORD(wParam)) + { + case IDOK: + EndDialog(hwndDlg, IDOK); + return TRUE; + } + break; + } - len = GetDlgItemTextW(hwndDlg, IDC_GINALOADFAILED, templateText, MAX_PATH); - if (len) - { - wsprintfW(text, templateText, (LPWSTR)lParam); - SetDlgItemTextW(hwndDlg, IDC_GINALOADFAILED, text); - } - SetFocus(GetDlgItem(hwndDlg, IDOK)); - return TRUE; - } - case WM_CLOSE: - { - EndDialog(hwndDlg, IDCANCEL); - return TRUE; - } - } + case WM_INITDIALOG: + { + int len; + WCHAR templateText[MAX_PATH], text[MAX_PATH]; - return FALSE; + len = GetDlgItemTextW(hwndDlg, IDC_GINALOADFAILED, templateText, MAX_PATH); + if (len) + { + wsprintfW(text, templateText, (LPWSTR)lParam); + SetDlgItemTextW(hwndDlg, IDC_GINALOADFAILED, text); + } + + SetFocus(GetDlgItem(hwndDlg, IDOK)); + return TRUE; + } + + case WM_CLOSE: + { + EndDialog(hwndDlg, IDCANCEL); + return TRUE; + } + } + + return FALSE; } -int WINAPI -WinMain( - IN HINSTANCE hInstance, - IN HINSTANCE hPrevInstance, - IN LPSTR lpCmdLine, - IN int nShowCmd) + +int +WINAPI +WinMain(IN HINSTANCE hInstance, + IN HINSTANCE hPrevInstance, + IN LPSTR lpCmdLine, + IN int nShowCmd) { #if 0 - LSA_STRING ProcessName, PackageName; - HANDLE LsaHandle; - LSA_OPERATIONAL_MODE Mode; - BOOLEAN Old; - ULONG AuthenticationPackage; - NTSTATUS Status; + LSA_STRING ProcessName, PackageName; + HANDLE LsaHandle; + LSA_OPERATIONAL_MODE Mode; + BOOLEAN Old; + ULONG AuthenticationPackage; + NTSTATUS Status; #endif - ULONG HardErrorResponse; - MSG Msg; + ULONG HardErrorResponse; + MSG Msg; - UNREFERENCED_PARAMETER(hPrevInstance); - UNREFERENCED_PARAMETER(lpCmdLine); - UNREFERENCED_PARAMETER(nShowCmd); + UNREFERENCED_PARAMETER(hPrevInstance); + UNREFERENCED_PARAMETER(lpCmdLine); + UNREFERENCED_PARAMETER(nShowCmd); - hAppInstance = hInstance; + hAppInstance = hInstance; - if (!RegisterLogonProcess(GetCurrentProcessId(), TRUE)) - { - ERR("WL: Could not register logon process\n"); - NtShutdownSystem(ShutdownNoReboot); - ExitProcess(0); - } + if (!RegisterLogonProcess(GetCurrentProcessId(), TRUE)) + { + ERR("WL: Could not register logon process\n"); + NtShutdownSystem(ShutdownNoReboot); + ExitProcess(0); + } - WLSession = (PWLSESSION)HeapAlloc(GetProcessHeap(), 0, sizeof(WLSESSION)); - if (!WLSession) - { - ERR("WL: Could not allocate memory for winlogon instance\n"); - NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED, 0, 0, NULL, OptionOk, &HardErrorResponse); - ExitProcess(1); - } - ZeroMemory(WLSession, sizeof(WLSESSION)); - WLSession->DialogTimeout = 120; /* 2 minutes */ + WLSession = (PWLSESSION)HeapAlloc(GetProcessHeap(), 0, sizeof(WLSESSION)); + if (!WLSession) + { + ERR("WL: Could not allocate memory for winlogon instance\n"); + NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED, 0, 0, NULL, OptionOk, &HardErrorResponse); + ExitProcess(1); + } - if (!CreateWindowStationAndDesktops(WLSession)) - { - ERR("WL: Could not create window station and desktops\n"); - NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED, 0, 0, NULL, OptionOk, &HardErrorResponse); - ExitProcess(1); - } - LockWorkstation(WLSession); + ZeroMemory(WLSession, sizeof(WLSESSION)); + WLSession->DialogTimeout = 120; /* 2 minutes */ + + if (!CreateWindowStationAndDesktops(WLSession)) + { + ERR("WL: Could not create window station and desktops\n"); + NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED, 0, 0, NULL, OptionOk, &HardErrorResponse); + ExitProcess(1); + } + + LockWorkstation(WLSession); /* Load default keyboard layouts */ if (!InitKeyboardLayouts()) { ERR("WL: Could not preload keyboard layouts\n"); - NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED, 0, 0, NULL, OptionOk, &HardErrorResponse); - ExitProcess(1); + NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED, 0, 0, NULL, OptionOk, &HardErrorResponse); + ExitProcess(1); } - if (!StartServicesManager()) - { - ERR("WL: Could not start services.exe\n"); - NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED, 0, 0, NULL, OptionOk, &HardErrorResponse); - ExitProcess(1); - } + if (!StartServicesManager()) + { + ERR("WL: Could not start services.exe\n"); + NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED, 0, 0, NULL, OptionOk, &HardErrorResponse); + ExitProcess(1); + } - if (!StartLsass()) - { - ERR("WL: Failed to start lsass.exe service (error %lu)\n", GetLastError()); - NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED, 0, 0, 0, OptionOk, &HardErrorResponse); - ExitProcess(1); - } + if (!StartLsass()) + { + ERR("WL: Failed to start lsass.exe service (error %lu)\n", GetLastError()); + NtRaiseHardError(STATUS_SYSTEM_PROCESS_TERMINATED, 0, 0, 0, OptionOk, &HardErrorResponse); + ExitProcess(1); + } - /* Load and initialize gina */ - if (!GinaInit(WLSession)) - { - ERR("WL: Failed to initialize Gina\n"); - DialogBoxParam(hAppInstance, MAKEINTRESOURCE(IDD_GINALOADFAILED), GetDesktopWindow(), GinaLoadFailedWindowProc, (LPARAM)L""); - HandleShutdown(WLSession, WLX_SAS_ACTION_SHUTDOWN_REBOOT); - ExitProcess(1); - } + /* Load and initialize gina */ + if (!GinaInit(WLSession)) + { + ERR("WL: Failed to initialize Gina\n"); + DialogBoxParam(hAppInstance, MAKEINTRESOURCE(IDD_GINALOADFAILED), GetDesktopWindow(), GinaLoadFailedWindowProc, (LPARAM)L""); + HandleShutdown(WLSession, WLX_SAS_ACTION_SHUTDOWN_REBOOT); + ExitProcess(1); + } - DisplayStatusMessage(WLSession, WLSession->WinlogonDesktop, IDS_REACTOSISSTARTINGUP); + DisplayStatusMessage(WLSession, WLSession->WinlogonDesktop, IDS_REACTOSISSTARTINGUP); - - /* Wait for the LSA server */ - WaitForLsass(); + /* Wait for the LSA server */ + WaitForLsass(); #if 0 - /* Connect to NetLogon service (lsass.exe) */ - /* Real winlogon uses "Winlogon" */ - RtlInitUnicodeString((PUNICODE_STRING)&ProcessName, L"Winlogon"); - Status = LsaRegisterLogonProcess(&ProcessName, &LsaHandle, &Mode); - if (Status == STATUS_PORT_CONNECTION_REFUSED) - { - /* Add the 'SeTcbPrivilege' privilege and try again */ - Status = RtlAdjustPrivilege(SE_TCB_PRIVILEGE, TRUE, TRUE, &Old); - if (!NT_SUCCESS(Status)) - { - ERR("RtlAdjustPrivilege() failed with error %lu\n", LsaNtStatusToWinError(Status)); - return 1; - } - Status = LsaRegisterLogonProcess(&ProcessName, &LsaHandle, &Mode); - } - if (!NT_SUCCESS(Status)) - { - ERR("LsaRegisterLogonProcess() failed with error %lu\n", LsaNtStatusToWinError(Status)); - return 1; - } + /* Connect to NetLogon service (lsass.exe) */ + /* Real winlogon uses "Winlogon" */ + RtlInitUnicodeString((PUNICODE_STRING)&ProcessName, L"Winlogon"); + Status = LsaRegisterLogonProcess(&ProcessName, &LsaHandle, &Mode); + if (Status == STATUS_PORT_CONNECTION_REFUSED) + { + /* Add the 'SeTcbPrivilege' privilege and try again */ + Status = RtlAdjustPrivilege(SE_TCB_PRIVILEGE, TRUE, TRUE, &Old); + if (!NT_SUCCESS(Status)) + { + ERR("RtlAdjustPrivilege() failed with error %lu\n", LsaNtStatusToWinError(Status)); + return 1; + } - RtlInitUnicodeString((PUNICODE_STRING)&PackageName, MICROSOFT_KERBEROS_NAME_W); - Status = LsaLookupAuthenticationPackage(LsaHandle, &PackageName, &AuthenticationPackage); - if (!NT_SUCCESS(Status)) - { - ERR("LsaLookupAuthenticationPackage() failed with error %lu\n", LsaNtStatusToWinError(Status)); - LsaDeregisterLogonProcess(LsaHandle); - return 1; - } + Status = LsaRegisterLogonProcess(&ProcessName, &LsaHandle, &Mode); + } + + if (!NT_SUCCESS(Status)) + { + ERR("LsaRegisterLogonProcess() failed with error %lu\n", LsaNtStatusToWinError(Status)); + return 1; + } + + RtlInitUnicodeString((PUNICODE_STRING)&PackageName, MICROSOFT_KERBEROS_NAME_W); + Status = LsaLookupAuthenticationPackage(LsaHandle, &PackageName, &AuthenticationPackage); + if (!NT_SUCCESS(Status)) + { + ERR("LsaLookupAuthenticationPackage() failed with error %lu\n", LsaNtStatusToWinError(Status)); + LsaDeregisterLogonProcess(LsaHandle); + return 1; + } #endif - /* Create a hidden window to get SAS notifications */ - if (!InitializeSAS(WLSession)) - { - ERR("WL: Failed to initialize SAS\n"); - ExitProcess(2); - } + /* Create a hidden window to get SAS notifications */ + if (!InitializeSAS(WLSession)) + { + ERR("WL: Failed to initialize SAS\n"); + ExitProcess(2); + } - //DisplayStatusMessage(Session, Session->WinlogonDesktop, IDS_PREPARENETWORKCONNECTIONS); - //DisplayStatusMessage(Session, Session->WinlogonDesktop, IDS_APPLYINGCOMPUTERSETTINGS); + //DisplayStatusMessage(Session, Session->WinlogonDesktop, IDS_PREPARENETWORKCONNECTIONS); + //DisplayStatusMessage(Session, Session->WinlogonDesktop, IDS_APPLYINGCOMPUTERSETTINGS); - /* Display logged out screen */ - WLSession->LogonStatus = WKSTA_IS_LOGGED_OFF; - RemoveStatusMessage(WLSession); + /* Display logged out screen */ + WLSession->LogonState = STATE_LOGGED_OFF; + RemoveStatusMessage(WLSession); - /* Check for pending setup */ - if (GetSetupType() != 0) - { - TRACE("WL: Setup mode detected\n"); + /* Check for pending setup */ + if (GetSetupType() != 0) + { + TRACE("WL: Setup mode detected\n"); - /* Run setup and reboot when done */ - SwitchDesktop(WLSession->ApplicationDesktop); - RunSetup(); - } - else - PostMessageW(WLSession->SASWindow, WLX_WM_SAS, WLX_SAS_TYPE_TIMEOUT, 0); + /* Run setup and reboot when done */ + SwitchDesktop(WLSession->ApplicationDesktop); + RunSetup(); + } + else + PostMessageW(WLSession->SASWindow, WLX_WM_SAS, WLX_SAS_TYPE_TIMEOUT, 0); - /* Tell kernel that CurrentControlSet is good (needed - * to support Last good known configuration boot) */ - NtInitializeRegistry(CM_BOOT_FLAG_ACCEPTED | 1); + /* Tell kernel that CurrentControlSet is good (needed + * to support Last good known configuration boot) */ + NtInitializeRegistry(CM_BOOT_FLAG_ACCEPTED | 1); - /* Message loop for the SAS window */ - while (GetMessageW(&Msg, WLSession->SASWindow, 0, 0)) - { - TranslateMessage(&Msg); - DispatchMessageW(&Msg); - } + /* Message loop for the SAS window */ + while (GetMessageW(&Msg, WLSession->SASWindow, 0, 0)) + { + TranslateMessage(&Msg); + DispatchMessageW(&Msg); + } - /* We never go there */ + /* We never go there */ - return 0; + return 0; } diff --git a/base/system/winlogon/winlogon.h b/base/system/winlogon/winlogon.h index 1f0e685ef76..403e0a8bf3e 100644 --- a/base/system/winlogon/winlogon.h +++ b/base/system/winlogon/winlogon.h @@ -79,90 +79,166 @@ typedef BOOL (WINAPI * PFWLXREMOVESTATUSMESSAGE) (PVOID); typedef struct _GINAFUNCTIONS { - /* Functions always available for a valid GINA */ - PFWLXNEGOTIATE WlxNegotiate; /* optional */ - PFWLXINITIALIZE WlxInitialize; + /* Functions always available for a valid GINA */ + PFWLXNEGOTIATE WlxNegotiate; /* optional */ + PFWLXINITIALIZE WlxInitialize; - /* Functions available if WlxVersion >= WLX_VERSION_1_0 (MS Windows 3.5.0) */ - PFWLXDISPLAYSASNOTICE WlxDisplaySASNotice; - PFWLXLOGGEDOUTSAS WlxLoggedOutSAS; - PFWLXACTIVATEUSERSHELL WlxActivateUserShell; - PFWLXLOGGEDONSAS WlxLoggedOnSAS; - PFWLXDISPLAYLOCKEDNOTICE WlxDisplayLockedNotice; - PFWLXWKSTALOCKEDSAS WlxWkstaLockedSAS; - PFWLXISLOCKOK WlxIsLockOk; - PFWLXISLOGOFFOK WlxIsLogoffOk; - PFWLXLOGOFF WlxLogoff; - PFWLXSHUTDOWN WlxShutdown; + /* Functions available if WlxVersion >= WLX_VERSION_1_0 (MS Windows 3.5.0) */ + PFWLXDISPLAYSASNOTICE WlxDisplaySASNotice; + PFWLXLOGGEDOUTSAS WlxLoggedOutSAS; + PFWLXACTIVATEUSERSHELL WlxActivateUserShell; + PFWLXLOGGEDONSAS WlxLoggedOnSAS; + PFWLXDISPLAYLOCKEDNOTICE WlxDisplayLockedNotice; + PFWLXWKSTALOCKEDSAS WlxWkstaLockedSAS; + PFWLXISLOCKOK WlxIsLockOk; + PFWLXISLOGOFFOK WlxIsLogoffOk; + PFWLXLOGOFF WlxLogoff; + PFWLXSHUTDOWN WlxShutdown; - /* Functions available if WlxVersion >= WLX_VERSION_1_1 (MS Windows 3.5.1) */ - PFWLXSCREENSAVERNOTIFY WlxScreenSaverNotify; /* optional */ - PFWLXSTARTAPPLICATION WlxStartApplication; /* optional */ + /* Functions available if WlxVersion >= WLX_VERSION_1_1 (MS Windows 3.5.1) */ + PFWLXSCREENSAVERNOTIFY WlxScreenSaverNotify; /* optional */ + PFWLXSTARTAPPLICATION WlxStartApplication; /* optional */ - /* Functions available if WlxVersion >= WLX_VERSION_1_2 (MS Windows NT 4.0) */ + /* Functions available if WlxVersion >= WLX_VERSION_1_2 (MS Windows NT 4.0) */ - /* Functions available if WlxVersion >= WLX_VERSION_1_3 (MS Windows 2000) */ - PFWLXNETWORKPROVIDERLOAD WlxNetworkProviderLoad; /* not called ATM */ - PFWLXDISPLAYSTATUSMESSAGE WlxDisplayStatusMessage; - PFWLXGETSTATUSMESSAGE WlxGetStatusMessage; /* doesn't need to be called */ - PFWLXREMOVESTATUSMESSAGE WlxRemoveStatusMessage; + /* Functions available if WlxVersion >= WLX_VERSION_1_3 (MS Windows 2000) */ + PFWLXNETWORKPROVIDERLOAD WlxNetworkProviderLoad; /* not called ATM */ + PFWLXDISPLAYSTATUSMESSAGE WlxDisplayStatusMessage; + PFWLXGETSTATUSMESSAGE WlxGetStatusMessage; /* doesn't need to be called */ + PFWLXREMOVESTATUSMESSAGE WlxRemoveStatusMessage; - /* Functions available if WlxVersion >= WLX_VERSION_1_4 (MS Windows XP) */ + /* Functions available if WlxVersion >= WLX_VERSION_1_4 (MS Windows XP) */ } GINAFUNCTIONS, *PGINAFUNCTIONS; typedef struct _GINAINSTANCE { - HMODULE hDllInstance; - GINAFUNCTIONS Functions; - PVOID Context; - DWORD Version; - BOOL UseCtrlAltDelete; + HMODULE hDllInstance; + GINAFUNCTIONS Functions; + PVOID Context; + DWORD Version; + BOOL UseCtrlAltDelete; } GINAINSTANCE, *PGINAINSTANCE; -/* FIXME: put in an enum */ -/* See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthn/security/winlogon_states.asp */ -#define WKSTA_IS_LOGGED_OFF 0 -#define WKSTA_IS_LOGGED_ON 1 -#define WKSTA_IS_LOCKED 2 + +/* + * The picture Microsoft is trying to paint here + * (http://msdn.microsoft.com/en-us/library/windows/desktop/aa380547%28v=vs.85%29.aspx) + * about the Winlogon states is a little too simple. + * + * The real picture should look more like this: + * + * STATE_INIT + * Initial state. Required for session initialization. After intialization, + * the state will automatically change to STATE_LOGGED_OFF. + * + * STATE_LOGGED_OFF + * User is logged off. Winlogon shows the "Press Ctrl-Alt-Del for logon" + * dialog. The state changes to STATE_LOGGED_OFF_SAS when the user presses + * "Ctrl-Alt-Del". If DisableCAD is true, the state will automatically + * change to STATE_LOGGED_OFF_SAS without showing the dialog. + * + * STATE_LOGGED_OFF_SAS + * State shows the logon dialog. Entering the right credentials and pressing + * "OK" changes the state to STATE_LOGGED_ON. Pressing "Cancel" or a timeout + * changes the state back to STATE_LOGGED_OFF. + * + * STATE_LOGGED_ON + * User is logged on. Winlogon does not show any dialog. Pressing + * "Ctrl-Alt-Del" changes the state to STATE_LOGGED_ON_SAS and user + * inactivity changes the state to STATE_SCREENSAVER. + * + * STATE_LOGGED_ON_SAS + * Winlogon shows the security dialog. Pressing "Cancel" or "Task Manager" + * or a timeout change the state back to STATE_LOGGED_ON. Pressing "Change + * Password" does not change the state, because the security dialog is still + * visible behind the change password dialog. Pressing "Log off" changes the + * state to STATE_LOGGING_OFF. Pressing "Lock Computer" changes the state to + * STATE_LOCKED. Pressing "Shutdown" changes the state to + * STATE_SHUTTING_DOWN. + * + * STATE_SCREENSAVER + * Winlogon runs the screen saver. Upon user activity, the screensaver + * terminates and the state changes back to STATE_LOGGED_ON if the secure + * screen saver option is off. Otherwise, the state changes to STATE_LOCKED. + * + * STATE_LOGGING_OFF + * Winlogon shows the logoff dialog. Pressing "Cancel" or a timeout changes + * the state back to STATE_LOGGED_ON_SAS. Pressing "OK" logs off the user + * and changes the state to STATE_LOGGED_OFF. + * + * STATE_LOCKED + * Winlogon shows the locked message dialog. When the user presses "Ctrl- + * Alt-Del" the state changes to STATE_LOCKED_SAS. If DisableCAD is true, + * the state will automatically change to STATE_LOCKED_SAS without showing + * the dialog. + * + * STATE_LOCKED_SAS + * Winlogon shows the unlock dialog. Presing "Cancel" or a timeout will + * change the state back to STATE_LOCKED. Entering the right credentials and + * pressing "OK" unlocks the computer and changes the state to + * STATE_LOGGED_ON. + * + * STATE_SHUTTING_DOWN + * Winlogon shows the shutdown dialog. Presing "Cancel" or a timeout will + * change the state back to STATE_LOGGED_ON_SAS. Pressing "OK" will change + * the state to STATE_SHUT_DOWN. + * + * STATE_SHUT_DOWN + * Terminates Winlogon and initiates shut-down. + */ +typedef enum _LOGON_STATE +{ + STATE_INIT, // not user yet + STATE_LOGGED_OFF, + STATE_LOGGED_OFF_SAS, // not user yet + STATE_LOGGED_ON, + STATE_LOGGED_ON_SAS, // not user yet + STATE_SCREENSAVER, // not user yet + STATE_LOCKED, + STATE_LOCKED_SAS, // not user yet + STATE_LOGGING_OFF, // not user yet + STATE_SHUTTING_DOWN, // not user yet + STATE_SHUT_DOWN // not user yet +} LOGON_STATE, *PLOGON_STATE; #define LockWorkstation(Session) #define UnlockWorkstation(Session) typedef struct _WLSESSION { - GINAINSTANCE Gina; - DWORD SASAction; - BOOL SuppressStatus; - BOOL TaskManHotkey; - HWND SASWindow; - HWINSTA InteractiveWindowStation; - LPWSTR InteractiveWindowStationName; - HDESK ApplicationDesktop; - HDESK WinlogonDesktop; - HDESK ScreenSaverDesktop; - LUID LogonId; - HANDLE UserToken; - HANDLE hProfileInfo; - DWORD LogonStatus; - DWORD DialogTimeout; /* Timeout for dialog boxes, in seconds */ + GINAINSTANCE Gina; + DWORD SASAction; + BOOL SuppressStatus; + BOOL TaskManHotkey; + HWND SASWindow; + HWINSTA InteractiveWindowStation; + LPWSTR InteractiveWindowStationName; + HDESK ApplicationDesktop; + HDESK WinlogonDesktop; + HDESK ScreenSaverDesktop; + LUID LogonId; + HANDLE UserToken; + HANDLE hProfileInfo; + LOGON_STATE LogonState; + DWORD DialogTimeout; /* Timeout for dialog boxes, in seconds */ - /* Screen-saver informations */ + /* Screen-saver informations */ #ifndef USE_GETLASTINPUTINFO - HHOOK KeyboardHook; - HHOOK MouseHook; + HHOOK KeyboardHook; + HHOOK MouseHook; #endif - HANDLE hEndOfScreenSaverThread; - HANDLE hScreenSaverParametersChanged; - HANDLE hUserActivity; - HANDLE hEndOfScreenSaver; + HANDLE hEndOfScreenSaverThread; + HANDLE hScreenSaverParametersChanged; + HANDLE hUserActivity; + HANDLE hEndOfScreenSaver; #ifndef USE_GETLASTINPUTINFO - DWORD LastActivity; + DWORD LastActivity; #endif - /* Logon informations */ - DWORD Options; - WLX_MPR_NOTIFY_INFO MprNotifyInfo; - WLX_PROFILE_V2_0 *Profile; + /* Logon informations */ + DWORD Options; + WLX_MPR_NOTIFY_INFO MprNotifyInfo; + WLX_PROFILE_V2_0 *Profile; } WLSESSION, *PWLSESSION; extern HINSTANCE hAppInstance; @@ -186,52 +262,43 @@ CreateUserEnvironment(IN PWLSESSION Session); /* sas.c */ BOOL -SetDefaultLanguage( - IN BOOL UserProfile); +SetDefaultLanguage(IN BOOL UserProfile); BOOL -InitializeSAS( - IN OUT PWLSESSION Session); +InitializeSAS(IN OUT PWLSESSION Session); /* screensaver.c */ BOOL -InitializeScreenSaver( - IN OUT PWLSESSION Session); +InitializeScreenSaver(IN OUT PWLSESSION Session); VOID -StartScreenSaver( - IN PWLSESSION Session); +StartScreenSaver(IN PWLSESSION Session); /* winlogon.c */ BOOL -PlaySoundRoutine( - IN LPCWSTR FileName, - IN UINT Logon, - IN UINT Flags); +PlaySoundRoutine(IN LPCWSTR FileName, + IN UINT Logon, + IN UINT Flags); BOOL -DisplayStatusMessage( - IN PWLSESSION Session, - IN HDESK hDesktop, - IN UINT ResourceId); +DisplayStatusMessage(IN PWLSESSION Session, + IN HDESK hDesktop, + IN UINT ResourceId); BOOL -RemoveStatusMessage( - IN PWLSESSION Session); +RemoveStatusMessage(IN PWLSESSION Session); /* wlx.c */ BOOL -GinaInit( - IN OUT PWLSESSION Session); +GinaInit(IN OUT PWLSESSION Session); + BOOL -CreateWindowStationAndDesktops( - IN OUT PWLSESSION Session); +CreateWindowStationAndDesktops(IN OUT PWLSESSION Session); NTSTATUS -HandleShutdown( - IN OUT PWLSESSION Session, - IN DWORD wlxAction); +HandleShutdown(IN OUT PWLSESSION Session, + IN DWORD wlxAction); VOID WINAPI WlxUseCtrlAltDel(HANDLE hWlx); VOID WINAPI WlxSetContextPointer(HANDLE hWlx, PVOID pWlxContext); diff --git a/boot/bootdata/CMakeLists.txt b/boot/bootdata/CMakeLists.txt index afdb2b72590..3d03e9ba622 100644 --- a/boot/bootdata/CMakeLists.txt +++ b/boot/bootdata/CMakeLists.txt @@ -3,19 +3,19 @@ add_subdirectory(packages) #common hives add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/txtsetup.sif DESTINATION reactos NO_CAB FOR bootcd regtest) -add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/hivecls_${ARCH}.inf DESTINATION reactos NO_CAB NAME_ON_CD hivecls.inf FOR bootcd regtest) -add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/hivedef_${ARCH}.inf DESTINATION reactos NO_CAB NAME_ON_CD hivedef.inf FOR bootcd regtest) -add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/hivesft_${ARCH}.inf DESTINATION reactos NO_CAB NAME_ON_CD hivesft.inf FOR bootcd regtest) -add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/hivesys_${ARCH}.inf DESTINATION reactos NO_CAB NAME_ON_CD hivesys.inf FOR bootcd regtest) +add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/hivecls.inf DESTINATION reactos NO_CAB NAME_ON_CD hivecls.inf FOR bootcd regtest) +add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/hivedef.inf DESTINATION reactos NO_CAB NAME_ON_CD hivedef.inf FOR bootcd regtest) +add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/hivesft.inf DESTINATION reactos NO_CAB NAME_ON_CD hivesft.inf FOR bootcd regtest) +add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/hivesys.inf DESTINATION reactos NO_CAB NAME_ON_CD hivesys.inf FOR bootcd regtest) # livecd hives list(APPEND CD_HIVES - ${CMAKE_CURRENT_SOURCE_DIR}/hivecls_${ARCH}.inf - ${CMAKE_CURRENT_SOURCE_DIR}/hivedef_${ARCH}.inf - ${CMAKE_CURRENT_SOURCE_DIR}/hivesft_${ARCH}.inf - ${CMAKE_CURRENT_SOURCE_DIR}/hivesys_${ARCH}.inf + ${CMAKE_CURRENT_SOURCE_DIR}/hivecls.inf + ${CMAKE_CURRENT_SOURCE_DIR}/hivedef.inf + ${CMAKE_CURRENT_SOURCE_DIR}/hivesft.inf + ${CMAKE_CURRENT_SOURCE_DIR}/hivesys.inf ${CMAKE_CURRENT_SOURCE_DIR}/livecd.inf - ${CMAKE_CURRENT_SOURCE_DIR}/hiveinst_${ARCH}.inf) + ${CMAKE_CURRENT_SOURCE_DIR}/hiveinst.inf) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/sam @@ -54,6 +54,7 @@ add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/icon.ico DESTINATION root NO_CAB FO #readme.txt add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/readme.txt DESTINATION root NO_CAB FOR all) +add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/readme.txt DESTINATION reactos FOR all) #freeldr.ini add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/bootcd.ini DESTINATION root NO_CAB NAME_ON_CD freeldr.ini FOR bootcd regtest) diff --git a/boot/bootdata/hivecls_i386.inf b/boot/bootdata/hivecls.inf similarity index 100% rename from boot/bootdata/hivecls_i386.inf rename to boot/bootdata/hivecls.inf diff --git a/boot/bootdata/hivecls_amd64.inf b/boot/bootdata/hivecls_amd64.inf deleted file mode 100644 index 1dfdebcb89c..00000000000 --- a/boot/bootdata/hivecls_amd64.inf +++ /dev/null @@ -1,524 +0,0 @@ -[Version] -Signature="$ReactOS$" - -[AddReg] -HKLM,"SOFTWARE\Classes",,0x00000010 - - -; Default key -HKCR,"*","",0x00000000,"" -HKCR,"*\shellex\ContextMenuHandlers\Open With","",0x00000000,"{09799AFB-AD67-11d1-ABCD-00C04FC30936}" - -; Folders -HKCR,"Folder","",0x00000000,"Folder" -;HKCR,"Folder\Defaulticon","",0x00000000,"%SystemRoot%\system32\shell32.dll,-4" -HKCR,"Folder\shell\open\command","",0x00000000,"explorer.exe ""%1""" -HKCR,"Folder\shell\explore\command","",0x00000000,"explorer.exe /e,""%1""" -HKCR,"Folder\shell\rootexplore","",0x00000000,"Explore from here" -HKCR,"Folder\shell\rootexplore\command","",0x00000000,"explorer.exe /e,/root,""%1""" - -; Drive property page -HKCR,"CLSID\{5F5295E0-429F-1069-A2E2-08002B30309D}","",0x00000000,"Drive Property Page Extension" -HKCR,"CLSID\{5F5295E0-429F-1069-A2E2-08002B30309D}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{5F5295E0-429F-1069-A2E2-08002B30309D}\InProcServer32","ThreadingModel",0x00000000,"Apartment" - -; New Object Service -HKCR,"CLSID\{D969A300-E7FF-11d0-A93B-00A0C90F2719}","",0x00000000,"ReactOS New Object Service" -HKCR,"CLSID\{D969A300-E7FF-11d0-A93B-00A0C90F2719}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{D969A300-E7FF-11d0-A93B-00A0C90F2719}\InProcServer32","ThreadingModel",0x00000000,"Apartment" - -; Rich Text Files -HKCR,".rtf","",0x00000000,"rtffile" -HKCR,".rtf\shellnew","",0x00000000,"" -HKCR,".rtf\shellnew","Data",0x00020000,"{\rtf1}" -HKCR,"rtffile","",0x00000000,"Rich Text Document" -HKCR,"rtffile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\wordpad.exe,-1404" -HKCR,"rtffile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-2" -HKCR,"rtffile\shell\open","",0x00000000,"Open" -HKCR,"rtffile\shell\open\command","",0x00020000,"%SystemRoot%\system32\wordpad.exe %1" - -; Virtual Device Drivers -HKCR,".386","",0x00000000,"vxdfile" -HKCR,".vxd","",0x00000000,"vxdfile" -HKCR,"vxdfile","",0x00000000,"Virtual Device Driver" -HKCR,"vxdfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-156" - -; Animated Cursors -HKCR,".ani","",0x00000000,"anifile" -HKCR,"anifile","",0x00000000,"Animated Cursor" -HKCR,"anifile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\main.cpl,-1039" -HKCR,"anifile\DefaultIcon","",0x00000000,"%1" - -; DOS Batch-Files -HKCR,".bat","",0x00000000,"batfile" -HKCR,"batfile","",0x00000000,"DOS Batch File" -HKCR,"batfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-158" -HKCR,"batfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-153" -HKCR,"batfile\shell\edit\command","",0x00020000,"%SystemRoot%\system32\notepad.exe %1" -HKCR,"batfile\shell\open\command","",0x00000000,"""%1"" %*" - -HKCR,".cmd","",0x00000000,"cmdfile" -HKCR,"cmdfile","",0x00000000,"ReactOS Command Script" -HKCR,"cmdfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-159" -HKCR,"cmdfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-153" -HKCR,"cmdfile\shell\edit\command","",0x00020000,"%SystemRoot%\system32\notepad.exe %1" -HKCR,"cmdfile\shell\open\command","",0x00000000,"""%1"" %*" - -; Get DOS Applications a Icon -HKCR,".com","",0x00000000,"comfile" -HKCR,"comfile","",0x00000000,"DOS Application" -HKCR,"comfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-160" -HKCR,"comfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-3" - -; Control Panel extensions -HKCR,".cpl","",0x00000000,"cplfile" -HKCR,"cplfile","",0x00000000,"Control Panel Extension" -HKCR,"cplfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-161" -HKCR,"cplfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-154" -HKCR,"cplfile\shell\cplopen","",0x00000000,"Open with Control Panel" -HKCR,"cplfile\shell\cplopen\command","",0x00020000,"%SystemRoot%\system32\rundll32.exe shell32.dll,Control_RunDLL %1,%*" - -; Cursors -HKCR,".cur","",0x00000000,"curfile" -HKCR,"curfile","",0x00000000,"Cursor" -HKCR,"curfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-162" -HKCR,"curfile\DefaultIcon","",0x00000000,"%1" - -; Dynamic Link Libraries -HKCR,".dll","",0x00000000,"dllfile" -HKCR,"dllfile","",0x00000000,"Dynamic Link Library" -HKCR,"dllfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-163" -HKCR,"dllfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-154" - -; Device Drivers -HKCR,".drv","",0x00000000,"drvfile" -HKCR,"drvfile","",0x00000000,"Device Driver" -HKCR,"drvfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-164" -HKCR,"drvfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-154" - -; Applicatons -HKCR,".exe","",0x00000000,"exefile" -HKCR,"exefile","",0x00000000,"ReactOS Application" -HKCR,"exefile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-165" -HKCR,"exefile\Defaulticon","",0x00000000,"%1" -HKCR,"exefile\shell\open\command","",0x00000000,"""%1"" %*" - -; Fonts -HKCR,".fon","",0x00000000,"fonfile" -HKCR,"fonfile","",0x00000000,"Font File" -HKCR,"fonfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-166" -HKCR,"fonfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-155" - -HKCR,".ttf","",0x00000000,"ttffile" -HKCR,"ttffile","",0x00000000,"TrueType Font File" -HKCR,"ttffile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-156" -HKCR,"ttffile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-167" -HKCR,"ttffile\shell\open\command","",0x00020000,"%SystemRoot%\system32\fontview.exe %1" - -; Help Files -HKCR,".hlp","",0x00000000,"hlpfile" -HKCR,"hlpfile","",0x00000000,"Help File" -HKCR,"hlpfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-168" -HKCR,"hlpfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-24" -HKCR,"hlpfile\shell\open\command","",0x00020000,"%SystemRoot%\system32\winhlp32.exe %1" - -HKCR,".chm","",0x00000000,"chm.file" -HKCR,"chm.file","",0x00000000,"Help File" -HKCR,"chm.file","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-168" -HKCR,"chm.file\DefaultIcon","",0x00020000,"%SystemRoot%\hh.exe,0" -HKCR,"chm.file\shell\open\command","",0x00020000,"%SystemRoot%\hh.exe %1" - -; set MIME type for .html and .htm because Tiny webserver needs it -HKCR,".htm","",0x00000000,"html" -HKCR,".htm","Content Type",0x00000000,"text/html" - -HKCR,".html","",0x00000000,"html" -HKCR,".html","Content Type",0x00000000,"text/html" - -; Icons -HKCR,".ico","",0x00000000,"icofile" -HKCR,"icofile","",0x00000000,"Icon" -HKCR,"icofile\DefaultIcon","",0x00000000,"%1" - -; JPEG Images -HKCR,".jpg","",0x00000000,"jpegfile" -HKCR,".jpeg","",0x00000000,"jpegfile" -HKCR,"jpegfile","",0x00000000,"JPEG Image" -HKCR,"jpegfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,0" -HKCR,"jpegfile\shell\open\command","",0x00020000,"rundll32.exe %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen %1" - -; Bitmap Images -HKCR,".bmp","",0x00000000,"bmpfile" -HKCR,"bmpfile","",0x00000000,"Bitmap Image" -HKCR,"bmpfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,0" -HKCR,"bmpfile\shell\open\command","",0x00020000,"rundll32.exe %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen %1" - -; PNG Images -HKCR,".png","",0x00000000,"pngfile" -HKCR,"pngfile","",0x00000000,"PNG Image" -HKCR,"pngfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,0" -HKCR,"pngfile\shell\open\command","",0x00020000,"rundll32.exe %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen %1" - -; GIF Images -HKCR,".gif","",0x00000000,"giffile" -HKCR,"giffile","",0x00000000,"GIF Image" -HKCR,"giffile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,0" -HKCR,"giffile\shell\open\command","",0x00020000,"rundll32.exe %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen %1" - -; Configuration Files -HKCR,".ini","",0x00000000,"inifile" -HKCR,"inifile","",0x00000000,"Configuration Settings" -HKCR,"inifile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-169" -HKCR,"inifile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-151" -HKCR,"inifile\shell\open\command","",0x00000000,"notepad.exe ""%1""" - -; Setup Information Files -HKCR,".inf","",0x00000000,"inffile" -HKCR,"inffile","",0x00000000,"Setup Information" -HKCR,"inffile\FriendlyTypeName","",0x00020000,"%SystemRoot%\system32\setupapi.dll,-2001" -HKCR,"inffile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-151" -HKCR,"inffile\shell\open\command","",0x00000000,"notepad.exe ""%1""" -HKCR,"inffile\shell\Install","",0x00000000,"Install" -HKCR,"inffile\shell\Install\command","",0x00020000,"%SystemRoot%\system32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 %1" - -; Show icons for shortcuts in shell views (lnkfile is handled specially in shell32) -; Don't display extension for shortcuts -HKCR,".lnk","",0x00000000,"lnkfile" -HKCR,".lnk\shellnew","",0x00000000,"" -HKCR,".lnk\shellnew","command",0x00020000,"%SystemRoot%\system32\rundll32.exe appwiz.cpl,NewLinkHere %1" -HKCR,"lnkfile","",0x00000000,"Shortcut" -HKCR,"lnkfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-170" -HKCR,"lnkfile","NeverShowExt",0x00000000,"" -HKCR,"lnkfile","IsShortcut",0x00000000,"yes" -HKCR,"lnkfile\CLSID","",0x00000000,"{00021401-0000-0000-C000-000000000046}" -HKCR,"lnkfile\shellex\IconHandler","",0x00000000,"{00021401-0000-0000-C000-000000000046}" -HKCR,"lnkfile\shellex\ContextMenuHandlers\{00021401-0000-0000-C000-000000000046}","",0x00000000,"" -HKCR,"lnkfile\shellex\PropertySheetHandlers\Shellink Property Page", "", 0x00000000, "{00021401-0000-0000-C000-000000000046}" - -; Text Documents -HKCR,".log","",0x00000000,"txtfile" -HKCR,".txt","",0x00000000,"txtfile" -HKCR,".c","",0x00000000,"txtfile" -HKCR,".cpp","",0x00000000,"txtfile" -HKCR,".h","",0x00000000,"txtfile" -HKCR,".hpp","",0x00000000,"txtfile" -HKCR,".txt\shellnew","",0x00000000,"" -HKCR,".txt\shellnew","NullFile",0x00020000,"" -HKCR,"txtfile","",0x00000000,"Text Document" -HKCR,".txt","Content Type",0x00000000,"text/plain" -HKCR,"txtfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-152" -HKCR,"txtfile\shell\open\command","",0x00020000,"%SystemRoot%\system32\notepad.exe %1" - -; XML Documents -HKCR,".xml","",0x00000000,"xmlfile" -HKCR,"xmlfile","",0x00000000,"XML Document" -HKCR,".xml","Content Type",0x00000000,"text/xml" -HKCR,"xmlfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-151" -HKCR,"xmlfile\shell\open\command","",0x00020000,"%SystemRoot%\system32\notepad.exe %1" - -; MSI files -HKCR,".msi","",0x00000000,"MSI.Package" -HKCR,"Msi.Package\DefaultIcon","",0x00000000,"msiexec.exe" -HKCR,"Msi.Package\shell\Open\command","",0x00020000,"%SystemRoot%\system32\msiexec.exe /i ""%1""" -HKCR,"Msi.Package\shell\Repair\command","",0x00020000,"%SystemRoot%\system32\msiexec.exe /f ""%1""" -HKCR,"Msi.Package\shell\Uninstall\command","",0x00020000,"%SystemRoot%\system32\msiexec.exe /x ""%1""" - -HKCR,".pif","",0x00000000,"piffile" - -; Registration Entries -HKCR,".reg","",0x00000000,"regfile" -HKCR,"regfile","",0x00000000,"Registration Entries" -HKCR,"regfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-170" -HKCR,"regfile\DefaultIcon","",0x00020000,"%SystemRoot%\regedit.exe,1" -HKCR,"regfile\shell\edit\command","",0x00020000,"%SystemRoot%\system32\notepad.exe %1" -HKCR,"regfile\shell\open","",0x00000000,"Merge" -HKCR,"regfile\shell\open\command","",0x00000000,"regedit.exe ""%1""" - -; Screen Savers -HKCR,".scr","",0x00000000,"scrfile" -HKCR,"scrfile","",0x00000000,"Screen Saver" -HKCR,"scrfile\Defaulticon","",0x00000000,"%1" -HKCR,"scrfile\shell\config","",0x00000000,"Configure" -HKCR,"scrfile\shell\config\command","",0x00000000,"""%1""" -HKCR,"scrfile\shell\install","",0x00000000,"Install" -HKCR,"scrfile\shell\install\command","",0x00000000,"rundll32.exe desk.cpl,InstallScreenSaver %l" -HKCR,"scrfile\shell\open","",0x00000000,"Test" -HKCR,"scrfile\shell\open\command","",0x00000000,"""%1"" /S" - -; shell command files (e.g. "Show Desktop" in quicklaunch bar) -HKCR,".scf","",0x00000000,"SHCmdFile" -HKCR,"SHCmdFile","NeverShowExt",0x00000000,"" -HKCR,"SHCmdFile","IsShortcut",0x00000000,"yes" -HKCR,"SHCmdFile\shell\open\command","",0x00000000,"explorer.exe ""%1""" -HKCR,"SHCmdFile\CLSID","",0x00000000,"{57651662-CE3E-11D0-8D77-00C04FC99D61}" -HKCR,"SHCmdFile\shellex\IconHandler","",0x00000000,"{57651662-CE3E-11D0-8D77-00C04FC99D61}" - -; System-Files -HKCR,".sys","",0x00000000,"sysfile" -HKCR,"sysfile","",0x00000000,"System File" -HKCR,"regfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-171" -HKCR,"sysfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-154" - -; URL shortcuts (e.g. used in favorites folder of IExplorer) -HKCR,".url","",0x00000000,"InternetShortcut" - -; Wave Sounds -HKCR,".wav","",0x00000000,"SoundRec" -HKCR,"SoundRec","",0x00000000,"Wave Sound" -HKCR,"SoundRec\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-225" -HKCR,"SoundRec\shell\open\command","",0x00020000,"%SystemRoot%\system32\mplay32.exe %1" - -; Midi Sounds -HKCR,".mid","",0x00000000,"MIDFile" -HKCR,".midi","",0x00000000,"MIDFile" -HKCR,"MIDFile","",0x00000000,"MIDI Sequence" -HKCR,"MIDFile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-225" -HKCR,"MIDFile\shell\open\command","",0x00020000,"%SystemRoot%\system32\mplay32.exe %1" - -; Audio CD -HKCR,".cda","",0x00000000,"CDAFile" -HKCR,"CDAFile","",0x00000000,"CD Audio Track" -HKCR,"CDAFile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-225" -HKCR,"CDAFile\shell\open\command","",0x00020000,"%SystemRoot%\system32\mplay32.exe %1" - -; Avi Files -HKCR,".avi","",0x00000000,"AVIFile" -HKCR,"AVIFile","",0x00000000,"Video Clip" -HKCR,"AVIFile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-224" -HKCR,"AVIFile\shell\open\command","",0x00020000,"%SystemRoot%\system32\mplay32.exe %1" - -HKCR,"CLSID",,0x00000012 - -; For Shell32.dll -HKCR,"CLSID\{00021400-0000-0000-C000-000000000046}","",0x00000000,"Desktop" -HKCR,"CLSID\{00021400-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{00021400-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -HKCR,"CLSID\{00021401-0000-0000-C000-000000000046}","",0x00000000,"Shortcut" -HKCR,"CLSID\{00021401-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{00021401-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -HKCR,"CLSID\{00021401-0000-0000-C000-000000000046}\shellex\MayChangeDefaultMenu","",0x00000000,"" -HKCR,"CLSID\{000214E6-0000-0000-C000-000000000046}","",0x00000000,"Shellfolder" -HKCR,"CLSID\{000214E6-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{000214E6-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -HKCR,"CLSID\{000214EE-0000-0000-C000-000000000046}","",0x00000000,"IShellLinkA" -HKCR,"CLSID\{000214EE-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{000214EE-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -HKCR,"CLSID\{000214F9-0000-0000-C000-000000000046}","",0x00000000,"IShellLinkW" -HKCR,"CLSID\{000214F9-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{000214F9-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Apartment" - -HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}","",0x00000000,"Computer Search Results Folder" -HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}","LocalizedString",0x00020000,"@%SystemRoot%\system32\shell32.dll,-30521" -HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-135" -HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}\InProcServer32","",0x00020000,"%SystemRoot%\system32\shell32.dll" -HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}\ShellFolder","Attributes",0x00010001,0x20180000 - -HKCR,"CLSID\{4657278A-411B-11d2-839A-00C04FD918D0}","",0x00000000,"Shell Drag and Drop helper" -HKCR,"CLSID\{4657278A-411B-11d2-839A-00C04FD918D0}\InProcServer32","",0x00020000,"%SystemRoot%\system32\shell32.dll" -HKCR,"CLSID\{4657278A-411B-11d2-839A-00C04FD918D0}\InProcServer32","ThreadingModel",0x00000000,"Apartment" - -; Folder Options CPL -HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}","",0x00000000,"Folder Options" -HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}","LocalizedString",0x00020000,"@%SystemRoot%\system32\shell32.dll,-150" -HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-210" -HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\shell\Open\command","",0x00000000,"rundll32.exe shell32.dll,Options_RunDLL 0" -HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\shell\RunAs\command","",0x00000000,"rundll32.exe shell32.dll,Options_RunDLL 0" -HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\ShellFolder","Attributes",0x00010001,0x00000000 - -; Open With shell extension -HKCR,"CLSID\{09799AFB-AD67-11d1-ABCD-00C04FC30936}","",0x00000000,"Open With Context Menu Handler" -HKCR,"CLSID\{09799AFB-AD67-11d1-ABCD-00C04FC30936}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{09799AFB-AD67-11d1-ABCD-00C04FC30936}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -HKCR,"CLSID\{09799AFB-AD67-11d1-ABCD-00C04FC30936}\shellex\MayChangeDefaultMenu","",0x00000000,"" -HKCR,"SystemFileAssociations","",0x00000000,"" -HKCR,"Applications","",0x00000000,"" - -; Recycle bin is not implemented -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}","",0x00000000,"Recycle Bin" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}","LocalizedString",0x00020000,"@%SystemRoot%\system32\shell32.dll,-8964" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}","InfoTip",0x00020000,"@%SystemRoot%\system32\shell32.dll,-22915" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}","IntroText",0x00020000,"@%SystemRoot%\system32\shell32.dll,-31748" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}","SortOrderIndex",0x00010001,0x00000060 -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,31" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\DefaultIcon","Empty",0x00020000,"%SystemRoot%\system32\shell32.dll,31" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\DefaultIcon","Full",0x00020000,"%SystemRoot%\system32\shell32.dll,32" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\InProcServer32","",0x00020000,"%SystemRoot%\system32\shell32.dll" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder","Attributes",0x00010001,0x20000140 -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder","CallForAttributes",0x00010001,0x00000040 -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shellex\ContextMenuHandlers\{645FF040-5081-101B-9F08-00AA002F954E}","",0x00000000,"" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shellex\PropertySheetHandlers\{645FF040-5081-101B-9F08-00AA002F954E}","",0x00000000,"" - -; deskadp.dll shell extension -HKCR,"CLSID\{42071712-76d4-11d1-8b24-00a0c9068ff3}","",0x00000000,"Display Adapter CPL Extension" -HKCR,"CLSID\{42071712-76d4-11d1-8b24-00a0c9068ff3}\InProcServer32","",0x00020000,"%SystemRoot%\system32\deskadp.dll" -HKCR,"CLSID\{42071712-76d4-11d1-8b24-00a0c9068ff3}\InProcServer32","ThreadingModel",0x00000000,"Apartment" - -; deskmon.dll shell extension -HKCR,"CLSID\{42071713-76d4-11d1-8b24-00a0c9068ff3}","",0x00000000,"Display Monitor CPL Extension" -HKCR,"CLSID\{42071713-76d4-11d1-8b24-00a0c9068ff3}\InProcServer32","",0x00020000,"%SystemRoot%\system32\deskmon.dll" -HKCR,"CLSID\{42071713-76d4-11d1-8b24-00a0c9068ff3}\InProcServer32","ThreadingModel",0x00000000,"Apartment" - -; For TCPIP Protocol property page -HKCR,"CLSID\{A907657F-6FDF-11D0-8EFB-00C04FD912B2}","",0x00000000,"TCP/IP Configuration Notify Object" -HKCR,"CLSID\{A907657F-6FDF-11D0-8EFB-00C04FD912B2}\InProcServer32","",0x00000000,"netcfgx.dll" -HKCR,"CLSID\{A907657F-6FDF-11D0-8EFB-00C04FD912B2}\InProcServer32","ThreadingModel",0x00000000,"Both" - -; For dxdiagn.dll -HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}","",0x00000000,"DxDiagProvider Class" -HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}\InProcServer32","",0x00000000,"%SystemRoot%\system32\dxdiagn.dll" -HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}\ProgID","",0x00000000,"DxDiag.DxDiagProvider.1" -HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}\VersionIndependentProgID","",0x00000000,"DxDiag.DxDiagProvider" - - -HKCR,"NDS\Clsid","",0x00000002,"{323991f0-7bad-11cf-b03d-00aa006e0975}" - -HKCR,"WinNT\Clsid","",0x00000002,"{8b20cd60-0f29-11cf-abc4-02608c9e7553}" - - -; For language support: - -HKCR,"MIME",,0x00000012 -HKCR,"MIME\Database",,0x00000012 -HKCR,"MIME\Database\Rfc1766",,0x00000012 -HKCR,"MIME\Database\Rfc1766","0436",0x00000000,"af;Afrikaans" -HKCR,"MIME\Database\Rfc1766","041C",0x00000000,"sq;Albanian" -HKCR,"MIME\Database\Rfc1766","0001",0x00000000,"ar;Arabic" -HKCR,"MIME\Database\Rfc1766","1401",0x00000000,"ar-dz;Arabic (Algeria)" -HKCR,"MIME\Database\Rfc1766","3C01",0x00000000,"ar-bh;Arabic (Bahrain)" -HKCR,"MIME\Database\Rfc1766","0C01",0x00000000,"ar-eg;Arabic (Egypt)" -HKCR,"MIME\Database\Rfc1766","0801",0x00000000,"ar-iq;Arabic (Iraq)" -HKCR,"MIME\Database\Rfc1766","2C01",0x00000000,"ar-jo;Arabic (Jordan)" -HKCR,"MIME\Database\Rfc1766","3401",0x00000000,"ar-kw;Arabic (Kuwait)" -HKCR,"MIME\Database\Rfc1766","3001",0x00000000,"ar-lb;Arabic (Lebanon)" -HKCR,"MIME\Database\Rfc1766","1001",0x00000000,"ar-ly;Arabic (Libya)" -HKCR,"MIME\Database\Rfc1766","1801",0x00000000,"ar-ma;Arabic (Morocco)" -HKCR,"MIME\Database\Rfc1766","2001",0x00000000,"ar-om;Arabic (Oman)" -HKCR,"MIME\Database\Rfc1766","4001",0x00000000,"ar-qa;Arabic (Qatar)" -HKCR,"MIME\Database\Rfc1766","0401",0x00000000,"ar-sa;Arabic (Saudi Arabia)" -HKCR,"MIME\Database\Rfc1766","2801",0x00000000,"ar-sy;Arabic (Syria)" -HKCR,"MIME\Database\Rfc1766","1C01",0x00000000,"ar-tn;Arabic (Tunisia)" -HKCR,"MIME\Database\Rfc1766","3801",0x00000000,"ar-ae;Arabic (U.A.E.)" -HKCR,"MIME\Database\Rfc1766","2401",0x00000000,"ar-ye;Arabic (Yemen)" -HKCR,"MIME\Database\Rfc1766","042B",0x00000000,"hy;Armenian" -HKCR,"MIME\Database\Rfc1766","042D",0x00000000,"eu;Basque" -HKCR,"MIME\Database\Rfc1766","0423",0x00000000,"be;Belarusian" -HKCR,"MIME\Database\Rfc1766","0445",0x00000000,"bn;Bengali" -HKCR,"MIME\Database\Rfc1766","0402",0x00000000,"bg;Bulgarian" -HKCR,"MIME\Database\Rfc1766","0403",0x00000000,"ca;Catalan" -HKCR,"MIME\Database\Rfc1766","0004",0x00000000,"zh;Chinese" -HKCR,"MIME\Database\Rfc1766","0804",0x00000000,"zh-cn;Chinese (China)" -HKCR,"MIME\Database\Rfc1766","0C04",0x00000000,"zh-hk;Chinese (Hong Kong SAR)" -HKCR,"MIME\Database\Rfc1766","1004",0x00000000,"zh-sg;Chinese (Singapore)" -HKCR,"MIME\Database\Rfc1766","0404",0x00000000,"zh-tw;Chinese (Taiwan)" -HKCR,"MIME\Database\Rfc1766","041A",0x00000000,"hr;Croatian" -HKCR,"MIME\Database\Rfc1766","0405",0x00000000,"cs;Czech" -HKCR,"MIME\Database\Rfc1766","0406",0x00000000,"da;Danish" -HKCR,"MIME\Database\Rfc1766","0813",0x00000000,"nl-be;Dutch (Belgium)" -HKCR,"MIME\Database\Rfc1766","0413",0x00000000,"nl;Dutch (Netherlands)" -HKCR,"MIME\Database\Rfc1766","0009",0x00000000,"en;English" -HKCR,"MIME\Database\Rfc1766","0C09",0x00000000,"en-au;English (Australia)" -HKCR,"MIME\Database\Rfc1766","2809",0x00000000,"en-bz;English (Belize)" -HKCR,"MIME\Database\Rfc1766","1009",0x00000000,"en-ca;English (Canada)" -HKCR,"MIME\Database\Rfc1766","1809",0x00000000,"en-ie;English (Ireland)" -HKCR,"MIME\Database\Rfc1766","2009",0x00000000,"en-jm;English (Jamaica)" -HKCR,"MIME\Database\Rfc1766","1409",0x00000000,"en-nz;English (New Zealand)" -HKCR,"MIME\Database\Rfc1766","1C09",0x00000000,"en-za;English (South Africa)" -HKCR,"MIME\Database\Rfc1766","2C09",0x00000000,"en-tt;English (Trinidad)" -HKCR,"MIME\Database\Rfc1766","0809",0x00000000,"en-gb;English (United Kingdom)" -HKCR,"MIME\Database\Rfc1766","0409",0x00000000,"en-us;English (United States)" -HKCR,"MIME\Database\Rfc1766","048F",0x00000000,"eo;Esperanto" -HKCR,"MIME\Database\Rfc1766","0425",0x00000000,"et;Estonian" -HKCR,"MIME\Database\Rfc1766","0438",0x00000000,"fo;Faeroese" -HKCR,"MIME\Database\Rfc1766","0429",0x00000000,"fa;Farsi" -HKCR,"MIME\Database\Rfc1766","040B",0x00000000,"fi;Finnish" -HKCR,"MIME\Database\Rfc1766","080C",0x00000000,"fr-be;French (Belgium)" -HKCR,"MIME\Database\Rfc1766","0C0C",0x00000000,"fr-ca;French (Canada)" -HKCR,"MIME\Database\Rfc1766","040C",0x00000000,"fr;French (France)" -HKCR,"MIME\Database\Rfc1766","140C",0x00000000,"fr-lu;French (Luxembourg)" -HKCR,"MIME\Database\Rfc1766","100C",0x00000000,"fr-ch;French (Switzerland)" -HKCR,"MIME\Database\Rfc1766","043C",0x00000000,"gd;Gaelic" -HKCR,"MIME\Database\Rfc1766","0C07",0x00000000,"de-at;German (Austria)" -HKCR,"MIME\Database\Rfc1766","0407",0x00000000,"de;German (Germany)" -HKCR,"MIME\Database\Rfc1766","1407",0x00000000,"de-li;German (Liechtenstein)" -HKCR,"MIME\Database\Rfc1766","1007",0x00000000,"de-lu;German (Luxembourg)" -HKCR,"MIME\Database\Rfc1766","0807",0x00000000,"de-ch;German (Switzerland)" -HKCR,"MIME\Database\Rfc1766","0408",0x00000000,"el;Greek" -HKCR,"MIME\Database\Rfc1766","040D",0x00000000,"he;Hebrew" -HKCR,"MIME\Database\Rfc1766","0439",0x00000000,"hi;Hindi" -HKCR,"MIME\Database\Rfc1766","040E",0x00000000,"hu;Hungarian" -HKCR,"MIME\Database\Rfc1766","040F",0x00000000,"is;Icelandic" -HKCR,"MIME\Database\Rfc1766","0421",0x00000000,"in;Indonesian" -HKCR,"MIME\Database\Rfc1766","0410",0x00000000,"it;Italian (Italy)" -HKCR,"MIME\Database\Rfc1766","0810",0x00000000,"it-ch;Italian (Switzerland)" -HKCR,"MIME\Database\Rfc1766","0411",0x00000000,"ja;Japanese" -HKCR,"MIME\Database\Rfc1766","043F",0x00000000,"kk;Kazakh" -HKCR,"MIME\Database\Rfc1766","0412",0x00000000,"ko;Korean" -HKCR,"MIME\Database\Rfc1766","0426",0x00000000,"lv;Latvian" -HKCR,"MIME\Database\Rfc1766","0427",0x00000000,"lt;Lithuanian" -HKCR,"MIME\Database\Rfc1766","042F",0x00000000,"mk;FYRO Macedonian" -HKCR,"MIME\Database\Rfc1766","043E",0x00000000,"ms;Malay (Malaysia)" -HKCR,"MIME\Database\Rfc1766","043A",0x00000000,"mt;Maltese" -HKCR,"MIME\Database\Rfc1766","0414",0x00000000,"no;Norwegian (Bokmal)" -HKCR,"MIME\Database\Rfc1766","0814",0x00000000,"no;Norwegian (Nynorsk)" -HKCR,"MIME\Database\Rfc1766","0415",0x00000000,"pl;Polish" -HKCR,"MIME\Database\Rfc1766","0416",0x00000000,"pt-br;Portuguese (Brazil)" -HKCR,"MIME\Database\Rfc1766","0816",0x00000000,"pt;Portuguese (Portugal)" -HKCR,"MIME\Database\Rfc1766","0417",0x00000000,"rm;Rhaeto-Romanic" -HKCR,"MIME\Database\Rfc1766","0418",0x00000000,"ro;Romanian" -HKCR,"MIME\Database\Rfc1766","0818",0x00000000,"ro-mo;Romanian (Moldova)" -HKCR,"MIME\Database\Rfc1766","0419",0x00000000,"ru;Russian" -HKCR,"MIME\Database\Rfc1766","0819",0x00000000,"ru-mo;Russian (Moldova)" -HKCR,"MIME\Database\Rfc1766","0C1A",0x00000000,"sr;Serbian (Cyrillic)" -HKCR,"MIME\Database\Rfc1766","081A",0x00000000,"sr;Serbian (Latin)" -HKCR,"MIME\Database\Rfc1766","041B",0x00000000,"sk;Slovak" -HKCR,"MIME\Database\Rfc1766","0424",0x00000000,"sl;Slovenian" -HKCR,"MIME\Database\Rfc1766","042E",0x00000000,"sb;Sorbian" -HKCR,"MIME\Database\Rfc1766","2C0A",0x00000000,"es-ar;Spanish (Argentina)" -HKCR,"MIME\Database\Rfc1766","400A",0x00000000,"es-bo;Spanish (Bolivia)" -HKCR,"MIME\Database\Rfc1766","340A",0x00000000,"es-cl;Spanish (Chile)" -HKCR,"MIME\Database\Rfc1766","240A",0x00000000,"es-co;Spanish (Colombia)" -HKCR,"MIME\Database\Rfc1766","140A",0x00000000,"es-cr;Spanish (Costa Rica)" -HKCR,"MIME\Database\Rfc1766","1C0A",0x00000000,"es-do;Spanish (Dominican Republic)" -HKCR,"MIME\Database\Rfc1766","300A",0x00000000,"es-ec;Spanish (Ecuador)" -HKCR,"MIME\Database\Rfc1766","440A",0x00000000,"es-sv;Spanish (El Salvador)" -HKCR,"MIME\Database\Rfc1766","100A",0x00000000,"es-gt;Spanish (Guatemala)" -HKCR,"MIME\Database\Rfc1766","480A",0x00000000,"es-hn;Spanish (Honduras)" -HKCR,"MIME\Database\Rfc1766","0C0A",0x00000000,"es;Spanish (International Sort)" -HKCR,"MIME\Database\Rfc1766","080A",0x00000000,"es-mx;Spanish (Mexico)" -HKCR,"MIME\Database\Rfc1766","4C0A",0x00000000,"es-ni;Spanish (Nicaragua)" -HKCR,"MIME\Database\Rfc1766","180A",0x00000000,"es-pa;Spanish (Panama)" -HKCR,"MIME\Database\Rfc1766","3C0A",0x00000000,"es-py;Spanish (Paraguay)" -HKCR,"MIME\Database\Rfc1766","280A",0x00000000,"es-pe;Spanish (Peru)" -HKCR,"MIME\Database\Rfc1766","500A",0x00000000,"es-pr;Spanish (Puerto Rico)" -HKCR,"MIME\Database\Rfc1766","040A",0x00000000,"es;Spanish (Traditional Sort)" -HKCR,"MIME\Database\Rfc1766","380A",0x00000000,"es-uy;Spanish (Uruguay)" -HKCR,"MIME\Database\Rfc1766","200A",0x00000000,"es-ve;Spanish (Venezuela)" -HKCR,"MIME\Database\Rfc1766","0430",0x00000000,"sx;Sutu" -HKCR,"MIME\Database\Rfc1766","041D",0x00000000,"sv;Swedish" -HKCR,"MIME\Database\Rfc1766","081D",0x00000000,"sv-fi;Swedish (Finland)" -HKCR,"MIME\Database\Rfc1766","041E",0x00000000,"th;Thai" -HKCR,"MIME\Database\Rfc1766","0431",0x00000000,"ts;Tsonga" -HKCR,"MIME\Database\Rfc1766","0432",0x00000000,"tn;Tswana" -HKCR,"MIME\Database\Rfc1766","041F",0x00000000,"tr;Turkish" -HKCR,"MIME\Database\Rfc1766","0422",0x00000000,"uk;Ukrainian" -HKCR,"MIME\Database\Rfc1766","0420",0x00000000,"ur;Urdu" -HKCR,"MIME\Database\Rfc1766","042A",0x00000000,"vi;Vietnamese" -HKCR,"MIME\Database\Rfc1766","0490",0x00000000,"wa;Walloon" -HKCR,"MIME\Database\Rfc1766","0434",0x00000000,"xh;Xhosa" -HKCR,"MIME\Database\Rfc1766","043D",0x00000000,"ji;Yiddish" -HKCR,"MIME\Database\Rfc1766","0435",0x00000000,"zu;Zulu" - -HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\1.0,,,"OLE Automation" -HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\1.0\0\win16,,,"stdole.tlb" -HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\1.0\0\win32,,,"stdole32.tlb" -HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\1.0\FLAGS,,,"1" -HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\2.0,,,"OLE Automation" -HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\2.0\0\win32,,,"stdole2.tlb" -HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\2.0\FLAGS,,,"0" - -; EOF diff --git a/boot/bootdata/hivecls_arm.inf b/boot/bootdata/hivecls_arm.inf deleted file mode 100644 index 124e5e6cb0f..00000000000 --- a/boot/bootdata/hivecls_arm.inf +++ /dev/null @@ -1,520 +0,0 @@ -[Version] -Signature="$ReactOS$" - -[AddReg] -HKLM,"SOFTWARE\Classes",,0x00000010 - - -; Default key -HKCR,"*","",0x00000000,"" -HKCR,"*\shellex\ContextMenuHandlers\Open With","",0x00000000,"{09799AFB-AD67-11d1-ABCD-00C04FC30936}" - -; Folders -HKCR,"Folder","",0x00000000,"Folder" -;HKCR,"Folder\Defaulticon","",0x00000000,"%SystemRoot%\system32\shell32.dll,-4" -HKCR,"Folder\shell\open\command","",0x00000000,"explorer.exe ""%1""" -HKCR,"Folder\shell\explore\command","",0x00000000,"explorer.exe /e,""%1""" -HKCR,"Folder\shell\rootexplore","",0x00000000,"Explore from here" -HKCR,"Folder\shell\rootexplore\command","",0x00000000,"explorer.exe /e,/root,""%1""" - -; Drive property page -HKCR,"CLSID\{5F5295E0-429F-1069-A2E2-08002B30309D}","",0x00000000,"Drive Property Page Extension" -HKCR,"CLSID\{5F5295E0-429F-1069-A2E2-08002B30309D}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{5F5295E0-429F-1069-A2E2-08002B30309D}\InProcServer32","ThreadingModel",0x00000000,"Apartment" - -; New Object Service -HKCR,"CLSID\{D969A300-E7FF-11d0-A93B-00A0C90F2719}","",0x00000000,"ReactOS New Object Service" -HKCR,"CLSID\{D969A300-E7FF-11d0-A93B-00A0C90F2719}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{D969A300-E7FF-11d0-A93B-00A0C90F2719}\InProcServer32","ThreadingModel",0x00000000,"Apartment" - -; Rich Text Files -HKCR,".rtf","",0x00000000,"rtffile" -HKCR,".rtf\shellnew","",0x00000000,"" -HKCR,".rtf\shellnew","Data",0x00020000,"{\rtf1}" -HKCR,"rtffile","",0x00000000,"Rich Text Document" -HKCR,"rtffile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\wordpad.exe,-1404" -HKCR,"rtffile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-2" -HKCR,"rtffile\shell\open","",0x00000000,"Open" -HKCR,"rtffile\shell\open\command","",0x00020000,"%SystemRoot%\system32\wordpad.exe %1" - -; Virtual Device Drivers -HKCR,".386","",0x00000000,"vxdfile" -HKCR,".vxd","",0x00000000,"vxdfile" -HKCR,"vxdfile","",0x00000000,"Virtual Device Driver" -HKCR,"vxdfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-157" - -; Animated Cursors -HKCR,".ani","",0x00000000,"anifile" -HKCR,"anifile","",0x00000000,"Animated Cursor" -HKCR,"anifile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\main.cpl,-1039" -HKCR,"anifile\DefaultIcon","",0x00000000,"%1" - -; DOS Batch-Files -HKCR,".bat","",0x00000000,"batfile" -HKCR,"batfile","",0x00000000,"DOS Batch File" -HKCR,"batfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-158" -HKCR,"batfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-153" -HKCR,"batfile\shell\edit\command","",0x00020000,"%SystemRoot%\system32\notepad.exe %1" -HKCR,"batfile\shell\open\command","",0x00000000,"""%1"" %*" - -HKCR,".cmd","",0x00000000,"cmdfile" -HKCR,"cmdfile","",0x00000000,"ReactOS Command Script" -HKCR,"cmdfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-159" -HKCR,"cmdfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-153" -HKCR,"cmdfile\shell\edit\command","",0x00020000,"%SystemRoot%\system32\notepad.exe %1" -HKCR,"cmdfile\shell\open\command","",0x00000000,"""%1"" %*" - -; Get DOS Applications a Icon -HKCR,".com","",0x00000000,"comfile" -HKCR,"comfile","",0x00000000,"DOS Application" -HKCR,"comfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-160" -HKCR,"comfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-3" - -; Control Panel extensions -HKCR,".cpl","",0x00000000,"cplfile" -HKCR,"cplfile","",0x00000000,"Control Panel Extension" -HKCR,"cplfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-161" -HKCR,"cplfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-154" -HKCR,"cplfile\shell\cplopen","",0x00000000,"Open with Control Panel" -HKCR,"cplfile\shell\cplopen\command","",0x00020000,"%SystemRoot%\system32\rundll32.exe shell32.dll,Control_RunDLL %1,%*" - -; Cursors -HKCR,".cur","",0x00000000,"curfile" -HKCR,"curfile","",0x00000000,"Cursor" -HKCR,"curfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-162" -HKCR,"curfile\DefaultIcon","",0x00000000,"%1" - -; Dynamic Link Libraries -HKCR,".dll","",0x00000000,"dllfile" -HKCR,"dllfile","",0x00000000,"Dynamic Link Library" -HKCR,"dllfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-163" -HKCR,"dllfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-154" - -; Device Drivers -HKCR,".drv","",0x00000000,"drvfile" -HKCR,"drvfile","",0x00000000,"Device Driver" -HKCR,"drvfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-164" -HKCR,"drvfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-154" - -; Applicatons -HKCR,".exe","",0x00000000,"exefile" -HKCR,"exefile","",0x00000000,"ReactOS Application" -HKCR,"exefile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-165" -HKCR,"exefile\Defaulticon","",0x00000000,"%1" -HKCR,"exefile\shell\open\command","",0x00000000,"""%1"" %*" - -; Fonts -HKCR,".fon","",0x00000000,"fonfile" -HKCR,"fonfile","",0x00000000,"Font File" -HKCR,"fonfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-166" -HKCR,"fonfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-155" - -HKCR,".ttf","",0x00000000,"ttffile" -HKCR,"ttffile","",0x00000000,"TrueType Font File" -HKCR,"ttffile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-156" -HKCR,"ttffile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-167" -HKCR,"ttffile\shell\open\command","",0x00020000,"%SystemRoot%\system32\fontview.exe %1" - -; Help Files -HKCR,".hlp","",0x00000000,"hlpfile" -HKCR,"hlpfile","",0x00000000,"Help File" -HKCR,"hlpfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-168" -HKCR,"hlpfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-24" -HKCR,"hlpfile\shell\open\command","",0x00020000,"%SystemRoot%\system32\winhlp32.exe %1" - -HKCR,".chm","",0x00000000,"chm.file" -HKCR,"chm.file","",0x00000000,"Help File" -HKCR,"chm.file","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-168" -HKCR,"chm.file\DefaultIcon","",0x00020000,"%SystemRoot%\hh.exe,0" -HKCR,"chm.file\shell\open\command","",0x00020000,"%SystemRoot%\hh.exe %1" - -; set MIME type for .html and .htm because Tiny webserver needs it -HKCR,".htm","",0x00000000,"html" -HKCR,".htm","Content Type",0x00000000,"text/html" - -HKCR,".html","",0x00000000,"html" -HKCR,".html","Content Type",0x00000000,"text/html" - -; Icons -HKCR,".ico","",0x00000000,"icofile" -HKCR,"icofile","",0x00000000,"Icon" -HKCR,"icofile\DefaultIcon","",0x00000000,"%1" - -; JPEG Images -HKCR,".jpg","",0x00000000,"jpegfile" -HKCR,".jpeg","",0x00000000,"jpegfile" -HKCR,"jpegfile","",0x00000000,"JPEG Image" -HKCR,"jpegfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,0" -HKCR,"jpegfile\shell\open\command","",0x00020000,"rundll32.exe %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen %1" - -; Bitmap Images -HKCR,".bmp","",0x00000000,"bmpfile" -HKCR,"bmpfile","",0x00000000,"Bitmap Image" -HKCR,"bmpfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,0" -HKCR,"bmpfile\shell\open\command","",0x00020000,"rundll32.exe %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen %1" - -; PNG Images -HKCR,".png","",0x00000000,"pngfile" -HKCR,"pngfile","",0x00000000,"PNG Image" -HKCR,"pngfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,0" -HKCR,"pngfile\shell\open\command","",0x00020000,"rundll32.exe %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen %1" - -; GIF Images -HKCR,".gif","",0x00000000,"giffile" -HKCR,"giffile","",0x00000000,"GIF Image" -HKCR,"giffile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,0" -HKCR,"giffile\shell\open\command","",0x00020000,"rundll32.exe %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen %1" - -; Configuration Files -HKCR,".ini","",0x00000000,"inifile" -HKCR,"inifile","",0x00000000,"Configuration Settings" -HKCR,"inifile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-169" -HKCR,"inifile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-151" -HKCR,"inifile\shell\open\command","",0x00000000,"notepad.exe ""%1""" - -; Setup Information Files -HKCR,".inf","",0x00000000,"inffile" -HKCR,"inffile","",0x00000000,"Setup Information" -HKCR,"inffile\FriendlyTypeName","",0x00020000,"%SystemRoot%\system32\setupapi.dll,-2001" -HKCR,"inffile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-151" -HKCR,"inffile\shell\open\command","",0x00000000,"notepad.exe ""%1""" -HKCR,"inffile\shell\Install","",0x00000000,"Install" -HKCR,"inffile\shell\Install\command","",0x00020000,"%SystemRoot%\system32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 %1" - -; Show icons for shortcuts in shell views (lnkfile is handled specially in shell32) -; Don't display extension for shortcuts -HKCR,".lnk","",0x00000000,"lnkfile" -HKCR,".lnk\shellnew","",0x00000000,"" -HKCR,".lnk\shellnew","command",0x00020000,"%SystemRoot%\system32\rundll32.exe appwiz.cpl,NewLinkHere %1" -HKCR,"lnkfile","",0x00000000,"Shortcut" -HKCR,"lnkfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-170" -HKCR,"lnkfile","NeverShowExt",0x00000000,"" -HKCR,"lnkfile","IsShortcut",0x00000000,"yes" -HKCR,"lnkfile\CLSID","",0x00000000,"{00021401-0000-0000-C000-000000000046}" -HKCR,"lnkfile\shellex\IconHandler","",0x00000000,"{00021401-0000-0000-C000-000000000046}" -HKCR,"lnkfile\shellex\ContextMenuHandlers\{00021401-0000-0000-C000-000000000046}","",0x00000000,"" -HKCR,"lnkfile\shellex\PropertySheetHandlers\Shellink Property Page", "", 0x00000000, "{00021401-0000-0000-C000-000000000046}" - -; Text Documents -HKCR,".log","",0x00000000,"txtfile" -HKCR,".txt","",0x00000000,"txtfile" -HKCR,".c","",0x00000000,"txtfile" -HKCR,".cpp","",0x00000000,"txtfile" -HKCR,".h","",0x00000000,"txtfile" -HKCR,".hpp","",0x00000000,"txtfile" -HKCR,".txt\shellnew","",0x00000000,"" -HKCR,".txt\shellnew","NullFile",0x00020000,"" -HKCR,"txtfile","",0x00000000,"Text Document" -HKCR,".txt","Content Type",0x00000000,"text/plain" -HKCR,"txtfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-152" -HKCR,"txtfile\shell\open\command","",0x00020000,"%SystemRoot%\system32\notepad.exe %1" - -; XML Documents -HKCR,".xml","",0x00000000,"xmlfile" -HKCR,"xmlfile","",0x00000000,"XML Document" -HKCR,".xml","Content Type",0x00000000,"text/xml" -HKCR,"xmlfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-151" -HKCR,"xmlfile\shell\open\command","",0x00020000,"%SystemRoot%\system32\notepad.exe %1" - -; MSI files -HKCR,".msi","",0x00000000,"MSI.Package" -HKCR,"Msi.Package\DefaultIcon","",0x00000000,"msiexec.exe" -HKCR,"Msi.Package\shell\Open\command","",0x00020000,"%SystemRoot%\system32\msiexec.exe /i ""%1""" -HKCR,"Msi.Package\shell\Repair\command","",0x00020000,"%SystemRoot%\system32\msiexec.exe /f ""%1""" -HKCR,"Msi.Package\shell\Uninstall\command","",0x00020000,"%SystemRoot%\system32\msiexec.exe /x ""%1""" - -HKCR,".pif","",0x00000000,"piffile" - -; Registration Entries -HKCR,".reg","",0x00000000,"regfile" -HKCR,"regfile","",0x00000000,"Registration Entries" -HKCR,"regfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-170" -HKCR,"regfile\DefaultIcon","",0x00020000,"%SystemRoot%\regedit.exe,1" -HKCR,"regfile\shell\edit\command","",0x00020000,"%SystemRoot%\system32\notepad.exe %1" -HKCR,"regfile\shell\open","",0x00000000,"Merge" -HKCR,"regfile\shell\open\command","",0x00000000,"regedit.exe ""%1""" - -; Screen Savers -HKCR,".scr","",0x00000000,"scrfile" -HKCR,"scrfile","",0x00000000,"Screen Saver" -HKCR,"scrfile\Defaulticon","",0x00000000,"%1" -HKCR,"scrfile\shell\config","",0x00000000,"Configure" -HKCR,"scrfile\shell\config\command","",0x00000000,"""%1""" -HKCR,"scrfile\shell\install","",0x00000000,"Install" -HKCR,"scrfile\shell\install\command","",0x00000000,"rundll32.exe desk.cpl,InstallScreenSaver %l" -HKCR,"scrfile\shell\open","",0x00000000,"Test" -HKCR,"scrfile\shell\open\command","",0x00000000,"""%1"" /S" - -; shell command files (e.g. "Show Desktop" in quicklaunch bar) -HKCR,".scf","",0x00000000,"SHCmdFile" -HKCR,"SHCmdFile","NeverShowExt",0x00000000,"" -HKCR,"SHCmdFile","IsShortcut",0x00000000,"yes" -HKCR,"SHCmdFile\shell\open\command","",0x00000000,"explorer.exe ""%1""" -HKCR,"SHCmdFile\CLSID","",0x00000000,"{57651662-CE3E-11D0-8D77-00C04FC99D61}" -HKCR,"SHCmdFile\shellex\IconHandler","",0x00000000,"{57651662-CE3E-11D0-8D77-00C04FC99D61}" - -; System-Files -HKCR,".sys","",0x00000000,"sysfile" -HKCR,"sysfile","",0x00000000,"System File" -HKCR,"regfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-171" -HKCR,"sysfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-154" - -; URL shortcuts (e.g. used in favorites folder of IExplorer) -HKCR,".url","",0x00000000,"InternetShortcut" -HKCR,"InternetShortcut","NeverShowExt",0x00000000,"" -HKCR,"InternetShortcut","IsShortcut",0x00000000,"yes" -HKCR,"InternetShortcut\shell\open\command","",0x00000000,"rundll32.exe shdocvw.dll,OpenURL %l" -HKCR,"InternetShortcut\DefaultIcon","",0x00020000,"%SystemRoot%\system32\url.dll,0" - -; Wave Sounds -HKCR,".wav","",0x00000000,"SoundRec" -HKCR,"SoundRec","",0x00000000,"Wave Sound" -HKCR,"SoundRec\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-225" -HKCR,"SoundRec\shell\open\command","",0x00020000,"%SystemRoot%\system32\mplay32.exe %1" - -; Midi Sounds -HKCR,".mid","",0x00000000,"MIDFile" -HKCR,".midi","",0x00000000,"MIDFile" -HKCR,"MIDFile","",0x00000000,"MIDI Sequence" -HKCR,"MIDFile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-225" -HKCR,"MIDFile\shell\open\command","",0x00020000,"%SystemRoot%\system32\mplay32.exe %1" - -; Audio CD -HKCR,".cda","",0x00000000,"CDAFile" -HKCR,"CDAFile","",0x00000000,"CD Audio Track" -HKCR,"CDAFile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-225" -HKCR,"CDAFile\shell\open\command","",0x00020000,"%SystemRoot%\system32\mplay32.exe %1" - -; Avi Files -HKCR,".avi","",0x00000000,"AVIFile" -HKCR,"AVIFile","",0x00000000,"Video Clip" -HKCR,"AVIFile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-224" -HKCR,"AVIFile\shell\open\command","",0x00020000,"%SystemRoot%\system32\mplay32.exe %1" - -HKCR,"CLSID",,0x00000012 - -; For Shell32.dll -HKCR,"CLSID\{00021400-0000-0000-C000-000000000046}","",0x00000000,"Desktop" -HKCR,"CLSID\{00021400-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{00021400-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -HKCR,"CLSID\{00021401-0000-0000-C000-000000000046}","",0x00000000,"Shortcut" -HKCR,"CLSID\{00021401-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{00021401-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -HKCR,"CLSID\{00021401-0000-0000-C000-000000000046}\shellex\MayChangeDefaultMenu","",0x00000000,"" -HKCR,"CLSID\{000214E6-0000-0000-C000-000000000046}","",0x00000000,"Shellfolder" -HKCR,"CLSID\{000214E6-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{000214E6-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -HKCR,"CLSID\{000214EE-0000-0000-C000-000000000046}","",0x00000000,"IShellLinkA" -HKCR,"CLSID\{000214EE-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{000214EE-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -HKCR,"CLSID\{000214F9-0000-0000-C000-000000000046}","",0x00000000,"IShellLinkW" -HKCR,"CLSID\{000214F9-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{000214F9-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Apartment" - -HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}","",0x00000000,"Computer Search Results Folder" -HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}","LocalizedString",0x00020000,"@%SystemRoot%\system32\shell32.dll,-30521" -HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-135" -HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}\InProcServer32","",0x00020000,"%SystemRoot%\system32\shell32.dll" -HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -HKCR,"CLSID\{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}\ShellFolder","Attributes",0x00010001,0x20180000 - -HKCR,"CLSID\{4657278A-411B-11d2-839A-00C04FD918D0}","",0x00000000,"Shell Drag and Drop helper" -HKCR,"CLSID\{4657278A-411B-11d2-839A-00C04FD918D0}\InProcServer32","",0x00020000,"%SystemRoot%\system32\shell32.dll" -HKCR,"CLSID\{4657278A-411B-11d2-839A-00C04FD918D0}\InProcServer32","ThreadingModel",0x00000000,"Apartment" - -; Folder Options CPL -HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}","",0x00000000,"Folder Options" -HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}","LocalizedString",0x00020000,"@%SystemRoot%\system32\shell32.dll,-150" -HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-210" -HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\shell\Open\command","",0x00000000,"rundll32.exe shell32.dll,Options_RunDLL 0" -HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\shell\RunAs\command","",0x00000000,"rundll32.exe shell32.dll,Options_RunDLL 0" -HKCR,"CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\ShellFolder","Attributes",0x00010001,0x00000000 - -; Open With shell extension -HKCR,"CLSID\{09799AFB-AD67-11d1-ABCD-00C04FC30936}","",0x00000000,"Open With Context Menu Handler" -HKCR,"CLSID\{09799AFB-AD67-11d1-ABCD-00C04FC30936}\InProcServer32","",0x00000000,"shell32.dll" -HKCR,"CLSID\{09799AFB-AD67-11d1-ABCD-00C04FC30936}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -HKCR,"CLSID\{09799AFB-AD67-11d1-ABCD-00C04FC30936}\shellex\MayChangeDefaultMenu","",0x00000000,"" -HKCR,"SystemFileAssociations","",0x00000000,"" -HKCR,"Applications","",0x00000000,"" - -; Recycle bin is not implemented -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}","",0x00000000,"Recycle Bin" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}","LocalizedString",0x00020000,"@%SystemRoot%\system32\shell32.dll,-8964" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}","InfoTip",0x00020000,"@%SystemRoot%\system32\shell32.dll,-22915" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}","IntroText",0x00020000,"@%SystemRoot%\system32\shell32.dll,-31748" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}","SortOrderIndex",0x00010001,0x00000060 -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,31" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\DefaultIcon","Empty",0x00020000,"%SystemRoot%\system32\shell32.dll,31" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\DefaultIcon","Full",0x00020000,"%SystemRoot%\system32\shell32.dll,32" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\InProcServer32","",0x00020000,"%SystemRoot%\system32\shell32.dll" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder","Attributes",0x00010001,0x20000140 -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ShellFolder","CallForAttributes",0x00010001,0x00000040 -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shellex\ContextMenuHandlers\{645FF040-5081-101B-9F08-00AA002F954E}","",0x00000000,"" -;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shellex\PropertySheetHandlers\{645FF040-5081-101B-9F08-00AA002F954E}","",0x00000000,"" - -; deskadp.dll shell extension -HKCR,"CLSID\{42071712-76d4-11d1-8b24-00a0c9068ff3}","",0x00000000,"Display Adapter CPL Extension" -HKCR,"CLSID\{42071712-76d4-11d1-8b24-00a0c9068ff3}\InProcServer32","",0x00020000,"%SystemRoot%\system32\deskadp.dll" -HKCR,"CLSID\{42071712-76d4-11d1-8b24-00a0c9068ff3}\InProcServer32","ThreadingModel",0x00000000,"Apartment" - -; deskmon.dll shell extension -HKCR,"CLSID\{42071713-76d4-11d1-8b24-00a0c9068ff3}","",0x00000000,"Display Monitor CPL Extension" -HKCR,"CLSID\{42071713-76d4-11d1-8b24-00a0c9068ff3}\InProcServer32","",0x00020000,"%SystemRoot%\system32\deskmon.dll" -HKCR,"CLSID\{42071713-76d4-11d1-8b24-00a0c9068ff3}\InProcServer32","ThreadingModel",0x00000000,"Apartment" - -; For TCPIP Protocol property page -HKCR,"CLSID\{A907657F-6FDF-11D0-8EFB-00C04FD912B2}","",0x00000000,"TCP/IP Configuration Notify Object" -HKCR,"CLSID\{A907657F-6FDF-11D0-8EFB-00C04FD912B2}\InProcServer32","",0x00000000,"netcfgx.dll" -HKCR,"CLSID\{A907657F-6FDF-11D0-8EFB-00C04FD912B2}\InProcServer32","ThreadingModel",0x00000000,"Both" - -; For dxdiagn.dll -HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}","",0x00000000,"DxDiagProvider Class" -HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}\InProcServer32","",0x00000000,"%SystemRoot%\system32\dxdiagn.dll" -HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}\ProgID","",0x00000000,"DxDiag.DxDiagProvider.1" -HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}\VersionIndependentProgID","",0x00000000,"DxDiag.DxDiagProvider" - - -HKCR,"NDS\Clsid","",0x00000002,"{323991f0-7bad-11cf-b03d-00aa006e0975}" - -HKCR,"WinNT\Clsid","",0x00000002,"{8b20cd60-0f29-11cf-abc4-02608c9e7553}" - - -; For language support: - -HKCR,"MIME",,0x00000012 -HKCR,"MIME\Database",,0x00000012 -HKCR,"MIME\Database\Rfc1766",,0x00000012 -HKCR,"MIME\Database\Rfc1766","0436",0x00000000,"af;Afrikaans" -HKCR,"MIME\Database\Rfc1766","041C",0x00000000,"sq;Albanian" -HKCR,"MIME\Database\Rfc1766","0001",0x00000000,"ar;Arabic" -HKCR,"MIME\Database\Rfc1766","1401",0x00000000,"ar-dz;Arabic (Algeria)" -HKCR,"MIME\Database\Rfc1766","3C01",0x00000000,"ar-bh;Arabic (Bahrain)" -HKCR,"MIME\Database\Rfc1766","0C01",0x00000000,"ar-eg;Arabic (Egypt)" -HKCR,"MIME\Database\Rfc1766","0801",0x00000000,"ar-iq;Arabic (Iraq)" -HKCR,"MIME\Database\Rfc1766","2C01",0x00000000,"ar-jo;Arabic (Jordan)" -HKCR,"MIME\Database\Rfc1766","3401",0x00000000,"ar-kw;Arabic (Kuwait)" -HKCR,"MIME\Database\Rfc1766","3001",0x00000000,"ar-lb;Arabic (Lebanon)" -HKCR,"MIME\Database\Rfc1766","1001",0x00000000,"ar-ly;Arabic (Libya)" -HKCR,"MIME\Database\Rfc1766","1801",0x00000000,"ar-ma;Arabic (Morocco)" -HKCR,"MIME\Database\Rfc1766","2001",0x00000000,"ar-om;Arabic (Oman)" -HKCR,"MIME\Database\Rfc1766","4001",0x00000000,"ar-qa;Arabic (Qatar)" -HKCR,"MIME\Database\Rfc1766","0401",0x00000000,"ar-sa;Arabic (Saudi Arabia)" -HKCR,"MIME\Database\Rfc1766","2801",0x00000000,"ar-sy;Arabic (Syria)" -HKCR,"MIME\Database\Rfc1766","1C01",0x00000000,"ar-tn;Arabic (Tunisia)" -HKCR,"MIME\Database\Rfc1766","3801",0x00000000,"ar-ae;Arabic (U.A.E.)" -HKCR,"MIME\Database\Rfc1766","2401",0x00000000,"ar-ye;Arabic (Yemen)" -HKCR,"MIME\Database\Rfc1766","042B",0x00000000,"hy;Armenian" -HKCR,"MIME\Database\Rfc1766","042D",0x00000000,"eu;Basque" -HKCR,"MIME\Database\Rfc1766","0423",0x00000000,"be;Belarusian" -HKCR,"MIME\Database\Rfc1766","0445",0x00000000,"bn;Bengali" -HKCR,"MIME\Database\Rfc1766","0402",0x00000000,"bg;Bulgarian" -HKCR,"MIME\Database\Rfc1766","0403",0x00000000,"ca;Catalan" -HKCR,"MIME\Database\Rfc1766","0004",0x00000000,"zh;Chinese" -HKCR,"MIME\Database\Rfc1766","0804",0x00000000,"zh-cn;Chinese (China)" -HKCR,"MIME\Database\Rfc1766","0C04",0x00000000,"zh-hk;Chinese (Hong Kong SAR)" -HKCR,"MIME\Database\Rfc1766","1004",0x00000000,"zh-sg;Chinese (Singapore)" -HKCR,"MIME\Database\Rfc1766","0404",0x00000000,"zh-tw;Chinese (Taiwan)" -HKCR,"MIME\Database\Rfc1766","041A",0x00000000,"hr;Croatian" -HKCR,"MIME\Database\Rfc1766","0405",0x00000000,"cs;Czech" -HKCR,"MIME\Database\Rfc1766","0406",0x00000000,"da;Danish" -HKCR,"MIME\Database\Rfc1766","0813",0x00000000,"nl-be;Dutch (Belgium)" -HKCR,"MIME\Database\Rfc1766","0413",0x00000000,"nl;Dutch (Netherlands)" -HKCR,"MIME\Database\Rfc1766","0009",0x00000000,"en;English" -HKCR,"MIME\Database\Rfc1766","0C09",0x00000000,"en-au;English (Australia)" -HKCR,"MIME\Database\Rfc1766","2809",0x00000000,"en-bz;English (Belize)" -HKCR,"MIME\Database\Rfc1766","1009",0x00000000,"en-ca;English (Canada)" -HKCR,"MIME\Database\Rfc1766","1809",0x00000000,"en-ie;English (Ireland)" -HKCR,"MIME\Database\Rfc1766","2009",0x00000000,"en-jm;English (Jamaica)" -HKCR,"MIME\Database\Rfc1766","1409",0x00000000,"en-nz;English (New Zealand)" -HKCR,"MIME\Database\Rfc1766","1C09",0x00000000,"en-za;English (South Africa)" -HKCR,"MIME\Database\Rfc1766","2C09",0x00000000,"en-tt;English (Trinidad)" -HKCR,"MIME\Database\Rfc1766","0809",0x00000000,"en-gb;English (United Kingdom)" -HKCR,"MIME\Database\Rfc1766","0409",0x00000000,"en-us;English (United States)" -HKCR,"MIME\Database\Rfc1766","048F",0x00000000,"eo;Esperanto" -HKCR,"MIME\Database\Rfc1766","0425",0x00000000,"et;Estonian" -HKCR,"MIME\Database\Rfc1766","0438",0x00000000,"fo;Faeroese" -HKCR,"MIME\Database\Rfc1766","0429",0x00000000,"fa;Farsi" -HKCR,"MIME\Database\Rfc1766","040B",0x00000000,"fi;Finnish" -HKCR,"MIME\Database\Rfc1766","080C",0x00000000,"fr-be;French (Belgium)" -HKCR,"MIME\Database\Rfc1766","0C0C",0x00000000,"fr-ca;French (Canada)" -HKCR,"MIME\Database\Rfc1766","040C",0x00000000,"fr;French (France)" -HKCR,"MIME\Database\Rfc1766","140C",0x00000000,"fr-lu;French (Luxembourg)" -HKCR,"MIME\Database\Rfc1766","100C",0x00000000,"fr-ch;French (Switzerland)" -HKCR,"MIME\Database\Rfc1766","043C",0x00000000,"gd;Gaelic" -HKCR,"MIME\Database\Rfc1766","0C07",0x00000000,"de-at;German (Austria)" -HKCR,"MIME\Database\Rfc1766","0407",0x00000000,"de;German (Germany)" -HKCR,"MIME\Database\Rfc1766","1407",0x00000000,"de-li;German (Liechtenstein)" -HKCR,"MIME\Database\Rfc1766","1007",0x00000000,"de-lu;German (Luxembourg)" -HKCR,"MIME\Database\Rfc1766","0807",0x00000000,"de-ch;German (Switzerland)" -HKCR,"MIME\Database\Rfc1766","0408",0x00000000,"el;Greek" -HKCR,"MIME\Database\Rfc1766","040D",0x00000000,"he;Hebrew" -HKCR,"MIME\Database\Rfc1766","0439",0x00000000,"hi;Hindi" -HKCR,"MIME\Database\Rfc1766","040E",0x00000000,"hu;Hungarian" -HKCR,"MIME\Database\Rfc1766","040F",0x00000000,"is;Icelandic" -HKCR,"MIME\Database\Rfc1766","0421",0x00000000,"in;Indonesian" -HKCR,"MIME\Database\Rfc1766","0410",0x00000000,"it;Italian (Italy)" -HKCR,"MIME\Database\Rfc1766","0810",0x00000000,"it-ch;Italian (Switzerland)" -HKCR,"MIME\Database\Rfc1766","0411",0x00000000,"ja;Japanese" -HKCR,"MIME\Database\Rfc1766","043F",0x00000000,"kk;Kazakh" -HKCR,"MIME\Database\Rfc1766","0412",0x00000000,"ko;Korean" -HKCR,"MIME\Database\Rfc1766","0426",0x00000000,"lv;Latvian" -HKCR,"MIME\Database\Rfc1766","0427",0x00000000,"lt;Lithuanian" -HKCR,"MIME\Database\Rfc1766","042F",0x00000000,"mk;FYRO Macedonian" -HKCR,"MIME\Database\Rfc1766","043E",0x00000000,"ms;Malay (Malaysia)" -HKCR,"MIME\Database\Rfc1766","043A",0x00000000,"mt;Maltese" -HKCR,"MIME\Database\Rfc1766","0414",0x00000000,"no;Norwegian (Bokmal)" -HKCR,"MIME\Database\Rfc1766","0814",0x00000000,"no;Norwegian (Nynorsk)" -HKCR,"MIME\Database\Rfc1766","0415",0x00000000,"pl;Polish" -HKCR,"MIME\Database\Rfc1766","0416",0x00000000,"pt-br;Portuguese (Brazil)" -HKCR,"MIME\Database\Rfc1766","0816",0x00000000,"pt;Portuguese (Portugal)" -HKCR,"MIME\Database\Rfc1766","0417",0x00000000,"rm;Rhaeto-Romanic" -HKCR,"MIME\Database\Rfc1766","0418",0x00000000,"ro;Romanian" -HKCR,"MIME\Database\Rfc1766","0818",0x00000000,"ro-mo;Romanian (Moldova)" -HKCR,"MIME\Database\Rfc1766","0419",0x00000000,"ru;Russian" -HKCR,"MIME\Database\Rfc1766","0819",0x00000000,"ru-mo;Russian (Moldova)" -HKCR,"MIME\Database\Rfc1766","0C1A",0x00000000,"sr;Serbian (Cyrillic)" -HKCR,"MIME\Database\Rfc1766","081A",0x00000000,"sr;Serbian (Latin)" -HKCR,"MIME\Database\Rfc1766","041B",0x00000000,"sk;Slovak" -HKCR,"MIME\Database\Rfc1766","0424",0x00000000,"sl;Slovenian" -HKCR,"MIME\Database\Rfc1766","042E",0x00000000,"sb;Sorbian" -HKCR,"MIME\Database\Rfc1766","2C0A",0x00000000,"es-ar;Spanish (Argentina)" -HKCR,"MIME\Database\Rfc1766","400A",0x00000000,"es-bo;Spanish (Bolivia)" -HKCR,"MIME\Database\Rfc1766","340A",0x00000000,"es-cl;Spanish (Chile)" -HKCR,"MIME\Database\Rfc1766","240A",0x00000000,"es-co;Spanish (Colombia)" -HKCR,"MIME\Database\Rfc1766","140A",0x00000000,"es-cr;Spanish (Costa Rica)" -HKCR,"MIME\Database\Rfc1766","1C0A",0x00000000,"es-do;Spanish (Dominican Republic)" -HKCR,"MIME\Database\Rfc1766","300A",0x00000000,"es-ec;Spanish (Ecuador)" -HKCR,"MIME\Database\Rfc1766","440A",0x00000000,"es-sv;Spanish (El Salvador)" -HKCR,"MIME\Database\Rfc1766","100A",0x00000000,"es-gt;Spanish (Guatemala)" -HKCR,"MIME\Database\Rfc1766","480A",0x00000000,"es-hn;Spanish (Honduras)" -HKCR,"MIME\Database\Rfc1766","0C0A",0x00000000,"es;Spanish (International Sort)" -HKCR,"MIME\Database\Rfc1766","080A",0x00000000,"es-mx;Spanish (Mexico)" -HKCR,"MIME\Database\Rfc1766","4C0A",0x00000000,"es-ni;Spanish (Nicaragua)" -HKCR,"MIME\Database\Rfc1766","180A",0x00000000,"es-pa;Spanish (Panama)" -HKCR,"MIME\Database\Rfc1766","3C0A",0x00000000,"es-py;Spanish (Paraguay)" -HKCR,"MIME\Database\Rfc1766","280A",0x00000000,"es-pe;Spanish (Peru)" -HKCR,"MIME\Database\Rfc1766","500A",0x00000000,"es-pr;Spanish (Puerto Rico)" -HKCR,"MIME\Database\Rfc1766","040A",0x00000000,"es;Spanish (Traditional Sort)" -HKCR,"MIME\Database\Rfc1766","380A",0x00000000,"es-uy;Spanish (Uruguay)" -HKCR,"MIME\Database\Rfc1766","200A",0x00000000,"es-ve;Spanish (Venezuela)" -HKCR,"MIME\Database\Rfc1766","0430",0x00000000,"sx;Sutu" -HKCR,"MIME\Database\Rfc1766","041D",0x00000000,"sv;Swedish" -HKCR,"MIME\Database\Rfc1766","081D",0x00000000,"sv-fi;Swedish (Finland)" -HKCR,"MIME\Database\Rfc1766","041E",0x00000000,"th;Thai" -HKCR,"MIME\Database\Rfc1766","0431",0x00000000,"ts;Tsonga" -HKCR,"MIME\Database\Rfc1766","0432",0x00000000,"tn;Tswana" -HKCR,"MIME\Database\Rfc1766","041F",0x00000000,"tr;Turkish" -HKCR,"MIME\Database\Rfc1766","0422",0x00000000,"uk;Ukrainian" -HKCR,"MIME\Database\Rfc1766","0420",0x00000000,"ur;Urdu" -HKCR,"MIME\Database\Rfc1766","042A",0x00000000,"vi;Vietnamese" -HKCR,"MIME\Database\Rfc1766","0490",0x00000000,"wa;Walloon" -HKCR,"MIME\Database\Rfc1766","0434",0x00000000,"xh;Xhosa" -HKCR,"MIME\Database\Rfc1766","043D",0x00000000,"ji;Yiddish" -HKCR,"MIME\Database\Rfc1766","0435",0x00000000,"zu;Zulu" - -; EOF diff --git a/boot/bootdata/hivedef_i386.inf b/boot/bootdata/hivedef.inf similarity index 98% rename from boot/bootdata/hivedef_i386.inf rename to boot/bootdata/hivedef.inf index c20d05e8b13..de0fec46bc8 100644 --- a/boot/bootdata/hivedef_i386.inf +++ b/boot/bootdata/hivedef.inf @@ -59,8 +59,7 @@ HKCU,"Control Panel\Desktop","DragHeight",0x00000000,"4" HKCU,"Control Panel\Desktop","DragWidth",0x00000000,"4" HKCU,"Control Panel\Desktop","PaintDesktopVersion",0x00010001,"0" HKCU,"Control Panel\Desktop","HungAppTimeout",2,"5000" -HKCU,"Control Panel\Desktop","SCRNSAVE.EXE",0,"" -HKCU,"Control Panel\Desktop","ScreenSaveActive",2,"1" +HKCU,"Control Panel\Desktop","ScreenSaveActive",2,"0" HKCU,"Control Panel\Desktop","ScreenSaverIsSecure",2,"1" HKCU,"Control Panel\Desktop","ScreenSaveTimeOut",0,"600" HKCU,"Control Panel\Desktop","WaitToKillAppTimeout",2,"20000" diff --git a/boot/bootdata/hivedef_amd64.inf b/boot/bootdata/hivedef_amd64.inf deleted file mode 100644 index 65bc11057ec..00000000000 --- a/boot/bootdata/hivedef_amd64.inf +++ /dev/null @@ -1,1839 +0,0 @@ -[Version] -Signature="$ReactOS$" - -[AddReg] - -HKCU,"Control Panel",,0x00000012 - -; Accessibility -HKCU,"Control Panel\Accessibility",,0x00000012 -HKCU,"Control Panel\Accessibility\Keyboard Preference",,0x00000012 -HKCU,"Control Panel\Accessibility\Keyboard Preference","On",2,"0" -HKCU,"Control Panel\Accessibility\HighContrast","Flags",2,"126" -HKCU,"Control Panel\Accessibility\HighContrast","High Contrast Scheme",2,"High Contrast Black (large)" -HKCU,"Control Panel\Accessibility\Keyboard Response","AutoRepeatDelay",2,"1000" -HKCU,"Control Panel\Accessibility\Keyboard Response","AutoRepeatRate",2,"500" -HKCU,"Control Panel\Accessibility\Keyboard Response","BounceTime",2,"0" -HKCU,"Control Panel\Accessibility\Keyboard Response","DelayBeforeAcceptance",2,"1000" -HKCU,"Control Panel\Accessibility\Keyboard Response","Flags",2,"126" -HKCU,"Control Panel\Accessibility\MouseKeys","Flags",2,"62" -HKCU,"Control Panel\Accessibility\MouseKeys","MaximumSpeed",2,"80" -HKCU,"Control Panel\Accessibility\MouseKeys","TimeToMaximumSpeed",2,"3000" -HKCU,"Control Panel\Accessibility\ShowSounds","On",2,"0" -HKCU,"Control Panel\Accessibility\SoundSentry","Flags",2,"2" -HKCU,"Control Panel\Accessibility\SoundSentry","FSTextEffect",2,"0" -HKCU,"Control Panel\Accessibility\SoundSentry","WindowsEffect",2,"1" -HKCU,"Control Panel\Accessibility\StickyKeys","Flags",2,"510" -HKCU,"Control Panel\Accessibility\TimeOut","Flags",2,"2" -HKCU,"Control Panel\Accessibility\TimeOut","TimeToWait",2,"300000" -HKCU,"Control Panel\Accessibility\ToggleKeys","Flags",2,"62" -HKCU,"Control Panel\Accessibility\Blind Access","On",2,"0" - -HKCU,"Control Panel\Mouse","MouseTrails",0x00000002,"0" -HKCU,"Control Panel\Mouse","SnapToDefaultButton",0x00000002,"0" -HKCU,"Control Panel\Mouse","MouseSpeed",0x00000002,"1" -HKCU,"Control Panel\Mouse","MouseThreshold1",0x00000002,"6" -HKCU,"Control Panel\Mouse","MouseThreshold2",0x00000002,"10" -HKCU,"Control Panel\Mouse","DoubleClickSpeed",0x00000002,"500" -HKCU,"Control Panel\Mouse","SwapMouseButtons",0x00000002,"0" -HKCU,"Control Panel\Mouse","MouseSensitivity",0x00000002,"10" -HKCU,"Control Panel\Mouse","MouseHoverTime",0x00000002,"400" -HKCU,"Control Panel\Mouse","MouseHoverWidth",0x00000002,"4" -HKCU,"Control Panel\Mouse","MouseHoverHeight",0x00000002,"4" -HKCU,"Control Panel\Mouse","DoubleClickWidth",0x00000002,"4" -HKCU,"Control Panel\Mouse","DoubleClickHeight",0x00000002,"4" - -HKCU,"Control Panel\Keyboard","InitialKeyboardIndicators",2,"0x80000000" -HKCU,"Control Panel\Keyboard","KeyboardDelay",2,"1" -HKCU,"Control Panel\Keyboard","KeyboardSpeed",2,"31" - -HKCU,"Control Panel\Desktop","ActiveWndTrkTimeout",0x00010003,0x00000000 -HKCU,"Control Panel\Desktop","AutoEndTasks",2,"0" -HKCU,"Control Panel\Desktop","CaretWidth",0x00010003,0x00000001 -HKCU,"Control Panel\Desktop","CoolSwitch",2,"1" -HKCU,"Control Panel\Desktop","CoolSwitchColumns",2,"7" -HKCU,"Control Panel\Desktop","CoolSwitchRows",2,"3" -HKCU,"Control Panel\Desktop","CursorBlinkRate",2,"530" -HKCU,"Control Panel\Desktop","DragFullWindows",2,"0" -HKCU,"Control Panel\Desktop","DragHeight",0x00000000,"4" -HKCU,"Control Panel\Desktop","DragWidth",0x00000000,"4" -HKCU,"Control Panel\Desktop","PaintDesktopVersion",0x00010001,"0" -HKCU,"Control Panel\Desktop","HungAppTimeout",2,"5000" -HKCU,"Control Panel\Desktop","SCRNSAVE.EXE",0,"" -HKCU,"Control Panel\Desktop","ScreenSaveActive",2,"1" -HKCU,"Control Panel\Desktop","ScreenSaverIsSecure",2,"1" -HKCU,"Control Panel\Desktop","ScreenSaveTimeOut",0,"600" -HKCU,"Control Panel\Desktop","WaitToKillAppTimeout",2,"20000" -HKCU,"Control Panel\Desktop","Wallpaper",0x00000000,"" -HKCU,"Control Panel\Desktop","FontSmoothing",0,"1" -HKCU,"Control Panel\Desktop","FontSmoothingOrientation",0x00010003,0x00000001 -HKCU,"Control Panel\Desktop","FontSmoothingType",0x00010003,0x00000001 -HKCU,"Control Panel\Desktop","ForegroundFlashCount",0x00010003,0x00000003 -HKCU,"Control Panel\Desktop","ForegroundLockTimeout",0x00010003,0x00030d40 -HKCU,"Control Panel\Desktop","GridGranularity",2,"0" -HKCU,"Control Panel\Desktop","SmoothScroll",3,00,00,00,00 -HKCU,"Control Panel\Desktop","UserPreferencesMask",3,10,00,00,80 -HKCU,"Control Panel\Desktop","LowPowerActive",2,"0" -HKCU,"Control Panel\Desktop","LowPowerTimeOut",2,"0" -HKCU,"Control Panel\Desktop","PowerOffActive",2,"0" -HKCU,"Control Panel\Desktop","PowerOffTimeOut",2,"0" -HKCU,"Control Panel\Desktop","MenuShowDelay",2,"400" -HKCU,"Control Panel\Desktop","WheelScrollLines",2,"3" -HKCU,"Control Panel\Desktop","WheelScrollChars",2,"3" -HKCU,"Control Panel\Desktop","TileWallpaper",2,"0" -HKCU,"Control Panel\Desktop","Pattern",2,"(None)" - -HKCU,"Control Panel\Desktop\WindowMetrics","ScrollWidth",2,"16" -HKCU,"Control Panel\Desktop\WindowMetrics","ScrollHeight",2,"16" -HKCU,"Control Panel\Desktop\WindowMetrics","CaptionWidth",2,"18" -HKCU,"Control Panel\Desktop\WindowMetrics","CaptionHeight",2,"18" -HKCU,"Control Panel\Desktop\WindowMetrics","SmCaptionWidth",2,"13" -HKCU,"Control Panel\Desktop\WindowMetrics","SmCaptionHeight",2,"15" -HKCU,"Control Panel\Desktop\WindowMetrics","MenuWidth",2,"18" -HKCU,"Control Panel\Desktop\WindowMetrics","MenuHeight",2,"18" -HKCU,"Control Panel\Desktop\WindowMetrics","BorderWidth",2,"1" -HKCU,"Control Panel\Desktop\WindowMetrics","Shell Icon Size",2,"32" -HKCU, "Control Panel\Desktop\WindowMetrics","CaptionFont",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\ -00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU, "Control Panel\Desktop\WindowMetrics","IconFont",0x00000001,f5,ff,ff,ff,00,00,00,00,\ -00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,\ -61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU, "Control Panel\Desktop\WindowMetrics","MenuFont",0x00000001,f5,ff,ff,ff,00,00,00,00,\ -00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,\ -61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU, "Control Panel\Desktop\WindowMetrics","MessageFont",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\ -00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU, "Control Panel\Desktop\WindowMetrics","SmCaptionFont",0x00000001,f5,ff,ff,ff,00,00,\ -00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,\ -6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU, "Control Panel\Desktop\WindowMetrics","StatusFont",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\ -00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 - -; Input Methods -HKCU,"Control Panel\Input Method\Hot Keys",,0x00000012 -HKCU,"Control Panel\Input Method\Hot Keys\00000010","Key Modifiers",0x00030003,02,c0,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000010","Target IME",0x00030003,00,00,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000010","Virtual Key",0x00030003,20,00,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000011","Key Modifiers",0x00030003,04,c0,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000011","Target IME",0x00030003,00,00,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000011","Virtual Key",0x00030003,20,00,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000012","Key Modifiers",0x00030003,02,c0,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000012","Target IME",0x00030003,00,00,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000012","Virtual Key",0x00030003,be,00,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000070","Key Modifiers",0x00030003,02,c0,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000070","Target IME",0x00030003,00,00,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000070","Virtual Key",0x00030003,20,00,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000071","Key Modifiers",0x00030003,04,c0,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000071","Target IME",0x00030003,00,00,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000071","Virtual Key",0x00030003,20,00,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000072","Key Modifiers",0x00030003,03,c0,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000072","Target IME",0x00030003,00,00,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000072","Virtual Key",0x00030003,bc,00,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000200","Key Modifiers",0x00030003,03,C0,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000200","Target IME",0x00030003,00,00,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000200","Virtual Key",0x00030003,47,00,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000201","Key Modifiers",0x00030003,03,c0,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000201","Target IME",0x00030003,00,00,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000201","Virtual Key",0x00030003,4b,00,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000202","Key Modifiers",0x00030003,03,c0,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000202","Target IME",0x00030003,00,00,00,00 -HKCU,"Control Panel\Input Method\Hot Keys\00000202","Virtual Key",0x00030003,4c,00,00,00 - -; International keys -HKCU,"Control Panel\International",,0x00000012 -HKCU,"Control Panel\International","Locale",0x00000000,"0409" -HKCU,"Control Panel\International","iCountry",2,"1" -HKCU,"Control Panel\International","iCurrDigits",2,"2" -HKCU,"Control Panel\International","iCurrency",2,"0" -HKCU,"Control Panel\International","iDate",2,"0" -HKCU,"Control Panel\International","iDigits",2,"2" -HKCU,"Control Panel\International","iLZero",2,"1" -HKCU,"Control Panel\International","iMeasure",2,"1" -HKCU,"Control Panel\International","iNegCurr",2,"0" -HKCU,"Control Panel\International","iTime",2,"0" -HKCU,"Control Panel\International","iTLZero",2,"0" -HKCU,"Control Panel\International","s1159",2,"AM" -HKCU,"Control Panel\International","s2359",2,"PM" -HKCU,"Control Panel\International","sCountry",2,"United States" -HKCU,"Control Panel\International","sCurrency",2,"$" -HKCU,"Control Panel\International","sDate",2,"/" -HKCU,"Control Panel\International","sDecimal",2,"." -;HKCU,"Control Panel\International","sLanguage",2,"ENU" -HKCU,"Control Panel\International","sList",2,"," -HKCU,"Control Panel\International","sLongDate",2,"dddd, MMMM dd, yyyy" -HKCU,"Control Panel\International","sShortDate",2,"M/d/yyyy" -HKCU,"Control Panel\International","sThousand",2,"," -HKCU,"Control Panel\International","sTime",2,":" -HKCU,"Control Panel\International\Geo","Nation",0x00000000,"1" - -; Cursors Schemes -HKCU,"Control Panel\Cursors",,,"ReactOS Default" -HKCU,"Control Panel\Cursors","Scheme Source",0x00010001,0x00000002 - -; PowerCfg -HKCU,"Control Panel\PowerCfg","CurrentPowerPolicy",2,"0" -HKCU,"Control Panel\PowerCfg\GlobalPowerPolicy","Policies",0x00030003,01,00,00,00,00,\ -00,00,00,03,00,00,00,10,00,00,00,00,00,00,00,03,00,00,00,10,00,00,00,02,00,00,00,03,\ -00,00,00,00,00,00,00,02,00,00,00,03,00,00,00,00,00,00,00,02,00,00,00,01,00,00,00,00,\ -00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,01,00,00,00,03,00,00,00,03,00,00,00,00,\ -00,00,C0,01,00,00,00,05,00,00,00,01,00,00,00,0A,00,00,00,00,00,00,00,03,00,00,00,01,\ -00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,16,\ -00,00,00 - -HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Name",2,"Home/Office Desk" -HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Description",2,"This scheme is suited to most home or desktop computers that are left plugged in all the time." -HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Policies",0x00030003,01,00,00,00,02,00,\ -00,00,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,2C,01,\ -00,00,32,32,00,03,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,B0,04,00,00,2C,01,\ -00,00,00,00,00,00,58,02,00,00,01,01,64,50,64,64,00,00 - -HKCU,"Control Panel\PowerCfg\PowerPolicies\1","Name",2,"Portable/Laptop" -HKCU,"Control Panel\PowerCfg\PowerPolicies\1","Description",2,"This scheme is designed for extended battery life for portable computers on the road." -HKCU,"Control Panel\PowerCfg\PowerPolicies\1","Policies",0x00030003,01,00,00,00,02,00,\ -00,00,01,00,00,00,00,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,B0,04,00,00,2C,01,\ -00,00,32,32,03,03,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,84,03,00,00,2C,01,\ -00,00,08,07,00,00,2C,01,00,00,01,01,64,50,64,64,00,00 - -HKCU,"Control Panel\PowerCfg\PowerPolicies\2","Name",2,"Presentation" -HKCU,"Control Panel\PowerCfg\PowerPolicies\2","Description",2,"This scheme keeps the monitor on for doing presentations." -HKCU,"Control Panel\PowerCfg\PowerPolicies\2","Policies",0x00030003,01,00,00,00,02,00,\ -00,00,01,00,00,00,00,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,84,03,\ -00,00,32,32,03,02,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,2C,01,00,00,01,01,50,50,64,64,00,00 - -HKCU,"Control Panel\PowerCfg\PowerPolicies\3","Name",2,"Always On" -HKCU,"Control Panel\PowerCfg\PowerPolicies\3","Description",2,"This scheme keeps the computer running so that it can be accessed from the network. Use this scheme if you do not have network wakeup hardware." -HKCU,"Control Panel\PowerCfg\PowerPolicies\3","Policies",0x00030003,01,00,00,00,02,00,\ -00,00,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,32,32,00,00,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,B0,04,00,00,84,03,\ -00,00,00,00,00,00,08,07,00,00,00,01,64,64,64,64,00,00 - -HKCU,"Control Panel\PowerCfg\PowerPolicies\4","Name",2,"Minimal Power Management" -HKCU,"Control Panel\PowerCfg\PowerPolicies\4","Description",2,"This scheme keeps the computer on and optimizes it for high performance." -HKCU,"Control Panel\PowerCfg\PowerPolicies\4","Policies",0x00030003,01,00,00,00,02,00,\ -00,00,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,2C,01,\ -00,00,32,32,03,03,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,84,03,00,00,2C,01,\ -00,00,00,00,00,00,84,03,00,00,00,01,64,64,64,64,00,00 - -HKCU,"Control Panel\PowerCfg\PowerPolicies\5","Name",2,"Max Battery" -HKCU,"Control Panel\PowerCfg\PowerPolicies\5","Description",2,"This scheme is extremely aggressive for saving power." -HKCU,"Control Panel\PowerCfg\PowerPolicies\5","Policies",0x00030003,01,00,00,00,02,00,\ -00,00,01,00,00,00,00,00,00,00,02,00,00,00,05,00,00,00,00,00,00,00,B0,04,00,00,78,00,\ -00,00,32,32,03,02,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,84,03,00,00,3C,00,\ -00,00,00,00,00,00,B4,00,00,00,01,01,64,32,64,64,00,00 - -; Color schemes -HKCU,"Control Panel\Current","Color Schemes",0x00020000,"ReactOS Standard" -HKCU,"Control Panel\Appearance","Current",0x00020000,"ReactOS Standard" -HKCU,"Control Panel\Appearance","NewCurrent",0x00020000,"ReactOS Standard" -HKCU,"Control Panel\Appearance\New Schemes","SelectedSize",0x00020000,"0" -HKCU,"Control Panel\Appearance\New Schemes","SelectedStyle",0x00020000,"0" -; ReactOS Standard -HKCU,"Control Panel\Appearance\New Schemes\0","DisplayName",0x00020000,"@themeui.dll,-883" -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #0",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #1",0x00010001,0x00a56e3a -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #2",0x00010001,0x006a240a -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #3",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #4",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #5",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #6",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #10",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #11",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #12",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #13",0x00010001,0x006a240a -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #15",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #16",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #17",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #18",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #19",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #20",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #21",0x00010001,0x00404040 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #22",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #24",0x00010001,0x00e1ffff -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #25",0x00010001,0x00b5b5b5 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #26",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #27",0x00010001,0x00f0caa6 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #28",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #29",0x00010001,0x006a240a -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #30",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","LegacyName",0x00020000,"ReactOS Standard" -; Brick -HKCU,"Control Panel\Appearance\New Schemes\1","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #0",0x00010001,0x02d2e0e1 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #1",0x00010001,0x00000042 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #2",0x00010001,0x00000080 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #3",0x00010001,0x0061898d -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #4",0x00010001,0x00a5bfc2 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #5",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #9",0x00010001,0x00d2e0e1 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #10",0x00010001,0x00a5bfc2 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #11",0x00010001,0x00a5bfc2 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #12",0x00010001,0x00d2e0e1 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #13",0x00010001,0x0061898d -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #15",0x00010001,0x00a5bfc2 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #16",0x00010001,0x0261898d -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #17",0x00010001,0x0261898d -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #18",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #19",0x00010001,0x00d2e0e1 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #20",0x00010001,0x02d2e0e1 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #22",0x00010001,0x02a5bfc2 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #23",0x00010001,0x00000080 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #24",0x00010001,0x00d2e0e1 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #26",0x00010001,0x02000080 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #27",0x00010001,0x004074b0 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #28",0x00010001,0x0070b8c8 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #29",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #30",0x00010001,0x00a5bfc2 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","LegacyName",0x00020000,"Brick" -; Eggplant -HKCU,"Control Panel\Appearance\New Schemes\2","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #0",0x00010001,0x02a8b090 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #1",0x00010001,0x00400040 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #2",0x00010001,0x00788058 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #3",0x00010001,0x00a8b090 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #4",0x00010001,0x00a8b090 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #10",0x00010001,0x02a8b090 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #11",0x00010001,0x02a8b090 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #12",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #13",0x00010001,0x00788058 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #15",0x00010001,0x02a8b090 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #16",0x00010001,0x02788058 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #17",0x00010001,0x02788058 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #19",0x00010001,0x00788058 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #20",0x00010001,0x02d8d8c8 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #22",0x00010001,0x02a8b090 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #23",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #26",0x00010001,0x02788058 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #27",0x00010001,0x00834b83 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #28",0x00010001,0x00d2bdcb -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #29",0x00010001,0x00788058 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #30",0x00010001,0x00a8b090 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","LegacyName",0x00020000,"Eggplant" -; Green Olive -HKCU,"Control Panel\Appearance\New Schemes\3","DisplayName",0x00020000,"@themeui.dll,-877" -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #0",0x00010001,0x02d3e3d0 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #1",0x00010001,0x00213f21 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #2",0x00010001,0x00649759 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #3",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #4",0x00010001,0x00a9c8a2 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #10",0x00010001,0x02a9c8a2 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #11",0x00010001,0x02a9c8a2 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #12",0x00010001,0x02d3e3d0 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #13",0x00010001,0x00649759 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #15",0x00010001,0x02a9c8a2 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #16",0x00010001,0x02649759 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #17",0x00010001,0x02649759 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #19",0x00010001,0x00d3e3d0 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #20",0x00010001,0x02d3e3d0 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #22",0x00010001,0x02a9c8a2 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #26",0x00010001,0x02649759 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #27",0x00010001,0x00e8c898 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #28",0x00010001,0x00b0cca8 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #29",0x00010001,0x00649759 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #30",0x00010001,0x00a9c8a2 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","LegacyName",0x00020000,"Green Olive" -; High Contrast 1 -HKCU,"Control Panel\Appearance\New Schemes\4","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #0",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #1",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #2",0x00010001,0x00ff0000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #3",0x00010001,0x00ffff00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #4",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #5",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #6",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #7",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #8",0x00010001,0x0000ffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #10",0x00010001,0x00ff0000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #11",0x00010001,0x00ffff00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #12",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #13",0x00010001,0x00008000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #15",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #16",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #17",0x00010001,0x0200ff00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #18",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #19",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #20",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #21",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #22",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #23",0x00010001,0x0000ffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #24",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #26",0x00010001,0x02800080 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #27",0x00010001,0x00ff0000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #28",0x00010001,0x00ffff00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #29",0x00010001,0x00008000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #30",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","LegacyName",0x00020000,"High Contrast 1" -; High Contrast 2 -HKCU,"Control Panel\Appearance\New Schemes\5","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #0",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #1",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #2",0x00010001,0x00ffff00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #3",0x00010001,0x00ff0000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #4",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #5",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #6",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #7",0x00010001,0x0000ff00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #8",0x00010001,0x0000ff00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #9",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #10",0x00010001,0x00ffff00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #11",0x00010001,0x00ff0000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #12",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #13",0x00010001,0x00ff0000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #15",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #16",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #17",0x00010001,0x0200ff00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #18",0x00010001,0x0000ff00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #19",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #20",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #21",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #22",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #24",0x00010001,0x0000ffff -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #26",0x00010001,0x02800080 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #27",0x00010001,0x00ffff00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #28",0x00010001,0x00ff0000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #29",0x00010001,0x00ff0000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #30",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","LegacyName",0x00020000,"High Contrast 2" -; High Contrast Black -HKCU,"Control Panel\Appearance\New Schemes\6","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #0",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #1",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #2",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #3",0x00010001,0x00008000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #4",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #5",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #6",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #7",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #8",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #10",0x00010001,0x0200ffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #11",0x00010001,0x02008000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #12",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #13",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #15",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #16",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #17",0x00010001,0x0200ff00 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #18",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #19",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #20",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #21",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #22",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #23",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #24",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #26",0x00010001,0x02800080 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #27",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #28",0x00010001,0x00008000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #29",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #30",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","LegacyName",0x00020000,"High Contrast Black" -; High Contrast White -HKCU,"Control Panel\Appearance\New Schemes\7","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #0",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #1",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #2",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #3",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #4",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #10",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #11",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #12",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #13",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #15",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #16",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #17",0x00010001,0x0200ff00 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #19",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #20",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #22",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #26",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #27",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #28",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #29",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #30",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","LegacyName",0x00020000,"High Contrast White" -; Lilac -HKCU,"Control Panel\Appearance\New Schemes\8","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #0",0x00010001,0x02d9a8ae -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #1",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #2",0x00010001,0x00b14e5a -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #3",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #4",0x00010001,0x00d9a8ae -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #10",0x00010001,0x02d9a8ae -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #11",0x00010001,0x02d9a8ae -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #12",0x00010001,0x02b14e5a -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #13",0x00010001,0x00b14e5a -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #15",0x00010001,0x02d9a8ae -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #16",0x00010001,0x02b14e5a -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #17",0x00010001,0x02b14e5a -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #19",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #20",0x00010001,0x02ecd5d8 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #22",0x00010001,0x02d9a8ae -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #26",0x00010001,0x02b14e5a -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #27",0x00010001,0x00cb8fb6 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #28",0x00010001,0x00d0b4b8 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #29",0x00010001,0x00b14e5a -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #30",0x00010001,0x00d9a8ae -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","LegacyName",0x00020000,"Lilac" -; Maple -HKCU,"Control Panel\Appearance\New Schemes\9","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #0",0x00010001,0x02d7ecf2 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #1",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #2",0x00010001,0x00000080 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #3",0x00010001,0x0046a6c6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #4",0x00010001,0x00aed8e6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #10",0x00010001,0x02aed8e6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #11",0x00010001,0x02aed8e6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #12",0x00010001,0x0246a6c6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #13",0x00010001,0x0046a6c6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #14",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #15",0x00010001,0x02aed8e6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #16",0x00010001,0x0246a6c6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #17",0x00010001,0x0246a6c6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #19",0x00010001,0x00d7ecf2 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #20",0x00010001,0x02d7ecf2 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #22",0x00010001,0x02aed8e6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #25",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #26",0x00010001,0x0246a6c6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #27",0x00010001,0x00389cc0 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #28",0x00010001,0x0088c8e0 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #29",0x00010001,0x0046a6c6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #30",0x00010001,0x00aed8e6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","LegacyName",0x00020000,"Maple" -; Marine -HKCU,"Control Panel\Appearance\New Schemes\10","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #0",0x00010001,0x02d8e0c8 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #1",0x00010001,0x00474e2c -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #2",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #3",0x00010001,0x00889048 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #4",0x00010001,0x00b8c088 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #5",0x00010001,0x02d8e0c8 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #10",0x00010001,0x02b8c088 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #11",0x00010001,0x02b8c088 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #12",0x00010001,0x00848d4b -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #13",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #15",0x00010001,0x02b8c088 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #16",0x00010001,0x02889048 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #17",0x00010001,0x02889048 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #19",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #20",0x00010001,0x02d8e0c8 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #22",0x00010001,0x02b8c088 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #24",0x00010001,0x00d8e0c8 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #26",0x00010001,0x02800000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #27",0x00010001,0x00c0b418 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #28",0x00010001,0x00d8cc78 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #29",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #30",0x00010001,0x00b8c088 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","LegacyName",0x00020000,"Marine" -; Plum -HKCU,"Control Panel\Appearance\New Schemes\11","DisplayName",0x00020000,"@themeui.dll,-869" -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #0",0x00010001,0x00c8d0d8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #1",0x00010001,0x00402840 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #2",0x00010001,0x00604048 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #3",0x00010001,0x00586078 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #4",0x00010001,0x009098a8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #5",0x00010001,0x00c8d0d8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #6",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #10",0x00010001,0x009098a8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #11",0x00010001,0x009098a8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #12",0x00010001,0x005a6374 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #13",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #14",0x00010001,0x00c8d0d8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #15",0x00010001,0x009098a8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #16",0x00010001,0x00586078 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #17",0x00010001,0x00586078 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #18",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #19",0x00010001,0x009098a8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #20",0x00010001,0x00c8d0d8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #21",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #22",0x00010001,0x009098a8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #23",0x00010001,0x00580030 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #24",0x00010001,0x00c8ccd5 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #26",0x00010001,0x00604048 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #27",0x00010001,0x00b884a0 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #28",0x00010001,0x007898a8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #29",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #30",0x00010001,0x009098a8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","LegacyName",0x00020000,"Plum" -; Pumpkin -HKCU,"Control Panel\Appearance\New Schemes\12","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #0",0x00010001,0x02cfeaf5 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #1",0x00010001,0x00420042 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #2",0x00010001,0x002fa5d7 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #3",0x00010001,0x00a4a0a0 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #4",0x00010001,0x009dd5ec -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #10",0x00010001,0x029dd5ec -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #11",0x00010001,0x029dd5ec -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #12",0x00010001,0x02cfeaf5 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #13",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #15",0x00010001,0x029dd5ec -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #16",0x00010001,0x022fa5d7 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #17",0x00010001,0x022fa5d7 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #19",0x00010001,0x00cfeaf5 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #20",0x00010001,0x02cfeaf5 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #22",0x00010001,0x029dd5ec -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #23",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #26",0x00010001,0x022fa5d7 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #27",0x00010001,0x0088cce0 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #28",0x00010001,0x0090ccd0 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #29",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #30",0x00010001,0x009dd5ec -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","LegacyName",0x00020000,"Pumpkin" -; Rainy Day -HKCU,"Control Panel\Appearance\New Schemes\13","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #0",0x00010001,0x02d9ccc1 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #1",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #2",0x00010001,0x007d654f -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #3",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #4",0x00010001,0x00b19983 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #10",0x00010001,0x02b19983 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #11",0x00010001,0x02b19983 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #12",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #13",0x00010001,0x007d654f -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #15",0x00010001,0x02b19983 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #16",0x00010001,0x027d654f -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #17",0x00010001,0x027d654f -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #19",0x00010001,0x00d9ccc1 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #20",0x00010001,0x02d9ccc1 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #22",0x00010001,0x02b19983 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #26",0x00010001,0x027d654f -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #27",0x00010001,0x00d0b480 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #28",0x00010001,0x00d0bcb0 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #29",0x00010001,0x007d654f -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #30",0x00010001,0x00b19983 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","LegacyName",0x00020000,"Rainy Day" -; ReactOS Classic -HKCU,"Control Panel\Appearance\New Schemes\14","DisplayName",0x00020000,"@themeui.dll,-880" -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #0",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #1",0x00010001,0x00a56e3a -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #2",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #3",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #4",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #5",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #6",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #10",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #11",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #12",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #13",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #15",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #16",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #17",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #18",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #19",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #20",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #21",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #22",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #24",0x00010001,0x00e1ffff -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #26",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #27",0x00010001,0x00d08410 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #28",0x00010001,0x00b5b5b5 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #29",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #30",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","LegacyName",0x00020000,"ReactOS Classic" -; Rose -HKCU,"Control Panel\Appearance\New Schemes\15","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #0",0x00010001,0x02b7afcf -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #1",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #2",0x00010001,0x0070609f -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #3",0x00010001,0x00a4a0a0 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #4",0x00010001,0x00b7afcf -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #10",0x00010001,0x02b7afcf -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #11",0x00010001,0x02b7afcf -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #12",0x00010001,0x0270609f -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #13",0x00010001,0x0070609f -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #15",0x00010001,0x02b7afcf -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #16",0x00010001,0x0270609f -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #17",0x00010001,0x0270609f -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #19",0x00010001,0x007d7d7d -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #20",0x00010001,0x02dcd8e7 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #22",0x00010001,0x02b7afcf -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #26",0x00010001,0x0270609f -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #27",0x00010001,0x00d0ccd8 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #28",0x00010001,0x00d0d4d0 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #29",0x00010001,0x0070609f -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #30",0x00010001,0x00b7afcf -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","LegacyName",0x00020000,"Rose" -; Sand -HKCU,"Control Panel\Appearance\New Schemes\16","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #0",0x00010001,0x02dde6ea -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #1",0x00010001,0x02688da2 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #2",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #3",0x00010001,0x00688da2 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #4",0x00010001,0x00bbccd5 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #10",0x00010001,0x02bbccd5 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #11",0x00010001,0x02bbccd5 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #12",0x00010001,0x02688da2 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #13",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #15",0x00010001,0x02bbccd5 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #16",0x00010001,0x02688da2 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #17",0x00010001,0x02688da2 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #19",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #20",0x00010001,0x02dde6ea -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #22",0x00010001,0x02bbccd5 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #26",0x00010001,0x02808000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #27",0x00010001,0x00aabd84 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #28",0x00010001,0x0080d0e8 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #29",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #30",0x00010001,0x00bbccd5 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","LegacyName",0x00020000,"Sand" -; Sky (WinXP-like) -HKCU,"Control Panel\Appearance\New Schemes\17","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #0",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #1",0x00010001,0x00984e00 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #2",0x00010001,0x00e35400 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #3",0x00010001,0x00df967a -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #4",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #5",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #6",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #10",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #11",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #12",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #13",0x00010001,0x00c56a31 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #15",0x00010001,0x00d8e9ec -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #16",0x00010001,0x0099a8ac -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #17",0x00010001,0x0099a8ac -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #18",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #19",0x00010001,0x00f8e4d8 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #20",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #21",0x00010001,0x00646f71 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #22",0x00010001,0x00e2eff1 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #24",0x00010001,0x00e1ffff -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #25",0x00010001,0x00b5b5b5 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #26",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #27",0x00010001,0x00ff953d -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #28",0x00010001,0x00ebb99d -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #29",0x00010001,0x00c56a31 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #30",0x00010001,0x00d8e9ec -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","LegacyName",0x00020000,"Sky" -; Slate -HKCU,"Control Panel\Appearance\New Schemes\18","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #0",0x00010001,0x02e3dcce -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #1",0x00010001,0x00414141 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #2",0x00010001,0x00978055 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #3",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #4",0x00010001,0x00c8b99d -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #10",0x00010001,0x02c8b99d -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #11",0x00010001,0x02c8b99d -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #12",0x00010001,0x00424242 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #13",0x00010001,0x00978055 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #15",0x00010001,0x02c8b99d -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #16",0x00010001,0x02978055 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #17",0x00010001,0x02978055 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #19",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #20",0x00010001,0x02e3dcce -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #22",0x00010001,0x02c8b99d -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #26",0x00010001,0x02978055 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #27",0x00010001,0x00d8b888 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #28",0x00010001,0x00c8bca0 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #29",0x00010001,0x00978055 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #30",0x00010001,0x00c8b99d -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","LegacyName",0x00020000,"Slate" -; Storm -HKCU,"Control Panel\Appearance\New Schemes\19","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #0",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #1",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #2",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #3",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #4",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #10",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #11",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #12",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #13",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #15",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #16",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #17",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #19",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #20",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #22",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #23",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #26",0x00010001,0x02800080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #27",0x00010001,0x00b08c38 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #28",0x00010001,0x00a8aca8 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #29",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #30",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","LegacyName",0x00020000,"Storm" -; Teal -HKCU,"Control Panel\Appearance\New Schemes\20","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #0",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #1",0x00010001,0x00404000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #2",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #3",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #4",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #10",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #11",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #12",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #13",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #15",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #16",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #17",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #19",0x00010001,0x00f0fbff -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #20",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #22",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #26",0x00010001,0x02808000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #27",0x00010001,0x00d8cc00 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #28",0x00010001,0x00b8c898 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #29",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #30",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","LegacyName",0x00020000,"Teal" -; Wheat -HKCU,"Control Panel\Appearance\New Schemes\21","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #0",0x00010001,0x02d0eeee -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #1",0x00010001,0x021d4000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #2",0x00010001,0x00008080 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #3",0x00010001,0x0041bcbc -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #4",0x00010001,0x00a0dede -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #10",0x00010001,0x02a0dede -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #11",0x00010001,0x02a0dede -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #12",0x00010001,0x0241bcbc -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #13",0x00010001,0x00008080 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #15",0x00010001,0x02a0dede -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #16",0x00010001,0x0241bcbc -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #17",0x00010001,0x0241bcbc -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #19",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #20",0x00010001,0x02d0eeee -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #22",0x00010001,0x02a0dede -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #25",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #26",0x00010001,0x02008080 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #27",0x00010001,0x0048b0c8 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #28",0x00010001,0x0080b8b8 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #29",0x00010001,0x00008080 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #30",0x00010001,0x00a0dede -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","LegacyName",0x00020000,"Wheat" - -HKCU,"Control Panel\Sound","Beep",2,"yes" -HKCU,"Control Panel\Sound","ExtendedSounds",2,"yes" - -HKCU,"Environment",,0x00000012 -HKCU,"Environment","TEMP",0x00020000,"%USERPROFILE%\Local Settings\Temp" -HKCU,"Environment","TMP",0x00020000,"%USERPROFILE%\Local Settings\Temp" - -HKCU,"SOFTWARE",,0x00000012 -HKCU,"SOFTWARE\Policies",,0x00000012 -HKCU,"SOFTWARE\Microsoft",,0x00000012 - -; DirectX version report as DirectX 9.0 -HKCU,"SOFTWARE\Microsoft\DirectX","Debug",0x00010001,0x00000000 -HKCU,"SOFTWARE\Microsoft\DirectX","InstalledVersion",0x00000001,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00 -HKCU,"SOFTWARE\Microsoft\DirectX","InstallMDX",0x00010001,0x00000001 -HKCU,"SOFTWARE\Microsoft\DirectX","RC",0x00010001,0x00000000 -HKCU,"SOFTWARE\Microsoft\DirectX","Version",0x00000000,"5.03.2600.2180" - -; Open With settings -HKCU,"SOFTWARE\Classes",,0x00000012 -HKCU,"SOFTWARE\Classes\Applications",,0x00000012 - -; Current user shell folder settings -HKCU,"SOFTWARE\Microsoft\Windows",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu","{208D2C60-3AEA-1069-A2D7-08002B30309D}",0x00010001,0x00000000 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}",,0x00000012 - -; default shell -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\explorer.exe" - -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",,0x00000012 -HKCU,"Software\Microsoft\Windows\CurrentVersion\Telephony",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",,0x00000012 - -HKCU,"SOFTWARE\Microsoft\Windows NT",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Devices",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\PrinterPorts",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Program Manager",,0x00000012 - -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","DebugOptions",2,"2048" -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","device",2,"" -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","Documents",2,"" -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","DosPrint",2,"no" -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","load",2,"" -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","NetMessage",2,"no" -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","NullPort",2,"None" -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","Programs",2,"com exe bat pif cmd" - -; Application compatibility settings for Windows 95 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","MajorVersion",0x00010001,0x00000004 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","MinorVersion",0x00010001,0x0000000A -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","BuildNumber",0x00010001,0x000003B6 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","PlatformId",0x00010001,0x00000001 -; Application compatibility settings for Windows 98/ME -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","MajorVersion",0x00010001,0x00000004 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","MinorVersion",0x00010001,0x00000000 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","BuildNumber",0x00010001,0x000008AE -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","PlatformId",0x00010001,0x00000001 -; Application compatibility settings for Windows NT 4 Service Pack 5 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","MajorVersion",0x00010001,0x00000004 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","MinorVersion",0x00010001,0x00000000 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","BuildNumber",0x00010001,0x00000565 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","PlatformId",0x00010001,0x00000002 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","SPMajorVersion",0x00010001,0x00000005 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","SPMinorVersion",0x00010001,0x00000000 -; Application compatibility settings for Windows 2000 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","MajorVersion",0x00010001,0x00000005 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","MinorVersion",0x00010001,0x00000000 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","BuildNumber",0x00010001,0x00000893 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","PlatformId",0x00010001,0x00000002 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","SPMajorVersion",0x00010001,0x00000003 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","SPMinorVersion",0x00010001,0x00000000 -; Application compatibility settings for Windows XP -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","MajorVersion",0x00010001,0x00000005 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","MinorVersion",0x00010001,0x00000001 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","BuildNumber",0x00010001,0x00000A28 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","PlatformId",0x00010001,0x00000002 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","SPMajorVersion",0x00010001,0x00000001 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","SPMinorVersion",0x00010001,0x00000000 - -; DEBUG: Windows Messages SPY configuration -HKCU,"SOFTWARE\ReactOS\Debug","SpyInclude",0x00020000,"INCLUDEALL" -;HKCU,"SOFTWARE\ReactOS\Debug","SpyExclude",0x00020000,"" -;HKCU,"SOFTWARE\ReactOS\Debug","SpyExcludeDWP",0x00020000,"" - -; Internet Explorer - -HKCU,Software\Wine\MSHTML,"GeckoUrl",,"http://source.winehq.org/winegecko.php" -HKCU,Software\Wine\MSHTML,"GeckoCabDir",0x00020000,"%SystemRoot%\" - -; Sound Schemes -HKCU,"AppEvents",,0x00000012 -HKCU,"AppEvents\Schemes","",0x00000000,".Default" -HKCU,"AppEvents\Schemes\Apps",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default","",0x00000000,"ReactOS" -HKCU,"AppEvents\Schemes\Apps\.Default","DispFileName",0x00000000,"@mmsys.cpl,-5856" -HKCU,"AppEvents\Schemes\Apps\.Default\.Default",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\.Default\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\.Default\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\AppGPFault",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\AppGPFault\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\AppGPFault\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\Close",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\Close\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\Close\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\CriticalBatteryAlarm",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\CriticalBatteryAlarm\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\CriticalBatteryAlarm\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceConnect",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceConnect\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceConnect\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceDisconnect",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceDisconnect\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceDisconnect\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceFail",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceFail\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceFail\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\LowBatteryAlarm",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\LowBatteryAlarm\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\LowBatteryAlarm\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\MailBeep",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\MailBeep\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\MailBeep\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\Maximize",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\Maximize\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\Maximize\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\MenuCommand",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\MenuCommand\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\MenuCommand\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\MenuPopup",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\MenuPopup\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\MenuPopup\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\Minimize",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\Minimize\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\Minimize\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\Open",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\Open\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\Open\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\PrintComplete",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\PrintComplete\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\PrintComplete\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\RestoreDown",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\RestoreDown\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\RestoreDown\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\RestoreUp",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\RestoreUp\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\RestoreUp\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemAsterisk",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\SystemAsterisk\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemAsterisk\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemExclamation",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\SystemExclamation\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemExclamation\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemExit",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\SystemExit\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemExit\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemHand",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\SystemHand\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemHand\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemNotification",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\SystemNotification\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemNotification\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart\.Current","",0x00020000,"%SystemRoot%\media\ReactOS_LogOn.wav" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart\.Default","",0x00020000,"%SystemRoot%\media\ReactOS_LogOn.wav" -HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\Explorer","",0x00000002,"ReactOS Explorer" -HKCU,"AppEvents\Schemes\Apps\Explorer","DispFileName",0x00000000,"@mmsys.cpl,-5854" -HKCU,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\Explorer\Navigating",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\Explorer\Navigating\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\Explorer\Navigating\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Names",,0x00000012 -HKCU,"AppEvents\Schemes\Names\.Default","",0x00000002,"ReactOS Default" -HKCU,"AppEvents\Schemes\Names\.None","",0x00000002,"No sounds" - -HKCU,"AppEvents\EventLabels",,0x00000012 -HKCU,"AppEvents\EventLabels\.Default","",0x00000000,"Default Beep" -HKCU,"AppEvents\EventLabels\.Default","DispFileName",0x00000000,"@mmsys.cpl,-5824" -HKCU,"AppEvents\EventLabels\AppGPFault","",0x00000000,"Program error" -HKCU,"AppEvents\EventLabels\AppGPFault","DispFileName",0x00000000,"@mmsys.cpl,-5825" -HKCU,"AppEvents\EventLabels\Close","",0x00000000,"Close program" -HKCU,"AppEvents\EventLabels\Close","DispFileName",0x00000000,"@mmsys.cpl,-5826" -HKCU,"AppEvents\EventLabels\CriticalBatteryAlarm","",0x00000000,"Critical Battery Alarm" -HKCU,"AppEvents\EventLabels\CriticalBatteryAlarm","DispFileName",0x00000000,"@mmsys.cpl,-5827" -HKCU,"AppEvents\EventLabels\DeviceConnect","",0x00000000,"Device Connect" -HKCU,"AppEvents\EventLabels\DeviceConnect","DispFileName",0x00000000,"@mmsys.cpl,-5828" -HKCU,"AppEvents\EventLabels\DeviceDisconnect","",0x00000000,"Device Disconnect" -HKCU,"AppEvents\EventLabels\DeviceDisconnect","DispFileName",0x00000000,"@mmsys.cpl,-5829" -HKCU,"AppEvents\EventLabels\DeviceFail","",0x00000000,"Device Failed to Connect" -HKCU,"AppEvents\EventLabels\DeviceFail","DispFileName",0x00000000,"@mmsys.cpl,-5830" -HKCU,"AppEvents\EventLabels\EmptyRecycleBin","",0x00000000,"Empty Recycle Bin" -HKCU,"AppEvents\EventLabels\EmptyRecycleBin","DispFileName",0x00000000,"@mmsys.cpl,-5831" -HKCU,"AppEvents\EventLabels\LowBatteryAlarm","",0x00000000,"Low Battery Alarm" -HKCU,"AppEvents\EventLabels\LowBatteryAlarm","DispFileName",0x00000000,"@mmsys.cpl,-5832" -HKCU,"AppEvents\EventLabels\Maximize","",0x00000000,"Maximize" -HKCU,"AppEvents\EventLabels\Maximize","DispFileName",0x00000000,"@mmsys.cpl,-5833" -HKCU,"AppEvents\EventLabels\MenuCommand","",0x00000000,"Menu command" -HKCU,"AppEvents\EventLabels\MenuCommand","DispFileName",0x00000000,"@mmsys.cpl,-5834" -HKCU,"AppEvents\EventLabels\MenuPopup","",0x00000000,"Menu popup" -HKCU,"AppEvents\EventLabels\MenuPopup","DispFileName",0x00000000,"@mmsys.cpl,-5835" -HKCU,"AppEvents\EventLabels\Minimize","",0x00000000,"Minimize" -HKCU,"AppEvents\EventLabels\Minimize","DispFileName",0x00000000,"@mmsys.cpl,-5836" -HKCU,"AppEvents\EventLabels\MailBeep","",0x00000000,"New Mail Notification" -HKCU,"AppEvents\EventLabels\MailBeep","DispFileName",0x00000000,"@mmsys.cpl,-5837" -HKCU,"AppEvents\EventLabels\Navigating","",0x00000000,"Start Navigation" -HKCU,"AppEvents\EventLabels\Navigating","DispFileName",0x00000000,"@mmsys.cpl,-5838" -HKCU,"AppEvents\EventLabels\Open","",0x00000000,"Open program" -HKCU,"AppEvents\EventLabels\Open","DispFileName",0x00000000,"@mmsys.cpl,-5839" -HKCU,"AppEvents\EventLabels\PrintComplete","",0x00000000,"Print Complete" -HKCU,"AppEvents\EventLabels\PrintComplete","DispFileName",0x00000000,"@mmsys.cpl,-5840" -HKCU,"AppEvents\EventLabels\RestoreDown","",0x00000000,"Restore Down" -HKCU,"AppEvents\EventLabels\RestoreDown","DispFileName",0x00000000,"@mmsys.cpl,-5841" -HKCU,"AppEvents\EventLabels\RestoreUp","",0x00000000,"Restore Up" -HKCU,"AppEvents\EventLabels\RestoreUp","DispFileName",0x00000000,"@mmsys.cpl,-5842" -HKCU,"AppEvents\EventLabels\SystemAsterisk","",0x00000000,"Asterisk" -HKCU,"AppEvents\EventLabels\SystemAsterisk","DispFileName",0x00000000,"@mmsys.cpl,-5843" -HKCU,"AppEvents\EventLabels\SystemExclamation","",0x00000000,"Exclamation" -HKCU,"AppEvents\EventLabels\SystemExclamation","DispFileName",0x00000000,"@mmsys.cpl,-5845" -HKCU,"AppEvents\EventLabels\SystemExit","",0x00000000,"Exit ReactOS" -HKCU,"AppEvents\EventLabels\SystemExit","DispFileName",0x00000000,"@mmsys.cpl,-5846" -HKCU,"AppEvents\EventLabels\SystemHand","",0x00000000,"Critical Stop" -HKCU,"AppEvents\EventLabels\SystemHand","DispFileName",0x00000000,"@mmsys.cpl,-5847" -HKCU,"AppEvents\EventLabels\SystemNotification","",0x00000000,"System Notification" -HKCU,"AppEvents\EventLabels\SystemNotification","DispFileName",0x00000000,"@mmsys.cpl,-5848" -HKCU,"AppEvents\EventLabels\SystemQuestion","",0x00000000,"Question" -HKCU,"AppEvents\EventLabels\SystemQuestion","DispFileName",0x00000000,"@mmsys.cpl,-5849" -HKCU,"AppEvents\EventLabels\SystemStart","",0x00000000,"Start ReactOS" -HKCU,"AppEvents\EventLabels\SystemStart","DispFileName",0x00000000,"@mmsys.cpl,-5850" -HKCU,"AppEvents\EventLabels\WindowsLogoff","",0x00000000,"ReactOS Logoff" -HKCU,"AppEvents\EventLabels\WindowsLogoff","DispFileName",0x00000000,"@mmsys.cpl,-5852" -HKCU,"AppEvents\EventLabels\WindowsLogon","",0x00000000,"ReactOS Logon" -HKCU,"AppEvents\EventLabels\WindowsLogon","DispFileName",0x00000000,"@mmsys.cpl,-5853" - -; EOF diff --git a/boot/bootdata/hivedef_arm.inf b/boot/bootdata/hivedef_arm.inf deleted file mode 100644 index de6aee44599..00000000000 --- a/boot/bootdata/hivedef_arm.inf +++ /dev/null @@ -1,1689 +0,0 @@ -[Version] -Signature="$ReactOS$" - -[AddReg] - -HKCU,"Control Panel",,0x00000012 -HKCU,"Control Panel\Accessibility",,0x00000012 -HKCU,"Control Panel\Appearance",,0x00000012 -HKCU,"Control Panel\Mouse","MouseTrails",0x00000002,"0" -HKCU,"Control Panel\Mouse","SnapToDefaultButton",0x00000002,"0" -HKCU,"Control Panel\Mouse","MouseSpeed",0x00000002,"1" -HKCU,"Control Panel\Mouse","MouseThreshold1",0x00000002,"6" -HKCU,"Control Panel\Mouse","MouseThreshold2",0x00000002,"10" -HKCU,"Control Panel\Mouse","DoubleClickSpeed",0x00000002,"480" -HKCU,"Control Panel\Mouse","SwapMouseButtons",0x00000002,"0" -HKCU,"Control Panel\Mouse","MouseSensitivity",0x00000002,"10" -HKCU,"Control Panel\Mouse","MouseHoverTime",0x00000002,"400" -HKCU,"Control Panel\Mouse","MouseHoverWidth",0x00000002,"4" -HKCU,"Control Panel\Mouse","MouseHoverHeight",0x00000002,"4" -HKCU,"Control Panel\Mouse","DoubleClickWidth",0x00000002,"4" -HKCU,"Control Panel\Mouse","DoubleClickHeight",0x00000002,"4" - -HKCU,"Control Panel\Desktop","AutoEndTasks",0x00000002,"0" -HKCU,"Control Panel\Desktop","CursorBlinkRate",0x00000002,"530" -HKCU,"Control Panel\Desktop","DragFullWindows",0x00000002,"0" -HKCU,"Control Panel\Desktop","PaintDesktopVersion",0x00010001,"0" -HKCU,"Control Panel\Desktop","HungAppTimeout",0x00000002,"5000" -HKCU,"Control Panel\Desktop","SCRNSAVE.EXE",0x00000000,"" -HKCU,"Control Panel\Desktop","WaitToKillAppTimeout",0x00000002,"20000" -HKCU,"Control Panel\Desktop","Wallpaper",0x00000000,"" -HKCU,"Control Panel\Desktop","FontSmoothing",0,"1" -HKCU,"Control Panel\Desktop","SmoothScroll",3,00,00,00,00 -HKCU,"Control Panel\Desktop","UserPreferencesMask",3,10,00,00,80 -HKCU,"Control Panel\Desktop","LowPowerActive",,"0" -HKCU,"Control Panel\Desktop","MenuShowDelay",2,"400" -HKCU,"Control Panel\Desktop","WheelScrollLines",2,"3" -HKCU,"Control Panel\Desktop","WheelScrollChars",2,"3" - -HKCU,"Control Panel\Desktop\WindowMetrics","ScrollWidth",2,"16" -HKCU,"Control Panel\Desktop\WindowMetrics","ScrollHeight",2,"16" -HKCU,"Control Panel\Desktop\WindowMetrics","CaptionWidth",2,"18" -HKCU,"Control Panel\Desktop\WindowMetrics","CaptionHeight",2,"18" -HKCU,"Control Panel\Desktop\WindowMetrics","SmCaptionWidth",2,"13" -HKCU,"Control Panel\Desktop\WindowMetrics","SmCaptionHeight",2,"15" -HKCU,"Control Panel\Desktop\WindowMetrics","MenuWidth",2,"18" -HKCU,"Control Panel\Desktop\WindowMetrics","MenuHeight",2,"18" -HKCU,"Control Panel\Desktop\WindowMetrics","BorderWidth",2,"1" -HKCU,"Control Panel\Desktop\WindowMetrics","Shell Icon Size",2,"32" - -HKCU,"Control Panel\International",,0x00000012 -HKCU,"Control Panel\International","Locale",0x00000000,"0409" -HKCU,"Control Panel\International\Geo","Nation",0x00000000,"1" - -; Cursors Schemes -HKCU,"Control Panel\Cursors",,,"ReactOS Default" -HKCU,"Control Panel\Cursors","Scheme Source",0x00010001,0x00000002 - -; PowerCfg -HKCU,"Control Panel\PowerCfg","CurrentPowerPolicy",0x00000002,"0" -HKCU,"Control Panel\PowerCfg\GlobalPowerPolicy","Policies",0x00000001,01,00,00,00,03,\ -00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,03,00,00,00,00,00,00,00,02,00,00,00,03,\ -00,00,00,00,00,00,00,02,00,00,00,03,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,\ -00,00,80,00,00,00,00,01,00,00,00,00,00,00,80,01,00,00,00,03,00,00,00,02,00,00,00,04,\ -00,00,c0,01,00,00,00,04,00,00,00,01,00,00,00,0a,00,00,00,00,00,00,00,03,00,00,00,01,\ -00,01,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,02,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,00,00,16,\ -00,00,00 -HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Name",0x00020000,"Home/Office Desk" -HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Description",0x00020000,"This scheme is suited to most home or desktop computers that are left plugged in all the time." -HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Policies",0x00000001,01,00,00,00,02,\ -00,00,00,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,2c,\ -01,00,00,32,32,00,03,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,b0,04,00,00,2c,\ -01,00,00,00,00,00,00,58,02,00,00,01,01,64,50,64,64,00,00 - -; Color schemes -HKCU,"Control Panel\Current","Color Schemes",0x00020000,"ReactOS Standard" -HKCU,"Control Panel\Appearance","Current",0x00020000,"ReactOS Standard" -HKCU,"Control Panel\Appearance","NewCurrent",0x00020000,"ReactOS Standard" -HKCU,"Control Panel\Appearance\New Schemes","SelectedSize",0x00020000,"0" -HKCU,"Control Panel\Appearance\New Schemes","SelectedStyle",0x00020000,"0" -; ReactOS Standard -HKCU,"Control Panel\Appearance\New Schemes\0","DisplayName",0x00020000,"@themeui.dll,-883" -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #0",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #1",0x00010001,0x00a56e3a -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #2",0x00010001,0x006a240a -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #3",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #4",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #5",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #6",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #10",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #11",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #12",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #13",0x00010001,0x006a240a -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #15",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #16",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #17",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #18",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #19",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #20",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #21",0x00010001,0x00404040 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #22",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #24",0x00010001,0x00e1ffff -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #25",0x00010001,0x00b5b5b5 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #26",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #27",0x00010001,0x00f0caa6 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #28",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #29",0x00010001,0x006a240a -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #30",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","LegacyName",0x00020000,"ReactOS Standard" -; Brick -HKCU,"Control Panel\Appearance\New Schemes\1","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #0",0x00010001,0x02d2e0e1 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #1",0x00010001,0x00000042 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #2",0x00010001,0x00000080 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #3",0x00010001,0x0061898d -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #4",0x00010001,0x00a5bfc2 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #5",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #9",0x00010001,0x00d2e0e1 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #10",0x00010001,0x00a5bfc2 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #11",0x00010001,0x00a5bfc2 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #12",0x00010001,0x00d2e0e1 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #13",0x00010001,0x0061898d -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #15",0x00010001,0x00a5bfc2 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #16",0x00010001,0x0261898d -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #17",0x00010001,0x0261898d -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #18",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #19",0x00010001,0x00d2e0e1 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #20",0x00010001,0x02d2e0e1 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #22",0x00010001,0x02a5bfc2 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #23",0x00010001,0x00000080 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #24",0x00010001,0x00d2e0e1 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #26",0x00010001,0x02000080 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #27",0x00010001,0x004074b0 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #28",0x00010001,0x0070b8c8 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #29",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #30",0x00010001,0x00a5bfc2 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","LegacyName",0x00020000,"Brick" -; Eggplant -HKCU,"Control Panel\Appearance\New Schemes\2","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #0",0x00010001,0x02a8b090 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #1",0x00010001,0x00400040 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #2",0x00010001,0x00788058 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #3",0x00010001,0x00a8b090 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #4",0x00010001,0x00a8b090 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #10",0x00010001,0x02a8b090 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #11",0x00010001,0x02a8b090 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #12",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #13",0x00010001,0x00788058 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #15",0x00010001,0x02a8b090 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #16",0x00010001,0x02788058 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #17",0x00010001,0x02788058 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #19",0x00010001,0x00788058 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #20",0x00010001,0x02d8d8c8 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #22",0x00010001,0x02a8b090 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #23",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #26",0x00010001,0x02788058 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #27",0x00010001,0x00834b83 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #28",0x00010001,0x00d2bdcb -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #29",0x00010001,0x00788058 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #30",0x00010001,0x00a8b090 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","LegacyName",0x00020000,"Eggplant" -; Green Olive -HKCU,"Control Panel\Appearance\New Schemes\3","DisplayName",0x00020000,"@themeui.dll,-877" -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #0",0x00010001,0x02d3e3d0 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #1",0x00010001,0x00213f21 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #2",0x00010001,0x00649759 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #3",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #4",0x00010001,0x00a9c8a2 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #10",0x00010001,0x02a9c8a2 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #11",0x00010001,0x02a9c8a2 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #12",0x00010001,0x02d3e3d0 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #13",0x00010001,0x00649759 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #15",0x00010001,0x02a9c8a2 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #16",0x00010001,0x02649759 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #17",0x00010001,0x02649759 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #19",0x00010001,0x00d3e3d0 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #20",0x00010001,0x02d3e3d0 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #22",0x00010001,0x02a9c8a2 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #26",0x00010001,0x02649759 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #27",0x00010001,0x00e8c898 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #28",0x00010001,0x00b0cca8 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #29",0x00010001,0x00649759 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #30",0x00010001,0x00a9c8a2 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","LegacyName",0x00020000,"Green Olive" -; High Contrast 1 -HKCU,"Control Panel\Appearance\New Schemes\4","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #0",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #1",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #2",0x00010001,0x00ff0000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #3",0x00010001,0x00ffff00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #4",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #5",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #6",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #7",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #8",0x00010001,0x0000ffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #10",0x00010001,0x00ff0000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #11",0x00010001,0x00ffff00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #12",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #13",0x00010001,0x00008000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #15",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #16",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #17",0x00010001,0x0200ff00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #18",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #19",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #20",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #21",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #22",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #23",0x00010001,0x0000ffff -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #24",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #26",0x00010001,0x02800080 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #27",0x00010001,0x00ff0000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #28",0x00010001,0x00ffff00 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #29",0x00010001,0x00008000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #30",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","LegacyName",0x00020000,"High Contrast 1" -; High Contrast 2 -HKCU,"Control Panel\Appearance\New Schemes\5","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #0",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #1",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #2",0x00010001,0x00ffff00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #3",0x00010001,0x00ff0000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #4",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #5",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #6",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #7",0x00010001,0x0000ff00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #8",0x00010001,0x0000ff00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #9",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #10",0x00010001,0x00ffff00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #11",0x00010001,0x00ff0000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #12",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #13",0x00010001,0x00ff0000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #15",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #16",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #17",0x00010001,0x0200ff00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #18",0x00010001,0x0000ff00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #19",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #20",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #21",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #22",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #24",0x00010001,0x0000ffff -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #26",0x00010001,0x02800080 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #27",0x00010001,0x00ffff00 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #28",0x00010001,0x00ff0000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #29",0x00010001,0x00ff0000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #30",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","LegacyName",0x00020000,"High Contrast 2" -; High Contrast Black -HKCU,"Control Panel\Appearance\New Schemes\6","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #0",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #1",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #2",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #3",0x00010001,0x00008000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #4",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #5",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #6",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #7",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #8",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #10",0x00010001,0x0200ffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #11",0x00010001,0x02008000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #12",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #13",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #15",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #16",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #17",0x00010001,0x0200ff00 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #18",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #19",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #20",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #21",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #22",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #23",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #24",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #26",0x00010001,0x02800080 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #27",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #28",0x00010001,0x00008000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #29",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #30",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","LegacyName",0x00020000,"High Contrast Black" -; High Contrast White -HKCU,"Control Panel\Appearance\New Schemes\7","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #0",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #1",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #2",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #3",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #4",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #10",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #11",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #12",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #13",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #15",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #16",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #17",0x00010001,0x0200ff00 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #19",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #20",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #22",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #26",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #27",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #28",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #29",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #30",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","LegacyName",0x00020000,"High Contrast White" -; Lilac -HKCU,"Control Panel\Appearance\New Schemes\8","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #0",0x00010001,0x02d9a8ae -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #1",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #2",0x00010001,0x00b14e5a -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #3",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #4",0x00010001,0x00d9a8ae -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #10",0x00010001,0x02d9a8ae -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #11",0x00010001,0x02d9a8ae -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #12",0x00010001,0x02b14e5a -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #13",0x00010001,0x00b14e5a -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #15",0x00010001,0x02d9a8ae -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #16",0x00010001,0x02b14e5a -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #17",0x00010001,0x02b14e5a -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #19",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #20",0x00010001,0x02ecd5d8 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #22",0x00010001,0x02d9a8ae -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #26",0x00010001,0x02b14e5a -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #27",0x00010001,0x00cb8fb6 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #28",0x00010001,0x00d0b4b8 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #29",0x00010001,0x00b14e5a -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #30",0x00010001,0x00d9a8ae -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","LegacyName",0x00020000,"Lilac" -; Maple -HKCU,"Control Panel\Appearance\New Schemes\9","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #0",0x00010001,0x02d7ecf2 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #1",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #2",0x00010001,0x00000080 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #3",0x00010001,0x0046a6c6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #4",0x00010001,0x00aed8e6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #10",0x00010001,0x02aed8e6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #11",0x00010001,0x02aed8e6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #12",0x00010001,0x0246a6c6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #13",0x00010001,0x0046a6c6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #14",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #15",0x00010001,0x02aed8e6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #16",0x00010001,0x0246a6c6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #17",0x00010001,0x0246a6c6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #19",0x00010001,0x00d7ecf2 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #20",0x00010001,0x02d7ecf2 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #22",0x00010001,0x02aed8e6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #25",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #26",0x00010001,0x0246a6c6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #27",0x00010001,0x00389cc0 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #28",0x00010001,0x0088c8e0 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #29",0x00010001,0x0046a6c6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #30",0x00010001,0x00aed8e6 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","LegacyName",0x00020000,"Maple" -; Marine -HKCU,"Control Panel\Appearance\New Schemes\10","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #0",0x00010001,0x02d8e0c8 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #1",0x00010001,0x00474e2c -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #2",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #3",0x00010001,0x00889048 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #4",0x00010001,0x00b8c088 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #5",0x00010001,0x02d8e0c8 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #10",0x00010001,0x02b8c088 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #11",0x00010001,0x02b8c088 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #12",0x00010001,0x00848d4b -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #13",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #15",0x00010001,0x02b8c088 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #16",0x00010001,0x02889048 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #17",0x00010001,0x02889048 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #19",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #20",0x00010001,0x02d8e0c8 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #22",0x00010001,0x02b8c088 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #24",0x00010001,0x00d8e0c8 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #26",0x00010001,0x02800000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #27",0x00010001,0x00c0b418 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #28",0x00010001,0x00d8cc78 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #29",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #30",0x00010001,0x00b8c088 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","LegacyName",0x00020000,"Marine" -; Plum -HKCU,"Control Panel\Appearance\New Schemes\11","DisplayName",0x00020000,"@themeui.dll,-869" -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #0",0x00010001,0x00c8d0d8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #1",0x00010001,0x00402840 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #2",0x00010001,0x00604048 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #3",0x00010001,0x00586078 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #4",0x00010001,0x009098a8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #5",0x00010001,0x00c8d0d8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #6",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #10",0x00010001,0x009098a8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #11",0x00010001,0x009098a8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #12",0x00010001,0x005a6374 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #13",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #14",0x00010001,0x00c8d0d8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #15",0x00010001,0x009098a8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #16",0x00010001,0x00586078 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #17",0x00010001,0x00586078 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #18",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #19",0x00010001,0x009098a8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #20",0x00010001,0x00c8d0d8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #21",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #22",0x00010001,0x009098a8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #23",0x00010001,0x00580030 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #24",0x00010001,0x00c8ccd5 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #26",0x00010001,0x00604048 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #27",0x00010001,0x00b884a0 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #28",0x00010001,0x007898a8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #29",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #30",0x00010001,0x009098a8 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","LegacyName",0x00020000,"Plum" -; Pumpkin -HKCU,"Control Panel\Appearance\New Schemes\12","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #0",0x00010001,0x02cfeaf5 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #1",0x00010001,0x00420042 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #2",0x00010001,0x002fa5d7 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #3",0x00010001,0x00a4a0a0 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #4",0x00010001,0x009dd5ec -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #10",0x00010001,0x029dd5ec -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #11",0x00010001,0x029dd5ec -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #12",0x00010001,0x02cfeaf5 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #13",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #15",0x00010001,0x029dd5ec -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #16",0x00010001,0x022fa5d7 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #17",0x00010001,0x022fa5d7 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #19",0x00010001,0x00cfeaf5 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #20",0x00010001,0x02cfeaf5 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #22",0x00010001,0x029dd5ec -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #23",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #26",0x00010001,0x022fa5d7 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #27",0x00010001,0x0088cce0 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #28",0x00010001,0x0090ccd0 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #29",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #30",0x00010001,0x009dd5ec -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","LegacyName",0x00020000,"Pumpkin" -; Rainy Day -HKCU,"Control Panel\Appearance\New Schemes\13","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #0",0x00010001,0x02d9ccc1 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #1",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #2",0x00010001,0x007d654f -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #3",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #4",0x00010001,0x00b19983 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #10",0x00010001,0x02b19983 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #11",0x00010001,0x02b19983 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #12",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #13",0x00010001,0x007d654f -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #15",0x00010001,0x02b19983 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #16",0x00010001,0x027d654f -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #17",0x00010001,0x027d654f -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #19",0x00010001,0x00d9ccc1 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #20",0x00010001,0x02d9ccc1 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #22",0x00010001,0x02b19983 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #26",0x00010001,0x027d654f -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #27",0x00010001,0x00d0b480 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #28",0x00010001,0x00d0bcb0 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #29",0x00010001,0x007d654f -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #30",0x00010001,0x00b19983 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","LegacyName",0x00020000,"Rainy Day" -; ReactOS Classic -HKCU,"Control Panel\Appearance\New Schemes\14","DisplayName",0x00020000,"@themeui.dll,-880" -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #0",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #1",0x00010001,0x00a56e3a -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #2",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #3",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #4",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #5",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #6",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #10",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #11",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #12",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #13",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #15",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #16",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #17",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #18",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #19",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #20",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #21",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #22",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #24",0x00010001,0x00e1ffff -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #26",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #27",0x00010001,0x00d08410 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #28",0x00010001,0x00b5b5b5 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #29",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #30",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","LegacyName",0x00020000,"ReactOS Classic" -; Rose -HKCU,"Control Panel\Appearance\New Schemes\15","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #0",0x00010001,0x02b7afcf -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #1",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #2",0x00010001,0x0070609f -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #3",0x00010001,0x00a4a0a0 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #4",0x00010001,0x00b7afcf -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #10",0x00010001,0x02b7afcf -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #11",0x00010001,0x02b7afcf -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #12",0x00010001,0x0270609f -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #13",0x00010001,0x0070609f -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #15",0x00010001,0x02b7afcf -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #16",0x00010001,0x0270609f -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #17",0x00010001,0x0270609f -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #19",0x00010001,0x007d7d7d -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #20",0x00010001,0x02dcd8e7 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #22",0x00010001,0x02b7afcf -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #26",0x00010001,0x0270609f -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #27",0x00010001,0x00d0ccd8 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #28",0x00010001,0x00d0d4d0 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #29",0x00010001,0x0070609f -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #30",0x00010001,0x00b7afcf -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","LegacyName",0x00020000,"Rose" -; Sand -HKCU,"Control Panel\Appearance\New Schemes\16","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #0",0x00010001,0x02dde6ea -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #1",0x00010001,0x02688da2 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #2",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #3",0x00010001,0x00688da2 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #4",0x00010001,0x00bbccd5 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #10",0x00010001,0x02bbccd5 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #11",0x00010001,0x02bbccd5 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #12",0x00010001,0x02688da2 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #13",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #15",0x00010001,0x02bbccd5 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #16",0x00010001,0x02688da2 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #17",0x00010001,0x02688da2 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #19",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #20",0x00010001,0x02dde6ea -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #22",0x00010001,0x02bbccd5 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #26",0x00010001,0x02808000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #27",0x00010001,0x00aabd84 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #28",0x00010001,0x0080d0e8 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #29",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #30",0x00010001,0x00bbccd5 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","LegacyName",0x00020000,"Sand" -; Sky (WinXP-like) -HKCU,"Control Panel\Appearance\New Schemes\17","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #0",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #1",0x00010001,0x00984e00 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #2",0x00010001,0x00e35400 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #3",0x00010001,0x00df967a -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #4",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #5",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #6",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #10",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #11",0x00010001,0x00c8d0d4 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #12",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #13",0x00010001,0x00c56a31 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #15",0x00010001,0x00d8e9ec -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #16",0x00010001,0x0099a8ac -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #17",0x00010001,0x0099a8ac -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #18",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #19",0x00010001,0x00f8e4d8 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #20",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #21",0x00010001,0x00646f71 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #22",0x00010001,0x00e2eff1 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #24",0x00010001,0x00e1ffff -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #25",0x00010001,0x00b5b5b5 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #26",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #27",0x00010001,0x00ff953d -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #28",0x00010001,0x00ebb99d -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #29",0x00010001,0x00c56a31 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #30",0x00010001,0x00d8e9ec -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","LegacyName",0x00020000,"Sky" -; Slate -HKCU,"Control Panel\Appearance\New Schemes\18","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #0",0x00010001,0x02e3dcce -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #1",0x00010001,0x00414141 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #2",0x00010001,0x00978055 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #3",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #4",0x00010001,0x00c8b99d -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #10",0x00010001,0x02c8b99d -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #11",0x00010001,0x02c8b99d -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #12",0x00010001,0x00424242 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #13",0x00010001,0x00978055 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #15",0x00010001,0x02c8b99d -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #16",0x00010001,0x02978055 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #17",0x00010001,0x02978055 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #19",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #20",0x00010001,0x02e3dcce -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #22",0x00010001,0x02c8b99d -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #26",0x00010001,0x02978055 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #27",0x00010001,0x00d8b888 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #28",0x00010001,0x00c8bca0 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #29",0x00010001,0x00978055 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #30",0x00010001,0x00c8b99d -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","LegacyName",0x00020000,"Slate" -; Storm -HKCU,"Control Panel\Appearance\New Schemes\19","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #0",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #1",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #2",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #3",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #4",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #10",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #11",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #12",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #13",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #15",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #16",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #17",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #19",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #20",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #22",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #23",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #26",0x00010001,0x02800080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #27",0x00010001,0x00b08c38 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #28",0x00010001,0x00a8aca8 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #29",0x00010001,0x00800080 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #30",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","LegacyName",0x00020000,"Storm" -; Teal -HKCU,"Control Panel\Appearance\New Schemes\20","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #0",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #1",0x00010001,0x00404000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #2",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #3",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #4",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #10",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #11",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #12",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #13",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #15",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #16",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #17",0x00010001,0x02808080 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #19",0x00010001,0x00f0fbff -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #20",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #22",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #26",0x00010001,0x02808000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #27",0x00010001,0x00d8cc00 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #28",0x00010001,0x00b8c898 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #29",0x00010001,0x00808000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #30",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","LegacyName",0x00020000,"Teal" -; Wheat -HKCU,"Control Panel\Appearance\New Schemes\21","DisplayName",0x00020000,"@themeui.dll,-851" -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Flat Menus",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #0",0x00010001,0x02d0eeee -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #1",0x00010001,0x021d4000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #2",0x00010001,0x00008080 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #3",0x00010001,0x0041bcbc -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #4",0x00010001,0x00a0dede -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #5",0x00010001,0x02ffffff -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #6",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #7",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #10",0x00010001,0x02a0dede -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #11",0x00010001,0x02a0dede -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #12",0x00010001,0x0241bcbc -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #13",0x00010001,0x00008080 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #15",0x00010001,0x02a0dede -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #16",0x00010001,0x0241bcbc -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #17",0x00010001,0x0241bcbc -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #18",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #19",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #20",0x00010001,0x02d0eeee -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #21",0x00010001,0x02000000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #22",0x00010001,0x02a0dede -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #24",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #25",0x00010001,0x02c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #26",0x00010001,0x02008080 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #27",0x00010001,0x0048b0c8 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #28",0x00010001,0x0080b8b8 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #29",0x00010001,0x00008080 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #30",0x00010001,0x00a0dede -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","LegacyName",0x00020000,"Wheat" - -HKCU,"Environment",,0x00000012 -HKCU,"Environment","TEMP",0x00020000,"%USERPROFILE%\Local Settings\Temp" -HKCU,"Environment","TMP",0x00020000,"%USERPROFILE%\Local Settings\Temp" - -HKCU,"SOFTWARE",,0x00000012 -HKCU,"SOFTWARE\Microsoft",,0x00000012 - -; DirectX version report as DirectX 9.0 -HKCU,"SOFTWARE\Microsoft\DirectX","Debug",0x00010001,0x00000000 -HKCU,"SOFTWARE\Microsoft\DirectX","InstalledVersion",0x00000001,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00 -HKCU,"SOFTWARE\Microsoft\DirectX","InstallMDX",0x00010001,0x00000001 -HKCU,"SOFTWARE\Microsoft\DirectX","RC",0x00010001,0x00000000 -HKCU,"SOFTWARE\Microsoft\DirectX","Version",0x00000000,"5.03.2600.2180" - -; Open With settings -HKCU,"SOFTWARE\Classes",,0x00000012 -HKCU,"SOFTWARE\Classes\Applications",,0x00000012 - -; Current user shell folder settings -HKCU,"SOFTWARE\Microsoft\Windows",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu","{208D2C60-3AEA-1069-A2D7-08002B30309D}",0x00010001,0x00000000 -HKCU,"Software\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}",,0x00000012 - -; default shell -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\explorer.exe" - -HKCU,"SOFTWARE\Microsoft\Windows NT",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion",,0x00000012 - -; Application compatibility settings for Windows 95 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","MajorVersion",0x00010001,0x00000004 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","MinorVersion",0x00010001,0x0000000A -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","BuildNumber",0x00010001,0x000003B6 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","PlatformId",0x00010001,0x00000001 -; Application compatibility settings for Windows 98/ME -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","MajorVersion",0x00010001,0x00000004 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","MinorVersion",0x00010001,0x00000000 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","BuildNumber",0x00010001,0x000008AE -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","PlatformId",0x00010001,0x00000001 -; Application compatibility settings for Windows NT 4 Service Pack 5 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","MajorVersion",0x00010001,0x00000004 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","MinorVersion",0x00010001,0x00000000 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","BuildNumber",0x00010001,0x00000565 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","PlatformId",0x00010001,0x00000002 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","SPMajorVersion",0x00010001,0x00000005 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","SPMinorVersion",0x00010001,0x00000000 -; Application compatibility settings for Windows 2000 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","MajorVersion",0x00010001,0x00000005 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","MinorVersion",0x00010001,0x00000000 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","BuildNumber",0x00010001,0x00000893 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","PlatformId",0x00010001,0x00000002 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","SPMajorVersion",0x00010001,0x00000003 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","SPMinorVersion",0x00010001,0x00000000 -; Application compatibility settings for Windows XP -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","MajorVersion",0x00010001,0x00000005 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","MinorVersion",0x00010001,0x00000001 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","BuildNumber",0x00010001,0x00000A28 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","PlatformId",0x00010001,0x00000002 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","SPMajorVersion",0x00010001,0x00000001 -HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","SPMinorVersion",0x00010001,0x00000000 - -; DEBUG: Windows Messages SPY configuration -HKCU,"SOFTWARE\ReactOS\Debug","SpyInclude",0x00020000,"INCLUDEALL" -;HKCU,"SOFTWARE\ReactOS\Debug","SpyExclude",0x00020000,"" -;HKCU,"SOFTWARE\ReactOS\Debug","SpyExcludeDWP",0x00020000,"" - -; GUI Setup - -HKCU, "Control Panel\Desktop\WindowMetrics","CaptionFont",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\ -00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU, "Control Panel\Desktop\WindowMetrics","IconFont",0x00000001,f5,ff,ff,ff,00,00,00,00,\ -00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,\ -61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU, "Control Panel\Desktop\WindowMetrics","MenuFont",0x00000001,f5,ff,ff,ff,00,00,00,00,\ -00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,\ -61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU, "Control Panel\Desktop\WindowMetrics","MessageFont",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\ -00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU, "Control Panel\Desktop\WindowMetrics","SmCaptionFont",0x00000001,f5,ff,ff,ff,00,00,\ -00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,\ -6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU, "Control Panel\Desktop\WindowMetrics","StatusFont",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\ -00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 - -; Accessibility -HKCU,"Control Panel\Accessibility",,0x00000012 -HKCU,"Control Panel\Accessibility\Keyboard Preference",,0x00000012 -HKCU,"Control Panel\Accessibility\Keyboard Preference","On",2,"0" - -; Internet Explorer - -HKCU,Software\Wine\MSHTML,"GeckoUrl",,"http://source.winehq.org/winegecko.php" -HKCU,Software\Wine\MSHTML,"GeckoCabDir",0x00020000,"%SystemRoot%\" - -; Sound Schemes -HKCU,"AppEvents",,0x00000012 -HKCU,"AppEvents\Schemes","",0x00000000,".Default" -HKCU,"AppEvents\Schemes\Apps",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default","",0x00000000,"ReactOS" -HKCU,"AppEvents\Schemes\Apps\.Default","DispFileName",0x00000000,"@mmsys.cpl,-5856" -HKCU,"AppEvents\Schemes\Apps\.Default\.Default",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\.Default\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\.Default\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\AppGPFault",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\AppGPFault\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\AppGPFault\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\Close",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\Close\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\Close\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\CriticalBatteryAlarm",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\CriticalBatteryAlarm\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\CriticalBatteryAlarm\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceConnect",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceConnect\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceConnect\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceDisconnect",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceDisconnect\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceDisconnect\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceFail",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceFail\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\DeviceFail\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\LowBatteryAlarm",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\LowBatteryAlarm\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\LowBatteryAlarm\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\MailBeep",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\MailBeep\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\MailBeep\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\Maximize",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\Maximize\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\Maximize\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\MenuCommand",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\MenuCommand\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\MenuCommand\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\MenuPopup",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\MenuPopup\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\MenuPopup\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\Minimize",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\Minimize\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\Minimize\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\Open",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\Open\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\Open\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\PrintComplete",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\PrintComplete\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\PrintComplete\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\RestoreDown",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\RestoreDown\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\RestoreDown\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\RestoreUp",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\RestoreUp\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\RestoreUp\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemAsterisk",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\SystemAsterisk\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemAsterisk\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemExclamation",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\SystemExclamation\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemExclamation\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemExit",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\SystemExit\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemExit\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemHand",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\SystemHand\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemHand\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemNotification",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\SystemNotification\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemNotification\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart\.Current","",0x00020000,"%SystemRoot%\media\ReactOS_LogOn.wav" -HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart\.Default","",0x00020000,"%SystemRoot%\media\ReactOS_LogOn.wav" -HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\Explorer","",0x00000002,"ReactOS Explorer" -HKCU,"AppEvents\Schemes\Apps\Explorer","DispFileName",0x00000000,"@mmsys.cpl,-5854" -HKCU,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\Explorer\Navigating",,0x00000012 -HKCU,"AppEvents\Schemes\Apps\Explorer\Navigating\.Current","",0x00020000,"" -HKCU,"AppEvents\Schemes\Apps\Explorer\Navigating\.Default","",0x00020000,"" -HKCU,"AppEvents\Schemes\Names",,0x00000012 -HKCU,"AppEvents\Schemes\Names\.Default","",0x00000002,"ReactOS Default" -HKCU,"AppEvents\Schemes\Names\.None","",0x00000002,"No sounds" - -HKCU,"AppEvents\EventLabels",,0x00000012 -HKCU,"AppEvents\EventLabels\.Default","",0x00000000,"Default Beep" -HKCU,"AppEvents\EventLabels\.Default","DispFileName",0x00000000,"@mmsys.cpl,-5824" -HKCU,"AppEvents\EventLabels\AppGPFault","",0x00000000,"Program error" -HKCU,"AppEvents\EventLabels\AppGPFault","DispFileName",0x00000000,"@mmsys.cpl,-5825" -HKCU,"AppEvents\EventLabels\Close","",0x00000000,"Close program" -HKCU,"AppEvents\EventLabels\Close","DispFileName",0x00000000,"@mmsys.cpl,-5826" -HKCU,"AppEvents\EventLabels\CriticalBatteryAlarm","",0x00000000,"Critical Battery Alarm" -HKCU,"AppEvents\EventLabels\CriticalBatteryAlarm","DispFileName",0x00000000,"@mmsys.cpl,-5827" -HKCU,"AppEvents\EventLabels\DeviceConnect","",0x00000000,"Device Connect" -HKCU,"AppEvents\EventLabels\DeviceConnect","DispFileName",0x00000000,"@mmsys.cpl,-5828" -HKCU,"AppEvents\EventLabels\DeviceDisconnect","",0x00000000,"Device Disconnect" -HKCU,"AppEvents\EventLabels\DeviceDisconnect","DispFileName",0x00000000,"@mmsys.cpl,-5829" -HKCU,"AppEvents\EventLabels\DeviceFail","",0x00000000,"Device Failed to Connect" -HKCU,"AppEvents\EventLabels\DeviceFail","DispFileName",0x00000000,"@mmsys.cpl,-5830" -HKCU,"AppEvents\EventLabels\EmptyRecycleBin","",0x00000000,"Empty Recycle Bin" -HKCU,"AppEvents\EventLabels\EmptyRecycleBin","DispFileName",0x00000000,"@mmsys.cpl,-5831" -HKCU,"AppEvents\EventLabels\LowBatteryAlarm","",0x00000000,"Low Battery Alarm" -HKCU,"AppEvents\EventLabels\LowBatteryAlarm","DispFileName",0x00000000,"@mmsys.cpl,-5832" -HKCU,"AppEvents\EventLabels\Maximize","",0x00000000,"Maximize" -HKCU,"AppEvents\EventLabels\Maximize","DispFileName",0x00000000,"@mmsys.cpl,-5833" -HKCU,"AppEvents\EventLabels\MenuCommand","",0x00000000,"Menu command" -HKCU,"AppEvents\EventLabels\MenuCommand","DispFileName",0x00000000,"@mmsys.cpl,-5834" -HKCU,"AppEvents\EventLabels\MenuPopup","",0x00000000,"Menu popup" -HKCU,"AppEvents\EventLabels\MenuPopup","DispFileName",0x00000000,"@mmsys.cpl,-5835" -HKCU,"AppEvents\EventLabels\Minimize","",0x00000000,"Minimize" -HKCU,"AppEvents\EventLabels\Minimize","DispFileName",0x00000000,"@mmsys.cpl,-5836" -HKCU,"AppEvents\EventLabels\MailBeep","",0x00000000,"New Mail Notification" -HKCU,"AppEvents\EventLabels\MailBeep","DispFileName",0x00000000,"@mmsys.cpl,-5837" -HKCU,"AppEvents\EventLabels\Navigating","",0x00000000,"Start Navigation" -HKCU,"AppEvents\EventLabels\Navigating","DispFileName",0x00000000,"@mmsys.cpl,-5838" -HKCU,"AppEvents\EventLabels\Open","",0x00000000,"Open program" -HKCU,"AppEvents\EventLabels\Open","DispFileName",0x00000000,"@mmsys.cpl,-5839" -HKCU,"AppEvents\EventLabels\PrintComplete","",0x00000000,"Print Complete" -HKCU,"AppEvents\EventLabels\PrintComplete","DispFileName",0x00000000,"@mmsys.cpl,-5840" -HKCU,"AppEvents\EventLabels\RestoreDown","",0x00000000,"Restore Down" -HKCU,"AppEvents\EventLabels\RestoreDown","DispFileName",0x00000000,"@mmsys.cpl,-5841" -HKCU,"AppEvents\EventLabels\RestoreUp","",0x00000000,"Restore Up" -HKCU,"AppEvents\EventLabels\RestoreUp","DispFileName",0x00000000,"@mmsys.cpl,-5842" -HKCU,"AppEvents\EventLabels\SystemAsterisk","",0x00000000,"Asterisk" -HKCU,"AppEvents\EventLabels\SystemAsterisk","DispFileName",0x00000000,"@mmsys.cpl,-5843" -HKCU,"AppEvents\EventLabels\SystemExclamation","",0x00000000,"Exclamation" -HKCU,"AppEvents\EventLabels\SystemExclamation","DispFileName",0x00000000,"@mmsys.cpl,-5845" -HKCU,"AppEvents\EventLabels\SystemExit","",0x00000000,"Exit ReactOS" -HKCU,"AppEvents\EventLabels\SystemExit","DispFileName",0x00000000,"@mmsys.cpl,-5846" -HKCU,"AppEvents\EventLabels\SystemHand","",0x00000000,"Critical Stop" -HKCU,"AppEvents\EventLabels\SystemHand","DispFileName",0x00000000,"@mmsys.cpl,-5847" -HKCU,"AppEvents\EventLabels\SystemNotification","",0x00000000,"System Notification" -HKCU,"AppEvents\EventLabels\SystemNotification","DispFileName",0x00000000,"@mmsys.cpl,-5848" -HKCU,"AppEvents\EventLabels\SystemQuestion","",0x00000000,"Question" -HKCU,"AppEvents\EventLabels\SystemQuestion","DispFileName",0x00000000,"@mmsys.cpl,-5849" -HKCU,"AppEvents\EventLabels\SystemStart","",0x00000000,"Start ReactOS" -HKCU,"AppEvents\EventLabels\SystemStart","DispFileName",0x00000000,"@mmsys.cpl,-5850" -HKCU,"AppEvents\EventLabels\WindowsLogoff","",0x00000000,"ReactOS Logoff" -HKCU,"AppEvents\EventLabels\WindowsLogoff","DispFileName",0x00000000,"@mmsys.cpl,-5852" -HKCU,"AppEvents\EventLabels\WindowsLogon","",0x00000000,"ReactOS Logon" -HKCU,"AppEvents\EventLabels\WindowsLogon","DispFileName",0x00000000,"@mmsys.cpl,-5853" - -; EOF diff --git a/boot/bootdata/hiveinst_arm.inf b/boot/bootdata/hiveinst.inf similarity index 100% rename from boot/bootdata/hiveinst_arm.inf rename to boot/bootdata/hiveinst.inf diff --git a/boot/bootdata/hiveinst_i386.inf b/boot/bootdata/hiveinst_i386.inf deleted file mode 100644 index dd7fcdf4268..00000000000 --- a/boot/bootdata/hiveinst_i386.inf +++ /dev/null @@ -1,19 +0,0 @@ -[Version] -Signature = "$ReactOS$" - -[AddReg] -; Enable _one_ driver per section by removing the leading semicolon. - -; -; Display driver section -; - -; VBE SVGA driver -HKLM,"SYSTEM\CurrentControlSet\Services\VBE","Start",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","DefaultSettings.VRefresh",0x00010001,1 -HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","DefaultSettings.BitsPerPel",0x00010001,16 -HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","DefaultSettings.XResolution",0x00010001,800 -HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","DefaultSettings.YResolution",0x00010001,600 - -; VGA miniport driver -HKLM,"SYSTEM\CurrentControlSet\Services\Vga","Start",0x00010001,0x00000001 diff --git a/boot/bootdata/hivesft_i386.inf b/boot/bootdata/hivesft.inf similarity index 98% rename from boot/bootdata/hivesft_i386.inf rename to boot/bootdata/hivesft.inf index dd160a3936d..80fb969952b 100644 --- a/boot/bootdata/hivesft_i386.inf +++ b/boot/bootdata/hivesft.inf @@ -121,9 +121,9 @@ HKLM,"SOFTWARE\Microsoft\Command Processor","AutoRun",0x00020000,"" HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",,0x00000012 ; Version Information -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CurrentVersion",0x00020000,"5.2" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CSDVersion",0x00020000,"Service Pack 2" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CurrentBuildNumber",0x00020000,"3790" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CurrentVersion",0x00000000,"5.2" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CSDVersion",0x00000000,"Service Pack 2" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CurrentBuildNumber",0x00000000,"3790" HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","InstallDate",0x00010003,0 HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","ProductName",2,"ReactOS" HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","RegDone",0x00000002,"" @@ -231,9 +231,8 @@ HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList",,0x00000012 HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList","ProfilesDirectory",0x00020000,"%SystemDrive%\Documents and Settings" ; Font substitutes -; SysFontSubstitutes are also returned by EnumFontFamilies, FontSubstitutes aren't HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes",,0x00000012 ; Time zone settings HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones",,0x00000012 diff --git a/boot/bootdata/hivesft_amd64.inf b/boot/bootdata/hivesft_amd64.inf deleted file mode 100644 index a4804a52bc3..00000000000 --- a/boot/bootdata/hivesft_amd64.inf +++ /dev/null @@ -1,1295 +0,0 @@ -[Version] -Signature="$ReactOS$" - -[AddReg] - -; Internet Explorer -HKLM,"SOFTWARE\Microsoft\Internet Explorer","Build",,"62800" -HKLM,"SOFTWARE\Microsoft\Internet Explorer","Version",,"6.0.2800.3959" -HKLM,"SOFTWARE\Microsoft\Internet Explorer","W2kVersion",,"6.0.2800.3959" - -; DirectX -HKLM,"SOFTWARE\Microsoft\DirectX","Version",0x00000000,"4.09.00.0904" - -; RPC -HKLM,"SOFTWARE\Microsoft\Rpc",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Rpc\NetBios",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Rpc","DCOM Protocols",0x00010002,"ncacn_ip_tcp" -HKLM,"SOFTWARE\Microsoft\Rpc\ClientProtocols","ncacn_np",0x00000000,"rpcrt4.dll" -HKLM,"SOFTWARE\Microsoft\Rpc\NameService","DefaultSyntax",2,"3" -HKLM,"SOFTWARE\Microsoft\Rpc\NameService","Endpoint",2,"\pipe\locator" -HKLM,"SOFTWARE\Microsoft\Rpc\NameService","NetworkAddress",2,"\\." -HKLM,"SOFTWARE\Microsoft\Rpc\NameService","Protocol",2,"ncacn_np" -HKLM,"SOFTWARE\Microsoft\Rpc\NameService","ServerNetworkAddress",2,"\\." -HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","1",2,"secur32.dll" -HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","10",2,"secur32.dll" -HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","14",2,"schannel.dll" -HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","16",2,"secur32.dll" -HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","18",2,"secur32.dll" -HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","68",2,"netlogon.dll" -HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","9",2,"secur32.dll" - -; .NET -HKLM,"SOFTWARE\Microsoft\.NETFramework\","InstallRoot",0x00020000,"%SystemRoot%\Microsoft .NET\Framework\" - -HKLM,"SOFTWARE\Microsoft\Secure",,0x00000012 - -; WBem -HKLM,"SOFTWARE\Microsoft\wbem\ess",,0x00000012 -HKLM,"SOFTWARE\Microsoft\wbem\Transports",,0x00000012 -HKLM,"SOFTWARE\Microsoft\wbem\Scripting",,0x00000012 -HKLM,"SOFTWARE\Microsoft\wbem","Installation Directory",0x00020000,"%SystemRoot%\system32\wbem" -HKLM,"SOFTWARE\Microsoft\wbem","MOF Self-Install Directory",0x00020000,"%SystemRoot%\system32\wbem\mof" - -; HTML Help -HKLM,"SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9}",,2,"HTML Help" -HKLM,"SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9}","ComponentID",2,"HTMLHelp" -HKLM,"SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9}","IsInstalled",2,1 -HKLM,"SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9}","Locale",2,"*" -HKLM,"SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9}","Version",2,"4,74,9273,0" - -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion","DevicePath",0x00020002,"%SystemRoot%\inf" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion","MediaPathUnexpanded",0x00020000,"%SystemRoot%\Media" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Applets",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Cpls",,0x00000012 -; Cursors Schemes -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Cursors\Schemes","ReactOS Default",0x00020000,""",,,,,,,,,,,,,""" - -; Common shell folders -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\DefragPath",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\DefragPath","",0x00020000,"%systemroot%\system32\dfrg.msc %c:" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\BackupPath",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\BackupPath","",0x00020000,"%SystemRoot%\system32\ntbackup.exe" - -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Setup",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Setup","DriverCachePath",0x00020002,"%SystemRoot%\Driver Cache" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions",,0x00000012 - -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu","{208D2C60-3AEA-1069-A2D7-08002B30309D}",0x00010001,0x00000000 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Bitbucket",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Bitbucket\Volume",,0x00000012 - -; CMD Settings -HKLM,"SOFTWARE\Microsoft\Command Processor","AutoRun",0x00020000,"" - -; Uninstall Application list -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",,0x00000012 - -; Version Information -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CurrentVersion",0x00020000,"5.2" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CSDVersion",0x00020000,"Service Pack 2" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CurrentBuildNumber",0x00020000,"3790" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","InstallDate",0x00010003,0 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","ProductName",2,"ReactOS" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","RegDone",0x00000002,"" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","RegisteredOrganization",2,"" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","RegisteredOwner",2,"" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","SoftwareType",2,"System" - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Compatibility",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Compatibility32",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network\Shared Parameters",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network\SMAddOns",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network\UMAddOns",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network\World Full Access Shared Parameters",,0x00000012 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\Nls","00000409",2,"" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont","0",2,"Lucida Console" - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\drivers.desc",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontMapper",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\IME Compatibility",,0x00000012 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\IMM","LoadIMM",0x00010003,0 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\IMM","LoadCTFIME",0x00010003,0 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","COM1:",2,"9600,n,8,1" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","COM2:",2,"9600,n,8,1" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","COM3:",2,"9600,n,8,1" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","COM4:",2,"9600,n,8,1" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","FILE:",2,"" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","LPT1:",2,"" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","LPT2:",2,"" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","LPT3:",2,"" - -; Image File Execution Options (NtGlobalFlag with FLG_SHOW_LDR_SNAPS set for loadlib.exe) -HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\loadlib.exe","GlobalFlag",0x00010001,0x00000002 -;HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\loaddll.exe","GlobalFlag",0x00010001,0x00000002 -;HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\soffice.exe","GlobalFlag",0x00010001,0x00000002 -;HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\tlstest.exe","GlobalFlag",0x00010001,0x00000002 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","midimapper",0x00000000,"midimap.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","wavemapper",0x00000000,"msacm32.drv" -;HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","wave",0x00000000,"sndblst.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","midi",0x00000000,"beepmidi.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.msadpcm",0x00000000,"msadp32.acm" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.msg711",0x00000000,"msg711.acm" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.msgsm610",0x00000000,"msgsm32.acm" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.imaadpcm",0x00000000,"imaadp32.acm" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.winemp3",0x00000000,"winemp3.acm" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","vidc.cvid",0x00000000,"iccvid.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","vidc.mrle",0x00000000,"msrle32.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","vidc.msvc",0x00000000,"msvidc32.dll" - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32","AVIVideo",0x00000002,"mciavi32.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32","CDAudio",0x00000002,"mcicda.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32","Sequencer",0x00000002,"mciseq.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32","WaveAudio",0x00000002,"mciwave.dll" - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","aifc",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","asf",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","asx",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","au",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","avi",0x00000002,"AVIVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","cda",0x00000002,"CDAudio" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","lsf",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","lsx",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","m1v",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","m3u",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mid",0x00000002,"Sequencer" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","midi",0x00000002,"Sequencer" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mp2",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mp2v",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mp3",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpa",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpe",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpeg",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpg",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpv",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpv2",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","rmi",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","rmi",0x00000002,"Sequencer" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","snd",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wav",0x00000002,"WaveAudio" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wax",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wm",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wma",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wmp",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wmv",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wmx",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wvx",0x00000002,"MPEGVideo" - -; Mesa OpenGL Driver -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers","DefaultDriver",0x00000000,"Mesa" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\Mesa","Version",0x00010001,0x00000002 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\Mesa","Dll",0x00000000,"mesa32" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\Mesa","DriverVersion",0x00010001,0x00000001 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\Mesa","Flags",0x00010001,0x00000001 - -; User Profile List -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList","ProfilesDirectory",0x00020000,"%SystemDrive%\Documents and Settings" - -; Font substitutes -; SysFontSubstitutes are also returned by EnumFontFamilies, FontSubstitutes aren't -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes",,0x00000012 - -; Time zone settings -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones","IndexMapping",0x00010000,\ - "409", "4",\ - "1009", "4",\ - "2809", "20",\ - "80a", "30",\ - "440a", "30",\ - "480a", "30",\ - "4c0a", "30",\ - "140a", "30",\ - "100a", "33",\ - "c0c", "35",\ - "2009", "35",\ - "240a", "45",\ - "280a", "45",\ - "300a", "45",\ - "180a", "45",\ - "500a", "50",\ - "2409", "50",\ - "1c0a", "50",\ - "2c09", "50",\ - "200a", "55",\ - "3c0a", "55",\ - "400a", "55",\ - "340a", "56",\ - "416", "65",\ - "2c0a", "70",\ - "380a", "70",\ - "438", "85",\ - "48f", "85",\ - "809", "85",\ - "816", "85",\ - "1809", "85",\ - "40f", "90",\ - "1801", "90",\ - "41c", "95",\ - "405", "95",\ - "40e", "95",\ - "424", "95",\ - "41b", "95",\ - "81a", "95",\ - "c1a", "95",\ - "415", "100",\ - "1401", "100",\ - "41a", "100",\ - "42f", "100",\ - "140c", "100",\ - "180c", "100",\ - "1c01", "100",\ - "403", "105",\ - "406", "105",\ - "813", "105",\ - "827", "105",\ - "40a", "105",\ - "40c", "105",\ - "42d", "105",\ - "80c", "105",\ - "c0a", "105",\ - "490", "105",\ - "407", "110",\ - "410", "110",\ - "413", "110",\ - "414", "110",\ - "417", "110",\ - "807", "110",\ - "810", "110",\ - "814", "110",\ - "1007", "110",\ - "1407", "110",\ - "41d", "110",\ - "c07", "110",\ - "100c", "110",\ - "1001", "115",\ - "2801", "115",\ - "3001", "115",\ - "43e", "115",\ - "2c01", "115",\ - "423", "115",\ - "c01", "120",\ - "425", "125",\ - "426", "125",\ - "40b", "125",\ - "81d", "125",\ - "422", "125",\ - "402", "125",\ - "427", "125",\ - "408", "130",\ - "41f", "130",\ - "418", "130",\ - "40d", "135",\ - "436", "140",\ - "3009", "140",\ - "1c09", "140",\ - "419", "145",\ - "401", "150",\ - "4001", "150",\ - "3c01", "150",\ - "3401", "150",\ - "441", "155",\ - "801", "158",\ - "2401", "158",\ - "429", "160",\ - "2001", "165",\ - "3801", "165",\ - "42b", "170",\ - "420", "185",\ - "439", "190",\ - "445", "190",\ - "421", "205",\ - "41e", "205",\ - "42a", "205",\ - "804", "210",\ - "c04", "210",\ - "1404", "210",\ - "83e", "210",\ - "1004", "215",\ - "404", "220",\ - "3409", "220",\ - "412", "230",\ - "812", "230",\ - "411", "235",\ - "c09", "255",\ - "1409", "290" - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Dateline Standard Time","Display",0x00000000,"(GMT-12:00) International Date Line West" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Dateline Standard Time","Dlt",0x00000000,"Dateline Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Dateline Standard Time","Std",0x00000000,"Dateline Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Dateline Standard Time","Index",0x00010001,0 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Dateline Standard Time","TZI",0x00000001,\ -0xd0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Samoa Standard Time","Display",0x00000000,"(GMT-11:00) Midway Island, Samoa" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Samoa Standard Time","Dlt",0x00000000,"Samoa Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Samoa Standard Time","Std",0x00000000,"Samoa Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Samoa Standard Time","Index",0x00010001,1 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Samoa Standard Time","TZI",0x00000001,\ -0x94,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Hawaiian Standard Time","Display",0x00000000,"(GMT-10:00) Hawaii" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Hawaiian Standard Time","Dlt",0x00000000,"Hawaiian Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Hawaiian Standard Time","Std",0x00000000,"Hawaiian Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Hawaiian Standard Time","Index",0x00010001,2 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Hawaiian Standard Time","TZI",0x00000001,\ -0x58,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Alaskan Standard Time","Display",0x00000000,"(GMT-09:00) Alaska" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Alaskan Standard Time","Dlt",0x00000000,"Alaskan Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Alaskan Standard Time","Std",0x00000000,"Alaskan Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Alaskan Standard Time","Index",0x00010001,3 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Alaskan Standard Time","TZI",0x00000001,\ -0x1c,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time","Display",0x00000000,"(GMT-08:00) Pacific Time (US & Canada)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time","Dlt",0x00000000,"Pacific Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time","Std",0x00000000,"Pacific Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time","Index",0x00010001,4 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time","TZI",0x00000001,\ -0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time","Display",0x00000000,"(GMT-07:00) Mountain Time (US & Canada)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time","Dlt",0x00000000,"Mountain Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time","Std",0x00000000,"Mountain Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time","Index",0x00010001,10 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time","TZI",0x00000001,\ -0xa4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time (Mexico)","Display",0x00000000,"(GMT-07:00) Chihuahua, La Paz, Mazatlan" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time (Mexico)","Dlt",0x00000000,"Mountain Daylight Time (Mexico)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time (Mexico)","Std",0x00000000,"Mountain Standard Time (Mexico)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time (Mexico)","Index",0x00010001,13 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time (Mexico)","TZI",0x00000001,\ -0xa4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Mountain Standard Time","Display",0x00000000,"(GMT-07:00) Arizona" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Mountain Standard Time","Dlt",0x00000000,"US Mountain Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Mountain Standard Time","Std",0x00000000,"US Mountain Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Mountain Standard Time","Index",0x00010001,15 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Mountain Standard Time","TZI",0x00000001,\ -0xa4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time","Display",0x00000000,"(GMT-06:00) Central Time (US & Canada)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time","Dlt",0x00000000,"Central Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time","Std",0x00000000,"Central Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time","Index",0x00010001,20 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time","TZI",0x00000001,\ -0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Canada Central Standard Time","Display",0x00000000,"(GMT-06:00) Saskatchewan" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Canada Central Standard Time","Dlt",0x00000000,"Canada Central Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Canada Central Standard Time","Std",0x00000000,"Canada Central Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Canada Central Standard Time","Index",0x00010001,25 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Canada Central Standard Time","TZI",0x00000001,\ -0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time (Mexico)","Display",0x00000000,"(GMT-06:00) Guadalajara, Mexico City, Monterrey" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time (Mexico)","Dlt",0x00000000,"Central Daylight Time (Mexico)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time (Mexico)","Std",0x00000000,"Central Standard Time (Mexico)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time (Mexico)","Index",0x00010001,30 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time (Mexico)","TZI",0x00000001,\ -0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central America Standard Time","Display",0x00000000,"(GMT-06:00) Central America" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central America Standard Time","Dlt",0x00000000,"Central America Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central America Standard Time","Std",0x00000000,"Central America Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central America Standard Time","Index",0x00010001,33 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central America Standard Time","TZI",0x00000001,\ -0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Eastern Standard Time","Display",0x00000000,"(GMT-05:00) Eastern Time (US & Canada)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Eastern Standard Time","Dlt",0x00000000,"Eastern Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Eastern Standard Time","Std",0x00000000,"Eastern Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Eastern Standard Time","Index",0x00010001,35 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Eastern Standard Time","TZI",0x00000001,\ -0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Eastern Standard Time","Display",0x00000000,"(GMT-05:00) Indiana (East)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Eastern Standard Time","Dlt",0x00000000,"US Eastern Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Eastern Standard Time","Std",0x00000000,"US Eastern Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Eastern Standard Time","Index",0x00010001,40 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Eastern Standard Time","TZI",0x00000001,\ -0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Pacific Standard Time","Display",0x00000000,"(GMT-05:00) Bogota, Lima, Quito, Rio Branco" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Pacific Standard Time","Dlt",0x00000000,"SA Pacific Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Pacific Standard Time","Std",0x00000000,"SA Pacific Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Pacific Standard Time","Index",0x00010001,45 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Pacific Standard Time","TZI",0x00000001,\ -0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Atlantic Standard Time","Display",0x00000000,"(GMT-04:00) Atlantic Time (Canada)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Atlantic Standard Time","Dlt",0x00000000,"Atlantic Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Atlantic Standard Time","Std",0x00000000,"Atlantic Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Atlantic Standard Time","Index",0x00010001,50 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Atlantic Standard Time","TZI",0x00000001,\ -0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Western Standard Time","Display",0x00000000,"(GMT-04:00) La Paz" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Western Standard Time","Dlt",0x00000000,"SA Western Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Western Standard Time","Std",0x00000000,"SA Western Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Western Standard Time","Index",0x00010001,55 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Western Standard Time","TZI",0x00000001,\ -0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific SA Standard Time","Display",0x00000000,"(GMT-04:00) Santiago" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific SA Standard Time","Dlt",0x00000000,"Pacific SA Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific SA Standard Time","Std",0x00000000,"Pacific SA Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific SA Standard Time","Index",0x00010001,56 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific SA Standard Time","TZI",0x00000001,\ -0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x03,0x00,0x06,0x00,0x02,0x00,0x17,0x00,0x3b,0x00,0x3b,0x00,0xe7,0x03,\ -0x00,0x00,0x0a,0x00,0x06,0x00,0x02,0x00,0x17,0x00,0x3b,0x00,0x3b,0x00,0xe7,0x03 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Newfoundland Standard Time","Display",0x00000000,"(GMT-03:30) Newfoundland" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Newfoundland Standard Time","Dlt",0x00000000,"Newfoundland Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Newfoundland Standard Time","Std",0x00000000,"Newfoundland Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Newfoundland Standard Time","Index",0x00010001,60 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Newfoundland Standard Time","TZI",0x00000001,\ -0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. South America Standard Time","Display",0x00000000,"(GMT-03:00) Brasilia" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. South America Standard Time","Dlt",0x00000000,"E. South America Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. South America Standard Time","Std",0x00000000,"E. South America Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. South America Standard Time","Index",0x00010001,65 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. South America Standard Time","TZI",0x00000001,\ -0xb4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Eastern Standard Time","Display",0x00000000,"(GMT-03:00) Buenos Aires, Georgetown" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Eastern Standard Time","Dlt",0x00000000,"SA Eastern Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Eastern Standard Time","Std",0x00000000,"SA Eastern Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Eastern Standard Time","Index",0x00010001,70 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Eastern Standard Time","TZI",0x00000001,\ -0xb4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenland Standard Time","Display",0x00000000,"(GMT-03:00) Greenland" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenland Standard Time","Dlt",0x00000000,"Greenland Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenland Standard Time","Std",0x00000000,"Greenland Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenland Standard Time","Index",0x00010001,73 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenland Standard Time","TZI",0x00000001,\ -0xb4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mid-Atlantic Standard Time","Display",0x00000000,"(GMT-02:00) Mid-Atlantic" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mid-Atlantic Standard Time","Dlt",0x00000000,"Mid-Atlantic Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mid-Atlantic Standard Time","Std",0x00000000,"Mid-Atlantic Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mid-Atlantic Standard Time","Index",0x00010001,75 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mid-Atlantic Standard Time","TZI",0x00000001,\ -0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x09,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Azores Standard Time","Display",0x00000000,"(GMT-01:00) Azores" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Azores Standard Time","Dlt",0x00000000,"Azores Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Azores Standard Time","Std",0x00000000,"Azores Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Azores Standard Time","Index",0x00010001,80 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Azores Standard Time","TZI",0x00000001,\ -0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cape Verde Standard Time","Display",0x00000000,"(GMT-01:00) Cape Verde Is." -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cape Verde Standard Time","Dlt",0x00000000,"Cape Verde Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cape Verde Standard Time","Std",0x00000000,"Cape Verde Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cape Verde Standard Time","Index",0x00010001,83 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cape Verde Standard Time","TZI",0x00000001,\ -0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GMT Standard Time","Display",0x00000000,"(GMT) Greenwich Mean Time: Dublin, Edinburgh, Lisbon, London" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GMT Standard Time","Dlt",0x00000000,"GMT Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GMT Standard Time","Std",0x00000000,"GMT Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GMT Standard Time","Index",0x00010001,85 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GMT Standard Time","TZI",0x00000001,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenwich Standard Time","Display",0x00000000,"(GMT) Casablanca, Monrovia, Reykjavik" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenwich Standard Time","Dlt",0x00000000,"Greenwich Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenwich Standard Time","Std",0x00000000,"Greenwich Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenwich Standard Time","Index",0x00010001,90 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenwich Standard Time","TZI",0x00000001,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time","Display",0x00000000,"(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time","Dlt",0x00000000,"Central Europe Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time","Std",0x00000000,"Central Europe Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time","Index",0x00010001,95 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time","TZI",0x00000001,\ -0xc4,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time","Display",0x00000000,"(GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time","Dlt",0x00000000,"Central European Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time","Std",0x00000000,"Central European Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time","Index",0x00010001,100 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time","TZI",0x00000001,\ -0xc4,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Romance Standard Time","Display",0x00000000,"(GMT+01:00) Brussels, Copenhagen, Madrid, Paris" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Romance Standard Time","Dlt",0x00000000,"Romance Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Romance Standard Time","Std",0x00000000,"Romance Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Romance Standard Time","Index",0x00010001,105 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Romance Standard Time","TZI",0x00000001,\ -0xc4,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Europe Standard Time","Display",0x00000000,"(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Europe Standard Time","Dlt",0x00000000,"W. Europe Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Europe Standard Time","Std",0x00000000,"W. Europe Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Europe Standard Time","Index",0x00010001,110 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Europe Standard Time","TZI",0x00000001,\ -0xc4,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Europe Standard Time","Display",0x00000000,"(GMT+02:00) Minsk" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Europe Standard Time","Dlt",0x00000000,"E. Europe Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Europe Standard Time","Std",0x00000000,"E. Europe Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Europe Standard Time","Index",0x00010001,115 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Europe Standard Time","TZI",0x00000001,\ -0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Egypt Standard Time","Display",0x00000000,"(GMT+02:00) Cairo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Egypt Standard Time","Dlt",0x00000000,"Egypt Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Egypt Standard Time","Std",0x00000000,"Egypt Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Egypt Standard Time","Index",0x00010001,120 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Egypt Standard Time","TZI",0x00000001,\ -0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x09,0x00,0x04,0x00,0x05,0x00,0x17,0x00,0x3b,0x00,0x3b,0x00,0x00,0x00,\ -0x00,0x00,0x04,0x00,0x04,0x00,0x05,0x00,0x17,0x00,0x3b,0x00,0x3b,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\FLE Standard Time","Display",0x00000000,"(GMT+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\FLE Standard Time","Dlt",0x00000000,"FLE Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\FLE Standard Time","Std",0x00000000,"FLE Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\FLE Standard Time","Index",0x00010001,125 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\FLE Standard Time","TZI",0x00000001,\ -0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GTB Standard Time","Display",0x00000000,"(GMT+02:00) Athens, Bucharest, Istanbul" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GTB Standard Time","Dlt",0x00000000,"GTB Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GTB Standard Time","Std",0x00000000,"GTB Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GTB Standard Time","Index",0x00010001,130 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GTB Standard Time","TZI",0x00000001,\ -0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Israel Standard Time","Display",0x00000000,"(GMT+02:00) Jerusalem" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Israel Standard Time","Dlt",0x00000000,"Israel Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Israel Standard Time","Std",0x00000000,"Israel Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Israel Standard Time","Index",0x00010001,135 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Israel Standard Time","TZI",0x00000001,\ -0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x05,0x00,0x05,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x05,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\South Africa Standard Time","Display",0x00000000,"(GMT+02:00) Harare, Pretoria" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\South Africa Standard Time","Dlt",0x00000000,"South Africa Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\South Africa Standard Time","Std",0x00000000,"South Africa Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\South Africa Standard Time","Index",0x00010001,140 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\South Africa Standard Time","TZI",0x00000001,\ -0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Kaliningrad Standard Time","Display",0x00000000,"(GMT+03:00) Kaliningrad" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Kaliningrad Standard Time","Dlt",0x00000000,"Kaliningrad Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Kaliningrad Standard Time","Std",0x00000000,"Kaliningrad Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Kaliningrad Standard Time","Index",0x00010001,143 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Kaliningrad Standard Time","TZI",0x00000001,\ -0x4c,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time","Display",0x00000000,"(GMT+04:00) Moscow, St. Petersburg, Volgograd" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time","Dlt",0x00000000,"Russian Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time","Std",0x00000000,"Russian Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time","Index",0x00010001,145 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time","TZI",0x00000001,\ -0x10,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arab Standard Time","Display",0x00000000,"(GMT+03:00) Kuwait, Riyadh" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arab Standard Time","Dlt",0x00000000,"Arab Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arab Standard Time","Std",0x00000000,"Arab Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arab Standard Time","Index",0x00010001,150 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arab Standard Time","TZI",0x00000001,\ -0x4c,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Africa Standard Time","Display",0x00000000,"(GMT+03:00) Nairobi" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Africa Standard Time","Dlt",0x00000000,"E. Africa Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Africa Standard Time","Std",0x00000000,"E. Africa Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Africa Standard Time","Index",0x00010001,155 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Africa Standard Time","TZI",0x00000001,\ -0x4c,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabic Standard Time","Display",0x00000000,"(GMT+03:00) Baghdad" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabic Standard Time","Dlt",0x00000000,"Arabic Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabic Standard Time","Std",0x00000000,"Arabic Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabic Standard Time","Index",0x00010001,158 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabic Standard Time","TZI",0x00000001,\ -0x4c,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Iran Standard Time","Display",0x00000000,"(GMT+03:30) Tehran" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Iran Standard Time","Dlt",0x00000000,"Iran Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Iran Standard Time","Std",0x00000000,"Iran Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Iran Standard Time","Index",0x00010001,160 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Iran Standard Time","TZI",0x00000001,\ -0x2e,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabian Standard Time","Display",0x00000000,"(GMT+04:00) Abu Dhabi, Muscat" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabian Standard Time","Dlt",0x00000000,"Arabian Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabian Standard Time","Std",0x00000000,"Arabian Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabian Standard Time","Index",0x00010001,165 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabian Standard Time","TZI",0x00000001,\ -0x10,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Caucasus Standard Time","Display",0x00000000,"(GMT+04:00) Caucasus Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Caucasus Standard Time","Dlt",0x00000000,"Caucasus Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Caucasus Standard Time","Std",0x00000000,"Caucasus Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Caucasus Standard Time","Index",0x00010001,170 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Caucasus Standard Time","TZI",0x00000001,\ -0x10,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time","Display",0x00000000,"(GMT+04:30) Kabul" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time","Dlt",0x00000000,"Afghanistan Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time","Std",0x00000000,"Afghanistan Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time","Index",0x00010001,175 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time","TZI",0x00000001,\ -0xf2,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ekaterinburg Standard Time","Display",0x00000000,"(GMT+06:00) Ekaterinburg" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ekaterinburg Standard Time","Dlt",0x00000000,"Ekaterinburg Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ekaterinburg Standard Time","Std",0x00000000,"Ekaterinburg Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ekaterinburg Standard Time","Index",0x00010001,180 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ekaterinburg Standard Time","TZI",0x00000001,\ -0x98,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Asia Standard Time","Display",0x00000000,"(GMT+05:00) Islamabad, Karachi, Tashkent" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Asia Standard Time","Dlt",0x00000000,"West Asia Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Asia Standard Time","Std",0x00000000,"West Asia Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Asia Standard Time","Index",0x00010001,185 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Asia Standard Time","TZI",0x00000001,\ -0xd4,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\India Standard Time","Display",0x00000000,"(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\India Standard Time","Dlt",0x00000000,"India Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\India Standard Time","Std",0x00000000,"India Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\India Standard Time","Index",0x00010001,190 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\India Standard Time","TZI",0x00000001,\ -0xb6,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Nepal Standard Time","Display",0x00000000,"(GMT+05:45) Kathmandu" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Nepal Standard Time","Dlt",0x00000000,"Nepal Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Nepal Standard Time","Std",0x00000000,"Nepal Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Nepal Standard Time","Index",0x00010001,193 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Nepal Standard Time","TZI",0x00000001,\ -0xa7,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Sri Lanka Standard Time","Display",0x00000000,"(GMT+05:30) Sri Jayawardenepura" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Sri Lanka Standard Time","Dlt",0x00000000,"Sri Lanka Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Sri Lanka Standard Time","Std",0x00000000,"Sri Lanka Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Sri Lanka Standard Time","Index",0x00010001,194 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Sri Lanka Standard Time","TZI",0x00000001,\ -0xb6,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Asia Standard Time","Display",0x00000000,"(GMT+06:00) Astana, Dhaka" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Asia Standard Time","Dlt",0x00000000,"Central Asia Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Asia Standard Time","Std",0x00000000,"Central Asia Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Asia Standard Time","Index",0x00010001,195 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Asia Standard Time","TZI",0x00000001,\ -0x98,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\N. Central Asia Standard Time","Display",0x00000000,"(GMT+07:00) Novosibirsk, Omsk" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\N. Central Asia Standard Time","Dlt",0x00000000,"N. Central Asia Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\N. Central Asia Standard Time","Std",0x00000000,"N. Central Asia Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\N. Central Asia Standard Time","Index",0x00010001,201 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\N. Central Asia Standard Time","TZI",0x00000001,\ -0x5c,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Myanmar Standard Time","Display",0x00000000,"(GMT+06:30) Yangon (Rangoon)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Myanmar Standard Time","Dlt",0x00000000,"Myanmar Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Myanmar Standard Time","Std",0x00000000,"Myanmar Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Myanmar Standard Time","Index",0x00010001,203 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Myanmar Standard Time","TZI",0x00000001,\ -0x7a,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SE Asia Standard Time","Display",0x00000000,"(GMT+07:00) Bangkok, Hanoi, Jakarta" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SE Asia Standard Time","Dlt",0x00000000,"SE Asia Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SE Asia Standard Time","Std",0x00000000,"SE Asia Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SE Asia Standard Time","Index",0x00010001,205 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SE Asia Standard Time","TZI",0x00000001,\ -0x5c,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia Standard Time","Display",0x00000000,"(GMT+08:00) Krasnoyarsk" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia Standard Time","Dlt",0x00000000,"North Asia Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia Standard Time","Std",0x00000000,"North Asia Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia Standard Time","Index",0x00010001,207 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia Standard Time","TZI",0x00000001,\ -0x20,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\China Standard Time","Display",0x00000000,"(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\China Standard Time","Dlt",0x00000000,"China Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\China Standard Time","Std",0x00000000,"China Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\China Standard Time","Index",0x00010001,210 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\China Standard Time","TZI",0x00000001,\ -0x20,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Singapore Standard Time","Display",0x00000000,"(GMT+08:00) Kuala Lumpur, Singapore" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Singapore Standard Time","Dlt",0x00000000,"Singapore Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Singapore Standard Time","Std",0x00000000,"Singapore Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Singapore Standard Time","Index",0x00010001,215 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Singapore Standard Time","TZI",0x00000001,\ -0x20,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Taipei Standard Time","Display",0x00000000,"(GMT+08:00) Taipei" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Taipei Standard Time","Dlt",0x00000000,"Taipei Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Taipei Standard Time","Std",0x00000000,"Taipei Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Taipei Standard Time","Index",0x00010001,220 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Taipei Standard Time","TZI",0x00000001,\ -0x20,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Australia Standard Time","Display",0x00000000,"(GMT+08:00) Perth" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Australia Standard Time","Dlt",0x00000000,"W. Australia Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Australia Standard Time","Std",0x00000000,"W. Australia Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Australia Standard Time","Index",0x00010001,225 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Australia Standard Time","TZI",0x00000001,\ -0x20,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ulaanbaatar Standard Time","Display",0x00000000,"(GMT+08:00) Ulaanbaatar" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ulaanbaatar Standard Time","Dlt",0x00000000,"Ulaanbaatar Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ulaanbaatar Standard Time","Std",0x00000000,"Ulaanbaatar Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ulaanbaatar Standard Time","Index",0x00010001,226 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ulaanbaatar Standard Time","TZI",0x00000001,\ -0x20,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia East Standard Time","Display",0x00000000,"(GMT+09:00) Irkutsk" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia East Standard Time","Dlt",0x00000000,"North Asia East Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia East Standard Time","Std",0x00000000,"North Asia East Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia East Standard Time","Index",0x00010001,227 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia East Standard Time","TZI",0x00000001,\ -0xe4,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Korea Standard Time","Display",0x00000000,"(GMT+09:00) Seoul" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Korea Standard Time","Dlt",0x00000000,"Korea Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Korea Standard Time","Std",0x00000000,"Korea Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Korea Standard Time","Index",0x00010001,230 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Korea Standard Time","TZI",0x00000001,\ -0xe4,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tokyo Standard Time","Display",0x00000000,"(GMT+09:00) Osaka, Sapporo, Tokyo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tokyo Standard Time","Dlt",0x00000000,"Tokyo Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tokyo Standard Time","Std",0x00000000,"Tokyo Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tokyo Standard Time","Index",0x00010001,235 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tokyo Standard Time","TZI",0x00000001,\ -0xe4,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Yakutsk Standard Time","Display",0x00000000,"(GMT+10:00) Yakutsk" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Yakutsk Standard Time","Dlt",0x00000000,"Yakutsk Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Yakutsk Standard Time","Std",0x00000000,"Yakutsk Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Yakutsk Standard Time","Index",0x00010001,240 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Yakutsk Standard Time","TZI",0x00000001,\ -0xa8,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Central Standard Time","Display",0x00000002,"(GMT+09:30) Darwin" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Central Standard Time","Dlt",0x00000002,"AUS Central Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Central Standard Time","Std",0x00000002,"AUS Central Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Central Standard Time","Index",0x00010001,245 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Central Standard Time","TZI",0x00000001,\ -0xc6,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cen. Australia Standard Time","Display",0x00000000,"(GMT+09:30) Adelaide" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cen. Australia Standard Time","Dlt",0x00000000,"Cen. Australia Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cen. Australia Standard Time","Std",0x00000000,"Cen. Australia Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cen. Australia Standard Time","Index",0x00010001,250 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cen. Australia Standard Time","TZI",0x00000001,\ -0xc6,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Eastern Standard Time","Display",0x00000000,"(GMT+10:00) Canberra, Melbourne, Sydney" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Eastern Standard Time","Dlt",0x00000000,"AUS Eastern Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Eastern Standard Time","Std",0x00000000,"AUS Eastern Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Eastern Standard Time","Index",0x00010001,255 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Eastern Standard Time","TZI",0x00000001,\ -0xa8,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Australia Standard Time","Display",0x00000000,"(GMT+10:00) Brisbane" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Australia Standard Time","Dlt",0x00000000,"E. Australia Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Australia Standard Time","Std",0x00000000,"E. Australia Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Australia Standard Time","Index",0x00010001,260 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Australia Standard Time","TZI",0x00000001,\ -0xa8,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tasmania Standard Time","Display",0x00000000,"(GMT+10:00) Hobart" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tasmania Standard Time","Dlt",0x00000000,"Tasmania Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tasmania Standard Time","Std",0x00000000,"Tasmania Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tasmania Standard Time","Index",0x00010001,265 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tasmania Standard Time","TZI",0x00000001,\ -0xa8,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Vladivostok Standard Time","Display",0x00000000,"(GMT+11:00) Vladivostok" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Vladivostok Standard Time","Dlt",0x00000000,"Vladivostok Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Vladivostok Standard Time","Std",0x00000000,"Vladivostok Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Vladivostok Standard Time","Index",0x00010001,270 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Vladivostok Standard Time","TZI",0x00000001,\ -0x6c,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Pacific Standard Time","Display",0x00000000,"(GMT+10:00) Guam, Port Moresby" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Pacific Standard Time","Dlt",0x00000000,"West Pacific Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Pacific Standard Time","Std",0x00000000,"West Pacific Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Pacific Standard Time","Index",0x00010001,275 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Pacific Standard Time","TZI",0x00000001,\ -0xa8,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Pacific Standard Time","Display",0x00000000,"(GMT+11:00) Solomon Is., New Caledonia" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Pacific Standard Time","Dlt",0x00000000,"Central Pacific Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Pacific Standard Time","Std",0x00000000,"Central Pacific Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Pacific Standard Time","Index",0x00010001,280 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Pacific Standard Time","TZI",0x00000001,\ -0x6c,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Magadan Standard Time","Display",0x00000000,"(GMT+12:00) Magadan" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Magadan Standard Time","Dlt",0x00000000,"Magadan Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Magadan Standard Time","Std",0x00000000,"Magadan Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Magadan Standard Time","Index",0x00010001,283 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Magadan Standard Time","TZI",0x00000001,\ -0x30,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Fiji Standard Time","Display",0x00000000,"(GMT+12:00) Fiji, Kamchatka, Marshall Is." -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Fiji Standard Time","Dlt",0x00000000,"Fiji Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Fiji Standard Time","Std",0x00000000,"Fiji Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Fiji Standard Time","Index",0x00010001,285 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Fiji Standard Time","TZI",0x00000001,\ -0x30,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\New Zealand Standard Time","Display",0x00000000,"(GMT+12:00) Auckland, Wellington" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\New Zealand Standard Time","Dlt",0x00000000,"New Zealand Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\New Zealand Standard Time","Std",0x00000000,"New Zealand Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\New Zealand Standard Time","Index",0x00010001,290 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\New Zealand Standard Time","TZI",0x00000001,\ -0x30,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x09,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tonga Standard Time","Display",0x00000000,"(GMT+13:00) Nuku'alofa" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tonga Standard Time","Dlt",0x00000000,"Tonga Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tonga Standard Time","Std",0x00000000,"Tonga Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tonga Standard Time","Index",0x00010001,300 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tonga Standard Time","TZI",0x00000001,\ -0xf4,0xfc,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -; Available file systems -HKLM,"SOFTWARE\ReactOS\ReactOS\CurrentVersion\IFS","FAT",0x00000000,"ufat.dll" -HKLM,"SOFTWARE\ReactOS\ReactOS\CurrentVersion\IFS","FAT32",0x00000000,"ufat.dll" -HKLM,"SOFTWARE\ReactOS\ReactOS\CurrentVersion\IFS","FATX",0x00000000,"ufatx.dll" - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","ConsoleShell",0x00020000,"%SystemRoot%\system32\cmd.exe" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\explorer.exe" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","StartServices",0x00010001,0x00000001 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","StartLsass",0x00010001,0x00000001 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","Userinit",0x00020000,"%SystemRoot%\system32\userinit.exe" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","AutoAdminLogon",0x00000000,"1" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","DefaultUserName",0x00000000,"Administrator" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","DefaultPassword",0x00000000,"Secret" - -;Time Zone Servers -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","1",0x00000000,"pool.ntp.org" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","2",0x00000000,"asia.pool.ntp.org" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","3",0x00000000,"europe.pool.ntp.org" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","4",0x00000000,"north-america.pool.ntp.org" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","5",0x00000000,"oceania.pool.ntp.org" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","6",0x00000000,"south-america.pool.ntp.org" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","7",0x00000000,"time.windows.com" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","8",0x00000000,"time.nist.gov" - -; Telephony -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations","DisableCallWaiting",0x00010003,3 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations","DisableCallWaiting0",2,"*70," -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations","DisableCallWaiting1",2,"70#," -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations","DisableCallWaiting2",2,"1170," -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\tapi3",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Terminal Manager",,0x00000012 - -; Country Codes -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List","CountryListVersion",0x00010001,0x00000019 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\1","CountryCode",0x00010001,0x00000001 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\1","Name",0x00000000,"United States of America" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\106","CountryCode",0x00010001,0x0000006A -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\106","Name",0x00000000,"British Virgin Islands" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\107","CountryCode",0x00010001,0x0000006B -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\107","Name",0x00000000,"Canada" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\109","CountryCode",0x00010001,0x0000006D -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\109","Name",0x00000000,"Dominica" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\110","CountryCode",0x00010001,0x0000006E -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\110","Name",0x00000000,"Dominican Republic" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\20","CountryCode",0x00010001,0x00000014 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\20","Name",0x00000000,"Egypt" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\268","CountryCode",0x00010001,0x0000010c -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\268","Name",0x00000000,"Swaziland" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\27","CountryCode",0x00010001,0x0000001b -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\27","Name",0x00000000,"South Africa" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\30","CountryCode",0x00010001,0x0000001e -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\30","Name",0x00000000,"Greece" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\31","CountryCode",0x00010001,0x0000001f -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\31","Name",0x00000000,"Netherlands" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\32","CountryCode",0x00010001,0x00000020 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\32","Name",0x00000000,"Belgium" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\33","CountryCode",0x00010001,0x00000021 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\33","Name",0x00000000,"France" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\34","CountryCode",0x00010001,0x00000022 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\34","Name",0x00000000,"Spain" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\351","CountryCode",0x00010001,0x0000015f -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\351","Name",0x00000000,"Portugal" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\352","CountryCode",0x00010001,0x00000160 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\352","Name",0x00000000,"Luxembourg" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\353","CountryCode",0x00010001,0x00000161 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\353","Name",0x00000000,"Ireland" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\354","CountryCode",0x00010001,0x00000162 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\354","Name",0x00000000,"Iceland" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\355","CountryCode",0x00010001,0x00000163 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\355","Name",0x00000000,"Albania" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\358","CountryCode",0x00010001,0x00000166 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\358","Name",0x00000000,"Finland" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\359","CountryCode",0x00010001,0x00000167 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\359","Name",0x00000000,"Bulgaria" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\36","CountryCode",0x00010001,0x00000024 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\36","Name",0x00000000,"Hungary" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\370","CountryCode",0x00010001,0x00000172 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\370","Name",0x00000000,"Lithuania" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\371","CountryCode",0x00010001,0x00000173 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\371","Name",0x00000000,"Latvia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\372","CountryCode",0x00010001,0x00000174 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\372","Name",0x00000000,"Estonia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\373","CountryCode",0x00010001,0x00000175 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\373","Name",0x00000000,"Moldova" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\374","CountryCode",0x00010001,0x00000176 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\374","Name",0x00000000,"Armenia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\380","CountryCode",0x00010001,0x0000017c -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\380","Name",0x00000000,"Ukraine" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\381","CountryCode",0x00010001,0x0000017d -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\381","Name",0x00000000,"Serbia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\385","CountryCode",0x00010001,0x00000181 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\385","Name",0x00000000,"Croatia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\386","CountryCode",0x00010001,0x00000182 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\386","Name",0x00000000,"Slovenia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\387","CountryCode",0x00010001,0x00000183 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\387","Name",0x00000000,"Bosnia and Herzegovina" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\39","CountryCode",0x00010001,0x00000027 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\39","Name",0x00000000,"Italy" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\40","CountryCode",0x00010001,0x00000028 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\40","Name",0x00000000,"Romania" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\41","CountryCode",0x00010001,0x00000029 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\41","Name",0x00000000,"Switzerland" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\420","CountryCode",0x00010001,0x000001a4 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\420","Name",0x00000000,"Czech Republic" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\421","CountryCode",0x00010001,0x000001a5 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\421","Name",0x00000000,"Slovakia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\423","CountryCode",0x00010001,0x000001a7 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\423","Name",0x00000000,"Liechtenstein" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\43","CountryCode",0x00010001,0x0000002b -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\43","Name",0x00000000,"Austria" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\44","CountryCode",0x00010001,0x0000002c -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\44","Name",0x00000000,"United Kingdom" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\45","CountryCode",0x00010001,0x0000002D -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\45","Name",0x00000000,"Denmark" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\46","CountryCode",0x00010001,0x0000002e -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\46","Name",0x00000000,"Sweden" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\47","CountryCode",0x00010001,0x0000002f -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\47","Name",0x00000000,"Norway" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\48","CountryCode",0x00010001,0x00000030 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\48","Name",0x00000000,"Poland" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\49","CountryCode",0x00010001,0x00000031 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\49","Name",0x00000000,"Germany" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\52","CountryCode",0x00010001,0x00000034 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\52","Name",0x00000000,"Mexico" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\54","CountryCode",0x00010001,0x00000036 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\54","Name",0x00000000,"Argentina" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\55","CountryCode",0x00010001,0x00000037 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\55","Name",0x00000000,"Brazil" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\56","CountryCode",0x00010001,0x00000038 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\56","Name",0x00000000,"Chile" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\57","CountryCode",0x00010001,0x00000039 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\57","Name",0x00000000,"Colombia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\58","CountryCode",0x00010001,0x0000003a -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\58","Name",0x00000000,"Venezuela" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\60","CountryCode",0x00010001,0x0000003c -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\60","Name",0x00000000,"Malaysia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\61","CountryCode",0x00010001,0x0000003d -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\61","Name",0x00000000,"Australia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\62","CountryCode",0x00010001,0x0000003e -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\62","Name",0x00000000,"Indonesia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\63","CountryCode",0x00010001,0x0000003f -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\63","Name",0x00000000,"Philippines" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\64","CountryCode",0x00010001,0x00000040 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\64","Name",0x00000000,"New Zealand" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\66","CountryCode",0x00010001,0x00000042 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\66","Name",0x00000000,"Thailand" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\7","CountryCode",0x00010001,0x00000007 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\7","Name",0x00000000,"Russia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\705","CountryCode",0x00010001,0x000002C1 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\705","Name",0x00000000,"Kazakhstan" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\708","CountryCode",0x00010001,0x000002C4 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\708","Name",0x00000000,"Tajikistan" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\81","CountryCode",0x00010001,0x00000051 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\81","Name",0x00000000,"Japan" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\82","CountryCode",0x00010001,0x00000052 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\82","Name",0x00000000,"Korea (Republic of)" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\850","CountryCode",0x00010001,0x00000352 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\850","Name",0x00000000,"Korea (North)" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\86","CountryCode",0x00010001,0x00000056 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\86","Name",0x00000000,"China" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\886","CountryCode",0x00010001,0x00000376 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\886","Name",0x00000000,"Taiwan" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\90","CountryCode",0x00010001,0x0000005a -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\90","Name",0x00000000,"Turkey" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\91","CountryCode",0x00010001,0x0000005b -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\91","Name",0x00000000,"India" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\93","CountryCode",0x00010001,0x0000005d -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\93","Name",0x00000000,"Afghanistan" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\960","CountryCode",0x00010001,0x000003c0 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\960","Name",0x00000000,"Maldives" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\964","CountryCode",0x00010001,0x000003c4 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\964","Name",0x00000000,"Iraq" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\966","CountryCode",0x00010001,0x000003c6 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\966","Name",0x00000000,"Saudi Arabia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\971","CountryCode",0x00010001,0x000003cb -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\971","Name",0x00000000,"United Arab Emirates" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\972","CountryCode",0x00010001,0x000003cc -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\972","Name",0x00000000,"Israel" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\974","CountryCode",0x00010001,0x000003ce -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\974","Name",0x00000000,"Qatar" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\976","CountryCode",0x00010001,0x000003d0 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\976","Name",0x00000000,"Mongolia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\977","CountryCode",0x00010001,0x000003d1 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\977","Name",0x00000000,"Nepal" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\98","CountryCode",0x00010001,0x00000062 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\98","Name",0x00000000,"Iran" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\993","CountryCode",0x00010001,0x000003e1 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\993","Name",0x00000000,"Turkmenistan" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\994","CountryCode",0x00010001,0x000003e2 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\994","Name",0x00000000,"Azerbaijan" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\995","CountryCode",0x00010001,0x000003e3 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\995","Name",0x00000000,"Georgia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\996","CountryCode",0x00010001,0x000003e4 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\996","Name",0x00000000,"Kyrgyzstan" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\998","CountryCode",0x00010001,0x000003e6 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\998","Name",0x00000000,"Uzbekistan" - -; PowerCfg -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg","LastID",0x00000002,"0" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg","DiskSpinDownMax",0x00000002,"3600" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg","DiskSpinDownMin",0x00000002,"3" - -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\GlobalPowerPolicy","Policies",0x00030003,\ -01,00,00,00,01,00,00,00,01,00,00,00,03,00,00,00 - -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\0","Policies",0x00030003,\ -01,00,00,00,02,00,00,00,04,00,00,00,02,00,00,00,02,00,00,00,00,00,00,00,84,03,00,00,00,00,00,00,84,03,00,00,32,\ -32,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\1","Policies",0x00030003,\ -01,00,00,00,02,00,00,00,03,00,00,00,03,00,00,00,03,00,00,00,60,09,00,00,2C,01,00,00,80,25,00,00,F4,1A,00,00,32,\ -32,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\2","Policies",0x00030003,\ -01,00,00,00,02,00,00,00,03,00,00,00,02,00,00,00,02,00,00,00,00,00,00,00,84,03,00,00,00,00,00,00,9C,18,00,00,32,\ -32,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\3","Policies",0x00030003,\ -01,00,00,00,02,00,00,00,04,00,00,00,02,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,5A,\ -5A,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\4","Policies",0x00030003,\ -01,00,00,00,02,00,00,00,04,00,00,00,02,00,00,00,02,00,00,00,00,00,00,00,08,07,00,00,00,00,00,00,04,29,00,00,5A,\ -5A,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\5","Policies",0x00030003,\ -01,00,00,00,02,00,00,00,04,00,00,00,03,00,00,00,03,00,00,00,DC,05,00,00,B4,00,00,00,DC,05,00,00,98,0D,00,00,32,\ -0A,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 - -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\0","Policies",0x00030001,\ -01,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ -00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ -01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ -00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,46,00,00,\ -01,00,00,00 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\1","Policies",0x00030001,\ -01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ -00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ -01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ -00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,46,00,00,\ -01,00,00,00 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\2","Policies",0x00030001,\ -01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ -00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ -01,00,00,00,01,00,00,00,02,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ -00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,46,00,00,\ -01,00,00,00 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\3","Policies",0x00030001,\ -01,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ -00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ -01,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ -00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,50,00,00,\ -01,00,00,00 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\4","Policies",0x00030001,\ -01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ -00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ -01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ -00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,46,00,00,\ -01,00,00,00 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\5","Policies",0x00030001,\ -01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ -00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,02,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ -01,00,00,00,01,00,00,00,02,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ -00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,02,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,41,00,00,\ -01,00,00,00 - -; deskadp.dll shell extension -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\Device\shellex\PropertySheetHandlers\Display Adapter CPL Extension","",0x00000000,"{42071712-76d4-11d1-8b24-00a0c9068ff3}" - -; deskmon.dll shell extension -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\Device\shellex\PropertySheetHandlers\Display Monitor CPL Extension","",0x00000000,"{42071713-76d4-11d1-8b24-00a0c9068ff3}" - -HKLM,"SOFTWARE\Microsoft\Ole","EnableDCOM",0x00000000,"Y" -HKLM,"SOFTWARE\Microsoft\Ole","EnableRemoteConnect",0x00000000,"N" - -; Keyboard layout switcher -;HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run","kbswitch",0x00000000,"kbswitch.exe" - -; EOF diff --git a/boot/bootdata/hivesft_arm.inf b/boot/bootdata/hivesft_arm.inf deleted file mode 100644 index 59a69ca2218..00000000000 --- a/boot/bootdata/hivesft_arm.inf +++ /dev/null @@ -1,1164 +0,0 @@ -[Version] -Signature="$ReactOS$" - -[AddReg] - -; Internet Explorer -HKLM,"Software\Microsoft\Internet Explorer","Version",,"6.0.2900.2180" - -; DirectX -HKLM,"SOFTWARE\Microsoft\DirectX","Version",0x00000000,"4.09.00.0904" - -; RPC -HKLM,Software\Microsoft\Rpc\SecurityService,1,2,"secur32.dll" -HKLM,Software\Microsoft\Rpc\SecurityService,10,2,"secur32.dll" -HKLM,Software\Microsoft\Rpc\SecurityService,14,2,"schannel.dll" -HKLM,Software\Microsoft\Rpc\SecurityService,16,2,"secur32.dll" -HKLM,Software\Microsoft\Rpc\SecurityService,18,2,"secur32.dll" -HKLM,Software\Microsoft\Rpc\SecurityService,68,2,"netlogon.dll" -HKLM,Software\Microsoft\Rpc\SecurityService,9,2,"secur32.dll" - -; .NET -HKLM,"SOFTWARE\Microsoft\.NETFramework\","InstallRoot",0x00020000,"%SystemRoot%\Microsoft .NET\Framework\" - -; HTML Help -HKLM,SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9},,2,"HTML Help" -HKLM,SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9},"ComponentID",2,"HTMLHelp" -HKLM,SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9},"IsInstalled",2,1 -HKLM,SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9},"Locale",2,"*" -HKLM,SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9},"Version",2,"4,74,9273,0" - -; Common shell folders -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu","{208D2C60-3AEA-1069-A2D7-08002B30309D}",0x00010001,0x00000000 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Bitbucket",,0x00000012 -HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Bitbucket\Volume",,0x00000012 - -; CMD Settings -HKLM,"SOFTWARE\Microsoft\Command Processor","AutoRun",0x00020000,"" - -; Uninstall Application list -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",,0x00000010 - -HKLM,"SOFTWARE\Microsoft\Rpc",,0x00000012 - -; Version Information -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CurrentVersion",0x00020000,"5.2" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CSDVersion",0x00020000,"Service Pack 2" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CurrentBuildNumber",0x00020000,"3790" - - -; Image File Execution Options (NtGlobalFlag with FLG_SHOW_LDR_SNAPS set for loadlib.exe) -HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\loadlib.exe","GlobalFlag",0x00010001,0x00000002 -;HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\loaddll.exe","GlobalFlag",0x00010001,0x00000002 -;HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\soffice.exe","GlobalFlag",0x00010001,0x00000002 -;HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\tlstest.exe","GlobalFlag",0x00010001,0x00000002 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","midimapper",0x00000000,"midimap.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","wavemapper",0x00000000,"msacm32.drv" -;HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","wave",0x00000000,"sndblst.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","midi",0x00000000,"beepmidi.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.msadpcm",0x00000000,"msadp32.acm" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.msg711",0x00000000,"msg711.acm" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.msgsm610",0x00000000,"msgsm32.acm" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.imaadpcm",0x00000000,"imaadp32.acm" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.winemp3",0x00000000,"winemp3.acm" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","vidc.cvid",0x00000000,"iccvid.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","vidc.mrle",0x00000000,"msrle32.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","vidc.msvc",0x00000000,"msvidc32.dll" - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32","AVIVideo",0x00000002,"mciavi32.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32","CDAudio",0x00000002,"mcicda.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32","Sequencer",0x00000002,"mciseq.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32","WaveAudio",0x00000002,"mciwave.dll" - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","aifc",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","asf",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","asx",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","au",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","avi",0x00000002,"AVIVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","cda",0x00000002,"CDAudio" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","lsf",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","lsx",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","m1v",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","m3u",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mid",0x00000002,"Sequencer" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","midi",0x00000002,"Sequencer" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mp2",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mp2v",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mp3",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpa",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpe",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpeg",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpg",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpv",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpv2",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","rmi",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","rmi",0x00000002,"Sequencer" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","snd",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wav",0x00000002,"WaveAudio" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wax",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wm",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wma",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wmp",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wmv",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wmx",0x00000002,"MPEGVideo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wvx",0x00000002,"MPEGVideo" - -; Mesa OpenGL Driver -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers","DefaultDriver",0x00000000,"Mesa" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\Mesa","Version",0x00010001,0x00000002 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\Mesa","Dll",0x00000000,"mesa32" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\Mesa","DriverVersion",0x00010001,0x00000001 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\Mesa","Flags",0x00010001,0x00000001 - -; User Profile List -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList",,0x00000012 -;HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList","ProfilesDirectory",0x00020000,"%SystemDrive%\Documents and Settings" - -; Font substitutes -; SysFontSubstitutes are also returned by EnumFontFamilies, FontSubstitutes aren't -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes",,0x00000012 - -; Time zone settings -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones","IndexMapping",0x00010000,\ - "409", "4",\ - "1009", "4",\ - "2809", "20",\ - "80a", "30",\ - "440a", "30",\ - "480a", "30",\ - "4c0a", "30",\ - "140a", "30",\ - "100a", "33",\ - "c0c", "35",\ - "2009", "35",\ - "240a", "45",\ - "280a", "45",\ - "300a", "45",\ - "180a", "45",\ - "500a", "50",\ - "2409", "50",\ - "1c0a", "50",\ - "2c09", "50",\ - "200a", "55",\ - "3c0a", "55",\ - "400a", "55",\ - "340a", "56",\ - "416", "65",\ - "2c0a", "70",\ - "380a", "70",\ - "438", "85",\ - "48f", "85",\ - "809", "85",\ - "816", "85",\ - "1809", "85",\ - "40f", "90",\ - "1801", "90",\ - "41c", "95",\ - "405", "95",\ - "40e", "95",\ - "424", "95",\ - "41b", "95",\ - "81a", "95",\ - "c1a", "95",\ - "415", "100",\ - "1401", "100",\ - "41a", "100",\ - "42f", "100",\ - "140c", "100",\ - "180c", "100",\ - "1c01", "100",\ - "403", "105",\ - "406", "105",\ - "813", "105",\ - "827", "105",\ - "40a", "105",\ - "40c", "105",\ - "42d", "105",\ - "80c", "105",\ - "c0a", "105",\ - "490", "105",\ - "407", "110",\ - "410", "110",\ - "413", "110",\ - "414", "110",\ - "417", "110",\ - "807", "110",\ - "810", "110",\ - "814", "110",\ - "1007", "110",\ - "1407", "110",\ - "41d", "110",\ - "c07", "110",\ - "100c", "110",\ - "1001", "115",\ - "2801", "115",\ - "3001", "115",\ - "43e", "115",\ - "2c01", "115",\ - "423", "115",\ - "c01", "120",\ - "425", "125",\ - "426", "125",\ - "40b", "125",\ - "81d", "125",\ - "422", "125",\ - "402", "125",\ - "427", "125",\ - "408", "130",\ - "41f", "130",\ - "418", "130",\ - "40d", "135",\ - "436", "140",\ - "3009", "140",\ - "1c09", "140",\ - "419", "145",\ - "401", "150",\ - "4001", "150",\ - "3c01", "150",\ - "3401", "150",\ - "441", "155",\ - "801", "158",\ - "2401", "158",\ - "429", "160",\ - "2001", "165",\ - "3801", "165",\ - "42b", "170",\ - "420", "185",\ - "439", "190",\ - "445", "190",\ - "421", "205",\ - "41e", "205",\ - "42a", "205",\ - "804", "210",\ - "c04", "210",\ - "1404", "210",\ - "83e", "210",\ - "1004", "215",\ - "404", "220",\ - "3409", "220",\ - "412", "230",\ - "812", "230",\ - "411", "235",\ - "c09", "255",\ - "1409", "290" - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Dateline Standard Time","Display",0x00000000,"(GMT-12:00) International Date Line West" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Dateline Standard Time","Dlt",0x00000000,"Dateline Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Dateline Standard Time","Std",0x00000000,"Dateline Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Dateline Standard Time","Index",0x00010001,0 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Dateline Standard Time","TZI",0x00000001,\ -0xd0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Samoa Standard Time","Display",0x00000000,"(GMT-11:00) Midway Island, Samoa" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Samoa Standard Time","Dlt",0x00000000,"Samoa Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Samoa Standard Time","Std",0x00000000,"Samoa Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Samoa Standard Time","Index",0x00010001,1 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Samoa Standard Time","TZI",0x00000001,\ -0x94,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Hawaiian Standard Time","Display",0x00000000,"(GMT-10:00) Hawaii" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Hawaiian Standard Time","Dlt",0x00000000,"Hawaiian Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Hawaiian Standard Time","Std",0x00000000,"Hawaiian Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Hawaiian Standard Time","Index",0x00010001,2 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Hawaiian Standard Time","TZI",0x00000001,\ -0x58,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Alaskan Standard Time","Display",0x00000000,"(GMT-09:00) Alaska" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Alaskan Standard Time","Dlt",0x00000000,"Alaskan Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Alaskan Standard Time","Std",0x00000000,"Alaskan Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Alaskan Standard Time","Index",0x00010001,3 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Alaskan Standard Time","TZI",0x00000001,\ -0x1c,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time","Display",0x00000000,"(GMT-08:00) Pacific Time (US & Canada)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time","Dlt",0x00000000,"Pacific Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time","Std",0x00000000,"Pacific Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time","Index",0x00010001,4 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time","TZI",0x00000001,\ -0xe0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time","Display",0x00000000,"(GMT-07:00) Mountain Time (US & Canada)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time","Dlt",0x00000000,"Mountain Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time","Std",0x00000000,"Mountain Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time","Index",0x00010001,10 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time","TZI",0x00000001,\ -0xa4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time (Mexico)","Display",0x00000000,"(GMT-07:00) Chihuahua, La Paz, Mazatlan" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time (Mexico)","Dlt",0x00000000,"Mountain Daylight Time (Mexico)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time (Mexico)","Std",0x00000000,"Mountain Standard Time (Mexico)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time (Mexico)","Index",0x00010001,13 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mountain Standard Time (Mexico)","TZI",0x00000001,\ -0xa4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Mountain Standard Time","Display",0x00000000,"(GMT-07:00) Arizona" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Mountain Standard Time","Dlt",0x00000000,"US Mountain Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Mountain Standard Time","Std",0x00000000,"US Mountain Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Mountain Standard Time","Index",0x00010001,15 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Mountain Standard Time","TZI",0x00000001,\ -0xa4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time","Display",0x00000000,"(GMT-06:00) Central Time (US & Canada)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time","Dlt",0x00000000,"Central Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time","Std",0x00000000,"Central Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time","Index",0x00010001,20 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time","TZI",0x00000001,\ -0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Canada Central Standard Time","Display",0x00000000,"(GMT-06:00) Saskatchewan" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Canada Central Standard Time","Dlt",0x00000000,"Canada Central Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Canada Central Standard Time","Std",0x00000000,"Canada Central Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Canada Central Standard Time","Index",0x00010001,25 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Canada Central Standard Time","TZI",0x00000001,\ -0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time (Mexico)","Display",0x00000000,"(GMT-06:00) Guadalajara, Mexico City, Monterrey" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time (Mexico)","Dlt",0x00000000,"Central Daylight Time (Mexico)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time (Mexico)","Std",0x00000000,"Central Standard Time (Mexico)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time (Mexico)","Index",0x00010001,30 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Standard Time (Mexico)","TZI",0x00000001,\ -0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central America Standard Time","Display",0x00000000,"(GMT-06:00) Central America" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central America Standard Time","Dlt",0x00000000,"Central America Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central America Standard Time","Std",0x00000000,"Central America Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central America Standard Time","Index",0x00010001,33 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central America Standard Time","TZI",0x00000001,\ -0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Eastern Standard Time","Display",0x00000000,"(GMT-05:00) Eastern Time (US & Canada)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Eastern Standard Time","Dlt",0x00000000,"Eastern Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Eastern Standard Time","Std",0x00000000,"Eastern Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Eastern Standard Time","Index",0x00010001,35 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Eastern Standard Time","TZI",0x00000001,\ -0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Eastern Standard Time","Display",0x00000000,"(GMT-05:00) Indiana (East)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Eastern Standard Time","Dlt",0x00000000,"US Eastern Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Eastern Standard Time","Std",0x00000000,"US Eastern Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Eastern Standard Time","Index",0x00010001,40 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\US Eastern Standard Time","TZI",0x00000001,\ -0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Pacific Standard Time","Display",0x00000000,"(GMT-05:00) Bogota, Lima, Quito, Rio Branco" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Pacific Standard Time","Dlt",0x00000000,"SA Pacific Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Pacific Standard Time","Std",0x00000000,"SA Pacific Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Pacific Standard Time","Index",0x00010001,45 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Pacific Standard Time","TZI",0x00000001,\ -0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Atlantic Standard Time","Display",0x00000000,"(GMT-04:00) Atlantic Time (Canada)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Atlantic Standard Time","Dlt",0x00000000,"Atlantic Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Atlantic Standard Time","Std",0x00000000,"Atlantic Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Atlantic Standard Time","Index",0x00010001,50 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Atlantic Standard Time","TZI",0x00000001,\ -0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Western Standard Time","Display",0x00000000,"(GMT-04:00) La Paz" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Western Standard Time","Dlt",0x00000000,"SA Western Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Western Standard Time","Std",0x00000000,"SA Western Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Western Standard Time","Index",0x00010001,55 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Western Standard Time","TZI",0x00000001,\ -0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific SA Standard Time","Display",0x00000000,"(GMT-04:00) Santiago" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific SA Standard Time","Dlt",0x00000000,"Pacific SA Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific SA Standard Time","Std",0x00000000,"Pacific SA Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific SA Standard Time","Index",0x00010001,56 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific SA Standard Time","TZI",0x00000001,\ -0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x03,0x00,0x06,0x00,0x02,0x00,0x17,0x00,0x3b,0x00,0x3b,0x00,0xe7,0x03,\ -0x00,0x00,0x0a,0x00,0x06,0x00,0x02,0x00,0x17,0x00,0x3b,0x00,0x3b,0x00,0xe7,0x03 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Newfoundland Standard Time","Display",0x00000000,"(GMT-03:30) Newfoundland" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Newfoundland Standard Time","Dlt",0x00000000,"Newfoundland Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Newfoundland Standard Time","Std",0x00000000,"Newfoundland Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Newfoundland Standard Time","Index",0x00010001,60 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Newfoundland Standard Time","TZI",0x00000001,\ -0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. South America Standard Time","Display",0x00000000,"(GMT-03:00) Brasilia" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. South America Standard Time","Dlt",0x00000000,"E. South America Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. South America Standard Time","Std",0x00000000,"E. South America Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. South America Standard Time","Index",0x00010001,65 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. South America Standard Time","TZI",0x00000001,\ -0xb4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Eastern Standard Time","Display",0x00000000,"(GMT-03:00) Buenos Aires, Georgetown" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Eastern Standard Time","Dlt",0x00000000,"SA Eastern Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Eastern Standard Time","Std",0x00000000,"SA Eastern Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Eastern Standard Time","Index",0x00010001,70 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SA Eastern Standard Time","TZI",0x00000001,\ -0xb4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenland Standard Time","Display",0x00000000,"(GMT-03:00) Greenland" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenland Standard Time","Dlt",0x00000000,"Greenland Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenland Standard Time","Std",0x00000000,"Greenland Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenland Standard Time","Index",0x00010001,73 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenland Standard Time","TZI",0x00000001,\ -0xb4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mid-Atlantic Standard Time","Display",0x00000000,"(GMT-02:00) Mid-Atlantic" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mid-Atlantic Standard Time","Dlt",0x00000000,"Mid-Atlantic Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mid-Atlantic Standard Time","Std",0x00000000,"Mid-Atlantic Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mid-Atlantic Standard Time","Index",0x00010001,75 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Mid-Atlantic Standard Time","TZI",0x00000001,\ -0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x09,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Azores Standard Time","Display",0x00000000,"(GMT-01:00) Azores" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Azores Standard Time","Dlt",0x00000000,"Azores Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Azores Standard Time","Std",0x00000000,"Azores Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Azores Standard Time","Index",0x00010001,80 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Azores Standard Time","TZI",0x00000001,\ -0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cape Verde Standard Time","Display",0x00000000,"(GMT-01:00) Cape Verde Is." -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cape Verde Standard Time","Dlt",0x00000000,"Cape Verde Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cape Verde Standard Time","Std",0x00000000,"Cape Verde Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cape Verde Standard Time","Index",0x00010001,83 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cape Verde Standard Time","TZI",0x00000001,\ -0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GMT Standard Time","Display",0x00000000,"(GMT) Greenwich Mean Time: Dublin, Edinburgh, Lisbon, London" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GMT Standard Time","Dlt",0x00000000,"GMT Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GMT Standard Time","Std",0x00000000,"GMT Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GMT Standard Time","Index",0x00010001,85 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GMT Standard Time","TZI",0x00000001,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenwich Standard Time","Display",0x00000000,"(GMT) Casablanca, Monrovia, Reykjavik" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenwich Standard Time","Dlt",0x00000000,"Greenwich Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenwich Standard Time","Std",0x00000000,"Greenwich Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenwich Standard Time","Index",0x00010001,90 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Greenwich Standard Time","TZI",0x00000001,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time","Display",0x00000000,"(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time","Dlt",0x00000000,"Central Europe Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time","Std",0x00000000,"Central Europe Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time","Index",0x00010001,95 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time","TZI",0x00000001,\ -0xc4,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time","Display",0x00000000,"(GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time","Dlt",0x00000000,"Central European Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time","Std",0x00000000,"Central European Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time","Index",0x00010001,100 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time","TZI",0x00000001,\ -0xc4,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Romance Standard Time","Display",0x00000000,"(GMT+01:00) Brussels, Copenhagen, Madrid, Paris" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Romance Standard Time","Dlt",0x00000000,"Romance Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Romance Standard Time","Std",0x00000000,"Romance Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Romance Standard Time","Index",0x00010001,105 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Romance Standard Time","TZI",0x00000001,\ -0xc4,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Europe Standard Time","Display",0x00000000,"(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Europe Standard Time","Dlt",0x00000000,"W. Europe Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Europe Standard Time","Std",0x00000000,"W. Europe Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Europe Standard Time","Index",0x00010001,110 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Europe Standard Time","TZI",0x00000001,\ -0xc4,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Europe Standard Time","Display",0x00000000,"(GMT+02:00) Minsk" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Europe Standard Time","Dlt",0x00000000,"E. Europe Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Europe Standard Time","Std",0x00000000,"E. Europe Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Europe Standard Time","Index",0x00010001,115 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Europe Standard Time","TZI",0x00000001,\ -0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Egypt Standard Time","Display",0x00000000,"(GMT+02:00) Cairo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Egypt Standard Time","Dlt",0x00000000,"Egypt Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Egypt Standard Time","Std",0x00000000,"Egypt Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Egypt Standard Time","Index",0x00010001,120 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Egypt Standard Time","TZI",0x00000001,\ -0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x09,0x00,0x04,0x00,0x05,0x00,0x17,0x00,0x3b,0x00,0x3b,0x00,0x00,0x00,\ -0x00,0x00,0x04,0x00,0x04,0x00,0x05,0x00,0x17,0x00,0x3b,0x00,0x3b,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\FLE Standard Time","Display",0x00000000,"(GMT+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\FLE Standard Time","Dlt",0x00000000,"FLE Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\FLE Standard Time","Std",0x00000000,"FLE Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\FLE Standard Time","Index",0x00010001,125 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\FLE Standard Time","TZI",0x00000001,\ -0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GTB Standard Time","Display",0x00000000,"(GMT+02:00) Athens, Bucharest, Istanbul" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GTB Standard Time","Dlt",0x00000000,"GTB Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GTB Standard Time","Std",0x00000000,"GTB Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GTB Standard Time","Index",0x00010001,130 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GTB Standard Time","TZI",0x00000001,\ -0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Israel Standard Time","Display",0x00000000,"(GMT+02:00) Jerusalem" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Israel Standard Time","Dlt",0x00000000,"Israel Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Israel Standard Time","Std",0x00000000,"Israel Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Israel Standard Time","Index",0x00010001,135 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Israel Standard Time","TZI",0x00000001,\ -0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x05,0x00,0x05,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x03,0x00,0x05,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\South Africa Standard Time","Display",0x00000000,"(GMT+02:00) Harare, Pretoria" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\South Africa Standard Time","Dlt",0x00000000,"South Africa Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\South Africa Standard Time","Std",0x00000000,"South Africa Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\South Africa Standard Time","Index",0x00010001,140 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\South Africa Standard Time","TZI",0x00000001,\ -0x88,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Kaliningrad Standard Time","Display",0x00000000,"(GMT+03:00) Kaliningrad" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Kaliningrad Standard Time","Dlt",0x00000000,"Kaliningrad Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Kaliningrad Standard Time","Std",0x00000000,"Kaliningrad Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Kaliningrad Standard Time","Index",0x00010001,143 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Kaliningrad Standard Time","TZI",0x00000001,\ -0x4c,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time","Display",0x00000000,"(GMT+04:00) Moscow, St. Petersburg, Volgograd" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time","Dlt",0x00000000,"Russian Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time","Std",0x00000000,"Russian Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time","Index",0x00010001,145 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time","TZI",0x00000001,\ -0x10,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arab Standard Time","Display",0x00000000,"(GMT+03:00) Kuwait, Riyadh" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arab Standard Time","Dlt",0x00000000,"Arab Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arab Standard Time","Std",0x00000000,"Arab Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arab Standard Time","Index",0x00010001,150 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arab Standard Time","TZI",0x00000001,\ -0x4c,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Africa Standard Time","Display",0x00000000,"(GMT+03:00) Nairobi" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Africa Standard Time","Dlt",0x00000000,"E. Africa Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Africa Standard Time","Std",0x00000000,"E. Africa Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Africa Standard Time","Index",0x00010001,155 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Africa Standard Time","TZI",0x00000001,\ -0x4c,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabic Standard Time","Display",0x00000000,"(GMT+03:00) Baghdad" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabic Standard Time","Dlt",0x00000000,"Arabic Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabic Standard Time","Std",0x00000000,"Arabic Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabic Standard Time","Index",0x00010001,158 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabic Standard Time","TZI",0x00000001,\ -0x4c,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Iran Standard Time","Display",0x00000000,"(GMT+03:30) Tehran" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Iran Standard Time","Dlt",0x00000000,"Iran Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Iran Standard Time","Std",0x00000000,"Iran Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Iran Standard Time","Index",0x00010001,160 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Iran Standard Time","TZI",0x00000001,\ -0x2e,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabian Standard Time","Display",0x00000000,"(GMT+04:00) Abu Dhabi, Muscat" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabian Standard Time","Dlt",0x00000000,"Arabian Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabian Standard Time","Std",0x00000000,"Arabian Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabian Standard Time","Index",0x00010001,165 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Arabian Standard Time","TZI",0x00000001,\ -0x10,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Caucasus Standard Time","Display",0x00000000,"(GMT+04:00) Caucasus Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Caucasus Standard Time","Dlt",0x00000000,"Caucasus Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Caucasus Standard Time","Std",0x00000000,"Caucasus Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Caucasus Standard Time","Index",0x00010001,170 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Caucasus Standard Time","TZI",0x00000001,\ -0x10,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time","Display",0x00000000,"(GMT+04:30) Kabul" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time","Dlt",0x00000000,"Afghanistan Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time","Std",0x00000000,"Afghanistan Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time","Index",0x00010001,175 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Afghanistan Standard Time","TZI",0x00000001,\ -0xf2,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ekaterinburg Standard Time","Display",0x00000000,"(GMT+06:00) Ekaterinburg" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ekaterinburg Standard Time","Dlt",0x00000000,"Ekaterinburg Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ekaterinburg Standard Time","Std",0x00000000,"Ekaterinburg Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ekaterinburg Standard Time","Index",0x00010001,180 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ekaterinburg Standard Time","TZI",0x00000001,\ -0x98,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Asia Standard Time","Display",0x00000000,"(GMT+05:00) Islamabad, Karachi, Tashkent" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Asia Standard Time","Dlt",0x00000000,"West Asia Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Asia Standard Time","Std",0x00000000,"West Asia Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Asia Standard Time","Index",0x00010001,185 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Asia Standard Time","TZI",0x00000001,\ -0xd4,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\India Standard Time","Display",0x00000000,"(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\India Standard Time","Dlt",0x00000000,"India Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\India Standard Time","Std",0x00000000,"India Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\India Standard Time","Index",0x00010001,190 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\India Standard Time","TZI",0x00000001,\ -0xb6,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Nepal Standard Time","Display",0x00000000,"(GMT+05:45) Kathmandu" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Nepal Standard Time","Dlt",0x00000000,"Nepal Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Nepal Standard Time","Std",0x00000000,"Nepal Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Nepal Standard Time","Index",0x00010001,193 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Nepal Standard Time","TZI",0x00000001,\ -0xa7,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Sri Lanka Standard Time","Display",0x00000000,"(GMT+05:30) Sri Jayawardenepura" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Sri Lanka Standard Time","Dlt",0x00000000,"Sri Lanka Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Sri Lanka Standard Time","Std",0x00000000,"Sri Lanka Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Sri Lanka Standard Time","Index",0x00010001,194 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Sri Lanka Standard Time","TZI",0x00000001,\ -0xb6,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Asia Standard Time","Display",0x00000000,"(GMT+06:00) Astana, Dhaka" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Asia Standard Time","Dlt",0x00000000,"Central Asia Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Asia Standard Time","Std",0x00000000,"Central Asia Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Asia Standard Time","Index",0x00010001,195 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Asia Standard Time","TZI",0x00000001,\ -0x98,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\N. Central Asia Standard Time","Display",0x00000000,"(GMT+07:00) Novosibirsk, Omsk" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\N. Central Asia Standard Time","Dlt",0x00000000,"N. Central Asia Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\N. Central Asia Standard Time","Std",0x00000000,"N. Central Asia Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\N. Central Asia Standard Time","Index",0x00010001,201 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\N. Central Asia Standard Time","TZI",0x00000001,\ -0x5c,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Myanmar Standard Time","Display",0x00000000,"(GMT+06:30) Yangon (Rangoon)" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Myanmar Standard Time","Dlt",0x00000000,"Myanmar Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Myanmar Standard Time","Std",0x00000000,"Myanmar Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Myanmar Standard Time","Index",0x00010001,203 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Myanmar Standard Time","TZI",0x00000001,\ -0x7a,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SE Asia Standard Time","Display",0x00000000,"(GMT+07:00) Bangkok, Hanoi, Jakarta" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SE Asia Standard Time","Dlt",0x00000000,"SE Asia Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SE Asia Standard Time","Std",0x00000000,"SE Asia Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SE Asia Standard Time","Index",0x00010001,205 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\SE Asia Standard Time","TZI",0x00000001,\ -0x5c,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia Standard Time","Display",0x00000000,"(GMT+08:00) Krasnoyarsk" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia Standard Time","Dlt",0x00000000,"North Asia Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia Standard Time","Std",0x00000000,"North Asia Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia Standard Time","Index",0x00010001,207 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia Standard Time","TZI",0x00000001,\ -0x20,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\China Standard Time","Display",0x00000000,"(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\China Standard Time","Dlt",0x00000000,"China Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\China Standard Time","Std",0x00000000,"China Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\China Standard Time","Index",0x00010001,210 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\China Standard Time","TZI",0x00000001,\ -0x20,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Singapore Standard Time","Display",0x00000000,"(GMT+08:00) Kuala Lumpur, Singapore" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Singapore Standard Time","Dlt",0x00000000,"Singapore Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Singapore Standard Time","Std",0x00000000,"Singapore Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Singapore Standard Time","Index",0x00010001,215 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Singapore Standard Time","TZI",0x00000001,\ -0x20,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Taipei Standard Time","Display",0x00000000,"(GMT+08:00) Taipei" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Taipei Standard Time","Dlt",0x00000000,"Taipei Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Taipei Standard Time","Std",0x00000000,"Taipei Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Taipei Standard Time","Index",0x00010001,220 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Taipei Standard Time","TZI",0x00000001,\ -0x20,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Australia Standard Time","Display",0x00000000,"(GMT+08:00) Perth" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Australia Standard Time","Dlt",0x00000000,"W. Australia Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Australia Standard Time","Std",0x00000000,"W. Australia Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Australia Standard Time","Index",0x00010001,225 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\W. Australia Standard Time","TZI",0x00000001,\ -0x20,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ulaanbaatar Standard Time","Display",0x00000000,"(GMT+08:00) Ulaanbaatar" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ulaanbaatar Standard Time","Dlt",0x00000000,"Ulaanbaatar Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ulaanbaatar Standard Time","Std",0x00000000,"Ulaanbaatar Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ulaanbaatar Standard Time","Index",0x00010001,226 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Ulaanbaatar Standard Time","TZI",0x00000001,\ -0x20,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia East Standard Time","Display",0x00000000,"(GMT+09:00) Irkutsk" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia East Standard Time","Dlt",0x00000000,"North Asia East Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia East Standard Time","Std",0x00000000,"North Asia East Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia East Standard Time","Index",0x00010001,227 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\North Asia East Standard Time","TZI",0x00000001,\ -0xe4,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Korea Standard Time","Display",0x00000000,"(GMT+09:00) Seoul" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Korea Standard Time","Dlt",0x00000000,"Korea Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Korea Standard Time","Std",0x00000000,"Korea Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Korea Standard Time","Index",0x00010001,230 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Korea Standard Time","TZI",0x00000001,\ -0xe4,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tokyo Standard Time","Display",0x00000000,"(GMT+09:00) Osaka, Sapporo, Tokyo" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tokyo Standard Time","Dlt",0x00000000,"Tokyo Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tokyo Standard Time","Std",0x00000000,"Tokyo Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tokyo Standard Time","Index",0x00010001,235 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tokyo Standard Time","TZI",0x00000001,\ -0xe4,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Yakutsk Standard Time","Display",0x00000000,"(GMT+10:00) Yakutsk" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Yakutsk Standard Time","Dlt",0x00000000,"Yakutsk Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Yakutsk Standard Time","Std",0x00000000,"Yakutsk Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Yakutsk Standard Time","Index",0x00010001,240 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Yakutsk Standard Time","TZI",0x00000001,\ -0xa8,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Central Standard Time","Display",0x00000002,"(GMT+09:30) Darwin" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Central Standard Time","Dlt",0x00000002,"AUS Central Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Central Standard Time","Std",0x00000002,"AUS Central Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Central Standard Time","Index",0x00010001,245 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Central Standard Time","TZI",0x00000001,\ -0xc6,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cen. Australia Standard Time","Display",0x00000000,"(GMT+09:30) Adelaide" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cen. Australia Standard Time","Dlt",0x00000000,"Cen. Australia Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cen. Australia Standard Time","Std",0x00000000,"Cen. Australia Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cen. Australia Standard Time","Index",0x00010001,250 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Cen. Australia Standard Time","TZI",0x00000001,\ -0xc6,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Eastern Standard Time","Display",0x00000000,"(GMT+10:00) Canberra, Melbourne, Sydney" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Eastern Standard Time","Dlt",0x00000000,"AUS Eastern Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Eastern Standard Time","Std",0x00000000,"AUS Eastern Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Eastern Standard Time","Index",0x00010001,255 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\AUS Eastern Standard Time","TZI",0x00000001,\ -0xa8,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Australia Standard Time","Display",0x00000000,"(GMT+10:00) Brisbane" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Australia Standard Time","Dlt",0x00000000,"E. Australia Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Australia Standard Time","Std",0x00000000,"E. Australia Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Australia Standard Time","Index",0x00010001,260 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\E. Australia Standard Time","TZI",0x00000001,\ -0xa8,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tasmania Standard Time","Display",0x00000000,"(GMT+10:00) Hobart" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tasmania Standard Time","Dlt",0x00000000,"Tasmania Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tasmania Standard Time","Std",0x00000000,"Tasmania Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tasmania Standard Time","Index",0x00010001,265 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tasmania Standard Time","TZI",0x00000001,\ -0xa8,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Vladivostok Standard Time","Display",0x00000000,"(GMT+11:00) Vladivostok" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Vladivostok Standard Time","Dlt",0x00000000,"Vladivostok Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Vladivostok Standard Time","Std",0x00000000,"Vladivostok Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Vladivostok Standard Time","Index",0x00010001,270 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Vladivostok Standard Time","TZI",0x00000001,\ -0x6c,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Pacific Standard Time","Display",0x00000000,"(GMT+10:00) Guam, Port Moresby" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Pacific Standard Time","Dlt",0x00000000,"West Pacific Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Pacific Standard Time","Std",0x00000000,"West Pacific Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Pacific Standard Time","Index",0x00010001,275 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\West Pacific Standard Time","TZI",0x00000001,\ -0xa8,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Pacific Standard Time","Display",0x00000000,"(GMT+11:00) Solomon Is., New Caledonia" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Pacific Standard Time","Dlt",0x00000000,"Central Pacific Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Pacific Standard Time","Std",0x00000000,"Central Pacific Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Pacific Standard Time","Index",0x00010001,280 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Pacific Standard Time","TZI",0x00000001,\ -0x6c,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Magadan Standard Time","Display",0x00000000,"(GMT+12:00) Magadan" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Magadan Standard Time","Dlt",0x00000000,"Magadan Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Magadan Standard Time","Std",0x00000000,"Magadan Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Magadan Standard Time","Index",0x00010001,283 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Magadan Standard Time","TZI",0x00000001,\ -0x30,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Fiji Standard Time","Display",0x00000000,"(GMT+12:00) Fiji, Kamchatka, Marshall Is." -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Fiji Standard Time","Dlt",0x00000000,"Fiji Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Fiji Standard Time","Std",0x00000000,"Fiji Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Fiji Standard Time","Index",0x00010001,285 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Fiji Standard Time","TZI",0x00000001,\ -0x30,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\New Zealand Standard Time","Display",0x00000000,"(GMT+12:00) Auckland, Wellington" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\New Zealand Standard Time","Dlt",0x00000000,"New Zealand Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\New Zealand Standard Time","Std",0x00000000,"New Zealand Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\New Zealand Standard Time","Index",0x00010001,290 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\New Zealand Standard Time","TZI",0x00000001,\ -0x30,0xfd,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x09,0x00,0x00,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tonga Standard Time","Display",0x00000000,"(GMT+13:00) Nuku'alofa" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tonga Standard Time","Dlt",0x00000000,"Tonga Daylight Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tonga Standard Time","Std",0x00000000,"Tonga Standard Time" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tonga Standard Time","Index",0x00010001,300 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Tonga Standard Time","TZI",0x00000001,\ -0xf4,0xfc,0xff,0xff,0x00,0x00,0x00,0x00,0xc4,0xff,0xff,0xff,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 - -; Available file systems -HKLM,"SOFTWARE\ReactOS\ReactOS\CurrentVersion\IFS","FAT",0x00000000,"ufat.dll" -HKLM,"SOFTWARE\ReactOS\ReactOS\CurrentVersion\IFS","FAT32",0x00000000,"ufat.dll" -HKLM,"SOFTWARE\ReactOS\ReactOS\CurrentVersion\IFS","FATX",0x00000000,"ufatx.dll" - -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","ConsoleShell",0x00020000,"%SystemRoot%\system32\cmd.exe" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\explorer.exe" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","StartServices",0x00010001,0x00000001 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","StartLsass",0x00010001,0x00000001 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","Userinit",0x00020000,"%SystemRoot%\system32\userinit.exe" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","AutoAdminLogon",0x00000000,"1" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","DefaultUserName",0x00000000,"Administrator" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","DefaultPassword",0x00000000,"Secret" - -;Time Zone Servers -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","1",0x00000000,"pool.ntp.org" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","2",0x00000000,"asia.pool.ntp.org" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","3",0x00000000,"europe.pool.ntp.org" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","4",0x00000000,"north-america.pool.ntp.org" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","5",0x00000000,"oceania.pool.ntp.org" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","6",0x00000000,"south-america.pool.ntp.org" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","7",0x00000000,"time.windows.com" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","8",0x00000000,"time.nist.gov" - -; Country Codes -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List","CountryListVersion",0x00010001,0x00000019 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\1","CountryCode",0x00010001,0x00000001 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\1","Name",0x00000000,"United States of America" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\106","CountryCode",0x00010001,0x0000006A -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\106","Name",0x00000000,"British Virgin Islands" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\107","CountryCode",0x00010001,0x0000006B -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\107","Name",0x00000000,"Canada" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\109","CountryCode",0x00010001,0x0000006D -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\109","Name",0x00000000,"Dominica" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\110","CountryCode",0x00010001,0x0000006E -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\110","Name",0x00000000,"Dominican Republic" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\20","CountryCode",0x00010001,0x00000014 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\20","Name",0x00000000,"Egypt" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\268","CountryCode",0x00010001,0x0000010c -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\268","Name",0x00000000,"Swaziland" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\27","CountryCode",0x00010001,0x0000001b -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\27","Name",0x00000000,"South Africa" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\30","CountryCode",0x00010001,0x0000001e -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\30","Name",0x00000000,"Greece" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\31","CountryCode",0x00010001,0x0000001f -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\31","Name",0x00000000,"Netherlands" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\32","CountryCode",0x00010001,0x00000020 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\32","Name",0x00000000,"Belgium" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\33","CountryCode",0x00010001,0x00000021 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\33","Name",0x00000000,"France" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\34","CountryCode",0x00010001,0x00000022 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\34","Name",0x00000000,"Spain" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\351","CountryCode",0x00010001,0x0000015f -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\351","Name",0x00000000,"Portugal" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\352","CountryCode",0x00010001,0x00000160 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\352","Name",0x00000000,"Luxembourg" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\353","CountryCode",0x00010001,0x00000161 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\353","Name",0x00000000,"Ireland" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\354","CountryCode",0x00010001,0x00000162 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\354","Name",0x00000000,"Iceland" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\355","CountryCode",0x00010001,0x00000163 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\355","Name",0x00000000,"Albania" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\358","CountryCode",0x00010001,0x00000166 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\358","Name",0x00000000,"Finland" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\359","CountryCode",0x00010001,0x00000167 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\359","Name",0x00000000,"Bulgaria" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\36","CountryCode",0x00010001,0x00000024 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\36","Name",0x00000000,"Hungary" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\370","CountryCode",0x00010001,0x00000172 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\370","Name",0x00000000,"Lithuania" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\371","CountryCode",0x00010001,0x00000173 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\371","Name",0x00000000,"Latvia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\372","CountryCode",0x00010001,0x00000174 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\372","Name",0x00000000,"Estonia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\373","CountryCode",0x00010001,0x00000175 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\373","Name",0x00000000,"Moldova" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\374","CountryCode",0x00010001,0x00000176 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\374","Name",0x00000000,"Armenia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\380","CountryCode",0x00010001,0x0000017c -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\380","Name",0x00000000,"Ukraine" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\381","CountryCode",0x00010001,0x0000017d -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\381","Name",0x00000000,"Serbia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\385","CountryCode",0x00010001,0x00000181 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\385","Name",0x00000000,"Croatia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\386","CountryCode",0x00010001,0x00000182 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\386","Name",0x00000000,"Slovenia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\387","CountryCode",0x00010001,0x00000183 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\387","Name",0x00000000,"Bosnia and Herzegovina" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\39","CountryCode",0x00010001,0x00000027 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\39","Name",0x00000000,"Italy" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\40","CountryCode",0x00010001,0x00000028 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\40","Name",0x00000000,"Romania" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\41","CountryCode",0x00010001,0x00000029 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\41","Name",0x00000000,"Switzerland" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\420","CountryCode",0x00010001,0x000001a4 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\420","Name",0x00000000,"Czech Republic" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\421","CountryCode",0x00010001,0x000001a5 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\421","Name",0x00000000,"Slovakia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\423","CountryCode",0x00010001,0x000001a7 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\423","Name",0x00000000,"Liechtenstein" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\43","CountryCode",0x00010001,0x0000002b -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\43","Name",0x00000000,"Austria" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\44","CountryCode",0x00010001,0x0000002c -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\44","Name",0x00000000,"United Kingdom" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\45","CountryCode",0x00010001,0x0000002D -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\45","Name",0x00000000,"Denmark" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\46","CountryCode",0x00010001,0x0000002e -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\46","Name",0x00000000,"Sweden" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\47","CountryCode",0x00010001,0x0000002f -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\47","Name",0x00000000,"Norway" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\48","CountryCode",0x00010001,0x00000030 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\48","Name",0x00000000,"Poland" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\49","CountryCode",0x00010001,0x00000031 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\49","Name",0x00000000,"Germany" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\52","CountryCode",0x00010001,0x00000034 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\52","Name",0x00000000,"Mexico" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\54","CountryCode",0x00010001,0x00000036 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\54","Name",0x00000000,"Argentina" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\55","CountryCode",0x00010001,0x00000037 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\55","Name",0x00000000,"Brazil" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\56","CountryCode",0x00010001,0x00000038 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\56","Name",0x00000000,"Chile" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\57","CountryCode",0x00010001,0x00000039 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\57","Name",0x00000000,"Colombia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\58","CountryCode",0x00010001,0x0000003a -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\58","Name",0x00000000,"Venezuela" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\60","CountryCode",0x00010001,0x0000003c -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\60","Name",0x00000000,"Malaysia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\61","CountryCode",0x00010001,0x0000003d -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\61","Name",0x00000000,"Australia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\62","CountryCode",0x00010001,0x0000003e -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\62","Name",0x00000000,"Indonesia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\63","CountryCode",0x00010001,0x0000003f -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\63","Name",0x00000000,"Philippines" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\64","CountryCode",0x00010001,0x00000040 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\64","Name",0x00000000,"New Zealand" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\66","CountryCode",0x00010001,0x00000042 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\66","Name",0x00000000,"Thailand" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\7","CountryCode",0x00010001,0x00000007 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\7","Name",0x00000000,"Russia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\705","CountryCode",0x00010001,0x000002C1 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\705","Name",0x00000000,"Kazakhstan" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\708","CountryCode",0x00010001,0x000002C4 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\708","Name",0x00000000,"Tajikistan" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\81","CountryCode",0x00010001,0x00000051 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\81","Name",0x00000000,"Japan" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\82","CountryCode",0x00010001,0x00000052 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\82","Name",0x00000000,"Korea (Republic of)" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\850","CountryCode",0x00010001,0x00000352 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\850","Name",0x00000000,"Korea (North)" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\86","CountryCode",0x00010001,0x00000056 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\86","Name",0x00000000,"China" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\886","CountryCode",0x00010001,0x00000376 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\886","Name",0x00000000,"Taiwan" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\90","CountryCode",0x00010001,0x0000005a -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\90","Name",0x00000000,"Turkey" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\91","CountryCode",0x00010001,0x0000005b -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\91","Name",0x00000000,"India" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\93","CountryCode",0x00010001,0x0000005d -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\93","Name",0x00000000,"Afghanistan" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\960","CountryCode",0x00010001,0x000003c0 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\960","Name",0x00000000,"Maldives" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\964","CountryCode",0x00010001,0x000003c4 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\964","Name",0x00000000,"Iraq" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\966","CountryCode",0x00010001,0x000003c6 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\966","Name",0x00000000,"Saudi Arabia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\971","CountryCode",0x00010001,0x000003cb -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\971","Name",0x00000000,"United Arab Emirates" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\972","CountryCode",0x00010001,0x000003cc -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\972","Name",0x00000000,"Israel" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\974","CountryCode",0x00010001,0x000003ce -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\974","Name",0x00000000,"Qatar" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\976","CountryCode",0x00010001,0x000003d0 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\976","Name",0x00000000,"Mongolia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\977","CountryCode",0x00010001,0x000003d1 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\977","Name",0x00000000,"Nepal" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\98","CountryCode",0x00010001,0x00000062 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\98","Name",0x00000000,"Iran" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\993","CountryCode",0x00010001,0x000003e1 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\993","Name",0x00000000,"Turkmenistan" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\994","CountryCode",0x00010001,0x000003e2 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\994","Name",0x00000000,"Azerbaijan" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\995","CountryCode",0x00010001,0x000003e3 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\995","Name",0x00000000,"Georgia" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\996","CountryCode",0x00010001,0x000003e4 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\996","Name",0x00000000,"Kyrgyzstan" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\998","CountryCode",0x00010001,0x000003e6 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\998","Name",0x00000000,"Uzbekistan" - -;Cursors Schemes -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Cursors\Schemes","ReactOS Default",0x00020000,""",,,,,,,,,,,,,""" - -;PowerCfg -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg","LastID",0x00000002,"0" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg","DiskSpinDownMax",0x00000002,"3600" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg","DiskSpinDownMin",0x00000002,"3" - -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\GlobalPowerPolicy","Policies",0x00000001,\ -01,00,00,00,01,00,00,00,01,00,00,00,03,00,00,00 - -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\0","Policies",0x00000001,\ -01,00,00,00,02,00,00,00,04,00,00,00,02,00,00,00,02,00,00,00,00,00,00,00,84,03,00,00,00,00,00,00,84,03,\ -00,00,32,32,00,00,02,00,00,00,04,00,00,c0,00,00,00,00,02,00,00,00,04,00,00,c0,00,00,00,00 - -; deskadp.dll shell extension -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\Device\shellex\PropertySheetHandlers\Display Adapter CPL Extension","",0x00000000,"{42071712-76d4-11d1-8b24-00a0c9068ff3}" - -; deskmon.dll shell extension -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\Device\shellex\PropertySheetHandlers\Display Monitor CPL Extension","",0x00000000,"{42071713-76d4-11d1-8b24-00a0c9068ff3}" - -; Keyboard layout switcher -;HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run","kbswitch",0x00000000,"kbswitch.exe" - -; SvcHost services -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost",,0x00000012 -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost", "netsvcs",0x00010000,"DHCP" - -; EOF diff --git a/boot/bootdata/hivesys_i386.inf b/boot/bootdata/hivesys.inf similarity index 99% rename from boot/bootdata/hivesys_i386.inf rename to boot/bootdata/hivesys.inf index e07fcbf411e..2fb94b915de 100644 --- a/boot/bootdata/hivesys_i386.inf +++ b/boot/bootdata/hivesys.inf @@ -769,6 +769,9 @@ HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","00010415",2, HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","0001041F",2,"440" HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","00020408",2,"319" +; Lsa +HKLM,"SYSTEM\CurrentControlSet\Control\Lsa","Authentication Packages",0x00010000,"msv1_0" + ; Network HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Adapters" HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"Net" @@ -1900,4 +1903,13 @@ HKLM,"SYSTEM\Setup","SystemSetupInProgress",0x00010001,0x00000001 ; Debug channels ;HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","DEBUGCHANNEL",0x00020000,"+ole,+rpc" +[AddReg.NTarm] +; RAM Disk class driver +HKLM,"SYSTEM\CurrentControlSet\Services\Disk","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Disk","ImagePath",0x00020000,"system32\drivers\ramdisk.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\Disk","Start",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\Disk","Type",0x00010001,0x00000001 + +HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","Start",0x00010001,0x00000003 + ; EOF diff --git a/boot/bootdata/hivesys_amd64.inf b/boot/bootdata/hivesys_amd64.inf deleted file mode 100644 index e07fcbf411e..00000000000 --- a/boot/bootdata/hivesys_amd64.inf +++ /dev/null @@ -1,1903 +0,0 @@ -[Version] -Signature = "$ReactOS$" - -[AddReg] - -HKLM,"SYSTEM\CurrentControlSet\Control","CurrentUser",2,"USERNAME" -HKLM,"SYSTEM\CurrentControlSet\Control","WaitToKillServiceTimeout",2,"20000" -HKLM,"SYSTEM\CurrentControlSet\Control\Biosinfo","InfName",2,"biosinfo.inf" -HKLM,"SYSTEM\CurrentControlSet\Control\PnP",,0x00000012 - -; Critical Device Database - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0A03","Service",0x00000000,"pci" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0A03","ClassGUID",0x00000000,"{4D36E97D-E325-11CE-BFC1-08002BE10318}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0A08","Service",0x00000000,"pci" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0A08","ClassGUID",0x00000000,"{4D36E97D-E325-11CE-BFC1-08002BE10318}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#CC_0604","Service",0x00000000,"pci" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#CC_0604","ClassGUID",0x00000000,"{4D36E97D-E325-11CE-BFC1-08002BE10318}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0C08","Service",0x00000000,"acpi" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*PNP0C08","ClassGUID",0x00000000,"{4D36E97D-E325-11CE-BFC1-08002BE10318}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#CC_0C0300","Service",0x00000000,"usbuhci" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#CC_0C0300","ClassGUID",0x00000000,"{36FC9E60-C465-11CF-8056-444553540000}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#CC_0C0310","Service",0x00000000,"usbohci" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#CC_0C0310","ClassGUID",0x00000000,"{36FC9E60-C465-11CF-8056-444553540000}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#CC_0C0320","Service",0x00000000,"usbehci" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#CC_0C0320","ClassGUID",0x00000000,"{36FC9E60-C465-11CF-8056-444553540000}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\USB#Class_08&SubClass_06&Prot_50","Service",0x00000000,"usbstor" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\USB#Class_08&SubClass_06&Prot_50","ClassGUID",0x00000000,"{36FC9E60-C465-11CF-8056-444553540000}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\USB#COMPOSITE","Service",0x00000000,"usbccgp" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\USB#COMPOSITE","ClassGUID",0x00000000,"{36FC9E60-C465-11CF-8056-444553540000}" - -;HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\USB#CLASS_09","Service",0x00000000,"usbhub" -;HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\USB#CLASS_09","ClassGUID",0x00000000,"{36FC9E60-C465-11CF-8056-444553540000}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\USB#ROOT_HUB","Service",0x00000000,"usbhub" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\USB#ROOT_HUB","ClassGUID",0x00000000,"{36FC9E60-C465-11CF-8056-444553540000}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\USB#ROOT_HUB20","Service",0x00000000,"usbhub" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\USB#ROOT_HUB20","ClassGUID",0x00000000,"{36FC9E60-C465-11CF-8056-444553540000}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\GenDisk","Service",0x00000000,"disk" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\GenDisk","ClassGUID",0x00000000,"{4D36E967-E325-11CE-BFC1-08002BE10318}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\USB#Class_03","Service",0x00000000,"hidusb" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\USB#Class_03","ClassGUID",0x00000000,"{745a17a0-74d3-11d0-b6fe-00a0c90f57da}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\GENERIC_HID_DEVICE","Service",0x00000000,"hidusb" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\GENERIC_HID_DEVICE","ClassGUID",0x00000000,"{745a17a0-74d3-11d0-b6fe-00a0c90f57da}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\HID_DEVICE_SYSTEM_KEYBOARD","Service",0x00000000,"kbdhid" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\HID_DEVICE_SYSTEM_KEYBOARD","ClassGUID",0x00000000,"{4D36E96B-E325-11CE-BFC1-08002BE10318}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\HID_DEVICE_SYSTEM_MOUSE","Service",0x00000000,"mouhid" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\HID_DEVICE_SYSTEM_MOUSE","ClassGUID",0x00000000,"{4D36E96F-E325-11CE-BFC1-08002BE10318}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#CC_0001","Service",0x00000000,"VBE" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#CC_0001","ClassGUID",0x00000000,"{4D36E968-E325-11CE-BFC1-08002BE10318}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#CC_0300","Service",0x00000000,"VBE" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#CC_0300","ClassGUID",0x00000000,"{4D36E968-E325-11CE-BFC1-08002BE10318}" - -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#CC_0301","Service",0x00000000,"VBE" -HKLM,"SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\PCI#CC_0301","ClassGUID",0x00000000,"{4D36E968-E325-11CE-BFC1-08002BE10318}" - - -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot","AlternateShell",2,"cmd.exe" - -; Safe Boot drivers -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\AppMgmt","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\Base","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\Boot Bus Extender","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\Boot file system","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\CryptSvc","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\DcomLaunch","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\dmadmin","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\dmboot.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\dmio.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\dmload.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\dmserver","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\EventLog","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\File system","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\Filter","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\HelpSvc","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\Netlogon","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\PCI Configuration","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\PlugPlay","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\PNP Filter","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\Primary disk","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\RpcSs","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\SCSI Class","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\sermouse.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\sr.sys","",0x00000000,"FSFilter System Recovery" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\SRService","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\System Bus Extender","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\vga.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\vgasave.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\WinMgmt","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{36FC9E60-C465-11CF-8056-444553540000}","",0x00000000,"Universal Serial Bus controllers" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E965-E325-11CE-BFC1-08002BE10318}","",0x00000000,"CD-ROM Drive" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E967-E325-11CE-BFC1-08002BE10318}","",0x00000000,"DiskDrive" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E969-E325-11CE-BFC1-08002BE10318}","",0x00000000,"Standard floppy disk controller" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E96A-E325-11CE-BFC1-08002BE10318}","",0x00000000,"Hdc" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E96B-E325-11CE-BFC1-08002BE10318}","",0x00000000,"Keyboard" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E96F-E325-11CE-BFC1-08002BE10318}","",0x00000000,"Mouse" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E977-E325-11CE-BFC1-08002BE10318}","",0x00000000,"PCMCIA Adapters" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E97B-E325-11CE-BFC1-08002BE10318}","",0x00000000,"SCSIAdapter" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E97D-E325-11CE-BFC1-08002BE10318}","",0x00000000,"System" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{4D36E980-E325-11CE-BFC1-08002BE10318}","",0x00000000,"Floppy disk drive" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{71A27CDD-812A-11D0-BEC7-08002BE2092F}","",0x00000000,"Volume" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\{745A17A0-74D3-11D0-B6FE-00A0C90F57DA}","",0x00000000,"Human Interface Devices" - -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\AFD","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\AppMgmt","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\Base","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\Boot Bus Extender","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\Boot file system","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\Browser","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\CryptSvc","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\DcomLaunch","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\Dhcp","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\dmadmin","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\dmboot.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\dmio.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\dmload.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\dmserver","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\DnsCache","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\EventLog","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\File system","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\Filter","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\HelpSvc","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\ip6fw.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\ipnat.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\LanmanServer","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\LanmanWorkstation","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\LmHosts","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\Messenger","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\NDIS","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\NDIS Wrapper","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\Ndisuio","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\NetBIOS","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\NetBIOSGroup","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\NetBT","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\NetDDEGroup","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\Netlogon","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\NetMan","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\Network","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\NetworkProvider","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\NtLmSsp","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\PCI Configuration","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\PlugPlay","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\PNP Filter","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\PNP_TDI","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\Primary disk","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\rdpcdd.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\rdpdd.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\rdpwd.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\rdsessmgr","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\RpcSs","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\SCSI Class","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\sermouse.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\SharedAccess","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\sr.sys","",0x00000000,"FSFilter System Recovery" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\SRService","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\Streams Drivers","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\System Bus Extender","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\Tcpip","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\TDI","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\tdpipe.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\tdtcp.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\termservice","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\vga.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\vgasave.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\WinMgmt","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\WZCSVC","",0x00000000,"Service" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{36FC9E60-C465-11CF-8056-444553540000}","",0x00000000,"Universal Serial Bus controllers" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{4D36E965-E325-11CE-BFC1-08002BE10318}","",0x00000000,"CD-ROM Drive" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{4D36E967-E325-11CE-BFC1-08002BE10318}","",0x00000000,"DiskDrive" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{4D36E969-E325-11CE-BFC1-08002BE10318}","",0x00000000,"Standard floppy disk controller" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{4D36E96A-E325-11CE-BFC1-08002BE10318}","",0x00000000,"Hdc" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{4D36E96B-E325-11CE-BFC1-08002BE10318}","",0x00000000,"Keyboard" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{4D36E96F-E325-11CE-BFC1-08002BE10318}","",0x00000000,"Mouse" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}","",0x00000000,"Net" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{4D36E973-E325-11CE-BFC1-08002BE10318}","",0x00000000,"NetClient" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{4D36E974-E325-11CE-BFC1-08002BE10318}","",0x00000000,"NetService" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{4D36E975-E325-11CE-BFC1-08002BE10318}","",0x00000000,"NetTrans" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{4D36E977-E325-11CE-BFC1-08002BE10318}","",0x00000000,"PCMCIA Adapters" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{4D36E97B-E325-11CE-BFC1-08002BE10318}","",0x00000000,"SCSIAdapter" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{4D36E97D-E325-11CE-BFC1-08002BE10318}","",0x00000000,"System" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{4D36E980-E325-11CE-BFC1-08002BE10318}","",0x00000000,"Floppy disk drive" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{71A27CDD-812A-11D0-BEC7-08002BE2092F}","",0x00000000,"Volume" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\{745A17A0-74D3-11D0-B6FE-00A0C90F57DA}","",0x00000000,"Human Interface Devices" - -; ReactOS specific - required to load in Safe Mode and for debugging in Safe Mode (until vga.sys and vgasave.sys are implemented) -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\Debug","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\vgamp.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\vbemp.sys","",0x00000000,"Driver" - -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\Debug","",0x00000000,"Driver Group" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\vgamp.sys","",0x00000000,"Driver" -HKLM,"SYSTEM\CurrentControlSet\Control\SafeBoot\Network\vbemp.sys","",0x00000000,"Driver" - -; Other -HKLM,"SYSTEM\CurrentControlSet\Control\Arbiters",,0x00000012 - -HKLM,"SYSTEM\CurrentControlSet\Control\Arbiters\AllocationOrder","Root",0x000a0001,\ -a8,04,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,01,00,00,00,01,00,01,00,24,00,00,00,00,01,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,05,00,00,00,00,00,00,ff,ff,00,00,00,00,00,\ -00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,40,01,00,00,00,00,00,00,\ -7f,01,00,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -02,00,00,00,00,00,00,ff,02,00,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,03,00,00,00,00,00,00,6f,03,00,00,00,00,00,00,08,01,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,78,03,00,00,00,00,00,00,7a,03,00,00,\ -00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,e8,02,00,00,00,\ -00,00,00,ff,02,00,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,f0,01,00,00,00,00,00,00,f8,01,00,00,00,00,00,00,08,01,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,b0,03,00,00,00,00,00,00,cf,03,00,00,00,00,00,00,\ -08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,e8,03,00,00,00,00,00,00,ff,\ -03,00,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,ce,01,\ -00,00,00,00,00,00,cf,01,00,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,01,00,00,00,00,00,00,ff,03,00,00,00,00,00,00,08,02,00,00,\ -00,00,00,00,09,00,00,00,09,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,08,02,00,00,00,00,00,00,08,00,00,00,08,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,08,02,00,00,00,00,00,00,07,00,00,00,07,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,08,02,00,00,00,00,00,00,\ -0b,00,00,00,0b,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,08,\ -02,00,00,00,00,00,00,0a,00,00,00,0a,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,08,02,00,00,00,00,00,00,02,00,00,00,02,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,02,00,00,00,00,00,00,03,00,00,00,\ -03,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,08,02,00,00,00,\ -00,00,00,05,00,00,00,05,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,08,02,00,00,00,00,00,00,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,08,02,00,00,00,00,00,00,0f,00,00,00,0f,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,08,02,00,00,00,00,00,00,0d,\ -00,00,00,0d,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,08,02,\ -00,00,00,00,00,00,0e,00,00,00,0e,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,08,02,00,00,00,00,00,00,06,00,00,00,06,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,08,02,00,00,00,00,00,00,0c,00,00,00,0c,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,08,02,00,00,00,00,\ -00,00,01,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,08,02,00,00,00,00,00,00,00,00,ff,ff,fe,ff,ff,ff,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,08,02,00,00,00,00,00,00,10,00,00,00,ff,ff,fe,ff,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,10,00,00,00,00,00,ff,ff,ff,ff,ff,ff,ff,ff,08,03,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,0f,00,00,00,00,00,ff,ff,0f,00,\ -00,00,00,00,08,03,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,08,00,00,\ -00,00,00,ff,ff,0b,00,00,00,00,00,08,03,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,08,00,00,00,00,00,ff,ff,0f,00,00,00,00,00,08,03,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,08,00,00,00,00,00,ff,ff,bf,ff,00,00,00,00,\ -00,04,00,00,00,00,00,00,06,00,00,00,0f,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,08,04,00,00,00,00,00,00,03,00,00,00,04,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,08,04,00,00,00,00,00,00,00,00,00,\ -00,0f,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 - -HKLM,"SYSTEM\CurrentControlSet\Control\Arbiters\AllocationOrder","Pci",0x000a0001,\ -48,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,01,00,00,00,01,00,01,00,11,00,00,00,00,01,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,ff,ff,ff,ff,00,00,00,00,\ -08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,05,00,00,00,00,00,00,ff,\ -ff,00,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,40,01,\ -00,00,00,00,00,00,7f,01,00,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,02,00,00,00,00,00,00,ff,02,00,00,00,00,00,00,08,01,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,00,00,00,6f,03,00,00,00,\ -00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,78,03,00,00,00,00,\ -00,00,7a,03,00,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,e8,02,00,00,00,00,00,00,ff,02,00,00,00,00,00,00,08,01,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,f0,01,00,00,00,00,00,00,f8,01,00,00,00,00,00,00,08,\ -01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,b0,03,00,00,00,00,00,00,cf,03,\ -00,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,e8,03,00,\ -00,00,00,00,00,ff,03,00,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,ce,01,00,00,00,00,00,00,cf,01,00,00,00,00,00,00,08,01,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,ff,03,00,00,00,00,\ -00,00,00,03,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,10,00,00,00,00,\ -00,ff,ff,ff,ff,ff,ff,ff,ff,08,03,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,0f,00,00,00,00,00,ff,ff,0f,00,00,00,00,00,08,03,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,08,00,00,00,00,00,ff,ff,0b,00,00,00,00,00,08,03,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,08,00,00,00,00,00,ff,ff,0f,\ -00,00,00,00,00,08,03,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,08,00,\ -00,00,00,00,ff,ff,bf,ff,00,00,00,00 - -HKLM,"SYSTEM\CurrentControlSet\Control\Arbiters\ReservedResources","Pci",0x00000002, "PCStandard" -HKLM,"SYSTEM\CurrentControlSet\Control\Arbiters\ReservedResources","Root",0x00000002, "PCStandard" -HKLM,"SYSTEM\CurrentControlSet\Control\Arbiters\ReservedResources","PCStandard",0x000a0001,\ -08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,01,00,00,00,01,00,01,00,07,00,00,00,00,01,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,f8,02,00,00,00,00,00,00,ff,02,00,00,00,\ -00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,b0,03,00,00,00,00,\ -00,00,bb,03,00,00,00,00,00,00,08,01,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,bc,03,00,00,00,00,00,00,be,03,00,00,00,00,00,00,08,01,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,c0,03,00,00,00,00,00,00,df,03,00,00,00,00,00,00,08,\ -01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,f8,03,00,00,00,00,00,00,ff,03,\ -00,00,00,00,00,00,00,03,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,0a,\ -00,00,00,00,00,ff,ff,0b,00,00,00,00,00,08,03,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,f0,ff,00,00,00,00,ff,ff,ff,ff,00,00,00,00 - -HKLM,"SYSTEM\CurrentControlSet\Control\FileSystem","NtfsDisable8dot3NameCreation",0x00010003,0 -HKLM,"SYSTEM\CurrentControlSet\Control\FileSystem","Win31FileSystem",0x00010001,0 -HKLM,"SYSTEM\CurrentControlSet\Control\FileSystem","Win95TruncatedExtensions",0x00010001,1 - -; Device classes (this list is incomplete... and should be generated from .inf files during installation) -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Client" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetClient" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}","Icon",0x00000000,"-7" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}","Installer32",0x00000000,"NetCfgx.dll,NetClassInstaller" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}","NoDisplayClass",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}","NoInstallClass",0x00000000,"1" - -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Service" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetService" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}","Icon",0x00000000,"-7" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}","Installer32",0x00000000,"NetCfgx.dll,NetClassInstaller" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}","NoDisplayClass",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}","NoInstallClass",0x00000000,"1" - -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Protocol" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetTrans" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}","Icon",0x00000000,"-6" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}","Installer32",0x00000000,"NetCfgx.dll,NetClassInstaller" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}","NoDisplayClass",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}","NoInstallClass",0x00000000,"1" - -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{9D6D66A6-0B0C-4563-9077-A0E9A7955AE4}",,0x00000000,"Ramdisk" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{9D6D66A6-0B0C-4563-9077-A0E9A7955AE4}","Class",0x00000000,"Ramdisk" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{9D6D66A6-0B0C-4563-9077-A0E9A7955AE4}","Icon",0x00000000,"-5" - -; Default computer name settings -HKLM,"SYSTEM\CurrentControlSet\Control\ComputerName",,0x00000012 -HKLM,"SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName","ComputerName",0x00000002,"COMPUTERNAME" - -; Device classes key -HKLM,"SYSTEM\CurrentControlSet\Control\DeviceClasses",,0x00000012 - -; HAL Chipset Hacks -HKLM,"SYSTEM\CurrentControlSet\Control\HAL","10390530",0x00010001,0x1 -HKLM,"SYSTEM\CurrentControlSet\Control\HAL","10390620",0x00010001,0x1 -HKLM,"SYSTEM\CurrentControlSet\Control\HAL","10B90533",0x00010001,0x1 -HKLM,"SYSTEM\CurrentControlSet\Control\HAL","10B91533",0x00010001,0x1 -HKLM,"SYSTEM\CurrentControlSet\Control\HAL","11060596",0x00010001,0x1 -HKLM,"SYSTEM\CurrentControlSet\Control\HAL","11060686",0x00010001,0x5 -HKLM,"SYSTEM\CurrentControlSet\Control\HAL","1166004F",0x00010001,0x1 -HKLM,"SYSTEM\CurrentControlSet\Control\HAL","11660050",0x00010001,0x1 -HKLM,"SYSTEM\CurrentControlSet\Control\HAL","11660200",0x00010001,0x1 -HKLM,"SYSTEM\CurrentControlSet\Control\HAL","80862410",0x00010001,0x8 -HKLM,"SYSTEM\CurrentControlSet\Control\HAL","80862420",0x00010001,0x8 -HKLM,"SYSTEM\CurrentControlSet\Control\HAL","80862440",0x00010001,0x8 -HKLM,"SYSTEM\CurrentControlSet\Control\HAL","8086244C",0x00010001,0x8 -HKLM,"SYSTEM\CurrentControlSet\Control\HAL","80862480",0x00010001,0x8 -HKLM,"SYSTEM\CurrentControlSet\Control\HAL","8086248C",0x00010001,0x8 -HKLM,"SYSTEM\CurrentControlSet\Control\HAL","80867110",0x00010001,0x1 - -; Hardware profile settings -HKLM,"SYSTEM\CurrentControlSet\Control\IDConfigDB",,0x00000012 -HKLM,"SYSTEM\CurrentControlSet\Control\IDConfigDB","CurrentConfig",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0000","FriendlyName",0x00000000,"New Hardware Profile" - -; Keyboard Layouts -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000401","Layout File",0x00000000,"kbda1.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000401","Layout Text",0x00000000,"Arabic (101)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000401","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5084" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010401","Layout File",0x00000000,"kbda2.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010401","Layout Text",0x00000000,"Arabic (102)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010401","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5085" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020401","Layout File",0x00000000,"kbda3.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020401","Layout Text",0x00000000,"Arabic (102) AZERTY" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020401","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5086" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000402","Layout File",0x00000000,"kbdbgm.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000402","Layout Text",0x00000000,"Bulgarian BDS 5237-1978" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000402","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5136" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020402","Layout File",0x00000000,"kbdbgt.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020402","Layout Text",0x00000000,"Bulgarian phonetic classic" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020402","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5134" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030402","Layout File",0x00000000,"kbdbga.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030402","Layout Text",0x00000000,"Bulgarian phonetic BDS 5237-2006" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030402","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5135" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000406","Layout File",0x00000000,"kbdda.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000406","Layout Text",0x00000000,"Danish" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000406","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5007" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030407","Layout File",0x00000000,"kbdgerg.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030407","Layout Text",0x00000000,"German (de_ergo)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030407","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5139" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020407","Layout File",0x00000000,"kbdgneo.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020407","Layout Text",0x00000000,"German (NEO-1.1)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020407","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5138" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010407","Layout File",0x00000000,"kbdgrist.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010407","Layout Text",0x00000000,"German (RISTOME)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010407","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5137" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000407","Layout File",0x00000000,"kbdgr.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000407","Layout Text",0x00000000,"German" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000407","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5011" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000807","Layout File",0x00000000,"kbdsg.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000807","Layout Text",0x00000000,"Swiss (German)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000807","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5024" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000408","Layout File",0x00000000,"kbdhe.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000408","Layout Text",0x00000000,"Greek" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000408","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5046" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000409","Layout File",0x00000000,"kbdus.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000409","Layout Text",0x00000000,"United States" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5000" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000809","Layout File",0x00000000,"kbduk.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000809","Layout Text",0x00000000,"United Kingdom" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000809","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5025" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010409","Layout File",0x00000000,"kbddv.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010409","Layout Id", 0x00000000,"0002" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010409","Layout Text",0x00000000,"US-Dvorak" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5092" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020409","Layout File",0x00000000,"kbdusx.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020409","Layout Id", 0x00000000,"0001" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020409","Layout Text",0x00000000,"US International" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5026" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030409","Layout File",0x00000000,"kbdusl.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030409","Layout Id", 0x00000000,"001A" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030409","Layout Text",0x00000000,"US Dvorak for left hand" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5027" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00040409","Layout File",0x00000000,"kbdusr.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00040409","Layout Id", 0x00000000,"001B" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00040409","Layout Text",0x00000000,"US Dvorak for right hand" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00040409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5028" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00050409","Layout File",0x00000000,"kbdusa.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00050409","Layout Id", 0x00000000,"000B" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00050409","Layout Text",0x00000000,"US English (IBM Arabic 238_L)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00050409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5123" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00001809","Layout File",0x00000000,"kbdir.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00001809","Layout Text",0x00000000,"Irish" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00001809","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5014" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040a","Layout File",0x00000000,"kbdes.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040a","Layout Text",0x00000000,"Spanish" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5020" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080a","Layout File",0x00000000,"kbdla.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080a","Layout Text",0x00000000,"Latin American" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5017" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040b","Layout File",0x00000000,"kbdfi.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040b","Layout Text",0x00000000,"Finnish" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040b","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5009" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040c","Layout File",0x00000000,"kbdfr.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040c","Layout Text",0x00000000,"French" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5010" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040d","Layout File",0x00000000,"kbdheb.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040d","Layout Text",0x00000000,"Hebrew" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040d","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5083" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040e","Layout File",0x00000000,"kbdhu.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040e","Layout Text",0x00000000,"Hungarian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040e","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5033" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040f","Layout File",0x00000000,"kbdic.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040f","Layout Text",0x00000000,"Icelandic" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040f","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5013" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000410","Layout File",0x00000000,"kbdit.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000410","Layout Text",0x00000000,"Italian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000410","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5015" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000411","Layout File",0x00000000,"kbdja.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000411","Layout Text",0x00000000,"Japanese" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000411","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5061" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000411","Layout Id",0x00000000,"0001" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041c","Layout File",0x00000000,"kbdal.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041c","Layout Text",0x00000000,"Albanian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5029" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041f","Layout File",0x00000000,"kbdtuq.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041f","Layout Text",0x00000000,"Turkish Q" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041f","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5060" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041f","Layout File",0x00000000,"kbdtuf.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041f","Layout Text",0x00000000,"Turkish F" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041f","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5059" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041f","Layout Id",0x00000000,"0014" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080c","Layout File",0x00000000,"kbdbe.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080c","Layout Text",0x00000000,"Belgian (French)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5002" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000413","Layout File",0x00000000,"kbdne.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000413","Layout Text",0x00000000,"Dutch" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000413","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5008" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000813","Layout File",0x00000000,"kbdbe.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000813","Layout Text",0x00000000,"Belgian (Dutch)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000813","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5001" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000415","Layout File",0x00000000,"kbdpl1.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000415","Layout Text",0x00000000,"Polish (Programmers)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000415","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5035" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010415","Layout File",0x00000000,"kbdpl.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010415","Layout Text",0x00000000,"Polish (214)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010415","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5036" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010416","Layout File",0x00000000,"kbdbr.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010416","Layout Text",0x00000000,"Portuguese (Brazilian ABNT2)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010416","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5126" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000816","Layout File",0x00000000,"kbdpo.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000816","Layout Text",0x00000000,"Portuguese (Portugal)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000816","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5019" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000418","Layout File",0x00000000,"kbdro.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000418","Layout Text",0x00000000,"Romanian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000418","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5037" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000419","Layout File",0x00000000,"kbdru.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000419","Layout Text",0x00000000,"Russian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000419","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5055" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010419","Layout File",0x00000000,"kbdru1.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010419","Layout Text",0x00000000,"Russian (Typewriter)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010419","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5056" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041a","Layout File",0x00000000,"kbdcr.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041a","Layout Text",0x00000000,"Croatian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5030" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041b","Layout File",0x00000000,"kbdsk.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041b","Layout Text",0x00000000,"Slovak" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041b","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5039" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041b","Layout File",0x00000000,"kbdsk1.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041b","Layout Text",0x00000000,"Slovak (QWERTY)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041b","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5040" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041d","Layout File",0x00000000,"kbdsw.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041d","Layout Text",0x00000000,"Swedish" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041d","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5022" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041e","Layout File",0x00000000,"kbdth0.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041e","Layout Text",0x00000000,"Thai Kedmanee" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041e","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5079" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041e","Layout File",0x00000000,"kbdth1.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041e","Layout Text",0x00000000,"Thai Pattachote" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041e","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5080" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0002041e","Layout File",0x00000000,"kbdth2.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0002041e","Layout Text",0x00000000,"Thai Kedmanee (non-ShiftLock)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0002041e","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5081" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0003041e","Layout File",0x00000000,"kbdth3.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0003041e","Layout Text",0x00000000,"Thai Pattachote (non-ShiftLock)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0003041e","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5082" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000422","Layout File",0x00000000,"kbdur.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000422","Layout Text",0x00000000,"Ukrainian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000422","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5058" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010422","Layout File",0x00000000,"kbdurs.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010422","Layout Text",0x00000000,"Ukrainian (Student)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010422","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5141" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000423","Layout File",0x00000000,"kbdblr.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000423","Layout Text",0x00000000,"Belarusian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000423","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5052" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000425","Layout File",0x00000000,"kbdest.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000425","Layout Text",0x00000000,"Estonian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000425","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5042" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000426","Layout File",0x00000000,"kbdlv.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000426","Layout Text",0x00000000,"Latvian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000426","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5043" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010427","Layout File",0x00000000,"kbdlt1.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010427","Layout Text",0x00000000,"Lithuanian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010427","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5088" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042a","Layout File",0x00000000,"kbdvntc.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042a","Layout Text",0x00000000,"Vietnamese" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5118" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042b","Layout File",0x00000000,"kbdarme.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042b","Layout Text",0x00000000,"Armenian Eastern" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042b","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5120" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001042b","Layout File",0x00000000,"kbdarmw.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001042b","Layout Text",0x00000000,"Armenian Western" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001042b","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5121" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042c","Layout File",0x00000000,"kbdazel.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042c","Layout Text",0x00000000,"Azeri Latin" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5117" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000082c","Layout File",0x00000000,"kbdaze.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000082c","Layout Text",0x00000000,"Azeri Cyrillic" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000082c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5115" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042f","Layout File",0x00000000,"kbdmac.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042f","Layout Text",0x00000000,"Macedonian (FYRO)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042f","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5109" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000437","Layout File",0x00000000,"kbdgeo.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000437","Layout Text",0x00000000,"Georgian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000437","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5119" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000439","Layout File",0x00000000,"kbdindev.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000439","Layout Text",0x00000000,"Devanagari - INSCRIPT" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000439","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5096" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000043f","Layout File",0x00000000,"kbdkaz.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000043f","Layout Text",0x00000000,"Kazakh" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000043f","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5113" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000843","Layout File",0x00000000,"kbduzb.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000843","Layout Text",0x00000000,"Uzbek (Cyrillic)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000843","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5114" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000444","Layout File",0x00000000,"kbdtat.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000444","Layout Text",0x00000000,"Tatar" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000444","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5116" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000445","Layout File",0x00000000,"kbdinben.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000445","Layout Text",0x00000000,"Bengali" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000445","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5135" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000447","Layout File",0x00000000,"kbdinguj.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000447","Layout Text",0x00000000,"Gujarati" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000447","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5097" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044c","Layout File",0x00000000,"kbdinmal.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044c","Layout Text",0x00000000,"Malayalam" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5139" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044d","Layout File",0x00000000,"kbdinasa.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044d","Layout Text",0x00000000,"ASSAMESE - INSCRIPT" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044d","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5177" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000455","Layout File",0x00000000,"kbdbur.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000455","Layout Text",0x00000000,"Burmese" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000455","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5140" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000414","Layout File",0x00000000,"kbdno.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000414","Layout Text",0x00000000,"Norwegian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000414","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5018" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000405","Layout File",0x00000000,"kbdcz.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000405","Layout Text",0x00000000,"Czech" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000405","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5031" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010405","Layout File",0x00000000,"kbdcz1.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010405","Layout Text",0x00000000,"Czech (QWERTY)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010405","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5032" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00011009","Layout File",0x00000000,"kbdcan.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00011009","Layout Id", 0x00000000,"0020" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00011009","Layout Text",0x00000000,"Canadian Multilingual Standard" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00011009","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5110" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c0c","Layout File",0x00000000,"kbdfc.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c0c","Layout Text",0x00000000,"Canadian French (Legacy)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c0c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5005" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c1a","Layout File",0x00000000,"kbdycc.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c1a","Layout Text",0x00000000,"Serbian (Cyrillic)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c1a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5057" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000081a","Layout File",0x00000000,"kbdycl.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000081a","Layout Text",0x00000000,"Serbian (Latin)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000081a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5038" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000412","Layout File",0x00000000,"kbdko.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000412","Layout Text",0x00000000,"Korean" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000412","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5063" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000412","Layout Id",0x00000000,"0001" - -; Keyboard layouts -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout",,0x00000012 -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000402",2,"bg" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000404",2,"ch" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000405",2,"cz" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000406",2,"dk" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000407",2,"gr" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000408",2,"gk" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000409",2,"us" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000040A",2,"sp" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000040B",2,"su" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000040C",2,"fr" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000040E",2,"hu" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000040F",2,"is" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000410",2,"it" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000411",2,"jp" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000412",2,"ko" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000413",2,"nl" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000414",2,"no" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000415",2,"pl" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000416",2,"br" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000418",2,"ro" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000419",2,"ru" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000041A",2,"yu" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000041B",2,"sl" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000041C",2,"us" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000041D",2,"sv" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000041F",2,"tr" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000422",2,"us" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000423",2,"us" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000424",2,"yu" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000425",2,"et" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000426",2,"us" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000427",2,"us" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000804",2,"ch" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000807",2,"sg" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000809",2,"uk" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000080A",2,"la" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000080C",2,"be" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000813",2,"be" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000816",2,"po" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000C0C",2,"cf" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000C1A",2,"us" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00001009",2,"us" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000100C",2,"sf" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00001809",2,"us" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010402",2,"us" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010405",2,"cz" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010407",2,"gr" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010408",2,"gk" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010409",2,"dv" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0001040A",2,"sp" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0001040E",2,"hu" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010410",2,"it" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010415",2,"pl" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010419",2,"ru" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0001041B",2,"sl" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0001041F",2,"tr" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010426",2,"us" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010C0C",2,"cf" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010C1A",2,"us" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00020408",2,"gk" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00020409",2,"us" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00030409",2,"usl" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00040409",2,"usr" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00050408",2,"gk" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","00000410",2,"141" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","0000041F",2,"179" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","00010408",2,"220" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","00010410",2,"142" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","00010415",2,"214" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","0001041F",2,"440" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","00020408",2,"319" - -; Network -HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Adapters" -HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"Net" -HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E973-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Client" -HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E973-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetClient" -HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E974-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Service" -HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E974-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetService" -HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E975-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Protocol" -HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E975-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetTrans" -HKLM,"SYSTEM\CurrentControlSet\Control\NetworkProvider\Order","ProviderOrder",0x00000000,"" - -; NLS Files -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","37",0x00000000,"c_037.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","424",0x00000000,"c_424.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","437",0x00000000,"c_437.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","500",0x00000000,"c_500.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","737",0x00000000,"c_737.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","775",0x00000000,"c_775.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","850",0x00000000,"c_850.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","852",0x00000000,"c_852.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","855",0x00000000,"c_855.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","856",0x00000000,"c_856.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","857",0x00000000,"c_857.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","860",0x00000000,"c_860.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","861",0x00000000,"c_861.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","862",0x00000000,"c_862.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","863",0x00000000,"c_863.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","864",0x00000000,"c_864.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","865",0x00000000,"c_865.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","866",0x00000000,"c_866.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","869",0x00000000,"c_869.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","874",0x00000000,"c_874.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","875",0x00000000,"c_875.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","878",0x00000000,"c_878.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","932",0x00000000,"c_932.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","936",0x00000000,"c_936.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","949",0x00000000,"c_949.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","950",0x00000000,"c_950.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1006",0x00000000,"c_1006.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1026",0x00000000,"c_1026.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1250",0x00000000,"c_1250.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1251",0x00000000,"c_1251.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1252",0x00000000,"c_1252.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1253",0x00000000,"c_1253.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1254",0x00000000,"c_1254.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1255",0x00000000,"c_1255.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1256",0x00000000,"c_1256.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1257",0x00000000,"c_1257.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1258",0x00000000,"c_1258.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","10000",0x00000000,"c_10000.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","10006",0x00000000,"c_10006.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","10007",0x00000000,"c_10007.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","10029",0x00000000,"c_10029.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","10079",0x00000000,"c_10079.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","10081",0x00000000,"c_10081.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","20866",0x00000000,"c_20866.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","21866",0x00000000,"c_21866.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28591",0x00000000,"c_28591.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28592",0x00000000,"c_28592.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28593",0x00000000,"c_28593.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28594",0x00000000,"c_28594.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28595",0x00000000,"c_28595.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28596",0x00000000,"c_28596.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28597",0x00000000,"c_28597.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28598",0x00000000,"c_28598.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28599",0x00000000,"c_28599.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28600",0x00000000,"c_28600.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28603",0x00000000,"c_28603.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28604",0x00000000,"c_28604.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28605",0x00000000,"c_28605.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28606",0x00000000,"c_28606.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","ACP",0x00000000,"1252" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","OEMCP",0x00000000,"437" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","MACCP",0x00000000,"10000" - -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage\EUDCCodeRange","932",2,"F040-F9FC" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage\EUDCCodeRange","936",2,"AAA1-AFFE,F8A1-FEFE,A140-A7A0" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage\EUDCCodeRange","949",2,"C9A1-C9FE,FEA1-FEFE" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage\EUDCCodeRange","950",2,"FA40-FEFE,8E40-A0FE,8140-8DFE,C6A1-C8FE" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage\EUDCCodeRange","Unicode",2,"E000-F8FF" - -; NLS Language settings -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0402",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0403",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0404",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0804",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0c04",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","1004",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","1404",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0405",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0406",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0407",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0807",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0c07",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","1407",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0408",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0409",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0809",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0c09",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","1009",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","1409",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","1809",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","1c09",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","2009",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","3009",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","3409",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","040a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","080a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0c0a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","100a",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","140a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","180a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","1c0a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","200a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","240a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","280a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","2c0a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","300a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","340a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","380a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","3c0a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","400a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","440a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","480a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","4c0a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","500a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","040b",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","040c",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","080c",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0c0c",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","100c",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","140c",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","180c",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","040d",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","040e",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","040f",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0410",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0810",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0411",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0412",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0413",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0414",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0813",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0414",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0814",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0415",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0416",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0816",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0417",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0418",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0419",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","041a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","081a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0c1a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","041b",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","041c",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","041d",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","081d",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","041e",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","041f",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0420",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0421",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0422",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0423",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0424",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0425",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0426",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0427",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0429",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","042a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","042b",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","042c",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","082c",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","042d",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","042f",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0436",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0437",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0438",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0439",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","043e",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","083e",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","043f",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0440",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0441",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0443",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0843",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0445",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0455",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0456",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","048f",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0490",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","Default",0x00000000,"0409" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","InstallLanguage",0x00000000,"0409" - -; Supported and installed locales -; If you add/uncomment an entry here, please also add the appropriate Language -; in the previous section. -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale",,0x00000012 -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000402",0x00000000,"5" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000403",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000404",0x00000000,"9" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000804",0x00000000,"a" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000405",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000406",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000407",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000807",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000c07",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00001407",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000408",0x00000000,"4" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000409",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000809",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000c09",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00001009",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00001409",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00001809",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00001c09",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00002009",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00003009",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00003409",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000040a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000080a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000c0a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000100a",0x00000000,"1" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000140a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000180a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00001c0a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000200a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000240a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000280a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00002c0a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000300a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000340a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000380a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00003c0a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000400a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000440a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000480a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00004c0a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000500a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000040b",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000040c",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000080c",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000c0c",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000100c",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000140c",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000180c",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000040d",0x00000000,"c" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000040e",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000040f",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000410",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000810",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000411",0x00000000,"7" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000412",0x00000000,"8" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000413",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000813",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000414",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000814",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000415",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000416",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000816",0x00000000,"1" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000417",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000418",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000419",0x00000000,"5" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000041a",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000081a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000c1a",0x00000000,"5" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000041b",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000041c",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000041d",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000081d",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000041e",0x00000000,"b" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000041f",0x00000000,"6" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000420",0x00000000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000421",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000422",0x00000000,"5" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000423",0x00000000,"5" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000424",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000425",0x00000000,"3" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000426",0x00000000,"3" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000427",0x00000000,"3" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000429",0x00000000,"" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000042a",0x00000000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000042b",0x00000000,"11" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000042c",0x00000000,"6" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000082c",0x00000000,"5" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000042d",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000042f",0x00000000,"5" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000436",0x00000000,"1" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000437",0x00000000,"10" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000438",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000439",0x00000000,"f" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000043e",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000083e",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000043f",0x00000000,"5" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000440",0x00000000,"5" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000441",0x00000000,"1" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000443",0x00000000,"6" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000843",0x00000000,"5" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000445",0x00000000,"f" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000455",0x00000000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000456",0x00000000,"1" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000048f",0x00000000,"1" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000490",0x00000000,"1" - -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","1",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","2",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","3",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","4",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","5",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","6",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","7",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","8",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","9",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","10",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","11",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","b",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","c",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","d",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","e",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","f",0x00000000,"1" - -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale\Alternate Sorts","00010407",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale\Alternate Sorts","0001040e",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale\Alternate Sorts","00010437",0x00000000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale\Alternate Sorts","00020804",0x00000000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale\Alternate Sorts","00021004",0x00000000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale\Alternate Sorts","00021404",0x00000000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale\Alternate Sorts","00030404",0x00000000,"" - -HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82441FX",0x00030003,\ -01,00,00,00,86,80,37,12,00,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82439HX",0x00030003,\ -01,00,00,00,86,80,50,12,00,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82439TX",0x00030003,\ -01,00,00,00,86,80,00,71,00,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82443LX/EX",0x00030003,\ -01,00,00,00,86,80,80,71,00,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82443BX1",0x00030003,\ -01,00,00,00,86,80,90,71,00,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82443BX2",0x00030003,\ -01,00,00,00,86,80,92,71,00,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82443GX",0x00030003,\ -01,00,00,00,86,80,a0,71,00,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","VIA Tech1",0x00030003,\ -01,00,00,00,06,11,01,05,00,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","VIA Tech2",0x00030003,\ -01,00,00,00,06,11,91,06,00,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Toshiba",0x00030003,\ -01,00,00,00,79,11,01,06,00,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Ali",0x00030003,\ -01,00,00,00,b9,10,21,15,00,00,00,00,00,00,00,00 - -HKLM,"SYSTEM\CurrentControlSet\Control\Print","MajorVersion",0x00010001,2 -HKLM,"SYSTEM\CurrentControlSet\Control\Print","MinorVersion",0x00010003,0 -HKLM,"SYSTEM\CurrentControlSet\Control\Print","PriorityClass",0x00010003,0 -HKLM,"SYSTEM\CurrentControlSet\Control\Print\Environments",,0x00000012 -HKLM,"SYSTEM\CurrentControlSet\Control\Print\Monitors",,0x00000012 -HKLM,"SYSTEM\CurrentControlSet\Control\Print\Monitors\Local Port","Driver",2,"localspl.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Print\Printers",,0x00000012 - -HKLM,"SYSTEM\CurrentControlSet\Control\ProductOptions","ProductType",2,"ServerNT" -HKLM,"SYSTEM\CurrentControlSet\Control\ProductOptions","ProductSuite",0x00010002,"Terminal Server" -; ReactOS specific - by default we report ourselves as Server for the user, -; but we can also report as Workstation if some application needs it. -HKLM,"SYSTEM\CurrentControlSet\Control\ReactOS\Settings\Version","ReportAsWorkstation",0x00010001,0x00000000 -; Some installers check for SP1 -HKLM,"SYSTEM\CurrentControlSet\Control\Windows","CSDVersion",0x00010001,0x00000100 - -HKLM,"SYSTEM\CurrentControlSet\Control\SecurityProviders","SecurityProviders",2,"schannel.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\SecurityProviders\SaslProfiles",,0x00000012 - -; Service groups -HKLM,"SYSTEM\CurrentControlSet\Control\ServiceGroupOrder","List",0x00010000, \ - "Boot Bus Extender", \ - "System Bus Extender", \ - "SCSI Miniport", \ - "Primary Disk", \ - "SCSI Class", \ - "Boot File System", \ - "Base", \ - "Pointer Port", \ - "Keyboard Port", \ - "Pointer Class", \ - "Keyboard Class", \ - "Debug", \ - "Video Init", \ - "Video", \ - "Video Save", \ - "File System", \ - "Event log", \ - "COM Infrastructure", \ - "NDIS", \ - "PNP_TDI", \ - "TDI", \ - "PlugPlay", \ - "SpoolerGroup", \ - "UIGroup", \ - "Extended Base" - -; Set the timeout for directx/ReactX graphic surface lock see _EDD_DIRECTDRAW_GLOBAL struct for more info -HKLM,"SYSTEM\CurrentControlSet\Control\GraphicsDrivers\DCI","Timeout",0x00010001,0x00000007 -HKLM,"SYSTEM\CurrentControlSet\Control\GraphicsDrivers\UseNewKey",,0x00000012 - -; Group order, the first DWORD is the count of entries, -; the following dwords are the tag entries for the load order. -HKLM,"SYSTEM\CurrentControlSet\Control\GroupOrderList","Video Save", 0x00000001, \ - 0x02, 0x00, 0x00, 0x00, \ - 0x01, 0x00, 0x00, 0x00, \ - 0x02, 0x00, 0x00, 0x00 -HKLM,"SYSTEM\CurrentControlSet\Control\GroupOrderList","SCSI Miniport", 0x00000001, \ - 0x02, 0x00, 0x00, 0x00, \ - 0x10, 0x00, 0x00, 0x00, \ - 0x20, 0x00, 0x00, 0x00 - -; Session Manager stuff -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","BootExecute", 0x00010000, \ - "autocheck autochk *" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","GlobalFlag", 0x00010003, 0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","ObjectDirectories",0x00010000, \ - "\Windows", \ - "\RPC Control" - -; DOS devices -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","AUX",0x00000000,"\DosDevices\COM1" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","MAILSLOT",0x00000000,"\Device\MailSlot" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","NUL",0x00000000,"\Device\Null" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","PIPE",0x00000000,"\Device\NamedPipe" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","PRN",0x00000000,"\DosDevices\LPT1" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","UNC",0x00000000,"\Device\Mup" - -; System environment settings -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","ComSpec",0x00020000,"%SystemRoot%\system32\cmd.exe" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","Path",0x00020000,"%SystemRoot%\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\system32\wbem" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","windir",0x00020000,"%SystemRoot%" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","TEMP",0x00020000,"%SystemDrive%\TEMP" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","TMP",0x00020000,"%SystemDrive%\TEMP" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","PATHEXT",0x00000000,".COM;.EXE;.BAT;.CMD" - - -; Known DLLs -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","DllDirectory",0x00020000,"%SystemRoot%\system32" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","advapi32",0x00000000,"advapi32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","comdlg32",0x00000000,"comdlg32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","gdi32",0x00000000,"gdi32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","imagehlp",0x00000000,"imagehlp.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","kernel32",0x00000000,"kernel32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","lz32",0x00000000,"lz32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","msvcrt",0x00000000,"msvcrt.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","ole32",0x00000000,"ole32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","oleaut32",0x00000000,"oleaut32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olecli32",0x00000000,"olecli32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olesvr32",0x00000000,"olesvr32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olethk32",0x00000000,"olethk32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","rpcrt4",0x00000000,"rpcrt4.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","setupapi",0x00000000,"setupapi.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","shell32",0x00000000,"shell32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","url",0x00000000,"url.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","urlmon",0x00000000,"urlmon.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","user32",0x00000000,"user32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","version",0x00000000,"version.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","wininet",0x00000000,"wininet.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","wldap32",0x00000000,"wldap32.dll" - -; Memory Management -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management",,0x00000012 - -; SubSystems -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems","Debug",0x00020000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems","Kmode",0x00020000,"%SystemRoot%\system32\win32k.sys" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems","Optional",0x00010000,"Posix" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems","Posix",0x00020000,"%SystemRoot%\system32\psxss.exe" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems","Required",0x00010000,"Debug","Windows" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems","Windows",0x00020000,"%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,12288,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=consrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16" - -; WOW Support -HKLM,"SYSTEM\CurrentControlSet\Control\Wow","",0x00000000,"" - -; PNP Root device -HKLM,"SYSTEM\CurrentControlSet\Enum\HTREE\ROOT\0","",0x00000000,"" - -; Afd driver -HKLM,"SYSTEM\CurrentControlSet\Services\Afd","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Afd","Group",0x00000000,"TDI" -HKLM,"SYSTEM\CurrentControlSet\Services\Afd","ImagePath",0x00020000,"system32\drivers\afd.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Afd","Start",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Afd","Type",0x00010001,0x00000001 - -; UniATA/Atapi miniport driver -HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","Group",0x00000000,"System Bus Extender" -HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","ImagePath",0x00020000,"system32\drivers\uniata.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","Type",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","Tag",0x00010001,0x00000010 - -; Audio Service -HKLM,"SYSTEM\CurrentControlSet\Services\RosAudioSrv","DisplayName",0x00000000,"Audio Service" -HKLM,"SYSTEM\CurrentControlSet\Services\RosAudioSrv","Description",0x00000000,"Provides audio facilities to applications" -HKLM,"SYSTEM\CurrentControlSet\Services\RosAudioSrv","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\RosAudioSrv","Group",0x00000000,"Audio" -HKLM,"SYSTEM\CurrentControlSet\Services\RosAudioSrv","ImagePath",0x00020000,"%SystemRoot%\system32\audiosrv.exe" -HKLM,"SYSTEM\CurrentControlSet\Services\RosAudioSrv","ObjectName",0x00000000,"LocalSystem" -HKLM,"SYSTEM\CurrentControlSet\Services\RosAudioSrv","Start",0x00010001,0x00000003 -HKLM,"SYSTEM\CurrentControlSet\Services\RosAudioSrv","Type",0x00010001,0x00000010 - -; BusLogic 958 miniport driver -HKLM,"SYSTEM\CurrentControlSet\Services\BusLogic","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\BusLogic","Group",0x00000000,"SCSI Miniport" -HKLM,"SYSTEM\CurrentControlSet\Services\BusLogic","ImagePath",0x00020000,"system32\drivers\buslogic.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\BusLogic","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\BusLogic","Type",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\BusLogic","Tag",0x00010001,0x00000020 - -; Beep device driver -HKLM,"SYSTEM\CurrentControlSet\Services\Beep","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Beep","Group",0x00000000,"Base" -HKLM,"SYSTEM\CurrentControlSet\Services\Beep","ImagePath",0x00020000,"system32\drivers\beep.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Beep","Start",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Beep","Type",0x00010001,0x00000001 - -; BlueScreen device driver -HKLM,"SYSTEM\CurrentControlSet\Services\Blue","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Blue","Group",0x00000000,"Video Init" -HKLM,"SYSTEM\CurrentControlSet\Services\Blue","ImagePath",0x00020000,"system32\drivers\blue.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Blue","Start",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Blue","Type",0x00010001,0x00000001 - -; Cdfs (ISO96660) filesystem driver -HKLM,"SYSTEM\CurrentControlSet\Services\Cdfs","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Cdfs","Group",0x00000000,"File System" -HKLM,"SYSTEM\CurrentControlSet\Services\Cdfs","ImagePath",0x00020000,"system32\drivers\cdfs.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Cdfs","Start",0x00010001,0x00000003 -HKLM,"SYSTEM\CurrentControlSet\Services\Cdfs","Type",0x00010001,0x00000002 - -; Cdrom class driver -HKLM,"SYSTEM\CurrentControlSet\Services\Cdrom","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Cdrom","Group",0x00000000,"SCSI Class" -HKLM,"SYSTEM\CurrentControlSet\Services\Cdrom","ImagePath",0x00020000,"system32\drivers\cdrom.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Cdrom","Start",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Cdrom","Type",0x00010001,0x00000001 - -; Debug output driver -HKLM,"SYSTEM\CurrentControlSet\Services\DebugOut","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\DebugOut","Group",0x00000000,"Debug" -HKLM,"SYSTEM\CurrentControlSet\Services\DebugOut","ImagePath",0x00020000,"system32\drivers\debugout.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\DebugOut","Start",0x00010001,0x00000004 -HKLM,"SYSTEM\CurrentControlSet\Services\DebugOut","Type",0x00010001,0x00000001 - -; Disk class driver -HKLM,"SYSTEM\CurrentControlSet\Services\Disk","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Disk","Group",0x00000000,"SCSI Class" -HKLM,"SYSTEM\CurrentControlSet\Services\Disk","ImagePath",0x00020000,"system32\drivers\disk.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Disk","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Disk","Type",0x00010001,0x00000001 - -; DHCP client service -HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","DisplayName",0x00000000,"DHCP Client" -HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","Description",0x00000000,"Attempts to obtain network settings automatically from an available DHCP server" -HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","Group",0x00000000,"TDI" -HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","ImagePath",0x00020000,"%SystemRoot%\system32\svchost.exe -k netsvcs" -HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","ObjectName",0x00000000,"LocalSystem" -HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","Start",0x00010001,0x00000002 -HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","Type",0x00010001,0x00000020 -HKLM,"SYSTEM\CurrentControlSet\Services\DHCP\Parameters","ServiceDll",0x00020000,"%SystemRoot%\system32\dhcpcsvc.dll" - -; Event logging service -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog",,0x00000010 -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog","DisplayName",0x00000000,"Event Logger" -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog","Description",0x00000000,"Logs events or messages sent by the operating system in a database accessible via the event log viewer" -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog","Group",0x00000000,"Event log" -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog","ImagePath",0x00020000,"%SystemRoot%\system32\eventlog.exe" -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog","ObjectName",0x00000000,"LocalSystem" -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog","Start",0x00010001,0x00000002 -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog","Type",0x00010001,0x00000010 - -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog\Application",,0x00000010 -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog\Application","File",0x00020000,"%SystemRoot%\system32\config\AppEvent.Evt" -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog\Security",,0x00000010 -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog\Security","File",0x00020000,"%SystemRoot%\system32\config\SecEvent.Evt" -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog\System",,0x00000010 -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog\System","File",0x00020000,"%SystemRoot%\system32\config\SysEvent.Evt" -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog\System\EventLog","EventMessageFile",0x00020000,"%SystemRoot%\system32\netevent.dll" -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog\System\EventLog","TypesSupported",0x00010001,0x00000007 -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog\System\Service Control Manager","EventMessageFile",0x00020000,"%SystemRoot%\system32\netevent.dll" -HKLM,"SYSTEM\CurrentControlSet\Services\EventLog\System\Service Control Manager","TypesSupported",0x00010001,0x00000007 - -; Floppy driver -HKLM,"SYSTEM\CurrentControlSet\Services\Floppy","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Floppy","Group",0x00000000,"Primary Disk" -HKLM,"SYSTEM\CurrentControlSet\Services\Floppy","ImagePath",0x00020000,"system32\drivers\floppy.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Floppy","Start",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Floppy","Type",0x00010001,0x00000001 - -; Filesystem recognizer driver -HKLM,"SYSTEM\CurrentControlSet\Services\Fs_Rec","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Fs_Rec","Group",0x00000000,"Boot file system" -HKLM,"SYSTEM\CurrentControlSet\Services\Fs_Rec","ImagePath",0x00020000,"system32\drivers\fs_rec.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Fs_Rec","Start",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Fs_Rec","Type",0x00010001,0x00000008 - -; Kernel-Mode Tests -;HKLM,"SYSTEM\CurrentControlSet\Services\Kmtest","ErrorControl",0x00010001,0x00000000 -;HKLM,"SYSTEM\CurrentControlSet\Services\Kmtest","Group",0x00000000,"Base" -;HKLM,"SYSTEM\CurrentControlSet\Services\Kmtest","ImagePath",0x00020000,"system32\drivers\kmtest.sys" -;HKLM,"SYSTEM\CurrentControlSet\Services\Kmtest","Start",0x00010001,0x00000001 -;HKLM,"SYSTEM\CurrentControlSet\Services\Kmtest","Type",0x00010001,0x00000001 - -; Keyboard class driver -HKLM,"SYSTEM\CurrentControlSet\Services\kbdclass","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\kbdclass","Group",0x00000000,"Keyboard Class" -HKLM,"SYSTEM\CurrentControlSet\Services\kbdclass","ImagePath",0x00020000,"system32\drivers\kbdclass.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\kbdclass","Start",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\kbdclass","Type",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\kbdclass\Parameters","ConnectMultiplePorts",0x00010001,1 -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E96B-E325-11CE-BFC1-08002BE10318}","UpperFilters",0x00010000,"kbdclass" - -; MPU-401 MIDI driver -HKLM,"SYSTEM\CurrentControlSet\Services\mpu401","Group",0x00000000,"Base" -HKLM,"SYSTEM\CurrentControlSet\Services\mpu401","ServiceType",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\mpu401","Type",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\mpu401","Start",0x00010001,0x00000004 -HKLM,"SYSTEM\CurrentControlSet\Services\mpu401","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\mpu401","ImagePath",0x00020000,"system32\drivers\mpu401.sys" - -; Mouse class driver -HKLM,"SYSTEM\CurrentControlSet\Services\mouclass","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\mouclass","Group",0x00000000,"Pointer Class" -HKLM,"SYSTEM\CurrentControlSet\Services\mouclass","ImagePath",0x00020000,"system32\drivers\mouclass.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\mouclass","Start",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\mouclass","Type",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E96F-E325-11CE-BFC1-08002BE10318}","UpperFilters",0x00010000,"mouclass" - -; Mailslot filesystem driver -HKLM,"SYSTEM\CurrentControlSet\Services\Msfs","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Msfs","Group",0x00000000,"File System" -HKLM,"SYSTEM\CurrentControlSet\Services\Msfs","ImagePath",0x00020000,"system32\drivers\msfs.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Msfs","Start",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Msfs","Type",0x00010001,0x00000002 - -; Multiple UNC provider driver -HKLM,"SYSTEM\CurrentControlSet\Services\Mup","Description",0x00000000,"Multiple UNC Provider (MUP)" -HKLM,"SYSTEM\CurrentControlSet\Services\Mup","ErrorControl",0x00010001,0x00000001 -;HKLM,"SYSTEM\CurrentControlSet\Services\Mup","Group",0x00000000,"Network" -HKLM,"SYSTEM\CurrentControlSet\Services\Mup","Group",0x00000000,"File System" -HKLM,"SYSTEM\CurrentControlSet\Services\Mup","ImagePath",0x00020000,"system32\drivers\mup.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Mup","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Mup","Type",0x00010001,0x00000002 - -; NDIS driver - the only boot-start network driver -HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","Group",0x00000000,"NDIS" -HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","ImagePath",0x00020000,"system32\drivers\ndis.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","Type",0x00010001,0x00000001 - -; NetLogon -;HKLM,"SYSTEM\CurrentControlSet\Services\NetLogon","DisplayName",0x00000000,"Net Logon" -;HKLM,"SYSTEM\CurrentControlSet\Services\NetLogon","Description",0x00000000,"Sets up a secure channel to a domain controller for domain authentication" -;HKLM,"SYSTEM\CurrentControlSet\Services\NetLogon","ErrorControl",0x00010001,0x00000001 -;HKLM,"SYSTEM\CurrentControlSet\Services\Netlogon","ImagePath",0x00020000,"%SystemRoot%\system32\lsass.exe" -;HKLM,"SYSTEM\CurrentControlSet\Services\NetLogon","Start",0x00010001,0x00000003 -;HKLM,"SYSTEM\CurrentControlSet\Services\Netlogon","Type",0x00010001,0x00000020 - -; Named Pipe filesystem driver -HKLM,"SYSTEM\CurrentControlSet\Services\Npfs","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Npfs","Group",0x00000000,"File System" -HKLM,"SYSTEM\CurrentControlSet\Services\Npfs","ImagePath",0x00020000,"system32\drivers\npfs.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Npfs","Start",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Npfs","Type",0x00010001,0x00000002 - -; NTFS filesystem driver -HKLM,"SYSTEM\CurrentControlSet\Services\Ntfs","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Ntfs","Group",0x00000000,"File System" -HKLM,"SYSTEM\CurrentControlSet\Services\Ntfs","ImagePath",0x00020000,"system32\drivers\ntfs.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Ntfs","Start",0x00010001,0x00000004 -HKLM,"SYSTEM\CurrentControlSet\Services\Ntfs","Type",0x00010001,0x00000002 - -; Null device driver -HKLM,"SYSTEM\CurrentControlSet\Services\Null","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Null","Group",0x00000000,"Base" -HKLM,"SYSTEM\CurrentControlSet\Services\Null","ImagePath",0x00020000,"system32\drivers\null.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Null","Start",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Null","Type",0x00010001,0x00000001 - -; NMI device driver -HKLM,"SYSTEM\CurrentControlSet\Services\NMIDebug","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\NMIDebug","Group",0x00000000,"Base" -HKLM,"SYSTEM\CurrentControlSet\Services\NMIDebug","ImagePath",0x00020000,"system32\drivers\nmidebug.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\NMIDebug","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\NMIDebug","Type",0x00010001,0x00000001 - -; NDIS User I/O driver (FIXME: Should be installed via INF and started on demand) -HKLM,"SYSTEM\CurrentControlSet\Services\Ndisuio","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Ndisuio","Group",0x00000000,"NDIS" -HKLM,"SYSTEM\CurrentControlSet\Services\Ndisuio","ImagePath",0x00020000,"system32\drivers\ndisuio.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Ndisuio","Start",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Ndisuio","Type",0x00010001,0x00000001 - -; Packet driver -HKLM,"SYSTEM\CurrentControlSet\Services\Packet","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Packet","Group",0x00000000,"PNP_TDI" -HKLM,"SYSTEM\CurrentControlSet\Services\Packet","ImagePath",0x00020000,"system32\drivers\packet.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Packet","Start",0x00010001,0x00000004 -HKLM,"SYSTEM\CurrentControlSet\Services\Packet","Type",0x00010001,0x00000001 - -; USB HID driver -HKLM,"SYSTEM\CurrentControlSet\Services\hidusb","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\hidusb","Group",0x00000000,"Extended Base" -HKLM,"SYSTEM\CurrentControlSet\Services\hidusb","ImagePath",0x00020000,"system32\drivers\hidusb.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\hidusb","Start",0x00010001,0x00000003 -HKLM,"SYSTEM\CurrentControlSet\Services\hidusb","Type",0x00010001,0x00000001 - -; HID keyboard driver -HKLM,"SYSTEM\CurrentControlSet\Services\kbdhid","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\kbdhid","Group",0x00000000,"Keyboard Port" -HKLM,"SYSTEM\CurrentControlSet\Services\kbdhid","ImagePath",0x00020000,"system32\drivers\kbdhid.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\kbdhid","Start",0x00010001,0x00000003 -HKLM,"SYSTEM\CurrentControlSet\Services\kbdhid","Type",0x00010001,0x00000001 - -; HID mouse driver -HKLM,"SYSTEM\CurrentControlSet\Services\mouhid","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\mouhid","Group",0x00000000,"Pointer Port" -HKLM,"SYSTEM\CurrentControlSet\Services\mouhid","ImagePath",0x00020000,"system32\drivers\mouhid.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\mouhid","Start",0x00010001,0x00000003 -HKLM,"SYSTEM\CurrentControlSet\Services\mouhid","Type",0x00010001,0x00000001 - -; USB hub driver -HKLM,"SYSTEM\CurrentControlSet\Services\usbhub","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\usbhub","Group",0x00000000,"Boot Bus Extender" -HKLM,"SYSTEM\CurrentControlSet\Services\usbhub","ImagePath",0x00020000,"system32\drivers\usbhub.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\usbhub","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\usbhub","Type",0x00010001,0x00000001 - -; EHCI controller driver -HKLM,"SYSTEM\CurrentControlSet\Services\usbehci","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\usbehci","Group",0x00000000,"Boot Bus Extender" -HKLM,"SYSTEM\CurrentControlSet\Services\usbehci","ImagePath",0x00020000,"system32\drivers\usbehci.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\usbehci","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\usbehci","Type",0x00010001,0x00000001 - -; OHCI controller driver -HKLM,"SYSTEM\CurrentControlSet\Services\usbohci","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\usbohci","Group",0x00000000,"Boot Bus Extender" -HKLM,"SYSTEM\CurrentControlSet\Services\usbohci","ImagePath",0x00020000,"system32\drivers\usbohci.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\usbohci","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\usbohci","Type",0x00010001,0x00000001 - -; UHCI controller driver -HKLM,"SYSTEM\CurrentControlSet\Services\usbuhci","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\usbuhci","Group",0x00000000,"Boot Bus Extender" -HKLM,"SYSTEM\CurrentControlSet\Services\usbuhci","ImagePath",0x00020000,"system32\drivers\usbuhci.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\usbuhci","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\usbuhci","Type",0x00010001,0x00000001 - -; USB storage driver -HKLM,"SYSTEM\CurrentControlSet\Services\usbstor","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\usbstor","Group",0x00000000,"Primary Disk" -HKLM,"SYSTEM\CurrentControlSet\Services\usbstor","ImagePath",0x00020000,"system32\drivers\usbstor.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\usbstor","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\usbstor","Type",0x00010001,0x00000001 - -; USB composite generic parent -HKLM,"SYSTEM\CurrentControlSet\Services\usbccgp","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\usbccgp","Group",0x00000000,"Boot Bus Extender" -HKLM,"SYSTEM\CurrentControlSet\Services\usbccgp","ImagePath",0x00020000,"system32\drivers\usbccgp.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\usbccgp","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\usbccgp","Type",0x00010001,0x00000001 - -; ACPI driver -HKLM,"SYSTEM\CurrentControlSet\Services\acpi","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\acpi","Group",0x00000000,"Boot Bus Extender" -HKLM,"SYSTEM\CurrentControlSet\Services\acpi","ImagePath",0x00020000,"system32\drivers\acpi.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\acpi","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\acpi","Type",0x00010001,0x00000001 - -; PCI Bus driver -HKLM,"SYSTEM\CurrentControlSet\Services\Pci","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci","Group",0x00000000,"Boot Bus Extender" -HKLM,"SYSTEM\CurrentControlSet\Services\Pci","ImagePath",0x00020000,"system32\drivers\pci.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Pci","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci","Type",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","1045C621",0x00030003,04,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10950640",0x00030003,04,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","80861230",0x00030003,04,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","80867010",0x00030003,04,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","104B0140",0x00030003,08,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","11790603",0x00030003,08,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","80867113",0x00030003,08,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","497884C5",0x00030003,08,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","11063040",0x00030003,08,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","0E111000",0x00030003,10,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","0E112000",0x00030003,10,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10390406",0x00030003,10,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","80860482",0x00030003,00,40,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","80860008",0x00030003,10,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10140002",0x00030003,10,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10800600",0x00030003,20,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10131100",0x00030003,40,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10B95219",0x00030003,80,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","1C1C0001",0x00030003,00,01,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10970038",0x00030003,00,01,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","100BD001",0x00030003,00,04,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","808604A3",0x00030003,00,08,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10AA0000",0x00030003,00,08,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","533388D1",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","11790605",0x00030003,00,10,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10131110",0x00030003,00,20,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","11800478",0x00030003,00,20,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","11800475",0x00030003,00,20,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","11800476",0x00030003,00,20,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10040101",0x00030003,00,40,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10421000",0x00030003,00,40,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","104CAC12",0x00030003,00,00,01,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","11800466",0x00030003,00,00,01,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10140095",0x00030003,00,00,04,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","80862418",0x00030003,00,00,04,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","80862428",0x00030003,00,00,04,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","8086244E",0x00030003,00,00,04,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","80862448",0x00030003,00,00,04,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","8086122E",0x00030003,00,00,08,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","80867000",0x00030003,00,00,08,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","80867110",0x00030003,00,00,08,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","80867600",0x00030003,00,00,08,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024747",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024754",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","53338901",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","101300D6",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","104CAC15",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","110B0004",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","1000000F",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","104CAC17",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10239397",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024742",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024744",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024749",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024750",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024751",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024755",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024757",0x00030003,00,00,40,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024759",0x00030003,00,00,40,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024C42",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024C44",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024C47",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024C49",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024C50",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024C51",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10025654",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10025655",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10025656",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","121A0003",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","1045C861107B9300",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","1045C8611045C861",0x00030003,00,00,40,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","80861231",0x00030003,00,00,00,01,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","12730002",0x00030003,00,00,00,01,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","1014007D",0x00030003,00,00,00,01,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","12850100",0x00030003,00,00,00,01,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","12176836",0x00030003,00,00,00,08,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","12176832",0x00030003,00,00,00,08,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","109107A0",0x00030003,00,00,00,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","80867800",0x00030003,00,00,00,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10c88005",0x00030003,00,00,00,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10c88006",0x00030003,00,00,00,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10c80005",0x00030003,00,00,00,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10c80006",0x00030003,00,00,00,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","102B1001",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DD0100",0x00030003,00,00,00,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10950646",0x00030003,00,00,00,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10950670",0x00030003,00,00,00,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10950648",0x00030003,00,00,00,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10110026",0x00030003,00,00,00,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","8086B154",0x00030003,00,00,00,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","53338904",0x00030003,00,00,00,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","11068598",0x00030003,00,00,00,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","11068605",0x00030003,00,00,00,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","11790609",0x00030003,00,00,00,40,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10140047",0x00030003,00,00,00,40,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","102B051B",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","102B0520",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","102B0521",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","102B1025",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","102B0525",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","80867121",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","80867123",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","80867125",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","80861132",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","90050050",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","9005005F",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024752",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","1002474F",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","1002474D",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024753",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","1002474C",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","1002474E",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024C4D",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024C4E",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024C52",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024C53",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10239880",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE00A0",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE00A1",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE00A3",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE00B0",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE00B1",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE00B3",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0100",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0101",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0102",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0103",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0120",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0121",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0122",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0123",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0150",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0151",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0152",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0153",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0200",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0201",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0202",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0203",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","12D20018",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","12D20019",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10136003",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","3D3D000A",0x00030003,00,00,00,80,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024158",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024354",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024358",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024554",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024758",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024C54",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","53338810",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","53338811",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","53338812",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","53338814",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","53338880",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","533388B0",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","533388C0",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","533388C1",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","533388D0",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","533388F0",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","53338902",0x00030003,00,00,00,00,01,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","0E11B109",0x00030003,00,00,00,00,02,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","100C3202",0x00030003,00,8a,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10668002",0x00030003,00,00,30,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10660002",0x00030003,00,00,30,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10040102",0x00030003,00,40,00,02,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","1045C814",0x00030003,00,00,40,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10024756",0x00030003,00,00,40,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","1002475A",0x00030003,00,00,40,20,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","1000000B",0x00030003,00,00,00,a0,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0020",0x00030003,00,00,00,a0,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0028",0x00030003,00,00,00,a0,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE0029",0x00030003,00,00,00,a0,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE002A",0x00030003,00,00,00,a0,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE002B",0x00030003,00,00,00,a0,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE002C",0x00030003,00,00,00,a0,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE002D",0x00030003,00,00,00,a0,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE002E",0x00030003,00,00,00,a0,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","10DE002F",0x00030003,00,00,00,a0,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Pci\Parameters","101300D6101880D6",0x00030003,00,00,00,00,00,00,00,00 - -; Plug and Play manager -HKLM,"SYSTEM\CurrentControlSet\Services\PlugPlay","DisplayName",0x00000000,"Plug and Play" -HKLM,"SYSTEM\CurrentControlSet\Services\PlugPlay","Description",0x00000000,"Detects hardware changes and installs needed software if possible" -HKLM,"SYSTEM\CurrentControlSet\Services\PlugPlay","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\PlugPlay","Group",0x00000000,"PlugPlay" -HKLM,"SYSTEM\CurrentControlSet\Services\PlugPlay","ImagePath",0x00020000,"%SystemRoot%\system32\umpnpmgr.exe" -HKLM,"SYSTEM\CurrentControlSet\Services\PlugPlay","ObjectName",0x00000000,"LocalSystem" -HKLM,"SYSTEM\CurrentControlSet\Services\PlugPlay","Start",0x00010001,0x00000004 -HKLM,"SYSTEM\CurrentControlSet\Services\PlugPlay","Type",0x00010001,0x00000010 - -; RPC service -HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","DisplayName",0x00000000,"Remote Procedure Call" -HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","Description",0x00000000,"RPC subsystem which is responsible for Remote procedure Calls on the local machine" -HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","FailureActions",0x00030003, \ - 00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,02,00,00,00,60,ea,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","Group",0x00000000,"COM Infrastructure" -HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","ImagePath",0x00020000,"%SystemRoot%\system32\rpcss.exe" -HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","ObjectName",0x00000000,"LocalSystem" -HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","Start",0x00010001,0x00000002 -HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","Type",0x00010001,0x00000010 - -; Spooler service -HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","DependOnService",0x00010000,"RPCSS" -HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","DisplayName",0x00000000,"Printer Spooler" -HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","Description",0x00000000,"Printer Spooler" -HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","FailureActions",0x00000003, \ - 60,54,00,00,00,00,00,00,00,00,00,00,03,00,00,00,00,00,00,00, \ - 01,00,00,00,60,ea,00,00,01,00,00,00,60,ea,00,00,00,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","Group",0x00000000,"SpoolerGroup" -HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","ImagePath",0x00020000,"%SystemRoot%\system32\spoolsv.exe" -HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","ObjectName",0x00000000,"LocalSystem" -HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","Start",0x00010001,0x00000002 -HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","Type",0x00010001,0x00000110 - -; WLAN service -HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","DependOnService",0x00010000,"RPCSS" -HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","DisplayName",0x00000000,"WLAN Service" -HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","Description",0x00000000,"WLAN Service" -HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","Group",0x00000000,"TDI" -HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","ImagePath",0x00020000,"%SystemRoot%\system32\wlansvc.exe" -HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","ObjectName",0x00000000,"LocalSystem" -HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","Start",0x00010001,0x00000002 -HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","Type",0x00010001,0x00000110 - -; Simple TCP services -HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","Description",0x00000000,"Supports the following TCP/IP services: Chargen, Daytime, Discard, Echo, QOTD" -HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","DisplayName",0x00000000,"Simple TCP/IP Services" -HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","Group",0x00000000,"Network" -HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","ImagePath",0x00020000,"%SystemRoot%\system32\tcpsvcs.exe" -HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","ObjectName",0x00000000,"LocalSystem" -HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","Start",0x00010001,0x00000003 -HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","Type",0x00010001,0x00000020 - -; ReactOS Telnet Service -HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","Description",0x00000000,"ReactOS Telnet Service" -HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","DisplayName",0x00000000,"ReactOS Telnet Service" -HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","Group",0x00000000,"Network" -HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","ImagePath",0x00020000,"%SystemRoot%\system32\telnetd.exe" -HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","ObjectName",0x00000000,"LocalSystem" -HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","Start",0x00010001,0x00000003 -HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","Type",0x00010001,0x00000020 - -; Themes service -HKLM,"SYSTEM\CurrentControlSet\Services\Themes","DisplayName",0x00000000,"Themes" -HKLM,"SYSTEM\CurrentControlSet\Services\Themes","Description",0x00000000,"Themes support" -HKLM,"SYSTEM\CurrentControlSet\Services\Themes","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Themes","FailureActions",0x00000003, \ - 80,51,01,00,00,00,00,00,00,00,00,00,03,00,00,00,00,00,00,00, \ - 01,00,00,00,60,ea,00,00,01,00,00,00,60,ea,00,00,00,00,00,00,00,00,00,00 -HKLM,"SYSTEM\CurrentControlSet\Services\Themes","Group",0x00000000,"UIGroup" -HKLM,"SYSTEM\CurrentControlSet\Services\Themes","ImagePath",0x00020000,"%SystemRoot%\system32\thmsvc.exe" -HKLM,"SYSTEM\CurrentControlSet\Services\Themes","ObjectName",0x00000000,"LocalSystem" -HKLM,"SYSTEM\CurrentControlSet\Services\Themes","Start",0x00010001,0x00000003 -HKLM,"SYSTEM\CurrentControlSet\Services\Themes","Type",0x00010001,0x00000020 - -; Sound Blaster (NT4) -;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","Description",0x00000000,"Sound Blaster (NT4)" -;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","ErrorControl",0x00010001,0x00000001 -;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","Group",0x00000000,"Base" -;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","ImagePath",0x00020000,"system32\drivers\sndblst.sys" -;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","Start",0x00010001,0x00000003 -;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","Type",0x00010001,0x00000001 - -; Virtual FAT filesystem driver -HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","Group",0x00000000,"Boot File System" -HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","ImagePath",0x00020000,"system32\drivers\fastfat.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","Start",0x00010001,0x00000003 -HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","Type",0x00010001,0x00000002 - -; RAM Disk class driver -HKLM,"SYSTEM\CurrentControlSet\Services\RamDisk","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\RamDisk","Group",0x00000000,"Boot File System" -HKLM,"SYSTEM\CurrentControlSet\Services\RamDisk","ImagePath",0x00020000,"system32\drivers\ramdisk.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\RamDisk","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\RamDisk","Type",0x00010001,0x00000002 - -; EXT2 Filesystem driver -HKLM,"SYSTEM\CurrentControlSet\Services\Ext2fs","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Ext2fs","Group",0x00000000,"Boot File System" -HKLM,"SYSTEM\CurrentControlSet\Services\Ext2fs","ImagePath",0x00020000,"system32\drivers\ext2.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Ext2fs","Start",0x00010001,0x00000003 -HKLM,"SYSTEM\CurrentControlSet\Services\Ext2fs","Type",0x00010001,0x00000002 - -; VBE SVGA driver -HKLM,"SYSTEM\CurrentControlSet\Services\VBE","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\VBE","Group",0x00000000,"Video Save" -HKLM,"SYSTEM\CurrentControlSet\Services\VBE","ImagePath",0x00020000,"system32\drivers\vbemp.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\VBE","Start",0x00010001,0x00000004 -HKLM,"SYSTEM\CurrentControlSet\Services\VBE","Type",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\VBE","Tag",0x00010001,0x00000001 - -HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","InstalledDisplayDrivers",0x00010000,"framebuf" -HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","DefaultSettings.VRefresh",0x00010001,1 -HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","DefaultSettings.BitsPerPel",0x00010001,8 -HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","DefaultSettings.XResolution",0x00010001,640 -HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","DefaultSettings.YResolution",0x00010001,480 - -; This is not true but it allows to use 3rd party drivers while having the VBE driver installed -HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","VgaCompatible",0x00010001,1 - -; VGA miniport driver -HKLM,"SYSTEM\CurrentControlSet\Services\Vga","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Vga","Group",0x00000000,"Video Save" -HKLM,"SYSTEM\CurrentControlSet\Services\Vga","ImagePath",0x00020000,"system32\drivers\vgamp.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Vga","Start",0x00010001,0x00000004 -HKLM,"SYSTEM\CurrentControlSet\Services\Vga","Type",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Vga","Tag",0x00010001,0x00000002 -HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VGA\Device0","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 -HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\Vga\Device0","DefaultSettings.BitsPerPel",0x00010001,8 -HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\Vga\Device0","DefaultSettings.XResolution",0x00010001,640 -HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\Vga\Device0","DefaultSettings.YResolution",0x00010001,480 - -; Windows Installer Service -HKLM,"SYSTEM\CurrentControlSet\Services\MSIserver","DisplayName",0x00000000,"ReactOS Installer" -HKLM,"SYSTEM\CurrentControlSet\Services\MSIserver","Description",0x00000000,"Controls installation, maintenance, and removal of software packaged as an msi (Windows Installer)" -HKLM,"SYSTEM\CurrentControlSet\Services\MSIserver","Group",0x00000000,"Windows Installer" -HKLM,"SYSTEM\CurrentControlSet\Services\MSIserver","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\MSIserver","ImagePath",0x00020000,"system32\msiexec.exe /V" -HKLM,"SYSTEM\CurrentControlSet\Services\MSIserver","ObjectName",0x00000000,"LocalSystem" -HKLM,"SYSTEM\CurrentControlSet\Services\MSIserver","Start",0x00010001,0x00000003 -HKLM,"SYSTEM\CurrentControlSet\Services\MSIserver","Type",0x00010001,0x00000020 - -; ControlSet selection settings -HKLM,"SYSTEM\Select","Current",0x00010001,0x00000001 -HKLM,"SYSTEM\Select","Default",0x00010001,0x00000001 -HKLM,"SYSTEM\Select","Failed",0x00010001,0x00000000 -HKLM,"SYSTEM\Select","LastKnownGood",0x00010001,0x00000000 - -; System setup settings -HKLM,"SYSTEM\Setup","CmdLine",0x00000000,"setup -newsetup" -HKLM,"SYSTEM\Setup","OsLoaderPath",0x00000000,"\" -HKLM,"SYSTEM\Setup","SetupType",0x00010001,0x00000001 -HKLM,"SYSTEM\Setup","SystemPartition",0x00000000,"\Device\Harddisk0\Partition1" -HKLM,"SYSTEM\Setup","SystemSetupInProgress",0x00010001,0x00000001 - -; Debug channels -;HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","DEBUGCHANNEL",0x00020000,"+ole,+rpc" - -; EOF diff --git a/boot/bootdata/hivesys_arm.inf b/boot/bootdata/hivesys_arm.inf deleted file mode 100644 index 07f4302a91e..00000000000 --- a/boot/bootdata/hivesys_arm.inf +++ /dev/null @@ -1,834 +0,0 @@ -[Version] -Signature = "$ReactOS$" - -[AddReg] - -; Device classes (this list is incomplete... and should be generated from .inf files during installation) -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Client" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetClient" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}","Icon",0x00000000,"-7" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}","Installer32",0x00000000,"NetCfgx.dll,NetClassInstaller" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}","NoDisplayClass",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}","NoInstallClass",0x00000000,"1" - -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Service" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetService" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}","Icon",0x00000000,"-7" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}","Installer32",0x00000000,"NetCfgx.dll,NetClassInstaller" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}","NoDisplayClass",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E974-E325-11CE-BFC1-08002BE10318}","NoInstallClass",0x00000000,"1" - -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Protocol" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetTrans" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}","Icon",0x00000000,"-6" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}","Installer32",0x00000000,"NetCfgx.dll,NetClassInstaller" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}","NoDisplayClass",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}","NoInstallClass",0x00000000,"1" - -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{9D6D66A6-0B0C-4563-9077-A0E9A7955AE4}",,0x00000000,"Ramdisk" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{9D6D66A6-0B0C-4563-9077-A0E9A7955AE4}","Class",0x00000000,"Ramdisk" -HKLM,"SYSTEM\CurrentControlSet\Control\Class\{9D6D66A6-0B0C-4563-9077-A0E9A7955AE4}","Icon",0x00000000,"-5" - -; Default computer name settings -HKLM,"SYSTEM\CurrentControlSet\Control\ComputerName",,0x00000012 -HKLM,"SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName","ComputerName",0x00000002,"COMPUTERNAME" - -; Device classes key -HKLM,"SYSTEM\CurrentControlSet\Control\DeviceClasses",,0x00000012 - -; Hardware profile settings -HKLM,"SYSTEM\CurrentControlSet\Control\IDConfigDB",,0x00000012 -HKLM,"SYSTEM\CurrentControlSet\Control\IDConfigDB","CurrentConfig",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Control\IDConfigDB\Hardware Profiles\0000","FriendlyName",0x00000000,"New Hardware Profile" - -; Keyboard Layouts -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000401","Layout File",0x00000000,"kbda1.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000401","Layout Text",0x00000000,"Arabic (101)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000401","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5084" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010401","Layout File",0x00000000,"kbda2.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010401","Layout Text",0x00000000,"Arabic (102)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010401","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5085" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020401","Layout File",0x00000000,"kbda3.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020401","Layout Text",0x00000000,"Arabic (102) AZERTY" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020401","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5086" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000402","Layout File",0x00000000,"kbdbgm.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000402","Layout Text",0x00000000,"Bulgarian BDS 5237-1978" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000402","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5136" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020402","Layout File",0x00000000,"kbdbgt.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020402","Layout Text",0x00000000,"Bulgarian phonetic classic" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020402","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5134" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030402","Layout File",0x00000000,"kbdbga.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030402","Layout Text",0x00000000,"Bulgarian phonetic BDS 5237-2006" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030402","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5135" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000406","Layout File",0x00000000,"kbdda.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000406","Layout Text",0x00000000,"Danish" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000406","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5007" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030407","Layout File",0x00000000,"kbdgerg.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030407","Layout Text",0x00000000,"German (de_ergo)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030407","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5139" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020407","Layout File",0x00000000,"kbdgneo.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020407","Layout Text",0x00000000,"German (NEO-1.1)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020407","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5138" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010407","Layout File",0x00000000,"kbdgrist.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010407","Layout Text",0x00000000,"German (RISTOME)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010407","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5137" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000407","Layout File",0x00000000,"kbdgr.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000407","Layout Text",0x00000000,"German" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000407","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5011" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000807","Layout File",0x00000000,"kbdsg.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000807","Layout Text",0x00000000,"Swiss (German)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000807","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5024" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000408","Layout File",0x00000000,"kbdhe.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000408","Layout Text",0x00000000,"Greek" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000408","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5046" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000409","Layout File",0x00000000,"kbdus.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000409","Layout Text",0x00000000,"United States" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5000" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000809","Layout File",0x00000000,"kbduk.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000809","Layout Text",0x00000000,"United Kingdom" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000809","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5025" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010409","Layout File",0x00000000,"kbddv.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010409","Layout Id", 0x00000000,"0002" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010409","Layout Text",0x00000000,"US-Dvorak" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5092" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020409","Layout File",0x00000000,"kbdusx.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020409","Layout Id", 0x00000000,"0001" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020409","Layout Text",0x00000000,"US International" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00020409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5026" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030409","Layout File",0x00000000,"kbdusl.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030409","Layout Id", 0x00000000,"001A" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030409","Layout Text",0x00000000,"US Dvorak for left hand" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00030409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5027" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00040409","Layout File",0x00000000,"kbdusr.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00040409","Layout Id", 0x00000000,"001B" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00040409","Layout Text",0x00000000,"US Dvorak for right hand" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00040409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5028" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00050409","Layout File",0x00000000,"kbdusa.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00050409","Layout Id", 0x00000000,"000B" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00050409","Layout Text",0x00000000,"US English (IBM Arabic 238_L)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00050409","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5123" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00001809","Layout File",0x00000000,"kbdir.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00001809","Layout Text",0x00000000,"Irish" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00001809","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5014" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040a","Layout File",0x00000000,"kbdes.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040a","Layout Text",0x00000000,"Spanish" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5020" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080a","Layout File",0x00000000,"kbdla.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080a","Layout Text",0x00000000,"Latin American" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5017" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040b","Layout File",0x00000000,"kbdfi.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040b","Layout Text",0x00000000,"Finnish" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040b","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5009" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040c","Layout File",0x00000000,"kbdfr.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040c","Layout Text",0x00000000,"French" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5010" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040d","Layout File",0x00000000,"kbdheb.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040d","Layout Text",0x00000000,"Hebrew" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040d","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5083" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040e","Layout File",0x00000000,"kbdhu.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040e","Layout Text",0x00000000,"Hungarian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040e","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5033" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040f","Layout File",0x00000000,"kbdic.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040f","Layout Text",0x00000000,"Icelandic" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040f","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5013" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000410","Layout File",0x00000000,"kbdit.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000410","Layout Text",0x00000000,"Italian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000410","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5015" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000411","Layout File",0x00000000,"kbdja.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000411","Layout Text",0x00000000,"Japanese" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000411","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5061" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041c","Layout File",0x00000000,"kbdal.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041c","Layout Text",0x00000000,"Albanian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5029" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041f","Layout File",0x00000000,"kbdtuq.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041f","Layout Text",0x00000000,"Turkish Q" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041f","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5060" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041f","Layout File",0x00000000,"kbdtuf.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041f","Layout Text",0x00000000,"Turkish F" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041f","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5059" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041f","Layout Id",0x00000000,"0014" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080c","Layout File",0x00000000,"kbdbe.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080c","Layout Text",0x00000000,"Belgian (French)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000080c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5002" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000413","Layout File",0x00000000,"kbdne.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000413","Layout Text",0x00000000,"Dutch" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000413","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5008" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000813","Layout File",0x00000000,"kbdbe.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000813","Layout Text",0x00000000,"Belgian (Dutch)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000813","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5001" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000415","Layout File",0x00000000,"kbdpl1.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000415","Layout Text",0x00000000,"Polish (Programmers)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000415","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5035" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010416","Layout File",0x00000000,"kbdbr.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010416","Layout Text",0x00000000,"Portuguese (Brazilian ABNT2)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010416","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5126" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000816","Layout File",0x00000000,"kbdpo.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000816","Layout Text",0x00000000,"Portuguese (Portugal)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000816","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5019" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000418","Layout File",0x00000000,"kbdro.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000418","Layout Text",0x00000000,"Romanian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000418","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5037" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000419","Layout File",0x00000000,"kbdru.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000419","Layout Text",0x00000000,"Russian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000419","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5055" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010419","Layout File",0x00000000,"kbdru1.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010419","Layout Text",0x00000000,"Russian (Typewriter)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010419","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5056" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041a","Layout File",0x00000000,"kbdcr.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041a","Layout Text",0x00000000,"Croatian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5030" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041b","Layout File",0x00000000,"kbdsk.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041b","Layout Text",0x00000000,"Slovak" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041b","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5039" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041b","Layout File",0x00000000,"kbdsk1.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041b","Layout Text",0x00000000,"Slovak (QWERTY)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041b","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5040" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041d","Layout File",0x00000000,"kbdsw.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041d","Layout Text",0x00000000,"Swedish" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041d","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5022" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041e","Layout File",0x00000000,"kbdth0.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041e","Layout Text",0x00000000,"Thai Kedmanee" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000041e","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5079" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041e","Layout File",0x00000000,"kbdth1.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041e","Layout Text",0x00000000,"Thai Pattachote" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001041e","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5080" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0002041e","Layout File",0x00000000,"kbdth2.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0002041e","Layout Text",0x00000000,"Thai Kedmanee (non-ShiftLock)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0002041e","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5081" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0003041e","Layout File",0x00000000,"kbdth3.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0003041e","Layout Text",0x00000000,"Thai Pattachote (non-ShiftLock)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0003041e","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5082" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000422","Layout File",0x00000000,"kbdur.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000422","Layout Text",0x00000000,"Ukrainian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000422","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5058" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010422","Layout File",0x00000000,"kbdurs.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010422","Layout Text",0x00000000,"Ukrainian (Student)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010422","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5141" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000423","Layout File",0x00000000,"kbdblr.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000423","Layout Text",0x00000000,"Belarusian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000423","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5052" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000425","Layout File",0x00000000,"kbdest.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000425","Layout Text",0x00000000,"Estonian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000425","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5042" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000426","Layout File",0x00000000,"kbdlv.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000426","Layout Text",0x00000000,"Latvian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000426","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5043" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010427","Layout File",0x00000000,"kbdlt1.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010427","Layout Text",0x00000000,"Lithuanian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010427","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5088" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042a","Layout File",0x00000000,"kbdvntc.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042a","Layout Text",0x00000000,"Vietnamese" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5118" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042b","Layout File",0x00000000,"kbdarme.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042b","Layout Text",0x00000000,"Armenian Eastern" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042b","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5120" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001042b","Layout File",0x00000000,"kbdarmw.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001042b","Layout Text",0x00000000,"Armenian Western" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001042b","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5121" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042c","Layout File",0x00000000,"kbdazel.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042c","Layout Text",0x00000000,"Azeri Latin" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5117" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000082c","Layout File",0x00000000,"kbdaze.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000082c","Layout Text",0x00000000,"Azeri Cyrillic" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000082c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5115" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042f","Layout File",0x00000000,"kbdmac.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042f","Layout Text",0x00000000,"Macedonian (FYRO)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042f","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5109" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000437","Layout File",0x00000000,"kbdgeo.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000437","Layout Text",0x00000000,"Georgian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000437","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5119" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000439","Layout File",0x00000000,"kbdindev.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000439","Layout Text",0x00000000,"Devanagari - INSCRIPT" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000439","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5096" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000043f","Layout File",0x00000000,"kbdkaz.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000043f","Layout Text",0x00000000,"Kazakh" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000043f","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5113" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000843","Layout File",0x00000000,"kbduzb.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000843","Layout Text",0x00000000,"Uzbek (Cyrillic)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000843","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5114" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000444","Layout File",0x00000000,"kbdtat.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000444","Layout Text",0x00000000,"Tatar" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000444","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5116" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000445","Layout File",0x00000000,"kbdinben.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000445","Layout Text",0x00000000,"Bengali" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000445","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5135" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000447","Layout File",0x00000000,"kbdinguj.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000447","Layout Text",0x00000000,"Gujarati" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000447","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5097" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044c","Layout File",0x00000000,"kbdinmal.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044c","Layout Text",0x00000000,"Malayalam" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5139" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044d","Layout File",0x00000000,"kbdinasa.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044d","Layout Text",0x00000000,"ASSAMESE - INSCRIPT" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000044d","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5177" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000455","Layout File",0x00000000,"kbdbur.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000455","Layout Text",0x00000000,"Burmese" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000455","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5140" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000414","Layout File",0x00000000,"kbdno.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000414","Layout Text",0x00000000,"Norwegian" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000414","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5018" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000405","Layout File",0x00000000,"kbdcz.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000405","Layout Text",0x00000000,"Czech" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000405","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5031" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010405","Layout File",0x00000000,"kbdcz1.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010405","Layout Text",0x00000000,"Czech (QWERTY)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010405","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5032" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00011009","Layout File",0x00000000,"kbdcan.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00011009","Layout Id", 0x00000000,"0020" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00011009","Layout Text",0x00000000,"Canadian Multilingual Standard" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00011009","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5110" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c0c","Layout File",0x00000000,"kbdfc.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c0c","Layout Text",0x00000000,"Canadian French (Legacy)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c0c","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5005" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c1a","Layout File",0x00000000,"kbdycc.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c1a","Layout Text",0x00000000,"Serbian (Cyrillic)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000c1a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5057" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000081a","Layout File",0x00000000,"kbdycl.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000081a","Layout Text",0x00000000,"Serbian (Latin)" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000081a","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5038" - -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000412","Layout File",0x00000000,"kbdko.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000412","Layout Text",0x00000000,"Korean" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000412","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5063" - -; Network -HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Adapters" -HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"Net" -HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E973-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Client" -HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E973-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetClient" -HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E974-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Service" -HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E974-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetService" -HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E975-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Protocol" -HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E975-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetTrans" -HKLM,"SYSTEM\CurrentControlSet\Control\NetworkProvider\Order","ProviderOrder",0x00000000,"" - -; NLS Files -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","37",0x00000000,"c_037.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","424",0x00000000,"c_424.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","437",0x00000000,"c_437.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","500",0x00000000,"c_500.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","737",0x00000000,"c_737.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","775",0x00000000,"c_775.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","850",0x00000000,"c_850.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","852",0x00000000,"c_852.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","855",0x00000000,"c_855.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","856",0x00000000,"c_856.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","857",0x00000000,"c_857.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","860",0x00000000,"c_860.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","861",0x00000000,"c_861.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","862",0x00000000,"c_862.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","863",0x00000000,"c_863.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","864",0x00000000,"c_864.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","865",0x00000000,"c_865.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","866",0x00000000,"c_866.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","869",0x00000000,"c_869.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","874",0x00000000,"c_874.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","875",0x00000000,"c_875.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","878",0x00000000,"c_878.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","932",0x00000000,"c_932.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","936",0x00000000,"c_936.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","949",0x00000000,"c_949.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","950",0x00000000,"c_950.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1006",0x00000000,"c_1006.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1026",0x00000000,"c_1026.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1250",0x00000000,"c_1250.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1251",0x00000000,"c_1251.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1252",0x00000000,"c_1252.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1253",0x00000000,"c_1253.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1254",0x00000000,"c_1254.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1255",0x00000000,"c_1255.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1256",0x00000000,"c_1256.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1257",0x00000000,"c_1257.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","1258",0x00000000,"c_1258.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","10000",0x00000000,"c_10000.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","10006",0x00000000,"c_10006.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","10007",0x00000000,"c_10007.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","10029",0x00000000,"c_10029.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","10079",0x00000000,"c_10079.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","10081",0x00000000,"c_10081.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","20866",0x00000000,"c_20866.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","21866",0x00000000,"c_21866.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28591",0x00000000,"c_28591.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28592",0x00000000,"c_28592.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28593",0x00000000,"c_28593.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28594",0x00000000,"c_28594.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28595",0x00000000,"c_28595.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28596",0x00000000,"c_28596.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28597",0x00000000,"c_28597.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28598",0x00000000,"c_28598.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28599",0x00000000,"c_28599.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28600",0x00000000,"c_28600.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28603",0x00000000,"c_28603.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28604",0x00000000,"c_28604.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28605",0x00000000,"c_28605.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","28606",0x00000000,"c_28606.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","ACP",0x00000000,"1252" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","OEMCP",0x00000000,"437" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage","MACCP",0x00000000,"10000" - -; NLS Language settings -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0402",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0403",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0404",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0804",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0c04",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","1004",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","1404",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0405",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0406",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0407",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0807",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0c07",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","1407",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0408",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0409",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0809",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0c09",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","1009",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","1409",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","1809",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","1c09",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","2009",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","3009",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","3409",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","040a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","080a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0c0a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","100a",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","140a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","180a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","1c0a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","200a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","240a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","280a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","2c0a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","300a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","340a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","380a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","3c0a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","400a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","440a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","480a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","4c0a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","500a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","040b",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","040c",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","080c",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0c0c",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","100c",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","140c",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","180c",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","040d",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","040e",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","040f",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0410",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0810",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0411",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0412",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0413",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0414",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0813",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0414",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0814",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0415",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0416",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0816",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0417",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0418",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0419",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","041a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","081a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0c1a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","041b",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","041c",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","041d",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","081d",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","041e",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","041f",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0420",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0421",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0422",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0423",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0424",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0425",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0426",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0427",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0429",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","042a",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","042b",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","042c",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","082c",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","042d",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","042f",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0436",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0437",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0438",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0439",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","043e",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","083e",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","043f",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0440",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0441",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0443",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0843",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0445",0x00000000,"l_intl.nls" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0455",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0456",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","048f",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","0490",0x00000000,"l_intl.nls" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","Default",0x00000000,"0409" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language","InstallLanguage",0x00000000,"0409" - -; Supported and installed locales -; If you add/uncomment an entry here, please also add the appropriate Language -; in the previous section. -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale",,0x00000012 -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000402",0x00000000,"5" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000403",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000404",0x00000000,"9" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000804",0x00000000,"a" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000405",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000406",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000407",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000807",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000c07",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00001407",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000408",0x00000000,"4" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000409",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000809",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000c09",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00001009",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00001409",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00001809",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00001c09",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00002009",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00003009",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00003409",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000040a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000080a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000c0a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000100a",0x00000000,"1" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000140a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000180a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00001c0a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000200a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000240a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000280a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00002c0a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000300a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000340a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000380a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00003c0a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000400a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000440a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000480a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00004c0a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000500a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000040b",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000040c",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000080c",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000c0c",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000100c",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000140c",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000180c",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000040d",0x00000000,"c" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000040e",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000040f",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000410",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000810",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000411",0x00000000,"7" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000412",0x00000000,"8" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000413",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000813",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000414",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000814",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000415",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000416",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000816",0x00000000,"1" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000417",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000418",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000419",0x00000000,"5" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000041a",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000081a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000c1a",0x00000000,"5" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000041b",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000041c",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000041d",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000081d",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000041e",0x00000000,"b" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000041f",0x00000000,"6" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000420",0x00000000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000421",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000422",0x00000000,"5" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000423",0x00000000,"5" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000424",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000425",0x00000000,"3" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000426",0x00000000,"3" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000427",0x00000000,"3" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000429",0x00000000,"" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000042a",0x00000000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000042b",0x00000000,"11" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000042c",0x00000000,"6" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000082c",0x00000000,"5" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000042d",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000042f",0x00000000,"5" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000436",0x00000000,"1" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000437",0x00000000,"10" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000438",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000439",0x00000000,"f" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000043e",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000083e",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000043f",0x00000000,"5" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000440",0x00000000,"5" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000441",0x00000000,"1" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000443",0x00000000,"6" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000843",0x00000000,"5" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000445",0x00000000,"f" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000455",0x00000000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000456",0x00000000,"1" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","0000048f",0x00000000,"1" -;HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale","00000490",0x00000000,"1" - -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","1",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","2",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","3",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","4",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","5",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","6",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","7",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","8",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","9",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","10",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","11",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","a",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","b",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","c",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","d",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","e",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Language Groups","f",0x00000000,"1" - -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale\Alternate Sorts","00010407",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale\Alternate Sorts","0001040e",0x00000000,"2" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale\Alternate Sorts","00010437",0x00000000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale\Alternate Sorts","00020804",0x00000000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale\Alternate Sorts","00021004",0x00000000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale\Alternate Sorts","00021404",0x00000000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\Nls\Locale\Alternate Sorts","00030404",0x00000000,"" - -; Some installers check for SP1 -HKLM,"SYSTEM\CurrentControlSet\Control\Windows","CSDVersion",0x00010001,0x00000100 - -; Service groups -HKLM,"SYSTEM\CurrentControlSet\Control\ServiceGroupOrder","List",0x00010000, \ - "Boot Bus Extender", \ - "System Bus Extender", \ - "SCSI Port", \ - "SCSI Miniport", \ - "Primary Disk", \ - "SCSI Class Helper", \ - "SCSI Class", \ - "Boot File System", \ - "Base", \ - "Pointer Port", \ - "Keyboard Port", \ - "Pointer Class", \ - "Keyboard Class", \ - "Debug", \ - "Video Init", \ - "Video", \ - "Video Save", \ - "File System", \ - "Event log", \ - "NDIS", \ - "PNP_TDI", \ - "TDI", \ - "PlugPlay", \ - "Extended Base" - -; Set the timeout for directx/ReactX graphic surface lock see _EDD_DIRECTDRAW_GLOBAL struct for more info -HKLM,"SYSTEM\CurrentControlSet\Control\GraphicsDrivers\DCI","Timeout",0x00010001,0x00000007 - -; Group order, the first DWORD is the count of entries, -; the following dwords are the tag entries for the load order. -HKLM,"SYSTEM\CurrentControlSet\Control\GroupOrderList","Video Save", 0x00000001, \ - 0x02, 0x00, 0x00, 0x00, \ - 0x01, 0x00, 0x00, 0x00, \ - 0x02, 0x00, 0x00, 0x00 -HKLM,"SYSTEM\CurrentControlSet\Control\GroupOrderList","SCSI Miniport", 0x00000001, \ - 0x02, 0x00, 0x00, 0x00, \ - 0x10, 0x00, 0x00, 0x00, \ - 0x20, 0x00, 0x00, 0x00 - -; Session Manager stuff -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","BootExecute", 0x00010000, \ - "autocheck autochk *" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","GlobalFlag", 0x00010003, 0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","ObjectDirectories",0x00010000, \ - "\Windows", \ - "\RPC Control" - -; DOS devices -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","AUX",0x00000000,"\DosDevices\COM1" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","MAILSLOT",0x00000000,"\Device\MailSlot" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","NUL",0x00000000,"\Device\Null" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","PIPE",0x00000000,"\Device\NamedPipe" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","PRN",0x00000000,"\DosDevices\LPT1" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","UNC",0x00000000,"\Device\Mup" - -; System environment settings -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","ComSpec",0x00020000,"%SystemRoot%\system32\cmd.exe" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","Path",0x00020000,"%SystemRoot%\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\system32\wbem" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","windir",0x00020000,"%SystemRoot%" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","TEMP",0x00020000,"%SystemDrive%\TEMP" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","TMP",0x00020000,"%SystemDrive%\TEMP" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","PATHEXT",0x00000000,".COM;.EXE;.BAT;.CMD" - - -; Known DLLs -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","DllDirectory",0x00020000,"%SystemRoot%\system32" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","advapi32",0x00000000,"advapi32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","comdlg32",0x00000000,"comdlg32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","gdi32",0x00000000,"gdi32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","imagehlp",0x00000000,"imagehlp.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","kernel32",0x00000000,"kernel32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","lz32",0x00000000,"lz32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","ole32",0x00000000,"ole32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","oleaut32",0x00000000,"oleaut32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olecli32",0x00000000,"olecli32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olesvr32",0x00000000,"olesvr32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olethk32",0x00000000,"olethk32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","rpcrt4",0x00000000,"rpcrt4.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","setupapi",0x00000000,"setupapi.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","shell32",0x00000000,"shell32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","url",0x00000000,"url.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","urlmon",0x00000000,"urlmon.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","user32",0x00000000,"user32.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","version",0x00000000,"version.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","wininet",0x00000000,"wininet.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","wldap32",0x00000000,"wldap32.dll" - -; Memory Management -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management",,0x00000012 - -; SubSystems -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems","Debug",0x00020000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems","Kmode",0x00020000,"%SystemRoot%\system32\win32k.sys" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems","Optional",0x00010000,"Posix" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems","Posix",0x00020000,"%SystemRoot%\system32\psxss.exe" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems","Required",0x00010000,"Debug","Windows" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems","Windows",0x00020000,"%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,12288,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=consrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16" - -; WOW Support -HKLM,"SYSTEM\CurrentControlSet\Control\Wow","",0x00000000,"" - -; PNP Root device -HKLM,"SYSTEM\CurrentControlSet\Enum\HTREE\ROOT\0","",0x00000000,"" - -; Virtual FAT filesystem driver -HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","Group",0x00000000,"Boot File System" -HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","ImagePath",0x00020000,"system32\drivers\fastfat.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","Type",0x00010001,0x00000002 - -; RAM Disk class driver -HKLM,"SYSTEM\CurrentControlSet\Services\Disk","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Disk","ImagePath",0x00020000,"system32\drivers\ramdisk.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Disk","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Disk","Type",0x00010001,0x00000001 - -; ControlSet selection settings -HKLM,"SYSTEM\Select","Current",0x00010001,0x00000001 -HKLM,"SYSTEM\Select","Default",0x00010001,0x00000001 -HKLM,"SYSTEM\Select","Failed",0x00010001,0x00000000 -HKLM,"SYSTEM\Select","LastKnownGood",0x00010001,0x00000000 - -; System setup settings -HKLM,"SYSTEM\Setup","CmdLine",0x00000000,"setup -newsetup" -HKLM,"SYSTEM\Setup","OsLoaderPath",0x00000000,"\" -HKLM,"SYSTEM\Setup","SetupType",0x00010001,0x00000001 -HKLM,"SYSTEM\Setup","SystemPartition",0x00000000,"\Device\Harddisk0\Partition1" -HKLM,"SYSTEM\Setup","SystemSetupInProgress",0x00010001,0x00000001 - -; Debug channels -;HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","DEBUGCHANNEL",0x00020000,"+ole,+rpc" - -; EOF diff --git a/boot/bootdata/livecd.inf b/boot/bootdata/livecd.inf index d4770ea403c..50dd0b834ac 100644 --- a/boot/bootdata/livecd.inf +++ b/boot/bootdata/livecd.inf @@ -40,18 +40,19 @@ HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","ALLUSERSPRO HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management","PagingFiles",0x00000000,"" ; Font Substitution -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Arial",0x00000000,"Liberation Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Courier",0x00000000,"FreeMono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Courier New",0x00000000,"FreeMono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Fixedsys",0x00000000,"Fixedsys Excelsior 3.01" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Helv",0x00000000,"Tahoma" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Helvetica",0x00000000,"Liberation Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Sans Serif",0x00000000,"Tahoma" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Shell Dlg",0x00000000,"Tahoma" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Shell Dlg 2",0x00000000,"Tahoma" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Tahoma",0x00000000,"Tahoma" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Terminal",0x00000000,"DejaVu Sans Mono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Times New Roman",0x00000000,"Liberation Serif" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Arial",0x00000000,"Liberation Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Courier",0x00000000,"FreeMono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Courier New",0x00000000,"FreeMono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Fixedsys",0x00000000,"Fixedsys Excelsior 3.01-L2" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Helv",0x00000000,"Tahoma" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Helvetica",0x00000000,"Liberation Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Lucida Console",0x00000000,"DejaVu Sans Mono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Sans Serif",0x00000000,"Tahoma" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Shell Dlg",0x00000000,"Tahoma" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Shell Dlg 2",0x00000000,"Tahoma" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Tahoma",0x00000000,"Tahoma" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Terminal",0x00000000,"DejaVu Sans Mono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Times New Roman",0x00000000,"Liberation Serif" ; FIXME: Registration diff --git a/boot/bootdata/readme.txt b/boot/bootdata/readme.txt index 069c834aaaa..4a7ff91d621 100644 --- a/boot/bootdata/readme.txt +++ b/boot/bootdata/readme.txt @@ -1,16 +1,16 @@ ======================== -ReactOS Version 0.3.x -Updated July 28, 2007 +ReactOS Version 0.3.x +Updated March 3, 2013 ======================== 1. What is ReactOS? ------------------- -ReactOS is an Open Source effort to develop a quality operating system that is -compatible with applications and drivers written for the Microsoft Windows NT -family of operating systems (NT4, 2000, XP, 2003, Vista). +ReactOS is an Open Source effort to develop a quality operating system that is +compatible with applications and drivers written for the Microsoft Windows NT +family of operating systems (NT4, 2000, XP, 2003, Vista, Seven). -Website: http://www.reactos.org/ +Website: http://www.reactos.org 2. Relationship with the WINE project @@ -25,7 +25,7 @@ applications and testing suites. 3. Future compatibility ----------------------- -The ReactOS project, although currently focused on Windows XP +The ReactOS project, although currently focused on Windows Server 2003 compatibility, is always keeping an eye toward compatibility with Windows Vista and future Windows NT releases. @@ -35,20 +35,21 @@ Windows Vista and future Windows NT releases. The Windows NT architecture allows for subsystems, as does the ReactOS architecture. A subsystem is an implementation of the APIs of another -operating system, allowing ReactOS to run applications from other systems. We -are already looking at subsystems for: Java, OS/2, and DOS and possibly others -in the future. +operating system, allowing ReactOS to run applications from other systems. +We are already looking at subsystems for: Java, OS/2, and DOS and possibly +others in the future. 5. Tutorials ------------ -Developer and User Tutorials: http://www.reactos.org/wiki/index.php/Main_Page +Developer and User Tutorials: http://www.reactos.org/wiki The tutorials contain more information on the project, compiling and testing -ReactOS - among other topics. Contributors to the project are always welcome. +ReactOS - amongst other topics. Contributors to the project are always welcome. + 6. Author --------- -This document was written by Jason Filby (jasonfilby@yahoo.com). \ No newline at end of file +This document was written by Jason Filby (jasonfilby@yahoo.com). diff --git a/boot/freeldr/freeldr/arch/arm/macharm.c b/boot/freeldr/freeldr/arch/arm/macharm.c index 81c2ab55ac6..c45bd0f6e93 100644 --- a/boot/freeldr/freeldr/arch/arm/macharm.c +++ b/boot/freeldr/freeldr/arch/arm/macharm.c @@ -28,10 +28,9 @@ ULONG SecondLevelDcacheSize; ULONG SecondLevelDcacheFillSize; ULONG SecondLevelIcacheSize; ULONG SecondLevelIcacheFillSize; - + ARC_DISK_SIGNATURE reactos_arc_disk_info; ULONG reactos_disk_count; -CHAR reactos_arc_hardware_data[256]; ULONG SizeBits[] = { @@ -66,11 +65,11 @@ ArmInit(IN PARM_BOARD_CONFIGURATION_BLOCK BootContext) { /* Remember the pointer */ ArmBoardBlock = BootContext; - + /* Let's make sure we understand the LLB */ ASSERT(ArmBoardBlock->MajorVersion == ARM_BOARD_CONFIGURATION_MAJOR_VERSION); ASSERT(ArmBoardBlock->MinorVersion == ARM_BOARD_CONFIGURATION_MINOR_VERSION); - + /* This should probably go away once we support more boards */ ASSERT((ArmBoardBlock->BoardType == MACH_TYPE_FEROCEON) || (ArmBoardBlock->BoardType == MACH_TYPE_VERSATILE_PB) || @@ -92,33 +91,40 @@ ArmDiskGetBootPath(OUT PCHAR BootPath, IN unsigned Size) { PCCH Path = "ramdisk(0)"; - + /* Make sure enough space exists */ if (Size < sizeof(Path)) return FALSE; - + /* On ARM platforms, the loader is always in RAM */ strcpy(BootPath, Path); return TRUE; } +BOOLEAN +ArmInitializeBootDevices(VOID) +{ + /* Emulate old behavior */ + return (ArmHwDetect() != NULL); +} + PCONFIGURATION_COMPONENT_DATA ArmHwDetect(VOID) { ARM_CACHE_REGISTER CacheReg; - + /* Create the root node */ if (ArmHwDetectRan++) return RootNode; FldrCreateSystemKey(&RootNode); - + /* * TODO: * There's no such thing as "PnP" on embedded hardware. * The boot loader will send us a device tree, similar to ACPI * or OpenFirmware device trees, and we will convert it to ARC. */ - + /* Get cache information */ - CacheReg = KeArmCacheRegisterGet(); + CacheReg = KeArmCacheRegisterGet(); FirstLevelDcacheSize = SizeBits[CacheReg.DSize]; FirstLevelDcacheFillSize = LenBits[CacheReg.DLength]; FirstLevelDcacheFillSize <<= 2; @@ -129,16 +135,16 @@ ArmHwDetect(VOID) SecondLevelDcacheFillSize = SecondLevelIcacheSize = SecondLevelIcacheFillSize = 0; - + /* Register RAMDISK Device */ RamDiskInitialize(); - + /* Fill out the ARC disk block */ reactos_arc_disk_info.Signature = 0xBADAB00F; reactos_arc_disk_info.CheckSum = 0xDEADBABE; reactos_arc_disk_info.ArcName = "ramdisk(0)"; reactos_disk_count = 1; - + /* Return the root node */ return RootNode; } @@ -182,7 +188,7 @@ MachInit(IN PCCH CommandLine) MachVtbl.VideoGetDisplaySize = ArmBoardBlock->VideoGetDisplaySize; MachVtbl.VideoPutChar = ArmBoardBlock->VideoPutChar; MachVtbl.GetTime = ArmBoardBlock->GetTime; - + /* Setup board-specific ARM routines */ switch (ArmBoardBlock->BoardType) { @@ -194,33 +200,34 @@ MachInit(IN PCCH CommandLine) /* Check for TI OMAP3 ZOOM-II MDK */ case MACH_TYPE_OMAP_ZOOM2: - + /* Setup the disk and file system buffers */ gDiskReadBuffer = 0x81094000; gFileSysBuffer = 0x81094000; break; - + /* Check for ARM Versatile PB boards */ case MACH_TYPE_VERSATILE_PB: - + /* Setup the disk and file system buffers */ gDiskReadBuffer = 0x00090000; gFileSysBuffer = 0x00090000; break; - + /* Check for TI OMAP3 Beagleboard */ case MACH_TYPE_OMAP3_BEAGLE: TuiPrintf("Not implemented\n"); while (TRUE); break; - + default: ASSERT(FALSE); } - + /* Setup generic ARM routines for all boards */ MachVtbl.PrepareForReactOS = ArmPrepareForReactOS; MachVtbl.GetMemoryMap = ArmMemGetMemoryMap; + MachVtbl.InitializeBootDevices = ArmInitializeBootDevices; MachVtbl.HwDetect = ArmHwDetect; MachVtbl.DiskGetBootPath = ArmDiskGetBootPath; MachVtbl.HwIdle = ArmHwIdle; diff --git a/boot/freeldr/freeldr/arch/i386/hardware.c b/boot/freeldr/freeldr/arch/i386/hardware.c index 8216144d381..3617ee0fca4 100644 --- a/boot/freeldr/freeldr/arch/i386/hardware.c +++ b/boot/freeldr/freeldr/arch/i386/hardware.c @@ -95,235 +95,252 @@ PCHAR GetHarddiskIdentifier( UCHAR DriveNumber); -VOID +BOOLEAN HwInitializeBiosDisks(VOID); /* FUNCTIONS ****************************************************************/ -static VOID +static +VOID __StallExecutionProcessor(ULONG Loops) { - register volatile unsigned int i; - for (i = 0; i < Loops; i++); + register volatile unsigned int i; + for (i = 0; i < Loops; i++); } VOID StallExecutionProcessor(ULONG Microseconds) { - ULONGLONG LoopCount = ((ULONGLONG)delay_count * (ULONGLONG)Microseconds) / 1000ULL; - __StallExecutionProcessor((ULONG)LoopCount); + ULONGLONG LoopCount = ((ULONGLONG)delay_count * (ULONGLONG)Microseconds) / 1000ULL; + __StallExecutionProcessor((ULONG)LoopCount); } -static ULONG +static +ULONG Read8254Timer(VOID) { - ULONG Count; + ULONG Count; - WRITE_PORT_UCHAR((PUCHAR)0x43, 0x00); - Count = READ_PORT_UCHAR((PUCHAR)0x40); - Count |= READ_PORT_UCHAR((PUCHAR)0x40) << 8; + WRITE_PORT_UCHAR((PUCHAR)0x43, 0x00); + Count = READ_PORT_UCHAR((PUCHAR)0x40); + Count |= READ_PORT_UCHAR((PUCHAR)0x40) << 8; - return Count; + return Count; } -static VOID +static +VOID WaitFor8254Wraparound(VOID) { - ULONG CurCount; - ULONG PrevCount = ~0; - LONG Delta; + ULONG CurCount; + ULONG PrevCount = ~0; + LONG Delta; - CurCount = Read8254Timer(); + CurCount = Read8254Timer(); - do + do { - PrevCount = CurCount; - CurCount = Read8254Timer(); - Delta = CurCount - PrevCount; + PrevCount = CurCount; + CurCount = Read8254Timer(); + Delta = CurCount - PrevCount; - /* - * This limit for delta seems arbitrary, but it isn't, it's - * slightly above the level of error a buggy Mercury/Neptune - * chipset timer can cause. - */ + /* + * This limit for delta seems arbitrary, but it isn't, it's + * slightly above the level of error a buggy Mercury/Neptune + * chipset timer can cause. + */ } - while (Delta < 300); + while (Delta < 300); } VOID HalpCalibrateStallExecution(VOID) { - ULONG i; - ULONG calib_bit; - ULONG CurCount; + ULONG i; + ULONG calib_bit; + ULONG CurCount; - /* Initialise timer interrupt with MILLISECOND ms interval */ - WRITE_PORT_UCHAR((PUCHAR)0x43, 0x34); /* binary, mode 2, LSB/MSB, ch 0 */ - WRITE_PORT_UCHAR((PUCHAR)0x40, LATCH & 0xff); /* LSB */ - WRITE_PORT_UCHAR((PUCHAR)0x40, LATCH >> 8); /* MSB */ + /* Initialise timer interrupt with MILLISECOND ms interval */ + WRITE_PORT_UCHAR((PUCHAR)0x43, 0x34); /* binary, mode 2, LSB/MSB, ch 0 */ + WRITE_PORT_UCHAR((PUCHAR)0x40, LATCH & 0xff); /* LSB */ + WRITE_PORT_UCHAR((PUCHAR)0x40, LATCH >> 8); /* MSB */ - /* Stage 1: Coarse calibration */ - - WaitFor8254Wraparound(); - - delay_count = 1; - - do { - delay_count <<= 1; /* Next delay count to try */ + /* Stage 1: Coarse calibration */ WaitFor8254Wraparound(); - __StallExecutionProcessor(delay_count); /* Do the delay */ + delay_count = 1; - CurCount = Read8254Timer(); - } while (CurCount > LATCH / 2); + do + { + /* Next delay count to try */ + delay_count <<= 1; - delay_count >>= 1; /* Get bottom value for delay */ + WaitFor8254Wraparound(); - /* Stage 2: Fine calibration */ + /* Do the delay */ + __StallExecutionProcessor(delay_count); - calib_bit = delay_count; /* Which bit are we going to test */ + CurCount = Read8254Timer(); + } + while (CurCount > LATCH / 2); - for(i=0;i>= 1; /* Next bit to calibrate */ - if(!calib_bit) break; /* If we have done all bits, stop */ + /* Get bottom value for delay */ + delay_count >>= 1; - delay_count |= calib_bit; /* Set the bit in delay_count */ + /* Stage 2: Fine calibration */ - WaitFor8254Wraparound(); + /* Which bit are we going to test */ + calib_bit = delay_count; - __StallExecutionProcessor(delay_count); /* Do the delay */ + for (i = 0; i < PRECISION; i++) + { + /* Next bit to calibrate */ + calib_bit >>= 1; - CurCount = Read8254Timer(); - if (CurCount <= LATCH / 2) /* If a tick has passed, turn the */ - delay_count &= ~calib_bit; /* calibrated bit back off */ - } + /* If we have done all bits, stop */ + if (!calib_bit) break; - /* We're finished: Do the finishing touches */ - delay_count /= (MILLISEC / 2); /* Calculate delay_count for 1ms */ + /* Set the bit in delay_count */ + delay_count |= calib_bit; + + WaitFor8254Wraparound(); + + /* Do the delay */ + __StallExecutionProcessor(delay_count); + + CurCount = Read8254Timer(); + /* If a tick has passed, turn the calibrated bit back off */ + if (CurCount <= LATCH / 2) + delay_count &= ~calib_bit; + } + + /* We're finished: Do the finishing touches */ + + /* Calculate delay_count for 1ms */ + delay_count /= (MILLISEC / 2); } -static VOID +static +VOID DetectPnpBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) { - PCM_PARTIAL_RESOURCE_LIST PartialResourceList; - PCM_PNP_BIOS_DEVICE_NODE DeviceNode; - PCM_PNP_BIOS_INSTALLATION_CHECK InstData; - PCONFIGURATION_COMPONENT_DATA BusKey; - ULONG x; - ULONG NodeSize = 0; - ULONG NodeCount = 0; - UCHAR NodeNumber; - ULONG FoundNodeCount; - int i; - ULONG PnpBufferSize; - ULONG Size; - char *Ptr; + PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCM_PNP_BIOS_DEVICE_NODE DeviceNode; + PCM_PNP_BIOS_INSTALLATION_CHECK InstData; + PCONFIGURATION_COMPONENT_DATA BusKey; + ULONG x; + ULONG NodeSize = 0; + ULONG NodeCount = 0; + UCHAR NodeNumber; + ULONG FoundNodeCount; + int i; + ULONG PnpBufferSize; + ULONG Size; + char *Ptr; - InstData = (PCM_PNP_BIOS_INSTALLATION_CHECK)PnpBiosSupported(); - if (InstData == NULL || strncmp((CHAR*)InstData->Signature, "$PnP", 4)) + InstData = (PCM_PNP_BIOS_INSTALLATION_CHECK)PnpBiosSupported(); + if (InstData == NULL || strncmp((CHAR*)InstData->Signature, "$PnP", 4)) { - TRACE("PnP-BIOS not supported\n"); - return; + TRACE("PnP-BIOS not supported\n"); + return; } - TRACE("PnP-BIOS supported\n"); - TRACE("Signature '%c%c%c%c'\n", - InstData->Signature[0], InstData->Signature[1], - InstData->Signature[2], InstData->Signature[3]); + TRACE("PnP-BIOS supported\n"); + TRACE("Signature '%c%c%c%c'\n", + InstData->Signature[0], InstData->Signature[1], + InstData->Signature[2], InstData->Signature[3]); - x = PnpBiosGetDeviceNodeCount(&NodeSize, &NodeCount); - if (x == 0x82) + x = PnpBiosGetDeviceNodeCount(&NodeSize, &NodeCount); + if (x == 0x82) { - TRACE("PnP-BIOS function 'Get Number of System Device Nodes' not supported\n"); - return; + TRACE("PnP-BIOS function 'Get Number of System Device Nodes' not supported\n"); + return; } - NodeCount &= 0xFF; // needed since some fscked up BIOSes return - // wrong info (e.g. Mac Virtual PC) - // e.g. look: http://my.execpc.com/~geezer/osd/pnp/pnp16.c - if (x != 0 || NodeSize == 0 || NodeCount == 0) + NodeCount &= 0xFF; // needed since some fscked up BIOSes return + // wrong info (e.g. Mac Virtual PC) + // e.g. look: http://my.execpc.com/~geezer/osd/pnp/pnp16.c + if (x != 0 || NodeSize == 0 || NodeCount == 0) { - ERR("PnP-BIOS failed to enumerate device nodes\n"); - return; + ERR("PnP-BIOS failed to enumerate device nodes\n"); + return; } - TRACE("MaxNodeSize %u NodeCount %u\n", NodeSize, NodeCount); - TRACE("Estimated buffer size %u\n", NodeSize * NodeCount); + TRACE("MaxNodeSize %u NodeCount %u\n", NodeSize, NodeCount); + TRACE("Estimated buffer size %u\n", NodeSize * NodeCount); /* Set 'Configuration Data' value */ - Size = sizeof(CM_PARTIAL_RESOURCE_LIST) - + sizeof(CM_PNP_BIOS_INSTALLATION_CHECK) + (NodeSize * NodeCount); - PartialResourceList = MmHeapAlloc(Size); - if (PartialResourceList == NULL) + Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + + sizeof(CM_PNP_BIOS_INSTALLATION_CHECK) + (NodeSize * NodeCount); + PartialResourceList = MmHeapAlloc(Size); + if (PartialResourceList == NULL) { - ERR("Failed to allocate resource descriptor\n"); - return; + ERR("Failed to allocate resource descriptor\n"); + return; } - memset(PartialResourceList, 0, Size); + memset(PartialResourceList, 0, Size); - /* Initialize resource descriptor */ - PartialResourceList->Version = 1; - PartialResourceList->Revision = 1; - PartialResourceList->Count = 1; - PartialResourceList->PartialDescriptors[0].Type = - CmResourceTypeDeviceSpecific; - PartialResourceList->PartialDescriptors[0].ShareDisposition = - CmResourceShareUndetermined; + /* Initialize resource descriptor */ + PartialResourceList->Version = 1; + PartialResourceList->Revision = 1; + PartialResourceList->Count = 1; + PartialResourceList->PartialDescriptors[0].Type = + CmResourceTypeDeviceSpecific; + PartialResourceList->PartialDescriptors[0].ShareDisposition = + CmResourceShareUndetermined; - /* The buffer starts after PartialResourceList->PartialDescriptors[0] */ - Ptr = (char *)(PartialResourceList + 1); + /* The buffer starts after PartialResourceList->PartialDescriptors[0] */ + Ptr = (char *)(PartialResourceList + 1); - /* Set instalation check data */ - memcpy (Ptr, InstData, sizeof(CM_PNP_BIOS_INSTALLATION_CHECK)); - Ptr += sizeof(CM_PNP_BIOS_INSTALLATION_CHECK); + /* Set instalation check data */ + memcpy (Ptr, InstData, sizeof(CM_PNP_BIOS_INSTALLATION_CHECK)); + Ptr += sizeof(CM_PNP_BIOS_INSTALLATION_CHECK); - /* Copy device nodes */ - FoundNodeCount = 0; - PnpBufferSize = sizeof(CM_PNP_BIOS_INSTALLATION_CHECK); - for (i = 0; i < 0xFF; i++) + /* Copy device nodes */ + FoundNodeCount = 0; + PnpBufferSize = sizeof(CM_PNP_BIOS_INSTALLATION_CHECK); + for (i = 0; i < 0xFF; i++) { - NodeNumber = (UCHAR)i; + NodeNumber = (UCHAR)i; - x = PnpBiosGetDeviceNode(&NodeNumber, (PVOID)DISKREADBUFFER); - if (x == 0) - { - DeviceNode = (PCM_PNP_BIOS_DEVICE_NODE)DISKREADBUFFER; + x = PnpBiosGetDeviceNode(&NodeNumber, (PVOID)DISKREADBUFFER); + if (x == 0) + { + DeviceNode = (PCM_PNP_BIOS_DEVICE_NODE)DISKREADBUFFER; - TRACE("Node: %u Size %u (0x%x)\n", - DeviceNode->Node, - DeviceNode->Size, - DeviceNode->Size); + TRACE("Node: %u Size %u (0x%x)\n", + DeviceNode->Node, + DeviceNode->Size, + DeviceNode->Size); - if (PnpBufferSize + DeviceNode->Size > Size) - { - ERR("Buffer too small!\n"); - break; - } + if (PnpBufferSize + DeviceNode->Size > Size) + { + ERR("Buffer too small!\n"); + break; + } - memcpy (Ptr, - DeviceNode, - DeviceNode->Size); + memcpy(Ptr, DeviceNode, DeviceNode->Size); - Ptr += DeviceNode->Size; - PnpBufferSize += DeviceNode->Size; + Ptr += DeviceNode->Size; + PnpBufferSize += DeviceNode->Size; - FoundNodeCount++; - if (FoundNodeCount >= NodeCount) - break; - } + FoundNodeCount++; + if (FoundNodeCount >= NodeCount) + break; + } } - /* Set real data size */ - PartialResourceList->PartialDescriptors[0].u.DeviceSpecificData.DataSize = - PnpBufferSize; - Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + PnpBufferSize; + /* Set real data size */ + PartialResourceList->PartialDescriptors[0].u.DeviceSpecificData.DataSize = + PnpBufferSize; + Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + PnpBufferSize; - TRACE("Real buffer size: %u\n", PnpBufferSize); - TRACE("Resource size: %u\n", Size); + TRACE("Real buffer size: %u\n", PnpBufferSize); + TRACE("Resource size: %u\n", Size); /* Create component key */ FldrCreateComponentKey(SystemKey, @@ -338,8 +355,6 @@ DetectPnpBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) &BusKey); (*BusNumber)++; - - MmHeapFree(PartialResourceList); } @@ -347,69 +362,69 @@ DetectPnpBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) static PCM_PARTIAL_RESOURCE_LIST GetHarddiskConfigurationData(UCHAR DriveNumber, ULONG* pSize) { - PCM_PARTIAL_RESOURCE_LIST PartialResourceList; - PCM_DISK_GEOMETRY_DEVICE_DATA DiskGeometry; - EXTENDED_GEOMETRY ExtGeometry; - GEOMETRY Geometry; - ULONG Size; + PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCM_DISK_GEOMETRY_DEVICE_DATA DiskGeometry; + EXTENDED_GEOMETRY ExtGeometry; + GEOMETRY Geometry; + ULONG Size; // // Initialize returned size // *pSize = 0; - /* Set 'Configuration Data' value */ - Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + - sizeof(CM_DISK_GEOMETRY_DEVICE_DATA); - PartialResourceList = MmHeapAlloc(Size); - if (PartialResourceList == NULL) + /* Set 'Configuration Data' value */ + Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + + sizeof(CM_DISK_GEOMETRY_DEVICE_DATA); + PartialResourceList = MmHeapAlloc(Size); + if (PartialResourceList == NULL) { - ERR("Failed to allocate a full resource descriptor\n"); - return NULL; + ERR("Failed to allocate a full resource descriptor\n"); + return NULL; } - memset(PartialResourceList, 0, Size); - PartialResourceList->Version = 1; - PartialResourceList->Revision = 1; - PartialResourceList->Count = 1; - PartialResourceList->PartialDescriptors[0].Type = - CmResourceTypeDeviceSpecific; + memset(PartialResourceList, 0, Size); + PartialResourceList->Version = 1; + PartialResourceList->Revision = 1; + PartialResourceList->Count = 1; + PartialResourceList->PartialDescriptors[0].Type = + CmResourceTypeDeviceSpecific; // PartialResourceList->PartialDescriptors[0].ShareDisposition = // PartialResourceList->PartialDescriptors[0].Flags = - PartialResourceList->PartialDescriptors[0].u.DeviceSpecificData.DataSize = - sizeof(CM_DISK_GEOMETRY_DEVICE_DATA); + PartialResourceList->PartialDescriptors[0].u.DeviceSpecificData.DataSize = + sizeof(CM_DISK_GEOMETRY_DEVICE_DATA); - /* Get pointer to geometry data */ - DiskGeometry = (PVOID)(((ULONG_PTR)PartialResourceList) + sizeof(CM_PARTIAL_RESOURCE_LIST)); + /* Get pointer to geometry data */ + DiskGeometry = (PVOID)(((ULONG_PTR)PartialResourceList) + sizeof(CM_PARTIAL_RESOURCE_LIST)); - /* Get the disk geometry */ - ExtGeometry.Size = sizeof(EXTENDED_GEOMETRY); - if (DiskGetExtendedDriveParameters(DriveNumber, &ExtGeometry, ExtGeometry.Size)) + /* Get the disk geometry */ + ExtGeometry.Size = sizeof(EXTENDED_GEOMETRY); + if (DiskGetExtendedDriveParameters(DriveNumber, &ExtGeometry, ExtGeometry.Size)) { - DiskGeometry->BytesPerSector = ExtGeometry.BytesPerSector; - DiskGeometry->NumberOfCylinders = ExtGeometry.Cylinders; - DiskGeometry->SectorsPerTrack = ExtGeometry.SectorsPerTrack; - DiskGeometry->NumberOfHeads = ExtGeometry.Heads; + DiskGeometry->BytesPerSector = ExtGeometry.BytesPerSector; + DiskGeometry->NumberOfCylinders = ExtGeometry.Cylinders; + DiskGeometry->SectorsPerTrack = ExtGeometry.SectorsPerTrack; + DiskGeometry->NumberOfHeads = ExtGeometry.Heads; } - else if(MachDiskGetDriveGeometry(DriveNumber, &Geometry)) + else if(MachDiskGetDriveGeometry(DriveNumber, &Geometry)) { - DiskGeometry->BytesPerSector = Geometry.BytesPerSector; - DiskGeometry->NumberOfCylinders = Geometry.Cylinders; - DiskGeometry->SectorsPerTrack = Geometry.Sectors; - DiskGeometry->NumberOfHeads = Geometry.Heads; + DiskGeometry->BytesPerSector = Geometry.BytesPerSector; + DiskGeometry->NumberOfCylinders = Geometry.Cylinders; + DiskGeometry->SectorsPerTrack = Geometry.Sectors; + DiskGeometry->NumberOfHeads = Geometry.Heads; } - else + else { - TRACE("Reading disk geometry failed\n"); - MmHeapFree(PartialResourceList); - return NULL; + TRACE("Reading disk geometry failed\n"); + MmHeapFree(PartialResourceList); + return NULL; } - TRACE("Disk %x: %u Cylinders %u Heads %u Sectors %u Bytes\n", - DriveNumber, - DiskGeometry->NumberOfCylinders, - DiskGeometry->NumberOfHeads, - DiskGeometry->SectorsPerTrack, - DiskGeometry->BytesPerSector); + TRACE("Disk %x: %u Cylinders %u Heads %u Sectors %u Bytes\n", + DriveNumber, + DiskGeometry->NumberOfCylinders, + DiskGeometry->NumberOfHeads, + DiskGeometry->SectorsPerTrack, + DiskGeometry->BytesPerSector); // // Return configuration data @@ -418,173 +433,174 @@ GetHarddiskConfigurationData(UCHAR DriveNumber, ULONG* pSize) return PartialResourceList; } -static UCHAR +static +UCHAR GetFloppyCount(VOID) { - UCHAR Data; + UCHAR Data; - WRITE_PORT_UCHAR((PUCHAR)0x70, 0x10); - Data = READ_PORT_UCHAR((PUCHAR)0x71); + WRITE_PORT_UCHAR((PUCHAR)0x70, 0x10); + Data = READ_PORT_UCHAR((PUCHAR)0x71); - return ((Data & 0xF0) ? 1 : 0) + ((Data & 0x0F) ? 1 : 0); + return ((Data & 0xF0) ? 1 : 0) + ((Data & 0x0F) ? 1 : 0); } -static UCHAR +static +UCHAR GetFloppyType(UCHAR DriveNumber) { - UCHAR Data; + UCHAR Data; - WRITE_PORT_UCHAR((PUCHAR)0x70, 0x10); - Data = READ_PORT_UCHAR((PUCHAR)0x71); + WRITE_PORT_UCHAR((PUCHAR)0x70, 0x10); + Data = READ_PORT_UCHAR((PUCHAR)0x71); - if (DriveNumber == 0) - return Data >> 4; - else if (DriveNumber == 1) - return Data & 0x0F; + if (DriveNumber == 0) + return Data >> 4; + else if (DriveNumber == 1) + return Data & 0x0F; - return 0; + return 0; } -static PVOID +static +PVOID GetInt1eTable(VOID) { - PUSHORT SegPtr = (PUSHORT)0x7A; - PUSHORT OfsPtr = (PUSHORT)0x78; + PUSHORT SegPtr = (PUSHORT)0x7A; + PUSHORT OfsPtr = (PUSHORT)0x78; - return (PVOID)((ULONG_PTR)(((ULONG)(*SegPtr)) << 4) + (ULONG)(*OfsPtr)); + return (PVOID)((ULONG_PTR)(((ULONG)(*SegPtr)) << 4) + (ULONG)(*OfsPtr)); } -static VOID +static +VOID DetectBiosFloppyPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey) { - PCM_PARTIAL_RESOURCE_LIST PartialResourceList; - PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; - PCM_FLOPPY_DEVICE_DATA FloppyData; - CHAR Identifier[20]; - PCONFIGURATION_COMPONENT_DATA PeripheralKey; - ULONG Size; - UCHAR FloppyNumber; - UCHAR FloppyType; - ULONG MaxDensity[6] = {0, 360, 1200, 720, 1440, 2880}; - PUCHAR Ptr; + PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; + PCM_FLOPPY_DEVICE_DATA FloppyData; + CHAR Identifier[20]; + PCONFIGURATION_COMPONENT_DATA PeripheralKey; + ULONG Size; + UCHAR FloppyNumber; + UCHAR FloppyType; + ULONG MaxDensity[6] = {0, 360, 1200, 720, 1440, 2880}; + PUCHAR Ptr; - for (FloppyNumber = 0; FloppyNumber < 2; FloppyNumber++) - { - FloppyType = GetFloppyType(FloppyNumber); + for (FloppyNumber = 0; FloppyNumber < 2; FloppyNumber++) + { + FloppyType = GetFloppyType(FloppyNumber); - if ((FloppyType > 5) || (FloppyType == 0)) - continue; + if ((FloppyType > 5) || (FloppyType == 0)) + continue; - if (!DiskResetController(FloppyNumber)) - continue; + if (!DiskResetController(FloppyNumber)) + continue; - Ptr = GetInt1eTable(); + Ptr = GetInt1eTable(); - /* Set 'Identifier' value */ - sprintf(Identifier, "FLOPPY%d", FloppyNumber + 1); + /* Set 'Identifier' value */ + sprintf(Identifier, "FLOPPY%d", FloppyNumber + 1); + + Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + + sizeof(CM_FLOPPY_DEVICE_DATA); + PartialResourceList = MmHeapAlloc(Size); + if (PartialResourceList == NULL) + { + ERR("Failed to allocate resource descriptor\n"); + return; + } + + memset(PartialResourceList, 0, Size); + PartialResourceList->Version = 1; + PartialResourceList->Revision = 1; + PartialResourceList->Count = 1; + + PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; + PartialDescriptor->Type = CmResourceTypeDeviceSpecific; + PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; + PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(CM_FLOPPY_DEVICE_DATA); + + FloppyData = (PVOID)(((ULONG_PTR)PartialResourceList) + sizeof(CM_PARTIAL_RESOURCE_LIST)); + FloppyData->Version = 2; + FloppyData->Revision = 0; + FloppyData->MaxDensity = MaxDensity[FloppyType]; + FloppyData->MountDensity = 0; + RtlCopyMemory(&FloppyData->StepRateHeadUnloadTime, Ptr, 11); + FloppyData->MaximumTrackValue = (FloppyType == 1) ? 39 : 79; + FloppyData->DataTransferRate = 0; + + FldrCreateComponentKey(ControllerKey, + PeripheralClass, + FloppyDiskPeripheral, + Input | Output, + FloppyNumber, + 0xFFFFFFFF, + Identifier, + PartialResourceList, + Size, + &PeripheralKey); + } +} + + +static +VOID +DetectBiosFloppyController(PCONFIGURATION_COMPONENT_DATA BusKey) +{ + PCONFIGURATION_COMPONENT_DATA ControllerKey; + PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; + ULONG Size; + ULONG FloppyCount; + + FloppyCount = GetFloppyCount(); + TRACE("Floppy count: %u\n", + FloppyCount); Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + - sizeof(CM_FLOPPY_DEVICE_DATA); + 2 * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); PartialResourceList = MmHeapAlloc(Size); if (PartialResourceList == NULL) { - ERR("Failed to allocate resource descriptor\n"); - return; + ERR("Failed to allocate resource descriptor\n"); + return; } - memset(PartialResourceList, 0, Size); + + /* Initialize resource descriptor */ PartialResourceList->Version = 1; PartialResourceList->Revision = 1; - PartialResourceList->Count = 1; + PartialResourceList->Count = 3; + /* Set IO Port */ PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; - PartialDescriptor->Type = CmResourceTypeDeviceSpecific; + PartialDescriptor->Type = CmResourceTypePort; + PartialDescriptor->ShareDisposition = CmResourceShareDeviceExclusive; + PartialDescriptor->Flags = CM_RESOURCE_PORT_IO; + PartialDescriptor->u.Port.Start.LowPart = 0x03F0; + PartialDescriptor->u.Port.Start.HighPart = 0x0; + PartialDescriptor->u.Port.Length = 8; + + /* Set Interrupt */ + PartialDescriptor = &PartialResourceList->PartialDescriptors[1]; + PartialDescriptor->Type = CmResourceTypeInterrupt; PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; - PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(CM_FLOPPY_DEVICE_DATA); + PartialDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED; + PartialDescriptor->u.Interrupt.Level = 6; + PartialDescriptor->u.Interrupt.Vector = 6; + PartialDescriptor->u.Interrupt.Affinity = 0xFFFFFFFF; - FloppyData = (PVOID)(((ULONG_PTR)PartialResourceList) + sizeof(CM_PARTIAL_RESOURCE_LIST)); - FloppyData->Version = 2; - FloppyData->Revision = 0; - FloppyData->MaxDensity = MaxDensity[FloppyType]; - FloppyData->MountDensity = 0; - RtlCopyMemory(&FloppyData->StepRateHeadUnloadTime, - Ptr, - 11); - FloppyData->MaximumTrackValue = (FloppyType == 1) ? 39 : 79; - FloppyData->DataTransferRate = 0; - - FldrCreateComponentKey(ControllerKey, - PeripheralClass, - FloppyDiskPeripheral, - Input | Output, - FloppyNumber, - 0xFFFFFFFF, - Identifier, - PartialResourceList, - Size, - &PeripheralKey); - - MmHeapFree(PartialResourceList); - } -} - - -static VOID -DetectBiosFloppyController(PCONFIGURATION_COMPONENT_DATA BusKey) -{ - PCONFIGURATION_COMPONENT_DATA ControllerKey; - PCM_PARTIAL_RESOURCE_LIST PartialResourceList; - PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; - ULONG Size; - ULONG FloppyCount; - - FloppyCount = GetFloppyCount(); - TRACE("Floppy count: %u\n", - FloppyCount); - - Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + - 2 * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); - PartialResourceList = MmHeapAlloc(Size); - if (PartialResourceList == NULL) - { - ERR("Failed to allocate resource descriptor\n"); - return; - } - memset(PartialResourceList, 0, Size); - - /* Initialize resource descriptor */ - PartialResourceList->Version = 1; - PartialResourceList->Revision = 1; - PartialResourceList->Count = 3; - - /* Set IO Port */ - PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; - PartialDescriptor->Type = CmResourceTypePort; - PartialDescriptor->ShareDisposition = CmResourceShareDeviceExclusive; - PartialDescriptor->Flags = CM_RESOURCE_PORT_IO; - PartialDescriptor->u.Port.Start.LowPart = 0x03F0; - PartialDescriptor->u.Port.Start.HighPart = 0x0; - PartialDescriptor->u.Port.Length = 8; - - /* Set Interrupt */ - PartialDescriptor = &PartialResourceList->PartialDescriptors[1]; - PartialDescriptor->Type = CmResourceTypeInterrupt; - PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; - PartialDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED; - PartialDescriptor->u.Interrupt.Level = 6; - PartialDescriptor->u.Interrupt.Vector = 6; - PartialDescriptor->u.Interrupt.Affinity = 0xFFFFFFFF; - - /* Set DMA channel */ - PartialDescriptor = &PartialResourceList->PartialDescriptors[2]; - PartialDescriptor->Type = CmResourceTypeDma; - PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; - PartialDescriptor->Flags = 0; - PartialDescriptor->u.Dma.Channel = 2; - PartialDescriptor->u.Dma.Port = 0; + /* Set DMA channel */ + PartialDescriptor = &PartialResourceList->PartialDescriptors[2]; + PartialDescriptor->Type = CmResourceTypeDma; + PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; + PartialDescriptor->Flags = 0; + PartialDescriptor->u.Dma.Channel = 2; + PartialDescriptor->u.Dma.Port = 0; /* Create floppy disk controller */ FldrCreateComponentKey(BusKey, @@ -599,12 +615,11 @@ DetectBiosFloppyController(PCONFIGURATION_COMPONENT_DATA BusKey) &ControllerKey); TRACE("Created key: DiskController\\0\n"); - MmHeapFree(PartialResourceList); - - if (FloppyCount) DetectBiosFloppyPeripheral(ControllerKey); + if (FloppyCount) DetectBiosFloppyPeripheral(ControllerKey); } -static PCONFIGURATION_COMPONENT_DATA +static +PCONFIGURATION_COMPONENT_DATA DetectSystem(VOID) { PCONFIGURATION_COMPONENT_DATA SystemKey; @@ -619,7 +634,7 @@ DetectSystem(VOID) /* Allocate resource descriptor */ Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + - sizeof(CM_INT13_DRIVE_PARAMETER) * DiskCount; + sizeof(CM_INT13_DRIVE_PARAMETER) * DiskCount; PartialResourceList = MmHeapAlloc(Size); if (PartialResourceList == NULL) { @@ -653,7 +668,7 @@ DetectSystem(VOID) TRACE("Disk %x: %u Cylinders %u Heads %u Sectors %u Bytes\n", 0x80 + i, Geometry.Cylinders - 1, - Geometry.Heads -1, + Geometry.Heads - 1, Geometry.Sectors, Geometry.BytesPerSector); } @@ -670,12 +685,11 @@ DetectSystem(VOID) Size, &SystemKey); - MmHeapFree(PartialResourceList); - return SystemKey; } -static VOID +static +VOID DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA BusKey) { PCONFIGURATION_COMPONENT_DATA DiskKey, ControllerKey; @@ -717,432 +731,435 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA BusKey) Size, &DiskKey); } - } -static VOID +static +VOID InitializeSerialPort(PUCHAR Port, - UCHAR LineControl) + UCHAR LineControl) { - WRITE_PORT_UCHAR(Port + 3, 0x80); /* set DLAB on */ - WRITE_PORT_UCHAR(Port, 0x60); /* speed LO byte */ - WRITE_PORT_UCHAR(Port + 1, 0); /* speed HI byte */ - WRITE_PORT_UCHAR(Port + 3, LineControl); - WRITE_PORT_UCHAR(Port + 1, 0); /* set comm and DLAB to 0 */ - WRITE_PORT_UCHAR(Port + 4, 0x09); /* DR int enable */ - READ_PORT_UCHAR(Port + 5); /* clear error bits */ + WRITE_PORT_UCHAR(Port + 3, 0x80); /* set DLAB on */ + WRITE_PORT_UCHAR(Port, 0x60); /* speed LO byte */ + WRITE_PORT_UCHAR(Port + 1, 0); /* speed HI byte */ + WRITE_PORT_UCHAR(Port + 3, LineControl); + WRITE_PORT_UCHAR(Port + 1, 0); /* set comm and DLAB to 0 */ + WRITE_PORT_UCHAR(Port + 4, 0x09); /* DR int enable */ + READ_PORT_UCHAR(Port + 5); /* clear error bits */ } -static ULONG +static +ULONG DetectSerialMouse(PUCHAR Port) { - CHAR Buffer[4]; - ULONG i; - ULONG TimeOut; - UCHAR LineControl; + CHAR Buffer[4]; + ULONG i; + ULONG TimeOut; + UCHAR LineControl; - /* Shutdown mouse or something like that */ - LineControl = READ_PORT_UCHAR(Port + 4); - WRITE_PORT_UCHAR(Port + 4, (LineControl & ~0x02) | 0x01); - StallExecutionProcessor(100000); + /* Shutdown mouse or something like that */ + LineControl = READ_PORT_UCHAR(Port + 4); + WRITE_PORT_UCHAR(Port + 4, (LineControl & ~0x02) | 0x01); + StallExecutionProcessor(100000); - /* - * Clear buffer - * Maybe there is no serial port although BIOS reported one (this - * is the case on Apple hardware), or the serial port is misbehaving, - * therefore we must give up after some time. - */ - TimeOut = 200; - while (READ_PORT_UCHAR(Port + 5) & 0x01) + /* + * Clear buffer + * Maybe there is no serial port although BIOS reported one (this + * is the case on Apple hardware), or the serial port is misbehaving, + * therefore we must give up after some time. + */ + TimeOut = 200; + while (READ_PORT_UCHAR(Port + 5) & 0x01) { - if (--TimeOut == 0) - return MOUSE_TYPE_NONE; - READ_PORT_UCHAR(Port); + if (--TimeOut == 0) + return MOUSE_TYPE_NONE; + READ_PORT_UCHAR(Port); } - /* - * Send modem control with 'Data Terminal Ready', 'Request To Send' and - * 'Output Line 2' message. This enables mouse to identify. - */ - WRITE_PORT_UCHAR(Port + 4, 0x0b); + /* + * Send modem control with 'Data Terminal Ready', 'Request To Send' and + * 'Output Line 2' message. This enables mouse to identify. + */ + WRITE_PORT_UCHAR(Port + 4, 0x0b); - /* Wait 10 milliseconds for the mouse getting ready */ - StallExecutionProcessor(10000); + /* Wait 10 milliseconds for the mouse getting ready */ + StallExecutionProcessor(10000); - /* Read first four bytes, which contains Microsoft Mouse signs */ - TimeOut = 200; - for (i = 0; i < 4; i++) + /* Read first four bytes, which contains Microsoft Mouse signs */ + TimeOut = 200; + for (i = 0; i < 4; i++) { - while (((READ_PORT_UCHAR(Port + 5) & 1) == 0) && (TimeOut > 0)) - { - StallExecutionProcessor(1000); - --TimeOut; - if (TimeOut == 0) - return MOUSE_TYPE_NONE; - } - Buffer[i] = READ_PORT_UCHAR(Port); + while (((READ_PORT_UCHAR(Port + 5) & 1) == 0) && (TimeOut > 0)) + { + StallExecutionProcessor(1000); + --TimeOut; + if (TimeOut == 0) + return MOUSE_TYPE_NONE; + } + Buffer[i] = READ_PORT_UCHAR(Port); } - TRACE("Mouse data: %x %x %x %x\n", - Buffer[0],Buffer[1],Buffer[2],Buffer[3]); + TRACE("Mouse data: %x %x %x %x\n", + Buffer[0], Buffer[1], Buffer[2], Buffer[3]); - /* Check that four bytes for signs */ - for (i = 0; i < 4; ++i) + /* Check that four bytes for signs */ + for (i = 0; i < 4; ++i) { - if (Buffer[i] == 'B') - { - /* Sign for Microsoft Ballpoint */ + if (Buffer[i] == 'B') + { + /* Sign for Microsoft Ballpoint */ // DbgPrint("Microsoft Ballpoint device detected\n"); // DbgPrint("THIS DEVICE IS NOT SUPPORTED, YET\n"); - return MOUSE_TYPE_NONE; - } - else if (Buffer[i] == 'M') - { - /* Sign for Microsoft Mouse protocol followed by button specifier */ - if (i == 3) - { - /* Overflow Error */ - return MOUSE_TYPE_NONE; - } + return MOUSE_TYPE_NONE; + } + else if (Buffer[i] == 'M') + { + /* Sign for Microsoft Mouse protocol followed by button specifier */ + if (i == 3) + { + /* Overflow Error */ + return MOUSE_TYPE_NONE; + } - switch (Buffer[i + 1]) - { - case '3': - TRACE("Microsoft Mouse with 3-buttons detected\n"); - return MOUSE_TYPE_LOGITECH; + switch (Buffer[i + 1]) + { + case '3': + TRACE("Microsoft Mouse with 3-buttons detected\n"); + return MOUSE_TYPE_LOGITECH; - case 'Z': - TRACE("Microsoft Wheel Mouse detected\n"); - return MOUSE_TYPE_WHEELZ; + case 'Z': + TRACE("Microsoft Wheel Mouse detected\n"); + return MOUSE_TYPE_WHEELZ; - /* case '2': */ - default: - TRACE("Microsoft Mouse with 2-buttons detected\n"); - return MOUSE_TYPE_MICROSOFT; - } - } + /* case '2': */ + default: + TRACE("Microsoft Mouse with 2-buttons detected\n"); + return MOUSE_TYPE_MICROSOFT; + } + } } - return MOUSE_TYPE_NONE; + return MOUSE_TYPE_NONE; } static ULONG GetSerialMousePnpId(PUCHAR Port, char *Buffer) { - ULONG TimeOut; - ULONG i = 0; - char c; - char x; + ULONG TimeOut; + ULONG i = 0; + char c; + char x; - WRITE_PORT_UCHAR(Port + 4, 0x09); + WRITE_PORT_UCHAR(Port + 4, 0x09); - /* Wait 10 milliseconds for the mouse getting ready */ - StallExecutionProcessor(10000); + /* Wait 10 milliseconds for the mouse getting ready */ + StallExecutionProcessor(10000); - WRITE_PORT_UCHAR(Port + 4, 0x0b); + WRITE_PORT_UCHAR(Port + 4, 0x0b); - StallExecutionProcessor(10000); + StallExecutionProcessor(10000); - for (;;) + for (;;) { - TimeOut = 200; - while (((READ_PORT_UCHAR(Port + 5) & 1) == 0) && (TimeOut > 0)) - { - StallExecutionProcessor(1000); - --TimeOut; - if (TimeOut == 0) - { - return 0; - } - } - - c = READ_PORT_UCHAR(Port); - if (c == 0x08 || c == 0x28) - break; - } - - Buffer[i++] = c; - x = c + 1; - - for (;;) - { - TimeOut = 200; - while (((READ_PORT_UCHAR(Port + 5) & 1) == 0) && (TimeOut > 0)) - { - StallExecutionProcessor(1000); - --TimeOut; - if (TimeOut == 0) - return 0; - } - c = READ_PORT_UCHAR(Port); - Buffer[i++] = c; - if (c == x) - break; - if (i >= 256) - break; - } - - return i; -} - - -static VOID -DetectSerialPointerPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey, - PUCHAR Base) -{ - CM_PARTIAL_RESOURCE_LIST PartialResourceList; - char Buffer[256]; - CHAR Identifier[256]; - PCONFIGURATION_COMPONENT_DATA PeripheralKey; - ULONG MouseType; - ULONG Length; - ULONG i; - ULONG j; - ULONG k; - - TRACE("DetectSerialPointerPeripheral()\n"); - - Identifier[0] = 0; - - InitializeSerialPort(Base, 2); - MouseType = DetectSerialMouse(Base); - - if (MouseType != MOUSE_TYPE_NONE) - { - Length = GetSerialMousePnpId(Base, Buffer); - TRACE( "PnP ID length: %u\n", Length); - - if (Length != 0) - { - /* Convert PnP sting to ASCII */ - if (Buffer[0] == 0x08) - { - for (i = 0; i < Length; i++) - Buffer[i] += 0x20; - } - Buffer[Length] = 0; - - TRACE("PnP ID string: %s\n", Buffer); - - /* Copy PnpId string */ - for (i = 0; i < 7; i++) - { - Identifier[i] = Buffer[3+i]; - } - memcpy(&Identifier[7], - L" - ", - 3 * sizeof(WCHAR)); - - /* Skip device serial number */ - i = 10; - if (Buffer[i] == '\\') - { - for (j = ++i; i < Length; ++i) - { - if (Buffer[i] == '\\') - break; - } - if (i >= Length) - i -= 3; - } - - /* Skip PnP class */ - if (Buffer[i] == '\\') - { - for (j = ++i; i < Length; ++i) - { - if (Buffer[i] == '\\') - break; - } - - if (i >= Length) - i -= 3; - } - - /* Skip compatible PnP Id */ - if (Buffer[i] == '\\') - { - for (j = ++i; i < Length; ++i) - { - if (Buffer[i] == '\\') - break; - } - if (Buffer[j] == '*') - ++j; - if (i >= Length) - i -= 3; - } - - /* Get product description */ - if (Buffer[i] == '\\') - { - for (j = ++i; i < Length; ++i) - { - if (Buffer[i] == ';') - break; - } - if (i >= Length) - i -= 3; - if (i > j + 1) - { - for (k = 0; k < i - j; k++) - { - Identifier[k + 10] = Buffer[k + j]; - } - Identifier[10 + (i-j)] = 0; - } - } - - TRACE("Identifier string: %s\n", Identifier); - } - - if (Length == 0 || strlen(Identifier) < 11) - { - switch (MouseType) - { - case MOUSE_TYPE_LOGITECH: - strcpy(Identifier, "LOGITECH SERIAL MOUSE"); - break; - - case MOUSE_TYPE_WHEELZ: - strcpy(Identifier, "MICROSOFT SERIAL MOUSE WITH WHEEL"); - break; - - case MOUSE_TYPE_MICROSOFT: - default: - strcpy(Identifier, "MICROSOFT SERIAL MOUSE"); - break; - } - } - - /* Set 'Configuration Data' value */ - memset(&PartialResourceList, 0, sizeof(CM_PARTIAL_RESOURCE_LIST)); - PartialResourceList.Version = 1; - PartialResourceList.Revision = 1; - PartialResourceList.Count = 0; - - /* Create 'PointerPeripheral' key */ - FldrCreateComponentKey(ControllerKey, - PeripheralClass, - PointerPeripheral, - Input, - 0x0, - 0xFFFFFFFF, - Identifier, - &PartialResourceList, - sizeof(CM_PARTIAL_RESOURCE_LIST) - - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR), - &PeripheralKey); - - TRACE("Created key: PointerPeripheral\\0\n"); - } -} - - -static VOID -DetectSerialPorts(PCONFIGURATION_COMPONENT_DATA BusKey) -{ - PCM_PARTIAL_RESOURCE_LIST PartialResourceList; - PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; - PCM_SERIAL_DEVICE_DATA SerialDeviceData; - ULONG Irq[MAX_COM_PORTS] = {4, 3, 4, 3}; - ULONG Base; - CHAR Buffer[80]; - PUSHORT BasePtr; - ULONG ControllerNumber = 0; - PCONFIGURATION_COMPONENT_DATA ControllerKey; - ULONG i; - ULONG Size; - - TRACE("DetectSerialPorts()\n"); - - /* - * The BIOS data area 0x400 holds the address of the first valid COM port. - * Each COM port address is stored in a 2-byte field. - * Infos at: http://www.bioscentral.com/misc/bda.htm - */ - BasePtr = (PUSHORT)0x400; - - for (i = 0; i < MAX_COM_PORTS; i++, BasePtr++) - { - Base = (ULONG)*BasePtr; - if (Base == 0 || !CpDoesPortExist((PUCHAR)Base)) - continue; - - TRACE("Found COM%u port at 0x%x\n", i + 1, Base); - - /* Set 'Identifier' value */ - sprintf(Buffer, "COM%ld", i + 1); - - /* Build full device descriptor */ - Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + - 2 * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + - sizeof(CM_SERIAL_DEVICE_DATA); - PartialResourceList = MmHeapAlloc(Size); - if (PartialResourceList == NULL) - { - ERR("Failed to allocate resource descriptor\n"); - continue; - } - memset(PartialResourceList, 0, Size); - - /* Initialize resource descriptor */ - PartialResourceList->Version = 1; - PartialResourceList->Revision = 1; - PartialResourceList->Count = 3; - - /* Set IO Port */ - PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; - PartialDescriptor->Type = CmResourceTypePort; - PartialDescriptor->ShareDisposition = CmResourceShareDeviceExclusive; - PartialDescriptor->Flags = CM_RESOURCE_PORT_IO; - PartialDescriptor->u.Port.Start.LowPart = Base; - PartialDescriptor->u.Port.Start.HighPart = 0x0; - PartialDescriptor->u.Port.Length = 7; - - /* Set Interrupt */ - PartialDescriptor = &PartialResourceList->PartialDescriptors[1]; - PartialDescriptor->Type = CmResourceTypeInterrupt; - PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; - PartialDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED; - PartialDescriptor->u.Interrupt.Level = Irq[i]; - PartialDescriptor->u.Interrupt.Vector = Irq[i]; - PartialDescriptor->u.Interrupt.Affinity = 0xFFFFFFFF; - - /* Set serial data (device specific) */ - PartialDescriptor = &PartialResourceList->PartialDescriptors[2]; - PartialDescriptor->Type = CmResourceTypeDeviceSpecific; - PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; - PartialDescriptor->Flags = 0; - PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(CM_SERIAL_DEVICE_DATA); - - SerialDeviceData = - (PCM_SERIAL_DEVICE_DATA)&PartialResourceList->PartialDescriptors[3]; - SerialDeviceData->BaudClock = 1843200; /* UART Clock frequency (Hertz) */ - - /* Create controller key */ - FldrCreateComponentKey(BusKey, - ControllerClass, - SerialController, - Output | Input | ConsoleIn | ConsoleOut, - ControllerNumber, - 0xFFFFFFFF, - Buffer, - PartialResourceList, - Size, - &ControllerKey); - - MmHeapFree(PartialResourceList); - - if (!Rs232PortInUse(UlongToPtr(Base))) + TimeOut = 200; + while (((READ_PORT_UCHAR(Port + 5) & 1) == 0) && (TimeOut > 0)) { - /* Detect serial mouse */ - DetectSerialPointerPeripheral(ControllerKey, UlongToPtr(Base)); + StallExecutionProcessor(1000); + --TimeOut; + if (TimeOut == 0) + { + return 0; + } } - ControllerNumber++; + c = READ_PORT_UCHAR(Port); + if (c == 0x08 || c == 0x28) + break; + } + + Buffer[i++] = c; + x = c + 1; + + for (;;) + { + TimeOut = 200; + while (((READ_PORT_UCHAR(Port + 5) & 1) == 0) && (TimeOut > 0)) + { + StallExecutionProcessor(1000); + --TimeOut; + if (TimeOut == 0) + return 0; + } + c = READ_PORT_UCHAR(Port); + Buffer[i++] = c; + if (c == x) + break; + if (i >= 256) + break; + } + + return i; +} + + +static +VOID +DetectSerialPointerPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey, + PUCHAR Base) +{ + PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + char Buffer[256]; + CHAR Identifier[256]; + PCONFIGURATION_COMPONENT_DATA PeripheralKey; + ULONG MouseType; + ULONG Size, Length; + ULONG i; + ULONG j; + ULONG k; + + TRACE("DetectSerialPointerPeripheral()\n"); + + Identifier[0] = 0; + + InitializeSerialPort(Base, 2); + MouseType = DetectSerialMouse(Base); + + if (MouseType != MOUSE_TYPE_NONE) + { + Length = GetSerialMousePnpId(Base, Buffer); + TRACE( "PnP ID length: %u\n", Length); + + if (Length != 0) + { + /* Convert PnP sting to ASCII */ + if (Buffer[0] == 0x08) + { + for (i = 0; i < Length; i++) + Buffer[i] += 0x20; + } + Buffer[Length] = 0; + + TRACE("PnP ID string: %s\n", Buffer); + + /* Copy PnpId string */ + for (i = 0; i < 7; i++) + { + Identifier[i] = Buffer[3 + i]; + } + memcpy(&Identifier[7], + L" - ", + 3 * sizeof(WCHAR)); + + /* Skip device serial number */ + i = 10; + if (Buffer[i] == '\\') + { + for (j = ++i; i < Length; ++i) + { + if (Buffer[i] == '\\') + break; + } + if (i >= Length) + i -= 3; + } + + /* Skip PnP class */ + if (Buffer[i] == '\\') + { + for (j = ++i; i < Length; ++i) + { + if (Buffer[i] == '\\') + break; + } + + if (i >= Length) + i -= 3; + } + + /* Skip compatible PnP Id */ + if (Buffer[i] == '\\') + { + for (j = ++i; i < Length; ++i) + { + if (Buffer[i] == '\\') + break; + } + if (Buffer[j] == '*') + ++j; + if (i >= Length) + i -= 3; + } + + /* Get product description */ + if (Buffer[i] == '\\') + { + for (j = ++i; i < Length; ++i) + { + if (Buffer[i] == ';') + break; + } + if (i >= Length) + i -= 3; + if (i > j + 1) + { + for (k = 0; k < i - j; k++) + { + Identifier[k + 10] = Buffer[k + j]; + } + Identifier[10 + (i - j)] = 0; + } + } + + TRACE("Identifier string: %s\n", Identifier); + } + + if (Length == 0 || strlen(Identifier) < 11) + { + switch (MouseType) + { + case MOUSE_TYPE_LOGITECH: + strcpy(Identifier, "LOGITECH SERIAL MOUSE"); + break; + + case MOUSE_TYPE_WHEELZ: + strcpy(Identifier, "MICROSOFT SERIAL MOUSE WITH WHEEL"); + break; + + case MOUSE_TYPE_MICROSOFT: + default: + strcpy(Identifier, "MICROSOFT SERIAL MOUSE"); + break; + } + } + + /* Set 'Configuration Data' value */ + Size = sizeof(CM_PARTIAL_RESOURCE_LIST) - + sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); + PartialResourceList = MmHeapAlloc(Size); + memset(PartialResourceList, 0, Size); + PartialResourceList->Version = 1; + PartialResourceList->Revision = 1; + PartialResourceList->Count = 0; + + /* Create 'PointerPeripheral' key */ + FldrCreateComponentKey(ControllerKey, + PeripheralClass, + PointerPeripheral, + Input, + 0x0, + 0xFFFFFFFF, + Identifier, + PartialResourceList, + Size, + &PeripheralKey); + + TRACE("Created key: PointerPeripheral\\0\n"); + } +} + + +static +VOID +DetectSerialPorts(PCONFIGURATION_COMPONENT_DATA BusKey) +{ + PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; + PCM_SERIAL_DEVICE_DATA SerialDeviceData; + ULONG Irq[MAX_COM_PORTS] = {4, 3, 4, 3}; + ULONG Base; + CHAR Buffer[80]; + PUSHORT BasePtr; + ULONG ControllerNumber = 0; + PCONFIGURATION_COMPONENT_DATA ControllerKey; + ULONG i; + ULONG Size; + + TRACE("DetectSerialPorts()\n"); + + /* + * The BIOS data area 0x400 holds the address of the first valid COM port. + * Each COM port address is stored in a 2-byte field. + * Infos at: http://www.bioscentral.com/misc/bda.htm + */ + BasePtr = (PUSHORT)0x400; + + for (i = 0; i < MAX_COM_PORTS; i++, BasePtr++) + { + Base = (ULONG) * BasePtr; + if (Base == 0 || !CpDoesPortExist((PUCHAR)Base)) + continue; + + TRACE("Found COM%u port at 0x%x\n", i + 1, Base); + + /* Set 'Identifier' value */ + sprintf(Buffer, "COM%ld", i + 1); + + /* Build full device descriptor */ + Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + + 2 * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + + sizeof(CM_SERIAL_DEVICE_DATA); + PartialResourceList = MmHeapAlloc(Size); + if (PartialResourceList == NULL) + { + ERR("Failed to allocate resource descriptor\n"); + continue; + } + memset(PartialResourceList, 0, Size); + + /* Initialize resource descriptor */ + PartialResourceList->Version = 1; + PartialResourceList->Revision = 1; + PartialResourceList->Count = 3; + + /* Set IO Port */ + PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; + PartialDescriptor->Type = CmResourceTypePort; + PartialDescriptor->ShareDisposition = CmResourceShareDeviceExclusive; + PartialDescriptor->Flags = CM_RESOURCE_PORT_IO; + PartialDescriptor->u.Port.Start.LowPart = Base; + PartialDescriptor->u.Port.Start.HighPart = 0x0; + PartialDescriptor->u.Port.Length = 7; + + /* Set Interrupt */ + PartialDescriptor = &PartialResourceList->PartialDescriptors[1]; + PartialDescriptor->Type = CmResourceTypeInterrupt; + PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; + PartialDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED; + PartialDescriptor->u.Interrupt.Level = Irq[i]; + PartialDescriptor->u.Interrupt.Vector = Irq[i]; + PartialDescriptor->u.Interrupt.Affinity = 0xFFFFFFFF; + + /* Set serial data (device specific) */ + PartialDescriptor = &PartialResourceList->PartialDescriptors[2]; + PartialDescriptor->Type = CmResourceTypeDeviceSpecific; + PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; + PartialDescriptor->Flags = 0; + PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(CM_SERIAL_DEVICE_DATA); + + SerialDeviceData = + (PCM_SERIAL_DEVICE_DATA)&PartialResourceList->PartialDescriptors[3]; + SerialDeviceData->BaudClock = 1843200; /* UART Clock frequency (Hertz) */ + + /* Create controller key */ + FldrCreateComponentKey(BusKey, + ControllerClass, + SerialController, + Output | Input | ConsoleIn | ConsoleOut, + ControllerNumber, + 0xFFFFFFFF, + Buffer, + PartialResourceList, + Size, + &ControllerKey); + + if (!Rs232PortInUse(UlongToPtr(Base))) + { + /* Detect serial mouse */ + DetectSerialPointerPeripheral(ControllerKey, UlongToPtr(Base)); + } + + ControllerNumber++; } } @@ -1150,94 +1167,92 @@ DetectSerialPorts(PCONFIGURATION_COMPONENT_DATA BusKey) static VOID DetectParallelPorts(PCONFIGURATION_COMPONENT_DATA BusKey) { - PCM_PARTIAL_RESOURCE_LIST PartialResourceList; - PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; - ULONG Irq[MAX_LPT_PORTS] = {7, 5, (ULONG)-1}; - CHAR Buffer[80]; - PCONFIGURATION_COMPONENT_DATA ControllerKey; - PUSHORT BasePtr; - ULONG Base; - ULONG ControllerNumber = 0; - ULONG i; - ULONG Size; + PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; + ULONG Irq[MAX_LPT_PORTS] = {7, 5, (ULONG) - 1}; + CHAR Buffer[80]; + PCONFIGURATION_COMPONENT_DATA ControllerKey; + PUSHORT BasePtr; + ULONG Base; + ULONG ControllerNumber = 0; + ULONG i; + ULONG Size; - TRACE("DetectParallelPorts() called\n"); + TRACE("DetectParallelPorts() called\n"); - /* - * The BIOS data area 0x408 holds the address of the first valid LPT port. - * Each LPT port address is stored in a 2-byte field. - * Infos at: http://www.bioscentral.com/misc/bda.htm - */ - BasePtr = (PUSHORT)0x408; + /* + * The BIOS data area 0x408 holds the address of the first valid LPT port. + * Each LPT port address is stored in a 2-byte field. + * Infos at: http://www.bioscentral.com/misc/bda.htm + */ + BasePtr = (PUSHORT)0x408; - for (i = 0; i < MAX_LPT_PORTS; i++, BasePtr++) + for (i = 0; i < MAX_LPT_PORTS; i++, BasePtr++) { - Base = (ULONG)*BasePtr; - if (Base == 0) - continue; + Base = (ULONG) * BasePtr; + if (Base == 0) + continue; - TRACE("Parallel port %u: %x\n", ControllerNumber, Base); + TRACE("Parallel port %u: %x\n", ControllerNumber, Base); - /* Set 'Identifier' value */ - sprintf(Buffer, "PARALLEL%ld", i + 1); + /* Set 'Identifier' value */ + sprintf(Buffer, "PARALLEL%ld", i + 1); - /* Build full device descriptor */ - Size = sizeof(CM_PARTIAL_RESOURCE_LIST); - if (Irq[i] != (ULONG)-1) - Size += sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); + /* Build full device descriptor */ + Size = sizeof(CM_PARTIAL_RESOURCE_LIST); + if (Irq[i] != (ULONG) - 1) + Size += sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); - PartialResourceList = MmHeapAlloc(Size); - if (PartialResourceList == NULL) - { - ERR("Failed to allocate resource descriptor\n"); - continue; - } - memset(PartialResourceList, 0, Size); + PartialResourceList = MmHeapAlloc(Size); + if (PartialResourceList == NULL) + { + ERR("Failed to allocate resource descriptor\n"); + continue; + } + memset(PartialResourceList, 0, Size); - /* Initialize resource descriptor */ - PartialResourceList->Version = 1; - PartialResourceList->Revision = 1; - PartialResourceList->Count = (Irq[i] != (ULONG)-1) ? 2 : 1; + /* Initialize resource descriptor */ + PartialResourceList->Version = 1; + PartialResourceList->Revision = 1; + PartialResourceList->Count = (Irq[i] != (ULONG) - 1) ? 2 : 1; - /* Set IO Port */ - PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; - PartialDescriptor->Type = CmResourceTypePort; - PartialDescriptor->ShareDisposition = CmResourceShareDeviceExclusive; - PartialDescriptor->Flags = CM_RESOURCE_PORT_IO; - PartialDescriptor->u.Port.Start.LowPart = Base; - PartialDescriptor->u.Port.Start.HighPart = 0x0; - PartialDescriptor->u.Port.Length = 3; + /* Set IO Port */ + PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; + PartialDescriptor->Type = CmResourceTypePort; + PartialDescriptor->ShareDisposition = CmResourceShareDeviceExclusive; + PartialDescriptor->Flags = CM_RESOURCE_PORT_IO; + PartialDescriptor->u.Port.Start.LowPart = Base; + PartialDescriptor->u.Port.Start.HighPart = 0x0; + PartialDescriptor->u.Port.Length = 3; - /* Set Interrupt */ - if (Irq[i] != (ULONG)-1) - { - PartialDescriptor = &PartialResourceList->PartialDescriptors[1]; - PartialDescriptor->Type = CmResourceTypeInterrupt; - PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; - PartialDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED; - PartialDescriptor->u.Interrupt.Level = Irq[i]; - PartialDescriptor->u.Interrupt.Vector = Irq[i]; - PartialDescriptor->u.Interrupt.Affinity = 0xFFFFFFFF; - } + /* Set Interrupt */ + if (Irq[i] != (ULONG) - 1) + { + PartialDescriptor = &PartialResourceList->PartialDescriptors[1]; + PartialDescriptor->Type = CmResourceTypeInterrupt; + PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; + PartialDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED; + PartialDescriptor->u.Interrupt.Level = Irq[i]; + PartialDescriptor->u.Interrupt.Vector = Irq[i]; + PartialDescriptor->u.Interrupt.Affinity = 0xFFFFFFFF; + } - /* Create controller key */ - FldrCreateComponentKey(BusKey, - ControllerClass, - ParallelController, - Output, - ControllerNumber, - 0xFFFFFFFF, - Buffer, - PartialResourceList, - Size, - &ControllerKey); + /* Create controller key */ + FldrCreateComponentKey(BusKey, + ControllerClass, + ParallelController, + Output, + ControllerNumber, + 0xFFFFFFFF, + Buffer, + PartialResourceList, + Size, + &ControllerKey); - MmHeapFree(PartialResourceList); - - ControllerNumber++; + ControllerNumber++; } - TRACE("DetectParallelPorts() done\n"); + TRACE("DetectParallelPorts() done\n"); } @@ -1245,113 +1260,112 @@ DetectParallelPorts(PCONFIGURATION_COMPONENT_DATA BusKey) BOOLEAN DetectKeyboardDevice(VOID) { - UCHAR Status; - UCHAR Scancode; - ULONG Loops; - BOOLEAN Result = TRUE; + UCHAR Status; + UCHAR Scancode; + ULONG Loops; + BOOLEAN Result = TRUE; - /* Identify device */ - WRITE_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA, - 0xF2); + /* Identify device */ + WRITE_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA, 0xF2); - /* Wait for reply */ - for (Loops = 0; Loops < 100; Loops++) + /* Wait for reply */ + for (Loops = 0; Loops < 100; Loops++) { - StallExecutionProcessor(10000); - Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS); - if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) != 0) - break; + StallExecutionProcessor(10000); + Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS); + if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) != 0) + break; } - if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) == 0) + if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) == 0) { - /* PC/XT keyboard or no keyboard */ - Result = FALSE; + /* PC/XT keyboard or no keyboard */ + Result = FALSE; } - Scancode = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA); - if (Scancode != 0xFA) + Scancode = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA); + if (Scancode != 0xFA) { - /* No ACK received */ - Result = FALSE; + /* No ACK received */ + Result = FALSE; } - StallExecutionProcessor(10000); + StallExecutionProcessor(10000); - Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS); - if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) == 0) + Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS); + if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) == 0) { - /* Found AT keyboard */ - return Result; + /* Found AT keyboard */ + return Result; } - Scancode = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA); - if (Scancode != 0xAB) + Scancode = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA); + if (Scancode != 0xAB) { - /* No 0xAB received */ - Result = FALSE; + /* No 0xAB received */ + Result = FALSE; } - StallExecutionProcessor(10000); + StallExecutionProcessor(10000); - Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS); - if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) == 0) + Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS); + if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) == 0) { - /* No byte in buffer */ - Result = FALSE; + /* No byte in buffer */ + Result = FALSE; } - Scancode = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA); - if (Scancode != 0x41) + Scancode = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA); + if (Scancode != 0x41) { - /* No 0x41 received */ - Result = FALSE; + /* No 0x41 received */ + Result = FALSE; } - /* Found MF-II keyboard */ - return Result; + /* Found MF-II keyboard */ + return Result; } static VOID DetectKeyboardPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey) { - PCM_PARTIAL_RESOURCE_LIST PartialResourceList; - PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; - PCM_KEYBOARD_DEVICE_DATA KeyboardData; - PCONFIGURATION_COMPONENT_DATA PeripheralKey; - ULONG Size; + PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; + PCM_KEYBOARD_DEVICE_DATA KeyboardData; + PCONFIGURATION_COMPONENT_DATA PeripheralKey; + ULONG Size; - /* HACK: don't call DetectKeyboardDevice() as it fails in Qemu 0.8.2 - if (DetectKeyboardDevice()) */ - { - /* Set 'Configuration Data' value */ - Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + - sizeof(CM_KEYBOARD_DEVICE_DATA); - PartialResourceList = MmHeapAlloc(Size); - if (PartialResourceList == NULL) + /* HACK: don't call DetectKeyboardDevice() as it fails in Qemu 0.8.2 + if (DetectKeyboardDevice()) */ { - ERR("Failed to allocate resource descriptor\n"); - return; - } + /* Set 'Configuration Data' value */ + Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + + sizeof(CM_KEYBOARD_DEVICE_DATA); + PartialResourceList = MmHeapAlloc(Size); + if (PartialResourceList == NULL) + { + ERR("Failed to allocate resource descriptor\n"); + return; + } - /* Initialize resource descriptor */ - memset(PartialResourceList, 0, Size); - PartialResourceList->Version = 1; - PartialResourceList->Revision = 1; - PartialResourceList->Count = 1; + /* Initialize resource descriptor */ + memset(PartialResourceList, 0, Size); + PartialResourceList->Version = 1; + PartialResourceList->Revision = 1; + PartialResourceList->Count = 1; - PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; - PartialDescriptor->Type = CmResourceTypeDeviceSpecific; - PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; - PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(CM_KEYBOARD_DEVICE_DATA); + PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; + PartialDescriptor->Type = CmResourceTypeDeviceSpecific; + PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; + PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(CM_KEYBOARD_DEVICE_DATA); - KeyboardData = (PCM_KEYBOARD_DEVICE_DATA)(PartialDescriptor + 1); - KeyboardData->Version = 1; - KeyboardData->Revision = 1; - KeyboardData->Type = 4; - KeyboardData->Subtype = 0; - KeyboardData->KeyboardFlags = 0x20; + KeyboardData = (PCM_KEYBOARD_DEVICE_DATA)(PartialDescriptor + 1); + KeyboardData->Version = 1; + KeyboardData->Revision = 1; + KeyboardData->Type = 4; + KeyboardData->Subtype = 0; + KeyboardData->KeyboardFlags = 0x20; /* Create controller key */ FldrCreateComponentKey(ControllerKey, @@ -1365,62 +1379,61 @@ DetectKeyboardPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey) Size, &PeripheralKey); TRACE("Created key: KeyboardPeripheral\\0\n"); - - MmHeapFree(PartialResourceList); - } + } } -static VOID +static +VOID DetectKeyboardController(PCONFIGURATION_COMPONENT_DATA BusKey) { - PCM_PARTIAL_RESOURCE_LIST PartialResourceList; - PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; - PCONFIGURATION_COMPONENT_DATA ControllerKey; - ULONG Size; + PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; + PCONFIGURATION_COMPONENT_DATA ControllerKey; + ULONG Size; - /* Set 'Configuration Data' value */ - Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + - 2 * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); - PartialResourceList = MmHeapAlloc(Size); - if (PartialResourceList == NULL) + /* Set 'Configuration Data' value */ + Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + + 2 * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); + PartialResourceList = MmHeapAlloc(Size); + if (PartialResourceList == NULL) { - ERR("Failed to allocate resource descriptor\n"); - return; + ERR("Failed to allocate resource descriptor\n"); + return; } - /* Initialize resource descriptor */ - memset(PartialResourceList, 0, Size); - PartialResourceList->Version = 1; - PartialResourceList->Revision = 1; - PartialResourceList->Count = 3; + /* Initialize resource descriptor */ + memset(PartialResourceList, 0, Size); + PartialResourceList->Version = 1; + PartialResourceList->Revision = 1; + PartialResourceList->Count = 3; - /* Set Interrupt */ - PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; - PartialDescriptor->Type = CmResourceTypeInterrupt; - PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; - PartialDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED; - PartialDescriptor->u.Interrupt.Level = 1; - PartialDescriptor->u.Interrupt.Vector = 1; - PartialDescriptor->u.Interrupt.Affinity = 0xFFFFFFFF; + /* Set Interrupt */ + PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; + PartialDescriptor->Type = CmResourceTypeInterrupt; + PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; + PartialDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED; + PartialDescriptor->u.Interrupt.Level = 1; + PartialDescriptor->u.Interrupt.Vector = 1; + PartialDescriptor->u.Interrupt.Affinity = 0xFFFFFFFF; - /* Set IO Port 0x60 */ - PartialDescriptor = &PartialResourceList->PartialDescriptors[1]; - PartialDescriptor->Type = CmResourceTypePort; - PartialDescriptor->ShareDisposition = CmResourceShareDeviceExclusive; - PartialDescriptor->Flags = CM_RESOURCE_PORT_IO; - PartialDescriptor->u.Port.Start.LowPart = 0x60; - PartialDescriptor->u.Port.Start.HighPart = 0x0; - PartialDescriptor->u.Port.Length = 1; + /* Set IO Port 0x60 */ + PartialDescriptor = &PartialResourceList->PartialDescriptors[1]; + PartialDescriptor->Type = CmResourceTypePort; + PartialDescriptor->ShareDisposition = CmResourceShareDeviceExclusive; + PartialDescriptor->Flags = CM_RESOURCE_PORT_IO; + PartialDescriptor->u.Port.Start.LowPart = 0x60; + PartialDescriptor->u.Port.Start.HighPart = 0x0; + PartialDescriptor->u.Port.Length = 1; - /* Set IO Port 0x64 */ - PartialDescriptor = &PartialResourceList->PartialDescriptors[2]; - PartialDescriptor->Type = CmResourceTypePort; - PartialDescriptor->ShareDisposition = CmResourceShareDeviceExclusive; - PartialDescriptor->Flags = CM_RESOURCE_PORT_IO; - PartialDescriptor->u.Port.Start.LowPart = 0x64; - PartialDescriptor->u.Port.Start.HighPart = 0x0; - PartialDescriptor->u.Port.Length = 1; + /* Set IO Port 0x64 */ + PartialDescriptor = &PartialResourceList->PartialDescriptors[2]; + PartialDescriptor->Type = CmResourceTypePort; + PartialDescriptor->ShareDisposition = CmResourceShareDeviceExclusive; + PartialDescriptor->Flags = CM_RESOURCE_PORT_IO; + PartialDescriptor->u.Port.Start.LowPart = 0x64; + PartialDescriptor->u.Port.Start.HighPart = 0x0; + PartialDescriptor->u.Port.Length = 1; /* Create controller key */ FldrCreateComponentKey(BusKey, @@ -1435,259 +1448,265 @@ DetectKeyboardController(PCONFIGURATION_COMPONENT_DATA BusKey) &ControllerKey); TRACE("Created key: KeyboardController\\0\n"); - MmHeapFree(PartialResourceList); - - DetectKeyboardPeripheral(ControllerKey); + DetectKeyboardPeripheral(ControllerKey); } -static VOID +static +VOID PS2ControllerWait(VOID) { - ULONG Timeout; - UCHAR Status; + ULONG Timeout; + UCHAR Status; - for (Timeout = 0; Timeout < CONTROLLER_TIMEOUT; Timeout++) + for (Timeout = 0; Timeout < CONTROLLER_TIMEOUT; Timeout++) { - Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS); - if ((Status & CONTROLLER_STATUS_INPUT_BUFFER_FULL) == 0) - return; + Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS); + if ((Status & CONTROLLER_STATUS_INPUT_BUFFER_FULL) == 0) + return; - /* Sleep for one millisecond */ - StallExecutionProcessor(1000); + /* Sleep for one millisecond */ + StallExecutionProcessor(1000); } } -static BOOLEAN +static +BOOLEAN DetectPS2AuxPort(VOID) { #if 1 - /* Current detection is too unreliable. Just do as if - * the PS/2 aux port is always present - */ - return TRUE; + /* Current detection is too unreliable. Just do as if + * the PS/2 aux port is always present + */ + return TRUE; #else - ULONG Loops; - UCHAR Status; + ULONG Loops; + UCHAR Status; - /* Put the value 0x5A in the output buffer using the - * "WriteAuxiliary Device Output Buffer" command (0xD3). - * Poll the Status Register for a while to see if the value really turns up - * in the Data Register. If the KEYBOARD_STATUS_MOUSE_OBF bit is also set - * to 1 in the Status Register, we assume this controller has an - * Auxiliary Port (a.k.a. Mouse Port). - */ - PS2ControllerWait(); - WRITE_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_CONTROL, - CONTROLLER_COMMAND_WRITE_MOUSE_OUTPUT_BUFFER); - PS2ControllerWait(); + /* Put the value 0x5A in the output buffer using the + * "WriteAuxiliary Device Output Buffer" command (0xD3). + * Poll the Status Register for a while to see if the value really turns up + * in the Data Register. If the KEYBOARD_STATUS_MOUSE_OBF bit is also set + * to 1 in the Status Register, we assume this controller has an + * Auxiliary Port (a.k.a. Mouse Port). + */ + PS2ControllerWait(); + WRITE_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_CONTROL, + CONTROLLER_COMMAND_WRITE_MOUSE_OUTPUT_BUFFER); + PS2ControllerWait(); - /* 0x5A is a random dummy value */ - WRITE_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA, - 0x5A); + /* 0x5A is a random dummy value */ + WRITE_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA, + 0x5A); - for (Loops = 0; Loops < 10; Loops++) + for (Loops = 0; Loops < 10; Loops++) { - StallExecutionProcessor(10000); - Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS); - if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) != 0) - break; + StallExecutionProcessor(10000); + Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS); + if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) != 0) + break; } - READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA); + READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA); - return (Status & CONTROLLER_STATUS_MOUSE_OUTPUT_BUFFER_FULL); + return (Status & CONTROLLER_STATUS_MOUSE_OUTPUT_BUFFER_FULL); #endif } -static BOOLEAN +static +BOOLEAN DetectPS2AuxDevice(VOID) { - UCHAR Scancode; - UCHAR Status; - ULONG Loops; - BOOLEAN Result = TRUE; + UCHAR Scancode; + UCHAR Status; + ULONG Loops; + BOOLEAN Result = TRUE; - PS2ControllerWait(); - WRITE_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_CONTROL, - CONTROLLER_COMMAND_WRITE_MOUSE); - PS2ControllerWait(); + PS2ControllerWait(); + WRITE_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_CONTROL, + CONTROLLER_COMMAND_WRITE_MOUSE); + PS2ControllerWait(); - /* Identify device */ - WRITE_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA, - 0xF2); + /* Identify device */ + WRITE_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA, 0xF2); - /* Wait for reply */ - for (Loops = 0; Loops < 100; Loops++) + /* Wait for reply */ + for (Loops = 0; Loops < 100; Loops++) { - StallExecutionProcessor(10000); - Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS); - if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) != 0) - break; + StallExecutionProcessor(10000); + Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS); + if ((Status & CONTROLLER_STATUS_OUTPUT_BUFFER_FULL) != 0) + break; } - Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS); - if ((Status & CONTROLLER_STATUS_MOUSE_OUTPUT_BUFFER_FULL) == 0) - Result = FALSE; + Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS); + if ((Status & CONTROLLER_STATUS_MOUSE_OUTPUT_BUFFER_FULL) == 0) + Result = FALSE; - Scancode = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA); - if (Scancode != 0xFA) - Result = FALSE; + Scancode = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA); + if (Scancode != 0xFA) + Result = FALSE; - StallExecutionProcessor(10000); + StallExecutionProcessor(10000); - Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS); - if ((Status & CONTROLLER_STATUS_MOUSE_OUTPUT_BUFFER_FULL) == 0) - Result = FALSE; + Status = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_STATUS); + if ((Status & CONTROLLER_STATUS_MOUSE_OUTPUT_BUFFER_FULL) == 0) + Result = FALSE; - Scancode = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA); - if (Scancode != 0x00) - Result = FALSE; + Scancode = READ_PORT_UCHAR((PUCHAR)CONTROLLER_REGISTER_DATA); + if (Scancode != 0x00) + Result = FALSE; - return Result; + return Result; } -static VOID +static +VOID DetectPS2Mouse(PCONFIGURATION_COMPONENT_DATA BusKey) { - CM_PARTIAL_RESOURCE_LIST PartialResourceList; - PCONFIGURATION_COMPONENT_DATA ControllerKey; - PCONFIGURATION_COMPONENT_DATA PeripheralKey; + PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCONFIGURATION_COMPONENT_DATA ControllerKey; + PCONFIGURATION_COMPONENT_DATA PeripheralKey; + ULONG Size; - if (DetectPS2AuxPort()) + if (DetectPS2AuxPort()) { - TRACE("Detected PS2 port\n"); + TRACE("Detected PS2 port\n"); - memset(&PartialResourceList, 0, sizeof(CM_PARTIAL_RESOURCE_LIST)); + PartialResourceList = MmHeapAlloc(sizeof(CM_PARTIAL_RESOURCE_LIST)); + memset(PartialResourceList, 0, sizeof(CM_PARTIAL_RESOURCE_LIST)); - /* Initialize resource descriptor */ - PartialResourceList.Version = 1; - PartialResourceList.Revision = 1; - PartialResourceList.Count = 1; + /* Initialize resource descriptor */ + PartialResourceList->Version = 1; + PartialResourceList->Revision = 1; + PartialResourceList->Count = 1; - /* Set Interrupt */ - PartialResourceList.PartialDescriptors[0].Type = CmResourceTypeInterrupt; - PartialResourceList.PartialDescriptors[0].ShareDisposition = CmResourceShareUndetermined; - PartialResourceList.PartialDescriptors[0].Flags = CM_RESOURCE_INTERRUPT_LATCHED; - PartialResourceList.PartialDescriptors[0].u.Interrupt.Level = 12; - PartialResourceList.PartialDescriptors[0].u.Interrupt.Vector = 12; - PartialResourceList.PartialDescriptors[0].u.Interrupt.Affinity = 0xFFFFFFFF; + /* Set Interrupt */ + PartialResourceList->PartialDescriptors[0].Type = CmResourceTypeInterrupt; + PartialResourceList->PartialDescriptors[0].ShareDisposition = CmResourceShareUndetermined; + PartialResourceList->PartialDescriptors[0].Flags = CM_RESOURCE_INTERRUPT_LATCHED; + PartialResourceList->PartialDescriptors[0].u.Interrupt.Level = 12; + PartialResourceList->PartialDescriptors[0].u.Interrupt.Vector = 12; + PartialResourceList->PartialDescriptors[0].u.Interrupt.Affinity = 0xFFFFFFFF; - /* Create controller key */ - FldrCreateComponentKey(BusKey, - ControllerClass, - PointerController, - Input, - 0x0, - 0xFFFFFFFF, - NULL, - &PartialResourceList, - sizeof(CM_PARTIAL_RESOURCE_LIST), - &ControllerKey); - TRACE("Created key: PointerController\\0\n"); + /* Create controller key */ + FldrCreateComponentKey(BusKey, + ControllerClass, + PointerController, + Input, + 0x0, + 0xFFFFFFFF, + NULL, + PartialResourceList, + sizeof(CM_PARTIAL_RESOURCE_LIST), + &ControllerKey); + TRACE("Created key: PointerController\\0\n"); - if (DetectPS2AuxDevice()) - { - TRACE("Detected PS2 mouse\n"); + if (DetectPS2AuxDevice()) + { + TRACE("Detected PS2 mouse\n"); - /* Initialize resource descriptor */ - memset(&PartialResourceList, 0, sizeof(CM_PARTIAL_RESOURCE_LIST)); - PartialResourceList.Version = 1; - PartialResourceList.Revision = 1; - PartialResourceList.Count = 0; + /* Initialize resource descriptor */ + Size = sizeof(CM_PARTIAL_RESOURCE_LIST) - + sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); + PartialResourceList = MmHeapAlloc(Size); + memset(PartialResourceList, 0, Size); + PartialResourceList->Version = 1; + PartialResourceList->Revision = 1; + PartialResourceList->Count = 0; - /* Create peripheral key */ - FldrCreateComponentKey(ControllerKey, - ControllerClass, - PointerPeripheral, - Input, - 0x0, - 0xFFFFFFFF, - "MICROSOFT PS2 MOUSE", - &PartialResourceList, - sizeof(CM_PARTIAL_RESOURCE_LIST) - - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR), - &PeripheralKey); - TRACE("Created key: PointerPeripheral\\0\n"); + /* Create peripheral key */ + FldrCreateComponentKey(ControllerKey, + ControllerClass, + PointerPeripheral, + Input, + 0x0, + 0xFFFFFFFF, + "MICROSOFT PS2 MOUSE", + PartialResourceList, + Size, + &PeripheralKey); + TRACE("Created key: PointerPeripheral\\0\n"); + } } - } } static VOID DetectDisplayController(PCONFIGURATION_COMPONENT_DATA BusKey) { - CHAR Buffer[80]; - PCONFIGURATION_COMPONENT_DATA ControllerKey; - USHORT VesaVersion; + CHAR Buffer[80]; + PCONFIGURATION_COMPONENT_DATA ControllerKey; + USHORT VesaVersion; - /* FIXME: Set 'ComponentInformation' value */ + /* FIXME: Set 'ComponentInformation' value */ - VesaVersion = BiosIsVesaSupported(); - if (VesaVersion != 0) + VesaVersion = BiosIsVesaSupported(); + if (VesaVersion != 0) { - TRACE("VESA version %c.%c\n", - (VesaVersion >> 8) + '0', - (VesaVersion & 0xFF) + '0'); + TRACE("VESA version %c.%c\n", + (VesaVersion >> 8) + '0', + (VesaVersion & 0xFF) + '0'); } - else + else { - TRACE("VESA not supported\n"); + TRACE("VESA not supported\n"); } - if (VesaVersion >= 0x0200) + if (VesaVersion >= 0x0200) { - strcpy(Buffer, "VBE Display"); + strcpy(Buffer, "VBE Display"); } - else + else { - strcpy(Buffer, "VGA Display"); + strcpy(Buffer, "VGA Display"); } - FldrCreateComponentKey(BusKey, - ControllerClass, - DisplayController, - 0x0, - 0x0, - 0xFFFFFFFF, - Buffer, - NULL, - 0, - &ControllerKey); - TRACE("Created key: DisplayController\\0\n"); + FldrCreateComponentKey(BusKey, + ControllerClass, + DisplayController, + 0x0, + 0x0, + 0xFFFFFFFF, + Buffer, + NULL, + 0, + &ControllerKey); + TRACE("Created key: DisplayController\\0\n"); - /* FIXME: Add display peripheral (monitor) data */ + /* FIXME: Add display peripheral (monitor) data */ } -static VOID +static +VOID DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) { - PCM_PARTIAL_RESOURCE_LIST PartialResourceList; - PCONFIGURATION_COMPONENT_DATA BusKey; - ULONG Size; + PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCONFIGURATION_COMPONENT_DATA BusKey; + ULONG Size; - /* Increment bus number */ - (*BusNumber)++; + /* Increment bus number */ + (*BusNumber)++; - /* Set 'Configuration Data' value */ - Size = sizeof(CM_PARTIAL_RESOURCE_LIST) - - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); - PartialResourceList = MmHeapAlloc(Size); - if (PartialResourceList == NULL) + /* Set 'Configuration Data' value */ + Size = sizeof(CM_PARTIAL_RESOURCE_LIST) - + sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); + PartialResourceList = MmHeapAlloc(Size); + if (PartialResourceList == NULL) { - ERR("Failed to allocate resource descriptor\n"); - return; + ERR("Failed to allocate resource descriptor\n"); + return; } - /* Initialize resource descriptor */ - memset(PartialResourceList, 0, Size); - PartialResourceList->Version = 1; - PartialResourceList->Revision = 1; - PartialResourceList->Count = 0; + /* Initialize resource descriptor */ + memset(PartialResourceList, 0, Size); + PartialResourceList->Version = 1; + PartialResourceList->Revision = 1; + PartialResourceList->Count = 0; /* Create new bus key */ FldrCreateComponentKey(SystemKey, @@ -1701,74 +1720,75 @@ DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) Size, &BusKey); - MmHeapFree(PartialResourceList); - - /* Detect ISA/BIOS devices */ - DetectBiosDisks(BusKey); + /* Detect ISA/BIOS devices */ + DetectBiosDisks(BusKey); DetectBiosFloppyController(BusKey); - DetectSerialPorts(BusKey); + DetectSerialPorts(BusKey); - DetectParallelPorts(BusKey); + DetectParallelPorts(BusKey); - DetectKeyboardController(BusKey); + DetectKeyboardController(BusKey); - DetectPS2Mouse(BusKey); + DetectPS2Mouse(BusKey); - DetectDisplayController(BusKey); + DetectDisplayController(BusKey); - /* FIXME: Detect more ISA devices */ + /* FIXME: Detect more ISA devices */ } +BOOLEAN +PcInitializeBootDevices(VOID) +{ + return HwInitializeBiosDisks(); +} PCONFIGURATION_COMPONENT_DATA PcHwDetect(VOID) { - PCONFIGURATION_COMPONENT_DATA SystemKey; - ULONG BusNumber = 0; + PCONFIGURATION_COMPONENT_DATA SystemKey; + ULONG BusNumber = 0; - TRACE("DetectHardware()\n"); + TRACE("DetectHardware()\n"); - HwInitializeBiosDisks(); + /* Create the 'System' key */ + SystemKey = DetectSystem(); - /* Create the 'System' key */ - SystemKey = DetectSystem(); + /* Detect buses */ + DetectPciBios(SystemKey, &BusNumber); + DetectApmBios(SystemKey, &BusNumber); + DetectPnpBios(SystemKey, &BusNumber); + DetectIsaBios(SystemKey, &BusNumber); + DetectAcpiBios(SystemKey, &BusNumber); - /* Detect buses */ - DetectPciBios(SystemKey, &BusNumber); - DetectApmBios(SystemKey, &BusNumber); - DetectPnpBios(SystemKey, &BusNumber); - DetectIsaBios(SystemKey, &BusNumber); - DetectAcpiBios(SystemKey, &BusNumber); + TRACE("DetectHardware() Done\n"); - TRACE("DetectHardware() Done\n"); - - return SystemKey; + return SystemKey; } VOID PcHwIdle(VOID) { - REGS Regs; + REGS Regs; - /* Select APM 1.0+ function */ - Regs.b.ah = 0x53; + /* Select APM 1.0+ function */ + Regs.b.ah = 0x53; - /* Function 05h: CPU idle */ - Regs.b.al = 0x05; + /* Function 05h: CPU idle */ + Regs.b.al = 0x05; - /* Call INT 15h */ - Int386(0x15, &Regs, &Regs); + /* Call INT 15h */ + Int386(0x15, &Regs, &Regs); - /* Check if successfull (CF set on error) */ - if (INT386_SUCCESS(Regs)) - return; + /* Check if successfull (CF set on error) */ + if (INT386_SUCCESS(Regs)) + return; - /* - * No futher processing here. - * Optionally implement HLT instruction handling. - */ + /* + * No futher processing here. + * Optionally implement HLT instruction handling. + */ } /* EOF */ diff --git a/boot/freeldr/freeldr/arch/i386/hwacpi.c b/boot/freeldr/freeldr/arch/i386/hwacpi.c index 96043d4abce..eb902a96112 100644 --- a/boot/freeldr/freeldr/arch/i386/hwacpi.c +++ b/boot/freeldr/freeldr/arch/i386/hwacpi.c @@ -115,8 +115,6 @@ DetectAcpiBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) /* Increment bus number */ (*BusNumber)++; - - MmHeapFree(PartialResourceList); } } diff --git a/boot/freeldr/freeldr/arch/i386/hwapm.c b/boot/freeldr/freeldr/arch/i386/hwapm.c index 71e021a6dc5..9ea4674b092 100644 --- a/boot/freeldr/freeldr/arch/i386/hwapm.c +++ b/boot/freeldr/freeldr/arch/i386/hwapm.c @@ -59,15 +59,20 @@ VOID DetectApmBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) { PCONFIGURATION_COMPONENT_DATA BiosKey; - CM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + ULONG Size; + + Size = sizeof(CM_PARTIAL_RESOURCE_LIST) - + sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); if (FindApmBios()) { /* Create 'Configuration Data' value */ - memset(&PartialResourceList, 0, sizeof(CM_PARTIAL_RESOURCE_LIST)); - PartialResourceList.Version = 0; - PartialResourceList.Revision = 0; - PartialResourceList.Count = 0; + PartialResourceList = MmHeapAlloc(Size); + memset(&PartialResourceList, 0, Size); + PartialResourceList->Version = 0; + PartialResourceList->Revision = 0; + PartialResourceList->Count = 0; /* Create new bus key */ FldrCreateComponentKey(SystemKey, @@ -77,9 +82,8 @@ DetectApmBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) 0x0, 0xFFFFFFFF, "APM", - &PartialResourceList, - sizeof(CM_PARTIAL_RESOURCE_LIST) - - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR), + PartialResourceList, + Size, &BiosKey); /* Increment bus number */ diff --git a/boot/freeldr/freeldr/arch/i386/hwdisk.c b/boot/freeldr/freeldr/arch/i386/hwdisk.c index 60164c9e5f9..c09e3816103 100644 --- a/boot/freeldr/freeldr/arch/i386/hwdisk.c +++ b/boot/freeldr/freeldr/arch/i386/hwdisk.c @@ -269,7 +269,7 @@ GetHarddiskInformation( } -VOID +BOOLEAN HwInitializeBiosDisks(VOID) { UCHAR DiskCount, DriveNumber; @@ -331,7 +331,7 @@ HwInitializeBiosDisks(VOID) if (!MachDiskReadLogicalSectors(FrldrBootDrive, 16ULL, 1, (PVOID)DISKREADBUFFER)) { ERR("Reading MBR failed\n"); - return; + return FALSE; } Buffer = (ULONG*)DISKREADBUFFER; @@ -352,4 +352,5 @@ HwInitializeBiosDisks(VOID) } PcBiosDiskCount = DiskCount; + return DiskCount != 0; } diff --git a/boot/freeldr/freeldr/arch/i386/hwpci.c b/boot/freeldr/freeldr/arch/i386/hwpci.c index 0cb4e8723ea..092b55c2758 100644 --- a/boot/freeldr/freeldr/arch/i386/hwpci.c +++ b/boot/freeldr/freeldr/arch/i386/hwpci.c @@ -25,137 +25,139 @@ DBG_DEFAULT_CHANNEL(HWDETECT); -static PPCI_IRQ_ROUTING_TABLE +static +PPCI_IRQ_ROUTING_TABLE GetPciIrqRoutingTable(VOID) { - PPCI_IRQ_ROUTING_TABLE Table; - PUCHAR Ptr; - ULONG Sum; - ULONG i; + PPCI_IRQ_ROUTING_TABLE Table; + PUCHAR Ptr; + ULONG Sum; + ULONG i; - Table = (PPCI_IRQ_ROUTING_TABLE)0xF0000; - while ((ULONG_PTR)Table < 0x100000) + Table = (PPCI_IRQ_ROUTING_TABLE)0xF0000; + while ((ULONG_PTR)Table < 0x100000) { - if (Table->Signature == 'RIP$') - { - TRACE("Found signature\n"); + if (Table->Signature == 'RIP$') + { + TRACE("Found signature\n"); - Ptr = (PUCHAR)Table; - Sum = 0; - for (i = 0; i < Table->TableSize; i++) - { - Sum += Ptr[i]; - } + Ptr = (PUCHAR)Table; + Sum = 0; + for (i = 0; i < Table->TableSize; i++) + { + Sum += Ptr[i]; + } - if ((Sum & 0xFF) != 0) - { - ERR("Invalid routing table\n"); - return NULL; - } + if ((Sum & 0xFF) != 0) + { + ERR("Invalid routing table\n"); + return NULL; + } - TRACE("Valid checksum\n"); + TRACE("Valid checksum\n"); - return Table; - } + return Table; + } - Table = (PPCI_IRQ_ROUTING_TABLE)((ULONG_PTR)Table + 0x10); + Table = (PPCI_IRQ_ROUTING_TABLE)((ULONG_PTR)Table + 0x10); } - return NULL; + return NULL; } static BOOLEAN FindPciBios(PPCI_REGISTRY_INFO BusData) { - REGS RegsIn; - REGS RegsOut; + REGS RegsIn; + REGS RegsOut; - RegsIn.b.ah = 0xB1; /* Subfunction B1h */ - RegsIn.b.al = 0x01; /* PCI BIOS present */ + RegsIn.b.ah = 0xB1; /* Subfunction B1h */ + RegsIn.b.al = 0x01; /* PCI BIOS present */ - Int386(0x1A, &RegsIn, &RegsOut); + Int386(0x1A, &RegsIn, &RegsOut); - if (INT386_SUCCESS(RegsOut) && RegsOut.d.edx == 0x20494350 && RegsOut.b.ah == 0) + if (INT386_SUCCESS(RegsOut) && + (RegsOut.d.edx == 0x20494350) && + (RegsOut.b.ah == 0)) { - TRACE("Found PCI bios\n"); + TRACE("Found PCI bios\n"); - TRACE("AL: %x\n", RegsOut.b.al); - TRACE("BH: %x\n", RegsOut.b.bh); - TRACE("BL: %x\n", RegsOut.b.bl); - TRACE("CL: %x\n", RegsOut.b.cl); + TRACE("AL: %x\n", RegsOut.b.al); + TRACE("BH: %x\n", RegsOut.b.bh); + TRACE("BL: %x\n", RegsOut.b.bl); + TRACE("CL: %x\n", RegsOut.b.cl); - BusData->NoBuses = RegsOut.b.cl + 1; - BusData->MajorRevision = RegsOut.b.bh; - BusData->MinorRevision = RegsOut.b.bl; - BusData->HardwareMechanism = RegsOut.b.al; + BusData->NoBuses = RegsOut.b.cl + 1; + BusData->MajorRevision = RegsOut.b.bh; + BusData->MinorRevision = RegsOut.b.bl; + BusData->HardwareMechanism = RegsOut.b.al; - return TRUE; + return TRUE; } + TRACE("No PCI bios found\n"); - TRACE("No PCI bios found\n"); - - return FALSE; + return FALSE; } -static VOID +static +VOID DetectPciIrqRoutingTable(PCONFIGURATION_COMPONENT_DATA BusKey) { - PCM_PARTIAL_RESOURCE_LIST PartialResourceList; - PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; - PPCI_IRQ_ROUTING_TABLE Table; - PCONFIGURATION_COMPONENT_DATA TableKey; - ULONG Size; + PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; + PPCI_IRQ_ROUTING_TABLE Table; + PCONFIGURATION_COMPONENT_DATA TableKey; + ULONG Size; - Table = GetPciIrqRoutingTable(); - if (Table != NULL) + Table = GetPciIrqRoutingTable(); + if (Table != NULL) { - TRACE("Table size: %u\n", Table->TableSize); + TRACE("Table size: %u\n", Table->TableSize); - /* Set 'Configuration Data' value */ - Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors) + - 2 * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + Table->TableSize; - PartialResourceList = MmHeapAlloc(Size); - if (PartialResourceList == NULL) - { - ERR("Failed to allocate resource descriptor\n"); - return; - } + /* Set 'Configuration Data' value */ + Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors) + + 2 * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + Table->TableSize; + PartialResourceList = MmHeapAlloc(Size); + if (PartialResourceList == NULL) + { + ERR("Failed to allocate resource descriptor\n"); + return; + } - /* Initialize resource descriptor */ - memset(PartialResourceList, 0, Size); - PartialResourceList->Version = 1; - PartialResourceList->Revision = 1; - PartialResourceList->Count = 2; + /* Initialize resource descriptor */ + memset(PartialResourceList, 0, Size); + PartialResourceList->Version = 1; + PartialResourceList->Revision = 1; + PartialResourceList->Count = 2; - PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; - PartialDescriptor->Type = CmResourceTypeBusNumber; - PartialDescriptor->ShareDisposition = CmResourceShareDeviceExclusive; - PartialDescriptor->u.BusNumber.Start = 0; - PartialDescriptor->u.BusNumber.Length = 1; + PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; + PartialDescriptor->Type = CmResourceTypeBusNumber; + PartialDescriptor->ShareDisposition = CmResourceShareDeviceExclusive; + PartialDescriptor->u.BusNumber.Start = 0; + PartialDescriptor->u.BusNumber.Length = 1; - PartialDescriptor = &PartialResourceList->PartialDescriptors[1]; - PartialDescriptor->Type = CmResourceTypeDeviceSpecific; - PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; - PartialDescriptor->u.DeviceSpecificData.DataSize = Table->TableSize; + PartialDescriptor = &PartialResourceList->PartialDescriptors[1]; + PartialDescriptor->Type = CmResourceTypeDeviceSpecific; + PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; + PartialDescriptor->u.DeviceSpecificData.DataSize = Table->TableSize; - memcpy(&PartialResourceList->PartialDescriptors[2], - Table, Table->TableSize); + memcpy(&PartialResourceList->PartialDescriptors[2], + Table, + Table->TableSize); - FldrCreateComponentKey(BusKey, - PeripheralClass, - RealModeIrqRoutingTable, - 0x0, - 0x0, - 0xFFFFFFFF, - "PCI Real-mode IRQ Routing Table", - PartialResourceList, - Size, - &TableKey); - - MmHeapFree(PartialResourceList); + FldrCreateComponentKey(BusKey, + PeripheralClass, + RealModeIrqRoutingTable, + 0x0, + 0x0, + 0xFFFFFFFF, + "PCI Real-mode IRQ Routing Table", + PartialResourceList, + Size, + &TableKey); } } @@ -163,113 +165,108 @@ DetectPciIrqRoutingTable(PCONFIGURATION_COMPONENT_DATA BusKey) VOID DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) { - PCM_PARTIAL_RESOURCE_LIST PartialResourceList; - PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; - PCI_REGISTRY_INFO BusData; - PCONFIGURATION_COMPONENT_DATA BiosKey; - ULONG Size; - PCONFIGURATION_COMPONENT_DATA BusKey; - ULONG i; + PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; + PCI_REGISTRY_INFO BusData; + PCONFIGURATION_COMPONENT_DATA BiosKey; + ULONG Size; + PCONFIGURATION_COMPONENT_DATA BusKey; + ULONG i; - /* Report the PCI BIOS */ - if (FindPciBios(&BusData)) + /* Report the PCI BIOS */ + if (FindPciBios(&BusData)) { - /* Set 'Configuration Data' value */ - Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, - PartialDescriptors); - PartialResourceList = MmHeapAlloc(Size); - if (PartialResourceList == NULL) - { - ERR("Failed to allocate resource descriptor\n"); - return; - } + /* Set 'Configuration Data' value */ + Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors); + PartialResourceList = MmHeapAlloc(Size); + if (PartialResourceList == NULL) + { + ERR("Failed to allocate resource descriptor\n"); + return; + } - /* Initialize resource descriptor */ - memset(PartialResourceList, 0, Size); + /* Initialize resource descriptor */ + memset(PartialResourceList, 0, Size); - /* Create new bus key */ - FldrCreateComponentKey(SystemKey, - AdapterClass, - MultiFunctionAdapter, - 0x0, - 0x0, - 0xFFFFFFFF, - "PCI BIOS", - PartialResourceList, - Size, - &BiosKey); + /* Create new bus key */ + FldrCreateComponentKey(SystemKey, + AdapterClass, + MultiFunctionAdapter, + 0x0, + 0x0, + 0xFFFFFFFF, + "PCI BIOS", + PartialResourceList, + Size, + &BiosKey); - /* Increment bus number */ - (*BusNumber)++; + /* Increment bus number */ + (*BusNumber)++; - MmHeapFree(PartialResourceList); + DetectPciIrqRoutingTable(BiosKey); - DetectPciIrqRoutingTable(BiosKey); + /* Report PCI buses */ + for (i = 0; i < (ULONG)BusData.NoBuses; i++) + { + /* Check if this is the first bus */ + if (i == 0) + { + /* Set 'Configuration Data' value */ + Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, + PartialDescriptors) + + sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + + sizeof(PCI_REGISTRY_INFO); + PartialResourceList = MmHeapAlloc(Size); + if (!PartialResourceList) + { + ERR("Failed to allocate resource descriptor\n"); + return; + } - /* Report PCI buses */ - for (i = 0; i < (ULONG)BusData.NoBuses; i++) - { - /* Check if this is the first bus */ - if (i == 0) - { - /* Set 'Configuration Data' value */ - Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, - PartialDescriptors) + - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + - sizeof(PCI_REGISTRY_INFO); - PartialResourceList = MmHeapAlloc(Size); - if (!PartialResourceList) - { - ERR("Failed to allocate resource descriptor\n"); - return; - } + /* Initialize resource descriptor */ + memset(PartialResourceList, 0, Size); + PartialResourceList->Version = 1; + PartialResourceList->Revision = 1; + PartialResourceList->Count = 1; + PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; + PartialDescriptor->Type = CmResourceTypeDeviceSpecific; + PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; + PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(PCI_REGISTRY_INFO); + memcpy(&PartialResourceList->PartialDescriptors[1], + &BusData, + sizeof(PCI_REGISTRY_INFO)); + } + else + { + /* Set 'Configuration Data' value */ + Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, + PartialDescriptors); + PartialResourceList = MmHeapAlloc(Size); + if (!PartialResourceList) + { + ERR("Failed to allocate resource descriptor\n"); + return; + } - /* Initialize resource descriptor */ - memset(PartialResourceList, 0, Size); - PartialResourceList->Version = 1; - PartialResourceList->Revision = 1; - PartialResourceList->Count = 1; - PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; - PartialDescriptor->Type = CmResourceTypeDeviceSpecific; - PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; - PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(PCI_REGISTRY_INFO); - memcpy(&PartialResourceList->PartialDescriptors[1], - &BusData, - sizeof(PCI_REGISTRY_INFO)); - } - else - { - /* Set 'Configuration Data' value */ - Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, - PartialDescriptors); - PartialResourceList = MmHeapAlloc(Size); - if (!PartialResourceList) - { - ERR("Failed to allocate resource descriptor\n"); - return; - } + /* Initialize resource descriptor */ + memset(PartialResourceList, 0, Size); + } - /* Initialize resource descriptor */ - memset(PartialResourceList, 0, Size); - } + /* Create the bus key */ + FldrCreateComponentKey(SystemKey, + AdapterClass, + MultiFunctionAdapter, + 0x0, + 0x0, + 0xFFFFFFFF, + "PCI", + PartialResourceList, + Size, + &BusKey); - /* Create the bus key */ - FldrCreateComponentKey(SystemKey, - AdapterClass, - MultiFunctionAdapter, - 0x0, - 0x0, - 0xFFFFFFFF, - "PCI", - PartialResourceList, - Size, - &BusKey); - - MmHeapFree(PartialResourceList); - - /* Increment bus number */ - (*BusNumber)++; - } + /* Increment bus number */ + (*BusNumber)++; + } } } diff --git a/boot/freeldr/freeldr/arch/i386/machpc.c b/boot/freeldr/freeldr/arch/i386/machpc.c index f9da6cfbb19..07083f03c88 100644 --- a/boot/freeldr/freeldr/arch/i386/machpc.c +++ b/boot/freeldr/freeldr/arch/i386/machpc.c @@ -45,6 +45,7 @@ PcMachInit(const char *CmdLine) MachVtbl.DiskGetDriveGeometry = PcDiskGetDriveGeometry; MachVtbl.DiskGetCacheableBlockCount = PcDiskGetCacheableBlockCount; MachVtbl.GetTime = PcGetTime; + MachVtbl.InitializeBootDevices = PcInitializeBootDevices; MachVtbl.HwDetect = PcHwDetect; MachVtbl.HwIdle = PcHwIdle; } diff --git a/boot/freeldr/freeldr/arch/i386/machxbox.c b/boot/freeldr/freeldr/arch/i386/machxbox.c index 2930392d7b4..627a84819b1 100644 --- a/boot/freeldr/freeldr/arch/i386/machxbox.c +++ b/boot/freeldr/freeldr/arch/i386/machxbox.c @@ -51,6 +51,7 @@ XboxMachInit(const char *CmdLine) MachVtbl.DiskGetDriveGeometry = XboxDiskGetDriveGeometry; MachVtbl.DiskGetCacheableBlockCount = XboxDiskGetCacheableBlockCount; MachVtbl.GetTime = XboxGetTime; + MachVtbl.InitializeBootDevices = XboxInitializeBootDevices; MachVtbl.HwDetect = XboxHwDetect; MachVtbl.HwIdle = XboxHwIdle; diff --git a/boot/freeldr/freeldr/arch/i386/xboxhw.c b/boot/freeldr/freeldr/arch/i386/xboxhw.c index 4cc9eee10bb..ea8eff39592 100644 --- a/boot/freeldr/freeldr/arch/i386/xboxhw.c +++ b/boot/freeldr/freeldr/arch/i386/xboxhw.c @@ -30,66 +30,67 @@ extern ULONG reactos_disk_count; extern ARC_DISK_SIGNATURE reactos_arc_disk_info[]; extern CHAR reactos_arc_strings[32][256]; -static PCM_PARTIAL_RESOURCE_LIST +static +PCM_PARTIAL_RESOURCE_LIST GetHarddiskConfigurationData(UCHAR DriveNumber, ULONG* pSize) { - PCM_PARTIAL_RESOURCE_LIST PartialResourceList; - PCM_DISK_GEOMETRY_DEVICE_DATA DiskGeometry; - //EXTENDED_GEOMETRY ExtGeometry; - GEOMETRY Geometry; - ULONG Size; + PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCM_DISK_GEOMETRY_DEVICE_DATA DiskGeometry; + //EXTENDED_GEOMETRY ExtGeometry; + GEOMETRY Geometry; + ULONG Size; // // Initialize returned size // *pSize = 0; - /* Set 'Configuration Data' value */ - Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + - sizeof(CM_DISK_GEOMETRY_DEVICE_DATA); - PartialResourceList = MmHeapAlloc(Size); - if (PartialResourceList == NULL) + /* Set 'Configuration Data' value */ + Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + + sizeof(CM_DISK_GEOMETRY_DEVICE_DATA); + PartialResourceList = MmHeapAlloc(Size); + if (PartialResourceList == NULL) { - ERR("Failed to allocate a full resource descriptor\n"); - return NULL; + ERR("Failed to allocate a full resource descriptor\n"); + return NULL; } - memset(PartialResourceList, 0, Size); - PartialResourceList->Version = 1; - PartialResourceList->Revision = 1; - PartialResourceList->Count = 1; - PartialResourceList->PartialDescriptors[0].Type = - CmResourceTypeDeviceSpecific; + memset(PartialResourceList, 0, Size); + PartialResourceList->Version = 1; + PartialResourceList->Revision = 1; + PartialResourceList->Count = 1; + PartialResourceList->PartialDescriptors[0].Type = + CmResourceTypeDeviceSpecific; // PartialResourceList->PartialDescriptors[0].ShareDisposition = // PartialResourceList->PartialDescriptors[0].Flags = - PartialResourceList->PartialDescriptors[0].u.DeviceSpecificData.DataSize = - sizeof(CM_DISK_GEOMETRY_DEVICE_DATA); + PartialResourceList->PartialDescriptors[0].u.DeviceSpecificData.DataSize = + sizeof(CM_DISK_GEOMETRY_DEVICE_DATA); - /* Get pointer to geometry data */ - DiskGeometry = (PVOID)(((ULONG_PTR)PartialResourceList) + sizeof(CM_PARTIAL_RESOURCE_LIST)); + /* Get pointer to geometry data */ + DiskGeometry = (PVOID)(((ULONG_PTR)PartialResourceList) + sizeof(CM_PARTIAL_RESOURCE_LIST)); - /* Get the disk geometry */ - //ExtGeometry.Size = sizeof(EXTENDED_GEOMETRY); + /* Get the disk geometry */ + //ExtGeometry.Size = sizeof(EXTENDED_GEOMETRY); - if(MachDiskGetDriveGeometry(DriveNumber, &Geometry)) + if (MachDiskGetDriveGeometry(DriveNumber, &Geometry)) { - DiskGeometry->BytesPerSector = Geometry.BytesPerSector; - DiskGeometry->NumberOfCylinders = Geometry.Cylinders; - DiskGeometry->SectorsPerTrack = Geometry.Sectors; - DiskGeometry->NumberOfHeads = Geometry.Heads; + DiskGeometry->BytesPerSector = Geometry.BytesPerSector; + DiskGeometry->NumberOfCylinders = Geometry.Cylinders; + DiskGeometry->SectorsPerTrack = Geometry.Sectors; + DiskGeometry->NumberOfHeads = Geometry.Heads; } - else + else { - ERR("Reading disk geometry failed\n"); - MmHeapFree(PartialResourceList); - return NULL; + ERR("Reading disk geometry failed\n"); + MmHeapFree(PartialResourceList); + return NULL; } - TRACE("Disk %x: %u Cylinders %u Heads %u Sectors %u Bytes\n", - DriveNumber, - DiskGeometry->NumberOfCylinders, - DiskGeometry->NumberOfHeads, - DiskGeometry->SectorsPerTrack, - DiskGeometry->BytesPerSector); + TRACE("Disk %x: %u Cylinders %u Heads %u Sectors %u Bytes\n", + DriveNumber, + DiskGeometry->NumberOfCylinders, + DiskGeometry->NumberOfHeads, + DiskGeometry->SectorsPerTrack, + DiskGeometry->BytesPerSector); // // Return configuration data @@ -107,7 +108,9 @@ typedef struct tagDISKCONTEXT ULONGLONG SectorNumber; } DISKCONTEXT; -static LONG DiskClose(ULONG FileId) +static +LONG +DiskClose(ULONG FileId) { DISKCONTEXT* Context = FsGetDeviceSpecific(FileId); @@ -115,7 +118,9 @@ static LONG DiskClose(ULONG FileId) return ESUCCESS; } -static LONG DiskGetFileInformation(ULONG FileId, FILEINFORMATION* Information) +static +LONG +DiskGetFileInformation(ULONG FileId, FILEINFORMATION* Information) { DISKCONTEXT* Context = FsGetDeviceSpecific(FileId); @@ -126,7 +131,9 @@ static LONG DiskGetFileInformation(ULONG FileId, FILEINFORMATION* Information) return ESUCCESS; } -static LONG DiskOpen(CHAR* Path, OPENMODE OpenMode, ULONG* FileId) +static +LONG +DiskOpen(CHAR* Path, OPENMODE OpenMode, ULONG* FileId) { DISKCONTEXT* Context; ULONG DrivePartition, SectorSize; @@ -149,7 +156,7 @@ static LONG DiskOpen(CHAR* Path, OPENMODE OpenMode, ULONG* FileId) /* This is either a floppy disk device (DrivePartition == 0) or * a hard disk device (DrivePartition != 0 && DrivePartition != 0xFF) but * it doesn't matter which one because they both have 512 bytes per sector */ - SectorSize = 512; + SectorSize = 512; } if (DrivePartition != 0xff && DrivePartition != 0) @@ -177,7 +184,9 @@ static LONG DiskOpen(CHAR* Path, OPENMODE OpenMode, ULONG* FileId) return ESUCCESS; } -static LONG DiskRead(ULONG FileId, VOID* Buffer, ULONG N, ULONG* Count) +static +LONG +DiskRead(ULONG FileId, VOID* Buffer, ULONG N, ULONG* Count) { DISKCONTEXT* Context = FsGetDeviceSpecific(FileId); UCHAR* Ptr = (UCHAR*)Buffer; @@ -193,10 +202,10 @@ static LONG DiskRead(ULONG FileId, VOID* Buffer, ULONG N, ULONG* Count) Length = DISKREADBUFFER_SIZE; Sectors = (Length + Context->SectorSize - 1) / Context->SectorSize; ret = MachDiskReadLogicalSectors( - Context->DriveNumber, - Context->SectorNumber + Context->SectorOffset + i, - Sectors, - (PVOID)DISKREADBUFFER); + Context->DriveNumber, + Context->SectorNumber + Context->SectorOffset + i, + Sectors, + (PVOID)DISKREADBUFFER); if (!ret) return EIO; RtlCopyMemory(Ptr, (PVOID)DISKREADBUFFER, Length); @@ -209,7 +218,9 @@ static LONG DiskRead(ULONG FileId, VOID* Buffer, ULONG N, ULONG* Count) return ESUCCESS; } -static LONG DiskSeek(ULONG FileId, LARGE_INTEGER* Position, SEEKMODE SeekMode) +static +LONG +DiskSeek(ULONG FileId, LARGE_INTEGER* Position, SEEKMODE SeekMode) { DISKCONTEXT* Context = FsGetDeviceSpecific(FileId); @@ -223,7 +234,8 @@ static LONG DiskSeek(ULONG FileId, LARGE_INTEGER* Position, SEEKMODE SeekMode) return ESUCCESS; } -static const DEVVTBL DiskVtbl = { +static const DEVVTBL DiskVtbl = +{ DiskClose, DiskGetFileInformation, DiskOpen, @@ -231,91 +243,93 @@ static const DEVVTBL DiskVtbl = { DiskSeek, }; -static VOID +static +VOID GetHarddiskIdentifier(PCHAR Identifier, - UCHAR DriveNumber) + UCHAR DriveNumber) { - PMASTER_BOOT_RECORD Mbr; - ULONG *Buffer; - ULONG i; - ULONG Checksum; - ULONG Signature; - CHAR ArcName[256]; - PARTITION_TABLE_ENTRY PartitionTableEntry; + PMASTER_BOOT_RECORD Mbr; + ULONG *Buffer; + ULONG i; + ULONG Checksum; + ULONG Signature; + CHAR ArcName[256]; + PARTITION_TABLE_ENTRY PartitionTableEntry; - /* Read the MBR */ - if (!MachDiskReadLogicalSectors(DriveNumber, 0ULL, 1, (PVOID)DISKREADBUFFER)) + /* Read the MBR */ + if (!MachDiskReadLogicalSectors(DriveNumber, 0ULL, 1, (PVOID)DISKREADBUFFER)) { - ERR("Reading MBR failed\n"); - return; + ERR("Reading MBR failed\n"); + return; } - Buffer = (ULONG*)DISKREADBUFFER; - Mbr = (PMASTER_BOOT_RECORD)DISKREADBUFFER; + Buffer = (ULONG*)DISKREADBUFFER; + Mbr = (PMASTER_BOOT_RECORD)DISKREADBUFFER; - Signature = Mbr->Signature; - TRACE("Signature: %x\n", Signature); + Signature = Mbr->Signature; + TRACE("Signature: %x\n", Signature); - /* Calculate the MBR checksum */ - Checksum = 0; - for (i = 0; i < 128; i++) + /* Calculate the MBR checksum */ + Checksum = 0; + for (i = 0; i < 128; i++) { - Checksum += Buffer[i]; + Checksum += Buffer[i]; } - Checksum = ~Checksum + 1; - TRACE("Checksum: %x\n", Checksum); + Checksum = ~Checksum + 1; + TRACE("Checksum: %x\n", Checksum); - /* Fill out the ARC disk block */ - reactos_arc_disk_info[reactos_disk_count].Signature = Signature; - reactos_arc_disk_info[reactos_disk_count].CheckSum = Checksum; - sprintf(ArcName, "multi(0)disk(0)rdisk(%lu)", reactos_disk_count); - strcpy(reactos_arc_strings[reactos_disk_count], ArcName); - reactos_arc_disk_info[reactos_disk_count].ArcName = - reactos_arc_strings[reactos_disk_count]; - reactos_disk_count++; + /* Fill out the ARC disk block */ + reactos_arc_disk_info[reactos_disk_count].Signature = Signature; + reactos_arc_disk_info[reactos_disk_count].CheckSum = Checksum; + sprintf(ArcName, "multi(0)disk(0)rdisk(%lu)", reactos_disk_count); + strcpy(reactos_arc_strings[reactos_disk_count], ArcName); + reactos_arc_disk_info[reactos_disk_count].ArcName = + reactos_arc_strings[reactos_disk_count]; + reactos_disk_count++; - sprintf(ArcName, "multi(0)disk(0)rdisk(%u)partition(0)", DriveNumber - 0x80); - FsRegisterDevice(ArcName, &DiskVtbl); + sprintf(ArcName, "multi(0)disk(0)rdisk(%u)partition(0)", DriveNumber - 0x80); + FsRegisterDevice(ArcName, &DiskVtbl); - /* Add partitions */ - i = 1; - DiskReportError(FALSE); - while (XboxDiskGetPartitionEntry(DriveNumber, i, &PartitionTableEntry)) - { - if (PartitionTableEntry.SystemIndicator != PARTITION_ENTRY_UNUSED) + /* Add partitions */ + i = 1; + DiskReportError(FALSE); + while (XboxDiskGetPartitionEntry(DriveNumber, i, &PartitionTableEntry)) { - sprintf(ArcName, "multi(0)disk(0)rdisk(%u)partition(%lu)", DriveNumber - 0x80, i); - FsRegisterDevice(ArcName, &DiskVtbl); + if (PartitionTableEntry.SystemIndicator != PARTITION_ENTRY_UNUSED) + { + sprintf(ArcName, "multi(0)disk(0)rdisk(%u)partition(%lu)", DriveNumber - 0x80, i); + FsRegisterDevice(ArcName, &DiskVtbl); + } + i++; } - i++; - } - DiskReportError(TRUE); + DiskReportError(TRUE); - /* Convert checksum and signature to identifier string */ - Identifier[0] = Hex[(Checksum >> 28) & 0x0F]; - Identifier[1] = Hex[(Checksum >> 24) & 0x0F]; - Identifier[2] = Hex[(Checksum >> 20) & 0x0F]; - Identifier[3] = Hex[(Checksum >> 16) & 0x0F]; - Identifier[4] = Hex[(Checksum >> 12) & 0x0F]; - Identifier[5] = Hex[(Checksum >> 8) & 0x0F]; - Identifier[6] = Hex[(Checksum >> 4) & 0x0F]; - Identifier[7] = Hex[Checksum & 0x0F]; - Identifier[8] = '-'; - Identifier[9] = Hex[(Signature >> 28) & 0x0F]; - Identifier[10] = Hex[(Signature >> 24) & 0x0F]; - Identifier[11] = Hex[(Signature >> 20) & 0x0F]; - Identifier[12] = Hex[(Signature >> 16) & 0x0F]; - Identifier[13] = Hex[(Signature >> 12) & 0x0F]; - Identifier[14] = Hex[(Signature >> 8) & 0x0F]; - Identifier[15] = Hex[(Signature >> 4) & 0x0F]; - Identifier[16] = Hex[Signature & 0x0F]; - Identifier[17] = '-'; - Identifier[18] = 'A'; - Identifier[19] = 0; - TRACE("Identifier: %s\n", Identifier); + /* Convert checksum and signature to identifier string */ + Identifier[0] = Hex[(Checksum >> 28) & 0x0F]; + Identifier[1] = Hex[(Checksum >> 24) & 0x0F]; + Identifier[2] = Hex[(Checksum >> 20) & 0x0F]; + Identifier[3] = Hex[(Checksum >> 16) & 0x0F]; + Identifier[4] = Hex[(Checksum >> 12) & 0x0F]; + Identifier[5] = Hex[(Checksum >> 8) & 0x0F]; + Identifier[6] = Hex[(Checksum >> 4) & 0x0F]; + Identifier[7] = Hex[Checksum & 0x0F]; + Identifier[8] = '-'; + Identifier[9] = Hex[(Signature >> 28) & 0x0F]; + Identifier[10] = Hex[(Signature >> 24) & 0x0F]; + Identifier[11] = Hex[(Signature >> 20) & 0x0F]; + Identifier[12] = Hex[(Signature >> 16) & 0x0F]; + Identifier[13] = Hex[(Signature >> 12) & 0x0F]; + Identifier[14] = Hex[(Signature >> 8) & 0x0F]; + Identifier[15] = Hex[(Signature >> 4) & 0x0F]; + Identifier[16] = Hex[Signature & 0x0F]; + Identifier[17] = '-'; + Identifier[18] = 'A'; + Identifier[19] = 0; + TRACE("Identifier: %s\n", Identifier); } -static VOID +static +VOID DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey, PCONFIGURATION_COMPONENT_DATA BusKey) { @@ -356,13 +370,13 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey, } DiskReportError(TRUE); TRACE("BIOS reports %d harddisk%s\n", - (int)DiskCount, (DiskCount == 1) ? "": "s"); + (int)DiskCount, (DiskCount == 1) ? "" : "s"); //DetectBiosFloppyController(BusKey); /* Allocate resource descriptor */ Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + - sizeof(CM_INT13_DRIVE_PARAMETER) * DiskCount; + sizeof(CM_INT13_DRIVE_PARAMETER) * DiskCount; PartialResourceList = MmHeapAlloc(Size); if (PartialResourceList == NULL) { @@ -394,12 +408,12 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey, Int13Drives[i].NumberDrives = DiskCount; TRACE( - "Disk %x: %u Cylinders %u Heads %u Sectors %u Bytes\n", - 0x80 + i, - Geometry.Cylinders - 1, - Geometry.Heads -1, - Geometry.Sectors, - Geometry.BytesPerSector); + "Disk %x: %u Cylinders %u Heads %u Sectors %u Bytes\n", + 0x80 + i, + Geometry.Cylinders - 1, + Geometry.Heads - 1, + Geometry.Sectors, + Geometry.BytesPerSector); } } @@ -415,8 +429,6 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey, &ControllerKey); TRACE("Created key: DiskController\\0\n"); - MmHeapFree(PartialResourceList); - /* Create and fill subkey for each harddisk */ for (i = 0; i < DiskCount; i++) { @@ -437,35 +449,33 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey, PartialResourceList, Size, &DiskKey); - - if (PartialResourceList) - MmHeapFree(PartialResourceList); } } -static VOID +static +VOID DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) { - PCM_PARTIAL_RESOURCE_LIST PartialResourceList; - PCONFIGURATION_COMPONENT_DATA BusKey; - ULONG Size; + PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCONFIGURATION_COMPONENT_DATA BusKey; + ULONG Size; - /* Set 'Configuration Data' value */ - Size = sizeof(CM_PARTIAL_RESOURCE_LIST) - - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); - PartialResourceList = MmHeapAlloc(Size); - if (PartialResourceList == NULL) + /* Set 'Configuration Data' value */ + Size = sizeof(CM_PARTIAL_RESOURCE_LIST) - + sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); + PartialResourceList = MmHeapAlloc(Size); + if (PartialResourceList == NULL) { - TRACE( - "Failed to allocate resource descriptor\n"); - return; + TRACE( + "Failed to allocate resource descriptor\n"); + return; } - /* Initialize resource descriptor */ - memset(PartialResourceList, 0, Size); - PartialResourceList->Version = 1; - PartialResourceList->Revision = 1; - PartialResourceList->Count = 0; + /* Initialize resource descriptor */ + memset(PartialResourceList, 0, Size); + PartialResourceList->Version = 1; + PartialResourceList->Revision = 1; + PartialResourceList->Count = 0; /* Create new bus key */ FldrCreateComponentKey(SystemKey, @@ -482,31 +492,36 @@ DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) /* Increment bus number */ (*BusNumber)++; - MmHeapFree(PartialResourceList); - - /* Detect ISA/BIOS devices */ - DetectBiosDisks(SystemKey, BusKey); + /* Detect ISA/BIOS devices */ + DetectBiosDisks(SystemKey, BusKey); - /* FIXME: Detect more ISA devices */ + /* FIXME: Detect more ISA devices */ } PCONFIGURATION_COMPONENT_DATA XboxHwDetect(VOID) { - PCONFIGURATION_COMPONENT_DATA SystemKey; - ULONG BusNumber = 0; + PCONFIGURATION_COMPONENT_DATA SystemKey; + ULONG BusNumber = 0; - TRACE("DetectHardware()\n"); + TRACE("DetectHardware()\n"); - /* Create the 'System' key */ - FldrCreateSystemKey(&SystemKey); + /* Create the 'System' key */ + FldrCreateSystemKey(&SystemKey); - /* TODO: Build actual xbox's hardware configuration tree */ - DetectIsaBios(SystemKey, &BusNumber); + /* TODO: Build actual xbox's hardware configuration tree */ + DetectIsaBios(SystemKey, &BusNumber); - TRACE("DetectHardware() Done\n"); - return SystemKey; + TRACE("DetectHardware() Done\n"); + return SystemKey; +} + +BOOLEAN +XboxInitializeBootDevices(VOID) +{ + // Emulate old behavior + return XboxHwDetect() != NULL; } VOID XboxHwIdle(VOID) diff --git a/boot/freeldr/freeldr/bootmgr.c b/boot/freeldr/freeldr/bootmgr.c index 16e2c7d4b71..30470fc70dd 100644 --- a/boot/freeldr/freeldr/bootmgr.c +++ b/boot/freeldr/freeldr/bootmgr.c @@ -21,7 +21,6 @@ ARC_DISK_SIGNATURE reactos_arc_disk_info[32]; // ARC Disk Information ULONG reactos_disk_count = 0; -CHAR reactos_arc_hardware_data[HW_MAX_ARC_HEAP_SIZE] = {0}; CHAR reactos_arc_strings[32][256]; typedef @@ -197,8 +196,7 @@ VOID RunLoader(VOID) ULONG SelectedOperatingSystem; ULONG i; - // FIXME: if possible, only detect and register ARC devices... - if (!MachHwDetect()) + if (!MachInitializeBootDevices()) { UiMessageBoxCritical("Error when detecting hardware"); return; diff --git a/boot/freeldr/freeldr/include/arch/arm/hardware.h b/boot/freeldr/freeldr/include/arch/arm/hardware.h index 9d03c4d87a4..4466c96b7a4 100644 --- a/boot/freeldr/freeldr/include/arch/arm/hardware.h +++ b/boot/freeldr/freeldr/include/arch/arm/hardware.h @@ -24,8 +24,6 @@ FldrCreateSystemKey( OUT PCONFIGURATION_COMPONENT_DATA *SystemKey ); -#define HW_MAX_ARC_HEAP_SIZE 256 - extern PARM_BOARD_CONFIGURATION_BLOCK ArmBoardBlock; extern ULONG FirstLevelDcacheSize; extern ULONG FirstLevelDcacheFillSize; diff --git a/boot/freeldr/freeldr/include/arch/i386/machxbox.h b/boot/freeldr/freeldr/include/arch/i386/machxbox.h index c2a20056976..c375b953c8b 100644 --- a/boot/freeldr/freeldr/include/arch/i386/machxbox.h +++ b/boot/freeldr/freeldr/include/arch/i386/machxbox.h @@ -57,6 +57,7 @@ ULONG XboxDiskGetCacheableBlockCount(UCHAR DriveNumber); TIMEINFO* XboxGetTime(VOID); +BOOLEAN XboxInitializeBootDevices(VOID); PCONFIGURATION_COMPONENT_DATA XboxHwDetect(VOID); VOID XboxHwIdle(VOID); diff --git a/boot/freeldr/freeldr/include/arch/pc/hardware.h b/boot/freeldr/freeldr/include/arch/pc/hardware.h index 0e4e8542c54..324921a9ba2 100644 --- a/boot/freeldr/freeldr/include/arch/pc/hardware.h +++ b/boot/freeldr/freeldr/include/arch/pc/hardware.h @@ -24,12 +24,6 @@ (0x80000000 | (((ULONG)(bus)) << 16) | (((dev_fn) & 0x1F) << 11) | (((dev_fn) & 0xE0) << 3) | ((where) & ~3)) -// -// Static heap for ARC Hardware Component Tree -// 16KB oughta be enough for anyone. -// -#define HW_MAX_ARC_HEAP_SIZE 16 * 1024 - // // ARC Component Configuration Routines // diff --git a/boot/freeldr/freeldr/include/arch/pc/machpc.h b/boot/freeldr/freeldr/include/arch/pc/machpc.h index 4d7c39ae8ba..0dddeb0fef9 100644 --- a/boot/freeldr/freeldr/include/arch/pc/machpc.h +++ b/boot/freeldr/freeldr/include/arch/pc/machpc.h @@ -57,6 +57,7 @@ ULONG PcDiskGetCacheableBlockCount(UCHAR DriveNumber); TIMEINFO* PcGetTime(VOID); +BOOLEAN PcInitializeBootDevices(VOID); PCONFIGURATION_COMPONENT_DATA PcHwDetect(VOID); VOID PcHwIdle(VOID); diff --git a/boot/freeldr/freeldr/include/arch/powerpc/hardware.h b/boot/freeldr/freeldr/include/arch/powerpc/hardware.h index 9aebb0fbaea..0ef7fb3719f 100644 --- a/boot/freeldr/freeldr/include/arch/powerpc/hardware.h +++ b/boot/freeldr/freeldr/include/arch/powerpc/hardware.h @@ -27,12 +27,6 @@ #define CONFIG_CMD(bus, dev_fn, where) \ (0x80000000 | (((ULONG)(bus)) << 16) | (((dev_fn) & 0x1F) << 11) | (((dev_fn) & 0xE0) << 3) | ((where) & ~3)) -// -// Static heap for ARC Hardware Component Tree -// 16KB oughta be enough for anyone. -// -#define HW_MAX_ARC_HEAP_SIZE 16 * 1024 - // // ARC Component Configuration Routines // diff --git a/boot/freeldr/freeldr/include/machine.h b/boot/freeldr/freeldr/include/machine.h index ade4a21d1ba..c66659bc721 100644 --- a/boot/freeldr/freeldr/include/machine.h +++ b/boot/freeldr/freeldr/include/machine.h @@ -1,4 +1,4 @@ -/* +/* * FreeLoader * * This program is free software; you can redistribute it and/or modify @@ -68,6 +68,7 @@ typedef struct tagMACHVTBL TIMEINFO* (*GetTime)(VOID); ULONG (*GetRelativeTime)(VOID); + BOOLEAN (*InitializeBootDevices)(VOID); PCONFIGURATION_COMPONENT_DATA (*HwDetect)(VOID); VOID (*HwIdle)(VOID); } MACHVTBL, *PMACHVTBL; @@ -122,6 +123,7 @@ VOID MachHwIdle(VOID); #define MachDiskReadLogicalSectors(Drive, Start, Count, Buf) MachVtbl.DiskReadLogicalSectors((Drive), (Start), (Count), (Buf)) #define MachDiskGetDriveGeometry(Drive, Geom) MachVtbl.DiskGetDriveGeometry((Drive), (Geom)) #define MachDiskGetCacheableBlockCount(Drive) MachVtbl.DiskGetCacheableBlockCount(Drive) +#define MachInitializeBootDevices() MachVtbl.InitializeBootDevices() #define MachHwDetect() MachVtbl.HwDetect() #define MachHwIdle() MachVtbl.HwIdle() diff --git a/boot/freeldr/freeldr/include/mm.h b/boot/freeldr/freeldr/include/mm.h index 7b6ed61566a..bc7687a71ca 100644 --- a/boot/freeldr/freeldr/include/mm.h +++ b/boot/freeldr/freeldr/include/mm.h @@ -132,6 +132,10 @@ VOID HeapRelease( PVOID HeapHandle); +VOID +HeapVerify( + PVOID HeapHandle); + VOID HeapCleanupAll(VOID); diff --git a/boot/freeldr/freeldr/inffile/inffile.c b/boot/freeldr/freeldr/inffile/inffile.c index f753a3bec56..d0bf5ae2668 100644 --- a/boot/freeldr/freeldr/inffile/inffile.c +++ b/boot/freeldr/freeldr/inffile/inffile.c @@ -38,840 +38,899 @@ typedef struct _INFCACHEFIELD { - struct _INFCACHEFIELD *Next; - struct _INFCACHEFIELD *Prev; + struct _INFCACHEFIELD *Next; + struct _INFCACHEFIELD *Prev; - CHAR Data[1]; + CHAR Data[1]; } INFCACHEFIELD, *PINFCACHEFIELD; - typedef struct _INFCACHELINE { - struct _INFCACHELINE *Next; - struct _INFCACHELINE *Prev; + struct _INFCACHELINE *Next; + struct _INFCACHELINE *Prev; - ULONG FieldCount; + ULONG FieldCount; - PCHAR Key; + PCHAR Key; - PINFCACHEFIELD FirstField; - PINFCACHEFIELD LastField; + PINFCACHEFIELD FirstField; + PINFCACHEFIELD LastField; } INFCACHELINE, *PINFCACHELINE; - typedef struct _INFCACHESECTION { - struct _INFCACHESECTION *Next; - struct _INFCACHESECTION *Prev; + struct _INFCACHESECTION *Next; + struct _INFCACHESECTION *Prev; - PINFCACHELINE FirstLine; - PINFCACHELINE LastLine; + PINFCACHELINE FirstLine; + PINFCACHELINE LastLine; - LONG LineCount; + LONG LineCount; - CHAR Name[1]; + CHAR Name[1]; } INFCACHESECTION, *PINFCACHESECTION; - typedef struct _INFCACHE { - PINFCACHESECTION FirstSection; - PINFCACHESECTION LastSection; + PINFCACHESECTION FirstSection; + PINFCACHESECTION LastSection; - PINFCACHESECTION StringsSection; + PINFCACHESECTION StringsSection; } INFCACHE, *PINFCACHE; - /* parser definitions */ - enum parser_state { - LINE_START, /* at beginning of a line */ - SECTION_NAME, /* parsing a section name */ - KEY_NAME, /* parsing a key name */ - VALUE_NAME, /* parsing a value name */ - EOL_BACKSLASH, /* backslash at end of line */ - QUOTES, /* inside quotes */ - LEADING_SPACES, /* leading spaces */ - TRAILING_SPACES, /* trailing spaces */ - COMMENT, /* inside a comment */ - NB_PARSER_STATES + LINE_START, /* at beginning of a line */ + SECTION_NAME, /* parsing a section name */ + KEY_NAME, /* parsing a key name */ + VALUE_NAME, /* parsing a value name */ + EOL_BACKSLASH, /* backslash at end of line */ + QUOTES, /* inside quotes */ + LEADING_SPACES, /* leading spaces */ + TRAILING_SPACES, /* trailing spaces */ + COMMENT, /* inside a comment */ + NB_PARSER_STATES }; struct parser { - const CHAR *start; /* start position of item being parsed */ - const CHAR *end; /* end of buffer */ - PINFCACHE file; /* file being built */ - enum parser_state state; /* current parser state */ - enum parser_state stack[4]; /* state stack */ - int stack_pos; /* current pos in stack */ + const CHAR *start; /* start position of item being parsed */ + const CHAR *end; /* end of buffer */ + PINFCACHE file; /* file being built */ + enum parser_state state; /* current parser state */ + enum parser_state stack[4]; /* state stack */ + int stack_pos; /* current pos in stack */ - PINFCACHESECTION cur_section; /* pointer to the section being parsed*/ - PINFCACHELINE line; /* current line */ - unsigned int line_pos; /* current line position in file */ - unsigned int error; /* error code */ - unsigned int token_len; /* current token len */ - CHAR token[MAX_FIELD_LEN+1]; /* current token */ + PINFCACHESECTION cur_section; /* pointer to the section being parsed*/ + PINFCACHELINE line; /* current line */ + unsigned int line_pos; /* current line position in file */ + unsigned int error; /* error code */ + unsigned int token_len; /* current token len */ + CHAR token[MAX_FIELD_LEN + 1]; /* current token */ }; -typedef const CHAR * (*parser_state_func)( struct parser *parser, const CHAR *pos ); +typedef const CHAR * (*parser_state_func)(struct parser *parser, const CHAR *pos); /* parser state machine functions */ -static const CHAR *line_start_state( struct parser *parser, const CHAR *pos ); -static const CHAR *section_name_state( struct parser *parser, const CHAR *pos ); -static const CHAR *key_name_state( struct parser *parser, const CHAR *pos ); -static const CHAR *value_name_state( struct parser *parser, const CHAR *pos ); -static const CHAR *eol_backslash_state( struct parser *parser, const CHAR *pos ); -static const CHAR *quotes_state( struct parser *parser, const CHAR *pos ); -static const CHAR *leading_spaces_state( struct parser *parser, const CHAR *pos ); -static const CHAR *trailing_spaces_state( struct parser *parser, const CHAR *pos ); -static const CHAR *comment_state( struct parser *parser, const CHAR *pos ); +static const CHAR *line_start_state(struct parser *parser, const CHAR *pos); +static const CHAR *section_name_state(struct parser *parser, const CHAR *pos); +static const CHAR *key_name_state(struct parser *parser, const CHAR *pos); +static const CHAR *value_name_state(struct parser *parser, const CHAR *pos); +static const CHAR *eol_backslash_state(struct parser *parser, const CHAR *pos); +static const CHAR *quotes_state(struct parser *parser, const CHAR *pos); +static const CHAR *leading_spaces_state(struct parser *parser, const CHAR *pos); +static const CHAR *trailing_spaces_state(struct parser *parser, const CHAR *pos); +static const CHAR *comment_state(struct parser *parser, const CHAR *pos); -static const parser_state_func parser_funcs[NB_PARSER_STATES] = +static +const parser_state_func +parser_funcs[NB_PARSER_STATES] = { - line_start_state, /* LINE_START */ - section_name_state, /* SECTION_NAME */ - key_name_state, /* KEY_NAME */ - value_name_state, /* VALUE_NAME */ - eol_backslash_state, /* EOL_BACKSLASH */ - quotes_state, /* QUOTES */ - leading_spaces_state, /* LEADING_SPACES */ - trailing_spaces_state, /* TRAILING_SPACES */ - comment_state /* COMMENT */ + line_start_state, /* LINE_START */ + section_name_state, /* SECTION_NAME */ + key_name_state, /* KEY_NAME */ + value_name_state, /* VALUE_NAME */ + eol_backslash_state, /* EOL_BACKSLASH */ + quotes_state, /* QUOTES */ + leading_spaces_state, /* LEADING_SPACES */ + trailing_spaces_state, /* TRAILING_SPACES */ + comment_state /* COMMENT */ }; /* PRIVATE FUNCTIONS ********************************************************/ -static PINFCACHELINE -InfpCacheFreeLine (PINFCACHELINE Line) +static +PINFCACHELINE +InfpCacheFreeLine( + PINFCACHELINE Line) { - PINFCACHELINE Next; - PINFCACHEFIELD Field; + PINFCACHELINE Next; + PINFCACHEFIELD Field; - if (Line == NULL) + if (Line == NULL) { - return NULL; + return NULL; } - Next = Line->Next; - if (Line->Key != NULL) + Next = Line->Next; + if (Line->Key != NULL) { - MmHeapFree (Line->Key); - Line->Key = NULL; + MmHeapFree(Line->Key); + Line->Key = NULL; } - /* Remove data fields */ - while (Line->FirstField != NULL) + /* Remove data fields */ + while (Line->FirstField != NULL) { - Field = Line->FirstField->Next; - MmHeapFree (Line->FirstField); - Line->FirstField = Field; + Field = Line->FirstField->Next; + MmHeapFree(Line->FirstField); + Line->FirstField = Field; } - Line->LastField = NULL; + Line->LastField = NULL; - MmHeapFree (Line); + MmHeapFree(Line); - return Next; + return Next; } -static PINFCACHESECTION -InfpCacheFreeSection (PINFCACHESECTION Section) +static +PINFCACHESECTION +InfpCacheFreeSection( + PINFCACHESECTION Section) { - PINFCACHESECTION Next; + PINFCACHESECTION Next; - if (Section == NULL) + if (Section == NULL) { - return NULL; + return NULL; } - /* Release all keys */ - Next = Section->Next; - while (Section->FirstLine != NULL) + /* Release all keys */ + Next = Section->Next; + while (Section->FirstLine != NULL) { - Section->FirstLine = InfpCacheFreeLine (Section->FirstLine); + Section->FirstLine = InfpCacheFreeLine(Section->FirstLine); } - Section->LastLine = NULL; + Section->LastLine = NULL; - MmHeapFree (Section); + MmHeapFree(Section); - return Next; + return Next; } -static PINFCACHESECTION -InfpCacheFindSection (PINFCACHE Cache, - PCSTR Name) +static +PINFCACHESECTION +InfpCacheFindSection( + PINFCACHE Cache, + PCSTR Name) { - PINFCACHESECTION Section = NULL; + PINFCACHESECTION Section = NULL; - if (Cache == NULL || Name == NULL) + if (Cache == NULL || Name == NULL) { - return NULL; + return NULL; } - /* iterate through list of sections */ - Section = Cache->FirstSection; - while (Section != NULL) + /* iterate through list of sections */ + Section = Cache->FirstSection; + while (Section != NULL) { - if (_stricmp (Section->Name, Name) == 0) - { - return Section; - } + if (_stricmp(Section->Name, Name) == 0) + { + return Section; + } - /* get the next section*/ - Section = Section->Next; + /* get the next section*/ + Section = Section->Next; } - return NULL; + return NULL; } -static PINFCACHESECTION -InfpCacheAddSection (PINFCACHE Cache, - PCHAR Name) +static +PINFCACHESECTION +InfpCacheAddSection( + PINFCACHE Cache, + PCHAR Name) { - PINFCACHESECTION Section = NULL; - ULONG Size; + PINFCACHESECTION Section = NULL; + SIZE_T Size; - if (Cache == NULL || Name == NULL) + if ((Cache == NULL) || (Name == NULL)) { // DPRINT("Invalid parameter\n"); - return NULL; + return NULL; } - /* Allocate and initialize the new section */ - Size = sizeof(INFCACHESECTION) + strlen (Name); - Section = (PINFCACHESECTION)MmHeapAlloc (Size); - if (Section == NULL) + /* Allocate and initialize the new section */ + Size = sizeof(INFCACHESECTION) + strlen(Name); + Section = (PINFCACHESECTION)MmHeapAlloc(Size); + if (Section == NULL) { // DPRINT("RtlAllocateHeap() failed\n"); - return NULL; + return NULL; } - memset (Section, 0, Size); + memset(Section, 0, Size); - /* Copy section name */ - strcpy (Section->Name, Name); + /* Copy section name */ + strcpy(Section->Name, Name); - /* Append section */ - if (Cache->FirstSection == NULL) + /* Append section */ + if (Cache->FirstSection == NULL) { - Cache->FirstSection = Section; - Cache->LastSection = Section; + Cache->FirstSection = Section; + Cache->LastSection = Section; } - else + else { - Cache->LastSection->Next = Section; - Section->Prev = Cache->LastSection; - Cache->LastSection = Section; + Cache->LastSection->Next = Section; + Section->Prev = Cache->LastSection; + Cache->LastSection = Section; } - return Section; + return Section; } -static PINFCACHELINE -InfpCacheAddLine (PINFCACHESECTION Section) +static +PINFCACHELINE +InfpCacheAddLine(PINFCACHESECTION Section) { - PINFCACHELINE Line; + PINFCACHELINE Line; - if (Section == NULL) + if (Section == NULL) { // DPRINT("Invalid parameter\n"); - return NULL; + return NULL; } - Line = (PINFCACHELINE)MmHeapAlloc (sizeof(INFCACHELINE)); - if (Line == NULL) + Line = (PINFCACHELINE)MmHeapAlloc(sizeof(INFCACHELINE)); + if (Line == NULL) { // DPRINT("RtlAllocateHeap() failed\n"); - return NULL; + return NULL; } - memset (Line, 0, sizeof(INFCACHELINE)); + memset(Line, 0, sizeof(INFCACHELINE)); - /* Append line */ - if (Section->FirstLine == NULL) + /* Append line */ + if (Section->FirstLine == NULL) { - Section->FirstLine = Line; - Section->LastLine = Line; + Section->FirstLine = Line; + Section->LastLine = Line; } - else + else { - Section->LastLine->Next = Line; - Line->Prev = Section->LastLine; - Section->LastLine = Line; + Section->LastLine->Next = Line; + Line->Prev = Section->LastLine; + Section->LastLine = Line; } - Section->LineCount++; + Section->LineCount++; - return Line; + return Line; } -static PVOID -InfpAddKeyToLine (PINFCACHELINE Line, - PCHAR Key) +static +PVOID +InfpAddKeyToLine( + PINFCACHELINE Line, + PCHAR Key) { - if (Line == NULL) - return NULL; + if (Line == NULL) + return NULL; - if (Line->Key != NULL) - return NULL; + if (Line->Key != NULL) + return NULL; - Line->Key = MmHeapAlloc(strlen(Key) + 1); - if (Line->Key == NULL) - return NULL; + Line->Key = MmHeapAlloc(strlen(Key) + 1); + if (Line->Key == NULL) + return NULL; - strcpy (Line->Key, Key); + strcpy(Line->Key, Key); - return (PVOID)Line->Key; + return (PVOID)Line->Key; } -static PVOID -InfpAddFieldToLine (PINFCACHELINE Line, - PCHAR Data) +static +PVOID +InfpAddFieldToLine( + PINFCACHELINE Line, + PCHAR Data) { - PINFCACHEFIELD Field; - ULONG Size; + PINFCACHEFIELD Field; + SIZE_T Size; - Size = sizeof(INFCACHEFIELD) + strlen(Data); - Field = (PINFCACHEFIELD)MmHeapAlloc (Size); - if (Field == NULL) + Size = sizeof(INFCACHEFIELD) + strlen(Data); + Field = (PINFCACHEFIELD)MmHeapAlloc(Size); + if (Field == NULL) { - return NULL; + return NULL; } - memset (Field, 0, Size); + memset(Field, 0, Size); - strcpy (Field->Data, Data); + strcpy(Field->Data, Data); - /* Append key */ - if (Line->FirstField == NULL) + /* Append key */ + if (Line->FirstField == NULL) { - Line->FirstField = Field; - Line->LastField = Field; + Line->FirstField = Field; + Line->LastField = Field; } - else + else { - Line->LastField->Next = Field; - Field->Prev = Line->LastField; - Line->LastField = Field; + Line->LastField->Next = Field; + Field->Prev = Line->LastField; + Line->LastField = Field; } - Line->FieldCount++; + Line->FieldCount++; - return (PVOID)Field; + return (PVOID)Field; } -static PINFCACHELINE -InfpCacheFindKeyLine (PINFCACHESECTION Section, - PCSTR Key) +static +PINFCACHELINE +InfpCacheFindKeyLine( + PINFCACHESECTION Section, + PCSTR Key) { - PINFCACHELINE Line; + PINFCACHELINE Line; - Line = Section->FirstLine; - while (Line != NULL) + Line = Section->FirstLine; + while (Line != NULL) { - if (Line->Key != NULL && _stricmp (Line->Key, Key) == 0) - { - return Line; - } + if ((Line->Key != NULL) && (_stricmp(Line->Key, Key) == 0)) + { + return Line; + } - Line = Line->Next; + Line = Line->Next; } - return NULL; + return NULL; } /* push the current state on the parser stack */ -__inline static void push_state( struct parser *parser, enum parser_state state ) +__inline static void push_state(struct parser *parser, enum parser_state state) { -// assert( parser->stack_pos < sizeof(parser->stack)/sizeof(parser->stack[0]) ); - parser->stack[parser->stack_pos++] = state; +// assert(parser->stack_pos < sizeof(parser->stack)/sizeof(parser->stack[0])); + parser->stack[parser->stack_pos++] = state; } /* pop the current state */ -__inline static void pop_state( struct parser *parser ) +__inline static void pop_state(struct parser *parser) { // assert( parser->stack_pos ); - parser->state = parser->stack[--parser->stack_pos]; + parser->state = parser->stack[--parser->stack_pos]; } /* set the parser state and return the previous one */ -__inline static enum parser_state set_state( struct parser *parser, enum parser_state state ) +__inline static enum parser_state set_state(struct parser *parser, enum parser_state state) { - enum parser_state ret = parser->state; - parser->state = state; - return ret; + enum parser_state ret = parser->state; + parser->state = state; + return ret; } /* check if the pointer points to an end of file */ -__inline static int is_eof( struct parser *parser, const CHAR *ptr ) +__inline static int is_eof(struct parser *parser, const CHAR *ptr) { - return (ptr >= parser->end || *ptr == CONTROL_Z); + return (ptr >= parser->end || *ptr == CONTROL_Z); } /* check if the pointer points to an end of line */ -__inline static int is_eol( struct parser *parser, const CHAR *ptr ) +__inline static int is_eol(struct parser *parser, const CHAR *ptr) { - return (ptr >= parser->end || - *ptr == CONTROL_Z || - *ptr == '\n' || - (*ptr == '\r' && *(ptr + 1) == '\n')); + return ((ptr >= parser->end) || + (*ptr == CONTROL_Z) || + (*ptr == '\n') || + ((*ptr == '\r') && (*(ptr + 1) == '\n'))); } /* push data from current token start up to pos into the current token */ -static int push_token( struct parser *parser, const CHAR *pos ) +static +int +push_token( + struct parser *parser, + const CHAR *pos) { - SIZE_T len = pos - parser->start; - const CHAR *src = parser->start; - CHAR *dst = parser->token + parser->token_len; + SIZE_T len = pos - parser->start; + const CHAR *src = parser->start; + CHAR *dst = parser->token + parser->token_len; - if (len > MAX_FIELD_LEN - parser->token_len) - len = MAX_FIELD_LEN - parser->token_len; + if (len > MAX_FIELD_LEN - parser->token_len) + len = MAX_FIELD_LEN - parser->token_len; - parser->token_len += len; - for ( ; len > 0; len--, dst++, src++) - *dst = *src ? (CHAR)*src : L' '; - *dst = 0; - parser->start = pos; + parser->token_len += (ULONG)len; + for ( ; len > 0; len--, dst++, src++) + *dst = *src ? (CHAR)*src : L' '; + *dst = 0; + parser->start = pos; - return 0; + return 0; } - /* add a section with the current token as name */ -static PVOID add_section_from_token( struct parser *parser ) +static +PVOID +add_section_from_token(struct parser *parser) { - PINFCACHESECTION Section; + PINFCACHESECTION Section; - if (parser->token_len > MAX_SECTION_NAME_LEN) + if (parser->token_len > MAX_SECTION_NAME_LEN) { - parser->error = FALSE; - return NULL; + parser->error = FALSE; + return NULL; } - Section = InfpCacheFindSection (parser->file, - parser->token); - if (Section == NULL) + Section = InfpCacheFindSection(parser->file, parser->token); + if (Section == NULL) { - /* need to create a new one */ - Section= InfpCacheAddSection (parser->file, - parser->token); - if (Section == NULL) - { - parser->error = FALSE; - return NULL; - } + /* need to create a new one */ + Section = InfpCacheAddSection(parser->file, parser->token); + if (Section == NULL) + { + parser->error = FALSE; + return NULL; + } } - parser->token_len = 0; - parser->cur_section = Section; + parser->token_len = 0; + parser->cur_section = Section; - return (PVOID)Section; + return (PVOID)Section; } /* add a field containing the current token to the current line */ -static struct field *add_field_from_token( struct parser *parser, int is_key ) +static +struct field* +add_field_from_token( + struct parser *parser, + int is_key) { - PVOID field; + PVOID field; - if (!parser->line) /* need to start a new line */ + if (!parser->line) /* need to start a new line */ { - if (parser->cur_section == NULL) /* got a line before the first section */ - { - parser->error = STATUS_WRONG_INF_STYLE; - return NULL; - } + if (parser->cur_section == NULL) /* got a line before the first section */ + { + parser->error = STATUS_WRONG_INF_STYLE; + return NULL; + } - parser->line = InfpCacheAddLine (parser->cur_section); - if (parser->line == NULL) - goto error; + parser->line = InfpCacheAddLine(parser->cur_section); + if (parser->line == NULL) + goto error; } - else + else { // assert(!is_key); } - if (is_key) + if (is_key) { - field = InfpAddKeyToLine(parser->line, parser->token); + field = InfpAddKeyToLine(parser->line, parser->token); } - else + else { - field = InfpAddFieldToLine(parser->line, parser->token); + field = InfpAddFieldToLine(parser->line, parser->token); } - if (field != NULL) + if (field != NULL) { - parser->token_len = 0; - return field; + parser->token_len = 0; + return field; } error: - parser->error = FALSE; - return NULL; + parser->error = FALSE; + return NULL; } /* close the current line and prepare for parsing a new one */ -static void close_current_line( struct parser *parser ) +static +VOID +close_current_line(struct parser *parser) { - parser->line = NULL; + parser->line = NULL; } - /* handler for parser LINE_START state */ -static const CHAR *line_start_state( struct parser *parser, const CHAR *pos ) +static +const CHAR* +line_start_state( + struct parser *parser, + const CHAR *pos) { - const CHAR *p; + const CHAR *p; - for (p = pos; !is_eof( parser, p ); p++) + for (p = pos; !is_eof(parser, p); p++) { - switch(*p) - { - case '\r': - continue; + switch(*p) + { + case '\r': + continue; - case '\n': - parser->line_pos++; - close_current_line( parser ); - break; + case '\n': + parser->line_pos++; + close_current_line(parser); + break; - case ';': - push_state( parser, LINE_START ); - set_state( parser, COMMENT ); - return p + 1; + case ';': + push_state(parser, LINE_START); + set_state(parser, COMMENT); + return p + 1; - case '[': - parser->start = p + 1; - set_state( parser, SECTION_NAME ); - return p + 1; + case '[': + parser->start = p + 1; + set_state(parser, SECTION_NAME); + return p + 1; - default: - if (!isspace((unsigned char)*p)) - { - parser->start = p; - set_state( parser, KEY_NAME ); - return p; - } - break; - } + default: + if (!isspace((unsigned char)*p)) + { + parser->start = p; + set_state(parser, KEY_NAME); + return p; + } + break; + } } - close_current_line( parser ); - return NULL; + close_current_line(parser); + return NULL; } /* handler for parser SECTION_NAME state */ -static const CHAR *section_name_state( struct parser *parser, const CHAR *pos ) +static +const CHAR* +section_name_state( + struct parser *parser, + const CHAR *pos) { - const CHAR *p; + const CHAR *p; - for (p = pos; !is_eol( parser, p ); p++) + for (p = pos; !is_eol(parser, p); p++) { - if (*p == ']') - { - push_token( parser, p ); - if (add_section_from_token( parser ) == NULL) - return NULL; - push_state( parser, LINE_START ); - set_state( parser, COMMENT ); /* ignore everything else on the line */ - return p + 1; - } + if (*p == ']') + { + push_token(parser, p); + if (add_section_from_token(parser) == NULL) + return NULL; + push_state(parser, LINE_START); + set_state(parser, COMMENT); /* ignore everything else on the line */ + return p + 1; + } } - parser->error = STATUS_BAD_SECTION_NAME_LINE; /* unfinished section name */ - return NULL; + parser->error = STATUS_BAD_SECTION_NAME_LINE; /* unfinished section name */ + return NULL; } /* handler for parser KEY_NAME state */ -static const CHAR *key_name_state( struct parser *parser, const CHAR *pos ) +static +const CHAR* +key_name_state( + struct parser *parser, + const CHAR *pos) { const CHAR *p, *token_end = parser->start; - for (p = pos; !is_eol( parser, p ); p++) + for (p = pos; !is_eol(parser, p); p++) { if (*p == ',') break; switch(*p) { - case '=': - push_token( parser, token_end ); - if (!add_field_from_token( parser, 1 )) return NULL; + case '=': + push_token(parser, token_end); + if (!add_field_from_token(parser, 1)) return NULL; parser->start = p + 1; - push_state( parser, VALUE_NAME ); - set_state( parser, LEADING_SPACES ); + push_state(parser, VALUE_NAME); + set_state(parser, LEADING_SPACES); return p + 1; case ';': - push_token( parser, token_end ); - if (!add_field_from_token( parser, 0 )) return NULL; - push_state( parser, LINE_START ); - set_state( parser, COMMENT ); + push_token(parser, token_end); + if (!add_field_from_token(parser, 0)) return NULL; + push_state(parser, LINE_START); + set_state(parser, COMMENT); return p + 1; case '"': - push_token( parser, token_end ); + push_token(parser, token_end); parser->start = p + 1; - push_state( parser, KEY_NAME ); - set_state( parser, QUOTES ); + push_state(parser, KEY_NAME); + set_state(parser, QUOTES); return p + 1; case '\\': - push_token( parser, token_end ); + push_token(parser, token_end); parser->start = p; - push_state( parser, KEY_NAME ); - set_state( parser, EOL_BACKSLASH ); + push_state(parser, KEY_NAME); + set_state(parser, EOL_BACKSLASH); return p; default: if (!isspace((unsigned char)*p)) token_end = p + 1; else { - push_token( parser, p ); - push_state( parser, KEY_NAME ); - set_state( parser, TRAILING_SPACES ); + push_token(parser, p); + push_state(parser, KEY_NAME); + set_state(parser, TRAILING_SPACES); return p; } break; } } - push_token( parser, token_end ); - set_state( parser, VALUE_NAME ); + push_token(parser, token_end); + set_state(parser, VALUE_NAME); return p; } /* handler for parser VALUE_NAME state */ -static const CHAR *value_name_state( struct parser *parser, const CHAR *pos ) +static +const CHAR* +value_name_state( + struct parser *parser, + const CHAR *pos) { const CHAR *p, *token_end = parser->start; - for (p = pos; !is_eol( parser, p ); p++) + for (p = pos; !is_eol(parser, p); p++) { switch(*p) { case ';': - push_token( parser, token_end ); - if (!add_field_from_token( parser, 0 )) return NULL; - push_state( parser, LINE_START ); - set_state( parser, COMMENT ); + push_token(parser, token_end); + if (!add_field_from_token(parser, 0)) return NULL; + push_state(parser, LINE_START); + set_state(parser, COMMENT); return p + 1; case ',': - push_token( parser, token_end ); - if (!add_field_from_token( parser, 0 )) return NULL; + push_token(parser, token_end); + if (!add_field_from_token(parser, 0)) return NULL; parser->start = p + 1; - push_state( parser, VALUE_NAME ); - set_state( parser, LEADING_SPACES ); + push_state(parser, VALUE_NAME); + set_state(parser, LEADING_SPACES); return p + 1; case '"': - push_token( parser, token_end ); + push_token(parser, token_end); parser->start = p + 1; - push_state( parser, VALUE_NAME ); - set_state( parser, QUOTES ); + push_state(parser, VALUE_NAME); + set_state(parser, QUOTES); return p + 1; case '\\': - push_token( parser, token_end ); + push_token(parser, token_end); parser->start = p; - push_state( parser, VALUE_NAME ); - set_state( parser, EOL_BACKSLASH ); + push_state(parser, VALUE_NAME); + set_state(parser, EOL_BACKSLASH); return p; default: if (!isspace((unsigned char)*p)) token_end = p + 1; else { - push_token( parser, p ); - push_state( parser, VALUE_NAME ); - set_state( parser, TRAILING_SPACES ); + push_token(parser, p); + push_state(parser, VALUE_NAME); + set_state(parser, TRAILING_SPACES); return p; } break; } } - push_token( parser, token_end ); - if (!add_field_from_token( parser, 0 )) return NULL; - set_state( parser, LINE_START ); + push_token(parser, token_end); + if (!add_field_from_token(parser, 0)) return NULL; + set_state(parser, LINE_START); return p; } /* handler for parser EOL_BACKSLASH state */ -static const CHAR *eol_backslash_state( struct parser *parser, const CHAR *pos ) +static +const CHAR* +eol_backslash_state( + struct parser *parser, + const CHAR *pos ) { - const CHAR *p; + const CHAR *p; - for (p = pos; !is_eof( parser, p ); p++) + for (p = pos; !is_eof(parser, p); p++) { - switch(*p) - { - case '\r': - continue; + switch(*p) + { + case '\r': + continue; - case '\n': - parser->line_pos++; - parser->start = p + 1; - set_state( parser, LEADING_SPACES ); - return p + 1; + case '\n': + parser->line_pos++; + parser->start = p + 1; + set_state(parser, LEADING_SPACES); + return p + 1; - case '\\': - continue; + case '\\': + continue; - case ';': - push_state( parser, EOL_BACKSLASH ); - set_state( parser, COMMENT ); - return p + 1; + case ';': + push_state(parser, EOL_BACKSLASH); + set_state(parser, COMMENT); + return p + 1; - default: - if (isspace((unsigned char)*p)) - continue; - push_token( parser, p ); - pop_state( parser ); - return p; - } + default: + if (isspace((unsigned char)*p)) + continue; + push_token(parser, p); + pop_state(parser); + return p; + } } - parser->start = p; - pop_state( parser ); + parser->start = p; + pop_state(parser); - return p; + return p; } /* handler for parser QUOTES state */ -static const CHAR *quotes_state( struct parser *parser, const CHAR *pos ) +static +const CHAR* +quotes_state( + struct parser *parser, + const CHAR *pos ) { - const CHAR *p, *token_end = parser->start; + const CHAR *p, *token_end = parser->start; - for (p = pos; !is_eol( parser, p ); p++) + for (p = pos; !is_eol(parser, p); p++) { - if (*p == '"') - { - if (p+1 < parser->end && p[1] == '"') /* double quotes */ - { - push_token( parser, p + 1 ); - parser->start = token_end = p + 2; - p++; - } - else /* end of quotes */ - { - push_token( parser, p ); - parser->start = p + 1; - pop_state( parser ); - return p + 1; - } - } + if (*p == '"') + { + if (p + 1 < parser->end && p[1] == '"') /* double quotes */ + { + push_token(parser, p + 1); + parser->start = token_end = p + 2; + p++; + } + else /* end of quotes */ + { + push_token(parser, p); + parser->start = p + 1; + pop_state(parser); + return p + 1; + } + } } - push_token( parser, p ); - pop_state( parser ); - return p; + push_token(parser, p); + pop_state(parser); + return p; } /* handler for parser LEADING_SPACES state */ -static const CHAR *leading_spaces_state( struct parser *parser, const CHAR *pos ) +static +const CHAR* +leading_spaces_state( + struct parser *parser, + const CHAR *pos ) { - const CHAR *p; + const CHAR *p; - for (p = pos; !is_eol( parser, p ); p++) + for (p = pos; !is_eol(parser, p); p++) { - if (*p == '\\') - { - parser->start = p; - set_state( parser, EOL_BACKSLASH ); - return p; - } - if (!isspace((unsigned char)*p)) - break; + if (*p == '\\') + { + parser->start = p; + set_state(parser, EOL_BACKSLASH); + return p; + } + if (!isspace((unsigned char)*p)) + break; } - parser->start = p; - pop_state( parser ); - return p; + parser->start = p; + pop_state(parser); + return p; } /* handler for parser TRAILING_SPACES state */ -static const CHAR *trailing_spaces_state( struct parser *parser, const CHAR *pos ) +static +const CHAR* +trailing_spaces_state( + struct parser *parser, + const CHAR *pos ) { - const CHAR *p; + const CHAR *p; - for (p = pos; !is_eol( parser, p ); p++) + for (p = pos; !is_eol(parser, p); p++) { - if (*p == '\\') - { - set_state( parser, EOL_BACKSLASH ); - return p; - } - if (!isspace((unsigned char)*p)) - break; + if (*p == '\\') + { + set_state(parser, EOL_BACKSLASH); + return p; + } + if (!isspace((unsigned char)*p)) + break; } - pop_state( parser ); - return p; + pop_state(parser); + return p; } /* handler for parser COMMENT state */ -static const CHAR *comment_state( struct parser *parser, const CHAR *pos ) +static +const CHAR* +comment_state( + struct parser *parser, + const CHAR *pos ) { - const CHAR *p = pos; + const CHAR *p = pos; - while (!is_eol( parser, p )) - p++; - pop_state( parser ); - return p; + while (!is_eol(parser, p)) + p++; + pop_state(parser); + return p; } /* parse a complete buffer */ -static BOOLEAN -InfpParseBuffer (PINFCACHE file, - const CHAR *buffer, - const CHAR *end, - PULONG error_line) +static +BOOLEAN +InfpParseBuffer ( + PINFCACHE file, + PCCHAR buffer, + PCCHAR end, + PULONG error_line) { - struct parser parser; - const CHAR *pos = buffer; + struct parser parser; + const CHAR* pos = buffer; - parser.start = buffer; - parser.end = end; - parser.file = file; - parser.line = NULL; - parser.state = LINE_START; - parser.stack_pos = 0; - parser.cur_section = NULL; - parser.line_pos = 1; - parser.error = TRUE; - parser.token_len = 0; + parser.start = buffer; + parser.end = end; + parser.file = file; + parser.line = NULL; + parser.state = LINE_START; + parser.stack_pos = 0; + parser.cur_section = NULL; + parser.line_pos = 1; + parser.error = TRUE; + parser.token_len = 0; - /* parser main loop */ - while (pos) - pos = (parser_funcs[parser.state])(&parser, pos); + /* parser main loop */ + while (pos) + pos = (parser_funcs[parser.state])(&parser, pos); - if (parser.error) + if (parser.error) { - if (error_line) - *error_line = parser.line_pos; - return parser.error; + if (error_line) + *error_line = parser.line_pos; + return parser.error; } - /* find the [strings] section */ - file->StringsSection = InfpCacheFindSection (file, "Strings"); + /* find the [strings] section */ + file->StringsSection = InfpCacheFindSection(file, "Strings"); - return TRUE; + return TRUE; } /* PUBLIC FUNCTIONS *********************************************************/ BOOLEAN -InfOpenFile(PHINF InfHandle, - PCSTR FileName, - PULONG ErrorLine) +InfOpenFile( + PHINF InfHandle, + PCSTR FileName, + PULONG ErrorLine) { FILEINFORMATION Information; ULONG FileId; @@ -882,7 +941,7 @@ InfOpenFile(PHINF InfHandle, LONG ret; *InfHandle = NULL; - *ErrorLine = (ULONG)-1; + *ErrorLine = (ULONG) - 1; // // Open the .inf file @@ -897,7 +956,7 @@ InfOpenFile(PHINF InfHandle, // Query file size // ret = ArcGetFileInformation(FileId, &Information); - if (ret != ESUCCESS || Information.EndingAddress.HighPart != 0) + if ((ret != ESUCCESS) || (Information.EndingAddress.HighPart != 0)) { ArcClose(FileId); return FALSE; @@ -918,7 +977,7 @@ InfOpenFile(PHINF InfHandle, // Read file into memory // ret = ArcRead(FileId, FileBuffer, FileSize, &Count); - if (ret != ESUCCESS || Count != FileSize) + if ((ret != ESUCCESS) || (Count != FileSize)) { ArcClose(FileId); MmHeapFree(FileBuffer); @@ -941,7 +1000,7 @@ InfOpenFile(PHINF InfHandle, Cache = (PINFCACHE)MmHeapAlloc(sizeof(INFCACHE)); if (!Cache) { - MmHeapFree (FileBuffer); + MmHeapFree(FileBuffer); return FALSE; } @@ -980,214 +1039,219 @@ InfOpenFile(PHINF InfHandle, VOID InfCloseFile(HINF InfHandle) { - PINFCACHE Cache; + PINFCACHE Cache; - Cache = (PINFCACHE)InfHandle; + Cache = (PINFCACHE)InfHandle; - if (Cache == NULL) + if (Cache == NULL) { - return; + return; } - while (Cache->FirstSection != NULL) + while (Cache->FirstSection != NULL) { - Cache->FirstSection = InfpCacheFreeSection(Cache->FirstSection); + Cache->FirstSection = InfpCacheFreeSection(Cache->FirstSection); } - Cache->LastSection = NULL; + Cache->LastSection = NULL; - MmHeapFree(Cache); + MmHeapFree(Cache); } BOOLEAN -InfFindFirstLine (HINF InfHandle, - PCSTR Section, - PCSTR Key, - PINFCONTEXT Context) +InfFindFirstLine ( + HINF InfHandle, + PCSTR Section, + PCSTR Key, + PINFCONTEXT Context) { - PINFCACHE Cache; - PINFCACHESECTION CacheSection; - PINFCACHELINE CacheLine; + PINFCACHE Cache; + PINFCACHESECTION CacheSection; + PINFCACHELINE CacheLine; - if (InfHandle == NULL || Section == NULL || Context == NULL) + if ((InfHandle == NULL) || (Section == NULL) || (Context == NULL)) { // DPRINT("Invalid parameter\n"); - return FALSE; + return FALSE; } - Cache = (PINFCACHE)InfHandle; + Cache = (PINFCACHE)InfHandle; - /* Iterate through list of sections */ - CacheSection = Cache->FirstSection; - while (Section != NULL) + /* Iterate through list of sections */ + CacheSection = Cache->FirstSection; + while (Section != NULL) { // DPRINT("Comparing '%S' and '%S'\n", CacheSection->Name, Section); - /* Are the section names the same? */ - if (_stricmp(CacheSection->Name, Section) == 0) - { - if (Key != NULL) - { - CacheLine = InfpCacheFindKeyLine (CacheSection, Key); - } - else - { - CacheLine = CacheSection->FirstLine; - } + /* Are the section names the same? */ + if (_stricmp(CacheSection->Name, Section) == 0) + { + if (Key != NULL) + { + CacheLine = InfpCacheFindKeyLine(CacheSection, Key); + } + else + { + CacheLine = CacheSection->FirstLine; + } - if (CacheLine == NULL) - return FALSE; + if (CacheLine == NULL) + return FALSE; - Context->Inf = (PVOID)Cache; - Context->Section = (PVOID)CacheSection; - Context->Line = (PVOID)CacheLine; + Context->Inf = (PVOID)Cache; + Context->Section = (PVOID)CacheSection; + Context->Line = (PVOID)CacheLine; - return TRUE; - } + return TRUE; + } - /* Get the next section */ - CacheSection = CacheSection->Next; + /* Get the next section */ + CacheSection = CacheSection->Next; } // DPRINT("Section not found\n"); - return FALSE; + return FALSE; } BOOLEAN -InfFindNextLine (PINFCONTEXT ContextIn, - PINFCONTEXT ContextOut) +InfFindNextLine ( + PINFCONTEXT ContextIn, + PINFCONTEXT ContextOut) { - PINFCACHELINE CacheLine; + PINFCACHELINE CacheLine; - if (ContextIn == NULL || ContextOut == NULL) - return FALSE; + if ((ContextIn == NULL) || (ContextOut == NULL)) + return FALSE; - if (ContextIn->Line == NULL) - return FALSE; + if (ContextIn->Line == NULL) + return FALSE; - CacheLine = (PINFCACHELINE)ContextIn->Line; - if (CacheLine->Next == NULL) - return FALSE; + CacheLine = (PINFCACHELINE)ContextIn->Line; + if (CacheLine->Next == NULL) + return FALSE; - if (ContextIn != ContextOut) + if (ContextIn != ContextOut) { - ContextOut->Inf = ContextIn->Inf; - ContextOut->Section = ContextIn->Section; + ContextOut->Inf = ContextIn->Inf; + ContextOut->Section = ContextIn->Section; } - ContextOut->Line = (PVOID)(CacheLine->Next); + ContextOut->Line = (PVOID)(CacheLine->Next); - return TRUE; + return TRUE; } BOOLEAN -InfFindFirstMatchLine (PINFCONTEXT ContextIn, - PCHAR Key, - PINFCONTEXT ContextOut) +InfFindFirstMatchLine ( + PINFCONTEXT ContextIn, + PCHAR Key, + PINFCONTEXT ContextOut) { - PINFCACHELINE CacheLine; + PINFCACHELINE CacheLine; - if (ContextIn == NULL || ContextOut == NULL || Key == NULL || *Key == 0) - return FALSE; + if ((ContextIn == NULL) || (ContextOut == NULL) || (Key == NULL) || (*Key == 0)) + return FALSE; - if (ContextIn->Inf == NULL || ContextIn->Section == NULL) - return FALSE; + if (ContextIn->Inf == NULL || ContextIn->Section == NULL) + return FALSE; - CacheLine = ((PINFCACHESECTION)(ContextIn->Section))->FirstLine; - while (CacheLine != NULL) + CacheLine = ((PINFCACHESECTION)(ContextIn->Section))->FirstLine; + while (CacheLine != NULL) { - if (CacheLine->Key != NULL && _stricmp (CacheLine->Key, Key) == 0) - { + if ((CacheLine->Key != NULL) && (_stricmp(CacheLine->Key, Key) == 0)) + { - if (ContextIn != ContextOut) - { - ContextOut->Inf = ContextIn->Inf; - ContextOut->Section = ContextIn->Section; - } - ContextOut->Line = (PVOID)CacheLine; + if (ContextIn != ContextOut) + { + ContextOut->Inf = ContextIn->Inf; + ContextOut->Section = ContextIn->Section; + } + ContextOut->Line = (PVOID)CacheLine; - return TRUE; - } + return TRUE; + } - CacheLine = CacheLine->Next; + CacheLine = CacheLine->Next; } - return FALSE; + return FALSE; } BOOLEAN -InfFindNextMatchLine (PINFCONTEXT ContextIn, - PCHAR Key, - PINFCONTEXT ContextOut) +InfFindNextMatchLine ( + PINFCONTEXT ContextIn, + PCHAR Key, + PINFCONTEXT ContextOut) { - PINFCACHELINE CacheLine; + PINFCACHELINE CacheLine; - if (ContextIn == NULL || ContextOut == NULL || Key == NULL || *Key == 0) - return FALSE; + if ((ContextIn == NULL) || (ContextOut == NULL) || (Key == NULL) || (*Key == 0)) + return FALSE; - if (ContextIn->Inf == NULL || ContextIn->Section == NULL || ContextIn->Line == NULL) - return FALSE; + if ((ContextIn->Inf == NULL) || (ContextIn->Section == NULL) || (ContextIn->Line == NULL)) + return FALSE; - CacheLine = (PINFCACHELINE)ContextIn->Line; - while (CacheLine != NULL) + CacheLine = (PINFCACHELINE)ContextIn->Line; + while (CacheLine != NULL) { - if (CacheLine->Key != NULL && _stricmp (CacheLine->Key, Key) == 0) - { + if ((CacheLine->Key != NULL) && (_stricmp(CacheLine->Key, Key) == 0)) + { - if (ContextIn != ContextOut) - { - ContextOut->Inf = ContextIn->Inf; - ContextOut->Section = ContextIn->Section; - } - ContextOut->Line = (PVOID)CacheLine; + if (ContextIn != ContextOut) + { + ContextOut->Inf = ContextIn->Inf; + ContextOut->Section = ContextIn->Section; + } + ContextOut->Line = (PVOID)CacheLine; - return TRUE; - } + return TRUE; + } - CacheLine = CacheLine->Next; + CacheLine = CacheLine->Next; } - return FALSE; + return FALSE; } LONG -InfGetLineCount(HINF InfHandle, - PCHAR Section) +InfGetLineCount( + HINF InfHandle, + PCHAR Section) { - PINFCACHE Cache; - PINFCACHESECTION CacheSection; + PINFCACHE Cache; + PINFCACHESECTION CacheSection; - if (InfHandle == NULL || Section == NULL) + if ((InfHandle == NULL) || (Section == NULL)) { // DPRINT("Invalid parameter\n"); - return -1; + return -1; } - Cache = (PINFCACHE)InfHandle; + Cache = (PINFCACHE)InfHandle; - /* Iterate through list of sections */ - CacheSection = Cache->FirstSection; - while (Section != NULL) + /* Iterate through list of sections */ + CacheSection = Cache->FirstSection; + while (Section != NULL) { // DPRINT("Comparing '%S' and '%S'\n", CacheSection->Name, Section); - /* Are the section names the same? */ - if (_stricmp(CacheSection->Name, Section) == 0) - { - return CacheSection->LineCount; - } + /* Are the section names the same? */ + if (_stricmp(CacheSection->Name, Section) == 0) + { + return CacheSection->LineCount; + } - /* Get the next section */ - CacheSection = CacheSection->Next; + /* Get the next section */ + CacheSection = CacheSection->Next; } // DPRINT("Section not found\n"); - return -1; + return -1; } @@ -1197,307 +1261,313 @@ InfGetLineCount(HINF InfHandle, LONG InfGetFieldCount(PINFCONTEXT Context) { - if (Context == NULL || Context->Line == NULL) - return 0; + if ((Context == NULL) || (Context->Line == NULL)) + return 0; - return ((PINFCACHELINE)Context->Line)->FieldCount; + return ((PINFCACHELINE)Context->Line)->FieldCount; } BOOLEAN -InfGetBinaryField (PINFCONTEXT Context, - ULONG FieldIndex, - PUCHAR ReturnBuffer, - ULONG ReturnBufferSize, - PULONG RequiredSize) +InfGetBinaryField ( + PINFCONTEXT Context, + ULONG FieldIndex, + PUCHAR ReturnBuffer, + ULONG ReturnBufferSize, + PULONG RequiredSize) { - PINFCACHELINE CacheLine; - PINFCACHEFIELD CacheField; - ULONG Index; - ULONG Size; - PUCHAR Ptr; + PINFCACHELINE CacheLine; + PINFCACHEFIELD CacheField; + ULONG Index; + ULONG Size; + PUCHAR Ptr; - if (Context == NULL || Context->Line == NULL || FieldIndex == 0) + if ((Context == NULL) || (Context->Line == NULL) || (FieldIndex == 0)) { // DPRINT("Invalid parameter\n"); - return FALSE; + return FALSE; } - if (RequiredSize != NULL) - *RequiredSize = 0; + if (RequiredSize != NULL) + *RequiredSize = 0; - CacheLine = (PINFCACHELINE)Context->Line; + CacheLine = (PINFCACHELINE)Context->Line; - if (FieldIndex > CacheLine->FieldCount) - return FALSE; + if (FieldIndex > CacheLine->FieldCount) + return FALSE; - CacheField = CacheLine->FirstField; - for (Index = 1; Index < FieldIndex; Index++) - CacheField = CacheField->Next; + CacheField = CacheLine->FirstField; + for (Index = 1; Index < FieldIndex; Index++) + CacheField = CacheField->Next; - Size = CacheLine->FieldCount - FieldIndex + 1; + Size = CacheLine->FieldCount - FieldIndex + 1; - if (RequiredSize != NULL) - *RequiredSize = Size; + if (RequiredSize != NULL) + *RequiredSize = Size; - if (ReturnBuffer != NULL) + if (ReturnBuffer != NULL) { - if (ReturnBufferSize < Size) - return FALSE; + if (ReturnBufferSize < Size) + return FALSE; - /* Copy binary data */ - Ptr = ReturnBuffer; - while (CacheField != NULL) - { - *Ptr = (UCHAR)atoi(CacheField->Data); //strtoul (CacheField->Data, NULL, 16); + /* Copy binary data */ + Ptr = ReturnBuffer; + while (CacheField != NULL) + { + *Ptr = (UCHAR)atoi(CacheField->Data); //strtoul(CacheField->Data, NULL, 16); - Ptr++; - CacheField = CacheField->Next; - } + Ptr++; + CacheField = CacheField->Next; + } } - return TRUE; + return TRUE; } BOOLEAN -InfGetIntField (PINFCONTEXT Context, - ULONG FieldIndex, - LONG *IntegerValue) +InfGetIntField ( + PINFCONTEXT Context, + ULONG FieldIndex, + PLONG IntegerValue) { - PINFCACHELINE CacheLine; - PINFCACHEFIELD CacheField; - ULONG Index; - PCHAR Ptr; + PINFCACHELINE CacheLine; + PINFCACHEFIELD CacheField; + ULONG Index; + PCHAR Ptr; - if (Context == NULL || Context->Line == NULL || IntegerValue == NULL) + if ((Context == NULL) || (Context->Line == NULL) || (IntegerValue == NULL)) { // DPRINT("Invalid parameter\n"); - return FALSE; + return FALSE; } - CacheLine = (PINFCACHELINE)Context->Line; + CacheLine = (PINFCACHELINE)Context->Line; - if (FieldIndex > CacheLine->FieldCount) + if (FieldIndex > CacheLine->FieldCount) { // DPRINT("Invalid parameter\n"); - return FALSE; + return FALSE; } - if (FieldIndex == 0) + if (FieldIndex == 0) { - Ptr = CacheLine->Key; + Ptr = CacheLine->Key; } - else + else { - CacheField = CacheLine->FirstField; - for (Index = 1; Index < FieldIndex; Index++) - CacheField = CacheField->Next; + CacheField = CacheLine->FirstField; + for (Index = 1; Index < FieldIndex; Index++) + CacheField = CacheField->Next; - Ptr = CacheField->Data; + Ptr = CacheField->Data; } - *IntegerValue = atoi (Ptr); //strtol (Ptr, NULL, 0); + *IntegerValue = atoi(Ptr); //strtol(Ptr, NULL, 0); - return TRUE; + return TRUE; } BOOLEAN -InfGetMultiSzField (PINFCONTEXT Context, - ULONG FieldIndex, - PCHAR ReturnBuffer, - ULONG ReturnBufferSize, - PULONG RequiredSize) +InfGetMultiSzField ( + PINFCONTEXT Context, + ULONG FieldIndex, + PCHAR ReturnBuffer, + ULONG ReturnBufferSize, + PULONG RequiredSize) { - PINFCACHELINE CacheLine; - PINFCACHEFIELD CacheField; - PINFCACHEFIELD FieldPtr; - ULONG Index; - ULONG Size; - PCHAR Ptr; + PINFCACHELINE CacheLine; + PINFCACHEFIELD CacheField; + PINFCACHEFIELD FieldPtr; + ULONG Index; + SIZE_T Size; + PCHAR Ptr; - if (Context == NULL || Context->Line == NULL || FieldIndex == 0) + if ((Context == NULL) || (Context->Line == NULL) || (FieldIndex == 0)) { // DPRINT("Invalid parameter\n"); - return FALSE; + return FALSE; } - if (RequiredSize != NULL) - *RequiredSize = 0; + if (RequiredSize != NULL) + *RequiredSize = 0; - CacheLine = (PINFCACHELINE)Context->Line; + CacheLine = (PINFCACHELINE)Context->Line; - if (FieldIndex > CacheLine->FieldCount) - return FALSE; + if (FieldIndex > CacheLine->FieldCount) + return FALSE; - CacheField = CacheLine->FirstField; - for (Index = 1; Index < FieldIndex; Index++) - CacheField = CacheField->Next; + CacheField = CacheLine->FirstField; + for (Index = 1; Index < FieldIndex; Index++) + CacheField = CacheField->Next; - /* Calculate the required buffer size */ - FieldPtr = CacheField; - Size = 0; - while (FieldPtr != NULL) + /* Calculate the required buffer size */ + FieldPtr = CacheField; + Size = 0; + while (FieldPtr != NULL) { - Size += (strlen (FieldPtr->Data) + 1); - FieldPtr = FieldPtr->Next; + Size += (strlen(FieldPtr->Data) + 1); + FieldPtr = FieldPtr->Next; } - Size++; + Size++; - if (RequiredSize != NULL) - *RequiredSize = Size; + if (RequiredSize != NULL) + *RequiredSize = (ULONG)Size; - if (ReturnBuffer != NULL) + if (ReturnBuffer != NULL) { - if (ReturnBufferSize < Size) - return FALSE; + if (ReturnBufferSize < Size) + return FALSE; - /* Copy multi-sz string */ - Ptr = ReturnBuffer; - FieldPtr = CacheField; - while (FieldPtr != NULL) - { - Size = strlen (FieldPtr->Data) + 1; + /* Copy multi-sz string */ + Ptr = ReturnBuffer; + FieldPtr = CacheField; + while (FieldPtr != NULL) + { + Size = strlen(FieldPtr->Data) + 1; - strcpy (Ptr, FieldPtr->Data); + strcpy(Ptr, FieldPtr->Data); - Ptr = Ptr + Size; - FieldPtr = FieldPtr->Next; - } - *Ptr = 0; + Ptr = Ptr + Size; + FieldPtr = FieldPtr->Next; + } + *Ptr = 0; } - return TRUE; + return TRUE; } BOOLEAN -InfGetStringField (PINFCONTEXT Context, - ULONG FieldIndex, - PCHAR ReturnBuffer, - ULONG ReturnBufferSize, - PULONG RequiredSize) +InfGetStringField ( + PINFCONTEXT Context, + ULONG FieldIndex, + PCHAR ReturnBuffer, + ULONG ReturnBufferSize, + PULONG RequiredSize) { - PINFCACHELINE CacheLine; - PINFCACHEFIELD CacheField; - ULONG Index; - PCHAR Ptr; - ULONG Size; + PINFCACHELINE CacheLine; + PINFCACHEFIELD CacheField; + ULONG Index; + PCHAR Ptr; + SIZE_T Size; - if (Context == NULL || Context->Line == NULL || FieldIndex == 0) + if ((Context == NULL) || (Context->Line == NULL) || (FieldIndex == 0)) { // DPRINT("Invalid parameter\n"); - return FALSE; + return FALSE; } - if (RequiredSize != NULL) - *RequiredSize = 0; + if (RequiredSize != NULL) + *RequiredSize = 0; - CacheLine = (PINFCACHELINE)Context->Line; + CacheLine = (PINFCACHELINE)Context->Line; - if (FieldIndex > CacheLine->FieldCount) - return FALSE; + if (FieldIndex > CacheLine->FieldCount) + return FALSE; - if (FieldIndex == 0) + if (FieldIndex == 0) { - Ptr = CacheLine->Key; + Ptr = CacheLine->Key; } - else + else { - CacheField = CacheLine->FirstField; - for (Index = 1; Index < FieldIndex; Index++) - CacheField = CacheField->Next; + CacheField = CacheLine->FirstField; + for (Index = 1; Index < FieldIndex; Index++) + CacheField = CacheField->Next; - Ptr = CacheField->Data; + Ptr = CacheField->Data; } - Size = strlen (Ptr) + 1; + Size = strlen(Ptr) + 1; - if (RequiredSize != NULL) - *RequiredSize = Size; + if (RequiredSize != NULL) + *RequiredSize = (ULONG)Size; - if (ReturnBuffer != NULL) + if (ReturnBuffer != NULL) { - if (ReturnBufferSize < Size) - return FALSE; + if (ReturnBufferSize < Size) + return FALSE; - strcpy (ReturnBuffer, Ptr); + strcpy(ReturnBuffer, Ptr); } - return TRUE; + return TRUE; } BOOLEAN -InfGetData (PINFCONTEXT Context, - PCHAR *Key, - PCHAR *Data) +InfGetData ( + PINFCONTEXT Context, + PCHAR *Key, + PCHAR *Data) { - PINFCACHELINE CacheKey; + PINFCACHELINE CacheKey; - if (Context == NULL || Context->Line == NULL || Data == NULL) + if ((Context == NULL) || (Context->Line == NULL) || (Data == NULL)) { // DPRINT("Invalid parameter\n"); - return FALSE; + return FALSE; } - CacheKey = (PINFCACHELINE)Context->Line; - if (Key != NULL) - *Key = CacheKey->Key; + CacheKey = (PINFCACHELINE)Context->Line; + if (Key != NULL) + *Key = CacheKey->Key; - if (Data != NULL) + if (Data != NULL) { - if (CacheKey->FirstField == NULL) - { - *Data = NULL; - } - else - { - *Data = CacheKey->FirstField->Data; - } + if (CacheKey->FirstField == NULL) + { + *Data = NULL; + } + else + { + *Data = CacheKey->FirstField->Data; + } } - return TRUE; + return TRUE; } BOOLEAN -InfGetDataField (PINFCONTEXT Context, - ULONG FieldIndex, - PCSTR *Data) +InfGetDataField ( + PINFCONTEXT Context, + ULONG FieldIndex, + PCSTR *Data) { - PINFCACHELINE CacheLine; - PINFCACHEFIELD CacheField; - ULONG Index; + PINFCACHELINE CacheLine; + PINFCACHEFIELD CacheField; + ULONG Index; - if (Context == NULL || Context->Line == NULL || Data == NULL) + if ((Context == NULL) || (Context->Line == NULL) || (Data == NULL)) { // DPRINT("Invalid parameter\n"); - return FALSE; + return FALSE; } - CacheLine = (PINFCACHELINE)Context->Line; + CacheLine = (PINFCACHELINE)Context->Line; - if (FieldIndex > CacheLine->FieldCount) - return FALSE; + if (FieldIndex > CacheLine->FieldCount) + return FALSE; - if (FieldIndex == 0) + if (FieldIndex == 0) { - *Data = CacheLine->Key; + *Data = CacheLine->Key; } - else + else { - CacheField = CacheLine->FirstField; - for (Index = 1; Index < FieldIndex; Index++) - CacheField = CacheField->Next; + CacheField = CacheLine->FirstField; + for (Index = 1; Index < FieldIndex; Index++) + CacheField = CacheField->Next; - *Data = CacheField->Data; + *Data = CacheField->Data; } - return TRUE; + return TRUE; } diff --git a/boot/freeldr/freeldr/inifile/inifile.c b/boot/freeldr/freeldr/inifile/inifile.c index 16a5b6e9ca2..7829bf38010 100644 --- a/boot/freeldr/freeldr/inifile/inifile.c +++ b/boot/freeldr/freeldr/inifile/inifile.c @@ -190,7 +190,7 @@ BOOLEAN IniAddSection(PCSTR SectionName, ULONG_PTR* SectionId) RtlZeroMemory(Section, sizeof(INI_SECTION)); // Allocate the section name buffer - Section->SectionName = MmHeapAlloc(strlen(SectionName)); + Section->SectionName = MmHeapAlloc(strlen(SectionName) + sizeof(CHAR)); if (!Section->SectionName) { MmHeapFree(Section); diff --git a/boot/freeldr/freeldr/mm/heap.c b/boot/freeldr/freeldr/mm/heap.c index 625754861f1..54c46d4b2e8 100644 --- a/boot/freeldr/freeldr/mm/heap.c +++ b/boot/freeldr/freeldr/mm/heap.c @@ -149,6 +149,32 @@ HeapDestroy( LoaderFirmwareTemporary); } +#ifdef FREELDR_HEAP_VERIFIER +VOID +HeapVerify( + PVOID HeapHandle) +{ + PHEAP Heap = HeapHandle; + PHEAP_BLOCK Block; + + /* Loop all heap chunks */ + for (Block = &Heap->Blocks; + Block->Size != 0; + Block = Block + 1 + Block->Size) + { + /* Continue, if its not free */ + if (Block->Tag != 0) + { + /* Verify size and redzones */ + ASSERT(*REDZONE_SIZE(Block) <= Block->Size * sizeof(HEAP_BLOCK)); + ASSERT(*REDZONE_LOW(Block) == REDZONE_MARK); + ASSERT(*REDZONE_HI(Block) == REDZONE_MARK); + continue; + } + } +} +#endif /* FREELDR_HEAP_VERIFIER */ + VOID HeapRelease( PVOID HeapHandle) @@ -296,6 +322,9 @@ HeapAllocate( ULONGLONG Time = __rdtsc(); #ifdef FREELDR_HEAP_VERIFIER + /* Verify the heap */ + HeapVerify(HeapHandle); + /* Add space for a size field and 2 redzones */ ByteSize += REDZONE_ALLOCATION; #endif @@ -408,6 +437,11 @@ HeapFree( TRACE("HeapFree(%p, %p)\n", HeapHandle, Pointer); ASSERT(Tag != 'dnE#'); +#ifdef FREELDR_HEAP_VERIFIER + /* Verify the heap */ + HeapVerify(HeapHandle); +#endif + /* Check if the block is really inside this heap */ if ((Pointer < (PVOID)(Heap + 1)) || (Pointer > (PVOID)((PUCHAR)Heap + Heap->MaximumSize))) diff --git a/boot/freeldr/freeldr/reactos/archwsup.c b/boot/freeldr/freeldr/reactos/archwsup.c index 31291d8ad60..4d4dfd7c022 100644 --- a/boot/freeldr/freeldr/reactos/archwsup.c +++ b/boot/freeldr/freeldr/reactos/archwsup.c @@ -14,18 +14,8 @@ /* GLOBALS ********************************************************************/ -extern CHAR reactos_arc_hardware_data[]; -SIZE_T FldrpHwHeapLocation; PCONFIGURATION_COMPONENT_DATA FldrArcHwTreeRoot; -BOOLEAN UseRealHeap = FALSE; - -VOID -NTAPI -FldrSetConfigurationData(IN PCONFIGURATION_COMPONENT_DATA ComponentData, - IN PCM_PARTIAL_RESOURCE_LIST ResourceList, - IN ULONG Size); - /* FUNCTIONS ******************************************************************/ PVOID @@ -34,26 +24,8 @@ FldrpHwHeapAlloc(IN SIZE_T Size) { PVOID Buffer; - if (UseRealHeap) - { - /* Allocate memory from generic bootloader heap */ - Buffer = MmHeapAlloc(Size); - } - else - { - /* Return a block of memory from the ARC Hardware Heap */ - Buffer = &reactos_arc_hardware_data[FldrpHwHeapLocation]; - - /* Increment the heap location */ - FldrpHwHeapLocation += Size; - if (FldrpHwHeapLocation > HW_MAX_ARC_HEAP_SIZE) Buffer = NULL; - } - - /* Clear it */ - if (Buffer) - RtlZeroMemory(Buffer, Size); - - /* Return the buffer */ + /* Allocate memory from generic bootloader heap */ + Buffer = MmHeapAlloc(Size); return Buffer; } @@ -65,10 +37,10 @@ FldrSetIdentifier(IN PCONFIGURATION_COMPONENT_DATA ComponentData, SIZE_T IdentifierLength; PCONFIGURATION_COMPONENT Component = &ComponentData->ComponentEntry; PCHAR Identifier; - + /* Allocate memory for the identifier */ IdentifierLength = strlen(IdentifierString) + 1; - Identifier = FldrpHwHeapAlloc(IdentifierLength); + Identifier = MmHeapAlloc(IdentifierLength); if (!Identifier) return; /* Copy the identifier */ @@ -84,11 +56,11 @@ NTAPI FldrCreateSystemKey(OUT PCONFIGURATION_COMPONENT_DATA *SystemNode) { PCONFIGURATION_COMPONENT Component; - + /* Allocate the root */ - FldrArcHwTreeRoot = FldrpHwHeapAlloc(sizeof(CONFIGURATION_COMPONENT_DATA)); + FldrArcHwTreeRoot = MmHeapAlloc(sizeof(CONFIGURATION_COMPONENT_DATA)); if (!FldrArcHwTreeRoot) return; - + /* Set it up */ Component = &FldrArcHwTreeRoot->ComponentEntry; Component->Class = SystemClass; @@ -101,7 +73,7 @@ FldrCreateSystemKey(OUT PCONFIGURATION_COMPONENT_DATA *SystemNode) Component->Revision = 0; Component->Key = 0; Component->AffinityMask = 0xFFFFFFFF; - + /* Return the node */ *SystemNode = FldrArcHwTreeRoot; } @@ -130,7 +102,7 @@ FldrLinkToParent(IN PCONFIGURATION_COMPONENT_DATA Parent, /* This is now the parent */ Parent = Sibling; } while ((Sibling = Sibling->Sibling)); - + /* Found the lowest sibling; mark us as its sibling too */ Parent->Sibling = Child; } @@ -153,16 +125,16 @@ FldrCreateComponentKey(IN PCONFIGURATION_COMPONENT_DATA SystemNode, PCONFIGURATION_COMPONENT Component; /* Allocate the node for this component */ - ComponentData = FldrpHwHeapAlloc(sizeof(CONFIGURATION_COMPONENT_DATA)); + ComponentData = MmHeapAlloc(sizeof(CONFIGURATION_COMPONENT_DATA)); if (!ComponentData) return; - + /* Now save our parent */ ComponentData->Parent = SystemNode; - + /* Link us to the parent */ if (SystemNode) FldrLinkToParent(SystemNode, ComponentData); - + /* Set us up */ Component = &ComponentData->ComponentEntry; Component->Class = Class; @@ -170,36 +142,19 @@ FldrCreateComponentKey(IN PCONFIGURATION_COMPONENT_DATA SystemNode, Component->Flags = Flags; Component->Key = Key; Component->AffinityMask = Affinity; - + /* Set identifier */ if (IdentifierString) FldrSetIdentifier(ComponentData, IdentifierString); - + /* Set configuration data */ if (ResourceList) - FldrSetConfigurationData(ComponentData, ResourceList, Size); - + { + ComponentData->ConfigurationData = ResourceList; + ComponentData->ComponentEntry.ConfigurationDataLength = Size; + } + /* Return the child */ - *ComponentKey = ComponentData; + *ComponentKey = ComponentData; } -VOID -NTAPI -FldrSetConfigurationData(IN PCONFIGURATION_COMPONENT_DATA ComponentData, - IN PCM_PARTIAL_RESOURCE_LIST ResourceList, - IN ULONG Size) -{ - PCONFIGURATION_COMPONENT Component = &ComponentData->ComponentEntry; - PVOID ConfigurationData; - - /* Allocate a buffer from the hardware heap */ - ConfigurationData = FldrpHwHeapAlloc(Size); - if (!ConfigurationData) return; - - /* Copy component information */ - RtlCopyMemory(ConfigurationData, ResourceList, Size); - - /* Set component information */ - ComponentData->ConfigurationData = ConfigurationData; - Component->ConfigurationDataLength = Size; -} diff --git a/boot/freeldr/freeldr/reactos/binhive.c b/boot/freeldr/freeldr/reactos/binhive.c index c671642e3a2..3dff51ff8c9 100644 --- a/boot/freeldr/freeldr/reactos/binhive.c +++ b/boot/freeldr/freeldr/reactos/binhive.c @@ -30,116 +30,122 @@ DBG_DEFAULT_CHANNEL(REGISTRY); /* FUNCTIONS ****************************************************************/ -static PVOID +static +PVOID NTAPI CmpAllocate (SIZE_T Size, BOOLEAN Paged, ULONG Tag) { - return MmHeapAlloc(Size); + return MmHeapAlloc(Size); } -static VOID +static +VOID NTAPI CmpFree (PVOID Ptr, IN ULONG Quota) { - MmHeapFree(Ptr); + MmHeapFree(Ptr); } -static BOOLEAN -RegImportValue (PHHIVE Hive, - PCM_KEY_VALUE ValueCell, - FRLDRHKEY Key) +static +BOOLEAN +RegImportValue ( + PHHIVE Hive, + PCM_KEY_VALUE ValueCell, + FRLDRHKEY Key) { - PVOID DataCell; - PWCHAR wName; - LONG Error; - ULONG DataLength; - ULONG i; + PVOID DataCell; + PWCHAR wName; + LONG Error; + ULONG DataLength; + ULONG i; - if (ValueCell->Signature != CM_KEY_VALUE_SIGNATURE) + if (ValueCell->Signature != CM_KEY_VALUE_SIGNATURE) { - ERR("Invalid key cell!\n"); - return FALSE; + ERR("Invalid key cell!\n"); + return FALSE; } - if (ValueCell->Flags & VALUE_COMP_NAME) + if (ValueCell->Flags & VALUE_COMP_NAME) { - wName = MmHeapAlloc ((ValueCell->NameLength + 1)*sizeof(WCHAR)); - for (i = 0; i < ValueCell->NameLength; i++) + wName = MmHeapAlloc ((ValueCell->NameLength + 1) * sizeof(WCHAR)); + for (i = 0; i < ValueCell->NameLength; i++) { - wName[i] = ((PCHAR)ValueCell->Name)[i]; + wName[i] = ((PCHAR)ValueCell->Name)[i]; } - wName[ValueCell->NameLength] = 0; + wName[ValueCell->NameLength] = 0; } - else + else { - wName = MmHeapAlloc (ValueCell->NameLength + sizeof(WCHAR)); - memcpy (wName, - ValueCell->Name, - ValueCell->NameLength); - wName[ValueCell->NameLength / sizeof(WCHAR)] = 0; + wName = MmHeapAlloc(ValueCell->NameLength + sizeof(WCHAR)); + memcpy(wName, ValueCell->Name, ValueCell->NameLength); + wName[ValueCell->NameLength / sizeof(WCHAR)] = 0; } - DataLength = ValueCell->DataLength & REG_DATA_SIZE_MASK; + DataLength = ValueCell->DataLength & REG_DATA_SIZE_MASK; - TRACE("ValueName: '%S'\n", wName); - TRACE("DataLength: %u\n", DataLength); + TRACE("ValueName: '%S'\n", wName); + TRACE("DataLength: %u\n", DataLength); - if (DataLength <= sizeof(HCELL_INDEX) && (ValueCell->DataLength & REG_DATA_IN_OFFSET)) + if (DataLength <= sizeof(HCELL_INDEX) && (ValueCell->DataLength & REG_DATA_IN_OFFSET)) { - Error = RegSetValue(Key, - wName, - ValueCell->Type, - (PCHAR)&ValueCell->Data, - DataLength); - if (Error != ERROR_SUCCESS) + Error = RegSetValue(Key, + wName, + ValueCell->Type, + (PCHAR)&ValueCell->Data, + DataLength); + if (Error != ERROR_SUCCESS) { ERR("RegSetValue() failed!\n"); - MmHeapFree (wName); + MmHeapFree(wName); return FALSE; } } - else + else { - DataCell = (PVOID)HvGetCell (Hive, ValueCell->Data); - TRACE("DataCell: %x\n", DataCell); + DataCell = (PVOID)HvGetCell(Hive, ValueCell->Data); + TRACE("DataCell: %x\n", DataCell); - Error = RegSetValue (Key, - wName, - ValueCell->Type, - DataCell, - DataLength); + Error = RegSetValue(Key, + wName, + ValueCell->Type, + DataCell, + DataLength); - if (Error != ERROR_SUCCESS) + if (Error != ERROR_SUCCESS) { - ERR("RegSetValue() failed!\n"); - MmHeapFree (wName); - return FALSE; + ERR("RegSetValue() failed!\n"); + MmHeapFree(wName); + return FALSE; } } - MmHeapFree (wName); + MmHeapFree(wName); - return TRUE; + return TRUE; } -static BOOLEAN -RegImportSubKey(PHHIVE Hive, - PCM_KEY_NODE KeyCell, - FRLDRHKEY ParentKey); +static +BOOLEAN +RegImportSubKey( + PHHIVE Hive, + PCM_KEY_NODE KeyCell, + FRLDRHKEY ParentKey); -static BOOLEAN -RegImportIndexSubKey(PHHIVE Hive, - PCM_KEY_INDEX IndexCell, - FRLDRHKEY ParentKey) +static +BOOLEAN +RegImportIndexSubKey( + PHHIVE Hive, + PCM_KEY_INDEX IndexCell, + FRLDRHKEY ParentKey) { ULONG i; TRACE("IndexCell: %x\n", IndexCell); /* Enumerate and add subkeys */ - if (IndexCell->Signature == CM_KEY_INDEX_ROOT || - IndexCell->Signature == CM_KEY_INDEX_LEAF) + if ((IndexCell->Signature == CM_KEY_INDEX_ROOT) || + (IndexCell->Signature == CM_KEY_INDEX_LEAF)) { for (i = 0; i < IndexCell->Count; i++) { @@ -148,8 +154,8 @@ RegImportIndexSubKey(PHHIVE Hive, return FALSE; } } - else if (IndexCell->Signature == CM_KEY_FAST_LEAF || - IndexCell->Signature == CM_KEY_HASH_LEAF) + else if ((IndexCell->Signature == CM_KEY_FAST_LEAF) || + (IndexCell->Signature == CM_KEY_HASH_LEAF)) { PCM_KEY_FAST_INDEX HashCell = (PCM_KEY_FAST_INDEX)IndexCell; for (i = 0; i < HashCell->Count; i++) @@ -168,10 +174,12 @@ RegImportIndexSubKey(PHHIVE Hive, } -static BOOLEAN -RegImportSubKey(PHHIVE Hive, - PCM_KEY_NODE KeyCell, - FRLDRHKEY ParentKey) +static +BOOLEAN +RegImportSubKey( + PHHIVE Hive, + PCM_KEY_NODE KeyCell, + FRLDRHKEY ParentKey) { PCM_KEY_INDEX IndexCell; PVALUE_LIST_CELL ValueListCell; @@ -181,7 +189,6 @@ RegImportSubKey(PHHIVE Hive, LONG Error; ULONG i; - TRACE("KeyCell: %x\n", KeyCell); TRACE("KeyCell->Signature: %x\n", KeyCell->Signature); if (KeyCell->Signature != CM_KEY_NODE_SIGNATURE) @@ -192,7 +199,7 @@ RegImportSubKey(PHHIVE Hive, if (KeyCell->Flags & KEY_COMP_NAME) { - wName = MmHeapAlloc ((KeyCell->NameLength + 1) * sizeof(WCHAR)); + wName = MmHeapAlloc((KeyCell->NameLength + 1) * sizeof(WCHAR)); for (i = 0; i < KeyCell->NameLength; i++) { wName[i] = ((PCHAR)KeyCell->Name)[i]; @@ -201,20 +208,16 @@ RegImportSubKey(PHHIVE Hive, } else { - wName = MmHeapAlloc (KeyCell->NameLength + sizeof(WCHAR)); - memcpy (wName, - KeyCell->Name, - KeyCell->NameLength); - wName[KeyCell->NameLength/sizeof(WCHAR)] = 0; + wName = MmHeapAlloc(KeyCell->NameLength + sizeof(WCHAR)); + memcpy(wName, KeyCell->Name, KeyCell->NameLength); + wName[KeyCell->NameLength / sizeof(WCHAR)] = 0; } TRACE("KeyName: '%S'\n", wName); /* Create new sub key */ - Error = RegCreateKey (ParentKey, - wName, - &SubKey); - MmHeapFree (wName); + Error = RegCreateKey(ParentKey, wName, &SubKey); + MmHeapFree(wName); if (Error != ERROR_SUCCESS) { ERR("RegCreateKey() failed!\n"); @@ -226,7 +229,7 @@ RegImportSubKey(PHHIVE Hive, /* Enumerate and add values */ if (KeyCell->ValueList.Count > 0) { - ValueListCell = (PVALUE_LIST_CELL) HvGetCell (Hive, KeyCell->ValueList.List); + ValueListCell = (PVALUE_LIST_CELL)HvGetCell(Hive, KeyCell->ValueList.List); TRACE("ValueListCell: %x\n", ValueListCell); for (i = 0; i < KeyCell->ValueList.Count; i++) @@ -256,86 +259,85 @@ RegImportSubKey(PHHIVE Hive, BOOLEAN -RegImportBinaryHive(PCHAR ChunkBase, - ULONG ChunkSize) +RegImportBinaryHive( + PCHAR ChunkBase, + ULONG ChunkSize) { - PCM_KEY_NODE KeyCell; - PCM_KEY_FAST_INDEX HashCell; - PCM_KEY_NODE SubKeyCell; - FRLDRHKEY SystemKey; - ULONG i; - LONG Error; - PCMHIVE CmHive; - PHHIVE Hive; - NTSTATUS Status; + PCM_KEY_NODE KeyCell; + PCM_KEY_FAST_INDEX HashCell; + PCM_KEY_NODE SubKeyCell; + FRLDRHKEY SystemKey; + ULONG i; + LONG Error; + PCMHIVE CmHive; + PHHIVE Hive; + NTSTATUS Status; - TRACE("RegImportBinaryHive(%x, %u) called\n",ChunkBase,ChunkSize); + TRACE("RegImportBinaryHive(%x, %u) called\n", ChunkBase, ChunkSize); - CmHive = CmpAllocate(sizeof(CMHIVE), TRUE, 0); - Status = HvInitialize (&CmHive->Hive, - HINIT_FLAT, - 0, - 0, - ChunkBase, - CmpAllocate, - CmpFree, - NULL, - NULL, - NULL, - NULL, - 1, - NULL); - if (!NT_SUCCESS(Status)) + CmHive = CmpAllocate(sizeof(CMHIVE), TRUE, 0); + Status = HvInitialize(&CmHive->Hive, + HINIT_FLAT, + 0, + 0, + ChunkBase, + CmpAllocate, + CmpFree, + NULL, + NULL, + NULL, + NULL, + 1, + NULL); + if (!NT_SUCCESS(Status)) { - CmpFree(CmHive, 0); - ERR("Invalid hive Signature!\n"); - return FALSE; + CmpFree(CmHive, 0); + ERR("Invalid hive Signature!\n"); + return FALSE; } - Hive = &CmHive->Hive; - KeyCell = (PCM_KEY_NODE)HvGetCell (Hive, Hive->BaseBlock->RootCell); - TRACE("KeyCell: %x\n", KeyCell); - TRACE("KeyCell->Signature: %x\n", KeyCell->Signature); - if (KeyCell->Signature != CM_KEY_NODE_SIGNATURE) + Hive = &CmHive->Hive; + KeyCell = (PCM_KEY_NODE)HvGetCell(Hive, Hive->BaseBlock->RootCell); + TRACE("KeyCell: %x\n", KeyCell); + TRACE("KeyCell->Signature: %x\n", KeyCell->Signature); + if (KeyCell->Signature != CM_KEY_NODE_SIGNATURE) { - ERR("Invalid key cell Signature!\n"); - return FALSE; + ERR("Invalid key cell Signature!\n"); + return FALSE; } - TRACE("Subkeys: %u\n", KeyCell->SubKeyCounts); - TRACE("Values: %u\n", KeyCell->ValueList.Count); + TRACE("Subkeys: %u\n", KeyCell->SubKeyCounts); + TRACE("Values: %u\n", KeyCell->ValueList.Count); - /* Open 'System' key */ - Error = RegOpenKey(NULL, - L"\\Registry\\Machine\\SYSTEM", - &SystemKey); - if (Error != ERROR_SUCCESS) + /* Open 'System' key */ + Error = RegOpenKey(NULL, L"\\Registry\\Machine\\SYSTEM", &SystemKey); + if (Error != ERROR_SUCCESS) { - ERR("Failed to open 'system' key!\n"); - return FALSE; + ERR("Failed to open 'system' key!\n"); + return FALSE; } - /* Enumerate and add subkeys */ - if (KeyCell->SubKeyCounts[Stable] > 0) + /* Enumerate and add subkeys */ + if (KeyCell->SubKeyCounts[Stable] > 0) { - HashCell = (PCM_KEY_FAST_INDEX)HvGetCell (Hive, KeyCell->SubKeyLists[Stable]); - TRACE("HashCell: %x\n", HashCell); - TRACE("SubKeyCounts: %x\n", KeyCell->SubKeyCounts[Stable]); + HashCell = (PCM_KEY_FAST_INDEX)HvGetCell(Hive, KeyCell->SubKeyLists[Stable]); + TRACE("HashCell: %x\n", HashCell); + TRACE("SubKeyCounts: %x\n", KeyCell->SubKeyCounts[Stable]); - for (i = 0; i < KeyCell->SubKeyCounts[Stable]; i++) + for (i = 0; i < KeyCell->SubKeyCounts[Stable]; i++) { - TRACE("Cell[%d]: %x\n", i, HashCell->List[i].Cell); + TRACE("Cell[%d]: %x\n", i, HashCell->List[i].Cell); - SubKeyCell = (PCM_KEY_NODE)HvGetCell (Hive, HashCell->List[i].Cell); + SubKeyCell = (PCM_KEY_NODE)HvGetCell(Hive, HashCell->List[i].Cell); - TRACE("SubKeyCell[%d]: %x\n", i, SubKeyCell); + TRACE("SubKeyCell[%d]: %x\n", i, SubKeyCell); - if (!RegImportSubKey(Hive, SubKeyCell, SystemKey)) - return FALSE; + if (!RegImportSubKey(Hive, SubKeyCell, SystemKey)) + return FALSE; } } - return TRUE; + return TRUE; } /* EOF */ diff --git a/boot/freeldr/freeldr/windows/peloader.c b/boot/freeldr/freeldr/windows/peloader.c index a26a53d86d0..90faea1f3b8 100644 --- a/boot/freeldr/freeldr/windows/peloader.c +++ b/boot/freeldr/freeldr/windows/peloader.c @@ -30,7 +30,8 @@ WinLdrpBindImportName(IN OUT PLIST_ENTRY ModuleListHead, IN PIMAGE_THUNK_DATA ThunkData, IN PIMAGE_EXPORT_DIRECTORY ExportDirectory, IN ULONG ExportSize, - IN BOOLEAN ProcessForwards); + IN BOOLEAN ProcessForwards, + IN PCSTR DirectoryPath); static BOOLEAN WinLdrpLoadAndScanReferencedDll(PLIST_ENTRY ModuleListHead, @@ -42,7 +43,8 @@ static BOOLEAN WinLdrpScanImportAddressTable(IN OUT PLIST_ENTRY ModuleListHead, IN PVOID DllBase, IN PVOID ImageBase, - IN PIMAGE_THUNK_DATA ThunkData); + IN PIMAGE_THUNK_DATA ThunkData, + IN PCSTR DirectoryPath); @@ -57,8 +59,7 @@ WinLdrCheckForLoadedDll(IN OUT PLIST_ENTRY ModuleListHead, PLDR_DATA_TABLE_ENTRY DataTableEntry; LIST_ENTRY *ModuleEntry; - TRACE("WinLdrCheckForLoadedDll: DllName %s, LoadedEntry: %X\n", - DllName, LoadedEntry); + TRACE("WinLdrCheckForLoadedDll: DllName %s\n", DllName); /* Just go through each entry in the LoadOrderList and compare loaded module's name with a given name */ @@ -70,9 +71,9 @@ WinLdrCheckForLoadedDll(IN OUT PLIST_ENTRY ModuleListHead, LDR_DATA_TABLE_ENTRY, InLoadOrderLinks); - TRACE("WinLdrCheckForLoadedDll: DTE %p, EP %p, base %p name '%ws'\n", + TRACE("WinLdrCheckForLoadedDll: DTE %p, EP %p, base %p name '%.*ws'\n", DataTableEntry, DataTableEntry->EntryPoint, DataTableEntry->DllBase, - VaToPa(DataTableEntry->BaseDllName.Buffer)); + DataTableEntry->BaseDllName.Length / 2, VaToPa(DataTableEntry->BaseDllName.Buffer)); /* Compare names */ if (WinLdrpCompareDllName(DllName, &DataTableEntry->BaseDllName)) @@ -152,7 +153,8 @@ WinLdrScanImportDescriptorTable(IN OUT PLIST_ENTRY ModuleListHead, ModuleListHead, DataTableEntry->DllBase, ScanDTE->DllBase, - (PIMAGE_THUNK_DATA)RVA(ScanDTE->DllBase, ImportTable->FirstThunk)); + (PIMAGE_THUNK_DATA)RVA(ScanDTE->DllBase, ImportTable->FirstThunk), + DirectoryPath); if (!Status) { @@ -241,8 +243,10 @@ WinLdrAllocateDataTableEntry(IN OUT PLIST_ENTRY ModuleListHead, /* Insert this DTE to a list in the LPB */ InsertTailList(ModuleListHead, &DataTableEntry->InLoadOrderLinks); - TRACE("Inserting DTE %p, name='%S' DllBase=%p \n", DataTableEntry, - DataTableEntry->BaseDllName.Buffer, DataTableEntry->DllBase); + TRACE("Inserting DTE %p, name='%.*S' DllBase=%p \n", DataTableEntry, + DataTableEntry->BaseDllName.Length / 2, + VaToPa(DataTableEntry->BaseDllName.Buffer), + DataTableEntry->DllBase); /* Save pointer to a newly allocated and initialized entry */ *NewEntry = DataTableEntry; @@ -293,7 +297,6 @@ WinLdrLoadImage(IN PCHAR FileName, /* Now read the MZ header to get the offset to the PE Header */ NtHeaders = RtlImageNtHeader(HeadersBuffer); - if (!NtHeaders) { //Print(L"Error - no NT header found in %s\n", FileName); @@ -501,7 +504,8 @@ WinLdrpBindImportName(IN OUT PLIST_ENTRY ModuleListHead, IN PIMAGE_THUNK_DATA ThunkData, IN PIMAGE_EXPORT_DIRECTORY ExportDirectory, IN ULONG ExportSize, - IN BOOLEAN ProcessForwards) + IN BOOLEAN ProcessForwards, + IN PCSTR DirectoryPath) { ULONG Ordinal; PULONG NameTable, FunctionTable; @@ -509,7 +513,8 @@ WinLdrpBindImportName(IN OUT PLIST_ENTRY ModuleListHead, LONG High, Low, Middle, Result; ULONG Hint; PIMAGE_IMPORT_BY_NAME ImportData; - PCHAR ExportName; + PCHAR ExportName, ForwarderName; + BOOLEAN Status; //TRACE("WinLdrpBindImportName(): DllBase 0x%X, ImageBase 0x%X, ThunkData 0x%X, ExportDirectory 0x%X, ExportSize %d, ProcessForwards 0x%X\n", // DllBase, ImageBase, ThunkData, ExportDirectory, ExportSize, ProcessForwards); @@ -646,28 +651,43 @@ WinLdrpBindImportName(IN OUT PLIST_ENTRY ModuleListHead, /* Save a pointer to the function */ ThunkData->u1.Function = (ULONG_PTR)RVA(DllBase, FunctionTable[Ordinal]); - /* Is it a forwarder? (function pointer isn't within the export directory) */ - if (((ULONG_PTR)VaToPa((PVOID)ThunkData->u1.Function) > (ULONG_PTR)ExportDirectory) && - ((ULONG_PTR)VaToPa((PVOID)ThunkData->u1.Function) < ((ULONG_PTR)ExportDirectory + ExportSize))) + /* Is it a forwarder? (function pointer is within the export directory) */ + ForwarderName = (PCHAR)VaToPa((PVOID)ThunkData->u1.Function); + if (((ULONG_PTR)ForwarderName > (ULONG_PTR)ExportDirectory) && + ((ULONG_PTR)ForwarderName < ((ULONG_PTR)ExportDirectory + ExportSize))) { PLDR_DATA_TABLE_ENTRY DataTableEntry; CHAR ForwardDllName[255]; PIMAGE_EXPORT_DIRECTORY RefExportDirectory; ULONG RefExportSize; + TRACE("WinLdrpBindImportName(): ForwarderName %s\n", ForwarderName); /* Save the name of the forward dll */ - RtlCopyMemory(ForwardDllName, (PCHAR)VaToPa((PVOID)ThunkData->u1.Function), sizeof(ForwardDllName)); + RtlCopyMemory(ForwardDllName, ForwarderName, sizeof(ForwardDllName)); - /* Strip out its extension */ - *strchr(ForwardDllName,'.') = '\0'; + /* Strip out the symbol name */ + *strrchr(ForwardDllName,'.') = '\0'; - TRACE("WinLdrpBindImportName(): ForwardDllName %s\n", ForwardDllName); + /* Check if the target image is already loaded */ if (!WinLdrCheckForLoadedDll(ModuleListHead, ForwardDllName, &DataTableEntry)) { - /* We can't continue if DLL couldn't be loaded, so bomb out with an error */ - //Print(L"Error loading DLL!\n"); - ERR("Error loading DLL!\n"); - return FALSE; + /* Check if the forward dll name has an extension */ + if (strchr(ForwardDllName, '.') == NULL) + { + /* Name does not have an extension, append '.dll' */ + strcat(ForwardDllName, ".dll"); + } + + /* Now let's try to load it! */ + Status = WinLdrpLoadAndScanReferencedDll(ModuleListHead, + DirectoryPath, + ForwardDllName, + &DataTableEntry); + if (!Status) + { + ERR("WinLdrpLoadAndScanReferencedDll() failed to load forwarder dll.\n"); + return Status; + } } /* Get pointer to the export directory of loaded DLL */ @@ -684,10 +704,9 @@ WinLdrpBindImportName(IN OUT PLIST_ENTRY ModuleListHead, IMAGE_THUNK_DATA RefThunkData; PIMAGE_IMPORT_BY_NAME ImportByName; PCHAR ImportName; - BOOLEAN Status; /* Get pointer to the import name */ - ImportName = strchr((PCHAR)VaToPa((PVOID)ThunkData->u1.Function), '.') + 1; + ImportName = strrchr(ForwarderName, '.') + 1; /* Create a IMAGE_IMPORT_BY_NAME structure, pointing to the local Buffer */ ImportByName = (PIMAGE_IMPORT_BY_NAME)Buffer; @@ -709,7 +728,8 @@ WinLdrpBindImportName(IN OUT PLIST_ENTRY ModuleListHead, &RefThunkData, RefExportDirectory, RefExportSize, - TRUE); + TRUE, + DirectoryPath); /* Fill out the ThunkData with data from RefThunkData */ ThunkData->u1 = RefThunkData.u1; @@ -747,7 +767,6 @@ WinLdrpLoadAndScanReferencedDll(PLIST_ENTRY ModuleListHead, /* Load the image */ Status = WinLdrLoadImage(FullDllName, LoaderBootDriver, &BasePA); - if (!Status) { ERR("WinLdrLoadImage() failed\n"); @@ -760,7 +779,6 @@ WinLdrpLoadAndScanReferencedDll(PLIST_ENTRY ModuleListHead, FullDllName, BasePA, DataTableEntry); - if (!Status) { ERR("WinLdrAllocateDataTableEntry() failed with Status=0x%X\n", Status); @@ -771,7 +789,6 @@ WinLdrpLoadAndScanReferencedDll(PLIST_ENTRY ModuleListHead, TRACE("WinLdrScanImportDescriptorTable() calling ourselves for %S\n", VaToPa((*DataTableEntry)->BaseDllName.Buffer)); Status = WinLdrScanImportDescriptorTable(ModuleListHead, DirectoryPath, *DataTableEntry); - if (!Status) { ERR("WinLdrScanImportDescriptorTable() failed with Status=0x%X\n", Status); @@ -785,7 +802,8 @@ static BOOLEAN WinLdrpScanImportAddressTable(IN OUT PLIST_ENTRY ModuleListHead, IN PVOID DllBase, IN PVOID ImageBase, - IN PIMAGE_THUNK_DATA ThunkData) + IN PIMAGE_THUNK_DATA ThunkData, + IN PCSTR DirectoryPath) { PIMAGE_EXPORT_DIRECTORY ExportDirectory = NULL; BOOLEAN Status; @@ -829,7 +847,8 @@ WinLdrpScanImportAddressTable(IN OUT PLIST_ENTRY ModuleListHead, ThunkData, ExportDirectory, ExportSize, - FALSE); + FALSE, + DirectoryPath); /* Move to the next entry */ ThunkData++; diff --git a/boot/freeldr/freeldr/windows/winldr.c b/boot/freeldr/freeldr/windows/winldr.c index 3da7eb082d2..4be74559783 100644 --- a/boot/freeldr/freeldr/windows/winldr.c +++ b/boot/freeldr/freeldr/windows/winldr.c @@ -30,7 +30,6 @@ DBG_DEFAULT_CHANNEL(WINDOWS); extern ULONG reactos_disk_count; extern ARC_DISK_SIGNATURE reactos_arc_disk_info[]; -extern BOOLEAN UseRealHeap; extern ULONG LoaderPagesSpanned; extern BOOLEAN AcpiPresent; @@ -582,7 +581,6 @@ LoadAndBootWindowsCommon( SystemRoot = strstr(BootPath, "\\"); /* Detect hardware */ - UseRealHeap = TRUE; LoaderBlock->ConfigurationRoot = MachHwDetect(); if (OperatingSystemVersion == 0) diff --git a/cmake/baseaddress.cmake b/cmake/baseaddress.cmake index e1e5dc4481e..e8061ea845b 100644 --- a/cmake/baseaddress.cmake +++ b/cmake/baseaddress.cmake @@ -2,6 +2,7 @@ set(baseaddress_ntdll 0x77f20000) set(baseaddress_kernel32 0x77da0000) set(baseaddress_msvcrt 0x77d10000) set(baseaddress_advapi32 0x77c60000) +set(baseaddress_msv1_0 0x77c40000) set(baseaddress_gdi32 0x77bf0000) set(baseaddress_user32 0x77a60000) set(baseaddress_dhcpcsvc 0x77a10000) diff --git a/cmake/gcc.cmake b/cmake/gcc.cmake index fc2cd520fd2..35ca75ad22b 100644 --- a/cmake/gcc.cmake +++ b/cmake/gcc.cmake @@ -11,6 +11,9 @@ endif() # Compiler Core add_compile_flags("-pipe -fms-extensions -fno-strict-aliasing") +if(GCC_VERSION VERSION_GREATER 4.7) + add_compile_flags("-mstackrealign") +endif() #bug #file(TO_NATIVE_PATH ${REACTOS_SOURCE_DIR} REACTOS_SOURCE_DIR_NATIVE) diff --git a/cmake/msvc.cmake b/cmake/msvc.cmake index b01267d3689..e62529c93fb 100644 --- a/cmake/msvc.cmake +++ b/cmake/msvc.cmake @@ -57,7 +57,7 @@ if(MSVC_IDE AND (CMAKE_VERSION MATCHES "ReactOS")) # for VS builds we'll only have en-US in resource files add_definitions(/DLANGUAGE_EN_US) else() - set(CMAKE_RC_COMPILE_OBJECT " ${I18N_DEFS} /fo ") + set(CMAKE_RC_COMPILE_OBJECT " /nologo ${I18N_DEFS} /fo ") set(CMAKE_ASM_COMPILE_OBJECT "cl /nologo /X /I${REACTOS_SOURCE_DIR}/include/asm /I${REACTOS_BINARY_DIR}/include/asm /D__ASM__ /D_USE_ML /EP /c > .tmp" " /nologo /Cp /Fo /c /Ta .tmp") diff --git a/dll/3rdparty/libjpeg/README b/dll/3rdparty/libjpeg/README index e923a320048..fc5ca5d458c 100644 --- a/dll/3rdparty/libjpeg/README +++ b/dll/3rdparty/libjpeg/README @@ -1,10 +1,10 @@ The Independent JPEG Group's JPEG software ========================================== -README for release 8b of 16-May-2010 -==================================== +README for release 9 of 13-Jan-2013 +=================================== -This distribution contains the eighth public release of the Independent JPEG +This distribution contains the ninth public release of the Independent JPEG Group's free JPEG software. You are welcome to redistribute this software and to use it for any purpose, subject to the conditions under LEGAL ISSUES, below. @@ -13,7 +13,8 @@ Bill Allombert, Jim Boucher, Lee Crocker, Bob Friesenhahn, Ben Jackson, Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers, and other members of the Independent JPEG Group. -IJG is not affiliated with the official ISO JPEG standards committee. +IJG is not affiliated with the ISO/IEC JTC1/SC29/WG1 standards committee +(also known as JPEG, together with ITU-T SG16). DOCUMENTATION ROADMAP @@ -114,7 +115,7 @@ with respect to this software, its quality, accuracy, merchantability, or fitness for a particular purpose. This software is provided "AS IS", and you, its user, assume the entire risk as to its quality and accuracy. -This software is copyright (C) 1991-2010, Thomas G. Lane, Guido Vollbeding. +This software is copyright (C) 1991-2013, Thomas G. Lane, Guido Vollbeding. All Rights Reserved except as specified below. Permission is hereby granted to use, copy, modify, and distribute this @@ -145,15 +146,6 @@ commercial products, provided that all warranty or liability claims are assumed by the product vendor. -ansi2knr.c is included in this distribution by permission of L. Peter Deutsch, -sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA. -ansi2knr.c is NOT covered by the above copyright and conditions, but instead -by the usual distribution terms of the Free Software Foundation; principally, -that you must include source code if you redistribute it. (See the file -ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part -of any program generated from the IJG code, this does not limit you more than -the foregoing paragraphs do. - The Unix configuration script "configure" was produced with GNU Autoconf. It is copyright by the Free Software Foundation but is freely distributable. The same holds for its supporting scripts (config.guess, config.sub, @@ -221,10 +213,16 @@ Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS 10918-1, ITU-T T.81. Part 2 is titled "Digital Compression and Coding of Continuous-tone Still Images, Part 2: Compliance testing" and has document numbers ISO/IEC IS 10918-2, ITU-T T.83. -IJG JPEG 8 introduces an implementation of the JPEG SmartScale extension -which is specified in a contributed document at ITU and ISO with title "ITU-T -JPEG-Plus Proposal for Extending ITU-T T.81 for Advanced Image Coding", April -2006, Geneva, Switzerland. The latest version of the document is Revision 3. +IJG JPEG 8 introduced an implementation of the JPEG SmartScale extension +which is specified in two documents: A contributed document at ITU and ISO +with title "ITU-T JPEG-Plus Proposal for Extending ITU-T T.81 for Advanced +Image Coding", April 2006, Geneva, Switzerland. The latest version of this +document is Revision 3. And a contributed document ISO/IEC JTC1/SC29/WG1 N +5799 with title "Evolution of JPEG", June/July 2011, Berlin, Germany. +IJG JPEG 9 introduces a reversible color transform for improved lossless +compression which is described in a contributed document ISO/IEC JTC1/SC29/ +WG1 N 6080 with title "JPEG 9 Lossless Coding", June/July 2012, Paris, +France. The JPEG standard does not specify all details of an interchangeable file format. For the omitted details we follow the "JFIF" conventions, revision @@ -254,8 +252,8 @@ ARCHIVE LOCATIONS The "official" archive site for this software is www.ijg.org. The most recent released version can always be found there in directory "files". This particular version will be archived as -http://www.ijg.org/files/jpegsrc.v8b.tar.gz, and in Windows-compatible -"zip" archive format as http://www.ijg.org/files/jpegsr8b.zip. +http://www.ijg.org/files/jpegsrc.v9.tar.gz, and in Windows-compatible +"zip" archive format as http://www.ijg.org/files/jpegsr9.zip. The JPEG FAQ (Frequently Asked Questions) article is a source of some general information about JPEG. @@ -281,12 +279,16 @@ ITU JPEG (Study Group 16) meeting in Geneva, Switzerland. Thank to Thomas Wiegand and Gary Sullivan for inviting me to the Joint Video Team (MPEG & ITU) meeting in Geneva, Switzerland. +Thank to Thomas Richter and Daniel Lee for inviting me to the +ISO/IEC JTC1/SC29/WG1 (also known as JPEG, together with ITU-T SG16) +meeting in Berlin, Germany. + Thank to John Korejwa and Massimo Ballerini for inviting me to fruitful consultations in Boston, MA and Milan, Italy. Thank to Hendrik Elstner, Roland Fassauer, Simone Zuck, Guenther -Maier-Gerber, Walter Stoeber, and Fred Schmitz for corresponding -business development. +Maier-Gerber, Walter Stoeber, Fred Schmitz, and Norbert Braunagel +for corresponding business development. Thank to Nico Zschach and Dirk Stelling of the technical support team at the Digital Images company in Halle for providing me with extra @@ -304,23 +306,45 @@ design and development of this singular software package. FILE FORMAT WARS ================ -The ISO JPEG standards committee actually promotes different formats like -"JPEG 2000" or "JPEG XR" which are incompatible with original DCT-based -JPEG and which are based on faulty technologies. IJG therefore does not -and will not support such momentary mistakes (see REFERENCES). -We have little or no sympathy for the promotion of these formats. Indeed, -one of the original reasons for developing this free software was to help -force convergence on common, interoperable format standards for JPEG files. +The ISO/IEC JTC1/SC29/WG1 standards committee (also known as JPEG, together +with ITU-T SG16) currently promotes different formats containing the name +"JPEG" which is misleading because these formats are incompatible with +original DCT-based JPEG and are based on faulty technologies. +IJG therefore does not and will not support such momentary mistakes +(see REFERENCES). +There exist also distributions under the name "OpenJPEG" promoting such +kind of formats which is misleading because they don't support original +JPEG images. +We have no sympathy for the promotion of inferior formats. Indeed, one of +the original reasons for developing this free software was to help force +convergence on common, interoperable format standards for JPEG files. Don't use an incompatible file format! (In any case, our decoder will remain capable of reading existing JPEG image files indefinitely.) +Furthermore, the ISO committee pretends to be "responsible for the popular +JPEG" in their public reports which is not true because they don't respond to +actual requirements for the maintenance of the original JPEG specification. + +There are currently different distributions in circulation containing the +name "libjpeg" which is misleading because they don't have the features and +are incompatible with formats supported by actual IJG libjpeg distributions. +One of those fakes is released by members of the ISO committee and just uses +the name of libjpeg for misdirection of people, similar to the abuse of the +name JPEG as described above, while having nothing in common with actual IJG +libjpeg distributions. +The other one claims to be a "derivative" or "fork" of the original libjpeg +and violates the license conditions as described under LEGAL ISSUES above. +We have no sympathy for the release of misleading and illegal distributions +derived from obsolete code bases. +Don't use an obsolete code base! + TO DO ===== -Version 8 is the first release of a new generation JPEG standard +Version 9 is the second release of a new generation JPEG standard to overcome the limitations of the original JPEG specification. More features are being prepared for coming releases... -Please send bug reports, offers of help, etc. to jpeg-info@uc.ag. +Please send bug reports, offers of help, etc. to jpeg-info@jpegclub.org. diff --git a/dll/3rdparty/libjpeg/change.log b/dll/3rdparty/libjpeg/change.log index 94865b3f9ce..a1d94ff47ed 100644 --- a/dll/3rdparty/libjpeg/change.log +++ b/dll/3rdparty/libjpeg/change.log @@ -1,6 +1,62 @@ CHANGE LOG for Independent JPEG Group's JPEG software +Version 9 13-Jan-2013 +---------------------- + +Add cjpeg -rgb1 option to create an RGB JPEG file, and insert +a simple reversible color transform into the processing which +significantly improves the compression. +The recommended command for lossless coding of RGB images is now +cjpeg -rgb1 -block 1 -arithmetic. +As said, this option improves the compression significantly, but +the files are not compatible with JPEG decoders prior to IJG v9 +due to the included color transform. +The used color transform and marker signaling is compatible with +other JPEG standards (e.g., JPEG-LS part 2). + +Remove the automatic de-ANSI-fication support (Automake 1.12). +Thank also to Nitin A Kamble for suggestion. + +Add remark for jpeg_mem_dest() in jdatadst.c. +Thank to Elie-Gregoire Khoury for the hint. + +Support files with invalid component identifiers (created +by Adobe PDF). Thank to Robin Watts for the suggestion. + +Adapt full buffer case in jcmainct.c for use with scaled DCT. +Thank to Sergii Biloshytskyi for the suggestion. + +Add type identifier for declaration of noreturn functions. +Thank to Brett L. Moore for the suggestion. + +Correct argument type in format string, avoid compiler warnings. +Thank to Vincent Torri for hint. + +Add missing #include directives in configuration checks, avoid +configuration errors. Thank to John Spencer for the hint. + + +Version 8d 15-Jan-2012 +----------------------- + +Add cjpeg -rgb option to create RGB JPEG files. +Using this switch suppresses the conversion from RGB +colorspace input to the default YCbCr JPEG colorspace. +This feature allows true lossless JPEG coding of RGB color images. +The recommended command for this purpose is currently +cjpeg -rgb -block 1 -arithmetic. +SmartScale capable decoder (introduced with IJG JPEG 8) required. +Thank to Michael Koch for the initial suggestion. + +Add option to disable the region adjustment in the transupp crop code. +Thank to Jeffrey Friedl for the suggestion. + +Thank to Richard Jones and Edd Dawson for various minor corrections. + +Thank to Akim Demaille for configure.ac cleanup. + + Version 8c 16-Jan-2011 ----------------------- diff --git a/dll/3rdparty/libjpeg/cjpeg.c b/dll/3rdparty/libjpeg/cjpeg.c index 40d25215d1c..d05cdd0a941 100644 --- a/dll/3rdparty/libjpeg/cjpeg.c +++ b/dll/3rdparty/libjpeg/cjpeg.c @@ -2,7 +2,7 @@ * cjpeg.c * * Copyright (C) 1991-1998, Thomas G. Lane. - * Modified 2003-2010 by Guido Vollbeding. + * Modified 2003-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -152,6 +152,7 @@ usage (void) fprintf(stderr, "Switches (names may be abbreviated):\n"); fprintf(stderr, " -quality N[,...] Compression quality (0..100; 5-95 is useful range)\n"); fprintf(stderr, " -grayscale Create monochrome JPEG file\n"); + fprintf(stderr, " -rgb Create RGB JPEG file\n"); #ifdef ENTROPY_OPT_SUPPORTED fprintf(stderr, " -optimize Optimize Huffman table (smaller file, but slow compression)\n"); #endif @@ -165,9 +166,15 @@ usage (void) fprintf(stderr, " -targa Input file is Targa format (usually not needed)\n"); #endif fprintf(stderr, "Switches for advanced users:\n"); +#ifdef C_ARITH_CODING_SUPPORTED + fprintf(stderr, " -arithmetic Use arithmetic coding\n"); +#endif #ifdef DCT_SCALING_SUPPORTED fprintf(stderr, " -block N DCT block size (1..16; default is 8)\n"); #endif +#if JPEG_LIB_VERSION_MAJOR >= 9 + fprintf(stderr, " -rgb1 Create RGB JPEG file with reversible color transform\n"); +#endif #ifdef DCT_ISLOW_SUPPORTED fprintf(stderr, " -dct int Use integer DCT method%s\n", (JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : "")); @@ -189,9 +196,6 @@ usage (void) fprintf(stderr, " -outfile name Specify name for output file\n"); fprintf(stderr, " -verbose or -debug Emit debug output\n"); fprintf(stderr, "Switches for wizards:\n"); -#ifdef C_ARITH_CODING_SUPPORTED - fprintf(stderr, " -arithmetic Use arithmetic coding\n"); -#endif fprintf(stderr, " -baseline Force baseline quantization tables\n"); fprintf(stderr, " -qtables file Use quantization tables given in file\n"); fprintf(stderr, " -qslots N[,...] Set component quantization tables\n"); @@ -263,9 +267,8 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv, } else if (keymatch(arg, "block", 2)) { /* Set DCT block size. */ -#if defined(DCT_SCALING_SUPPORTED) && defined(JPEG_LIB_VERSION_MAJOR) && \ - (JPEG_LIB_VERSION_MAJOR > 8 || (JPEG_LIB_VERSION_MAJOR == 8 && \ - defined(JPEG_LIB_VERSION_MINOR) && JPEG_LIB_VERSION_MINOR >= 3)) +#if defined DCT_SCALING_SUPPORTED && JPEG_LIB_VERSION_MAJOR >= 8 && \ + (JPEG_LIB_VERSION_MAJOR > 8 || JPEG_LIB_VERSION_MINOR >= 3) int val; if (++argn >= argc) /* advance to next argument */ @@ -310,6 +313,16 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv, /* Force a monochrome JPEG file to be generated. */ jpeg_set_colorspace(cinfo, JCS_GRAYSCALE); + } else if (keymatch(arg, "rgb", 3) || keymatch(arg, "rgb1", 4)) { + /* Force an RGB JPEG file to be generated. */ +#if JPEG_LIB_VERSION_MAJOR >= 9 + /* Note: Entropy table assignment in jpeg_set_colorspace depends + * on color_transform. + */ + cinfo->color_transform = arg[3] ? JCT_SUBTRACT_GREEN : JCT_NONE; +#endif + jpeg_set_colorspace(cinfo, JCS_RGB); + } else if (keymatch(arg, "maxmemory", 3)) { /* Maximum memory in Kb (or Mb with 'm'). */ long lval; @@ -324,7 +337,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv, cinfo->mem->max_memory_to_use = lval * 1000L; } else if (keymatch(arg, "nosmooth", 3)) { - /* Suppress fancy downsampling */ + /* Suppress fancy downsampling. */ cinfo->do_fancy_downsampling = FALSE; } else if (keymatch(arg, "optimize", 1) || keymatch(arg, "optimise", 1)) { @@ -410,7 +423,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv, /* Scale the image by a fraction M/N. */ if (++argn >= argc) /* advance to next argument */ usage(); - if (sscanf(argv[argn], "%d/%d", + if (sscanf(argv[argn], "%u/%u", &cinfo->scale_num, &cinfo->scale_denom) != 2) usage(); diff --git a/dll/3rdparty/libjpeg/djpeg.c b/dll/3rdparty/libjpeg/djpeg.c index bc544dc1017..be7f2690ed4 100644 --- a/dll/3rdparty/libjpeg/djpeg.c +++ b/dll/3rdparty/libjpeg/djpeg.c @@ -2,7 +2,7 @@ * djpeg.c * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 2009 by Guido Vollbeding. + * Modified 2009-2013 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -298,7 +298,7 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv, cinfo->mem->max_memory_to_use = lval * 1000L; } else if (keymatch(arg, "nosmooth", 3)) { - /* Suppress fancy upsampling */ + /* Suppress fancy upsampling. */ cinfo->do_fancy_upsampling = FALSE; } else if (keymatch(arg, "onepass", 3)) { @@ -327,7 +327,7 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv, /* Scale the output image by a fraction M/N. */ if (++argn >= argc) /* advance to next argument */ usage(); - if (sscanf(argv[argn], "%d/%d", + if (sscanf(argv[argn], "%u/%u", &cinfo->scale_num, &cinfo->scale_denom) < 1) usage(); diff --git a/dll/3rdparty/libjpeg/jaricom.c b/dll/3rdparty/libjpeg/jaricom.c index f43e2ea7fac..690068861fa 100644 --- a/dll/3rdparty/libjpeg/jaricom.c +++ b/dll/3rdparty/libjpeg/jaricom.c @@ -1,16 +1,16 @@ /* * jaricom.c * - * Developed 1997-2009 by Guido Vollbeding. + * Developed 1997-2011 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains probability estimation tables for common use in * arithmetic entropy encoding and decoding routines. * - * This data represents Table D.2 in the JPEG spec (ISO/IEC IS 10918-1 - * and CCITT Recommendation ITU-T T.81) and Table 24 in the JBIG spec - * (ISO/IEC IS 11544 and CCITT Recommendation ITU-T T.82). + * This data represents Table D.3 in the JPEG spec (D.2 in the draft), + * ISO/IEC IS 10918-1 and CCITT Recommendation ITU-T T.81, and Table 24 + * in the JBIG spec, ISO/IEC IS 11544 and CCITT Recommendation ITU-T T.82. */ #define JPEG_INTERNALS @@ -147,7 +147,7 @@ const INT32 jpeg_aritab[113+1] = { V( 112, 0x59eb, 112, 111, 1 ), /* * This last entry is used for fixed probability estimate of 0.5 - * as recommended in Section 10.3 Table 5 of ITU-T Rec. T.851. + * as suggested in Section 10.3 Table 5 of ITU-T Rec. T.851. */ V( 113, 0x5a1d, 113, 113, 0 ) }; diff --git a/dll/3rdparty/libjpeg/jcarith.c b/dll/3rdparty/libjpeg/jcarith.c index 0b7ea55d404..a7f9ff7acca 100644 --- a/dll/3rdparty/libjpeg/jcarith.c +++ b/dll/3rdparty/libjpeg/jcarith.c @@ -1,7 +1,7 @@ /* * jcarith.c * - * Developed 1997-2009 by Guido Vollbeding. + * Developed 1997-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -223,7 +223,7 @@ arith_encode (j_compress_ptr cinfo, unsigned char *st, int val) register INT32 qe, temp; register int sv; - /* Fetch values from our compact representation of Table D.2: + /* Fetch values from our compact representation of Table D.3(D.2): * Qe values and probability estimation state machine */ sv = *st; @@ -479,7 +479,8 @@ encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) /* Sections F.1.4.2 & F.1.4.4.2: Encoding of AC coefficients */ /* Establish EOB (end-of-block) index */ - for (ke = cinfo->Se; ke > 0; ke--) + ke = cinfo->Se; + do { /* We must apply the point transform by Al. For AC coefficients this * is an integer division with rounding towards 0. To do this portably * in C, we shift after obtaining the absolute value. @@ -490,13 +491,14 @@ encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) v = -v; if (v >>= cinfo->Al) break; } + } while (--ke); /* Figure F.5: Encode_AC_Coefficients */ - for (k = cinfo->Ss; k <= ke; k++) { - st = entropy->ac_stats[tbl] + 3 * (k - 1); + for (k = cinfo->Ss - 1; k < ke;) { + st = entropy->ac_stats[tbl] + 3 * k; arith_encode(cinfo, st, 0); /* EOB decision */ for (;;) { - if ((v = (*block)[natural_order[k]]) >= 0) { + if ((v = (*block)[natural_order[++k]]) >= 0) { if (v >>= cinfo->Al) { arith_encode(cinfo, st + 1, 1); arith_encode(cinfo, entropy->fixed_bin, 0); @@ -510,7 +512,8 @@ encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) break; } } - arith_encode(cinfo, st + 1, 0); st += 3; k++; + arith_encode(cinfo, st + 1, 0); + st += 3; } st += 2; /* Figure F.8: Encoding the magnitude category of v */ @@ -537,9 +540,9 @@ encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data) while (m >>= 1) arith_encode(cinfo, st, (m & v) ? 1 : 0); } - /* Encode EOB decision only if k <= cinfo->Se */ - if (k <= cinfo->Se) { - st = entropy->ac_stats[tbl] + 3 * (k - 1); + /* Encode EOB decision only if k < cinfo->Se */ + if (k < cinfo->Se) { + st = entropy->ac_stats[tbl] + 3 * k; arith_encode(cinfo, st, 1); } @@ -616,7 +619,8 @@ encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) /* Section G.1.3.3: Encoding of AC coefficients */ /* Establish EOB (end-of-block) index */ - for (ke = cinfo->Se; ke > 0; ke--) + ke = cinfo->Se; + do { /* We must apply the point transform by Al. For AC coefficients this * is an integer division with rounding towards 0. To do this portably * in C, we shift after obtaining the absolute value. @@ -627,6 +631,7 @@ encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) v = -v; if (v >>= cinfo->Al) break; } + } while (--ke); /* Establish EOBx (previous stage end-of-block) index */ for (kex = ke; kex > 0; kex--) @@ -638,12 +643,12 @@ encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) } /* Figure G.10: Encode_AC_Coefficients_SA */ - for (k = cinfo->Ss; k <= ke; k++) { - st = entropy->ac_stats[tbl] + 3 * (k - 1); - if (k > kex) + for (k = cinfo->Ss - 1; k < ke;) { + st = entropy->ac_stats[tbl] + 3 * k; + if (k >= kex) arith_encode(cinfo, st, 0); /* EOB decision */ for (;;) { - if ((v = (*block)[natural_order[k]]) >= 0) { + if ((v = (*block)[natural_order[++k]]) >= 0) { if (v >>= cinfo->Al) { if (v >> 1) /* previously nonzero coef */ arith_encode(cinfo, st + 2, (v & 1)); @@ -665,12 +670,13 @@ encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data) break; } } - arith_encode(cinfo, st + 1, 0); st += 3; k++; + arith_encode(cinfo, st + 1, 0); + st += 3; } } - /* Encode EOB decision only if k <= cinfo->Se */ - if (k <= cinfo->Se) { - st = entropy->ac_stats[tbl] + 3 * (k - 1); + /* Encode EOB decision only if k < cinfo->Se */ + if (k < cinfo->Se) { + st = entropy->ac_stats[tbl] + 3 * k; arith_encode(cinfo, st, 1); } @@ -765,18 +771,21 @@ encode_mcu (j_compress_ptr cinfo, JBLOCKROW *MCU_data) /* Sections F.1.4.2 & F.1.4.4.2: Encoding of AC coefficients */ + if ((ke = cinfo->lim_Se) == 0) continue; tbl = compptr->ac_tbl_no; /* Establish EOB (end-of-block) index */ - for (ke = cinfo->lim_Se; ke > 0; ke--) + do { if ((*block)[natural_order[ke]]) break; + } while (--ke); /* Figure F.5: Encode_AC_Coefficients */ - for (k = 1; k <= ke; k++) { - st = entropy->ac_stats[tbl] + 3 * (k - 1); + for (k = 0; k < ke;) { + st = entropy->ac_stats[tbl] + 3 * k; arith_encode(cinfo, st, 0); /* EOB decision */ - while ((v = (*block)[natural_order[k]]) == 0) { - arith_encode(cinfo, st + 1, 0); st += 3; k++; + while ((v = (*block)[natural_order[++k]]) == 0) { + arith_encode(cinfo, st + 1, 0); + st += 3; } arith_encode(cinfo, st + 1, 1); /* Figure F.6: Encoding nonzero value v */ @@ -812,9 +821,9 @@ encode_mcu (j_compress_ptr cinfo, JBLOCKROW *MCU_data) while (m >>= 1) arith_encode(cinfo, st, (m & v) ? 1 : 0); } - /* Encode EOB decision only if k <= cinfo->lim_Se */ - if (k <= cinfo->lim_Se) { - st = entropy->ac_stats[tbl] + 3 * (k - 1); + /* Encode EOB decision only if k < cinfo->lim_Se */ + if (k < cinfo->lim_Se) { + st = entropy->ac_stats[tbl] + 3 * k; arith_encode(cinfo, st, 1); } } @@ -919,7 +928,7 @@ jinit_arith_encoder (j_compress_ptr cinfo) entropy = (arith_entropy_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(arith_entropy_encoder)); - cinfo->entropy = (struct jpeg_entropy_encoder *) entropy; + cinfo->entropy = &entropy->pub; entropy->pub.start_pass = start_pass; entropy->pub.finish_pass = finish_pass; diff --git a/dll/3rdparty/libjpeg/jccoefct.c b/dll/3rdparty/libjpeg/jccoefct.c index d775313b86f..924a703dda2 100644 --- a/dll/3rdparty/libjpeg/jccoefct.c +++ b/dll/3rdparty/libjpeg/jccoefct.c @@ -2,6 +2,7 @@ * jccoefct.c * * Copyright (C) 1994-1997, Thomas G. Lane. + * Modified 2003-2011 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -183,16 +184,16 @@ compress_data (j_compress_ptr cinfo, JSAMPIMAGE input_buf) ypos, xpos, (JDIMENSION) blockcnt); if (blockcnt < compptr->MCU_width) { /* Create some dummy blocks at the right edge of the image. */ - jzero_far((void FAR *) coef->MCU_buffer[blkn + blockcnt], - (compptr->MCU_width - blockcnt) * SIZEOF(JBLOCK)); + FMEMZERO((void FAR *) coef->MCU_buffer[blkn + blockcnt], + (compptr->MCU_width - blockcnt) * SIZEOF(JBLOCK)); for (bi = blockcnt; bi < compptr->MCU_width; bi++) { coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn+bi-1][0][0]; } } } else { /* Create a row of dummy blocks at the bottom of the image. */ - jzero_far((void FAR *) coef->MCU_buffer[blkn], - compptr->MCU_width * SIZEOF(JBLOCK)); + FMEMZERO((void FAR *) coef->MCU_buffer[blkn], + compptr->MCU_width * SIZEOF(JBLOCK)); for (bi = 0; bi < compptr->MCU_width; bi++) { coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn-1][0][0]; } @@ -290,7 +291,7 @@ compress_first_pass (j_compress_ptr cinfo, JSAMPIMAGE input_buf) if (ndummy > 0) { /* Create dummy blocks at the right edge of the image. */ thisblockrow += blocks_across; /* => first dummy block */ - jzero_far((void FAR *) thisblockrow, ndummy * SIZEOF(JBLOCK)); + FMEMZERO((void FAR *) thisblockrow, ndummy * SIZEOF(JBLOCK)); lastDC = thisblockrow[-1][0]; for (bi = 0; bi < ndummy; bi++) { thisblockrow[bi][0] = lastDC; @@ -309,8 +310,8 @@ compress_first_pass (j_compress_ptr cinfo, JSAMPIMAGE input_buf) block_row++) { thisblockrow = buffer[block_row]; lastblockrow = buffer[block_row-1]; - jzero_far((void FAR *) thisblockrow, - (size_t) (blocks_across * SIZEOF(JBLOCK))); + FMEMZERO((void FAR *) thisblockrow, + (size_t) (blocks_across * SIZEOF(JBLOCK))); for (MCUindex = 0; MCUindex < MCUs_across; MCUindex++) { lastDC = lastblockrow[h_samp_factor-1][0]; for (bi = 0; bi < h_samp_factor; bi++) { diff --git a/dll/3rdparty/libjpeg/jccolor.c b/dll/3rdparty/libjpeg/jccolor.c index 0a8a4b5d13c..81d74efb6e2 100644 --- a/dll/3rdparty/libjpeg/jccolor.c +++ b/dll/3rdparty/libjpeg/jccolor.c @@ -2,6 +2,7 @@ * jccolor.c * * Copyright (C) 1991-1996, Thomas G. Lane. + * Modified 2011-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -132,8 +133,8 @@ rgb_ycc_convert (j_compress_ptr cinfo, JDIMENSION output_row, int num_rows) { my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - register int r, g, b; register INT32 * ctab = cconvert->rgb_ycc_tab; + register int r, g, b; register JSAMPROW inptr; register JSAMPROW outptr0, outptr1, outptr2; register JDIMENSION col; @@ -149,7 +150,6 @@ rgb_ycc_convert (j_compress_ptr cinfo, r = GETJSAMPLE(inptr[RGB_RED]); g = GETJSAMPLE(inptr[RGB_GREEN]); b = GETJSAMPLE(inptr[RGB_BLUE]); - inptr += RGB_PIXELSIZE; /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations * must be too; we do not need an explicit range-limiting operation. * Hence the value being shifted is never negative, and we don't @@ -167,6 +167,7 @@ rgb_ycc_convert (j_compress_ptr cinfo, outptr2[col] = (JSAMPLE) ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF]) >> SCALEBITS); + inptr += RGB_PIXELSIZE; } } } @@ -188,8 +189,8 @@ rgb_gray_convert (j_compress_ptr cinfo, JDIMENSION output_row, int num_rows) { my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - register int r, g, b; register INT32 * ctab = cconvert->rgb_ycc_tab; + register int r, g, b; register JSAMPROW inptr; register JSAMPROW outptr; register JDIMENSION col; @@ -197,17 +198,16 @@ rgb_gray_convert (j_compress_ptr cinfo, while (--num_rows >= 0) { inptr = *input_buf++; - outptr = output_buf[0][output_row]; - output_row++; + outptr = output_buf[0][output_row++]; for (col = 0; col < num_cols; col++) { r = GETJSAMPLE(inptr[RGB_RED]); g = GETJSAMPLE(inptr[RGB_GREEN]); b = GETJSAMPLE(inptr[RGB_BLUE]); - inptr += RGB_PIXELSIZE; /* Y */ outptr[col] = (JSAMPLE) ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) >> SCALEBITS); + inptr += RGB_PIXELSIZE; } } } @@ -227,8 +227,8 @@ cmyk_ycck_convert (j_compress_ptr cinfo, JDIMENSION output_row, int num_rows) { my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; - register int r, g, b; register INT32 * ctab = cconvert->rgb_ycc_tab; + register int r, g, b; register JSAMPROW inptr; register JSAMPROW outptr0, outptr1, outptr2, outptr3; register JDIMENSION col; @@ -247,7 +247,6 @@ cmyk_ycck_convert (j_compress_ptr cinfo, b = MAXJSAMPLE - GETJSAMPLE(inptr[2]); /* K passes through as-is */ outptr3[col] = inptr[3]; /* don't need GETJSAMPLE here */ - inptr += 4; /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations * must be too; we do not need an explicit range-limiting operation. * Hence the value being shifted is never negative, and we don't @@ -265,6 +264,46 @@ cmyk_ycck_convert (j_compress_ptr cinfo, outptr2[col] = (JSAMPLE) ((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF]) >> SCALEBITS); + inptr += 4; + } + } +} + + +/* + * Convert some rows of samples to the JPEG colorspace. + * [R,G,B] to [R-G,G,B-G] conversion with modulo calculation + * (forward reversible color transform). + */ + +METHODDEF(void) +rgb_rgb1_convert (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPIMAGE output_buf, + JDIMENSION output_row, int num_rows) +{ + register int r, g, b; + register JSAMPROW inptr; + register JSAMPROW outptr0, outptr1, outptr2; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->image_width; + + while (--num_rows >= 0) { + inptr = *input_buf++; + outptr0 = output_buf[0][output_row]; + outptr1 = output_buf[1][output_row]; + outptr2 = output_buf[2][output_row]; + output_row++; + for (col = 0; col < num_cols; col++) { + r = GETJSAMPLE(inptr[RGB_RED]); + g = GETJSAMPLE(inptr[RGB_GREEN]); + b = GETJSAMPLE(inptr[RGB_BLUE]); + /* Assume that MAXJSAMPLE+1 is a power of 2, so that the MOD + * (modulo) operator is equivalent to the bitmask operator AND. + */ + outptr0[col] = (JSAMPLE) ((r - g + CENTERJSAMPLE) & MAXJSAMPLE); + outptr1[col] = (JSAMPLE) g; + outptr2[col] = (JSAMPLE) ((b - g + CENTERJSAMPLE) & MAXJSAMPLE); + inptr += RGB_PIXELSIZE; } } } @@ -281,16 +320,15 @@ grayscale_convert (j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows) { + int instride = cinfo->input_components; register JSAMPROW inptr; register JSAMPROW outptr; register JDIMENSION col; JDIMENSION num_cols = cinfo->image_width; - int instride = cinfo->input_components; while (--num_rows >= 0) { inptr = *input_buf++; - outptr = output_buf[0][output_row]; - output_row++; + outptr = output_buf[0][output_row++]; for (col = 0; col < num_cols; col++) { outptr[col] = inptr[0]; /* don't need GETJSAMPLE() here */ inptr += instride; @@ -299,6 +337,39 @@ grayscale_convert (j_compress_ptr cinfo, } +/* + * Convert some rows of samples to the JPEG colorspace. + * No colorspace conversion, but change from interleaved + * to separate-planes representation. + */ + +METHODDEF(void) +rgb_convert (j_compress_ptr cinfo, + JSAMPARRAY input_buf, JSAMPIMAGE output_buf, + JDIMENSION output_row, int num_rows) +{ + register JSAMPROW inptr; + register JSAMPROW outptr0, outptr1, outptr2; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->image_width; + + while (--num_rows >= 0) { + inptr = *input_buf++; + outptr0 = output_buf[0][output_row]; + outptr1 = output_buf[1][output_row]; + outptr2 = output_buf[2][output_row]; + output_row++; + for (col = 0; col < num_cols; col++) { + /* We can dispense with GETJSAMPLE() here */ + outptr0[col] = inptr[RGB_RED]; + outptr1[col] = inptr[RGB_GREEN]; + outptr2[col] = inptr[RGB_BLUE]; + inptr += RGB_PIXELSIZE; + } + } +} + + /* * Convert some rows of samples to the JPEG colorspace. * This version handles multi-component colorspaces without conversion. @@ -310,20 +381,20 @@ null_convert (j_compress_ptr cinfo, JSAMPARRAY input_buf, JSAMPIMAGE output_buf, JDIMENSION output_row, int num_rows) { + int ci; + register int nc = cinfo->num_components; register JSAMPROW inptr; register JSAMPROW outptr; register JDIMENSION col; - register int ci; - int nc = cinfo->num_components; JDIMENSION num_cols = cinfo->image_width; while (--num_rows >= 0) { /* It seems fastest to make a separate pass for each component. */ for (ci = 0; ci < nc; ci++) { - inptr = *input_buf; + inptr = input_buf[0] + ci; outptr = output_buf[ci][output_row]; for (col = 0; col < num_cols; col++) { - outptr[col] = inptr[ci]; /* don't need GETJSAMPLE() here */ + *outptr++ = *inptr; /* don't need GETJSAMPLE() here */ inptr += nc; } } @@ -356,7 +427,7 @@ jinit_color_converter (j_compress_ptr cinfo) cconvert = (my_cconvert_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_color_converter)); - cinfo->cconvert = (struct jpeg_color_converter *) cconvert; + cinfo->cconvert = &cconvert->pub; /* set start_pass to null method until we find out differently */ cconvert->pub.start_pass = null_method; @@ -368,11 +439,9 @@ jinit_color_converter (j_compress_ptr cinfo) break; case JCS_RGB: -#if RGB_PIXELSIZE != 3 if (cinfo->input_components != RGB_PIXELSIZE) ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE); break; -#endif /* else share code with YCbCr */ case JCS_YCbCr: if (cinfo->input_components != 3) @@ -391,28 +460,41 @@ jinit_color_converter (j_compress_ptr cinfo) break; } + /* Support color transform only for RGB colorspace */ + if (cinfo->color_transform && cinfo->jpeg_color_space != JCS_RGB) + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + /* Check num_components, set conversion method based on requested space */ switch (cinfo->jpeg_color_space) { case JCS_GRAYSCALE: if (cinfo->num_components != 1) ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - if (cinfo->in_color_space == JCS_GRAYSCALE) + if (cinfo->in_color_space == JCS_GRAYSCALE || + cinfo->in_color_space == JCS_YCbCr) cconvert->pub.color_convert = grayscale_convert; else if (cinfo->in_color_space == JCS_RGB) { cconvert->pub.start_pass = rgb_ycc_start; cconvert->pub.color_convert = rgb_gray_convert; - } else if (cinfo->in_color_space == JCS_YCbCr) - cconvert->pub.color_convert = grayscale_convert; - else + } else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); break; case JCS_RGB: if (cinfo->num_components != 3) ERREXIT(cinfo, JERR_BAD_J_COLORSPACE); - if (cinfo->in_color_space == JCS_RGB && RGB_PIXELSIZE == 3) - cconvert->pub.color_convert = null_convert; - else + if (cinfo->in_color_space == JCS_RGB) { + switch (cinfo->color_transform) { + case JCT_NONE: + cconvert->pub.color_convert = rgb_convert; + break; + case JCT_SUBTRACT_GREEN: + cconvert->pub.color_convert = rgb_rgb1_convert; + break; + default: + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + } + } else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); break; diff --git a/dll/3rdparty/libjpeg/jcmainct.c b/dll/3rdparty/libjpeg/jcmainct.c index 7de75d16758..39b97902e8f 100644 --- a/dll/3rdparty/libjpeg/jcmainct.c +++ b/dll/3rdparty/libjpeg/jcmainct.c @@ -2,6 +2,7 @@ * jcmainct.c * * Copyright (C) 1994-1996, Thomas G. Lane. + * Modified 2003-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -68,32 +69,32 @@ METHODDEF(void) process_data_buffer_main METHODDEF(void) start_pass_main (j_compress_ptr cinfo, J_BUF_MODE pass_mode) { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; /* Do nothing in raw-data mode. */ if (cinfo->raw_data_in) return; - main->cur_iMCU_row = 0; /* initialize counters */ - main->rowgroup_ctr = 0; - main->suspended = FALSE; - main->pass_mode = pass_mode; /* save mode for use by process_data */ + mainp->cur_iMCU_row = 0; /* initialize counters */ + mainp->rowgroup_ctr = 0; + mainp->suspended = FALSE; + mainp->pass_mode = pass_mode; /* save mode for use by process_data */ switch (pass_mode) { case JBUF_PASS_THRU: #ifdef FULL_MAIN_BUFFER_SUPPORTED - if (main->whole_image[0] != NULL) + if (mainp->whole_image[0] != NULL) ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); #endif - main->pub.process_data = process_data_simple_main; + mainp->pub.process_data = process_data_simple_main; break; #ifdef FULL_MAIN_BUFFER_SUPPORTED case JBUF_SAVE_SOURCE: case JBUF_CRANK_DEST: case JBUF_SAVE_AND_PASS: - if (main->whole_image[0] == NULL) + if (mainp->whole_image[0] == NULL) ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); - main->pub.process_data = process_data_buffer_main; + mainp->pub.process_data = process_data_buffer_main; break; #endif default: @@ -114,46 +115,46 @@ process_data_simple_main (j_compress_ptr cinfo, JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail) { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; - while (main->cur_iMCU_row < cinfo->total_iMCU_rows) { + while (mainp->cur_iMCU_row < cinfo->total_iMCU_rows) { /* Read input data if we haven't filled the main buffer yet */ - if (main->rowgroup_ctr < (JDIMENSION) cinfo->min_DCT_v_scaled_size) + if (mainp->rowgroup_ctr < (JDIMENSION) cinfo->min_DCT_v_scaled_size) (*cinfo->prep->pre_process_data) (cinfo, input_buf, in_row_ctr, in_rows_avail, - main->buffer, &main->rowgroup_ctr, + mainp->buffer, &mainp->rowgroup_ctr, (JDIMENSION) cinfo->min_DCT_v_scaled_size); /* If we don't have a full iMCU row buffered, return to application for * more data. Note that preprocessor will always pad to fill the iMCU row * at the bottom of the image. */ - if (main->rowgroup_ctr != (JDIMENSION) cinfo->min_DCT_v_scaled_size) + if (mainp->rowgroup_ctr != (JDIMENSION) cinfo->min_DCT_v_scaled_size) return; /* Send the completed row to the compressor */ - if (! (*cinfo->coef->compress_data) (cinfo, main->buffer)) { + if (! (*cinfo->coef->compress_data) (cinfo, mainp->buffer)) { /* If compressor did not consume the whole row, then we must need to * suspend processing and return to the application. In this situation * we pretend we didn't yet consume the last input row; otherwise, if * it happened to be the last row of the image, the application would * think we were done. */ - if (! main->suspended) { + if (! mainp->suspended) { (*in_row_ctr)--; - main->suspended = TRUE; + mainp->suspended = TRUE; } return; } /* We did finish the row. Undo our little suspension hack if a previous * call suspended; then mark the main buffer empty. */ - if (main->suspended) { + if (mainp->suspended) { (*in_row_ctr)++; - main->suspended = FALSE; + mainp->suspended = FALSE; } - main->rowgroup_ctr = 0; - main->cur_iMCU_row++; + mainp->rowgroup_ctr = 0; + mainp->cur_iMCU_row++; } } @@ -170,25 +171,27 @@ process_data_buffer_main (j_compress_ptr cinfo, JSAMPARRAY input_buf, JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail) { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; int ci; jpeg_component_info *compptr; - boolean writing = (main->pass_mode != JBUF_CRANK_DEST); + boolean writing = (mainp->pass_mode != JBUF_CRANK_DEST); - while (main->cur_iMCU_row < cinfo->total_iMCU_rows) { + while (mainp->cur_iMCU_row < cinfo->total_iMCU_rows) { /* Realign the virtual buffers if at the start of an iMCU row. */ - if (main->rowgroup_ctr == 0) { + if (mainp->rowgroup_ctr == 0) { for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { - main->buffer[ci] = (*cinfo->mem->access_virt_sarray) - ((j_common_ptr) cinfo, main->whole_image[ci], - main->cur_iMCU_row * (compptr->v_samp_factor * DCTSIZE), - (JDIMENSION) (compptr->v_samp_factor * DCTSIZE), writing); + mainp->buffer[ci] = (*cinfo->mem->access_virt_sarray) + ((j_common_ptr) cinfo, mainp->whole_image[ci], mainp->cur_iMCU_row * + ((JDIMENSION) (compptr->v_samp_factor * cinfo->min_DCT_v_scaled_size)), + (JDIMENSION) (compptr->v_samp_factor * cinfo->min_DCT_v_scaled_size), + writing); } /* In a read pass, pretend we just read some source data. */ if (! writing) { - *in_row_ctr += cinfo->max_v_samp_factor * DCTSIZE; - main->rowgroup_ctr = DCTSIZE; + *in_row_ctr += (JDIMENSION) + (cinfo->max_v_samp_factor * cinfo->min_DCT_v_scaled_size); + mainp->rowgroup_ctr = (JDIMENSION) cinfo->min_DCT_v_scaled_size; } } @@ -197,40 +200,40 @@ process_data_buffer_main (j_compress_ptr cinfo, if (writing) { (*cinfo->prep->pre_process_data) (cinfo, input_buf, in_row_ctr, in_rows_avail, - main->buffer, &main->rowgroup_ctr, - (JDIMENSION) DCTSIZE); + mainp->buffer, &mainp->rowgroup_ctr, + (JDIMENSION) cinfo->min_DCT_v_scaled_size); /* Return to application if we need more data to fill the iMCU row. */ - if (main->rowgroup_ctr < DCTSIZE) + if (mainp->rowgroup_ctr < (JDIMENSION) cinfo->min_DCT_v_scaled_size) return; } /* Emit data, unless this is a sink-only pass. */ - if (main->pass_mode != JBUF_SAVE_SOURCE) { - if (! (*cinfo->coef->compress_data) (cinfo, main->buffer)) { + if (mainp->pass_mode != JBUF_SAVE_SOURCE) { + if (! (*cinfo->coef->compress_data) (cinfo, mainp->buffer)) { /* If compressor did not consume the whole row, then we must need to * suspend processing and return to the application. In this situation * we pretend we didn't yet consume the last input row; otherwise, if * it happened to be the last row of the image, the application would * think we were done. */ - if (! main->suspended) { + if (! mainp->suspended) { (*in_row_ctr)--; - main->suspended = TRUE; + mainp->suspended = TRUE; } return; } /* We did finish the row. Undo our little suspension hack if a previous * call suspended; then mark the main buffer empty. */ - if (main->suspended) { + if (mainp->suspended) { (*in_row_ctr)++; - main->suspended = FALSE; + mainp->suspended = FALSE; } } /* If get here, we are done with this iMCU row. Mark buffer empty. */ - main->rowgroup_ctr = 0; - main->cur_iMCU_row++; + mainp->rowgroup_ctr = 0; + mainp->cur_iMCU_row++; } } @@ -244,15 +247,15 @@ process_data_buffer_main (j_compress_ptr cinfo, GLOBAL(void) jinit_c_main_controller (j_compress_ptr cinfo, boolean need_full_buffer) { - my_main_ptr main; + my_main_ptr mainp; int ci; jpeg_component_info *compptr; - main = (my_main_ptr) + mainp = (my_main_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_main_controller)); - cinfo->main = (struct jpeg_c_main_controller *) main; - main->pub.start_pass = start_pass_main; + cinfo->main = &mainp->pub; + mainp->pub.start_pass = start_pass_main; /* We don't need to create a buffer in raw-data mode. */ if (cinfo->raw_data_in) @@ -267,11 +270,12 @@ jinit_c_main_controller (j_compress_ptr cinfo, boolean need_full_buffer) /* Note we pad the bottom to a multiple of the iMCU height */ for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { - main->whole_image[ci] = (*cinfo->mem->request_virt_sarray) + mainp->whole_image[ci] = (*cinfo->mem->request_virt_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE, - compptr->width_in_blocks * compptr->DCT_h_scaled_size, - (JDIMENSION) jround_up((long) compptr->height_in_blocks, - (long) compptr->v_samp_factor) * DCTSIZE, + compptr->width_in_blocks * ((JDIMENSION) compptr->DCT_h_scaled_size), + ((JDIMENSION) jround_up((long) compptr->height_in_blocks, + (long) compptr->v_samp_factor)) * + ((JDIMENSION) cinfo->min_DCT_v_scaled_size), (JDIMENSION) (compptr->v_samp_factor * compptr->DCT_v_scaled_size)); } #else @@ -279,14 +283,14 @@ jinit_c_main_controller (j_compress_ptr cinfo, boolean need_full_buffer) #endif } else { #ifdef FULL_MAIN_BUFFER_SUPPORTED - main->whole_image[0] = NULL; /* flag for no virtual arrays */ + mainp->whole_image[0] = NULL; /* flag for no virtual arrays */ #endif /* Allocate a strip buffer for each component */ for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { - main->buffer[ci] = (*cinfo->mem->alloc_sarray) + mainp->buffer[ci] = (*cinfo->mem->alloc_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE, - compptr->width_in_blocks * compptr->DCT_h_scaled_size, + compptr->width_in_blocks * ((JDIMENSION) compptr->DCT_h_scaled_size), (JDIMENSION) (compptr->v_samp_factor * compptr->DCT_v_scaled_size)); } } diff --git a/dll/3rdparty/libjpeg/jcmarker.c b/dll/3rdparty/libjpeg/jcmarker.c index 606c19af397..92aa65fe0dc 100644 --- a/dll/3rdparty/libjpeg/jcmarker.c +++ b/dll/3rdparty/libjpeg/jcmarker.c @@ -2,7 +2,7 @@ * jcmarker.c * * Copyright (C) 1991-1998, Thomas G. Lane. - * Modified 2003-2010 by Guido Vollbeding. + * Modified 2003-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -19,24 +19,24 @@ typedef enum { /* JPEG marker codes */ M_SOF1 = 0xc1, M_SOF2 = 0xc2, M_SOF3 = 0xc3, - + M_SOF5 = 0xc5, M_SOF6 = 0xc6, M_SOF7 = 0xc7, - + M_JPG = 0xc8, M_SOF9 = 0xc9, M_SOF10 = 0xca, M_SOF11 = 0xcb, - + M_SOF13 = 0xcd, M_SOF14 = 0xce, M_SOF15 = 0xcf, - + M_DHT = 0xc4, - + M_DAC = 0xcc, - + M_RST0 = 0xd0, M_RST1 = 0xd1, M_RST2 = 0xd2, @@ -45,7 +45,7 @@ typedef enum { /* JPEG marker codes */ M_RST5 = 0xd5, M_RST6 = 0xd6, M_RST7 = 0xd7, - + M_SOI = 0xd8, M_EOI = 0xd9, M_SOS = 0xda, @@ -54,7 +54,7 @@ typedef enum { /* JPEG marker codes */ M_DRI = 0xdd, M_DHP = 0xde, M_EXP = 0xdf, - + M_APP0 = 0xe0, M_APP1 = 0xe1, M_APP2 = 0xe2, @@ -71,13 +71,14 @@ typedef enum { /* JPEG marker codes */ M_APP13 = 0xed, M_APP14 = 0xee, M_APP15 = 0xef, - + M_JPG0 = 0xf0, + M_JPG8 = 0xf8, M_JPG13 = 0xfd, M_COM = 0xfe, - + M_TEM = 0x01, - + M_ERROR = 0x100 } JPEG_MARKER; @@ -281,6 +282,37 @@ emit_dri (j_compress_ptr cinfo) } +LOCAL(void) +emit_lse_ict (j_compress_ptr cinfo) +/* Emit an LSE inverse color transform specification marker */ +{ + /* Support only 1 transform */ + if (cinfo->color_transform != JCT_SUBTRACT_GREEN || + cinfo->num_components < 3) + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + + emit_marker(cinfo, M_JPG8); + + emit_2bytes(cinfo, 24); /* fixed length */ + + emit_byte(cinfo, 0x0D); /* ID inverse transform specification */ + emit_2bytes(cinfo, MAXJSAMPLE); /* MAXTRANS */ + emit_byte(cinfo, 3); /* Nt=3 */ + emit_byte(cinfo, cinfo->comp_info[1].component_id); + emit_byte(cinfo, cinfo->comp_info[0].component_id); + emit_byte(cinfo, cinfo->comp_info[2].component_id); + emit_byte(cinfo, 0x80); /* F1: CENTER1=1, NORM1=0 */ + emit_2bytes(cinfo, 0); /* A(1,1)=0 */ + emit_2bytes(cinfo, 0); /* A(1,2)=0 */ + emit_byte(cinfo, 0); /* F2: CENTER2=0, NORM2=0 */ + emit_2bytes(cinfo, 1); /* A(2,1)=1 */ + emit_2bytes(cinfo, 0); /* A(2,2)=0 */ + emit_byte(cinfo, 0); /* F3: CENTER3=0, NORM3=0 */ + emit_2bytes(cinfo, 1); /* A(3,1)=1 */ + emit_2bytes(cinfo, 0); /* A(3,2)=0 */ +} + + LOCAL(void) emit_sof (j_compress_ptr cinfo, JPEG_MARKER code) /* Emit a SOF marker */ @@ -502,7 +534,8 @@ write_file_header (j_compress_ptr cinfo) /* * Write frame header. - * This consists of DQT and SOFn markers, and a conditional pseudo SOS marker. + * This consists of DQT and SOFn markers, + * a conditional LSE marker and a conditional pseudo SOS marker. * Note that we do not emit the SOF until we have emitted the DQT(s). * This avoids compatibility problems with incorrect implementations that * try to error-check the quant table numbers as soon as they see the SOF. @@ -560,6 +593,10 @@ write_frame_header (j_compress_ptr cinfo) emit_sof(cinfo, M_SOF1); /* SOF code for non-baseline Huffman file */ } + /* Check to emit LSE inverse color transform specification marker */ + if (cinfo->color_transform) + emit_lse_ict(cinfo); + /* Check to emit pseudo SOS marker */ if (cinfo->progressive_mode && cinfo->block_size != DCTSIZE) emit_pseudo_sos(cinfo); @@ -668,7 +705,7 @@ jinit_marker_writer (j_compress_ptr cinfo) marker = (my_marker_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_marker_writer)); - cinfo->marker = (struct jpeg_marker_writer *) marker; + cinfo->marker = &marker->pub; /* Initialize method pointers */ marker->pub.write_file_header = write_file_header; marker->pub.write_frame_header = write_frame_header; diff --git a/dll/3rdparty/libjpeg/jcparam.c b/dll/3rdparty/libjpeg/jcparam.c index c5e85dda550..e530c3c4bd1 100644 --- a/dll/3rdparty/libjpeg/jcparam.c +++ b/dll/3rdparty/libjpeg/jcparam.c @@ -2,7 +2,7 @@ * jcparam.c * * Copyright (C) 1991-1998, Thomas G. Lane. - * Modified 2003-2008 by Guido Vollbeding. + * Modified 2003-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -150,7 +150,7 @@ jpeg_set_quality (j_compress_ptr cinfo, int quality, boolean force_baseline) /* Set or change the 'quality' (quantization) setting, using default tables. * This is the standard quality-adjusting entry point for typical user * interfaces; only those who want detailed control over quantization tables - * would use the preceding three routines directly. + * would use the preceding routines directly. */ { /* Convert user 0-100 rating to percentage scaling */ @@ -367,6 +367,9 @@ jpeg_set_defaults (j_compress_ptr cinfo) cinfo->X_density = 1; /* Pixel aspect ratio is square by default */ cinfo->Y_density = 1; + /* No color transform */ + cinfo->color_transform = JCT_NONE; + /* Choose JPEG colorspace based on input space, set defaults accordingly */ jpeg_default_colorspace(cinfo); @@ -448,7 +451,9 @@ jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace) cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag RGB */ cinfo->num_components = 3; SET_COMP(0, 0x52 /* 'R' */, 1,1, 0, 0,0); - SET_COMP(1, 0x47 /* 'G' */, 1,1, 0, 0,0); + SET_COMP(1, 0x47 /* 'G' */, 1,1, 0, + cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0, + cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0); SET_COMP(2, 0x42 /* 'B' */, 1,1, 0, 0,0); break; case JCS_YCbCr: diff --git a/dll/3rdparty/libjpeg/jctrans.c b/dll/3rdparty/libjpeg/jctrans.c index cee6b0f343f..8813c3eac9e 100644 --- a/dll/3rdparty/libjpeg/jctrans.c +++ b/dll/3rdparty/libjpeg/jctrans.c @@ -2,7 +2,7 @@ * jctrans.c * * Copyright (C) 1995-1998, Thomas G. Lane. - * Modified 2000-2009 by Guido Vollbeding. + * Modified 2000-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -85,7 +85,10 @@ jpeg_copy_critical_parameters (j_decompress_ptr srcinfo, jpeg_set_defaults(dstinfo); /* jpeg_set_defaults may choose wrong colorspace, eg YCbCr if input is RGB. * Fix it to get the right header markers for the image colorspace. + * Note: Entropy table assignment in jpeg_set_colorspace depends + * on color_transform. */ + dstinfo->color_transform = srcinfo->color_transform; jpeg_set_colorspace(dstinfo, srcinfo->jpeg_color_space); dstinfo->data_precision = srcinfo->data_precision; dstinfo->CCIR601_sampling = srcinfo->CCIR601_sampling; @@ -130,7 +133,7 @@ jpeg_copy_critical_parameters (j_decompress_ptr srcinfo, ERREXIT1(dstinfo, JERR_MISMATCHED_QUANT_TABLE, tblno); } } - /* Note: we do not copy the source's Huffman table assignments; + /* Note: we do not copy the source's entropy table assignments; * instead we rely on jpeg_set_colorspace to have made a suitable choice. */ } @@ -364,7 +367,7 @@ transencode_coef_controller (j_compress_ptr cinfo, coef = (my_coef_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_coef_controller)); - cinfo->coef = (struct jpeg_c_coef_controller *) coef; + cinfo->coef = &coef->pub; coef->pub.start_pass = start_pass_coef; coef->pub.compress_data = compress_output; @@ -375,7 +378,7 @@ transencode_coef_controller (j_compress_ptr cinfo, buffer = (JBLOCKROW) (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); - jzero_far((void FAR *) buffer, C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); + FMEMZERO((void FAR *) buffer, C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)); for (i = 0; i < C_MAX_BLOCKS_IN_MCU; i++) { coef->dummy_buffer[i] = buffer + i; } diff --git a/dll/3rdparty/libjpeg/jdarith.c b/dll/3rdparty/libjpeg/jdarith.c index c858b248b6b..6e32d230cd1 100644 --- a/dll/3rdparty/libjpeg/jdarith.c +++ b/dll/3rdparty/libjpeg/jdarith.c @@ -1,7 +1,7 @@ /* * jdarith.c * - * Developed 1997-2009 by Guido Vollbeding. + * Developed 1997-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -145,7 +145,7 @@ arith_decode (j_decompress_ptr cinfo, unsigned char *st) e->a <<= 1; } - /* Fetch values from our compact representation of Table D.2: + /* Fetch values from our compact representation of Table D.3(D.2): * Qe values and probability estimation state machine */ sv = *st; @@ -345,12 +345,15 @@ decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) /* Sections F.2.4.2 & F.1.4.4.2: Decoding of AC coefficients */ /* Figure F.20: Decode_AC_coefficients */ - for (k = cinfo->Ss; k <= cinfo->Se; k++) { - st = entropy->ac_stats[tbl] + 3 * (k - 1); + k = cinfo->Ss - 1; + do { + st = entropy->ac_stats[tbl] + 3 * k; if (arith_decode(cinfo, st)) break; /* EOB flag */ - while (arith_decode(cinfo, st + 1) == 0) { - st += 3; k++; - if (k > cinfo->Se) { + for (;;) { + k++; + if (arith_decode(cinfo, st + 1)) break; + st += 3; + if (k >= cinfo->Se) { WARNMS(cinfo, JWRN_ARITH_BAD_CODE); entropy->ct = -1; /* spectral overflow */ return TRUE; @@ -384,7 +387,7 @@ decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) v += 1; if (sign) v = -v; /* Scale and output coefficient in natural (dezigzagged) order */ (*block)[natural_order[k]] = (JCOEF) (v << cinfo->Al); - } + } while (k < cinfo->Se); return TRUE; } @@ -457,15 +460,18 @@ decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) m1 = (-1) << cinfo->Al; /* -1 in the bit position being coded */ /* Establish EOBx (previous stage end-of-block) index */ - for (kex = cinfo->Se; kex > 0; kex--) + kex = cinfo->Se; + do { if ((*block)[natural_order[kex]]) break; + } while (--kex); - for (k = cinfo->Ss; k <= cinfo->Se; k++) { - st = entropy->ac_stats[tbl] + 3 * (k - 1); - if (k > kex) + k = cinfo->Ss - 1; + do { + st = entropy->ac_stats[tbl] + 3 * k; + if (k >= kex) if (arith_decode(cinfo, st)) break; /* EOB flag */ for (;;) { - thiscoef = *block + natural_order[k]; + thiscoef = *block + natural_order[++k]; if (*thiscoef) { /* previously nonzero coef */ if (arith_decode(cinfo, st + 2)) { if (*thiscoef < 0) @@ -482,14 +488,14 @@ decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) *thiscoef = p1; break; } - st += 3; k++; - if (k > cinfo->Se) { + st += 3; + if (k >= cinfo->Se) { WARNMS(cinfo, JWRN_ARITH_BAD_CODE); entropy->ct = -1; /* spectral overflow */ return TRUE; } } - } + } while (k < cinfo->Se); return TRUE; } @@ -575,15 +581,19 @@ decode_mcu (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) /* Sections F.2.4.2 & F.1.4.4.2: Decoding of AC coefficients */ + if (cinfo->lim_Se == 0) continue; tbl = compptr->ac_tbl_no; + k = 0; /* Figure F.20: Decode_AC_coefficients */ - for (k = 1; k <= cinfo->lim_Se; k++) { - st = entropy->ac_stats[tbl] + 3 * (k - 1); + do { + st = entropy->ac_stats[tbl] + 3 * k; if (arith_decode(cinfo, st)) break; /* EOB flag */ - while (arith_decode(cinfo, st + 1) == 0) { - st += 3; k++; - if (k > cinfo->lim_Se) { + for (;;) { + k++; + if (arith_decode(cinfo, st + 1)) break; + st += 3; + if (k >= cinfo->lim_Se) { WARNMS(cinfo, JWRN_ARITH_BAD_CODE); entropy->ct = -1; /* spectral overflow */ return TRUE; @@ -616,7 +626,7 @@ decode_mcu (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) if (arith_decode(cinfo, st)) v |= m; v += 1; if (sign) v = -v; (*block)[natural_order[k]] = (JCOEF) v; - } + } while (k < cinfo->lim_Se); } return TRUE; @@ -746,7 +756,7 @@ jinit_arith_decoder (j_decompress_ptr cinfo) entropy = (arith_entropy_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(arith_entropy_decoder)); - cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; + cinfo->entropy = &entropy->pub; entropy->pub.start_pass = start_pass; /* Mark tables unallocated */ diff --git a/dll/3rdparty/libjpeg/jdatadst.c b/dll/3rdparty/libjpeg/jdatadst.c index 472d5f32418..5c8681c9e4a 100644 --- a/dll/3rdparty/libjpeg/jdatadst.c +++ b/dll/3rdparty/libjpeg/jdatadst.c @@ -2,7 +2,7 @@ * jdatadst.c * * Copyright (C) 1994-1996, Thomas G. Lane. - * Modified 2009 by Guido Vollbeding. + * Modified 2009-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -128,7 +128,7 @@ empty_mem_output_buffer (j_compress_ptr cinfo) /* Try to allocate new buffer with double size */ nextsize = dest->bufsize * 2; - nextbuffer = malloc(nextsize); + nextbuffer = (JOCTET *) malloc(nextsize); if (nextbuffer == NULL) ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10); @@ -226,6 +226,9 @@ jpeg_stdio_dest (j_compress_ptr cinfo, FILE * outfile) * larger memory, so the buffer is available to the application after * finishing compression, and then the application is responsible for * freeing the requested memory. + * Note: An initial buffer supplied by the caller is expected to be + * managed by the application. The library does not free such buffer + * when allocating a larger buffer. */ GLOBAL(void) @@ -256,7 +259,7 @@ jpeg_mem_dest (j_compress_ptr cinfo, if (*outbuffer == NULL || *outsize == 0) { /* Allocate initial buffer */ - dest->newbuffer = *outbuffer = malloc(OUTPUT_BUF_SIZE); + dest->newbuffer = *outbuffer = (unsigned char *) malloc(OUTPUT_BUF_SIZE); if (dest->newbuffer == NULL) ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10); *outsize = OUTPUT_BUF_SIZE; diff --git a/dll/3rdparty/libjpeg/jdatasrc.c b/dll/3rdparty/libjpeg/jdatasrc.c index c8fe3daf336..7be59a88a1c 100644 --- a/dll/3rdparty/libjpeg/jdatasrc.c +++ b/dll/3rdparty/libjpeg/jdatasrc.c @@ -2,7 +2,7 @@ * jdatasrc.c * * Copyright (C) 1994-1996, Thomas G. Lane. - * Modified 2009-2010 by Guido Vollbeding. + * Modified 2009-2011 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -121,16 +121,17 @@ fill_input_buffer (j_decompress_ptr cinfo) METHODDEF(boolean) fill_mem_input_buffer (j_decompress_ptr cinfo) { - static JOCTET mybuffer[4]; + static const JOCTET mybuffer[4] = { + (JOCTET) 0xFF, (JOCTET) JPEG_EOI, 0, 0 + }; /* The whole JPEG data is expected to reside in the supplied memory * buffer, so any request for more data beyond the given buffer size * is treated as an error. */ WARNMS(cinfo, JWRN_JPEG_EOF); + /* Insert a fake EOI marker */ - mybuffer[0] = (JOCTET) 0xFF; - mybuffer[1] = (JOCTET) JPEG_EOI; cinfo->src->next_input_byte = mybuffer; cinfo->src->bytes_in_buffer = 2; diff --git a/dll/3rdparty/libjpeg/jdcoefct.c b/dll/3rdparty/libjpeg/jdcoefct.c index 462e92c6125..ed02fc378f5 100644 --- a/dll/3rdparty/libjpeg/jdcoefct.c +++ b/dll/3rdparty/libjpeg/jdcoefct.c @@ -2,6 +2,7 @@ * jdcoefct.c * * Copyright (C) 1994-1997, Thomas G. Lane. + * Modified 2002-2011 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -162,8 +163,9 @@ decompress_onepass (j_decompress_ptr cinfo, JSAMPIMAGE output_buf) for (MCU_col_num = coef->MCU_ctr; MCU_col_num <= last_MCU_col; MCU_col_num++) { /* Try to fetch an MCU. Entropy decoder expects buffer to be zeroed. */ - jzero_far((void FAR *) coef->MCU_buffer[0], - (size_t) (cinfo->blocks_in_MCU * SIZEOF(JBLOCK))); + if (cinfo->lim_Se) /* can bypass in DC only case */ + FMEMZERO((void FAR *) coef->MCU_buffer[0], + (size_t) (cinfo->blocks_in_MCU * SIZEOF(JBLOCK))); if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) { /* Suspension forced; update state counters and exit */ coef->MCU_vert_offset = yoffset; @@ -729,6 +731,9 @@ jinit_d_coef_controller (j_decompress_ptr cinfo, boolean need_full_buffer) for (i = 0; i < D_MAX_BLOCKS_IN_MCU; i++) { coef->MCU_buffer[i] = buffer + i; } + if (cinfo->lim_Se == 0) /* DC only case: want to bypass later */ + FMEMZERO((void FAR *) buffer, + (size_t) (D_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK))); coef->pub.consume_data = dummy_consume_data; coef->pub.decompress_data = decompress_onepass; coef->pub.coef_arrays = NULL; /* flag for no virtual arrays */ diff --git a/dll/3rdparty/libjpeg/jdcolor.c b/dll/3rdparty/libjpeg/jdcolor.c index 6c04dfe8aa1..939df757a49 100644 --- a/dll/3rdparty/libjpeg/jdcolor.c +++ b/dll/3rdparty/libjpeg/jdcolor.c @@ -2,6 +2,7 @@ * jdcolor.c * * Copyright (C) 1991-1997, Thomas G. Lane. + * Modified 2011-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -23,20 +24,28 @@ typedef struct { int * Cb_b_tab; /* => table for Cb to B conversion */ INT32 * Cr_g_tab; /* => table for Cr to G conversion */ INT32 * Cb_g_tab; /* => table for Cb to G conversion */ + + /* Private state for RGB->Y conversion */ + INT32 * rgb_y_tab; /* => table for RGB to Y conversion */ } my_color_deconverter; typedef my_color_deconverter * my_cconvert_ptr; /**************** YCbCr -> RGB conversion: most common case **************/ +/**************** RGB -> Y conversion: less common case **************/ /* * YCbCr is defined per CCIR 601-1, except that Cb and Cr are * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5. * The conversion equations to be implemented are therefore + * * R = Y + 1.40200 * Cr * G = Y - 0.34414 * Cb - 0.71414 * Cr * B = Y + 1.77200 * Cb + * + * Y = 0.29900 * R + 0.58700 * G + 0.11400 * B + * * where Cb and Cr represent the incoming values less CENTERJSAMPLE. * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.) * @@ -61,6 +70,18 @@ typedef my_color_deconverter * my_cconvert_ptr; #define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) #define FIX(x) ((INT32) ((x) * (1L<Y conversion and divide it up into + * three parts, instead of doing three alloc_small requests. This lets us + * use a single table base address, which can be held in a register in the + * inner loops on many machines (more than can hold all three addresses, + * anyway). + */ + +#define R_Y_OFF 0 /* offset to R => Y section */ +#define G_Y_OFF (1*(MAXJSAMPLE+1)) /* offset to G => Y section */ +#define B_Y_OFF (2*(MAXJSAMPLE+1)) /* etc. */ +#define TABLE_SIZE (3*(MAXJSAMPLE+1)) + /* * Initialize tables for YCC->RGB colorspace conversion. @@ -160,6 +181,178 @@ ycc_rgb_convert (j_decompress_ptr cinfo, /**************** Cases other than YCbCr -> RGB **************/ +/* + * Initialize for RGB->grayscale colorspace conversion. + */ + +LOCAL(void) +build_rgb_y_table (j_decompress_ptr cinfo) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + INT32 * rgb_y_tab; + INT32 i; + + /* Allocate and fill in the conversion tables. */ + cconvert->rgb_y_tab = rgb_y_tab = (INT32 *) + (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, + (TABLE_SIZE * SIZEOF(INT32))); + + for (i = 0; i <= MAXJSAMPLE; i++) { + rgb_y_tab[i+R_Y_OFF] = FIX(0.29900) * i; + rgb_y_tab[i+G_Y_OFF] = FIX(0.58700) * i; + rgb_y_tab[i+B_Y_OFF] = FIX(0.11400) * i + ONE_HALF; + } +} + + +/* + * Convert RGB to grayscale. + */ + +METHODDEF(void) +rgb_gray_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + register INT32 * ctab = cconvert->rgb_y_tab; + register int r, g, b; + register JSAMPROW outptr; + register JSAMPROW inptr0, inptr1, inptr2; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + + while (--num_rows >= 0) { + inptr0 = input_buf[0][input_row]; + inptr1 = input_buf[1][input_row]; + inptr2 = input_buf[2][input_row]; + input_row++; + outptr = *output_buf++; + for (col = 0; col < num_cols; col++) { + r = GETJSAMPLE(inptr0[col]); + g = GETJSAMPLE(inptr1[col]); + b = GETJSAMPLE(inptr2[col]); + /* Y */ + outptr[col] = (JSAMPLE) + ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) + >> SCALEBITS); + } + } +} + + +/* + * [R-G,G,B-G] to [R,G,B] conversion with modulo calculation + * (inverse color transform). + */ + +METHODDEF(void) +rgb1_rgb_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + register int r, g, b; + register JSAMPROW outptr; + register JSAMPROW inptr0, inptr1, inptr2; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + + while (--num_rows >= 0) { + inptr0 = input_buf[0][input_row]; + inptr1 = input_buf[1][input_row]; + inptr2 = input_buf[2][input_row]; + input_row++; + outptr = *output_buf++; + for (col = 0; col < num_cols; col++) { + r = GETJSAMPLE(inptr0[col]); + g = GETJSAMPLE(inptr1[col]); + b = GETJSAMPLE(inptr2[col]); + /* Assume that MAXJSAMPLE+1 is a power of 2, so that the MOD + * (modulo) operator is equivalent to the bitmask operator AND. + */ + outptr[RGB_RED] = (JSAMPLE) ((r + g - CENTERJSAMPLE) & MAXJSAMPLE); + outptr[RGB_GREEN] = (JSAMPLE) g; + outptr[RGB_BLUE] = (JSAMPLE) ((b + g - CENTERJSAMPLE) & MAXJSAMPLE); + outptr += RGB_PIXELSIZE; + } + } +} + + +/* + * [R-G,G,B-G] to grayscale conversion with modulo calculation + * (inverse color transform). + */ + +METHODDEF(void) +rgb1_gray_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; + register INT32 * ctab = cconvert->rgb_y_tab; + register int r, g, b; + register JSAMPROW outptr; + register JSAMPROW inptr0, inptr1, inptr2; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + + while (--num_rows >= 0) { + inptr0 = input_buf[0][input_row]; + inptr1 = input_buf[1][input_row]; + inptr2 = input_buf[2][input_row]; + input_row++; + outptr = *output_buf++; + for (col = 0; col < num_cols; col++) { + r = GETJSAMPLE(inptr0[col]); + g = GETJSAMPLE(inptr1[col]); + b = GETJSAMPLE(inptr2[col]); + /* Assume that MAXJSAMPLE+1 is a power of 2, so that the MOD + * (modulo) operator is equivalent to the bitmask operator AND. + */ + r = (r + g - CENTERJSAMPLE) & MAXJSAMPLE; + b = (b + g - CENTERJSAMPLE) & MAXJSAMPLE; + /* Y */ + outptr[col] = (JSAMPLE) + ((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF]) + >> SCALEBITS); + } + } +} + + +/* + * No colorspace change, but conversion from separate-planes + * to interleaved representation. + */ + +METHODDEF(void) +rgb_convert (j_decompress_ptr cinfo, + JSAMPIMAGE input_buf, JDIMENSION input_row, + JSAMPARRAY output_buf, int num_rows) +{ + register JSAMPROW outptr; + register JSAMPROW inptr0, inptr1, inptr2; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; + + while (--num_rows >= 0) { + inptr0 = input_buf[0][input_row]; + inptr1 = input_buf[1][input_row]; + inptr2 = input_buf[2][input_row]; + input_row++; + outptr = *output_buf++; + for (col = 0; col < num_cols; col++) { + /* We can dispense with GETJSAMPLE() here */ + outptr[RGB_RED] = inptr0[col]; + outptr[RGB_GREEN] = inptr1[col]; + outptr[RGB_BLUE] = inptr2[col]; + outptr += RGB_PIXELSIZE; + } + } +} + + /* * Color conversion for no colorspace change: just copy the data, * converting from separate-planes to interleaved representation. @@ -170,19 +363,20 @@ null_convert (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows) { - register JSAMPROW inptr, outptr; - register JDIMENSION count; - register int num_components = cinfo->num_components; - JDIMENSION num_cols = cinfo->output_width; int ci; + register int nc = cinfo->num_components; + register JSAMPROW outptr; + register JSAMPROW inptr; + register JDIMENSION col; + JDIMENSION num_cols = cinfo->output_width; while (--num_rows >= 0) { - for (ci = 0; ci < num_components; ci++) { + for (ci = 0; ci < nc; ci++) { inptr = input_buf[ci][input_row]; outptr = output_buf[0] + ci; - for (count = num_cols; count > 0; count--) { + for (col = 0; col < num_cols; col++) { *outptr = *inptr++; /* needn't bother with GETJSAMPLE() here */ - outptr += num_components; + outptr += nc; } } input_row++; @@ -218,7 +412,8 @@ gray_rgb_convert (j_decompress_ptr cinfo, JSAMPIMAGE input_buf, JDIMENSION input_row, JSAMPARRAY output_buf, int num_rows) { - register JSAMPROW inptr, outptr; + register JSAMPROW outptr; + register JSAMPROW inptr; register JDIMENSION col; JDIMENSION num_cols = cinfo->output_width; @@ -309,7 +504,7 @@ jinit_color_deconverter (j_decompress_ptr cinfo) cconvert = (my_cconvert_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_color_deconverter)); - cinfo->cconvert = (struct jpeg_color_deconverter *) cconvert; + cinfo->cconvert = &cconvert->pub; cconvert->pub.start_pass = start_pass_dcolor; /* Make sure num_components agrees with jpeg_color_space */ @@ -337,6 +532,10 @@ jinit_color_deconverter (j_decompress_ptr cinfo) break; } + /* Support color transform only for RGB colorspace */ + if (cinfo->color_transform && cinfo->jpeg_color_space != JCS_RGB) + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + /* Set out_color_components and conversion method based on requested space. * Also clear the component_needed flags for any unused components, * so that earlier pipeline stages can avoid useless computation. @@ -351,6 +550,19 @@ jinit_color_deconverter (j_decompress_ptr cinfo) /* For color->grayscale conversion, only the Y (0) component is needed */ for (ci = 1; ci < cinfo->num_components; ci++) cinfo->comp_info[ci].component_needed = FALSE; + } else if (cinfo->jpeg_color_space == JCS_RGB) { + switch (cinfo->color_transform) { + case JCT_NONE: + cconvert->pub.color_convert = rgb_gray_convert; + break; + case JCT_SUBTRACT_GREEN: + cconvert->pub.color_convert = rgb1_gray_convert; + break; + default: + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + } + build_rgb_y_table(cinfo); } else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); break; @@ -362,8 +574,18 @@ jinit_color_deconverter (j_decompress_ptr cinfo) build_ycc_rgb_table(cinfo); } else if (cinfo->jpeg_color_space == JCS_GRAYSCALE) { cconvert->pub.color_convert = gray_rgb_convert; - } else if (cinfo->jpeg_color_space == JCS_RGB && RGB_PIXELSIZE == 3) { - cconvert->pub.color_convert = null_convert; + } else if (cinfo->jpeg_color_space == JCS_RGB) { + switch (cinfo->color_transform) { + case JCT_NONE: + cconvert->pub.color_convert = rgb_convert; + break; + case JCT_SUBTRACT_GREEN: + cconvert->pub.color_convert = rgb1_rgb_convert; + break; + default: + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + break; + } } else ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); break; diff --git a/dll/3rdparty/libjpeg/jdhuff.c b/dll/3rdparty/libjpeg/jdhuff.c index 06f92fe47f6..e548e689bae 100644 --- a/dll/3rdparty/libjpeg/jdhuff.c +++ b/dll/3rdparty/libjpeg/jdhuff.c @@ -2,7 +2,7 @@ * jdhuff.c * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 2006-2009 by Guido Vollbeding. + * Modified 2006-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -797,7 +797,7 @@ decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) /* There is always only one block per MCU */ - if (EOBRUN > 0) /* if it's a band of zeroes... */ + if (EOBRUN) /* if it's a band of zeroes... */ EOBRUN--; /* ...process it now (we do nothing) */ else { BITREAD_LOAD_STATE(cinfo,entropy->bitstate); @@ -816,18 +816,17 @@ decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) /* Scale and output coefficient in natural (dezigzagged) order */ (*block)[natural_order[k]] = (JCOEF) (s << Al); } else { - if (r == 15) { /* ZRL */ - k += 15; /* skip 15 zeroes in band */ - } else { /* EOBr, run length is 2^r + appended bits */ - EOBRUN = 1 << r; + if (r != 15) { /* EOBr, run length is 2^r + appended bits */ if (r) { /* EOBr, r > 0 */ + EOBRUN = 1 << r; CHECK_BIT_BUFFER(br_state, r, return FALSE); r = GET_BITS(r); EOBRUN += r; + EOBRUN--; /* this band is processed at this moment */ } - EOBRUN--; /* this band is processed at this moment */ break; /* force end-of-band */ } + k += 15; /* ZRL: skip 15 zeroes in band */ } } @@ -951,7 +950,7 @@ decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) k = cinfo->Ss; if (EOBRUN == 0) { - for (; k <= Se; k++) { + do { HUFF_DECODE(s, br_state, tbl, goto undoit, label3); r = s >> 4; s &= 15; @@ -981,7 +980,7 @@ decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) */ do { thiscoef = *block + natural_order[k]; - if (*thiscoef != 0) { + if (*thiscoef) { CHECK_BIT_BUFFER(br_state, 1, goto undoit); if (GET_BITS(1)) { if ((*thiscoef & p1) == 0) { /* do nothing if already set it */ @@ -1004,18 +1003,19 @@ decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) /* Remember its position in case we have to suspend */ newnz_pos[num_newnz++] = pos; } - } + k++; + } while (k <= Se); } - if (EOBRUN > 0) { + if (EOBRUN) { /* Scan any remaining coefficient positions after the end-of-band * (the last newly nonzero coefficient, if any). Append a correction * bit to each already-nonzero coefficient. A correction bit is 1 * if the absolute value of the coefficient must be increased. */ - for (; k <= Se; k++) { + do { thiscoef = *block + natural_order[k]; - if (*thiscoef != 0) { + if (*thiscoef) { CHECK_BIT_BUFFER(br_state, 1, goto undoit); if (GET_BITS(1)) { if ((*thiscoef & p1) == 0) { /* do nothing if already changed it */ @@ -1026,7 +1026,8 @@ decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) } } } - } + k++; + } while (k <= Se); /* Count one block completed in EOB run */ EOBRUN--; } @@ -1043,7 +1044,7 @@ decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data) undoit: /* Re-zero any output coefficients that we made newly nonzero */ - while (num_newnz > 0) + while (num_newnz) (*block)[newnz_pos[--num_newnz]] = 0; return FALSE; @@ -1514,7 +1515,7 @@ jinit_huff_decoder (j_decompress_ptr cinfo) entropy = (huff_entropy_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(huff_entropy_decoder)); - cinfo->entropy = (struct jpeg_entropy_decoder *) entropy; + cinfo->entropy = &entropy->pub; entropy->pub.start_pass = start_pass_huff_decoder; if (cinfo->progressive_mode) { diff --git a/dll/3rdparty/libjpeg/jdmainct.c b/dll/3rdparty/libjpeg/jdmainct.c index 02723ca732a..52091fb2bed 100644 --- a/dll/3rdparty/libjpeg/jdmainct.c +++ b/dll/3rdparty/libjpeg/jdmainct.c @@ -2,6 +2,7 @@ * jdmainct.c * * Copyright (C) 1994-1996, Thomas G. Lane. + * Modified 2002-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -159,7 +160,7 @@ alloc_funny_pointers (j_decompress_ptr cinfo) * This is done only once, not once per pass. */ { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; int ci, rgroup; int M = cinfo->min_DCT_v_scaled_size; jpeg_component_info *compptr; @@ -168,10 +169,10 @@ alloc_funny_pointers (j_decompress_ptr cinfo) /* Get top-level space for component array pointers. * We alloc both arrays with one call to save a few cycles. */ - main->xbuffer[0] = (JSAMPIMAGE) + mainp->xbuffer[0] = (JSAMPIMAGE) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, cinfo->num_components * 2 * SIZEOF(JSAMPARRAY)); - main->xbuffer[1] = main->xbuffer[0] + cinfo->num_components; + mainp->xbuffer[1] = mainp->xbuffer[0] + cinfo->num_components; for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { @@ -184,9 +185,9 @@ alloc_funny_pointers (j_decompress_ptr cinfo) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, 2 * (rgroup * (M + 4)) * SIZEOF(JSAMPROW)); xbuf += rgroup; /* want one row group at negative offsets */ - main->xbuffer[0][ci] = xbuf; + mainp->xbuffer[0][ci] = xbuf; xbuf += rgroup * (M + 4); - main->xbuffer[1][ci] = xbuf; + mainp->xbuffer[1][ci] = xbuf; } } @@ -200,7 +201,7 @@ make_funny_pointers (j_decompress_ptr cinfo) * This will be repeated at the beginning of each pass. */ { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; int ci, i, rgroup; int M = cinfo->min_DCT_v_scaled_size; jpeg_component_info *compptr; @@ -210,10 +211,10 @@ make_funny_pointers (j_decompress_ptr cinfo) ci++, compptr++) { rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / cinfo->min_DCT_v_scaled_size; /* height of a row group of component */ - xbuf0 = main->xbuffer[0][ci]; - xbuf1 = main->xbuffer[1][ci]; + xbuf0 = mainp->xbuffer[0][ci]; + xbuf1 = mainp->xbuffer[1][ci]; /* First copy the workspace pointers as-is */ - buf = main->buffer[ci]; + buf = mainp->buffer[ci]; for (i = 0; i < rgroup * (M + 2); i++) { xbuf0[i] = xbuf1[i] = buf[i]; } @@ -240,7 +241,7 @@ set_wraparound_pointers (j_decompress_ptr cinfo) * This changes the pointer list state from top-of-image to the normal state. */ { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; int ci, i, rgroup; int M = cinfo->min_DCT_v_scaled_size; jpeg_component_info *compptr; @@ -250,8 +251,8 @@ set_wraparound_pointers (j_decompress_ptr cinfo) ci++, compptr++) { rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / cinfo->min_DCT_v_scaled_size; /* height of a row group of component */ - xbuf0 = main->xbuffer[0][ci]; - xbuf1 = main->xbuffer[1][ci]; + xbuf0 = mainp->xbuffer[0][ci]; + xbuf1 = mainp->xbuffer[1][ci]; for (i = 0; i < rgroup; i++) { xbuf0[i - rgroup] = xbuf0[rgroup*(M+1) + i]; xbuf1[i - rgroup] = xbuf1[rgroup*(M+1) + i]; @@ -269,7 +270,7 @@ set_bottom_pointers (j_decompress_ptr cinfo) * Also sets rowgroups_avail to indicate number of nondummy row groups in row. */ { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; int ci, i, rgroup, iMCUheight, rows_left; jpeg_component_info *compptr; JSAMPARRAY xbuf; @@ -286,12 +287,12 @@ set_bottom_pointers (j_decompress_ptr cinfo) * so we need only do it once. */ if (ci == 0) { - main->rowgroups_avail = (JDIMENSION) ((rows_left-1) / rgroup + 1); + mainp->rowgroups_avail = (JDIMENSION) ((rows_left-1) / rgroup + 1); } /* Duplicate the last real sample row rgroup*2 times; this pads out the * last partial rowgroup and ensures at least one full rowgroup of context. */ - xbuf = main->xbuffer[main->whichptr][ci]; + xbuf = mainp->xbuffer[mainp->whichptr][ci]; for (i = 0; i < rgroup * 2; i++) { xbuf[rows_left + i] = xbuf[rows_left-1]; } @@ -306,27 +307,27 @@ set_bottom_pointers (j_decompress_ptr cinfo) METHODDEF(void) start_pass_main (j_decompress_ptr cinfo, J_BUF_MODE pass_mode) { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; switch (pass_mode) { case JBUF_PASS_THRU: if (cinfo->upsample->need_context_rows) { - main->pub.process_data = process_data_context_main; + mainp->pub.process_data = process_data_context_main; make_funny_pointers(cinfo); /* Create the xbuffer[] lists */ - main->whichptr = 0; /* Read first iMCU row into xbuffer[0] */ - main->context_state = CTX_PREPARE_FOR_IMCU; - main->iMCU_row_ctr = 0; + mainp->whichptr = 0; /* Read first iMCU row into xbuffer[0] */ + mainp->context_state = CTX_PREPARE_FOR_IMCU; + mainp->iMCU_row_ctr = 0; } else { /* Simple case with no context needed */ - main->pub.process_data = process_data_simple_main; + mainp->pub.process_data = process_data_simple_main; } - main->buffer_full = FALSE; /* Mark buffer empty */ - main->rowgroup_ctr = 0; + mainp->buffer_full = FALSE; /* Mark buffer empty */ + mainp->rowgroup_ctr = 0; break; #ifdef QUANT_2PASS_SUPPORTED case JBUF_CRANK_DEST: /* For last pass of 2-pass quantization, just crank the postprocessor */ - main->pub.process_data = process_data_crank_post; + mainp->pub.process_data = process_data_crank_post; break; #endif default: @@ -346,14 +347,14 @@ process_data_simple_main (j_decompress_ptr cinfo, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail) { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; JDIMENSION rowgroups_avail; /* Read input data if we haven't filled the main buffer yet */ - if (! main->buffer_full) { - if (! (*cinfo->coef->decompress_data) (cinfo, main->buffer)) + if (! mainp->buffer_full) { + if (! (*cinfo->coef->decompress_data) (cinfo, mainp->buffer)) return; /* suspension forced, can do nothing more */ - main->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ + mainp->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ } /* There are always min_DCT_scaled_size row groups in an iMCU row. */ @@ -364,14 +365,14 @@ process_data_simple_main (j_decompress_ptr cinfo, */ /* Feed the postprocessor */ - (*cinfo->post->post_process_data) (cinfo, main->buffer, - &main->rowgroup_ctr, rowgroups_avail, + (*cinfo->post->post_process_data) (cinfo, mainp->buffer, + &mainp->rowgroup_ctr, rowgroups_avail, output_buf, out_row_ctr, out_rows_avail); /* Has postprocessor consumed all the data yet? If so, mark buffer empty */ - if (main->rowgroup_ctr >= rowgroups_avail) { - main->buffer_full = FALSE; - main->rowgroup_ctr = 0; + if (mainp->rowgroup_ctr >= rowgroups_avail) { + mainp->buffer_full = FALSE; + mainp->rowgroup_ctr = 0; } } @@ -386,15 +387,15 @@ process_data_context_main (j_decompress_ptr cinfo, JSAMPARRAY output_buf, JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail) { - my_main_ptr main = (my_main_ptr) cinfo->main; + my_main_ptr mainp = (my_main_ptr) cinfo->main; /* Read input data if we haven't filled the main buffer yet */ - if (! main->buffer_full) { + if (! mainp->buffer_full) { if (! (*cinfo->coef->decompress_data) (cinfo, - main->xbuffer[main->whichptr])) + mainp->xbuffer[mainp->whichptr])) return; /* suspension forced, can do nothing more */ - main->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ - main->iMCU_row_ctr++; /* count rows received */ + mainp->buffer_full = TRUE; /* OK, we have an iMCU row to work with */ + mainp->iMCU_row_ctr++; /* count rows received */ } /* Postprocessor typically will not swallow all the input data it is handed @@ -402,47 +403,47 @@ process_data_context_main (j_decompress_ptr cinfo, * to exit and restart. This switch lets us keep track of how far we got. * Note that each case falls through to the next on successful completion. */ - switch (main->context_state) { + switch (mainp->context_state) { case CTX_POSTPONED_ROW: /* Call postprocessor using previously set pointers for postponed row */ - (*cinfo->post->post_process_data) (cinfo, main->xbuffer[main->whichptr], - &main->rowgroup_ctr, main->rowgroups_avail, + (*cinfo->post->post_process_data) (cinfo, mainp->xbuffer[mainp->whichptr], + &mainp->rowgroup_ctr, mainp->rowgroups_avail, output_buf, out_row_ctr, out_rows_avail); - if (main->rowgroup_ctr < main->rowgroups_avail) + if (mainp->rowgroup_ctr < mainp->rowgroups_avail) return; /* Need to suspend */ - main->context_state = CTX_PREPARE_FOR_IMCU; + mainp->context_state = CTX_PREPARE_FOR_IMCU; if (*out_row_ctr >= out_rows_avail) return; /* Postprocessor exactly filled output buf */ /*FALLTHROUGH*/ case CTX_PREPARE_FOR_IMCU: /* Prepare to process first M-1 row groups of this iMCU row */ - main->rowgroup_ctr = 0; - main->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_v_scaled_size - 1); + mainp->rowgroup_ctr = 0; + mainp->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_v_scaled_size - 1); /* Check for bottom of image: if so, tweak pointers to "duplicate" * the last sample row, and adjust rowgroups_avail to ignore padding rows. */ - if (main->iMCU_row_ctr == cinfo->total_iMCU_rows) + if (mainp->iMCU_row_ctr == cinfo->total_iMCU_rows) set_bottom_pointers(cinfo); - main->context_state = CTX_PROCESS_IMCU; + mainp->context_state = CTX_PROCESS_IMCU; /*FALLTHROUGH*/ case CTX_PROCESS_IMCU: /* Call postprocessor using previously set pointers */ - (*cinfo->post->post_process_data) (cinfo, main->xbuffer[main->whichptr], - &main->rowgroup_ctr, main->rowgroups_avail, + (*cinfo->post->post_process_data) (cinfo, mainp->xbuffer[mainp->whichptr], + &mainp->rowgroup_ctr, mainp->rowgroups_avail, output_buf, out_row_ctr, out_rows_avail); - if (main->rowgroup_ctr < main->rowgroups_avail) + if (mainp->rowgroup_ctr < mainp->rowgroups_avail) return; /* Need to suspend */ /* After the first iMCU, change wraparound pointers to normal state */ - if (main->iMCU_row_ctr == 1) + if (mainp->iMCU_row_ctr == 1) set_wraparound_pointers(cinfo); /* Prepare to load new iMCU row using other xbuffer list */ - main->whichptr ^= 1; /* 0=>1 or 1=>0 */ - main->buffer_full = FALSE; + mainp->whichptr ^= 1; /* 0=>1 or 1=>0 */ + mainp->buffer_full = FALSE; /* Still need to process last row group of this iMCU row, */ /* which is saved at index M+1 of the other xbuffer */ - main->rowgroup_ctr = (JDIMENSION) (cinfo->min_DCT_v_scaled_size + 1); - main->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_v_scaled_size + 2); - main->context_state = CTX_POSTPONED_ROW; + mainp->rowgroup_ctr = (JDIMENSION) (cinfo->min_DCT_v_scaled_size + 1); + mainp->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_v_scaled_size + 2); + mainp->context_state = CTX_POSTPONED_ROW; } } @@ -475,15 +476,15 @@ process_data_crank_post (j_decompress_ptr cinfo, GLOBAL(void) jinit_d_main_controller (j_decompress_ptr cinfo, boolean need_full_buffer) { - my_main_ptr main; + my_main_ptr mainp; int ci, rgroup, ngroups; jpeg_component_info *compptr; - main = (my_main_ptr) + mainp = (my_main_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, SIZEOF(my_main_controller)); - cinfo->main = (struct jpeg_d_main_controller *) main; - main->pub.start_pass = start_pass_main; + cinfo->main = &mainp->pub; + mainp->pub.start_pass = start_pass_main; if (need_full_buffer) /* shouldn't happen */ ERREXIT(cinfo, JERR_BAD_BUFFER_MODE); @@ -504,9 +505,9 @@ jinit_d_main_controller (j_decompress_ptr cinfo, boolean need_full_buffer) ci++, compptr++) { rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) / cinfo->min_DCT_v_scaled_size; /* height of a row group of component */ - main->buffer[ci] = (*cinfo->mem->alloc_sarray) - ((j_common_ptr) cinfo, JPOOL_IMAGE, - compptr->width_in_blocks * compptr->DCT_h_scaled_size, - (JDIMENSION) (rgroup * ngroups)); + mainp->buffer[ci] = (*cinfo->mem->alloc_sarray) + ((j_common_ptr) cinfo, JPOOL_IMAGE, + compptr->width_in_blocks * ((JDIMENSION) compptr->DCT_h_scaled_size), + (JDIMENSION) (rgroup * ngroups)); } } diff --git a/dll/3rdparty/libjpeg/jdmarker.c b/dll/3rdparty/libjpeg/jdmarker.c index f2a9cc42951..ce8b713c523 100644 --- a/dll/3rdparty/libjpeg/jdmarker.c +++ b/dll/3rdparty/libjpeg/jdmarker.c @@ -2,7 +2,7 @@ * jdmarker.c * * Copyright (C) 1991-1998, Thomas G. Lane. - * Modified 2009 by Guido Vollbeding. + * Modified 2009-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -23,24 +23,24 @@ typedef enum { /* JPEG marker codes */ M_SOF1 = 0xc1, M_SOF2 = 0xc2, M_SOF3 = 0xc3, - + M_SOF5 = 0xc5, M_SOF6 = 0xc6, M_SOF7 = 0xc7, - + M_JPG = 0xc8, M_SOF9 = 0xc9, M_SOF10 = 0xca, M_SOF11 = 0xcb, - + M_SOF13 = 0xcd, M_SOF14 = 0xce, M_SOF15 = 0xcf, - + M_DHT = 0xc4, - + M_DAC = 0xcc, - + M_RST0 = 0xd0, M_RST1 = 0xd1, M_RST2 = 0xd2, @@ -49,7 +49,7 @@ typedef enum { /* JPEG marker codes */ M_RST5 = 0xd5, M_RST6 = 0xd6, M_RST7 = 0xd7, - + M_SOI = 0xd8, M_EOI = 0xd9, M_SOS = 0xda, @@ -58,7 +58,7 @@ typedef enum { /* JPEG marker codes */ M_DRI = 0xdd, M_DHP = 0xde, M_EXP = 0xdf, - + M_APP0 = 0xe0, M_APP1 = 0xe1, M_APP2 = 0xe2, @@ -75,13 +75,14 @@ typedef enum { /* JPEG marker codes */ M_APP13 = 0xed, M_APP14 = 0xee, M_APP15 = 0xef, - + M_JPG0 = 0xf0, + M_JPG8 = 0xf8, M_JPG13 = 0xfd, M_COM = 0xfe, - + M_TEM = 0x01, - + M_ERROR = 0x100 } JPEG_MARKER; @@ -217,6 +218,7 @@ get_soi (j_decompress_ptr cinfo) /* Set initial assumptions for colorspace etc */ cinfo->jpeg_color_space = JCS_UNKNOWN; + cinfo->color_transform = JCT_NONE; cinfo->CCIR601_sampling = FALSE; /* Assume non-CCIR sampling??? */ cinfo->saw_JFIF_marker = FALSE; @@ -240,7 +242,7 @@ get_sof (j_decompress_ptr cinfo, boolean is_baseline, boolean is_prog, /* Process a SOFn marker */ { INT32 length; - int c, ci; + int c, ci, i; jpeg_component_info * compptr; INPUT_VARS(cinfo); @@ -278,11 +280,27 @@ get_sof (j_decompress_ptr cinfo, boolean is_baseline, boolean is_prog, cinfo->comp_info = (jpeg_component_info *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, cinfo->num_components * SIZEOF(jpeg_component_info)); - - for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; - ci++, compptr++) { + + for (ci = 0; ci < cinfo->num_components; ci++) { + INPUT_BYTE(cinfo, c, return FALSE); + /* Check to see whether component id has already been seen */ + /* (in violation of the spec, but unfortunately seen in some */ + /* files). If so, create "fake" component id equal to the */ + /* max id seen so far + 1. */ + for (i = 0, compptr = cinfo->comp_info; i < ci; i++, compptr++) { + if (c == compptr->component_id) { + compptr = cinfo->comp_info; + c = compptr->component_id; + compptr++; + for (i = 1; i < ci; i++, compptr++) { + if (compptr->component_id > c) c = compptr->component_id; + } + c++; + break; + } + } + compptr->component_id = c; compptr->component_index = ci; - INPUT_BYTE(cinfo, compptr->component_id, return FALSE); INPUT_BYTE(cinfo, c, return FALSE); compptr->h_samp_factor = (c >> 4) & 15; compptr->v_samp_factor = (c ) & 15; @@ -305,12 +323,12 @@ get_sos (j_decompress_ptr cinfo) /* Process a SOS marker */ { INT32 length; - int i, ci, n, c, cc; + int c, ci, i, n; jpeg_component_info * compptr; INPUT_VARS(cinfo); if (! cinfo->marker->saw_SOF) - ERREXIT(cinfo, JERR_SOS_NO_SOF); + ERREXITS(cinfo, JERR_SOF_BEFORE, "SOS"); INPUT_2BYTES(cinfo, length, return FALSE); @@ -328,24 +346,38 @@ get_sos (j_decompress_ptr cinfo) /* Collect the component-spec parameters */ for (i = 0; i < n; i++) { - INPUT_BYTE(cinfo, cc, return FALSE); INPUT_BYTE(cinfo, c, return FALSE); - + + /* Detect the case where component id's are not unique, and, if so, */ + /* create a fake component id using the same logic as in get_sof. */ + for (ci = 0; ci < i; ci++) { + if (c == cinfo->cur_comp_info[ci]->component_id) { + c = cinfo->cur_comp_info[0]->component_id; + for (ci = 1; ci < i; ci++) { + compptr = cinfo->cur_comp_info[ci]; + if (compptr->component_id > c) c = compptr->component_id; + } + c++; + break; + } + } + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) { - if (cc == compptr->component_id) + if (c == compptr->component_id) goto id_found; } - ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, cc); + ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, c); id_found: cinfo->cur_comp_info[i] = compptr; + INPUT_BYTE(cinfo, c, return FALSE); compptr->dc_tbl_no = (c >> 4) & 15; compptr->ac_tbl_no = (c ) & 15; - - TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc, + + TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, compptr->component_id, compptr->dc_tbl_no, compptr->ac_tbl_no); } @@ -605,6 +637,68 @@ get_dri (j_decompress_ptr cinfo) } +LOCAL(boolean) +get_lse (j_decompress_ptr cinfo) +/* Process an LSE marker */ +{ + INT32 length; + unsigned int tmp; + int cid; + INPUT_VARS(cinfo); + + if (! cinfo->marker->saw_SOF) + ERREXITS(cinfo, JERR_SOF_BEFORE, "LSE"); + + if (cinfo->num_components < 3) goto bad; + + INPUT_2BYTES(cinfo, length, return FALSE); + + if (length != 24) + ERREXIT(cinfo, JERR_BAD_LENGTH); + + INPUT_BYTE(cinfo, tmp, return FALSE); + if (tmp != 0x0D) /* ID inverse transform specification */ + ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker); + INPUT_2BYTES(cinfo, tmp, return FALSE); + if (tmp != MAXJSAMPLE) goto bad; /* MAXTRANS */ + INPUT_BYTE(cinfo, tmp, return FALSE); + if (tmp != 3) goto bad; /* Nt=3 */ + INPUT_BYTE(cinfo, cid, return FALSE); + if (cid != cinfo->comp_info[1].component_id) goto bad; + INPUT_BYTE(cinfo, cid, return FALSE); + if (cid != cinfo->comp_info[0].component_id) goto bad; + INPUT_BYTE(cinfo, cid, return FALSE); + if (cid != cinfo->comp_info[2].component_id) goto bad; + INPUT_BYTE(cinfo, tmp, return FALSE); + if (tmp != 0x80) goto bad; /* F1: CENTER1=1, NORM1=0 */ + INPUT_2BYTES(cinfo, tmp, return FALSE); + if (tmp != 0) goto bad; /* A(1,1)=0 */ + INPUT_2BYTES(cinfo, tmp, return FALSE); + if (tmp != 0) goto bad; /* A(1,2)=0 */ + INPUT_BYTE(cinfo, tmp, return FALSE); + if (tmp != 0) goto bad; /* F2: CENTER2=0, NORM2=0 */ + INPUT_2BYTES(cinfo, tmp, return FALSE); + if (tmp != 1) goto bad; /* A(2,1)=1 */ + INPUT_2BYTES(cinfo, tmp, return FALSE); + if (tmp != 0) goto bad; /* A(2,2)=0 */ + INPUT_BYTE(cinfo, tmp, return FALSE); + if (tmp != 0) goto bad; /* F3: CENTER3=0, NORM3=0 */ + INPUT_2BYTES(cinfo, tmp, return FALSE); + if (tmp != 1) goto bad; /* A(3,1)=1 */ + INPUT_2BYTES(cinfo, tmp, return FALSE); + if (tmp != 0) { /* A(3,2)=0 */ + bad: + ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL); + } + + /* OK, valid transform that we can handle. */ + cinfo->color_transform = JCT_SUBTRACT_GREEN; + + INPUT_SYNC(cinfo); + return TRUE; +} + + /* * Routines for processing APPn and COM markers. * These are either saved in memory or discarded, per application request. @@ -1059,32 +1153,37 @@ read_markers (j_decompress_ptr cinfo) return JPEG_SUSPENDED; cinfo->unread_marker = 0; /* processed the marker */ return JPEG_REACHED_SOS; - + case M_EOI: TRACEMS(cinfo, 1, JTRC_EOI); cinfo->unread_marker = 0; /* processed the marker */ return JPEG_REACHED_EOI; - + case M_DAC: if (! get_dac(cinfo)) return JPEG_SUSPENDED; break; - + case M_DHT: if (! get_dht(cinfo)) return JPEG_SUSPENDED; break; - + case M_DQT: if (! get_dqt(cinfo)) return JPEG_SUSPENDED; break; - + case M_DRI: if (! get_dri(cinfo)) return JPEG_SUSPENDED; break; - + + case M_JPG8: + if (! get_lse(cinfo)) + return JPEG_SUSPENDED; + break; + case M_APP0: case M_APP1: case M_APP2: @@ -1105,7 +1204,7 @@ read_markers (j_decompress_ptr cinfo) cinfo->unread_marker - (int) M_APP0]) (cinfo)) return JPEG_SUSPENDED; break; - + case M_COM: if (! (*((my_marker_ptr) cinfo->marker)->process_COM) (cinfo)) return JPEG_SUSPENDED; @@ -1314,7 +1413,7 @@ jinit_marker_reader (j_decompress_ptr cinfo) marker = (my_marker_ptr) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, SIZEOF(my_marker_reader)); - cinfo->marker = (struct jpeg_marker_reader *) marker; + cinfo->marker = &marker->pub; /* Initialize public method pointers */ marker->pub.reset_marker_reader = reset_marker_reader; marker->pub.read_markers = read_markers; diff --git a/dll/3rdparty/libjpeg/jdmaster.c b/dll/3rdparty/libjpeg/jdmaster.c index 8c1146e4fe1..fef72a21b49 100644 --- a/dll/3rdparty/libjpeg/jdmaster.c +++ b/dll/3rdparty/libjpeg/jdmaster.c @@ -2,7 +2,7 @@ * jdmaster.c * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 2002-2009 by Guido Vollbeding. + * Modified 2002-2011 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -158,10 +158,8 @@ jpeg_calc_output_dimensions (j_decompress_ptr cinfo) cinfo->out_color_components = 1; break; case JCS_RGB: -#if RGB_PIXELSIZE != 3 cinfo->out_color_components = RGB_PIXELSIZE; break; -#endif /* else share code with YCbCr */ case JCS_YCbCr: cinfo->out_color_components = 3; break; diff --git a/dll/3rdparty/libjpeg/jerror.c b/dll/3rdparty/libjpeg/jerror.c index e258755ba9d..8c0b9e07174 100644 --- a/dll/3rdparty/libjpeg/jerror.c +++ b/dll/3rdparty/libjpeg/jerror.c @@ -2,6 +2,7 @@ * jerror.c * * Copyright (C) 1991-1998, Thomas G. Lane. + * Modified 2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -25,8 +26,6 @@ #include "jerror.h" #ifdef USE_WINDOWS_MESSAGEBOX -#define WIN32_NO_STATUS -#define WIN32_LEAN_AND_MEAN #include #endif @@ -68,7 +67,7 @@ const char * const jpeg_std_message_table[] = { * or jpeg_destroy) at some point. */ -METHODDEF(void) +METHODDEF(noreturn_t) error_exit (j_common_ptr cinfo) { /* Always display the message */ diff --git a/dll/3rdparty/libjpeg/jmemdos.c b/dll/3rdparty/libjpeg/jmemdos.c new file mode 100644 index 00000000000..60b45c69388 --- /dev/null +++ b/dll/3rdparty/libjpeg/jmemdos.c @@ -0,0 +1,638 @@ +/* + * jmemdos.c + * + * Copyright (C) 1992-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * This file provides an MS-DOS-compatible implementation of the system- + * dependent portion of the JPEG memory manager. Temporary data can be + * stored in extended or expanded memory as well as in regular DOS files. + * + * If you use this file, you must be sure that NEED_FAR_POINTERS is defined + * if you compile in a small-data memory model; it should NOT be defined if + * you use a large-data memory model. This file is not recommended if you + * are using a flat-memory-space 386 environment such as DJGCC or Watcom C. + * Also, this code will NOT work if struct fields are aligned on greater than + * 2-byte boundaries. + * + * Based on code contributed by Ge' Weijers. + */ + +/* + * If you have both extended and expanded memory, you may want to change the + * order in which they are tried in jopen_backing_store. On a 286 machine + * expanded memory is usually faster, since extended memory access involves + * an expensive protected-mode-and-back switch. On 386 and better, extended + * memory is usually faster. As distributed, the code tries extended memory + * first (what? not everyone has a 386? :-). + * + * You can disable use of extended/expanded memory entirely by altering these + * definitions or overriding them from the Makefile (eg, -DEMS_SUPPORTED=0). + */ + +#ifndef XMS_SUPPORTED +#define XMS_SUPPORTED 1 +#endif +#ifndef EMS_SUPPORTED +#define EMS_SUPPORTED 1 +#endif + + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jmemsys.h" /* import the system-dependent declarations */ + +#ifndef HAVE_STDLIB_H /* should declare these */ +extern void * malloc JPP((size_t size)); +extern void free JPP((void *ptr)); +extern char * getenv JPP((const char * name)); +#endif + +#ifdef NEED_FAR_POINTERS + +#ifdef __TURBOC__ +/* These definitions work for Borland C (Turbo C) */ +#include /* need farmalloc(), farfree() */ +#define far_malloc(x) farmalloc(x) +#define far_free(x) farfree(x) +#else +/* These definitions work for Microsoft C and compatible compilers */ +#include /* need _fmalloc(), _ffree() */ +#define far_malloc(x) _fmalloc(x) +#define far_free(x) _ffree(x) +#endif + +#else /* not NEED_FAR_POINTERS */ + +#define far_malloc(x) malloc(x) +#define far_free(x) free(x) + +#endif /* NEED_FAR_POINTERS */ + +#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ +#define READ_BINARY "r" +#else +#define READ_BINARY "rb" +#endif + +#ifndef USE_MSDOS_MEMMGR /* make sure user got configuration right */ + You forgot to define USE_MSDOS_MEMMGR in jconfig.h. /* deliberate syntax error */ +#endif + +#if MAX_ALLOC_CHUNK >= 65535L /* make sure jconfig.h got this right */ + MAX_ALLOC_CHUNK should be less than 64K. /* deliberate syntax error */ +#endif + + +/* + * Declarations for assembly-language support routines (see jmemdosa.asm). + * + * The functions are declared "far" as are all their pointer arguments; + * this ensures the assembly source code will work regardless of the + * compiler memory model. We assume "short" is 16 bits, "long" is 32. + */ + +typedef void far * XMSDRIVER; /* actually a pointer to code */ +typedef struct { /* registers for calling XMS driver */ + unsigned short ax, dx, bx; + void far * ds_si; + } XMScontext; +typedef struct { /* registers for calling EMS driver */ + unsigned short ax, dx, bx; + void far * ds_si; + } EMScontext; + +extern short far jdos_open JPP((short far * handle, char far * filename)); +extern short far jdos_close JPP((short handle)); +extern short far jdos_seek JPP((short handle, long offset)); +extern short far jdos_read JPP((short handle, void far * buffer, + unsigned short count)); +extern short far jdos_write JPP((short handle, void far * buffer, + unsigned short count)); +extern void far jxms_getdriver JPP((XMSDRIVER far *)); +extern void far jxms_calldriver JPP((XMSDRIVER, XMScontext far *)); +extern short far jems_available JPP((void)); +extern void far jems_calldriver JPP((EMScontext far *)); + + +/* + * Selection of a file name for a temporary file. + * This is highly system-dependent, and you may want to customize it. + */ + +static int next_file_num; /* to distinguish among several temp files */ + +LOCAL(void) +select_file_name (char * fname) +{ + const char * env; + char * ptr; + FILE * tfile; + + /* Keep generating file names till we find one that's not in use */ + for (;;) { + /* Get temp directory name from environment TMP or TEMP variable; + * if none, use "." + */ + if ((env = (const char *) getenv("TMP")) == NULL) + if ((env = (const char *) getenv("TEMP")) == NULL) + env = "."; + if (*env == '\0') /* null string means "." */ + env = "."; + ptr = fname; /* copy name to fname */ + while (*env != '\0') + *ptr++ = *env++; + if (ptr[-1] != '\\' && ptr[-1] != '/') + *ptr++ = '\\'; /* append backslash if not in env variable */ + /* Append a suitable file name */ + next_file_num++; /* advance counter */ + sprintf(ptr, "JPG%03d.TMP", next_file_num); + /* Probe to see if file name is already in use */ + if ((tfile = fopen(fname, READ_BINARY)) == NULL) + break; + fclose(tfile); /* oops, it's there; close tfile & try again */ + } +} + + +/* + * Near-memory allocation and freeing are controlled by the regular library + * routines malloc() and free(). + */ + +GLOBAL(void *) +jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void *) malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) +{ + free(object); +} + + +/* + * "Large" objects are allocated in far memory, if possible + */ + +GLOBAL(void FAR *) +jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void FAR *) far_malloc(sizeofobject); +} + +GLOBAL(void) +jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) +{ + far_free(object); +} + + +/* + * This routine computes the total memory space available for allocation. + * It's impossible to do this in a portable way; our current solution is + * to make the user tell us (with a default value set at compile time). + * If you can actually get the available space, it's a good idea to subtract + * a slop factor of 5% or so. + */ + +#ifndef DEFAULT_MAX_MEM /* so can override from makefile */ +#define DEFAULT_MAX_MEM 300000L /* for total usage about 450K */ +#endif + +GLOBAL(long) +jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, + long max_bytes_needed, long already_allocated) +{ + return cinfo->mem->max_memory_to_use - already_allocated; +} + + +/* + * Backing store (temporary file) management. + * Backing store objects are only used when the value returned by + * jpeg_mem_available is less than the total space needed. You can dispense + * with these routines if you have plenty of virtual memory; see jmemnobs.c. + */ + +/* + * For MS-DOS we support three types of backing storage: + * 1. Conventional DOS files. We access these by direct DOS calls rather + * than via the stdio package. This provides a bit better performance, + * but the real reason is that the buffers to be read or written are FAR. + * The stdio library for small-data memory models can't cope with that. + * 2. Extended memory, accessed per the XMS V2.0 specification. + * 3. Expanded memory, accessed per the LIM/EMS 4.0 specification. + * You'll need copies of those specs to make sense of the related code. + * The specs are available by Internet FTP from the SIMTEL archives + * (oak.oakland.edu and its various mirror sites). See files + * pub/msdos/microsoft/xms20.arc and pub/msdos/info/limems41.zip. + */ + + +/* + * Access methods for a DOS file. + */ + + +METHODDEF(void) +read_file_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + if (jdos_seek(info->handle.file_handle, file_offset)) + ERREXIT(cinfo, JERR_TFILE_SEEK); + /* Since MAX_ALLOC_CHUNK is less than 64K, byte_count will be too. */ + if (byte_count > 65535L) /* safety check */ + ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK); + if (jdos_read(info->handle.file_handle, buffer_address, + (unsigned short) byte_count)) + ERREXIT(cinfo, JERR_TFILE_READ); +} + + +METHODDEF(void) +write_file_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + if (jdos_seek(info->handle.file_handle, file_offset)) + ERREXIT(cinfo, JERR_TFILE_SEEK); + /* Since MAX_ALLOC_CHUNK is less than 64K, byte_count will be too. */ + if (byte_count > 65535L) /* safety check */ + ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK); + if (jdos_write(info->handle.file_handle, buffer_address, + (unsigned short) byte_count)) + ERREXIT(cinfo, JERR_TFILE_WRITE); +} + + +METHODDEF(void) +close_file_store (j_common_ptr cinfo, backing_store_ptr info) +{ + jdos_close(info->handle.file_handle); /* close the file */ + remove(info->temp_name); /* delete the file */ +/* If your system doesn't have remove(), try unlink() instead. + * remove() is the ANSI-standard name for this function, but + * unlink() was more common in pre-ANSI systems. + */ + TRACEMSS(cinfo, 1, JTRC_TFILE_CLOSE, info->temp_name); +} + + +LOCAL(boolean) +open_file_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + short handle; + + select_file_name(info->temp_name); + if (jdos_open((short far *) & handle, (char far *) info->temp_name)) { + /* might as well exit since jpeg_open_backing_store will fail anyway */ + ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); + return FALSE; + } + info->handle.file_handle = handle; + info->read_backing_store = read_file_store; + info->write_backing_store = write_file_store; + info->close_backing_store = close_file_store; + TRACEMSS(cinfo, 1, JTRC_TFILE_OPEN, info->temp_name); + return TRUE; /* succeeded */ +} + + +/* + * Access methods for extended memory. + */ + +#if XMS_SUPPORTED + +static XMSDRIVER xms_driver; /* saved address of XMS driver */ + +typedef union { /* either long offset or real-mode pointer */ + long offset; + void far * ptr; + } XMSPTR; + +typedef struct { /* XMS move specification structure */ + long length; + XMSH src_handle; + XMSPTR src; + XMSH dst_handle; + XMSPTR dst; + } XMSspec; + +#define ODD(X) (((X) & 1L) != 0) + + +METHODDEF(void) +read_xms_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + XMScontext ctx; + XMSspec spec; + char endbuffer[2]; + + /* The XMS driver can't cope with an odd length, so handle the last byte + * specially if byte_count is odd. We don't expect this to be common. + */ + + spec.length = byte_count & (~ 1L); + spec.src_handle = info->handle.xms_handle; + spec.src.offset = file_offset; + spec.dst_handle = 0; + spec.dst.ptr = buffer_address; + + ctx.ds_si = (void far *) & spec; + ctx.ax = 0x0b00; /* EMB move */ + jxms_calldriver(xms_driver, (XMScontext far *) & ctx); + if (ctx.ax != 1) + ERREXIT(cinfo, JERR_XMS_READ); + + if (ODD(byte_count)) { + read_xms_store(cinfo, info, (void FAR *) endbuffer, + file_offset + byte_count - 1L, 2L); + ((char FAR *) buffer_address)[byte_count - 1L] = endbuffer[0]; + } +} + + +METHODDEF(void) +write_xms_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + XMScontext ctx; + XMSspec spec; + char endbuffer[2]; + + /* The XMS driver can't cope with an odd length, so handle the last byte + * specially if byte_count is odd. We don't expect this to be common. + */ + + spec.length = byte_count & (~ 1L); + spec.src_handle = 0; + spec.src.ptr = buffer_address; + spec.dst_handle = info->handle.xms_handle; + spec.dst.offset = file_offset; + + ctx.ds_si = (void far *) & spec; + ctx.ax = 0x0b00; /* EMB move */ + jxms_calldriver(xms_driver, (XMScontext far *) & ctx); + if (ctx.ax != 1) + ERREXIT(cinfo, JERR_XMS_WRITE); + + if (ODD(byte_count)) { + read_xms_store(cinfo, info, (void FAR *) endbuffer, + file_offset + byte_count - 1L, 2L); + endbuffer[0] = ((char FAR *) buffer_address)[byte_count - 1L]; + write_xms_store(cinfo, info, (void FAR *) endbuffer, + file_offset + byte_count - 1L, 2L); + } +} + + +METHODDEF(void) +close_xms_store (j_common_ptr cinfo, backing_store_ptr info) +{ + XMScontext ctx; + + ctx.dx = info->handle.xms_handle; + ctx.ax = 0x0a00; + jxms_calldriver(xms_driver, (XMScontext far *) & ctx); + TRACEMS1(cinfo, 1, JTRC_XMS_CLOSE, info->handle.xms_handle); + /* we ignore any error return from the driver */ +} + + +LOCAL(boolean) +open_xms_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + XMScontext ctx; + + /* Get address of XMS driver */ + jxms_getdriver((XMSDRIVER far *) & xms_driver); + if (xms_driver == NULL) + return FALSE; /* no driver to be had */ + + /* Get version number, must be >= 2.00 */ + ctx.ax = 0x0000; + jxms_calldriver(xms_driver, (XMScontext far *) & ctx); + if (ctx.ax < (unsigned short) 0x0200) + return FALSE; + + /* Try to get space (expressed in kilobytes) */ + ctx.dx = (unsigned short) ((total_bytes_needed + 1023L) >> 10); + ctx.ax = 0x0900; + jxms_calldriver(xms_driver, (XMScontext far *) & ctx); + if (ctx.ax != 1) + return FALSE; + + /* Succeeded, save the handle and away we go */ + info->handle.xms_handle = ctx.dx; + info->read_backing_store = read_xms_store; + info->write_backing_store = write_xms_store; + info->close_backing_store = close_xms_store; + TRACEMS1(cinfo, 1, JTRC_XMS_OPEN, ctx.dx); + return TRUE; /* succeeded */ +} + +#endif /* XMS_SUPPORTED */ + + +/* + * Access methods for expanded memory. + */ + +#if EMS_SUPPORTED + +/* The EMS move specification structure requires word and long fields aligned + * at odd byte boundaries. Some compilers will align struct fields at even + * byte boundaries. While it's usually possible to force byte alignment, + * that causes an overall performance penalty and may pose problems in merging + * JPEG into a larger application. Instead we accept some rather dirty code + * here. Note this code would fail if the hardware did not allow odd-byte + * word & long accesses, but all 80x86 CPUs do. + */ + +typedef void far * EMSPTR; + +typedef union { /* EMS move specification structure */ + long length; /* It's easy to access first 4 bytes */ + char bytes[18]; /* Misaligned fields in here! */ + } EMSspec; + +/* Macros for accessing misaligned fields */ +#define FIELD_AT(spec,offset,type) (*((type *) &(spec.bytes[offset]))) +#define SRC_TYPE(spec) FIELD_AT(spec,4,char) +#define SRC_HANDLE(spec) FIELD_AT(spec,5,EMSH) +#define SRC_OFFSET(spec) FIELD_AT(spec,7,unsigned short) +#define SRC_PAGE(spec) FIELD_AT(spec,9,unsigned short) +#define SRC_PTR(spec) FIELD_AT(spec,7,EMSPTR) +#define DST_TYPE(spec) FIELD_AT(spec,11,char) +#define DST_HANDLE(spec) FIELD_AT(spec,12,EMSH) +#define DST_OFFSET(spec) FIELD_AT(spec,14,unsigned short) +#define DST_PAGE(spec) FIELD_AT(spec,16,unsigned short) +#define DST_PTR(spec) FIELD_AT(spec,14,EMSPTR) + +#define EMSPAGESIZE 16384L /* gospel, see the EMS specs */ + +#define HIBYTE(W) (((W) >> 8) & 0xFF) +#define LOBYTE(W) ((W) & 0xFF) + + +METHODDEF(void) +read_ems_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + EMScontext ctx; + EMSspec spec; + + spec.length = byte_count; + SRC_TYPE(spec) = 1; + SRC_HANDLE(spec) = info->handle.ems_handle; + SRC_PAGE(spec) = (unsigned short) (file_offset / EMSPAGESIZE); + SRC_OFFSET(spec) = (unsigned short) (file_offset % EMSPAGESIZE); + DST_TYPE(spec) = 0; + DST_HANDLE(spec) = 0; + DST_PTR(spec) = buffer_address; + + ctx.ds_si = (void far *) & spec; + ctx.ax = 0x5700; /* move memory region */ + jems_calldriver((EMScontext far *) & ctx); + if (HIBYTE(ctx.ax) != 0) + ERREXIT(cinfo, JERR_EMS_READ); +} + + +METHODDEF(void) +write_ems_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + EMScontext ctx; + EMSspec spec; + + spec.length = byte_count; + SRC_TYPE(spec) = 0; + SRC_HANDLE(spec) = 0; + SRC_PTR(spec) = buffer_address; + DST_TYPE(spec) = 1; + DST_HANDLE(spec) = info->handle.ems_handle; + DST_PAGE(spec) = (unsigned short) (file_offset / EMSPAGESIZE); + DST_OFFSET(spec) = (unsigned short) (file_offset % EMSPAGESIZE); + + ctx.ds_si = (void far *) & spec; + ctx.ax = 0x5700; /* move memory region */ + jems_calldriver((EMScontext far *) & ctx); + if (HIBYTE(ctx.ax) != 0) + ERREXIT(cinfo, JERR_EMS_WRITE); +} + + +METHODDEF(void) +close_ems_store (j_common_ptr cinfo, backing_store_ptr info) +{ + EMScontext ctx; + + ctx.ax = 0x4500; + ctx.dx = info->handle.ems_handle; + jems_calldriver((EMScontext far *) & ctx); + TRACEMS1(cinfo, 1, JTRC_EMS_CLOSE, info->handle.ems_handle); + /* we ignore any error return from the driver */ +} + + +LOCAL(boolean) +open_ems_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + EMScontext ctx; + + /* Is EMS driver there? */ + if (! jems_available()) + return FALSE; + + /* Get status, make sure EMS is OK */ + ctx.ax = 0x4000; + jems_calldriver((EMScontext far *) & ctx); + if (HIBYTE(ctx.ax) != 0) + return FALSE; + + /* Get version, must be >= 4.0 */ + ctx.ax = 0x4600; + jems_calldriver((EMScontext far *) & ctx); + if (HIBYTE(ctx.ax) != 0 || LOBYTE(ctx.ax) < 0x40) + return FALSE; + + /* Try to allocate requested space */ + ctx.ax = 0x4300; + ctx.bx = (unsigned short) ((total_bytes_needed + EMSPAGESIZE-1L) / EMSPAGESIZE); + jems_calldriver((EMScontext far *) & ctx); + if (HIBYTE(ctx.ax) != 0) + return FALSE; + + /* Succeeded, save the handle and away we go */ + info->handle.ems_handle = ctx.dx; + info->read_backing_store = read_ems_store; + info->write_backing_store = write_ems_store; + info->close_backing_store = close_ems_store; + TRACEMS1(cinfo, 1, JTRC_EMS_OPEN, ctx.dx); + return TRUE; /* succeeded */ +} + +#endif /* EMS_SUPPORTED */ + + +/* + * Initial opening of a backing-store object. + */ + +GLOBAL(void) +jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + /* Try extended memory, then expanded memory, then regular file. */ +#if XMS_SUPPORTED + if (open_xms_store(cinfo, info, total_bytes_needed)) + return; +#endif +#if EMS_SUPPORTED + if (open_ems_store(cinfo, info, total_bytes_needed)) + return; +#endif + if (open_file_store(cinfo, info, total_bytes_needed)) + return; + ERREXITS(cinfo, JERR_TFILE_CREATE, ""); +} + + +/* + * These routines take care of any system-dependent initialization and + * cleanup required. + */ + +GLOBAL(long) +jpeg_mem_init (j_common_ptr cinfo) +{ + next_file_num = 0; /* initialize temp file name generator */ + return DEFAULT_MAX_MEM; /* default for max_memory_to_use */ +} + +GLOBAL(void) +jpeg_mem_term (j_common_ptr cinfo) +{ + /* Microsoft C, at least in v6.00A, will not successfully reclaim freed + * blocks of size > 32Kbytes unless we give it a kick in the rear, like so: + */ +#ifdef NEED_FHEAPMIN + _fheapmin(); +#endif +} diff --git a/dll/3rdparty/libjpeg/jmemmac.c b/dll/3rdparty/libjpeg/jmemmac.c new file mode 100644 index 00000000000..106f9bea05d --- /dev/null +++ b/dll/3rdparty/libjpeg/jmemmac.c @@ -0,0 +1,289 @@ +/* + * jmemmac.c + * + * Copyright (C) 1992-1997, Thomas G. Lane. + * This file is part of the Independent JPEG Group's software. + * For conditions of distribution and use, see the accompanying README file. + * + * jmemmac.c provides an Apple Macintosh implementation of the system- + * dependent portion of the JPEG memory manager. + * + * If you use jmemmac.c, then you must define USE_MAC_MEMMGR in the + * JPEG_INTERNALS part of jconfig.h. + * + * jmemmac.c uses the Macintosh toolbox routines NewPtr and DisposePtr + * instead of malloc and free. It accurately determines the amount of + * memory available by using CompactMem. Notice that if left to its + * own devices, this code can chew up all available space in the + * application's zone, with the exception of the rather small "slop" + * factor computed in jpeg_mem_available(). The application can ensure + * that more space is left over by reducing max_memory_to_use. + * + * Large images are swapped to disk using temporary files and System 7.0+'s + * temporary folder functionality. + * + * Note that jmemmac.c depends on two features of MacOS that were first + * introduced in System 7: FindFolder and the FSSpec-based calls. + * If your application uses jmemmac.c and is run under System 6 or earlier, + * and the jpeg library decides it needs a temporary file, it will abort, + * printing error messages about requiring System 7. (If no temporary files + * are created, it will run fine.) + * + * If you want to use jmemmac.c in an application that might be used with + * System 6 or earlier, then you should remove dependencies on FindFolder + * and the FSSpec calls. You will need to replace FindFolder with some + * other mechanism for finding a place to put temporary files, and you + * should replace the FSSpec calls with their HFS equivalents: + * + * FSpDelete -> HDelete + * FSpGetFInfo -> HGetFInfo + * FSpCreate -> HCreate + * FSpOpenDF -> HOpen *** Note: not HOpenDF *** + * FSMakeFSSpec -> (fill in spec by hand.) + * + * (Use HOpen instead of HOpenDF. HOpen is just a glue-interface to PBHOpen, + * which is on all HFS macs. HOpenDF is a System 7 addition which avoids the + * ages-old problem of names starting with a period.) + * + * Contributed by Sam Bushell (jsam@iagu.on.net) and + * Dan Gildor (gyld@in-touch.com). + */ + +#define JPEG_INTERNALS +#include "jinclude.h" +#include "jpeglib.h" +#include "jmemsys.h" /* import the system-dependent declarations */ + +#ifndef USE_MAC_MEMMGR /* make sure user got configuration right */ + You forgot to define USE_MAC_MEMMGR in jconfig.h. /* deliberate syntax error */ +#endif + +#include /* we use the MacOS memory manager */ +#include /* we use the MacOS File stuff */ +#include /* we use the MacOS HFS stuff */ +#include /* for smSystemScript */ +#include /* we use Gestalt to test for specific functionality */ + +#ifndef TEMP_FILE_NAME /* can override from jconfig.h or Makefile */ +#define TEMP_FILE_NAME "JPG%03d.TMP" +#endif + +static int next_file_num; /* to distinguish among several temp files */ + + +/* + * Memory allocation and freeing are controlled by the MacOS library + * routines NewPtr() and DisposePtr(), which allocate fixed-address + * storage. Unfortunately, the IJG library isn't smart enough to cope + * with relocatable storage. + */ + +GLOBAL(void *) +jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void *) NewPtr(sizeofobject); +} + +GLOBAL(void) +jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) +{ + DisposePtr((Ptr) object); +} + + +/* + * "Large" objects are treated the same as "small" ones. + * NB: we include FAR keywords in the routine declarations simply for + * consistency with the rest of the IJG code; FAR should expand to empty + * on rational architectures like the Mac. + */ + +GLOBAL(void FAR *) +jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) +{ + return (void FAR *) NewPtr(sizeofobject); +} + +GLOBAL(void) +jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) +{ + DisposePtr((Ptr) object); +} + + +/* + * This routine computes the total memory space available for allocation. + */ + +GLOBAL(long) +jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, + long max_bytes_needed, long already_allocated) +{ + long limit = cinfo->mem->max_memory_to_use - already_allocated; + long slop, mem; + + /* Don't ask for more than what application has told us we may use */ + if (max_bytes_needed > limit && limit > 0) + max_bytes_needed = limit; + /* Find whether there's a big enough free block in the heap. + * CompactMem tries to create a contiguous block of the requested size, + * and then returns the size of the largest free block (which could be + * much more or much less than we asked for). + * We add some slop to ensure we don't use up all available memory. + */ + slop = max_bytes_needed / 16 + 32768L; + mem = CompactMem(max_bytes_needed + slop) - slop; + if (mem < 0) + mem = 0; /* sigh, couldn't even get the slop */ + /* Don't take more than the application says we can have */ + if (mem > limit && limit > 0) + mem = limit; + return mem; +} + + +/* + * Backing store (temporary file) management. + * Backing store objects are only used when the value returned by + * jpeg_mem_available is less than the total space needed. You can dispense + * with these routines if you have plenty of virtual memory; see jmemnobs.c. + */ + + +METHODDEF(void) +read_backing_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + long bytes = byte_count; + long retVal; + + if ( SetFPos ( info->temp_file, fsFromStart, file_offset ) != noErr ) + ERREXIT(cinfo, JERR_TFILE_SEEK); + + retVal = FSRead ( info->temp_file, &bytes, + (unsigned char *) buffer_address ); + if ( retVal != noErr || bytes != byte_count ) + ERREXIT(cinfo, JERR_TFILE_READ); +} + + +METHODDEF(void) +write_backing_store (j_common_ptr cinfo, backing_store_ptr info, + void FAR * buffer_address, + long file_offset, long byte_count) +{ + long bytes = byte_count; + long retVal; + + if ( SetFPos ( info->temp_file, fsFromStart, file_offset ) != noErr ) + ERREXIT(cinfo, JERR_TFILE_SEEK); + + retVal = FSWrite ( info->temp_file, &bytes, + (unsigned char *) buffer_address ); + if ( retVal != noErr || bytes != byte_count ) + ERREXIT(cinfo, JERR_TFILE_WRITE); +} + + +METHODDEF(void) +close_backing_store (j_common_ptr cinfo, backing_store_ptr info) +{ + FSClose ( info->temp_file ); + FSpDelete ( &(info->tempSpec) ); +} + + +/* + * Initial opening of a backing-store object. + * + * This version uses FindFolder to find the Temporary Items folder, + * and puts the temporary file in there. + */ + +GLOBAL(void) +jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, + long total_bytes_needed) +{ + short tmpRef, vRefNum; + long dirID; + FInfo finderInfo; + FSSpec theSpec; + Str255 fName; + OSErr osErr; + long gestaltResponse = 0; + + /* Check that FSSpec calls are available. */ + osErr = Gestalt( gestaltFSAttr, &gestaltResponse ); + if ( ( osErr != noErr ) + || !( gestaltResponse & (1<temp_name, TEMP_FILE_NAME, next_file_num); + strcpy ( (Ptr)fName+1, info->temp_name ); + *fName = strlen (info->temp_name); + osErr = FSMakeFSSpec ( vRefNum, dirID, fName, &theSpec ); + + if ( (osErr = FSpGetFInfo ( &theSpec, &finderInfo ) ) != noErr ) + break; + } + + osErr = FSpCreate ( &theSpec, '????', '????', smSystemScript ); + if ( osErr != noErr ) + ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); + + osErr = FSpOpenDF ( &theSpec, fsRdWrPerm, &(info->temp_file) ); + if ( osErr != noErr ) + ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); + + info->tempSpec = theSpec; + + info->read_backing_store = read_backing_store; + info->write_backing_store = write_backing_store; + info->close_backing_store = close_backing_store; + TRACEMSS(cinfo, 1, JTRC_TFILE_OPEN, info->temp_name); +} + + +/* + * These routines take care of any system-dependent initialization and + * cleanup required. + */ + +GLOBAL(long) +jpeg_mem_init (j_common_ptr cinfo) +{ + next_file_num = 0; + + /* max_memory_to_use will be initialized to FreeMem()'s result; + * the calling application might later reduce it, for example + * to leave room to invoke multiple JPEG objects. + * Note that FreeMem returns the total number of free bytes; + * it may not be possible to allocate a single block of this size. + */ + return FreeMem(); +} + +GLOBAL(void) +jpeg_mem_term (j_common_ptr cinfo) +{ + /* no work */ +} diff --git a/dll/3rdparty/libjpeg/jmemmgr.c b/dll/3rdparty/libjpeg/jmemmgr.c index d801b322da0..0a137cdde43 100644 --- a/dll/3rdparty/libjpeg/jmemmgr.c +++ b/dll/3rdparty/libjpeg/jmemmgr.c @@ -2,6 +2,7 @@ * jmemmgr.c * * Copyright (C) 1991-1997, Thomas G. Lane. + * Modified 2011-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -213,7 +214,7 @@ print_mem_stats (j_common_ptr cinfo, int pool_id) #endif /* MEM_STATS */ -LOCAL(void) +LOCAL(noreturn_t) out_of_memory (j_common_ptr cinfo, int which) /* Report an out-of-memory error and stop execution */ /* If we compiled MEM_STATS support, report alloc requests before dying */ @@ -821,7 +822,7 @@ access_virt_sarray (j_common_ptr cinfo, jvirt_sarray_ptr ptr, undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */ end_row -= ptr->cur_start_row; while (undef_row < end_row) { - jzero_far((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); + FMEMZERO((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); undef_row++; } } else { @@ -906,7 +907,7 @@ access_virt_barray (j_common_ptr cinfo, jvirt_barray_ptr ptr, undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */ end_row -= ptr->cur_start_row; while (undef_row < end_row) { - jzero_far((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); + FMEMZERO((void FAR *) ptr->mem_buffer[undef_row], bytesperrow); undef_row++; } } else { diff --git a/dll/3rdparty/libjpeg/jpegtran.c b/dll/3rdparty/libjpeg/jpegtran.c index 8cb3d807fbb..7e8ef0ce4d6 100644 --- a/dll/3rdparty/libjpeg/jpegtran.c +++ b/dll/3rdparty/libjpeg/jpegtran.c @@ -1,7 +1,7 @@ /* * jpegtran.c * - * Copyright (C) 1995-2010, Thomas G. Lane, Guido Vollbeding. + * Copyright (C) 1995-2012, Thomas G. Lane, Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -78,14 +78,14 @@ usage (void) fprintf(stderr, " -trim Drop non-transformable edge blocks\n"); #endif fprintf(stderr, "Switches for advanced users:\n"); +#ifdef C_ARITH_CODING_SUPPORTED + fprintf(stderr, " -arithmetic Use arithmetic coding\n"); +#endif fprintf(stderr, " -restart N Set restart interval in rows, or in blocks with B\n"); fprintf(stderr, " -maxmemory N Maximum memory to use (in kbytes)\n"); fprintf(stderr, " -outfile name Specify name for output file\n"); fprintf(stderr, " -verbose or -debug Emit debug output\n"); fprintf(stderr, "Switches for wizards:\n"); -#ifdef C_ARITH_CODING_SUPPORTED - fprintf(stderr, " -arithmetic Use arithmetic coding\n"); -#endif #ifdef C_MULTISCAN_FILES_SUPPORTED fprintf(stderr, " -scans file Create multi-scan JPEG per script file\n"); #endif @@ -467,7 +467,7 @@ main (int argc, char **argv) /* Adjust default decompression parameters */ if (scaleoption != NULL) - if (sscanf(scaleoption, "%d/%d", + if (sscanf(scaleoption, "%u/%u", &srcinfo.scale_num, &srcinfo.scale_denom) < 1) usage(); diff --git a/dll/3rdparty/libjpeg/jquant1.c b/dll/3rdparty/libjpeg/jquant1.c index b2f96aa15d2..9d11f70669b 100644 --- a/dll/3rdparty/libjpeg/jquant1.c +++ b/dll/3rdparty/libjpeg/jquant1.c @@ -2,6 +2,7 @@ * jquant1.c * * Copyright (C) 1991-1996, Thomas G. Lane. + * Modified 2011 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -530,8 +531,8 @@ quantize_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, for (row = 0; row < num_rows; row++) { /* Initialize output values to 0 so can process components separately */ - jzero_far((void FAR *) output_buf[row], - (size_t) (width * SIZEOF(JSAMPLE))); + FMEMZERO((void FAR *) output_buf[row], + (size_t) (width * SIZEOF(JSAMPLE))); row_index = cquantize->row_index; for (ci = 0; ci < nc; ci++) { input_ptr = input_buf[row] + ci; @@ -635,8 +636,8 @@ quantize_fs_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf, for (row = 0; row < num_rows; row++) { /* Initialize output values to 0 so can process components separately */ - jzero_far((void FAR *) output_buf[row], - (size_t) (width * SIZEOF(JSAMPLE))); + FMEMZERO((void FAR *) output_buf[row], + (size_t) (width * SIZEOF(JSAMPLE))); for (ci = 0; ci < nc; ci++) { input_ptr = input_buf[row] + ci; output_ptr = output_buf[row]; @@ -781,7 +782,7 @@ start_pass_1_quant (j_decompress_ptr cinfo, boolean is_pre_scan) /* Initialize the propagated errors to zero. */ arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR)); for (i = 0; i < cinfo->out_color_components; i++) - jzero_far((void FAR *) cquantize->fserrors[i], arraysize); + FMEMZERO((void FAR *) cquantize->fserrors[i], arraysize); break; default: ERREXIT(cinfo, JERR_NOT_COMPILED); diff --git a/dll/3rdparty/libjpeg/jquant2.c b/dll/3rdparty/libjpeg/jquant2.c index af601e334b2..38fc2af7a55 100644 --- a/dll/3rdparty/libjpeg/jquant2.c +++ b/dll/3rdparty/libjpeg/jquant2.c @@ -2,6 +2,7 @@ * jquant2.c * * Copyright (C) 1991-1996, Thomas G. Lane. + * Modified 2011 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -1203,7 +1204,7 @@ start_pass_2_quant (j_decompress_ptr cinfo, boolean is_pre_scan) cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize); /* Initialize the propagated errors to zero. */ - jzero_far((void FAR *) cquantize->fserrors, arraysize); + FMEMZERO((void FAR *) cquantize->fserrors, arraysize); /* Make the error-limit table if we didn't already. */ if (cquantize->error_limiter == NULL) init_error_limit(cinfo); @@ -1214,8 +1215,8 @@ start_pass_2_quant (j_decompress_ptr cinfo, boolean is_pre_scan) /* Zero the histogram or inverse color map, if necessary */ if (cquantize->needs_zeroed) { for (i = 0; i < HIST_C0_ELEMS; i++) { - jzero_far((void FAR *) histogram[i], - HIST_C1_ELEMS*HIST_C2_ELEMS * SIZEOF(histcell)); + FMEMZERO((void FAR *) histogram[i], + HIST_C1_ELEMS*HIST_C2_ELEMS * SIZEOF(histcell)); } cquantize->needs_zeroed = FALSE; } diff --git a/dll/3rdparty/libjpeg/jutils.c b/dll/3rdparty/libjpeg/jutils.c index 04351797cd7..5b16b6d03c0 100644 --- a/dll/3rdparty/libjpeg/jutils.c +++ b/dll/3rdparty/libjpeg/jutils.c @@ -2,7 +2,7 @@ * jutils.c * * Copyright (C) 1991-1996, Thomas G. Lane. - * Modified 2009 by Guido Vollbeding. + * Modified 2009-2011 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -148,13 +148,27 @@ jround_up (long a, long b) * is not all that great, because these routines aren't very heavily used.) */ -#ifndef NEED_FAR_POINTERS /* normal case, same as regular macros */ +#ifndef NEED_FAR_POINTERS /* normal case, same as regular macro */ #define FMEMCOPY(dest,src,size) MEMCOPY(dest,src,size) -#define FMEMZERO(target,size) MEMZERO(target,size) #else /* 80x86 case, define if we can */ #ifdef USE_FMEM #define FMEMCOPY(dest,src,size) _fmemcpy((void FAR *)(dest), (const void FAR *)(src), (size_t)(size)) -#define FMEMZERO(target,size) _fmemset((void FAR *)(target), 0, (size_t)(size)) +#else +/* This function is for use by the FMEMZERO macro defined in jpegint.h. + * Do not call this function directly, use the FMEMZERO macro instead. + */ +GLOBAL(void) +jzero_far (void FAR * target, size_t bytestozero) +/* Zero out a chunk of FAR memory. */ +/* This might be sample-array data, block-array data, or alloc_large data. */ +{ + register char FAR * ptr = (char FAR *) target; + register size_t count; + + for (count = bytestozero; count > 0; count--) { + *ptr++ = 0; + } +} #endif #endif @@ -211,21 +225,3 @@ jcopy_block_row (JBLOCKROW input_row, JBLOCKROW output_row, } #endif } - - -GLOBAL(void) -jzero_far (void FAR * target, size_t bytestozero) -/* Zero out a chunk of FAR memory. */ -/* This might be sample-array data, block-array data, or alloc_large data. */ -{ -#ifdef FMEMZERO - FMEMZERO(target, bytestozero); -#else - register char FAR * ptr = (char FAR *) target; - register size_t count; - - for (count = bytestozero; count > 0; count--) { - *ptr++ = 0; - } -#endif -} diff --git a/dll/3rdparty/libjpeg/transupp.c b/dll/3rdparty/libjpeg/transupp.c index 4060544828e..d0013cce8ce 100644 --- a/dll/3rdparty/libjpeg/transupp.c +++ b/dll/3rdparty/libjpeg/transupp.c @@ -1,7 +1,7 @@ /* * transupp.c * - * Copyright (C) 1997-2009, Thomas G. Lane, Guido Vollbeding. + * Copyright (C) 1997-2012, Thomas G. Lane, Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -771,7 +771,7 @@ jt_read_integer (const char ** strptr, JDIMENSION * result) * The routine returns TRUE if the spec string is valid, FALSE if not. * * The crop spec string should have the format - * x{+-}{+-} + * [f]x[f]{+-}{+-} * where width, height, xoffset, and yoffset are unsigned integers. * Each of the elements can be omitted to indicate a default value. * (A weakness of this style is that it is not possible to omit xoffset @@ -793,14 +793,22 @@ jtransform_parse_crop_spec (jpeg_transform_info *info, const char *spec) /* fetch width */ if (! jt_read_integer(&spec, &info->crop_width)) return FALSE; - info->crop_width_set = JCROP_POS; + if (*spec == 'f' || *spec == 'F') { + spec++; + info->crop_width_set = JCROP_FORCE; + } else + info->crop_width_set = JCROP_POS; } - if (*spec == 'x' || *spec == 'X') { + if (*spec == 'x' || *spec == 'X') { /* fetch height */ spec++; if (! jt_read_integer(&spec, &info->crop_height)) return FALSE; - info->crop_height_set = JCROP_POS; + if (*spec == 'f' || *spec == 'F') { + spec++; + info->crop_height_set = JCROP_FORCE; + } else + info->crop_height_set = JCROP_POS; } if (*spec == '+' || *spec == '-') { /* fetch xoffset */ @@ -980,10 +988,16 @@ jtransform_request_workspace (j_decompress_ptr srcinfo, else yoffset = info->crop_yoffset; /* Now adjust so that upper left corner falls at an iMCU boundary */ - info->output_width = - info->crop_width + (xoffset % info->iMCU_sample_width); - info->output_height = - info->crop_height + (yoffset % info->iMCU_sample_height); + if (info->crop_width_set == JCROP_FORCE) + info->output_width = info->crop_width; + else + info->output_width = + info->crop_width + (xoffset % info->iMCU_sample_width); + if (info->crop_height_set == JCROP_FORCE) + info->output_height = info->crop_height; + else + info->output_height = + info->crop_height + (yoffset % info->iMCU_sample_height); /* Save x/y offsets measured in iMCUs */ info->x_crop_offset = xoffset / info->iMCU_sample_width; info->y_crop_offset = yoffset / info->iMCU_sample_height; @@ -1062,7 +1076,7 @@ jtransform_request_workspace (j_decompress_ptr srcinfo, if (need_workspace) { coef_arrays = (jvirt_barray_ptr *) (*srcinfo->mem->alloc_small) ((j_common_ptr) srcinfo, JPOOL_IMAGE, - SIZEOF(jvirt_barray_ptr) * info->num_components); + SIZEOF(jvirt_barray_ptr) * info->num_components); width_in_iMCUs = (JDIMENSION) jdiv_round_up((long) info->output_width, (long) info->iMCU_sample_width); diff --git a/dll/3rdparty/libpng/docs/ANNOUNCE b/dll/3rdparty/libpng/docs/ANNOUNCE index 17fc962d4d5..718deeb5edd 100644 --- a/dll/3rdparty/libpng/docs/ANNOUNCE +++ b/dll/3rdparty/libpng/docs/ANNOUNCE @@ -1,5 +1,5 @@ -Libpng 1.5.12 - July 11, 2012 +Libpng 1.5.14 - January 24, 2013 This is a public release of libpng, intended for use in production codes. @@ -8,26 +8,64 @@ Files available for download: Source files with LF line endings (for Unix/Linux) and with a "configure" script - libpng-1.5.12.tar.xz (LZMA-compressed, recommended) - libpng-1.5.12.tar.gz - libpng-1.5.12.tar.bz2 + libpng-1.5.14.tar.xz (LZMA-compressed, recommended) + libpng-1.5.14.tar.gz + libpng-1.5.14.tar.bz2 Source files with CRLF line endings (for Windows), without the "configure" script - lpng1512.7z (LZMA-compressed, recommended) - lpng1512.zip + lpng1514.7z (LZMA-compressed, recommended) + lpng1514.zip Other information: - libpng-1.5.12-README.txt - libpng-1.5.12-LICENSE.txt + libpng-1.5.14-README.txt + libpng-1.5.14-LICENSE.txt -Changes since the last public release (1.5.11): +Changes since the last public release (1.5.13): + Added -DZ_SOLO to contrib/pngminim/*/makefile to work with zlib-1.2.7 + Warn about the incorrect runtime library setting for VS2010 debug DLL builds. + Fixed build when using #define PNG_NO_READ_GAMMA in png_do_compose() in + pngrtran.c (Domani Hannes). + Check for png_ptr==NULL earlier in png_zalloc(). + Ignore, with a warning, out-of-range value of num_trans in png_set_tRNS(). + Rearranged building of ARM NEON optimizations. The ARM specific code is + split out entirely to the arm subdirectory and changes to configure.ac and + Makefile.am to add new stuff are reduced. Now material code changes, + although for build test purposes, --enable-arm-neon now builds on non-ARM + systems. + Rebuilt Makefile.in, configure, etc., with autoconf-2.69 and automake-1.12.5. + Fixed cases of unquoted DESTDIR in Makefile.am + Fixed a minor bug in types to malloc and major bug in handling compressed + iTXt. Compressed iTXt could not be handled. + Cleaned up whitespace in the synopsis portion of the manpage "libpng.3" + Disassembled the version number in scripts/options.awk (necessary for + building on SunOs). + Fixed Windows build issues, enabled ARM compilation. Various warnings issued + by earlier versions of GCC fixed for Cygwin and Min/GW (which both use old + GCCs.) ARM support is enabled by default in zlib.props (unsupported by + Microsoft) and ARM compilation is made possible by deleting the check for + x86. The test programs cannot be run because they are not signed. + Fixed 'make distcheck' on SUN OS - libpng.so was not being removed + Replaced AM_CONFIG_HEADER(config.h) with AC_CONFIG_HEADERS([config.h]) + in configure.ac + De-configured build fixes to make a range of deconfiguration options (such + as switching off read or write support) work in more cases. Also upgraded + pngtest and pngvalid to the libpng 1.6 versions (with some modifications) + which provide more extensive testing. Replaced pngtest.png because pngtest + writes the ancillary chunks in a different order. + Check validity of "num_unknowns" parameter of png_set_unknown_chunks() + (Bug report from yuris). + Revised test for validity of "num_unknowns" to eliminate compiler warnings. + Check the validity of the "nentries" parameter of png_set_sPLT() and the + "num_text" parameter of png_set_text_2(). - Removed scripts/makefile.cegcc from the *.zip and *.7z distributions; it - depends on configure, which is not included in those archives. - Changed "a+w" to "u+w" in Makefile.in to fix CVE-2012-3386. + =========================================================================== + NOTICE November 17, 2012: + The location of the git repository at SourceForge has changed. + Visit http://libpng.sf.net/ for details. + =========================================================================== Send comments/corrections/commendations to png-mng-implement at lists.sf.net (subscription required; visit diff --git a/dll/3rdparty/libpng/docs/CHANGES b/dll/3rdparty/libpng/docs/CHANGES index 83f8f0846b7..2b56071e2d1 100644 --- a/dll/3rdparty/libpng/docs/CHANGES +++ b/dll/3rdparty/libpng/docs/CHANGES @@ -3852,7 +3852,7 @@ Version 1.5.10beta05 [March 10, 2012] Version 1.5.10 [March 29, 2012] Prevent PNG_EXPAND+PNG_SHIFT doing the shift twice. Revised png_set_text_2() to avoid potential memory corruption (fixes - CVE-2011-3048). + CVE-2011-3048, also known as CVE-2012-3425). Version 1.5.11beta01 [April 28, 2012] Revised scripts/makefile.darwin: use system zlib; remove quotes around @@ -3896,6 +3896,99 @@ Version 1.5.12 [July 11, 2012] depends on configure, which is not included in those archives. Changed "a+w" to "u+w" in Makefile.in to fix CVE-2012-3386. +Version 1.5.13beta01 [August 8, 2012] + Do not compile PNG_DEPRECATED, PNG_ALLOC and PNG_PRIVATE when __GNUC__ < 3. + Removed references to png_zalloc() and png_zfree() from the manual. + Revised PNG_FP_EXPORT and PNG_FIXED_EXPORT macros to avoid generating + lone semicolons (patch ported from libpng-1.6.0beta11). + +Version 1.5.13beta02 [September 10, 2012] + Corrected handling of the image array and the row_pointers array in example.c + When png_set_filler is used to strip a filler channel during write, the + code prior to 1.5 would ignore the case where the output required an + alpha channel or when the output was a palettized PNG. In libpng-1.5 the + ignorance was lost and libpng proceeded to strip the channel resulting + in a bad (potential memory overwrite) failure later. This reverts + the behavior to the pre-1.5 state but issues a warning. libpng-1.6 is + expected to issue an error on the erroneous png_set_filler call. + Use png_memset() consistently (pngmem.c contained some bare "memset" calls). + +Version 1.5.13rc01 [September 17, 2012] + No changes. + +Version 1.5.13 [September 27, 2012] + No changes. + +Version 1.5.14beta01 [October 24, 2012] + Added -DZ_SOLO to contrib/pngminim/*/makefile to work with zlib-1.2.7 + Warn about the incorrect runtime library setting for VS2010 debug DLL builds. + Fixed build when using #define PNG_NO_READ_GAMMA in png_do_compose() in + pngrtran.c (Domani Hannes). + +Version 1.5.14beta02 [omitted] + +Version 1.5.14beta03 [December 15, 2012] + Added missing "-" in front of DNO_GZIP in contrib/pngminim/*/makefile. + Check for png_ptr==NULL earlier in png_zalloc(). + Ignore, with a warning, out-of-range value of num_trans in png_set_tRNS(). + Rearranged building of ARM NEON optimizations. The ARM specific code is + split out entirely to the arm subdirectory and changes to configure.ac and + Makefile.am to add new stuff are reduced. Now material code changes, + although for build test purposes, --enable-arm-neon now builds on non-ARM + systems. + Rebuilt Makefile.in, configure, etc., with autoconf-2.69 and automake-1.12.5. + Fixed cases of unquoted DESTDIR in Makefile.am + Fixed a minor bug in types to malloc and major bug in handling compressed + iTXt. Compressed iTXt could not be handled. + +Version 1.5.14beta04 [December 19, 2012] + Cleaned up whitespace in the synopsis portion of the manpage "libpng.3" + Disassembled the version number in scripts/options.awk (necessary for + building on SunOs). + +Version 1.5.14beta05 [December 23, 2012] + Fixed Windows build issues, enabled ARM compilation. Various warnings issued + by earlier versions of GCC fixed for Cygwin and Min/GW (which both use old + GCCs.) ARM support is enabled by default in zlib.props (unsupported by + Microsoft) and ARM compilation is made possible by deleting the check for + x86. The test programs cannot be run because they are not signed. + +Version 1.5.14beta06 [January 1, 2013] + Discontinued distributing libpng-1.5.14-1.5.13-diff.txt and similar. + Fixed 'make distcheck' on SUN OS - libpng.so was not being removed + +Version 1.5.14beta07 [January 6, 2012] + Replaced AM_CONFIG_HEADER(config.h) with AC_CONFIG_HEADERS([config.h]) + in configure.ac + De-configured build fixes to make a range of deconfiguration options (such + as switching off read or write support) work in more cases. Also upgraded + pngtest and pngvalid to the libpng 1.6 versions (with some modifications) + which provide more extensive testing. Replaced pngtest.png because pngtest + writes the ancillary chunks in a different order. + +Version 1.5.14beta08 [January 10, 2013] + Check validity of "num_unknowns" parameter of png_set_unknown_chunks() + (Bug report from yuris). + +Version 1.5.14rc01 [January 17, 2013] + No changes. + +Version 1.5.14rc02 [January 17, 2013] + Revised test for validity of "num_unknowns" to eliminate compiler warnings. + +Version 1.5.14rc03 [January 18, 2013] + Check the validity of the "nentries" parameter of png_set_sPLT() and the + "num_text" parameter of png_set_text_2(). + +Version 1.5.14 [January 24, 2013] + Removed an obsolete line from the manual. + + =========================================================================== + NOTICE November 17, 2012: + The location of the git repository at SourceForge has changed. + Visit http://libpng.sf.net/ for details. + =========================================================================== + Send comments/corrections/commendations to png-mng-implement at lists.sf.net (subscription required; visit https://lists.sourceforge.net/lists/listinfo/png-mng-implement diff --git a/dll/3rdparty/libpng/docs/INSTALL b/dll/3rdparty/libpng/docs/INSTALL index e6979c6fb01..353bfff3268 100644 --- a/dll/3rdparty/libpng/docs/INSTALL +++ b/dll/3rdparty/libpng/docs/INSTALL @@ -133,23 +133,3 @@ run "make install". Further information can be found in the README and libpng-manual.txt files, in the individual makefiles, in png.h, and the manual pages libpng.3 and png.5. - -Using the ./configure script -- 16 December 2002. -================================================= - -The ./configure script should work compatibly with what scripts/makefile.* -did, however there are some options you might need to add to configure -explicitly, which previously was done semi-automatically (if you didn't edit -scripts/makefile.* yourself, that is) - -CFLAGS="-Wall -O -funroll-loops \ --malign-loops=2 -malign-functions=2" ./configure --prefix=/usr/include \ ---with-pkgconfigdir=/usr/lib/pkgconfig --includedir=/usr/include - -You can alternatively specify --includedir=/usr/include, /usr/local/include, -/usr/include/libpng%NN%, or whatever. - -If you find that the configure script is out-of-date or is not supporting -your platform properly, try running autogen.sh to regenerate "configure", -"Makefile.in", and the other configuration files. Then try configure again. - diff --git a/dll/3rdparty/libpng/docs/LICENSE b/dll/3rdparty/libpng/docs/LICENSE index 3a67d545888..8d7ebb6cfb8 100644 --- a/dll/3rdparty/libpng/docs/LICENSE +++ b/dll/3rdparty/libpng/docs/LICENSE @@ -10,7 +10,7 @@ this sentence. This code is released under the libpng license. -libpng versions 1.2.6, August 15, 2004, through 1.5.12, July 11, 2012, are +libpng versions 1.2.6, August 15, 2004, through 1.5.14, January 24, 2013, are Copyright (c) 2004, 2006-2012 Glenn Randers-Pehrson, and are distributed according to the same disclaimer and license as libpng-1.2.5 with the following individual added to the list of Contributing Authors @@ -108,4 +108,4 @@ certification mark of the Open Source Initiative. Glenn Randers-Pehrson glennrp at users.sourceforge.net -July 11, 2012 +January 24, 2013 diff --git a/dll/3rdparty/libpng/docs/README b/dll/3rdparty/libpng/docs/README index 3f5b0d6b644..10231106faa 100644 --- a/dll/3rdparty/libpng/docs/README +++ b/dll/3rdparty/libpng/docs/README @@ -1,4 +1,4 @@ -README for libpng version 1.5.12 - July 11, 2012 (shared library 15.0) +README for libpng version 1.5.14 - January 24, 2013 (shared library 15.0) See the note about version numbers near the top of png.h See INSTALL for instructions on how to install libpng. diff --git a/dll/3rdparty/libpng/docs/example.c b/dll/3rdparty/libpng/docs/example.c index c20d86b1547..86068ea1ebf 100644 --- a/dll/3rdparty/libpng/docs/example.c +++ b/dll/3rdparty/libpng/docs/example.c @@ -799,12 +799,16 @@ void write_png(char *file_name /* , ... other image information ... */) * use the first method if you aren't handling interlacing yourself. */ png_uint_32 k, height, width; - png_byte image[height][width*bytes_per_pixel]; + + /* In this example, "image" is a one-dimensional array of bytes */ + png_byte image[height*width*bytes_per_pixel]; + png_bytep row_pointers[height]; if (height > PNG_UINT_32_MAX/png_sizeof(png_bytep)) png_error (png_ptr, "Image is too tall to process in memory"); + /* Set up pointers into your "image" byte array */ for (k = 0; k < height; k++) row_pointers[k] = image + k*width*bytes_per_pixel; diff --git a/dll/3rdparty/libpng/docs/libpng-manual.txt b/dll/3rdparty/libpng/docs/libpng-manual.txt index 1f960125e2e..677535cb5a1 100644 --- a/dll/3rdparty/libpng/docs/libpng-manual.txt +++ b/dll/3rdparty/libpng/docs/libpng-manual.txt @@ -1,9 +1,9 @@ Libpng-manual.txt - A description on how to use and modify libpng - libpng version 1.5.12 - July 11, 2012 + libpng version 1.5.14 - January 24, 2013 Updated and distributed by Glenn Randers-Pehrson - Copyright (c) 1998-2011 Glenn Randers-Pehrson + Copyright (c) 1998-2012 Glenn Randers-Pehrson This document is released under the libpng license. For conditions of distribution and use, see the disclaimer @@ -11,9 +11,9 @@ Libpng-manual.txt - A description on how to use and modify libpng Based on: - libpng versions 0.97, January 1998, through 1.5.12 - July 11, 2012 + libpng versions 0.97, January 1998, through 1.5.14 - January 24, 2013 Updated and distributed by Glenn Randers-Pehrson - Copyright (c) 1998-2011 Glenn Randers-Pehrson + Copyright (c) 1998-2012 Glenn Randers-Pehrson libpng 1.0 beta 6 version 0.96 May 28, 1997 Updated and distributed by Andreas Dilger @@ -48,7 +48,7 @@ of reducing the amount of time and effort it takes to support the PNG file format in application programs. The PNG specification (second edition), November 2003, is available as -a W3C Recommendation and as an ISO Standard (ISO/IEC 15948:2003 (E)) at +a W3C Recommendation and as an ISO Standard (ISO/IEC 15948:2004 (E)) at = 10504 - png_set_alpha_mode(png_ptr, mode, screen_gamma); -#else - png_set_gamma(png_ptr, screen_gamma, 1.0/screen_gamma); -#endif + #if PNG_LIBPNG_VER >= 10504 + png_set_alpha_mode(png_ptr, mode, screen_gamma); + #else + png_set_gamma(png_ptr, screen_gamma, 1.0/screen_gamma); + #endif The screen_gamma value is the same as the argument to png_set_gamma; however, how it affects the output depends on the mode. png_set_alpha_mode() sets the @@ -1152,8 +1149,8 @@ gamma when combining semitransparent pixels with the background color. int_file_gamma - 100,000 times the gamma at which the file is written - png_get_cHRM(png_ptr, info_ptr, &white_x, &white_y, &red_x, &red_y, - &green_x, &green_y, &blue_x, &blue_y) + png_get_cHRM(png_ptr, info_ptr, &white_x, &white_y, &red_x, + &red_y, &green_x, &green_y, &blue_x, &blue_y) png_get_cHRM_XYZ(png_ptr, info_ptr, &red_X, &red_Y, &red_Z, &green_X, &green_Y, &green_Z, &blue_X, &blue_Y, &blue_Z) png_get_cHRM_fixed(png_ptr, info_ptr, &int_white_x, &int_white_y, @@ -1164,8 +1161,9 @@ gamma when combining semitransparent pixels with the background color. &int_blue_X, &int_blue_Y, &int_blue_Z) {white,red,green,blue}_{x,y} - A color space encoding specified using the chromaticities - of the end points and the white point. (PNG_INFO_cHRM) + A color space encoding specified using the + chromaticities of the end points and the + white point. (PNG_INFO_cHRM) {red,green,blue}_{X,Y,Z} A color space encoding specified using the encoding end @@ -1576,17 +1574,19 @@ Within the matrix, "A" means the transformation is obtained by png_set_add_alpha(). "X" means the transformation is obtained by png_set_expand(). "1" means the transformation is obtained by - png_set_expand_gray_1_2_4_to_8() (and by png_set_expand() if there - is no transparency in the original or the final format). + png_set_expand_gray_1_2_4_to_8() (and by png_set_expand() + if there is no transparency in the original or the final + format). "C" means the transformation is obtained by png_set_gray_to_rgb(). "G" means the transformation is obtained by png_set_rgb_to_gray(). "P" means the transformation is obtained by png_set_expand_palette_to_rgb(). "p" means the transformation is obtained by png_set_packing(). "Q" means the transformation is obtained by png_set_quantize(). - "T" means the transformation is obtained by png_set_tRNS_to_alpha(). - "B" means the transformation is obtained by png_set_background(), or - png_strip_alpha(). + "T" means the transformation is obtained by + png_set_tRNS_to_alpha(). + "B" means the transformation is obtained by + png_set_background(), or png_strip_alpha(). When an entry has multiple transforms listed all are required to cause the right overall transformation. When two transforms are separated by a comma @@ -1671,8 +1671,8 @@ with alpha. if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_RGB_ALPHA) - png_set_rgb_to_gray(png_ptr, error_action, double red_weight, - double green_weight); + png_set_rgb_to_gray(png_ptr, error_action, + double red_weight, double green_weight); error_action = 1: silently do the conversion @@ -1694,7 +1694,8 @@ with alpha. In the corresponding fixed point API the red_weight and green_weight values are simply scaled by 100,000: - png_set_rgb_to_gray(png_ptr, error_action, png_fixed_point red_weight, + png_set_rgb_to_gray(png_ptr, error_action, + png_fixed_point red_weight, png_fixed_point green_weight); If you have set error_action = 1 or 2, you can @@ -2189,7 +2190,7 @@ sPLT, only the n'th item in the structure is freed, where n is "seq". The default behavior is only to free data that was allocated internally by libpng. This can be changed, so that libpng will not free the data, or so that it will free data that was allocated by the user with png_malloc() -or png_zalloc() and passed in via a png_set_*() function, with +or png_calloc() and passed in via a png_set_*() function, with png_data_freer(png_ptr, info_ptr, freer, mask) @@ -2210,7 +2211,7 @@ or png_destroy_*() is supposed to free the data. When the user assumes responsibility for libpng-allocated data, the application must use png_free() to free it, and when the user transfers responsibility to libpng for data that the user has allocated, the user must have used png_malloc() -or png_zalloc() to allocate it. +or png_calloc() to allocate it. If you allocated your row_pointers in a single block, as suggested above in the description of the high level read interface, you must not transfer @@ -3028,8 +3029,8 @@ tEXt chunk use RFC 1123 format dates (e.g. "22 May 1997 18:07:10 GMT"), although this isn't a requirement. Unlike the tIME chunk, the "Creation Time" tEXt chunk is not expected to be automatically changed by the software. To facilitate the use of RFC 1123 dates, a function -png_convert_to_rfc1123(png_timep) is provided to convert from PNG -time to an RFC 1123 format string. +png_convert_to_rfc1123(png_ptr, png_timep) is provided to convert +from PNG time to an RFC 1123 format string. Writing unknown chunks @@ -3391,7 +3392,7 @@ png_destroy_write_struct(). The default behavior is only to free data that was allocated internally by libpng. This can be changed, so that libpng will not free the data, or so that it will free data that was allocated by the user with png_malloc() -or png_zalloc() and passed in via a png_set_*() function, with +or png_calloc() and passed in via a png_set_*() function, with png_data_freer(png_ptr, info_ptr, freer, mask) @@ -3427,7 +3428,7 @@ When the user assumes responsibility for libpng-allocated data, the application must use png_free() to free it, and when the user transfers responsibility to libpng for data that the user has allocated, the user must have used png_malloc() -or png_zalloc() to allocate it. +or png_calloc() to allocate it. If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword separately, do not transfer responsibility for freeing text_ptr to libpng, @@ -3455,12 +3456,13 @@ in pngmem.c, pngrio.c, pngwio.c, and pngerror.c, respectively. To change these functions, call the appropriate png_set_*_fn() function. Memory allocation is done through the functions png_malloc(), png_calloc(), -and png_free(). These currently just call the standard C functions. -png_calloc() calls png_malloc() and then clears the newly -allocated memory to zero. There is limited support for certain systems -with segmented memory architectures and the types of pointers declared by -png.h match this; you will have to use appropriate pointers in your -application. Since it is +and png_free(). The png_malloc() and png_free() functions currently just +call the standard C functions and png_calloc() calls png_malloc() and then +clears the newly allocated memory to zero; note that png_calloc(png_ptr, size) +is not the same as the calloc(number, size) function provided by stdlib.h. +There is limited support for certain systems with segmented memory +architectures and the types of pointers declared by png.h match this; you +will have to use appropriate pointers in your application. Since it is unlikely that the method of handling memory allocation on a platform will change between applications, these functions must be modified in the library at compile time. If you prefer to use a different method @@ -4089,8 +4091,8 @@ png_get_mmx_bitdepth_threshold(), png_get_mmx_rowbytes_threshold(), png_set_asm_flags(), and png_mmx_supported() We removed the obsolete png_check_sig(), png_memcpy_check(), and -png_memset_check() functions. Instead use !png_sig_cmp(), memcpy(), -and memset(), respectively. +png_memset_check() functions. Instead use !png_sig_cmp(), png_memcpy(), +and png_memset(), respectively. The function png_set_gray_1_2_4_to_8() was removed. It has been deprecated since libpng-1.0.18 and 1.2.9, when it was replaced with @@ -4127,7 +4129,9 @@ png_set_strip_error_numbers() was removed from the library by default. The png_zalloc() and png_zfree() functions are no longer exported. The png_zalloc() function no longer zeroes out the memory that it -allocates. +allocates. Applications that called png_zalloc(png_ptr, number, size) +can call png_calloc(png_ptr, number*size) instead, and can call +png_free() instead of png_zfree(). Support for dithering was disabled by default in libpng-1.4.0, because it has not been well tested and doesn't actually "dither". @@ -4161,8 +4165,8 @@ A. Changes that affect users of libpng There are no substantial API changes between the non-deprecated parts of the 1.4.5 API and the 1.5.0 API; however, the ability to directly access -the main libpng control structures, png_struct and png_info, deprecated -in earlier versions of libpng, has been completely removed from +members of the main libpng control structures, png_struct and png_info, +deprecated in earlier versions of libpng, has been completely removed from libpng 1.5. We no longer include zlib.h in png.h. Applications that need access @@ -4170,9 +4174,12 @@ to information in zlib.h will need to add the '#include "zlib.h"' directive. It does not matter whether it is placed prior to or after the '"#include png.h"' directive. -We moved the png_strcpy(), png_strncpy(), png_strlen(), png_memcpy(), -png_memcmp(), png_sprintf, and png_memcpy() macros into a private -header file (pngpriv.h) that is not accessible to applications. +The png_sprintf(), png_strcpy(), and png_strncpy() macros are no longer used +and were removed. + +We moved the png_strlen(), png_memcpy(), png_memset(), and png_memcmp() +macros into a private header file (pngpriv.h) that is not accessible to +applications. In png_get_iCCP, the type of "profile" was changed from png_charpp to png_bytepp, and in png_set_iCCP, from png_charp to png_const_bytep. @@ -4571,7 +4578,7 @@ pngtest) appear in pngpriv.h above the comment that says - /* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */ + /* Maintainer: Put new private prototypes here ^ */ To avoid polluting the global namespace, the names of all exported functions and variables begin with "png_", and all publicly visible C @@ -4588,7 +4595,7 @@ left parenthesis that follows it: for (i = 2; i > 0; --i) y[i] = a(x) + (int)b; -We prefer #ifdef and #ifndef to #if defined() and if !defined() +We prefer #ifdef and #ifndef to #if defined() and #if !defined() when there is only one macro being tested. We prefer to express integers that are used as bit masks in hex format, @@ -4602,13 +4609,13 @@ Other rules can be inferred by inspecting the libpng source. XIV. Y2K Compliance in libpng -July 11, 2012 +January 24, 2013 Since the PNG Development group is an ad-hoc body, we can't make an official declaration. This is your unofficial assurance that libpng from version 0.71 and -upward through 1.5.12 are Y2K compliant. It is my belief that earlier +upward through 1.5.14 are Y2K compliant. It is my belief that earlier versions were also Y2K compliant. Libpng only has two year fields. One is a 2-byte unsigned integer that diff --git a/dll/3rdparty/libpng/png.c b/dll/3rdparty/libpng/png.c index 6808c5cb902..2fbcf45995b 100644 --- a/dll/3rdparty/libpng/png.c +++ b/dll/3rdparty/libpng/png.c @@ -1,8 +1,8 @@ /* png.c - location for general purpose libpng functions * - * Last changed in libpng 1.5.11 [June 14, 2012] - * Copyright (c) 1998-2012 Glenn Randers-Pehrson + * Last changed in libpng 1.5.14 [January 24, 2013] + * Copyright (c) 1998-2013 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -14,7 +14,7 @@ #include "pngpriv.h" /* Generate a compiler error if there is an old png.h in the search path. */ -typedef png_libpng_version_1_5_12 Your_png_h_is_not_version_1_5_12; +typedef png_libpng_version_1_5_14 Your_png_h_is_not_version_1_5_14; /* Tells libpng that we have already handled the first "num_bytes" bytes * of the PNG file signature. If the PNG data is embedded into another @@ -73,13 +73,16 @@ PNG_FUNCTION(voidpf /* PRIVATE */, png_zalloc,(voidpf png_ptr, uInt items, uInt size),PNG_ALLOCATED) { png_voidp ptr; - png_structp p=(png_structp)png_ptr; - png_uint_32 save_flags=p->flags; + png_structp p; + png_uint_32 save_flags; png_alloc_size_t num_bytes; if (png_ptr == NULL) return (NULL); + p=(png_structp)png_ptr; + save_flags=p->flags; + if (items > PNG_UINT_32_MAX/size) { png_warning (p, "Potential overflow in png_zalloc()"); @@ -655,14 +658,14 @@ png_get_copyright(png_const_structp png_ptr) #else # ifdef __STDC__ return PNG_STRING_NEWLINE \ - "libpng version 1.5.12 - July 11, 2012" PNG_STRING_NEWLINE \ - "Copyright (c) 1998-2012 Glenn Randers-Pehrson" PNG_STRING_NEWLINE \ + "libpng version 1.5.14 - January 24, 2013" PNG_STRING_NEWLINE \ + "Copyright (c) 1998-2013 Glenn Randers-Pehrson" PNG_STRING_NEWLINE \ "Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \ "Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \ PNG_STRING_NEWLINE; # else - return "libpng version 1.5.12 - July 11, 2012\ - Copyright (c) 1998-2012 Glenn Randers-Pehrson\ + return "libpng version 1.5.14 - January 24, 2013\ + Copyright (c) 1998-2013 Glenn Randers-Pehrson\ Copyright (c) 1996-1997 Andreas Dilger\ Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc."; # endif @@ -1458,7 +1461,7 @@ png_check_fp_string(png_const_charp string, png_size_t size) } #endif /* pCAL or sCAL */ -#ifdef PNG_READ_sCAL_SUPPORTED +#ifdef PNG_sCAL_SUPPORTED # ifdef PNG_FLOATING_POINT_SUPPORTED /* Utility used below - a simple accurate power of ten from an integral * exponent. @@ -2044,7 +2047,8 @@ png_muldiv_warn(png_structp png_ptr, png_fixed_point a, png_int_32 times, } #endif -#ifdef PNG_READ_GAMMA_SUPPORTED /* more fixed point functions for gamma */ +#if (defined PNG_READ_GAMMA_SUPPORTED) || (defined PNG_cHRM_SUPPORTED) +/* more fixed point functions for gamma and cHRM (xy/XYZ) suport. */ /* Calculate a reciprocal, return 0 on div-by-zero or overflow. */ png_fixed_point png_reciprocal(png_fixed_point a) @@ -2064,6 +2068,7 @@ png_reciprocal(png_fixed_point a) return 0; /* error/overflow */ } +#ifdef PNG_READ_GAMMA_SUPPORTED /* A local convenience routine. */ static png_fixed_point png_product2(png_fixed_point a, png_fixed_point b) @@ -2085,6 +2090,7 @@ png_product2(png_fixed_point a, png_fixed_point b) return 0; /* overflow */ } +#endif /* READ_GAMMA */ /* The inverse of the above. */ png_fixed_point @@ -2112,7 +2118,7 @@ png_reciprocal2(png_fixed_point a, png_fixed_point b) return 0; /* overflow */ } -#endif /* READ_GAMMA */ +#endif /* READ_GAMMA || cHRM */ #ifdef PNG_CHECK_cHRM_SUPPORTED /* Added at libpng version 1.2.34 (Dec 8, 2008) and 1.4.0 (Jan 2, diff --git a/dll/3rdparty/libpng/pngget.c b/dll/3rdparty/libpng/pngget.c index 43400cda7e8..c9a663f29aa 100644 --- a/dll/3rdparty/libpng/pngget.c +++ b/dll/3rdparty/libpng/pngget.c @@ -1,7 +1,7 @@ /* pngget.c - retrieval of values from info struct * - * Last changed in libpng 1.5.7 [December 15, 2011] + * Last changed in libpng 1.5.14 [January 24, 2013] * Copyright (c) 1998-2011 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) @@ -175,6 +175,9 @@ png_get_pixel_aspect_ratio(png_const_structp png_ptr, png_const_infop info_ptr) return ((float)((float)info_ptr->y_pixels_per_unit /(float)info_ptr->x_pixels_per_unit)); } +#else + PNG_UNUSED(png_ptr) + PNG_UNUSED(info_ptr) #endif return ((float)0.0); @@ -203,6 +206,9 @@ png_get_pixel_aspect_ratio_fixed(png_const_structp png_ptr, (png_int_32)info_ptr->x_pixels_per_unit)) return res; } +#else + PNG_UNUSED(png_ptr) + PNG_UNUSED(info_ptr) #endif return 0; diff --git a/dll/3rdparty/libpng/pnginfo.h b/dll/3rdparty/libpng/pnginfo.h index a33bfab06de..0e5c977dd9c 100644 --- a/dll/3rdparty/libpng/pnginfo.h +++ b/dll/3rdparty/libpng/pnginfo.h @@ -242,7 +242,7 @@ defined(PNG_READ_BACKGROUND_SUPPORTED) #ifdef PNG_sPLT_SUPPORTED /* Data on sPLT chunks (there may be more than one). */ png_sPLT_tp splt_palettes; - png_uint_32 splt_palettes_num; + int splt_palettes_num; #endif #ifdef PNG_sCAL_SUPPORTED diff --git a/dll/3rdparty/libpng/pngmem.c b/dll/3rdparty/libpng/pngmem.c index bf5ff037dad..f885533fbb0 100644 --- a/dll/3rdparty/libpng/pngmem.c +++ b/dll/3rdparty/libpng/pngmem.c @@ -1,8 +1,8 @@ /* pngmem.c - stub functions for memory allocation * - * Last changed in libpng 1.5.7 [December 15, 2011] - * Copyright (c) 1998-2011 Glenn Randers-Pehrson + * Last changed in libpng 1.5.13 [September 27, 2012] + * Copyright (c) 1998-2012 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -56,7 +56,7 @@ png_create_struct_2,(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr), if (malloc_fn != NULL) { png_struct dummy_struct; - memset(&dummy_struct, 0, sizeof dummy_struct); + png_memset(&dummy_struct, 0, sizeof dummy_struct); dummy_struct.mem_ptr=mem_ptr; struct_ptr = (*(malloc_fn))(&dummy_struct, (png_alloc_size_t)size); } @@ -90,7 +90,7 @@ png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn, if (free_fn != NULL) { png_struct dummy_struct; - memset(&dummy_struct, 0, sizeof dummy_struct); + png_memset(&dummy_struct, 0, sizeof dummy_struct); dummy_struct.mem_ptr=mem_ptr; (*(free_fn))(&dummy_struct, struct_ptr); return; diff --git a/dll/3rdparty/libpng/pngpriv.h b/dll/3rdparty/libpng/pngpriv.h index b647e072d56..3880d3f2280 100644 --- a/dll/3rdparty/libpng/pngpriv.h +++ b/dll/3rdparty/libpng/pngpriv.h @@ -418,7 +418,7 @@ typedef PNG_CONST png_uint_16p FAR * png_const_uint_16pp; #if PNG_ALIGN_TYPE == PNG_ALIGN_SIZE /* This is used because in some compiler implementations non-aligned * structure members are supported, so the offsetof approach below fails. - * Set PNG_ALIGN_TO_SIZE=0 for compiler combinations where unaligned access + * Set PNG_ALIGN_SIZE=0 for compiler combinations where unaligned access * is good for performance. Do not do this unless you have tested the result * and understand it. */ @@ -825,10 +825,8 @@ PNG_EXTERN void png_write_IEND PNGARG((png_structp png_ptr)); # ifdef PNG_FLOATING_POINT_SUPPORTED PNG_EXTERN void png_write_gAMA PNGARG((png_structp png_ptr, double file_gamma)); # endif -# ifdef PNG_FIXED_POINT_SUPPORTED PNG_EXTERN void png_write_gAMA_fixed PNGARG((png_structp png_ptr, png_fixed_point file_gamma)); -# endif #endif #ifdef PNG_WRITE_sBIT_SUPPORTED @@ -995,8 +993,8 @@ PNG_EXTERN void png_do_write_interlace PNGARG((png_row_infop row_info, /* Unfilter a row: check the filter value before calling this, there is no point * calling it for PNG_FILTER_VALUE_NONE. */ -PNG_EXTERN void png_read_filter_row PNGARG((png_structp pp, png_row_infop row_info, - png_bytep row, png_const_bytep prev_row, int filter)); +PNG_EXTERN void png_read_filter_row PNGARG((png_structp pp, png_row_infop + row_info, png_bytep row, png_const_bytep prev_row, int filter)); PNG_EXTERN void png_read_filter_row_up_neon PNGARG((png_row_infop row_info, png_bytep row, png_const_bytep prev_row)); @@ -1493,14 +1491,16 @@ PNG_EXTERN void png_formatted_warning(png_structp png_ptr, /* ASCII to FP interfaces, currently only implemented if sCAL * support is required. */ -#if defined(PNG_READ_sCAL_SUPPORTED) +#ifdef PNG_sCAL_SUPPORTED /* MAX_DIGITS is actually the maximum number of characters in an sCAL * width or height, derived from the precision (number of significant * digits - a build time settable option) and assumpitions about the * maximum ridiculous exponent. */ #define PNG_sCAL_MAX_DIGITS (PNG_sCAL_PRECISION+1/*.*/+1/*E*/+10/*exponent*/) +#endif +#ifdef PNG_sCAL_SUPPORTED #ifdef PNG_FLOATING_POINT_SUPPORTED PNG_EXTERN void png_ascii_from_fp PNGARG((png_structp png_ptr, png_charp ascii, png_size_t size, double fp, unsigned int precision)); @@ -1584,15 +1584,15 @@ PNG_EXTERN void png_ascii_from_fixed PNGARG((png_structp png_ptr, #define PNG_FP_IS_ZERO(state) (((state) & PNG_FP_Z_MASK) == PNG_FP_SAW_DIGIT) #define PNG_FP_IS_POSITIVE(state) (((state) & PNG_FP_NZ_MASK) == PNG_FP_Z_MASK) #define PNG_FP_IS_NEGATIVE(state) (((state) & PNG_FP_NZ_MASK) == PNG_FP_NZ_MASK) - -/* The actual parser. This can be called repeatedly, it updates + +/* The actual parser. This can be called repeatedly. It updates * the index into the string and the state variable (which must - * be initialzed to 0). It returns a result code, as above. There + * be initialized to 0). It returns a result code, as above. There * is no point calling the parser any more if it fails to advance to * the end of the string - it is stuck on an invalid character (or * terminated by '\0'). * - * Note that the pointer will consume an E or even an E+ then leave + * Note that the pointer will consume an E or even an E+ and then leave * a 'maybe' state even though a preceding integer.fraction is valid. * The PNG_FP_WAS_VALID flag indicates that a preceding substring was * a valid number. It's possible to recover from this by calling @@ -1631,7 +1631,7 @@ PNG_EXTERN png_fixed_point png_muldiv_warn PNGARG((png_structp png_ptr, png_fixed_point a, png_int_32 multiplied_by, png_int_32 divided_by)); #endif -#ifdef PNG_READ_GAMMA_SUPPORTED +#if (defined PNG_READ_GAMMA_SUPPORTED) || (defined PNG_cHRM_SUPPORTED) /* Calculate a reciprocal - used for gamma values. This returns * 0 if the argument is 0 in order to maintain an undefined value, * there are no warnings. @@ -1666,7 +1666,72 @@ PNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr, int bit_depth)); #endif -/* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */ +/* Missing declarations if FIXED_POINT is *not* supported - fixed properly + * in libpng 1.6 + */ +#ifndef PNG_FIXED_POINT_SUPPORTED +#ifdef PNG_cHRM_SUPPORTED +PNG_EXTERN png_uint_32 png_get_cHRM_XYZ_fixed PNGARG( + (png_structp png_ptr, png_const_infop info_ptr, + png_fixed_point *int_red_X, png_fixed_point *int_red_Y, + png_fixed_point *int_red_Z, png_fixed_point *int_green_X, + png_fixed_point *int_green_Y, png_fixed_point *int_green_Z, + png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y, + png_fixed_point *int_blue_Z)); +PNG_EXTERN void png_set_cHRM_XYZ_fixed PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point int_red_X, png_fixed_point int_red_Y, + png_fixed_point int_red_Z, png_fixed_point int_green_X, + png_fixed_point int_green_Y, png_fixed_point int_green_Z, + png_fixed_point int_blue_X, png_fixed_point int_blue_Y, + png_fixed_point int_blue_Z)); +PNG_EXTERN void png_set_cHRM_fixed PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point int_white_x, + png_fixed_point int_white_y, png_fixed_point int_red_x, + png_fixed_point int_red_y, png_fixed_point int_green_x, + png_fixed_point int_green_y, png_fixed_point int_blue_x, + png_fixed_point int_blue_y)); +#endif + +#ifdef PNG_gAMA_SUPPORTED +PNG_EXTERN png_uint_32 png_get_gAMA_fixed PNGARG( + (png_const_structp png_ptr, png_const_infop info_ptr, + png_fixed_point *int_file_gamma)); +PNG_EXTERN void png_set_gAMA_fixed PNGARG((png_structp png_ptr, + png_infop info_ptr, png_fixed_point int_file_gamma)); +#endif + +#ifdef PNG_READ_BACKGROUND_SUPPORTED +PNG_EXTERN void png_set_background_fixed PNGARG((png_structp png_ptr, + png_const_color_16p background_color, int background_gamma_code, + int need_expand, png_fixed_point background_gamma)); +#endif + +#ifdef PNG_READ_ALPHA_MODE_SUPPORTED +PNG_EXTERN void png_set_alpha_mode_fixed PNGARG((png_structp png_ptr, + int mode, png_fixed_point output_gamma)); +#endif + +#ifdef PNG_READ_GAMMA_SUPPORTED +PNG_EXTERN void png_set_gamma_fixed PNGARG((png_structp png_ptr, + png_fixed_point screen_gamma, png_fixed_point override_file_gamma)); +#endif + +#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED +PNG_EXTERN void png_set_rgb_to_gray_fixed PNGARG((png_structp png_ptr, + int error_action, png_fixed_point red, png_fixed_point green)); +#endif +#endif /* FIX MISSING !FIXED_POINT DECLARATIONS */ + +#ifdef PNG_FILTER_OPTIMIZATIONS +PNG_EXTERN void PNG_FILTER_OPTIMIZATIONS(png_structp png_ptr, unsigned int bpp); + /* This is the initialization function for hardware specific optimizations, + * one implementation (for ARM NEON machines) is contained in + * arm/filter_neon.c. It need not be defined - the generic code will be used + * if not. + */ +#endif + +/* Maintainer: Put new private prototypes here ^ */ #include "pngdebug.h" diff --git a/dll/3rdparty/libpng/pngrtran.c b/dll/3rdparty/libpng/pngrtran.c index 96732b55c55..064d92b7e44 100644 --- a/dll/3rdparty/libpng/pngrtran.c +++ b/dll/3rdparty/libpng/pngrtran.c @@ -1,8 +1,8 @@ /* pngrtran.c - transforms the data in a row for PNG readers * - * Last changed in libpng 1.5.11 [June 14, 2012] - * Copyright (c) 1998-2012 Glenn Randers-Pehrson + * Last changed in libpng 1.5.14 [January 24, 2013] + * Copyright (c) 1998-2013 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -1221,7 +1221,7 @@ png_init_rgb_transformations(png_structp png_ptr) default: case 8: - /* Already 8 bits, fall through */ + /* FALL THROUGH (already 8 bits) */ case 16: /* Already a full 16 bits */ @@ -3705,8 +3705,10 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structp png_ptr) if (v == png_ptr->trans_color.gray) { /* Background is already in screen gamma */ - *sp = (png_byte)((png_ptr->background.gray >> 8) & 0xff); - *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff); + *sp = (png_byte)((png_ptr->background.gray >> 8) + & 0xff); + *(sp + 1) = (png_byte)(png_ptr->background.gray + & 0xff); } else @@ -3729,8 +3731,10 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structp png_ptr) if (v == png_ptr->trans_color.gray) { - *sp = (png_byte)((png_ptr->background.gray >> 8) & 0xff); - *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff); + *sp = (png_byte)((png_ptr->background.gray >> 8) + & 0xff); + *(sp + 1) = (png_byte)(png_ptr->background.gray + & 0xff); } } } @@ -3810,9 +3814,12 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structp png_ptr) /* Background is already in screen gamma */ *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff); *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff); - *(sp + 2) = (png_byte)((png_ptr->background.green >> 8) & 0xff); - *(sp + 3) = (png_byte)(png_ptr->background.green & 0xff); - *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8) & 0xff); + *(sp + 2) = (png_byte)((png_ptr->background.green >> 8) + & 0xff); + *(sp + 3) = (png_byte)(png_ptr->background.green + & 0xff); + *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8) + & 0xff); *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff); } @@ -3853,9 +3860,12 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structp png_ptr) { *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff); *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff); - *(sp + 2) = (png_byte)((png_ptr->background.green >> 8) & 0xff); - *(sp + 3) = (png_byte)(png_ptr->background.green & 0xff); - *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8) & 0xff); + *(sp + 2) = (png_byte)((png_ptr->background.green >> 8) + & 0xff); + *(sp + 3) = (png_byte)(png_ptr->background.green + & 0xff); + *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8) + & 0xff); *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff); } } @@ -3910,7 +3920,7 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structp png_ptr) *sp = (png_byte)png_ptr->background.gray; else if (a < 0xff) - png_composite(*sp, *sp, a, png_ptr->background_1.gray); + png_composite(*sp, *sp, a, png_ptr->background.gray); } } } @@ -3938,7 +3948,8 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structp png_ptr) else if (a == 0) { /* Background is already in screen gamma */ - *sp = (png_byte)((png_ptr->background.gray >> 8) & 0xff); + *sp = (png_byte)((png_ptr->background.gray >> 8) + & 0xff); *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff); } @@ -3968,7 +3979,8 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structp png_ptr) if (a == 0) { - *sp = (png_byte)((png_ptr->background.gray >> 8) & 0xff); + *sp = (png_byte)((png_ptr->background.gray >> 8) + & 0xff); *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff); } @@ -3977,7 +3989,7 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structp png_ptr) png_uint_16 g, v; g = (png_uint_16)(((*sp) << 8) + *(sp + 1)); - png_composite_16(v, g, a, png_ptr->background_1.gray); + png_composite_16(v, g, a, png_ptr->background.gray); *sp = (png_byte)((v >> 8) & 0xff); *(sp + 1) = (png_byte)(v & 0xff); } @@ -4098,9 +4110,12 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structp png_ptr) /* Background is already in screen gamma */ *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff); *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff); - *(sp + 2) = (png_byte)((png_ptr->background.green >> 8) & 0xff); - *(sp + 3) = (png_byte)(png_ptr->background.green & 0xff); - *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8) & 0xff); + *(sp + 2) = (png_byte)((png_ptr->background.green >> 8) + & 0xff); + *(sp + 3) = (png_byte)(png_ptr->background.green + & 0xff); + *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8) + & 0xff); *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff); } @@ -4111,14 +4126,16 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structp png_ptr) v = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp]; png_composite_16(w, v, a, png_ptr->background_1.red); if (!optimize) - w = gamma_16_from_1[((w&0xff) >> gamma_shift)][w >> 8]; + w = gamma_16_from_1[((w&0xff) >> gamma_shift)] + [w >> 8]; *sp = (png_byte)((w >> 8) & 0xff); *(sp + 1) = (png_byte)(w & 0xff); v = gamma_16_to_1[*(sp + 3) >> gamma_shift][*(sp + 2)]; png_composite_16(w, v, a, png_ptr->background_1.green); if (!optimize) - w = gamma_16_from_1[((w&0xff) >> gamma_shift)][w >> 8]; + w = gamma_16_from_1[((w&0xff) >> gamma_shift)] + [w >> 8]; *(sp + 2) = (png_byte)((w >> 8) & 0xff); *(sp + 3) = (png_byte)(w & 0xff); @@ -4126,7 +4143,8 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structp png_ptr) v = gamma_16_to_1[*(sp + 5) >> gamma_shift][*(sp + 4)]; png_composite_16(w, v, a, png_ptr->background_1.blue); if (!optimize) - w = gamma_16_from_1[((w&0xff) >> gamma_shift)][w >> 8]; + w = gamma_16_from_1[((w&0xff) >> gamma_shift)] + [w >> 8]; *(sp + 4) = (png_byte)((w >> 8) & 0xff); *(sp + 5) = (png_byte)(w & 0xff); @@ -4147,9 +4165,12 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structp png_ptr) { *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff); *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff); - *(sp + 2) = (png_byte)((png_ptr->background.green >> 8) & 0xff); - *(sp + 3) = (png_byte)(png_ptr->background.green & 0xff); - *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8) & 0xff); + *(sp + 2) = (png_byte)((png_ptr->background.green >> 8) + & 0xff); + *(sp + 3) = (png_byte)(png_ptr->background.green + & 0xff); + *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8) + & 0xff); *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff); } @@ -4725,7 +4746,9 @@ png_do_expand(png_row_infop row_info, png_bytep row, { if (row_info->bit_depth == 8) { - gray = gray & 0xff; + /* NOTE: prior to libpng 1.5.14 this cleared out the top bits of + * 'gray', however if those are set it is an error. + */ sp = row + (png_size_t)row_width - 1; dp = row + (png_size_t)(row_width << 1) - 1; diff --git a/dll/3rdparty/libpng/pngrutil.c b/dll/3rdparty/libpng/pngrutil.c index aa592ccfbd2..5ee452d575a 100644 --- a/dll/3rdparty/libpng/pngrutil.c +++ b/dll/3rdparty/libpng/pngrutil.c @@ -1,8 +1,8 @@ /* pngrutil.c - utilities to read a PNG file * - * Last changed in libpng 1.5.10 [March 8, 2012] - * Copyright (c) 1998-2012 Glenn Randers-Pehrson + * Last changed in libpng 1.5.14 [January 24, 2013] + * Copyright (c) 1998-2013 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -2452,7 +2452,7 @@ png_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) png_textp text_ptr; png_charp key, lang, text, lang_key; int comp_flag; - int comp_type = 0; + int comp_type; int ret; png_size_t slength, prefix_len, data_len; @@ -2533,15 +2533,24 @@ png_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) return; } - else + comp_flag = *lang++; + comp_type = *lang++; + + /* 1.5.14: The spec says "for uncompressed text decoders shall ignore [the + * compression type]". The compression flag shall be 0 (no compression) or + * 1 (compressed with method 0 - deflate.) + */ + if (comp_flag != 0 && comp_flag != 1) { - comp_flag = *lang++; - comp_type = *lang++; + png_warning(png_ptr, "invalid iTXt compression flag"); + png_free(png_ptr, png_ptr->chunkdata); + png_ptr->chunkdata = NULL; + return; } - if (comp_type || (comp_flag && comp_flag != PNG_TEXT_COMPRESSION_zTXt)) + if (comp_flag/*compressed*/ && comp_type != 0) { - png_warning(png_ptr, "Unknown iTXt compression type or method"); + png_warning(png_ptr, "unknown iTXt compression type"); png_free(png_ptr, png_ptr->chunkdata); png_ptr->chunkdata = NULL; return; @@ -2577,7 +2586,7 @@ png_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) key=png_ptr->chunkdata; - if (comp_flag) + if (comp_flag/*compressed*/) png_decompress_chunk(png_ptr, comp_type, (size_t)length, prefix_len, &data_len); @@ -2595,7 +2604,8 @@ png_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) return; } - text_ptr->compression = (int)comp_flag + 1; + text_ptr->compression = + (comp_flag ? PNG_ITXT_COMPRESSION_zTXt : PNG_ITXT_COMPRESSION_NONE); text_ptr->lang_key = png_ptr->chunkdata + (lang_key - key); text_ptr->lang = png_ptr->chunkdata + (lang - key); text_ptr->itxt_length = data_len; @@ -3660,66 +3670,6 @@ png_read_filter_row_paeth_multibyte_pixel(png_row_infop row_info, png_bytep row, } } -#ifdef PNG_ARM_NEON - -#ifdef __linux__ -#include -#include -#include - -static int png_have_hwcap(unsigned cap) -{ - FILE *f = fopen("/proc/self/auxv", "r"); - Elf32_auxv_t aux; - int have_cap = 0; - - if (!f) - return 0; - - while (fread(&aux, sizeof(aux), 1, f) > 0) - { - if (aux.a_type == AT_HWCAP && - aux.a_un.a_val & cap) - { - have_cap = 1; - break; - } - } - - fclose(f); - - return have_cap; -} -#endif /* __linux__ */ - -static void -png_init_filter_functions_neon(png_structp pp, unsigned int bpp) -{ -#ifdef __linux__ - if (!png_have_hwcap(HWCAP_NEON)) - return; -#endif - - pp->read_filter[PNG_FILTER_VALUE_UP-1] = png_read_filter_row_up_neon; - - if (bpp == 3) - { - pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub3_neon; - pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg3_neon; - pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = - png_read_filter_row_paeth3_neon; - } - - else if (bpp == 4) - { - pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub4_neon; - pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg4_neon; - pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = - png_read_filter_row_paeth4_neon; - } -} -#endif /* PNG_ARM_NEON */ - static void png_init_filter_functions(png_structp pp) { @@ -3735,8 +3685,16 @@ png_init_filter_functions(png_structp pp) pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = png_read_filter_row_paeth_multibyte_pixel; -#ifdef PNG_ARM_NEON - png_init_filter_functions_neon(pp, bpp); +#ifdef PNG_FILTER_OPTIMIZATIONS + /* To use this define PNG_FILTER_OPTIMIZATIONS as the name of a function to + * call to install hardware optimizations for the above functions; simply + * replace whatever elements of the pp->read_filter[] array with a hardware + * specific (or, for that matter, generic) optimization. + * + * To see an example of this examine what configure.ac does when + * --enable-arm-neon is specified on the command line. + */ + PNG_FILTER_OPTIMIZATIONS(pp, bpp); #endif } diff --git a/dll/3rdparty/libpng/pngset.c b/dll/3rdparty/libpng/pngset.c index 8c07eec3e86..6e9358b2896 100644 --- a/dll/3rdparty/libpng/pngset.c +++ b/dll/3rdparty/libpng/pngset.c @@ -1,8 +1,8 @@ /* pngset.c - storage of image information into info struct * - * Last changed in libpng 1.5.11 [June 14, 2012] - * Copyright (c) 1998-2012 Glenn Randers-Pehrson + * Last changed in libpng 1.5.14 [January 24, 2013] + * Copyright (c) 1998-2013 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -690,6 +690,17 @@ png_set_text_2(png_structp png_ptr, png_infop info_ptr, /* Make sure we have enough space in the "text" array in info_struct * to hold all of the incoming text_ptr objects. */ + + if (num_text < 0 || + num_text > INT_MAX - info_ptr->num_text - 8 || + (unsigned int)/*SAFE*/(num_text +/*SAFE*/ + info_ptr->num_text + 8) >= + PNG_SIZE_MAX/png_sizeof(png_text)) + { + png_warning(png_ptr, "too many text chunks"); + return(0); + } + if (info_ptr->num_text + num_text > info_ptr->max_text) { int old_max_text = info_ptr->max_text; @@ -897,6 +908,12 @@ png_set_tRNS(png_structp png_ptr, png_infop info_ptr, if (png_ptr == NULL || info_ptr == NULL) return; + if (num_trans < 0 || num_trans > PNG_MAX_PALETTE_LENGTH) + { + png_warning(png_ptr, "Ignoring invalid num_trans value"); + return; + } + if (trans_alpha != NULL) { /* It may not actually be necessary to set png_ptr->trans_alpha here; @@ -963,9 +980,18 @@ png_set_sPLT(png_structp png_ptr, if (png_ptr == NULL || info_ptr == NULL) return; - np = (png_sPLT_tp)png_malloc_warn(png_ptr, - (info_ptr->splt_palettes_num + nentries) * - (png_size_t)png_sizeof(png_sPLT_t)); + if (nentries < 0 || + nentries > INT_MAX-info_ptr->splt_palettes_num || + (unsigned int)/*SAFE*/(nentries +/*SAFE*/ + info_ptr->splt_palettes_num) >= + PNG_SIZE_MAX/png_sizeof(png_sPLT_t)) + np=NULL; + + else + + np = (png_sPLT_tp)png_malloc_warn(png_ptr, + (info_ptr->splt_palettes_num + nentries) * + (png_size_t)png_sizeof(png_sPLT_t)); if (np == NULL) { @@ -1033,9 +1059,17 @@ png_set_unknown_chunks(png_structp png_ptr, if (png_ptr == NULL || info_ptr == NULL || num_unknowns == 0) return; - np = (png_unknown_chunkp)png_malloc_warn(png_ptr, - (png_size_t)(info_ptr->unknown_chunks_num + num_unknowns) * - png_sizeof(png_unknown_chunk)); + if (num_unknowns < 0 || + num_unknowns > INT_MAX-info_ptr->unknown_chunks_num || + (unsigned int)/*SAFE*/(num_unknowns +/*SAFE*/ + info_ptr->unknown_chunks_num) >= + PNG_SIZE_MAX/png_sizeof(png_unknown_chunk)) + np=NULL; + + else + np = (png_unknown_chunkp)png_malloc_warn(png_ptr, + (png_size_t)(info_ptr->unknown_chunks_num + num_unknowns) * + png_sizeof(png_unknown_chunk)); if (np == NULL) { diff --git a/dll/3rdparty/libpng/pngtest.c b/dll/3rdparty/libpng/pngtest.c index 3de363cdce9..1c0dc35dda6 100644 --- a/dll/3rdparty/libpng/pngtest.c +++ b/dll/3rdparty/libpng/pngtest.c @@ -1,8 +1,8 @@ /* pngtest.c - a simple test program to test libpng * - * Last changed in libpng 1.5.6 [November 3, 2011] - * Copyright (c) 1998-2011 Glenn Randers-Pehrson + * Last changed in libpng 1.5.14 [January 24, 2013] + * Copyright (c) 1998-2013 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -33,16 +33,23 @@ #define _POSIX_SOURCE 1 -#include "zlib.h" +#include +#include +#include + +/* Defined so I can write to a file on gui/windowing platforms */ +/* #define STDERR stderr */ +#define STDERR stdout /* For DOS */ + #include "png.h" + +#ifdef PNG_READ_SUPPORTED /* else nothing can be done */ +#include "zlib.h" /* Copied from pngpriv.h but only used in error messages below. */ #ifndef PNG_ZBUF_SIZE # define PNG_ZBUF_SIZE 8192 #endif -# include -# include -# include -# define FCLOSE(file) fclose(file) +#define FCLOSE(file) fclose(file) #ifndef PNG_STDIO_SUPPORTED typedef FILE * png_FILE_p; @@ -67,17 +74,6 @@ typedef FILE * png_FILE_p; # define SINGLE_ROWBUF_ALLOC /* Makes buffer overruns easier to nail */ #endif -/* The code uses memcmp and memcpy on large objects (typically row pointers) so - * it is necessary to do soemthing special on certain architectures, note that - * the actual support for this was effectively removed in 1.4, so only the - * memory remains in this program: - */ -#define CVT_PTR(ptr) (ptr) -#define CVT_PTR_NOCHECK(ptr) (ptr) -#define png_memcmp memcmp -#define png_memcpy memcpy -#define png_memset memset - /* Turn on CPU timing #define PNGTEST_TIMING */ @@ -99,30 +95,37 @@ static char tIME_string[PNG_tIME_STRING_LENGTH] = "tIME chunk is not present"; static int verbose = 0; static int strict = 0; - -int test_one_file PNGARG((PNG_CONST char *inname, PNG_CONST char *outname)); +static int relaxed = 0; +static int unsupported_chunks = 0; /* chunk unsupported by libpng in input */ +static int error_count = 0; /* count calls to png_error */ +static int warning_count = 0; /* count calls to png_warning */ #ifdef __TURBOC__ #include #endif -/* Defined so I can write to a file on gui/windowing platforms */ -/* #define STDERR stderr */ -#define STDERR stdout /* For DOS */ - /* Define png_jmpbuf() in case we are using a pre-1.0.6 version of libpng */ #ifndef png_jmpbuf # define png_jmpbuf(png_ptr) png_ptr->jmpbuf #endif +/* Defines for unknown chunk handling if required. */ +#ifndef PNG_HANDLE_CHUNK_ALWAYS +# define PNG_HANDLE_CHUNK_ALWAYS 3 +#endif +#ifndef PNG_HANDLE_CHUNK_IF_SAFE +# define PNG_HANDLE_CHUNK_IF_SAFE 2 +#endif + +/* Utility to save typing/errors, the argument must be a name */ +#define MEMZERO(var) ((void)memset(&var, 0, sizeof var)) + /* Example of using row callbacks to make a simple progress meter */ static int status_pass = 1; static int status_dots_requested = 0; static int status_dots = 1; -void PNGCBAPI -read_row_callback(png_structp png_ptr, png_uint_32 row_number, int pass); -void PNGCBAPI +static void PNGCBAPI read_row_callback(png_structp png_ptr, png_uint_32 row_number, int pass) { if (png_ptr == NULL || row_number > PNG_UINT_31_MAX) @@ -146,9 +149,8 @@ read_row_callback(png_structp png_ptr, png_uint_32 row_number, int pass) fprintf(stdout, "r"); } -void PNGCBAPI -write_row_callback(png_structp png_ptr, png_uint_32 row_number, int pass); -void PNGCBAPI +#ifdef PNG_WRITE_SUPPORTED +static void PNGCBAPI write_row_callback(png_structp png_ptr, png_uint_32 row_number, int pass) { if (png_ptr == NULL || row_number > PNG_UINT_31_MAX || pass > 7) @@ -156,6 +158,7 @@ write_row_callback(png_structp png_ptr, png_uint_32 row_number, int pass) fprintf(stdout, "w"); } +#endif #ifdef PNG_READ_USER_TRANSFORM_SUPPORTED @@ -164,9 +167,7 @@ write_row_callback(png_structp png_ptr, png_uint_32 row_number, int pass) * 5 in case illegal filter values are present.) */ static png_uint_32 filters_used[256]; -void PNGCBAPI -count_filters(png_structp png_ptr, png_row_infop row_info, png_bytep data); -void PNGCBAPI +static void PNGCBAPI count_filters(png_structp png_ptr, png_row_infop row_info, png_bytep data) { if (png_ptr != NULL && row_info != NULL) @@ -181,9 +182,7 @@ count_filters(png_structp png_ptr, png_row_infop row_info, png_bytep data) static png_uint_32 zero_samples; -void PNGCBAPI -count_zero_samples(png_structp png_ptr, png_row_infop row_info, png_bytep data); -void PNGCBAPI +static void PNGCBAPI count_zero_samples(png_structp png_ptr, png_row_infop row_info, png_bytep data) { png_bytep dp = data; @@ -290,8 +289,6 @@ count_zero_samples(png_structp png_ptr, png_row_infop row_info, png_bytep data) } #endif /* PNG_WRITE_USER_TRANSFORM_SUPPORTED */ -static int wrote_question = 0; - #ifndef PNG_STDIO_SUPPORTED /* START of code to validate stdio-free compilation */ /* These copies of the default read/write functions come from pngrio.c and @@ -344,7 +341,6 @@ pngtest_check_io_state(png_structp png_ptr, png_size_t data_length, } #endif -#ifndef USE_FAR_KEYWORD static void PNGCBAPI pngtest_read_data(png_structp png_ptr, png_bytep data, png_size_t length) { @@ -369,59 +365,6 @@ pngtest_read_data(png_structp png_ptr, png_bytep data, png_size_t length) pngtest_check_io_state(png_ptr, length, PNG_IO_READING); #endif } -#else -/* This is the model-independent version. Since the standard I/O library - can't handle far buffers in the medium and small models, we have to copy - the data. -*/ - -#define NEAR_BUF_SIZE 1024 -#define MIN(a,b) (a <= b ? a : b) - -static void PNGCBAPI -pngtest_read_data(png_structp png_ptr, png_bytep data, png_size_t length) -{ - png_size_t check; - png_byte *n_data; - png_FILE_p io_ptr; - - /* Check if data really is near. If so, use usual code. */ - n_data = (png_byte *)CVT_PTR_NOCHECK(data); - io_ptr = (png_FILE_p)CVT_PTR(png_get_io_ptr(png_ptr)); - if ((png_bytep)n_data == data) - { - check = fread(n_data, 1, length, io_ptr); - } - else - { - png_byte buf[NEAR_BUF_SIZE]; - png_size_t read, remaining, err; - check = 0; - remaining = length; - - do - { - read = MIN(NEAR_BUF_SIZE, remaining); - err = fread(buf, 1, 1, io_ptr); - png_memcpy(data, buf, read); /* Copy far buffer to near buffer */ - if (err != read) - break; - else - check += err; - data += read; - remaining -= read; - } - while (remaining != 0); - } - - if (check != length) - png_error(png_ptr, "Read Error"); - -#ifdef PNG_IO_STATE_SUPPORTED - pngtest_check_io_state(png_ptr, length, PNG_IO_READING); -#endif -} -#endif /* USE_FAR_KEYWORD */ #ifdef PNG_WRITE_FLUSH_SUPPORTED static void PNGCBAPI @@ -437,7 +380,6 @@ pngtest_flush(png_structp png_ptr) * write_data function and use it at run time with png_set_write_fn(), rather * than changing the library. */ -#ifndef USE_FAR_KEYWORD static void PNGCBAPI pngtest_write_data(png_structp png_ptr, png_bytep data, png_size_t length) { @@ -454,81 +396,31 @@ pngtest_write_data(png_structp png_ptr, png_bytep data, png_size_t length) pngtest_check_io_state(png_ptr, length, PNG_IO_WRITING); #endif } -#else -/* This is the model-independent version. Since the standard I/O library - can't handle far buffers in the medium and small models, we have to copy - the data. -*/ - -#define NEAR_BUF_SIZE 1024 -#define MIN(a,b) (a <= b ? a : b) - -static void PNGCBAPI -pngtest_write_data(png_structp png_ptr, png_bytep data, png_size_t length) -{ - png_size_t check; - png_byte *near_data; /* Needs to be "png_byte *" instead of "png_bytep" */ - png_FILE_p io_ptr; - - /* Check if data really is near. If so, use usual code. */ - near_data = (png_byte *)CVT_PTR_NOCHECK(data); - io_ptr = (png_FILE_p)CVT_PTR(png_get_io_ptr(png_ptr)); - - if ((png_bytep)near_data == data) - { - check = fwrite(near_data, 1, length, io_ptr); - } - - else - { - png_byte buf[NEAR_BUF_SIZE]; - png_size_t written, remaining, err; - check = 0; - remaining = length; - - do - { - written = MIN(NEAR_BUF_SIZE, remaining); - png_memcpy(buf, data, written); /* Copy far buffer to near buffer */ - err = fwrite(buf, 1, written, io_ptr); - if (err != written) - break; - else - check += err; - data += written; - remaining -= written; - } - while (remaining != 0); - } - - if (check != length) - { - png_error(png_ptr, "Write Error"); - } - -#ifdef PNG_IO_STATE_SUPPORTED - pngtest_check_io_state(png_ptr, length, PNG_IO_WRITING); -#endif -} -#endif /* USE_FAR_KEYWORD */ +#endif /* !PNG_STDIO_SUPPORTED */ /* This function is called when there is a warning, but the library thinks * it can continue anyway. Replacement functions don't have to do anything * here if you don't want to. In the default configuration, png_ptr is * not used, but it is passed in case it may be useful. */ +typedef struct +{ + PNG_CONST char *file_name; +} pngtest_error_parameters; + static void PNGCBAPI pngtest_warning(png_structp png_ptr, png_const_charp message) { PNG_CONST char *name = "UNKNOWN (ERROR!)"; - char *test; - test = png_get_error_ptr(png_ptr); + pngtest_error_parameters *test = + (pngtest_error_parameters*)png_get_error_ptr(png_ptr); - if (test == NULL) - fprintf(STDERR, "%s: libpng warning: %s\n", name, message); + ++warning_count; - else - fprintf(STDERR, "%s: libpng warning: %s\n", test, message); + if (test != NULL && test->file_name != NULL) + name = test->file_name; + + fprintf(STDERR, "%s: libpng warning: %s\n", name, message); } /* This is the default error handling function. Note that replacements for @@ -539,12 +431,14 @@ pngtest_warning(png_structp png_ptr, png_const_charp message) static void PNGCBAPI pngtest_error(png_structp png_ptr, png_const_charp message) { + ++error_count; + pngtest_warning(png_ptr, message); /* We can return because png_error calls the default handler, which is * actually OK in this case. */ } -#endif /* !PNG_STDIO_SUPPORTED */ + /* END of code to validate stdio-free compilation */ /* START of code to validate memory allocation and deallocation */ @@ -563,9 +457,9 @@ typedef struct memory_information { png_alloc_size_t size; png_voidp pointer; - struct memory_information FAR *next; + struct memory_information *next; } memory_information; -typedef memory_information FAR *memory_infop; +typedef memory_information *memory_infop; static memory_infop pinformation = NULL; static int current_allocation = 0; @@ -595,7 +489,7 @@ PNGCBAPI png_debug_malloc(png_structp png_ptr, png_alloc_size_t size) memory_infop pinfo; png_set_mem_fn(png_ptr, NULL, NULL, NULL); pinfo = (memory_infop)png_malloc(png_ptr, - png_sizeof(*pinfo)); + (sizeof *pinfo)); pinfo->size = size; current_allocation += size; total_allocation += size; @@ -621,7 +515,7 @@ PNGCBAPI png_debug_malloc(png_structp png_ptr, png_alloc_size_t size) pinfo->next = pinformation; pinformation = pinfo; /* Make sure the caller isn't assuming zeroed memory. */ - png_memset(pinfo->pointer, 0xdd, pinfo->size); + memset(pinfo->pointer, 0xdd, pinfo->size); if (verbose) printf("png_malloc %lu bytes at %p\n", (unsigned long)size, @@ -648,7 +542,7 @@ png_debug_free(png_structp png_ptr, png_voidp ptr) /* Unlink the element from the list. */ { - memory_infop FAR *ppinfo = &pinformation; + memory_infop *ppinfo = &pinformation; for (;;) { @@ -662,7 +556,7 @@ png_debug_free(png_structp png_ptr, png_voidp ptr) fprintf(STDERR, "Duplicate free of memory\n"); /* We must free the list element too, but first kill the memory that is to be freed. */ - png_memset(ptr, 0x55, pinfo->size); + memset(ptr, 0x55, pinfo->size); png_free_default(png_ptr, pinfo); pinfo = NULL; break; @@ -689,25 +583,73 @@ png_debug_free(png_structp png_ptr, png_voidp ptr) /* END of code to test memory allocation/deallocation */ +#ifdef PNG_READ_USER_CHUNKS_SUPPORTED /* Demonstration of user chunk support of the sTER and vpAg chunks */ -#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED /* (sTER is a public chunk not yet known by libpng. vpAg is a private chunk used in ImageMagick to store "virtual page" size). */ -static png_uint_32 user_chunk_data[4]; +static struct user_chunk_data +{ + png_const_infop info_ptr; + png_uint_32 vpAg_width, vpAg_height; + png_byte vpAg_units; + png_byte sTER_mode; + int location[2]; +} +user_chunk_data; - /* 0: sTER mode + 1 - * 1: vpAg width - * 2: vpAg height - * 3: vpAg units - */ +/* Used for location and order; zero means nothing. */ +#define have_sTER 0x01 +#define have_vpAg 0x02 +#define before_PLTE 0x10 +#define before_IDAT 0x20 +#define after_IDAT 0x40 + +static void +init_callback_info(png_const_infop info_ptr) +{ + MEMZERO(user_chunk_data); + user_chunk_data.info_ptr = info_ptr; +} + +static int +set_location(png_structp png_ptr, struct user_chunk_data *data, int what) +{ + int location; + + if ((data->location[0] & what) || (data->location[1] & what)) + return 0; /* already have one of these */ + + /* Find where we are (the code below zeros info_ptr to indicate that the + * chunks before the first IDAT have been read.) + */ + if (data->info_ptr == NULL) /* after IDAT */ + location = what | after_IDAT; + + else if (png_get_valid(png_ptr, data->info_ptr, PNG_INFO_PLTE)) + location = what | before_IDAT; + + else + location = what | before_PLTE; + + if (data->location[0] == 0) + data->location[0] = location; + + else + data->location[1] = location; + + return 1; /* handled */ +} static int PNGCBAPI read_user_chunk_callback(png_struct *png_ptr, png_unknown_chunkp chunk) { - png_uint_32 - *my_user_chunk_data; + struct user_chunk_data *my_user_chunk_data = + (struct user_chunk_data*)png_get_user_chunk_ptr(png_ptr); + + if (my_user_chunk_data == NULL) + png_error(png_ptr, "lost user chunk pointer"); /* Return one of the following: * return (-n); chunk had an error @@ -732,9 +674,14 @@ static int PNGCBAPI read_user_chunk_callback(png_struct *png_ptr, if (chunk->data[0] != 0 && chunk->data[0] != 1) return (-1); /* Invalid mode */ - my_user_chunk_data=(png_uint_32 *) png_get_user_chunk_ptr(png_ptr); - my_user_chunk_data[0]=chunk->data[0]+1; - return (1); + if (set_location(png_ptr, my_user_chunk_data, have_sTER)) + { + my_user_chunk_data->sTER_mode=chunk->data[0]; + return (1); + } + + else + return (0); /* duplicate sTER - give it to libpng */ } if (chunk->name[0] != 118 || chunk->name[1] != 112 || /* v p */ @@ -746,24 +693,119 @@ static int PNGCBAPI read_user_chunk_callback(png_struct *png_ptr, if (chunk->size != 9) return (-1); /* Error return */ - my_user_chunk_data=(png_uint_32 *) png_get_user_chunk_ptr(png_ptr); + if (!set_location(png_ptr, my_user_chunk_data, have_vpAg)) + return (0); /* duplicate vpAg */ - my_user_chunk_data[1]=png_get_uint_31(png_ptr, chunk->data); - my_user_chunk_data[2]=png_get_uint_31(png_ptr, chunk->data + 4); - my_user_chunk_data[3]=(png_uint_32)chunk->data[8]; + my_user_chunk_data->vpAg_width = png_get_uint_31(png_ptr, chunk->data); + my_user_chunk_data->vpAg_height = png_get_uint_31(png_ptr, chunk->data + 4); + my_user_chunk_data->vpAg_units = chunk->data[8]; return (1); - } + +#ifdef PNG_WRITE_SUPPORTED +static void +write_sTER_chunk(png_structp write_ptr) +{ + png_byte png_sTER[5] = {115, 84, 69, 82, '\0'}; + + if (verbose) + fprintf(STDERR, "\n stereo mode = %d\n", user_chunk_data.sTER_mode); + + png_write_chunk(write_ptr, png_sTER, &user_chunk_data.sTER_mode, 1); +} + +static void +write_vpAg_chunk(png_structp write_ptr) +{ + png_byte png_vpAg[5] = {118, 112, 65, 103, '\0'}; + + png_byte vpag_chunk_data[9]; + + if (verbose) + fprintf(STDERR, " vpAg = %lu x %lu, units = %d\n", + (unsigned long)user_chunk_data.vpAg_width, + (unsigned long)user_chunk_data.vpAg_height, + user_chunk_data.vpAg_units); + + png_save_uint_32(vpag_chunk_data, user_chunk_data.vpAg_width); + png_save_uint_32(vpag_chunk_data + 4, user_chunk_data.vpAg_height); + vpag_chunk_data[8] = user_chunk_data.vpAg_units; + png_write_chunk(write_ptr, png_vpAg, vpag_chunk_data, 9); +} + +static void +write_chunks(png_structp write_ptr, int location) +{ + int i; + + /* Notice that this preserves the original chunk order, however chunks + * intercepted by the callback will be written *after* chunks passed to + * libpng. This will actually reverse a pair of sTER chunks or a pair of + * vpAg chunks, resulting in an error later. This is not worth worrying + * about - the chunks should not be duplicated! + */ + for (i=0; i<2; ++i) + { + if (user_chunk_data.location[i] == (location | have_sTER)) + write_sTER_chunk(write_ptr); + + else if (user_chunk_data.location[i] == (location | have_vpAg)) + write_vpAg_chunk(write_ptr); + } +} +#endif /* PNG_WRITE_SUPPORTED */ +#else /* !PNG_READ_USER_CHUNKS_SUPPORTED */ +# define write_chunks(pp,loc) ((void)0) #endif /* END of code to demonstrate user chunk support */ +/* START of code to check that libpng has the required text support; this only + * checks for the write support because if read support is missing the chunk + * will simply not be reported back to pngtest. + */ +#ifdef PNG_TEXT_SUPPORTED +static void +pngtest_check_text_support(png_structp png_ptr, png_textp text_ptr, + int num_text) +{ + while (num_text > 0) + { + switch (text_ptr[--num_text].compression) + { + case PNG_TEXT_COMPRESSION_NONE: + break; + + case PNG_TEXT_COMPRESSION_zTXt: +# ifndef PNG_WRITE_zTXt_SUPPORTED + ++unsupported_chunks; +# endif + break; + + case PNG_ITXT_COMPRESSION_NONE: + case PNG_ITXT_COMPRESSION_zTXt: +# ifndef PNG_WRITE_iTXt_SUPPORTED + ++unsupported_chunks; +# endif + break; + + default: + /* This is an error */ + png_error(png_ptr, "invalid text chunk compression field"); + break; + } + } +} +#endif +/* END of code to check that libpng has the required text support */ + /* Test one file */ -int +static int test_one_file(PNG_CONST char *inname, PNG_CONST char *outname) { static png_FILE_p fpin; static png_FILE_p fpout; /* "static" prevents setjmp corruption */ + pngtest_error_parameters error_parameters; png_structp read_ptr; png_infop read_info_ptr, end_info_ptr; #ifdef PNG_WRITE_SUPPORTED @@ -780,15 +822,9 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname) png_uint_32 width, height; int num_pass, pass; int bit_depth, color_type; -#ifdef PNG_SETJMP_SUPPORTED -#ifdef USE_FAR_KEYWORD - jmp_buf tmp_jmpbuf; -#endif -#endif - - char inbuf[256], outbuf[256]; row_buf = NULL; + error_parameters.file_name = inname; if ((fpin = fopen(inname, "rb")) == NULL) { @@ -812,20 +848,9 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname) read_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); #endif -#ifndef PNG_STDIO_SUPPORTED - png_set_error_fn(read_ptr, (png_voidp)inname, pngtest_error, - pngtest_warning); -#endif + png_set_error_fn(read_ptr, &error_parameters, pngtest_error, + pngtest_warning); -#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED - user_chunk_data[0] = 0; - user_chunk_data[1] = 0; - user_chunk_data[2] = 0; - user_chunk_data[3] = 0; - png_set_read_user_chunk_fn(read_ptr, user_chunk_data, - read_user_chunk_callback); - -#endif #ifdef PNG_WRITE_SUPPORTED #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG write_ptr = @@ -835,10 +860,8 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname) write_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); #endif -#ifndef PNG_STDIO_SUPPORTED - png_set_error_fn(write_ptr, (png_voidp)inname, pngtest_error, - pngtest_warning); -#endif + png_set_error_fn(write_ptr, &error_parameters, pngtest_error, + pngtest_warning); #endif pngtest_debug("Allocating read_info, write_info and end_info structures"); read_info_ptr = png_create_info_struct(read_ptr); @@ -848,13 +871,15 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname) write_end_info_ptr = png_create_info_struct(write_ptr); #endif +#ifdef PNG_READ_USER_CHUNKS_SUPPORTED + init_callback_info(read_info_ptr); + png_set_read_user_chunk_fn(read_ptr, &user_chunk_data, + read_user_chunk_callback); +#endif + #ifdef PNG_SETJMP_SUPPORTED pngtest_debug("Setting jmpbuf for read struct"); -#ifdef USE_FAR_KEYWORD - if (setjmp(tmp_jmpbuf)) -#else if (setjmp(png_jmpbuf(read_ptr))) -#endif { fprintf(STDERR, "%s -> %s: libpng read error\n", inname, outname); png_free(read_ptr, row_buf); @@ -868,18 +893,11 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname) FCLOSE(fpout); return (1); } -#ifdef USE_FAR_KEYWORD - png_memcpy(png_jmpbuf(read_ptr), tmp_jmpbuf, png_sizeof(jmp_buf)); -#endif #ifdef PNG_WRITE_SUPPORTED pngtest_debug("Setting jmpbuf for write struct"); -#ifdef USE_FAR_KEYWORD - if (setjmp(tmp_jmpbuf)) -#else if (setjmp(png_jmpbuf(write_ptr))) -#endif { fprintf(STDERR, "%s -> %s: libpng write error\n", inname, outname); png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr); @@ -891,12 +909,34 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname) FCLOSE(fpout); return (1); } +#endif +#endif -#ifdef USE_FAR_KEYWORD - png_memcpy(png_jmpbuf(write_ptr), tmp_jmpbuf, png_sizeof(jmp_buf)); -#endif + if (strict) + { + /* Treat png_benign_error() as errors on read */ + png_set_benign_errors(read_ptr, 0); + +#ifdef PNG_WRITE_SUPPORTED + /* Treat them as errors on write */ + png_set_benign_errors(write_ptr, 0); #endif + + /* if strict is not set, then app warnings and errors are treated as + * warnings in release builds, but not in unstable builds; this can be + * changed with '--relaxed'. + */ + } + + else if (relaxed) + { + /* Allow application (pngtest) errors and warnings to pass */ + png_set_benign_errors(read_ptr, 1); + +#ifdef PNG_WRITE_SUPPORTED + png_set_benign_errors(write_ptr, 1); #endif + } pngtest_debug("Initializing input and output streams"); #ifdef PNG_STDIO_SUPPORTED @@ -916,14 +956,6 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname) # endif #endif -#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED - /* Normally one would use Z_DEFAULT_STRATEGY for text compression. - * This is here just to make pngtest replicate the results from libpng - * versions prior to 1.5.4, and to test this new API. - */ - png_set_text_compression_strategy(write_ptr, Z_FILTERED); -#endif - if (status_dots_requested == 1) { #ifdef PNG_WRITE_SUPPORTED @@ -955,24 +987,37 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname) png_set_write_user_transform_fn(write_ptr, count_zero_samples); #endif -#ifdef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED -# ifndef PNG_HANDLE_CHUNK_ALWAYS -# define PNG_HANDLE_CHUNK_ALWAYS 3 -# endif +#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED + /* Preserve all the unknown chunks, if possible. If this is disabled then, + * even if the png_{get,set}_unknown_chunks stuff is enabled, we can't use + * libpng to *save* the unknown chunks on read (because we can't switch the + * save option on!) + * + * Notice that if SET_UNKNOWN_CHUNKS is *not* supported read will discard all + * unknown chunks and write will write them all. + */ +#ifdef PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED png_set_keep_unknown_chunks(read_ptr, PNG_HANDLE_CHUNK_ALWAYS, NULL, 0); #endif #ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED -# ifndef PNG_HANDLE_CHUNK_IF_SAFE -# define PNG_HANDLE_CHUNK_IF_SAFE 2 -# endif - png_set_keep_unknown_chunks(write_ptr, PNG_HANDLE_CHUNK_IF_SAFE, + png_set_keep_unknown_chunks(write_ptr, PNG_HANDLE_CHUNK_ALWAYS, NULL, 0); +#endif #endif pngtest_debug("Reading info struct"); png_read_info(read_ptr, read_info_ptr); +#ifdef PNG_READ_USER_CHUNKS_SUPPORTED + /* This is a bit of a hack; there is no obvious way in the callback function + * to determine that the chunks before the first IDAT have been read, so + * remove the info_ptr (which is only used to determine position relative to + * PLTE) here to indicate that we are after the IDAT. + */ + user_chunk_data.info_ptr = NULL; +#endif + pngtest_debug("Transferring info struct"); { int interlace_type, compression_type, filter_type; @@ -1164,8 +1209,19 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname) { pngtest_debug1("Handling %d iTXt/tEXt/zTXt chunks", num_text); + pngtest_check_text_support(read_ptr, text_ptr, num_text); + if (verbose) - printf("\n Text compression=%d\n", text_ptr->compression); + { + int i; + + printf("\n"); + for (i=0; i 0) { pngtest_debug1("Handling %d iTXt/tEXt/zTXt chunks", num_text); + + pngtest_check_text_support(read_ptr, text_ptr, num_text); + + if (verbose) + { + int i; + + printf("\n"); + for (i=0; i 0) + { + /* We don't really expect to get here because of the setjmp handling + * above, but this is safe. + */ + fprintf(STDERR, "\n %s: %d libpng errors found (%d warnings)", + inname, error_count, warning_count); + + if (strict != 0) + return (1); + } + +# ifdef PNG_WRITE_SUPPORTED + /* If there we no write support nothing was written! */ + else if (unsupported_chunks > 0) + { + fprintf(STDERR, "\n %s: unsupported chunks (%d)%s", + inname, unsupported_chunks, strict ? ": IGNORED --strict!" : ""); + } +# endif + + else if (warning_count > 0) + { + fprintf(STDERR, "\n %s: %d libpng warnings found", + inname, warning_count); + + if (strict != 0) + return (1); + } + pngtest_debug("Opening files for comparison"); if ((fpin = fopen(inname, "rb")) == NULL) { @@ -1457,71 +1555,85 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname) return (1); } - for (;;) +#ifdef PNG_WRITE_SUPPORTED /* else nothing was written */ { - png_size_t num_in, num_out; + int wrote_question = 0; - num_in = fread(inbuf, 1, 1, fpin); - num_out = fread(outbuf, 1, 1, fpout); - - if (num_in != num_out) + for (;;) { - fprintf(STDERR, "\nFiles %s and %s are of a different size\n", - inname, outname); + png_size_t num_in, num_out; + char inbuf[256], outbuf[256]; - if (wrote_question == 0) + + num_in = fread(inbuf, 1, sizeof inbuf, fpin); + num_out = fread(outbuf, 1, sizeof outbuf, fpout); + + if (num_in != num_out) { - fprintf(STDERR, - " Was %s written with the same maximum IDAT chunk size (%d bytes),", - inname, PNG_ZBUF_SIZE); - fprintf(STDERR, - "\n filtering heuristic (libpng default), compression"); - fprintf(STDERR, - " level (zlib default),\n and zlib version (%s)?\n\n", - ZLIB_VERSION); - wrote_question = 1; - } + fprintf(STDERR, "\nFiles %s and %s are of a different size\n", + inname, outname); - FCLOSE(fpin); - FCLOSE(fpout); - - if (strict != 0) - return (1); - - else - return (0); - } - - if (!num_in) - break; - - if (png_memcmp(inbuf, outbuf, num_in)) - { - fprintf(STDERR, "\nFiles %s and %s are different\n", inname, outname); - - if (wrote_question == 0) - { - fprintf(STDERR, + if (wrote_question == 0 && unsupported_chunks == 0) + { + fprintf(STDERR, " Was %s written with the same maximum IDAT chunk size (%d bytes),", inname, PNG_ZBUF_SIZE); - fprintf(STDERR, - "\n filtering heuristic (libpng default), compression"); - fprintf(STDERR, - " level (zlib default),\n and zlib version (%s)?\n\n", - ZLIB_VERSION); - wrote_question = 1; + fprintf(STDERR, + "\n filtering heuristic (libpng default), compression"); + fprintf(STDERR, + " level (zlib default),\n and zlib version (%s)?\n\n", + ZLIB_VERSION); + wrote_question = 1; + } + + FCLOSE(fpin); + FCLOSE(fpout); + + if (strict != 0 && unsupported_chunks == 0) + return (1); + + else + return (0); } - FCLOSE(fpin); - FCLOSE(fpout); + if (!num_in) + break; - if (strict != 0) - return (1); + if (memcmp(inbuf, outbuf, num_in)) + { + fprintf(STDERR, "\nFiles %s and %s are different\n", inname, + outname); - else - return (0); + if (wrote_question == 0 && unsupported_chunks == 0) + { + fprintf(STDERR, + " Was %s written with the same maximum IDAT chunk size (%d bytes),", + inname, PNG_ZBUF_SIZE); + fprintf(STDERR, + "\n filtering heuristic (libpng default), compression"); + fprintf(STDERR, + " level (zlib default),\n and zlib version (%s)?\n\n", + ZLIB_VERSION); + wrote_question = 1; + } + + FCLOSE(fpin); + FCLOSE(fpout); + + /* NOTE: the unsupported_chunks escape is permitted here because + * unsupported text chunk compression will result in the compression + * mode being changed (to NONE) yet, in the test case, the result + * can be exactly the same size! + */ + if (strict != 0 && unsupported_chunks == 0) + return (1); + + else + return (0); + } } } +#endif /* PNG_WRITE_SUPPORTED */ FCLOSE(fpin); FCLOSE(fpout); @@ -1607,6 +1719,16 @@ main(int argc, char *argv[]) verbose = 1; inname = argv[2]; strict++; + relaxed = 0; + } + + else if (strcmp(argv[1], "--relaxed") == 0) + { + status_dots_requested = 0; + verbose = 1; + inname = argv[2]; + strict = 0; + relaxed++; } else @@ -1815,6 +1937,15 @@ main(int argc, char *argv[]) return (int)(ierror != 0); } +#else +int +main(void) +{ + fprintf(STDERR, + " test ignored because libpng was not built with read support\n"); + return 0; +} +#endif /* Generate a compiler error if there is an old png.h in the search path. */ -typedef png_libpng_version_1_5_12 Your_png_h_is_not_version_1_5_12; +typedef png_libpng_version_1_5_14 Your_png_h_is_not_version_1_5_14; diff --git a/dll/3rdparty/libpng/pngwtran.c b/dll/3rdparty/libpng/pngwtran.c index 96608efcb4a..743581327b6 100644 --- a/dll/3rdparty/libpng/pngwtran.c +++ b/dll/3rdparty/libpng/pngwtran.c @@ -1,8 +1,8 @@ /* pngwtran.c - transforms the data in a row for PNG writers * - * Last changed in libpng 1.5.6 [November 3, 2011] - * Copyright (c) 1998-2011 Glenn Randers-Pehrson + * Last changed in libpng 1.5.13 [September 27, 2012] + * Copyright (c) 1998-2012 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -45,8 +45,20 @@ png_do_write_transformations(png_structp png_ptr, png_row_infop row_info) #ifdef PNG_WRITE_FILLER_SUPPORTED if (png_ptr->transformations & PNG_FILLER) - png_do_strip_channel(row_info, png_ptr->row_buf + 1, - !(png_ptr->flags & PNG_FLAG_FILLER_AFTER)); + { + if (png_ptr->color_type & (PNG_COLOR_MASK_ALPHA|PNG_COLOR_MASK_PALETTE)) + { + /* GA, RGBA or palette; in any of these cases libpng will not do the + * the correct thing (whatever that might be). + */ + png_warning(png_ptr, "incorrect png_set_filler call ignored"); + png_ptr->transformations &= ~PNG_FILLER; + } + + else + png_do_strip_channel(row_info, png_ptr->row_buf + 1, + !(png_ptr->flags & PNG_FLAG_FILLER_AFTER)); + } #endif #ifdef PNG_WRITE_PACKSWAP_SUPPORTED diff --git a/dll/3rdparty/libpng/pngwutil.c b/dll/3rdparty/libpng/pngwutil.c index b49704f1a54..604ad32aacc 100644 --- a/dll/3rdparty/libpng/pngwutil.c +++ b/dll/3rdparty/libpng/pngwutil.c @@ -1,8 +1,8 @@ /* pngwutil.c - utilities to write a PNG file * - * Last changed in libpng 1.5.10 [March 8, 2012] - * Copyright (c) 1998-2012 Glenn Randers-Pehrson + * Last changed in libpng 1.5.14 [January 24, 2013] + * Copyright (c) 1998-2013 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -460,24 +460,21 @@ png_text_compress(png_structp png_ptr, old_ptr = comp->output_ptr; comp->output_ptr = (png_bytepp)png_malloc(png_ptr, - (png_alloc_size_t) - (comp->max_output_ptr * png_sizeof(png_charpp))); + (comp->max_output_ptr * png_sizeof(png_bytep))); png_memcpy(comp->output_ptr, old_ptr, old_max - * png_sizeof(png_charp)); + * png_sizeof(png_bytep)); png_free(png_ptr, old_ptr); } else comp->output_ptr = (png_bytepp)png_malloc(png_ptr, - (png_alloc_size_t) - (comp->max_output_ptr * png_sizeof(png_charp))); + (comp->max_output_ptr * png_sizeof(png_bytep))); } /* Save the data */ comp->output_ptr[comp->num_output_ptr] = - (png_bytep)png_malloc(png_ptr, - (png_alloc_size_t)png_ptr->zbuf_size); + (png_bytep)png_malloc(png_ptr, png_ptr->zbuf_size); png_memcpy(comp->output_ptr[comp->num_output_ptr], png_ptr->zbuf, png_ptr->zbuf_size); @@ -1370,7 +1367,8 @@ png_write_tRNS(png_structp png_ptr, png_const_bytep trans_alpha, } /* Write the chunk out as it is */ - png_write_complete_chunk(png_ptr, png_tRNS, trans_alpha, (png_size_t)num_trans); + png_write_complete_chunk(png_ptr, png_tRNS, trans_alpha, + (png_size_t)num_trans); } else if (color_type == PNG_COLOR_TYPE_GRAY) diff --git a/dll/3rdparty/libtiff/mkg3states.c b/dll/3rdparty/libtiff/mkg3states.c index 7f4346b7f3a..1df9ccc5f6c 100644 --- a/dll/3rdparty/libtiff/mkg3states.c +++ b/dll/3rdparty/libtiff/mkg3states.c @@ -1,4 +1,4 @@ -/* "$Id: mkg3states.c,v 1.10.2.1 2010-06-08 18:50:41 bfriesen Exp $ */ +/* "$Id: mkg3states.c,v 1.11 2010-03-10 18:56:48 bfriesen Exp $ */ /* * Copyright (c) 1991-1997 Sam Leffler diff --git a/dll/3rdparty/libtiff/tif_aux.c b/dll/3rdparty/libtiff/tif_aux.c index 272f0d9b682..927150a4935 100644 --- a/dll/3rdparty/libtiff/tif_aux.c +++ b/dll/3rdparty/libtiff/tif_aux.c @@ -1,4 +1,4 @@ -/* $Id: tif_aux.c,v 1.20.2.3 2010-06-09 21:15:27 bfriesen Exp $ */ +/* $Id: tif_aux.c,v 1.26 2010-07-01 15:33:28 dron Exp $ */ /* * Copyright (c) 1991-1997 Sam Leffler @@ -33,12 +33,38 @@ #include "tif_predict.h" #include -tdata_t -_TIFFCheckRealloc(TIFF* tif, tdata_t buffer, - size_t nmemb, size_t elem_size, const char* what) +uint32 +_TIFFMultiply32(TIFF* tif, uint32 first, uint32 second, const char* where) { - tdata_t cp = NULL; - tsize_t bytes = nmemb * elem_size; + uint32 bytes = first * second; + + if (second && bytes / second != first) { + TIFFErrorExt(tif->tif_clientdata, where, "Integer overflow in %s", where); + bytes = 0; + } + + return bytes; +} + +uint64 +_TIFFMultiply64(TIFF* tif, uint64 first, uint64 second, const char* where) +{ + uint64 bytes = first * second; + + if (second && bytes / second != first) { + TIFFErrorExt(tif->tif_clientdata, where, "Integer overflow in %s", where); + bytes = 0; + } + + return bytes; +} + +void* +_TIFFCheckRealloc(TIFF* tif, void* buffer, + tmsize_t nmemb, tmsize_t elem_size, const char* what) +{ + void* cp = NULL; + tmsize_t bytes = nmemb * elem_size; /* * XXX: Check for integer overflow. @@ -46,32 +72,33 @@ _TIFFCheckRealloc(TIFF* tif, tdata_t buffer, if (nmemb && elem_size && bytes / elem_size == nmemb) cp = _TIFFrealloc(buffer, bytes); - if (cp == NULL) + if (cp == NULL) { TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "Failed to allocate memory for %s " "(%ld elements of %ld bytes each)", what,(long) nmemb, (long) elem_size); + } return cp; } -tdata_t -_TIFFCheckMalloc(TIFF* tif, size_t nmemb, size_t elem_size, const char* what) +void* +_TIFFCheckMalloc(TIFF* tif, tmsize_t nmemb, tmsize_t elem_size, const char* what) { - return _TIFFCheckRealloc(tif, NULL, nmemb, elem_size, what); + return _TIFFCheckRealloc(tif, NULL, nmemb, elem_size, what); } static int TIFFDefaultTransferFunction(TIFFDirectory* td) { uint16 **tf = td->td_transferfunction; - tsize_t i, n, nbytes; + tmsize_t i, n, nbytes; tf[0] = tf[1] = tf[2] = 0; - if (td->td_bitspersample >= sizeof(tsize_t) * 8 - 2) + if (td->td_bitspersample >= sizeof(tmsize_t) * 8 - 2) return 0; - n = 1<td_bitspersample; + n = ((tmsize_t)1)<td_bitspersample; nbytes = n * sizeof (uint16); if (!(tf[0] = (uint16 *)_TIFFmalloc(nbytes))) return 0; @@ -140,7 +167,7 @@ TIFFDefaultRefBlackWhite(TIFFDirectory* td) * place in the library -- in TIFFDefaultDirectory. */ int -TIFFVGetFieldDefaulted(TIFF* tif, ttag_t tag, va_list ap) +TIFFVGetFieldDefaulted(TIFF* tif, uint32 tag, va_list ap) { TIFFDirectory *td = &tif->tif_dir; @@ -269,7 +296,7 @@ TIFFVGetFieldDefaulted(TIFF* tif, ttag_t tag, va_list ap) * value if the tag is not present in the directory. */ int -TIFFGetFieldDefaulted(TIFF* tif, ttag_t tag, ...) +TIFFGetFieldDefaulted(TIFF* tif, uint32 tag, ...) { int ok; va_list ap; @@ -280,6 +307,47 @@ TIFFGetFieldDefaulted(TIFF* tif, ttag_t tag, ...) return (ok); } +struct _Int64Parts { + int32 low, high; +}; + +typedef union { + struct _Int64Parts part; + int64 value; +} _Int64; + +float +_TIFFUInt64ToFloat(uint64 ui64) +{ + _Int64 i; + + i.value = ui64; + if (i.part.high >= 0) { + return (float)i.value; + } else { + long double df; + df = (long double)i.value; + df += 18446744073709551616.0; /* adding 2**64 */ + return (float)df; + } +} + +double +_TIFFUInt64ToDouble(uint64 ui64) +{ + _Int64 i; + + i.value = ui64; + if (i.part.high >= 0) { + return (double)i.value; + } else { + long double df; + df = (long double)i.value; + df += 18446744073709551616.0; /* adding 2**64 */ + return (double)df; + } +} + /* vim: set ts=8 sts=8 sw=8 noet: */ /* * Local Variables: diff --git a/dll/3rdparty/libtiff/tif_close.c b/dll/3rdparty/libtiff/tif_close.c index 02591ba978f..13d2bab5ce9 100644 --- a/dll/3rdparty/libtiff/tif_close.c +++ b/dll/3rdparty/libtiff/tif_close.c @@ -1,4 +1,4 @@ -/* $Id: tif_close.c,v 1.10.2.1 2010-06-08 18:50:41 bfriesen Exp $ */ +/* $Id: tif_close.c,v 1.19 2010-03-10 18:56:48 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -28,6 +28,7 @@ * TIFF Library. */ #include "tiffiop.h" +#include /************************************************************************/ /* TIFFCleanup() */ @@ -45,18 +46,20 @@ void TIFFCleanup(TIFF* tif) { + /* + * Flush buffered data and directory (if dirty). + */ if (tif->tif_mode != O_RDONLY) - /* - * Flush buffered data and directory (if dirty). - */ - TIFFFlush(tif); + TIFFFlush(tif); (*tif->tif_cleanup)(tif); TIFFFreeDirectory(tif); if (tif->tif_dirlist) _TIFFfree(tif->tif_dirlist); - /* Clean up client info links */ + /* + * Clean up client info links. + */ while( tif->tif_clientinfo ) { TIFFClientInfoLink *link = tif->tif_clientinfo; @@ -69,27 +72,36 @@ TIFFCleanup(TIFF* tif) if (tif->tif_rawdata && (tif->tif_flags&TIFF_MYBUFFER)) _TIFFfree(tif->tif_rawdata); if (isMapped(tif)) - TIFFUnmapFileContents(tif, tif->tif_base, tif->tif_size); + TIFFUnmapFileContents(tif, tif->tif_base, (toff_t)tif->tif_size); - /* Clean up custom fields */ - if (tif->tif_nfields > 0) - { - size_t i; + /* + * Clean up custom fields. + */ + if (tif->tif_fields && tif->tif_nfields > 0) { + uint32 i; - for (i = 0; i < tif->tif_nfields; i++) - { - TIFFFieldInfo *fld = tif->tif_fieldinfo[i]; - if (fld->field_bit == FIELD_CUSTOM && - strncmp("Tag ", fld->field_name, 4) == 0) - { - _TIFFfree(fld->field_name); - _TIFFfree(fld); + for (i = 0; i < tif->tif_nfields; i++) { + TIFFField *fld = tif->tif_fields[i]; + if (fld->field_bit == FIELD_CUSTOM && + strncmp("Tag ", fld->field_name, 4) == 0) { + _TIFFfree(fld->field_name); + _TIFFfree(fld); + } } - } - - _TIFFfree(tif->tif_fieldinfo); + + _TIFFfree(tif->tif_fields); } + if (tif->tif_nfieldscompat > 0) { + uint32 i; + + for (i = 0; i < tif->tif_nfieldscompat; i++) { + if (tif->tif_fieldscompat[i].allocated_size) + _TIFFfree(tif->tif_fieldscompat[i].fields); + } + _TIFFfree(tif->tif_fieldscompat); + } + _TIFFfree(tif); } @@ -117,6 +129,8 @@ TIFFClose(TIFF* tif) (void) (*closeproc)(fd); } +/* vim: set ts=8 sts=8 sw=8 noet: */ + /* * Local Variables: * mode: c diff --git a/dll/3rdparty/libtiff/tif_codec.c b/dll/3rdparty/libtiff/tif_codec.c index d5c6fd1149d..e20166737a2 100644 --- a/dll/3rdparty/libtiff/tif_codec.c +++ b/dll/3rdparty/libtiff/tif_codec.c @@ -1,4 +1,4 @@ -/* $Id: tif_codec.c,v 1.10.2.2 2010-06-08 18:50:41 bfriesen Exp $ */ +/* $Id: tif_codec.c,v 1.15 2010-12-14 12:53:00 dron Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -31,43 +31,46 @@ */ #include "tiffiop.h" -static int NotConfigured(TIFF*, int); +static int NotConfigured(TIFF*, int); -#ifndef LZW_SUPPORT -#define TIFFInitLZW NotConfigured +#ifndef LZW_SUPPORT +#define TIFFInitLZW NotConfigured #endif -#ifndef PACKBITS_SUPPORT -#define TIFFInitPackBits NotConfigured +#ifndef PACKBITS_SUPPORT +#define TIFFInitPackBits NotConfigured #endif -#ifndef THUNDER_SUPPORT -#define TIFFInitThunderScan NotConfigured +#ifndef THUNDER_SUPPORT +#define TIFFInitThunderScan NotConfigured #endif -#ifndef NEXT_SUPPORT -#define TIFFInitNeXT NotConfigured +#ifndef NEXT_SUPPORT +#define TIFFInitNeXT NotConfigured #endif -#ifndef JPEG_SUPPORT -#define TIFFInitJPEG NotConfigured +#ifndef JPEG_SUPPORT +#define TIFFInitJPEG NotConfigured #endif -#ifndef OJPEG_SUPPORT -#define TIFFInitOJPEG NotConfigured +#ifndef OJPEG_SUPPORT +#define TIFFInitOJPEG NotConfigured #endif -#ifndef CCITT_SUPPORT -#define TIFFInitCCITTRLE NotConfigured -#define TIFFInitCCITTRLEW NotConfigured -#define TIFFInitCCITTFax3 NotConfigured -#define TIFFInitCCITTFax4 NotConfigured +#ifndef CCITT_SUPPORT +#define TIFFInitCCITTRLE NotConfigured +#define TIFFInitCCITTRLEW NotConfigured +#define TIFFInitCCITTFax3 NotConfigured +#define TIFFInitCCITTFax4 NotConfigured #endif #ifndef JBIG_SUPPORT -#define TIFFInitJBIG NotConfigured +#define TIFFInitJBIG NotConfigured #endif -#ifndef ZIP_SUPPORT -#define TIFFInitZIP NotConfigured +#ifndef ZIP_SUPPORT +#define TIFFInitZIP NotConfigured #endif -#ifndef PIXARLOG_SUPPORT -#define TIFFInitPixarLog NotConfigured +#ifndef PIXARLOG_SUPPORT +#define TIFFInitPixarLog NotConfigured #endif #ifndef LOGLUV_SUPPORT -#define TIFFInitSGILog NotConfigured +#define TIFFInitSGILog NotConfigured +#endif +#ifndef LZMA_SUPPORT +#define TIFFInitLZMA NotConfigured #endif /* @@ -95,6 +98,7 @@ TIFFCodec _TIFFBuiltinCODECS[] = { { "PixarLog", COMPRESSION_PIXARLOG, TIFFInitPixarLog }, { "SGILog", COMPRESSION_SGILOG, TIFFInitSGILog }, { "SGILog24", COMPRESSION_SGILOG24, TIFFInitSGILog }, + { "LZMA", COMPRESSION_LZMA, TIFFInitLZMA }, { NULL, 0, NULL } }; @@ -114,13 +118,14 @@ _notConfigured(TIFF* tif) static int NotConfigured(TIFF* tif, int scheme) { - (void) scheme; - - tif->tif_decodestatus = FALSE; - tif->tif_setupdecode = _notConfigured; - tif->tif_encodestatus = FALSE; - tif->tif_setupencode = _notConfigured; - return (1); + (void) scheme; + + tif->tif_fixuptags = _notConfigured; + tif->tif_decodestatus = FALSE; + tif->tif_setupdecode = _notConfigured; + tif->tif_encodestatus = FALSE; + tif->tif_setupencode = _notConfigured; + return (1); } /************************************************************************/ @@ -129,7 +134,7 @@ NotConfigured(TIFF* tif, int scheme) /** * Check whether we have working codec for the specific coding scheme. - * + * * @return returns 1 if the codec is configured and working. Otherwise * 0 will be returned. */ @@ -140,14 +145,14 @@ TIFFIsCODECConfigured(uint16 scheme) const TIFFCodec* codec = TIFFFindCODEC(scheme); if(codec == NULL) { - return 0; - } - if(codec->init == NULL) { - return 0; - } + return 0; + } + if(codec->init == NULL) { + return 0; + } if(codec->init != NotConfigured){ - return 1; - } + return 1; + } return 0; } diff --git a/dll/3rdparty/libtiff/tif_color.c b/dll/3rdparty/libtiff/tif_color.c index 02eb346b06b..be4850ce6b1 100644 --- a/dll/3rdparty/libtiff/tif_color.c +++ b/dll/3rdparty/libtiff/tif_color.c @@ -1,4 +1,4 @@ -/* $Id: tif_color.c,v 1.12.2.1 2010-06-08 18:50:41 bfriesen Exp $ */ +/* $Id: tif_color.c,v 1.19 2010-12-14 02:22:42 faxguy Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -123,7 +123,7 @@ TIFFXYZToRGB(TIFFCIELabToRGB *cielab, float X, float Y, float Z, */ int TIFFCIELabToRGBInit(TIFFCIELabToRGB* cielab, - TIFFDisplay *display, float *refWhite) + const TIFFDisplay *display, float *refWhite) { int i; double gamma; @@ -183,13 +183,18 @@ void TIFFYCbCrtoRGB(TIFFYCbCrToRGB *ycbcr, uint32 Y, int32 Cb, int32 Cr, uint32 *r, uint32 *g, uint32 *b) { + int32 i; + /* XXX: Only 8-bit YCbCr input supported for now */ Y = HICLAMP(Y, 255), Cb = CLAMP(Cb, 0, 255), Cr = CLAMP(Cr, 0, 255); - *r = ycbcr->clamptab[ycbcr->Y_tab[Y] + ycbcr->Cr_r_tab[Cr]]; - *g = ycbcr->clamptab[ycbcr->Y_tab[Y] - + (int)((ycbcr->Cb_g_tab[Cb] + ycbcr->Cr_g_tab[Cr]) >> SHIFT)]; - *b = ycbcr->clamptab[ycbcr->Y_tab[Y] + ycbcr->Cb_b_tab[Cb]]; + i = ycbcr->Y_tab[Y] + ycbcr->Cr_r_tab[Cr]; + *r = CLAMP(i, 0, 255); + i = ycbcr->Y_tab[Y] + + (int)((ycbcr->Cb_g_tab[Cb] + ycbcr->Cr_g_tab[Cr]) >> SHIFT); + *g = CLAMP(i, 0, 255); + i = ycbcr->Y_tab[Y] + ycbcr->Cb_b_tab[Cb]; + *b = CLAMP(i, 0, 255); } /* @@ -219,7 +224,7 @@ TIFFYCbCrToRGBInit(TIFFYCbCrToRGB* ycbcr, float *luma, float *refBlackWhite) #define LumaBlue luma[2] clamptab = (TIFFRGBValue*)( - (tidata_t) ycbcr+TIFFroundup(sizeof (TIFFYCbCrToRGB), sizeof (long))); + (uint8*) ycbcr+TIFFroundup_32(sizeof (TIFFYCbCrToRGB), sizeof (long))); _TIFFmemset(clamptab, 0, 256); /* v < 0 => 0 */ ycbcr->clamptab = (clamptab += 256); for (i = 0; i < 256; i++) diff --git a/dll/3rdparty/libtiff/tif_compress.c b/dll/3rdparty/libtiff/tif_compress.c index 0ce509b0bd8..20e72fd0731 100644 --- a/dll/3rdparty/libtiff/tif_compress.c +++ b/dll/3rdparty/libtiff/tif_compress.c @@ -1,4 +1,4 @@ -/* $Id: tif_compress.c,v 1.13.2.1 2010-06-08 18:50:41 bfriesen Exp $ */ +/* $Id: tif_compress.c,v 1.22 2010-03-10 18:56:48 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -36,11 +36,11 @@ TIFFNoEncode(TIFF* tif, const char* method) { const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression); - if (c) { + if (c) { TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "%s %s encoding is not implemented", c->name, method); - } else { + } else { TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "Compression scheme %u %s encoding is not implemented", tif->tif_dir.td_compression, method); @@ -49,21 +49,21 @@ TIFFNoEncode(TIFF* tif, const char* method) } int -_TIFFNoRowEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) +_TIFFNoRowEncode(TIFF* tif, uint8* pp, tmsize_t cc, uint16 s) { (void) pp; (void) cc; (void) s; return (TIFFNoEncode(tif, "scanline")); } int -_TIFFNoStripEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) +_TIFFNoStripEncode(TIFF* tif, uint8* pp, tmsize_t cc, uint16 s) { (void) pp; (void) cc; (void) s; return (TIFFNoEncode(tif, "strip")); } int -_TIFFNoTileEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) +_TIFFNoTileEncode(TIFF* tif, uint8* pp, tmsize_t cc, uint16 s) { (void) pp; (void) cc; (void) s; return (TIFFNoEncode(tif, "tile")); @@ -86,21 +86,28 @@ TIFFNoDecode(TIFF* tif, const char* method) } int -_TIFFNoRowDecode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) +_TIFFNoFixupTags(TIFF* tif) +{ + (void) tif; + return (1); +} + +int +_TIFFNoRowDecode(TIFF* tif, uint8* pp, tmsize_t cc, uint16 s) { (void) pp; (void) cc; (void) s; return (TIFFNoDecode(tif, "scanline")); } int -_TIFFNoStripDecode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) +_TIFFNoStripDecode(TIFF* tif, uint8* pp, tmsize_t cc, uint16 s) { (void) pp; (void) cc; (void) s; return (TIFFNoDecode(tif, "strip")); } int -_TIFFNoTileDecode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) +_TIFFNoTileDecode(TIFF* tif, uint8* pp, tmsize_t cc, uint16 s) { (void) pp; (void) cc; (void) s; return (TIFFNoDecode(tif, "tile")); @@ -116,7 +123,7 @@ _TIFFNoSeek(TIFF* tif, uint32 off) } int -_TIFFNoPreCode(TIFF* tif, tsample_t s) +_TIFFNoPreCode(TIFF* tif, uint16 s) { (void) tif; (void) s; return (1); @@ -128,19 +135,20 @@ static void _TIFFvoid(TIFF* tif) { (void) tif; } void _TIFFSetDefaultCompressionState(TIFF* tif) { + tif->tif_fixuptags = _TIFFNoFixupTags; tif->tif_decodestatus = TRUE; tif->tif_setupdecode = _TIFFtrue; tif->tif_predecode = _TIFFNoPreCode; - tif->tif_decoderow = _TIFFNoRowDecode; + tif->tif_decoderow = _TIFFNoRowDecode; tif->tif_decodestrip = _TIFFNoStripDecode; - tif->tif_decodetile = _TIFFNoTileDecode; + tif->tif_decodetile = _TIFFNoTileDecode; tif->tif_encodestatus = TRUE; tif->tif_setupencode = _TIFFtrue; tif->tif_preencode = _TIFFNoPreCode; tif->tif_postencode = _TIFFtrue; tif->tif_encoderow = _TIFFNoRowEncode; - tif->tif_encodestrip = _TIFFNoStripEncode; - tif->tif_encodetile = _TIFFNoTileEncode; + tif->tif_encodestrip = _TIFFNoStripEncode; + tif->tif_encodetile = _TIFFNoTileEncode; tif->tif_close = _TIFFvoid; tif->tif_seek = _TIFFNoSeek; tif->tif_cleanup = _TIFFvoid; @@ -170,10 +178,10 @@ TIFFSetCompressionScheme(TIFF* tif, int scheme) * by this library. */ typedef struct _codec { - struct _codec* next; - TIFFCodec* info; + struct _codec* next; + TIFFCodec* info; } codec_t; -static codec_t* registeredCODECS = NULL; +static codec_t* registeredCODECS = NULL; const TIFFCodec* TIFFFindCODEC(uint16 scheme) @@ -194,12 +202,12 @@ TIFFCodec* TIFFRegisterCODEC(uint16 scheme, const char* name, TIFFInitMethod init) { codec_t* cd = (codec_t*) - _TIFFmalloc(sizeof (codec_t) + sizeof (TIFFCodec) + strlen(name)+1); + _TIFFmalloc((tmsize_t)(sizeof (codec_t) + sizeof (TIFFCodec) + strlen(name)+1)); if (cd != NULL) { - cd->info = (TIFFCodec*) ((tidata_t) cd + sizeof (codec_t)); + cd->info = (TIFFCodec*) ((uint8*) cd + sizeof (codec_t)); cd->info->name = (char*) - ((tidata_t) cd->info + sizeof (TIFFCodec)); + ((uint8*) cd->info + sizeof (TIFFCodec)); strcpy(cd->info->name, name); cd->info->scheme = scheme; cd->info->init = init; @@ -244,13 +252,14 @@ TIFFUnRegisterCODEC(TIFFCodec* c) TIFFCodec* TIFFGetConfiguredCODECs() { - int i = 1; - codec_t *cd; - const TIFFCodec *c; - TIFFCodec *codecs = NULL, *new_codecs; + int i = 1; + codec_t *cd; + const TIFFCodec* c; + TIFFCodec* codecs = NULL; + TIFFCodec* new_codecs; - for (cd = registeredCODECS; cd; cd = cd->next) { - new_codecs = (TIFFCodec *) + for (cd = registeredCODECS; cd; cd = cd->next) { + new_codecs = (TIFFCodec *) _TIFFrealloc(codecs, i * sizeof(TIFFCodec)); if (!new_codecs) { _TIFFfree (codecs); @@ -260,16 +269,16 @@ TIFFGetConfiguredCODECs() _TIFFmemcpy(codecs + i - 1, cd, sizeof(TIFFCodec)); i++; } - for (c = _TIFFBuiltinCODECS; c->name; c++) { - if (TIFFIsCODECConfigured(c->scheme)) { - new_codecs = (TIFFCodec *) + for (c = _TIFFBuiltinCODECS; c->name; c++) { + if (TIFFIsCODECConfigured(c->scheme)) { + new_codecs = (TIFFCodec *) _TIFFrealloc(codecs, i * sizeof(TIFFCodec)); if (!new_codecs) { _TIFFfree (codecs); return NULL; } codecs = new_codecs; - _TIFFmemcpy(codecs + i - 1, (const tdata_t)c, sizeof(TIFFCodec)); + _TIFFmemcpy(codecs + i - 1, (const void*)c, sizeof(TIFFCodec)); i++; } } @@ -282,7 +291,7 @@ TIFFGetConfiguredCODECs() codecs = new_codecs; _TIFFmemset(codecs + i - 1, 0, sizeof(TIFFCodec)); - return codecs; + return codecs; } /* vim: set ts=8 sts=8 sw=8 noet: */ diff --git a/dll/3rdparty/libtiff/tif_dir.c b/dll/3rdparty/libtiff/tif_dir.c index ac44b381f8b..8bf3ea719ff 100644 --- a/dll/3rdparty/libtiff/tif_dir.c +++ b/dll/3rdparty/libtiff/tif_dir.c @@ -1,4 +1,4 @@ -/* $Id: tif_dir.c,v 1.75.2.5 2010-06-09 21:15:27 bfriesen Exp $ */ +/* $Id: tif_dir.c,v 1.113 2012-06-14 20:32:53 fwarmerdam Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -46,7 +46,7 @@ setByteArray(void** vpp, void* vp, size_t nmemb, size_t elem_size) if (*vpp) _TIFFfree(*vpp), *vpp = 0; if (vp) { - tsize_t bytes = nmemb * elem_size; + tmsize_t bytes = (tmsize_t)(nmemb * elem_size); if (elem_size && bytes / elem_size == nmemb) *vpp = (void*) _TIFFmalloc(bytes); if (*vpp) @@ -63,11 +63,26 @@ void _TIFFsetShortArray(uint16** wpp, uint16* wp, uint32 n) { setByteArray((void**) wpp, (void*) wp, n, sizeof (uint16)); } void _TIFFsetLongArray(uint32** lpp, uint32* lp, uint32 n) { setByteArray((void**) lpp, (void*) lp, n, sizeof (uint32)); } +void _TIFFsetLong8Array(uint64** lpp, uint64* lp, uint32 n) + { setByteArray((void**) lpp, (void*) lp, n, sizeof (uint64)); } void _TIFFsetFloatArray(float** fpp, float* fp, uint32 n) { setByteArray((void**) fpp, (void*) fp, n, sizeof (float)); } void _TIFFsetDoubleArray(double** dpp, double* dp, uint32 n) { setByteArray((void**) dpp, (void*) dp, n, sizeof (double)); } +static void +setDoubleArrayOneValue(double** vpp, double value, size_t nmemb) +{ + if (*vpp) + _TIFFfree(*vpp); + *vpp = _TIFFmalloc(nmemb*sizeof(double)); + if (*vpp) + { + while (nmemb--) + ((double*)*vpp)[nmemb] = value; + } +} + /* * Install extra samples information. */ @@ -80,7 +95,7 @@ setExtraSamples(TIFFDirectory* td, va_list ap, uint32* v) uint16* va; uint32 i; - *v = va_arg(ap, uint32); + *v = (uint16) va_arg(ap, uint16_vap); if ((uint16) *v > td->td_samplesperpixel) return 0; va = va_arg(ap, uint16*); @@ -107,6 +122,10 @@ setExtraSamples(TIFFDirectory* td, va_list ap, uint32* v) #undef EXTRASAMPLE_COREL_UNASSALPHA } +/* + * Confirm we have "samplesperpixel" ink names separated by \0. Returns + * zero if the ink names are not as expected. + */ static uint32 checkInkNamesString(TIFF* tif, uint32 slen, const char* s) { @@ -117,12 +136,12 @@ checkInkNamesString(TIFF* tif, uint32 slen, const char* s) const char* ep = s+slen; const char* cp = s; for (; i > 0; i--) { - for (; *cp != '\0'; cp++) - if (cp >= ep) - goto bad; + for (; cp < ep && *cp != '\0'; cp++) {} + if (cp >= ep) + goto bad; cp++; /* skip \0 */ } - return (cp-s); + return ((uint32)(cp-s)); } bad: TIFFErrorExt(tif->tif_clientdata, "TIFFSetField", @@ -134,7 +153,7 @@ bad: } static int -_TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) +_TIFFVSetField(TIFF* tif, uint32 tag, va_list ap) { static const char module[] = "_TIFFVSetField"; @@ -142,19 +161,31 @@ _TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) int status = 1; uint32 v32, i, v; char* s; + const TIFFField *fip = TIFFFindField(tif, tag, TIFF_ANY); + uint32 standard_tag = tag; - switch (tag) { + /* + * We want to force the custom code to be used for custom + * fields even if the tag happens to match a well known + * one - important for reinterpreted handling of standard + * tag values in custom directories (ie. EXIF) + */ + if (fip->field_bit == FIELD_CUSTOM) { + standard_tag = 0; + } + + switch (standard_tag) { case TIFFTAG_SUBFILETYPE: - td->td_subfiletype = va_arg(ap, uint32); + td->td_subfiletype = (uint32) va_arg(ap, uint32); break; case TIFFTAG_IMAGEWIDTH: - td->td_imagewidth = va_arg(ap, uint32); + td->td_imagewidth = (uint32) va_arg(ap, uint32); break; case TIFFTAG_IMAGELENGTH: - td->td_imagelength = va_arg(ap, uint32); + td->td_imagelength = (uint32) va_arg(ap, uint32); break; case TIFFTAG_BITSPERSAMPLE: - td->td_bitspersample = (uint16) va_arg(ap, int); + td->td_bitspersample = (uint16) va_arg(ap, uint16_vap); /* * If the data require post-decoding processing to byte-swap * samples, set it up here. Note that since tags are required @@ -163,7 +194,9 @@ _TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) * work in with its normal work. */ if (tif->tif_flags & TIFF_SWAB) { - if (td->td_bitspersample == 16) + if (td->td_bitspersample == 8) + tif->tif_postdecode = _TIFFNoPostDecode; + else if (td->td_bitspersample == 16) tif->tif_postdecode = _TIFFSwab16BitData; else if (td->td_bitspersample == 24) tif->tif_postdecode = _TIFFSwab24BitData; @@ -176,14 +209,14 @@ _TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) } break; case TIFFTAG_COMPRESSION: - v = va_arg(ap, uint32) & 0xffff; + v = (uint16) va_arg(ap, uint16_vap); /* * If we're changing the compression scheme, the notify the * previous module so that it can cleanup any state it's * setup. */ if (TIFFFieldSet(tif, FIELD_COMPRESSION)) { - if (td->td_compression == v) + if ((uint32)td->td_compression == v) break; (*tif->tif_cleanup)(tif); tif->tif_flags &= ~TIFF_CODERSETUP; @@ -192,38 +225,37 @@ _TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) * Setup new compression routine state. */ if( (status = TIFFSetCompressionScheme(tif, v)) != 0 ) - td->td_compression = (uint16) v; - else - status = 0; + td->td_compression = (uint16) v; + else + status = 0; break; case TIFFTAG_PHOTOMETRIC: - td->td_photometric = (uint16) va_arg(ap, int); + td->td_photometric = (uint16) va_arg(ap, uint16_vap); break; case TIFFTAG_THRESHHOLDING: - td->td_threshholding = (uint16) va_arg(ap, int); + td->td_threshholding = (uint16) va_arg(ap, uint16_vap); break; case TIFFTAG_FILLORDER: - v = va_arg(ap, uint32); + v = (uint16) va_arg(ap, uint16_vap); if (v != FILLORDER_LSB2MSB && v != FILLORDER_MSB2LSB) goto badvalue; td->td_fillorder = (uint16) v; break; case TIFFTAG_ORIENTATION: - v = va_arg(ap, uint32); + v = (uint16) va_arg(ap, uint16_vap); if (v < ORIENTATION_TOPLEFT || ORIENTATION_LEFTBOT < v) goto badvalue; else td->td_orientation = (uint16) v; break; case TIFFTAG_SAMPLESPERPIXEL: - /* XXX should cross check -- e.g. if pallette, then 1 */ - v = va_arg(ap, uint32); + v = (uint16) va_arg(ap, uint16_vap); if (v == 0) goto badvalue; td->td_samplesperpixel = (uint16) v; break; case TIFFTAG_ROWSPERSTRIP: - v32 = va_arg(ap, uint32); + v32 = (uint32) va_arg(ap, uint32); if (v32 == 0) goto badvalue32; td->td_rowsperstrip = v32; @@ -233,16 +265,22 @@ _TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) } break; case TIFFTAG_MINSAMPLEVALUE: - td->td_minsamplevalue = (uint16) va_arg(ap, int); + td->td_minsamplevalue = (uint16) va_arg(ap, uint16_vap); break; case TIFFTAG_MAXSAMPLEVALUE: - td->td_maxsamplevalue = (uint16) va_arg(ap, int); + td->td_maxsamplevalue = (uint16) va_arg(ap, uint16_vap); break; case TIFFTAG_SMINSAMPLEVALUE: - td->td_sminsamplevalue = va_arg(ap, double); + if (tif->tif_flags & TIFF_PERSAMPLE) + _TIFFsetDoubleArray(&td->td_sminsamplevalue, va_arg(ap, double*), td->td_samplesperpixel); + else + setDoubleArrayOneValue(&td->td_sminsamplevalue, va_arg(ap, double), td->td_samplesperpixel); break; case TIFFTAG_SMAXSAMPLEVALUE: - td->td_smaxsamplevalue = va_arg(ap, double); + if (tif->tif_flags & TIFF_PERSAMPLE) + _TIFFsetDoubleArray(&td->td_smaxsamplevalue, va_arg(ap, double*), td->td_samplesperpixel); + else + setDoubleArrayOneValue(&td->td_smaxsamplevalue, va_arg(ap, double), td->td_samplesperpixel); break; case TIFFTAG_XRESOLUTION: td->td_xresolution = (float) va_arg(ap, double); @@ -251,7 +289,7 @@ _TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) td->td_yresolution = (float) va_arg(ap, double); break; case TIFFTAG_PLANARCONFIG: - v = va_arg(ap, uint32); + v = (uint16) va_arg(ap, uint16_vap); if (v != PLANARCONFIG_CONTIG && v != PLANARCONFIG_SEPARATE) goto badvalue; td->td_planarconfig = (uint16) v; @@ -263,18 +301,18 @@ _TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) td->td_yposition = (float) va_arg(ap, double); break; case TIFFTAG_RESOLUTIONUNIT: - v = va_arg(ap, uint32); + v = (uint16) va_arg(ap, uint16_vap); if (v < RESUNIT_NONE || RESUNIT_CENTIMETER < v) goto badvalue; td->td_resolutionunit = (uint16) v; break; case TIFFTAG_PAGENUMBER: - td->td_pagenumber[0] = (uint16) va_arg(ap, int); - td->td_pagenumber[1] = (uint16) va_arg(ap, int); + td->td_pagenumber[0] = (uint16) va_arg(ap, uint16_vap); + td->td_pagenumber[1] = (uint16) va_arg(ap, uint16_vap); break; case TIFFTAG_HALFTONEHINTS: - td->td_halftonehints[0] = (uint16) va_arg(ap, int); - td->td_halftonehints[1] = (uint16) va_arg(ap, int); + td->td_halftonehints[0] = (uint16) va_arg(ap, uint16_vap); + td->td_halftonehints[1] = (uint16) va_arg(ap, uint16_vap); break; case TIFFTAG_COLORMAP: v32 = (uint32)(1L<td_bitspersample); @@ -287,14 +325,14 @@ _TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) goto badvalue; break; case TIFFTAG_MATTEING: - td->td_extrasamples = (uint16) (va_arg(ap, int) != 0); + td->td_extrasamples = (((uint16) va_arg(ap, uint16_vap)) != 0); if (td->td_extrasamples) { uint16 sv = EXTRASAMPLE_ASSOCALPHA; _TIFFsetShortArray(&td->td_sampleinfo, &sv, 1); } break; case TIFFTAG_TILEWIDTH: - v32 = va_arg(ap, uint32); + v32 = (uint32) va_arg(ap, uint32); if (v32 % 16) { if (tif->tif_mode != O_RDONLY) goto badvalue32; @@ -305,7 +343,7 @@ _TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) tif->tif_flags |= TIFF_ISTILED; break; case TIFFTAG_TILELENGTH: - v32 = va_arg(ap, uint32); + v32 = (uint32) va_arg(ap, uint32); if (v32 % 16) { if (tif->tif_mode != O_RDONLY) goto badvalue32; @@ -316,13 +354,13 @@ _TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) tif->tif_flags |= TIFF_ISTILED; break; case TIFFTAG_TILEDEPTH: - v32 = va_arg(ap, uint32); + v32 = (uint32) va_arg(ap, uint32); if (v32 == 0) goto badvalue32; td->td_tiledepth = v32; break; case TIFFTAG_DATATYPE: - v = va_arg(ap, uint32); + v = (uint16) va_arg(ap, uint16_vap); switch (v) { case DATATYPE_VOID: v = SAMPLEFORMAT_VOID; break; case DATATYPE_INT: v = SAMPLEFORMAT_INT; break; @@ -333,29 +371,29 @@ _TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) td->td_sampleformat = (uint16) v; break; case TIFFTAG_SAMPLEFORMAT: - v = va_arg(ap, uint32); + v = (uint16) va_arg(ap, uint16_vap); if (v < SAMPLEFORMAT_UINT || SAMPLEFORMAT_COMPLEXIEEEFP < v) goto badvalue; td->td_sampleformat = (uint16) v; - /* Try to fix up the SWAB function for complex data. */ - if( td->td_sampleformat == SAMPLEFORMAT_COMPLEXINT - && td->td_bitspersample == 32 - && tif->tif_postdecode == _TIFFSwab32BitData ) - tif->tif_postdecode = _TIFFSwab16BitData; - else if( (td->td_sampleformat == SAMPLEFORMAT_COMPLEXINT - || td->td_sampleformat == SAMPLEFORMAT_COMPLEXIEEEFP) - && td->td_bitspersample == 64 - && tif->tif_postdecode == _TIFFSwab64BitData ) - tif->tif_postdecode = _TIFFSwab32BitData; + /* Try to fix up the SWAB function for complex data. */ + if( td->td_sampleformat == SAMPLEFORMAT_COMPLEXINT + && td->td_bitspersample == 32 + && tif->tif_postdecode == _TIFFSwab32BitData ) + tif->tif_postdecode = _TIFFSwab16BitData; + else if( (td->td_sampleformat == SAMPLEFORMAT_COMPLEXINT + || td->td_sampleformat == SAMPLEFORMAT_COMPLEXIEEEFP) + && td->td_bitspersample == 64 + && tif->tif_postdecode == _TIFFSwab64BitData ) + tif->tif_postdecode = _TIFFSwab32BitData; break; case TIFFTAG_IMAGEDEPTH: - td->td_imagedepth = va_arg(ap, uint32); + td->td_imagedepth = (uint32) va_arg(ap, uint32); break; case TIFFTAG_SUBIFD: if ((tif->tif_flags & TIFF_INSUBIFD) == 0) { - td->td_nsubifd = (uint16) va_arg(ap, int); - _TIFFsetLongArray(&td->td_subifd, va_arg(ap, uint32*), + td->td_nsubifd = (uint16) va_arg(ap, uint16_vap); + _TIFFsetLong8Array(&td->td_subifd, (uint64*) va_arg(ap, uint64*), (long) td->td_nsubifd); } else { TIFFErrorExt(tif->tif_clientdata, module, @@ -365,11 +403,11 @@ _TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) } break; case TIFFTAG_YCBCRPOSITIONING: - td->td_ycbcrpositioning = (uint16) va_arg(ap, int); + td->td_ycbcrpositioning = (uint16) va_arg(ap, uint16_vap); break; case TIFFTAG_YCBCRSUBSAMPLING: - td->td_ycbcrsubsampling[0] = (uint16) va_arg(ap, int); - td->td_ycbcrsubsampling[1] = (uint16) va_arg(ap, int); + td->td_ycbcrsubsampling[0] = (uint16) va_arg(ap, uint16_vap); + td->td_ycbcrsubsampling[1] = (uint16) va_arg(ap, uint16_vap); break; case TIFFTAG_TRANSFERFUNCTION: v = (td->td_samplesperpixel - td->td_extrasamples) > 1 ? 3 : 1; @@ -382,206 +420,253 @@ _TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) _TIFFsetFloatArray(&td->td_refblackwhite, va_arg(ap, float*), 6); break; case TIFFTAG_INKNAMES: - v = va_arg(ap, uint32); + v = (uint16) va_arg(ap, uint16_vap); s = va_arg(ap, char*); v = checkInkNamesString(tif, v, s); - status = v > 0; + status = v > 0; if( v > 0 ) { _TIFFsetNString(&td->td_inknames, s, v); td->td_inknameslen = v; } break; - default: { - TIFFTagValue *tv; - int tv_size, iCustom; - const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY); - - /* - * This can happen if multiple images are open with different - * codecs which have private tags. The global tag information - * table may then have tags that are valid for one file but not - * the other. If the client tries to set a tag that is not valid - * for the image's codec then we'll arrive here. This - * happens, for example, when tiffcp is used to convert between - * compression schemes and codec-specific tags are blindly copied. - */ - if(fip == NULL || fip->field_bit != FIELD_CUSTOM) { - TIFFErrorExt(tif->tif_clientdata, module, - "%s: Invalid %stag \"%s\" (not supported by codec)", - tif->tif_name, isPseudoTag(tag) ? "pseudo-" : "", - fip ? fip->field_name : "Unknown"); - status = 0; + case TIFFTAG_PERSAMPLE: + v = (uint16) va_arg(ap, uint16_vap); + if( v == PERSAMPLE_MULTI ) + tif->tif_flags |= TIFF_PERSAMPLE; + else + tif->tif_flags &= ~TIFF_PERSAMPLE; break; - } + default: { + TIFFTagValue *tv; + int tv_size, iCustom; - /* - * Find the existing entry for this custom value. - */ - tv = NULL; - for (iCustom = 0; iCustom < td->td_customValueCount; iCustom++) { - if (td->td_customValues[iCustom].info->field_tag == tag) { - tv = td->td_customValues + iCustom; - if (tv->value != NULL) { - _TIFFfree(tv->value); - tv->value = NULL; - } - break; - } - } - - /* - * Grow the custom list if the entry was not found. - */ - if(tv == NULL) { - TIFFTagValue *new_customValues; - - td->td_customValueCount++; - new_customValues = (TIFFTagValue *) - _TIFFrealloc(td->td_customValues, - sizeof(TIFFTagValue) * td->td_customValueCount); - if (!new_customValues) { + /* + * This can happen if multiple images are open with different + * codecs which have private tags. The global tag information + * table may then have tags that are valid for one file but not + * the other. If the client tries to set a tag that is not valid + * for the image's codec then we'll arrive here. This + * happens, for example, when tiffcp is used to convert between + * compression schemes and codec-specific tags are blindly copied. + */ + if(fip == NULL || fip->field_bit != FIELD_CUSTOM) { TIFFErrorExt(tif->tif_clientdata, module, - "%s: Failed to allocate space for list of custom values", - tif->tif_name); + "%s: Invalid %stag \"%s\" (not supported by codec)", + tif->tif_name, isPseudoTag(tag) ? "pseudo-" : "", + fip ? fip->field_name : "Unknown"); status = 0; + break; + } + + /* + * Find the existing entry for this custom value. + */ + tv = NULL; + for (iCustom = 0; iCustom < td->td_customValueCount; iCustom++) { + if (td->td_customValues[iCustom].info->field_tag == tag) { + tv = td->td_customValues + iCustom; + if (tv->value != NULL) { + _TIFFfree(tv->value); + tv->value = NULL; + } + break; + } + } + + /* + * Grow the custom list if the entry was not found. + */ + if(tv == NULL) { + TIFFTagValue *new_customValues; + + td->td_customValueCount++; + new_customValues = (TIFFTagValue *) + _TIFFrealloc(td->td_customValues, + sizeof(TIFFTagValue) * td->td_customValueCount); + if (!new_customValues) { + TIFFErrorExt(tif->tif_clientdata, module, + "%s: Failed to allocate space for list of custom values", + tif->tif_name); + status = 0; + goto end; + } + + td->td_customValues = new_customValues; + + tv = td->td_customValues + (td->td_customValueCount - 1); + tv->info = fip; + tv->value = NULL; + tv->count = 0; + } + + /* + * Set custom value ... save a copy of the custom tag value. + */ + tv_size = _TIFFDataSize(fip->field_type); + if (tv_size == 0) { + status = 0; + TIFFErrorExt(tif->tif_clientdata, module, + "%s: Bad field type %d for \"%s\"", + tif->tif_name, fip->field_type, + fip->field_name); goto end; } - td->td_customValues = new_customValues; - - tv = td->td_customValues + (td->td_customValueCount - 1); - tv->info = fip; - tv->value = NULL; - tv->count = 0; - } - - /* - * Set custom value ... save a copy of the custom tag value. - */ - tv_size = _TIFFDataSize(fip->field_type); - if (tv_size == 0) { - status = 0; - TIFFErrorExt(tif->tif_clientdata, module, - "%s: Bad field type %d for \"%s\"", - tif->tif_name, fip->field_type, - fip->field_name); - goto end; - } - - if(fip->field_passcount) { - if (fip->field_writecount == TIFF_VARIABLE2) - tv->count = (uint32) va_arg(ap, uint32); - else - tv->count = (int) va_arg(ap, int); - } else if (fip->field_writecount == TIFF_VARIABLE - || fip->field_writecount == TIFF_VARIABLE2) - tv->count = 1; - else if (fip->field_writecount == TIFF_SPP) - tv->count = td->td_samplesperpixel; - else - tv->count = fip->field_writecount; - - - if (fip->field_type == TIFF_ASCII) - _TIFFsetString((char **)&tv->value, va_arg(ap, char *)); - else { - tv->value = _TIFFCheckMalloc(tif, tv_size, tv->count, - "Tag Value"); - if (!tv->value) { - status = 0; - goto end; + if (fip->field_type == TIFF_ASCII) + { + uint32 ma; + char* mb; + if (fip->field_passcount) + { + assert(fip->field_writecount==TIFF_VARIABLE2); + ma=(uint32)va_arg(ap,uint32); + mb=(char*)va_arg(ap,char*); + } + else + { + mb=(char*)va_arg(ap,char*); + ma=(uint32)(strlen(mb)+1); + } + tv->count=ma; + setByteArray(&tv->value,mb,ma,1); } + else + { + if (fip->field_passcount) { + if (fip->field_writecount == TIFF_VARIABLE2) + tv->count = (uint32) va_arg(ap, uint32); + else + tv->count = (int) va_arg(ap, int); + } else if (fip->field_writecount == TIFF_VARIABLE + || fip->field_writecount == TIFF_VARIABLE2) + tv->count = 1; + else if (fip->field_writecount == TIFF_SPP) + tv->count = td->td_samplesperpixel; + else + tv->count = fip->field_writecount; - if ((fip->field_passcount - || fip->field_writecount == TIFF_VARIABLE - || fip->field_writecount == TIFF_VARIABLE2 - || fip->field_writecount == TIFF_SPP - || tv->count > 1) - && fip->field_tag != TIFFTAG_PAGENUMBER - && fip->field_tag != TIFFTAG_HALFTONEHINTS - && fip->field_tag != TIFFTAG_YCBCRSUBSAMPLING - && fip->field_tag != TIFFTAG_DOTRANGE) { - _TIFFmemcpy(tv->value, va_arg(ap, void *), - tv->count * tv_size); - } else { - /* - * XXX: The following loop required to handle - * TIFFTAG_PAGENUMBER, TIFFTAG_HALFTONEHINTS, - * TIFFTAG_YCBCRSUBSAMPLING and TIFFTAG_DOTRANGE tags. - * These tags are actually arrays and should be passed as - * array pointers to TIFFSetField() function, but actually - * passed as a list of separate values. This behaviour - * must be changed in the future! - */ - int i; - char *val = (char *)tv->value; + if (tv->count == 0) { + status = 0; + TIFFErrorExt(tif->tif_clientdata, module, + "%s: Null count for \"%s\" (type " + "%d, writecount %d, passcount %d)", + tif->tif_name, + fip->field_name, + fip->field_type, + fip->field_writecount, + fip->field_passcount); + goto end; + } - for (i = 0; i < tv->count; i++, val += tv_size) { - switch (fip->field_type) { + tv->value = _TIFFCheckMalloc(tif, tv->count, tv_size, + "custom tag binary object"); + if (!tv->value) { + status = 0; + goto end; + } + + if (fip->field_tag == TIFFTAG_DOTRANGE + && strcmp(fip->field_name,"DotRange") == 0) { + /* TODO: This is an evil exception and should not have been + handled this way ... likely best if we move it into + the directory structure with an explicit field in + libtiff 4.1 and assign it a FIELD_ value */ + uint16 v[2]; + v[0] = (uint16)va_arg(ap, int); + v[1] = (uint16)va_arg(ap, int); + _TIFFmemcpy(tv->value, &v, 4); + } + + else if (fip->field_passcount + || fip->field_writecount == TIFF_VARIABLE + || fip->field_writecount == TIFF_VARIABLE2 + || fip->field_writecount == TIFF_SPP + || tv->count > 1) { + _TIFFmemcpy(tv->value, va_arg(ap, void *), + tv->count * tv_size); + } else { + char *val = (char *)tv->value; + assert( tv->count == 1 ); + + switch (fip->field_type) { case TIFF_BYTE: case TIFF_UNDEFINED: - { - uint8 v = (uint8)va_arg(ap, int); - _TIFFmemcpy(val, &v, tv_size); - } - break; + { + uint8 v = (uint8)va_arg(ap, int); + _TIFFmemcpy(val, &v, tv_size); + } + break; case TIFF_SBYTE: - { - int8 v = (int8)va_arg(ap, int); - _TIFFmemcpy(val, &v, tv_size); - } - break; + { + int8 v = (int8)va_arg(ap, int); + _TIFFmemcpy(val, &v, tv_size); + } + break; case TIFF_SHORT: - { - uint16 v = (uint16)va_arg(ap, int); - _TIFFmemcpy(val, &v, tv_size); - } - break; + { + uint16 v = (uint16)va_arg(ap, int); + _TIFFmemcpy(val, &v, tv_size); + } + break; case TIFF_SSHORT: - { - int16 v = (int16)va_arg(ap, int); - _TIFFmemcpy(val, &v, tv_size); - } - break; + { + int16 v = (int16)va_arg(ap, int); + _TIFFmemcpy(val, &v, tv_size); + } + break; case TIFF_LONG: case TIFF_IFD: - { - uint32 v = va_arg(ap, uint32); - _TIFFmemcpy(val, &v, tv_size); - } - break; + { + uint32 v = va_arg(ap, uint32); + _TIFFmemcpy(val, &v, tv_size); + } + break; case TIFF_SLONG: - { - int32 v = va_arg(ap, int32); - _TIFFmemcpy(val, &v, tv_size); - } - break; + { + int32 v = va_arg(ap, int32); + _TIFFmemcpy(val, &v, tv_size); + } + break; + case TIFF_LONG8: + case TIFF_IFD8: + { + uint64 v = va_arg(ap, uint64); + _TIFFmemcpy(val, &v, tv_size); + } + break; + case TIFF_SLONG8: + { + int64 v = va_arg(ap, int64); + _TIFFmemcpy(val, &v, tv_size); + } + break; case TIFF_RATIONAL: case TIFF_SRATIONAL: case TIFF_FLOAT: - { - float v = (float)va_arg(ap, double); - _TIFFmemcpy(val, &v, tv_size); - } - break; + { + float v = (float)va_arg(ap, double); + _TIFFmemcpy(val, &v, tv_size); + } + break; case TIFF_DOUBLE: - { - double v = va_arg(ap, double); - _TIFFmemcpy(val, &v, tv_size); - } - break; + { + double v = va_arg(ap, double); + _TIFFmemcpy(val, &v, tv_size); + } + break; default: - _TIFFmemset(val, 0, tv_size); - status = 0; - break; - } - } + _TIFFmemset(val, 0, tv_size); + status = 0; + break; + } + } } - } - } + } } if (status) { - TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif, tag)->field_bit); + const TIFFField* fip=TIFFFieldWithTag(tif,tag); + if (fip) + TIFFSetFieldBit(tif, fip->field_bit); tif->tif_flags |= TIFF_DIRTYDIRECT; } @@ -589,18 +674,24 @@ end: va_end(ap); return (status); badvalue: - TIFFErrorExt(tif->tif_clientdata, module, - "%s: Bad value %d for \"%s\" tag", + { + const TIFFField* fip=TIFFFieldWithTag(tif,tag); + TIFFErrorExt(tif->tif_clientdata, module, + "%s: Bad value %u for \"%s\" tag", tif->tif_name, v, - _TIFFFieldWithTag(tif, tag)->field_name); - va_end(ap); + fip ? fip->field_name : "Unknown"); + va_end(ap); + } return (0); badvalue32: - TIFFErrorExt(tif->tif_clientdata, module, + { + const TIFFField* fip=TIFFFieldWithTag(tif,tag); + TIFFErrorExt(tif->tif_clientdata, module, "%s: Bad value %u for \"%s\" tag", tif->tif_name, v32, - _TIFFFieldWithTag(tif, tag)->field_name); - va_end(ap); + fip ? fip->field_name : "Unknown"); + va_end(ap); + } return (0); } @@ -614,9 +705,9 @@ badvalue32: * on the format of the data that is written. */ static int -OkToChangeTag(TIFF* tif, ttag_t tag) +OkToChangeTag(TIFF* tif, uint32 tag) { - const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY); + const TIFFField* fip = TIFFFindField(tif, tag, TIFF_ANY); if (!fip) { /* unknown tag */ TIFFErrorExt(tif->tif_clientdata, "TIFFSetField", "%s: Unknown %stag %u", tif->tif_name, isPseudoTag(tag) ? "pseudo-" : "", tag); @@ -646,7 +737,7 @@ OkToChangeTag(TIFF* tif, ttag_t tag) * updated. */ int -TIFFSetField(TIFF* tif, ttag_t tag, ...) +TIFFSetField(TIFF* tif, uint32 tag, ...) { va_list ap; int status; @@ -657,6 +748,47 @@ TIFFSetField(TIFF* tif, ttag_t tag, ...) return (status); } +/* + * Clear the contents of the field in the internal structure. + */ +int +TIFFUnsetField(TIFF* tif, uint32 tag) +{ + const TIFFField *fip = TIFFFieldWithTag(tif, tag); + TIFFDirectory* td = &tif->tif_dir; + + if( !fip ) + return 0; + + if( fip->field_bit != FIELD_CUSTOM ) + TIFFClrFieldBit(tif, fip->field_bit); + else + { + TIFFTagValue *tv = NULL; + int i; + + for (i = 0; i < td->td_customValueCount; i++) { + + tv = td->td_customValues + i; + if( tv->info->field_tag == tag ) + break; + } + + if( i < td->td_customValueCount ) + { + _TIFFfree(tv->value); + for( ; i < td->td_customValueCount-1; i++) { + td->td_customValues[i] = td->td_customValues[i+1]; + } + td->td_customValueCount--; + } + } + + tif->tif_flags |= TIFF_DIRTYDIRECT; + + return (1); +} + /* * Like TIFFSetField, but taking a varargs * parameter list. This routine is useful @@ -664,283 +796,332 @@ TIFFSetField(TIFF* tif, ttag_t tag, ...) * top of the library. */ int -TIFFVSetField(TIFF* tif, ttag_t tag, va_list ap) +TIFFVSetField(TIFF* tif, uint32 tag, va_list ap) { return OkToChangeTag(tif, tag) ? (*tif->tif_tagmethods.vsetfield)(tif, tag, ap) : 0; } static int -_TIFFVGetField(TIFF* tif, ttag_t tag, va_list ap) +_TIFFVGetField(TIFF* tif, uint32 tag, va_list ap) { - TIFFDirectory* td = &tif->tif_dir; - int ret_val = 1; + TIFFDirectory* td = &tif->tif_dir; + int ret_val = 1; + uint32 standard_tag = tag; + const TIFFField* fip = TIFFFindField(tif, tag, TIFF_ANY); + + /* + * We want to force the custom code to be used for custom + * fields even if the tag happens to match a well known + * one - important for reinterpreted handling of standard + * tag values in custom directories (ie. EXIF) + */ + if (fip->field_bit == FIELD_CUSTOM) { + standard_tag = 0; + } - switch (tag) { - case TIFFTAG_SUBFILETYPE: - *va_arg(ap, uint32*) = td->td_subfiletype; - break; - case TIFFTAG_IMAGEWIDTH: - *va_arg(ap, uint32*) = td->td_imagewidth; - break; - case TIFFTAG_IMAGELENGTH: - *va_arg(ap, uint32*) = td->td_imagelength; - break; - case TIFFTAG_BITSPERSAMPLE: - *va_arg(ap, uint16*) = td->td_bitspersample; - break; - case TIFFTAG_COMPRESSION: - *va_arg(ap, uint16*) = td->td_compression; - break; - case TIFFTAG_PHOTOMETRIC: - *va_arg(ap, uint16*) = td->td_photometric; - break; - case TIFFTAG_THRESHHOLDING: - *va_arg(ap, uint16*) = td->td_threshholding; - break; - case TIFFTAG_FILLORDER: - *va_arg(ap, uint16*) = td->td_fillorder; - break; - case TIFFTAG_ORIENTATION: - *va_arg(ap, uint16*) = td->td_orientation; - break; - case TIFFTAG_SAMPLESPERPIXEL: - *va_arg(ap, uint16*) = td->td_samplesperpixel; - break; - case TIFFTAG_ROWSPERSTRIP: - *va_arg(ap, uint32*) = td->td_rowsperstrip; - break; - case TIFFTAG_MINSAMPLEVALUE: - *va_arg(ap, uint16*) = td->td_minsamplevalue; - break; - case TIFFTAG_MAXSAMPLEVALUE: - *va_arg(ap, uint16*) = td->td_maxsamplevalue; - break; - case TIFFTAG_SMINSAMPLEVALUE: - *va_arg(ap, double*) = td->td_sminsamplevalue; - break; - case TIFFTAG_SMAXSAMPLEVALUE: - *va_arg(ap, double*) = td->td_smaxsamplevalue; - break; - case TIFFTAG_XRESOLUTION: - *va_arg(ap, float*) = td->td_xresolution; - break; - case TIFFTAG_YRESOLUTION: - *va_arg(ap, float*) = td->td_yresolution; - break; - case TIFFTAG_PLANARCONFIG: - *va_arg(ap, uint16*) = td->td_planarconfig; - break; - case TIFFTAG_XPOSITION: - *va_arg(ap, float*) = td->td_xposition; - break; - case TIFFTAG_YPOSITION: - *va_arg(ap, float*) = td->td_yposition; - break; - case TIFFTAG_RESOLUTIONUNIT: - *va_arg(ap, uint16*) = td->td_resolutionunit; - break; - case TIFFTAG_PAGENUMBER: - *va_arg(ap, uint16*) = td->td_pagenumber[0]; - *va_arg(ap, uint16*) = td->td_pagenumber[1]; - break; - case TIFFTAG_HALFTONEHINTS: - *va_arg(ap, uint16*) = td->td_halftonehints[0]; - *va_arg(ap, uint16*) = td->td_halftonehints[1]; - break; - case TIFFTAG_COLORMAP: - *va_arg(ap, uint16**) = td->td_colormap[0]; - *va_arg(ap, uint16**) = td->td_colormap[1]; - *va_arg(ap, uint16**) = td->td_colormap[2]; - break; - case TIFFTAG_STRIPOFFSETS: - case TIFFTAG_TILEOFFSETS: - *va_arg(ap, uint32**) = td->td_stripoffset; - break; - case TIFFTAG_STRIPBYTECOUNTS: - case TIFFTAG_TILEBYTECOUNTS: - *va_arg(ap, uint32**) = td->td_stripbytecount; - break; - case TIFFTAG_MATTEING: - *va_arg(ap, uint16*) = - (td->td_extrasamples == 1 && - td->td_sampleinfo[0] == EXTRASAMPLE_ASSOCALPHA); - break; - case TIFFTAG_EXTRASAMPLES: - *va_arg(ap, uint16*) = td->td_extrasamples; - *va_arg(ap, uint16**) = td->td_sampleinfo; - break; - case TIFFTAG_TILEWIDTH: - *va_arg(ap, uint32*) = td->td_tilewidth; - break; - case TIFFTAG_TILELENGTH: - *va_arg(ap, uint32*) = td->td_tilelength; - break; - case TIFFTAG_TILEDEPTH: - *va_arg(ap, uint32*) = td->td_tiledepth; - break; - case TIFFTAG_DATATYPE: - switch (td->td_sampleformat) { - case SAMPLEFORMAT_UINT: - *va_arg(ap, uint16*) = DATATYPE_UINT; - break; - case SAMPLEFORMAT_INT: - *va_arg(ap, uint16*) = DATATYPE_INT; - break; - case SAMPLEFORMAT_IEEEFP: - *va_arg(ap, uint16*) = DATATYPE_IEEEFP; - break; - case SAMPLEFORMAT_VOID: - *va_arg(ap, uint16*) = DATATYPE_VOID; - break; - } - break; - case TIFFTAG_SAMPLEFORMAT: - *va_arg(ap, uint16*) = td->td_sampleformat; - break; - case TIFFTAG_IMAGEDEPTH: - *va_arg(ap, uint32*) = td->td_imagedepth; - break; - case TIFFTAG_SUBIFD: - *va_arg(ap, uint16*) = td->td_nsubifd; - *va_arg(ap, uint32**) = td->td_subifd; - break; - case TIFFTAG_YCBCRPOSITIONING: - *va_arg(ap, uint16*) = td->td_ycbcrpositioning; - break; - case TIFFTAG_YCBCRSUBSAMPLING: - *va_arg(ap, uint16*) = td->td_ycbcrsubsampling[0]; - *va_arg(ap, uint16*) = td->td_ycbcrsubsampling[1]; - break; - case TIFFTAG_TRANSFERFUNCTION: - *va_arg(ap, uint16**) = td->td_transferfunction[0]; - if (td->td_samplesperpixel - td->td_extrasamples > 1) { - *va_arg(ap, uint16**) = td->td_transferfunction[1]; - *va_arg(ap, uint16**) = td->td_transferfunction[2]; - } - break; - case TIFFTAG_REFERENCEBLACKWHITE: - *va_arg(ap, float**) = td->td_refblackwhite; - break; - case TIFFTAG_INKNAMES: - *va_arg(ap, char**) = td->td_inknames; - break; - default: - { - const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY); - int i; - - /* - * This can happen if multiple images are open with different - * codecs which have private tags. The global tag information - * table may then have tags that are valid for one file but not - * the other. If the client tries to get a tag that is not valid - * for the image's codec then we'll arrive here. - */ - if( fip == NULL || fip->field_bit != FIELD_CUSTOM ) - { - TIFFErrorExt(tif->tif_clientdata, "_TIFFVGetField", - "%s: Invalid %stag \"%s\" " - "(not supported by codec)", - tif->tif_name, - isPseudoTag(tag) ? "pseudo-" : "", - fip ? fip->field_name : "Unknown"); - ret_val = 0; - break; - } - - /* - * Do we have a custom value? - */ - ret_val = 0; - for (i = 0; i < td->td_customValueCount; i++) { - TIFFTagValue *tv = td->td_customValues + i; - - if (tv->info->field_tag != tag) - continue; - - if (fip->field_passcount) { - if (fip->field_readcount == TIFF_VARIABLE2) - *va_arg(ap, uint32*) = (uint32)tv->count; - else /* Assume TIFF_VARIABLE */ - *va_arg(ap, uint16*) = (uint16)tv->count; - *va_arg(ap, void **) = tv->value; - ret_val = 1; - } else { - if ((fip->field_type == TIFF_ASCII - || fip->field_readcount == TIFF_VARIABLE - || fip->field_readcount == TIFF_VARIABLE2 - || fip->field_readcount == TIFF_SPP - || tv->count > 1) - && fip->field_tag != TIFFTAG_PAGENUMBER - && fip->field_tag != TIFFTAG_HALFTONEHINTS - && fip->field_tag != TIFFTAG_YCBCRSUBSAMPLING - && fip->field_tag != TIFFTAG_DOTRANGE) { - *va_arg(ap, void **) = tv->value; - ret_val = 1; - } else { - int j; - char *val = (char *)tv->value; - - for (j = 0; j < tv->count; - j++, val += _TIFFDataSize(tv->info->field_type)) { - switch (fip->field_type) { - case TIFF_BYTE: - case TIFF_UNDEFINED: - *va_arg(ap, uint8*) = - *(uint8 *)val; - ret_val = 1; - break; - case TIFF_SBYTE: - *va_arg(ap, int8*) = - *(int8 *)val; - ret_val = 1; - break; - case TIFF_SHORT: - *va_arg(ap, uint16*) = - *(uint16 *)val; - ret_val = 1; - break; - case TIFF_SSHORT: - *va_arg(ap, int16*) = - *(int16 *)val; - ret_val = 1; - break; - case TIFF_LONG: - case TIFF_IFD: - *va_arg(ap, uint32*) = - *(uint32 *)val; - ret_val = 1; - break; - case TIFF_SLONG: - *va_arg(ap, int32*) = - *(int32 *)val; - ret_val = 1; - break; - case TIFF_RATIONAL: - case TIFF_SRATIONAL: - case TIFF_FLOAT: - *va_arg(ap, float*) = - *(float *)val; - ret_val = 1; - break; - case TIFF_DOUBLE: - *va_arg(ap, double*) = - *(double *)val; - ret_val = 1; - break; - default: - ret_val = 0; - break; - } - } + switch (standard_tag) { + case TIFFTAG_SUBFILETYPE: + *va_arg(ap, uint32*) = td->td_subfiletype; + break; + case TIFFTAG_IMAGEWIDTH: + *va_arg(ap, uint32*) = td->td_imagewidth; + break; + case TIFFTAG_IMAGELENGTH: + *va_arg(ap, uint32*) = td->td_imagelength; + break; + case TIFFTAG_BITSPERSAMPLE: + *va_arg(ap, uint16*) = td->td_bitspersample; + break; + case TIFFTAG_COMPRESSION: + *va_arg(ap, uint16*) = td->td_compression; + break; + case TIFFTAG_PHOTOMETRIC: + *va_arg(ap, uint16*) = td->td_photometric; + break; + case TIFFTAG_THRESHHOLDING: + *va_arg(ap, uint16*) = td->td_threshholding; + break; + case TIFFTAG_FILLORDER: + *va_arg(ap, uint16*) = td->td_fillorder; + break; + case TIFFTAG_ORIENTATION: + *va_arg(ap, uint16*) = td->td_orientation; + break; + case TIFFTAG_SAMPLESPERPIXEL: + *va_arg(ap, uint16*) = td->td_samplesperpixel; + break; + case TIFFTAG_ROWSPERSTRIP: + *va_arg(ap, uint32*) = td->td_rowsperstrip; + break; + case TIFFTAG_MINSAMPLEVALUE: + *va_arg(ap, uint16*) = td->td_minsamplevalue; + break; + case TIFFTAG_MAXSAMPLEVALUE: + *va_arg(ap, uint16*) = td->td_maxsamplevalue; + break; + case TIFFTAG_SMINSAMPLEVALUE: + if (tif->tif_flags & TIFF_PERSAMPLE) + *va_arg(ap, double**) = td->td_sminsamplevalue; + else + { + /* libtiff historially treats this as a single value. */ + uint16 i; + double v = td->td_sminsamplevalue[0]; + for (i=1; i < td->td_samplesperpixel; ++i) + if( td->td_sminsamplevalue[i] < v ) + v = td->td_sminsamplevalue[i]; + *va_arg(ap, double*) = v; } - } - break; - } - } - } - return(ret_val); + break; + case TIFFTAG_SMAXSAMPLEVALUE: + if (tif->tif_flags & TIFF_PERSAMPLE) + *va_arg(ap, double**) = td->td_smaxsamplevalue; + else + { + /* libtiff historially treats this as a single value. */ + uint16 i; + double v = td->td_smaxsamplevalue[0]; + for (i=1; i < td->td_samplesperpixel; ++i) + if( td->td_smaxsamplevalue[i] > v ) + v = td->td_smaxsamplevalue[i]; + *va_arg(ap, double*) = v; + } + break; + case TIFFTAG_XRESOLUTION: + *va_arg(ap, float*) = td->td_xresolution; + break; + case TIFFTAG_YRESOLUTION: + *va_arg(ap, float*) = td->td_yresolution; + break; + case TIFFTAG_PLANARCONFIG: + *va_arg(ap, uint16*) = td->td_planarconfig; + break; + case TIFFTAG_XPOSITION: + *va_arg(ap, float*) = td->td_xposition; + break; + case TIFFTAG_YPOSITION: + *va_arg(ap, float*) = td->td_yposition; + break; + case TIFFTAG_RESOLUTIONUNIT: + *va_arg(ap, uint16*) = td->td_resolutionunit; + break; + case TIFFTAG_PAGENUMBER: + *va_arg(ap, uint16*) = td->td_pagenumber[0]; + *va_arg(ap, uint16*) = td->td_pagenumber[1]; + break; + case TIFFTAG_HALFTONEHINTS: + *va_arg(ap, uint16*) = td->td_halftonehints[0]; + *va_arg(ap, uint16*) = td->td_halftonehints[1]; + break; + case TIFFTAG_COLORMAP: + *va_arg(ap, uint16**) = td->td_colormap[0]; + *va_arg(ap, uint16**) = td->td_colormap[1]; + *va_arg(ap, uint16**) = td->td_colormap[2]; + break; + case TIFFTAG_STRIPOFFSETS: + case TIFFTAG_TILEOFFSETS: + _TIFFFillStriles( tif ); + *va_arg(ap, uint64**) = td->td_stripoffset; + break; + case TIFFTAG_STRIPBYTECOUNTS: + case TIFFTAG_TILEBYTECOUNTS: + _TIFFFillStriles( tif ); + *va_arg(ap, uint64**) = td->td_stripbytecount; + break; + case TIFFTAG_MATTEING: + *va_arg(ap, uint16*) = + (td->td_extrasamples == 1 && + td->td_sampleinfo[0] == EXTRASAMPLE_ASSOCALPHA); + break; + case TIFFTAG_EXTRASAMPLES: + *va_arg(ap, uint16*) = td->td_extrasamples; + *va_arg(ap, uint16**) = td->td_sampleinfo; + break; + case TIFFTAG_TILEWIDTH: + *va_arg(ap, uint32*) = td->td_tilewidth; + break; + case TIFFTAG_TILELENGTH: + *va_arg(ap, uint32*) = td->td_tilelength; + break; + case TIFFTAG_TILEDEPTH: + *va_arg(ap, uint32*) = td->td_tiledepth; + break; + case TIFFTAG_DATATYPE: + switch (td->td_sampleformat) { + case SAMPLEFORMAT_UINT: + *va_arg(ap, uint16*) = DATATYPE_UINT; + break; + case SAMPLEFORMAT_INT: + *va_arg(ap, uint16*) = DATATYPE_INT; + break; + case SAMPLEFORMAT_IEEEFP: + *va_arg(ap, uint16*) = DATATYPE_IEEEFP; + break; + case SAMPLEFORMAT_VOID: + *va_arg(ap, uint16*) = DATATYPE_VOID; + break; + } + break; + case TIFFTAG_SAMPLEFORMAT: + *va_arg(ap, uint16*) = td->td_sampleformat; + break; + case TIFFTAG_IMAGEDEPTH: + *va_arg(ap, uint32*) = td->td_imagedepth; + break; + case TIFFTAG_SUBIFD: + *va_arg(ap, uint16*) = td->td_nsubifd; + *va_arg(ap, uint64**) = td->td_subifd; + break; + case TIFFTAG_YCBCRPOSITIONING: + *va_arg(ap, uint16*) = td->td_ycbcrpositioning; + break; + case TIFFTAG_YCBCRSUBSAMPLING: + *va_arg(ap, uint16*) = td->td_ycbcrsubsampling[0]; + *va_arg(ap, uint16*) = td->td_ycbcrsubsampling[1]; + break; + case TIFFTAG_TRANSFERFUNCTION: + *va_arg(ap, uint16**) = td->td_transferfunction[0]; + if (td->td_samplesperpixel - td->td_extrasamples > 1) { + *va_arg(ap, uint16**) = td->td_transferfunction[1]; + *va_arg(ap, uint16**) = td->td_transferfunction[2]; + } + break; + case TIFFTAG_REFERENCEBLACKWHITE: + *va_arg(ap, float**) = td->td_refblackwhite; + break; + case TIFFTAG_INKNAMES: + *va_arg(ap, char**) = td->td_inknames; + break; + default: + { + int i; + + /* + * This can happen if multiple images are open + * with different codecs which have private + * tags. The global tag information table may + * then have tags that are valid for one file + * but not the other. If the client tries to + * get a tag that is not valid for the image's + * codec then we'll arrive here. + */ + if( fip == NULL || fip->field_bit != FIELD_CUSTOM ) + { + TIFFErrorExt(tif->tif_clientdata, "_TIFFVGetField", + "%s: Invalid %stag \"%s\" " + "(not supported by codec)", + tif->tif_name, + isPseudoTag(tag) ? "pseudo-" : "", + fip ? fip->field_name : "Unknown"); + ret_val = 0; + break; + } + + /* + * Do we have a custom value? + */ + ret_val = 0; + for (i = 0; i < td->td_customValueCount; i++) { + TIFFTagValue *tv = td->td_customValues + i; + + if (tv->info->field_tag != tag) + continue; + + if (fip->field_passcount) { + if (fip->field_readcount == TIFF_VARIABLE2) + *va_arg(ap, uint32*) = (uint32)tv->count; + else /* Assume TIFF_VARIABLE */ + *va_arg(ap, uint16*) = (uint16)tv->count; + *va_arg(ap, void **) = tv->value; + ret_val = 1; + } else if (fip->field_tag == TIFFTAG_DOTRANGE + && strcmp(fip->field_name,"DotRange") == 0) { + /* TODO: This is an evil exception and should not have been + handled this way ... likely best if we move it into + the directory structure with an explicit field in + libtiff 4.1 and assign it a FIELD_ value */ + *va_arg(ap, uint16*) = ((uint16 *)tv->value)[0]; + *va_arg(ap, uint16*) = ((uint16 *)tv->value)[1]; + ret_val = 1; + } else { + if (fip->field_type == TIFF_ASCII + || fip->field_readcount == TIFF_VARIABLE + || fip->field_readcount == TIFF_VARIABLE2 + || fip->field_readcount == TIFF_SPP + || tv->count > 1) { + *va_arg(ap, void **) = tv->value; + ret_val = 1; + } else { + char *val = (char *)tv->value; + assert( tv->count == 1 ); + switch (fip->field_type) { + case TIFF_BYTE: + case TIFF_UNDEFINED: + *va_arg(ap, uint8*) = + *(uint8 *)val; + ret_val = 1; + break; + case TIFF_SBYTE: + *va_arg(ap, int8*) = + *(int8 *)val; + ret_val = 1; + break; + case TIFF_SHORT: + *va_arg(ap, uint16*) = + *(uint16 *)val; + ret_val = 1; + break; + case TIFF_SSHORT: + *va_arg(ap, int16*) = + *(int16 *)val; + ret_val = 1; + break; + case TIFF_LONG: + case TIFF_IFD: + *va_arg(ap, uint32*) = + *(uint32 *)val; + ret_val = 1; + break; + case TIFF_SLONG: + *va_arg(ap, int32*) = + *(int32 *)val; + ret_val = 1; + break; + case TIFF_LONG8: + case TIFF_IFD8: + *va_arg(ap, uint64*) = + *(uint64 *)val; + ret_val = 1; + break; + case TIFF_SLONG8: + *va_arg(ap, int64*) = + *(int64 *)val; + ret_val = 1; + break; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + case TIFF_FLOAT: + *va_arg(ap, float*) = + *(float *)val; + ret_val = 1; + break; + case TIFF_DOUBLE: + *va_arg(ap, double*) = + *(double *)val; + ret_val = 1; + break; + default: + ret_val = 0; + break; + } + } + } + break; + } + } + } + return(ret_val); } /* @@ -948,7 +1129,7 @@ _TIFFVGetField(TIFF* tif, ttag_t tag, va_list ap) * internal directory structure. */ int -TIFFGetField(TIFF* tif, ttag_t tag, ...) +TIFFGetField(TIFF* tif, uint32 tag, ...) { int status; va_list ap; @@ -966,9 +1147,9 @@ TIFFGetField(TIFF* tif, ttag_t tag, ...) * top of the library. */ int -TIFFVGetField(TIFF* tif, ttag_t tag, va_list ap) +TIFFVGetField(TIFF* tif, uint32 tag, va_list ap) { - const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY); + const TIFFField* fip = TIFFFindField(tif, tag, TIFF_ANY); return (fip && (isPseudoTag(tag) || TIFFFieldSet(tif, fip->field_bit)) ? (*tif->tif_tagmethods.vgetfield)(tif, tag, ap) : 0); } @@ -990,6 +1171,8 @@ TIFFFreeDirectory(TIFF* tif) int i; _TIFFmemset(td->td_fieldsset, 0, FIELD_SETLONGS); + CleanupField(td_sminsamplevalue); + CleanupField(td_smaxsamplevalue); CleanupField(td_colormap[0]); CleanupField(td_colormap[1]); CleanupField(td_colormap[2]); @@ -1013,6 +1196,11 @@ TIFFFreeDirectory(TIFF* tif) td->td_customValueCount = 0; CleanupField(td_customValues); + +#if defined(DEFER_STRILE_LOAD) + _TIFFmemset( &(td->td_stripoffset_entry), 0, sizeof(TIFFDirEntry)); + _TIFFmemset( &(td->td_stripbytecount_entry), 0, sizeof(TIFFDirEntry)); +#endif } #undef CleanupField @@ -1039,14 +1227,43 @@ TIFFSetTagExtender(TIFFExtendProc extender) int TIFFCreateDirectory(TIFF* tif) { - TIFFDefaultDirectory(tif); - tif->tif_diroff = 0; - tif->tif_nextdiroff = 0; - tif->tif_curoff = 0; - tif->tif_row = (uint32) -1; - tif->tif_curstrip = (tstrip_t) -1; + TIFFDefaultDirectory(tif); + tif->tif_diroff = 0; + tif->tif_nextdiroff = 0; + tif->tif_curoff = 0; + tif->tif_row = (uint32) -1; + tif->tif_curstrip = (uint32) -1; - return 0; + return 0; +} + +int +TIFFCreateCustomDirectory(TIFF* tif, const TIFFFieldArray* infoarray) +{ + TIFFDefaultDirectory(tif); + + /* + * Reset the field definitions to match the application provided list. + * Hopefully TIFFDefaultDirectory() won't have done anything irreversable + * based on it's assumption this is an image directory. + */ + _TIFFSetupFields(tif, infoarray); + + tif->tif_diroff = 0; + tif->tif_nextdiroff = 0; + tif->tif_curoff = 0; + tif->tif_row = (uint32) -1; + tif->tif_curstrip = (uint32) -1; + + return 0; +} + +int +TIFFCreateEXIFDirectory(TIFF* tif) +{ + const TIFFFieldArray* exifFieldArray; + exifFieldArray = _TIFFGetExifFields(); + return TIFFCreateCustomDirectory(tif, exifFieldArray); } /* @@ -1056,11 +1273,10 @@ int TIFFDefaultDirectory(TIFF* tif) { register TIFFDirectory* td = &tif->tif_dir; + const TIFFFieldArray* tiffFieldArray; - size_t tiffFieldInfoCount; - const TIFFFieldInfo *tiffFieldInfo = - _TIFFGetFieldInfo(&tiffFieldInfoCount); - _TIFFSetupFieldInfo(tif, tiffFieldInfo, tiffFieldInfoCount); + tiffFieldArray = _TIFFGetFields(); + _TIFFSetupFields(tif, tiffFieldArray); _TIFFmemset(td, 0, sizeof (*td)); td->td_fillorder = FILLORDER_MSB2LSB; @@ -1072,16 +1288,16 @@ TIFFDefaultDirectory(TIFF* tif) td->td_tilewidth = 0; td->td_tilelength = 0; td->td_tiledepth = 1; - td->td_stripbytecountsorted = 1; /* Our own arrays always sorted. */ + td->td_stripbytecountsorted = 1; /* Our own arrays always sorted. */ td->td_resolutionunit = RESUNIT_INCH; td->td_sampleformat = SAMPLEFORMAT_UINT; td->td_imagedepth = 1; td->td_ycbcrsubsampling[0] = 2; td->td_ycbcrsubsampling[1] = 2; td->td_ycbcrpositioning = YCBCRPOSITION_CENTERED; - tif->tif_postdecode = _TIFFNoPostDecode; + tif->tif_postdecode = _TIFFNoPostDecode; tif->tif_foundfield = NULL; - tif->tif_tagmethods.vsetfield = _TIFFVSetField; + tif->tif_tagmethods.vsetfield = _TIFFVSetField; tif->tif_tagmethods.vgetfield = _TIFFVGetField; tif->tif_tagmethods.printdir = NULL; /* @@ -1107,69 +1323,143 @@ TIFFDefaultDirectory(TIFF* tif) * Should we also be clearing stuff like INSUBIFD? */ tif->tif_flags &= ~TIFF_ISTILED; - /* - * Clear other directory-specific fields. - */ - tif->tif_tilesize = -1; - tif->tif_scanlinesize = -1; return (1); } static int -TIFFAdvanceDirectory(TIFF* tif, uint32* nextdir, toff_t* off) +TIFFAdvanceDirectory(TIFF* tif, uint64* nextdir, uint64* off) { static const char module[] = "TIFFAdvanceDirectory"; - uint16 dircount; if (isMapped(tif)) { - toff_t poff=*nextdir; - if (poff+sizeof(uint16) > tif->tif_size) + uint64 poff=*nextdir; + if (!(tif->tif_flags&TIFF_BIGTIFF)) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: Error fetching directory count", - tif->tif_name); - return (0); + tmsize_t poffa,poffb,poffc,poffd; + uint16 dircount; + uint32 nextdir32; + poffa=(tmsize_t)poff; + poffb=poffa+sizeof(uint16); + if (((uint64)poffa!=poff)||(poffbtif->tif_size)) + { + TIFFErrorExt(tif->tif_clientdata,module,"Error fetching directory count"); + return(0); + } + _TIFFmemcpy(&dircount,tif->tif_base+poffa,sizeof(uint16)); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabShort(&dircount); + poffc=poffb+dircount*12; + poffd=poffc+sizeof(uint32); + if ((poffctif->tif_size)) + { + TIFFErrorExt(tif->tif_clientdata,module,"Error fetching directory link"); + return(0); + } + if (off!=NULL) + *off=(uint64)poffc; + _TIFFmemcpy(&nextdir32,tif->tif_base+poffc,sizeof(uint32)); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(&nextdir32); + *nextdir=nextdir32; } - _TIFFmemcpy(&dircount, tif->tif_base+poff, sizeof (uint16)); - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabShort(&dircount); - poff+=sizeof (uint16)+dircount*sizeof (TIFFDirEntry); - if (off != NULL) - *off = poff; - if (((toff_t) (poff+sizeof (uint32))) > tif->tif_size) + else { - TIFFErrorExt(tif->tif_clientdata, module, "%s: Error fetching directory link", - tif->tif_name); - return (0); + tmsize_t poffa,poffb,poffc,poffd; + uint64 dircount64; + uint16 dircount16; + poffa=(tmsize_t)poff; + poffb=poffa+sizeof(uint64); + if (((uint64)poffa!=poff)||(poffbtif->tif_size)) + { + TIFFErrorExt(tif->tif_clientdata,module,"Error fetching directory count"); + return(0); + } + _TIFFmemcpy(&dircount64,tif->tif_base+poffa,sizeof(uint64)); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8(&dircount64); + if (dircount64>0xFFFF) + { + TIFFErrorExt(tif->tif_clientdata,module,"Sanity check on directory count failed"); + return(0); + } + dircount16=(uint16)dircount64; + poffc=poffb+dircount16*20; + poffd=poffc+sizeof(uint64); + if ((poffctif->tif_size)) + { + TIFFErrorExt(tif->tif_clientdata,module,"Error fetching directory link"); + return(0); + } + if (off!=NULL) + *off=(uint64)poffc; + _TIFFmemcpy(nextdir,tif->tif_base+poffc,sizeof(uint64)); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8(nextdir); } - _TIFFmemcpy(nextdir, tif->tif_base+poff, sizeof (uint32)); - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabLong(nextdir); - return (1); + return(1); } else { - if (!SeekOK(tif, *nextdir) || - !ReadOK(tif, &dircount, sizeof (uint16))) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: Error fetching directory count", - tif->tif_name); - return (0); + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + uint16 dircount; + uint32 nextdir32; + if (!SeekOK(tif, *nextdir) || + !ReadOK(tif, &dircount, sizeof (uint16))) { + TIFFErrorExt(tif->tif_clientdata, module, "%s: Error fetching directory count", + tif->tif_name); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabShort(&dircount); + if (off != NULL) + *off = TIFFSeekFile(tif, + dircount*12, SEEK_CUR); + else + (void) TIFFSeekFile(tif, + dircount*12, SEEK_CUR); + if (!ReadOK(tif, &nextdir32, sizeof (uint32))) { + TIFFErrorExt(tif->tif_clientdata, module, "%s: Error fetching directory link", + tif->tif_name); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(&nextdir32); + *nextdir=nextdir32; } - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabShort(&dircount); - if (off != NULL) - *off = TIFFSeekFile(tif, - dircount*sizeof (TIFFDirEntry), SEEK_CUR); else - (void) TIFFSeekFile(tif, - dircount*sizeof (TIFFDirEntry), SEEK_CUR); - if (!ReadOK(tif, nextdir, sizeof (uint32))) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: Error fetching directory link", - tif->tif_name); - return (0); + { + uint64 dircount64; + uint16 dircount16; + if (!SeekOK(tif, *nextdir) || + !ReadOK(tif, &dircount64, sizeof (uint64))) { + TIFFErrorExt(tif->tif_clientdata, module, "%s: Error fetching directory count", + tif->tif_name); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong8(&dircount64); + if (dircount64>0xFFFF) + { + TIFFErrorExt(tif->tif_clientdata, module, "Error fetching directory count"); + return(0); + } + dircount16 = (uint16)dircount64; + if (off != NULL) + *off = TIFFSeekFile(tif, + dircount16*20, SEEK_CUR); + else + (void) TIFFSeekFile(tif, + dircount16*20, SEEK_CUR); + if (!ReadOK(tif, nextdir, sizeof (uint64))) { + TIFFErrorExt(tif->tif_clientdata, module, "%s: Error fetching directory link", + tif->tif_name); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong8(nextdir); } - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabLong(nextdir); return (1); } } @@ -1177,15 +1467,19 @@ TIFFAdvanceDirectory(TIFF* tif, uint32* nextdir, toff_t* off) /* * Count the number of directories in a file. */ -tdir_t +uint16 TIFFNumberOfDirectories(TIFF* tif) { - toff_t nextdir = tif->tif_header.tiff_diroff; - tdir_t n = 0; - - while (nextdir != 0 && TIFFAdvanceDirectory(tif, &nextdir, NULL)) - n++; - return (n); + uint64 nextdir; + uint16 n; + if (!(tif->tif_flags&TIFF_BIGTIFF)) + nextdir = tif->tif_header.classic.tiff_diroff; + else + nextdir = tif->tif_header.big.tiff_diroff; + n = 0; + while (nextdir != 0 && TIFFAdvanceDirectory(tif, &nextdir, NULL)) + n++; + return (n); } /* @@ -1193,12 +1487,15 @@ TIFFNumberOfDirectories(TIFF* tif) * NB: Directories are numbered starting at 0. */ int -TIFFSetDirectory(TIFF* tif, tdir_t dirn) +TIFFSetDirectory(TIFF* tif, uint16 dirn) { - toff_t nextdir; - tdir_t n; + uint64 nextdir; + uint16 n; - nextdir = tif->tif_header.tiff_diroff; + if (!(tif->tif_flags&TIFF_BIGTIFF)) + nextdir = tif->tif_header.classic.tiff_diroff; + else + nextdir = tif->tif_header.big.tiff_diroff; for (n = dirn; n > 0 && nextdir != 0; n--) if (!TIFFAdvanceDirectory(tif, &nextdir, NULL)) return (0); @@ -1224,7 +1521,7 @@ TIFFSetDirectory(TIFF* tif, tdir_t dirn) * the SubIFD tag (e.g. thumbnail images). */ int -TIFFSetSubDirectory(TIFF* tif, uint32 diroff) +TIFFSetSubDirectory(TIFF* tif, uint64 diroff) { tif->tif_nextdiroff = diroff; /* @@ -1238,7 +1535,7 @@ TIFFSetSubDirectory(TIFF* tif, uint32 diroff) /* * Return file offset of the current directory. */ -uint32 +uint64 TIFFCurrentDirOffset(TIFF* tif) { return (tif->tif_diroff); @@ -1258,12 +1555,12 @@ TIFFLastDirectory(TIFF* tif) * Unlink the specified directory from the directory chain. */ int -TIFFUnlinkDirectory(TIFF* tif, tdir_t dirn) +TIFFUnlinkDirectory(TIFF* tif, uint16 dirn) { static const char module[] = "TIFFUnlinkDirectory"; - toff_t nextdir; - toff_t off; - tdir_t n; + uint64 nextdir; + uint64 off; + uint16 n; if (tif->tif_mode == O_RDONLY) { TIFFErrorExt(tif->tif_clientdata, module, @@ -1275,8 +1572,16 @@ TIFFUnlinkDirectory(TIFF* tif, tdir_t dirn) * to unlink and nab the offset of the link * field we'll need to patch. */ - nextdir = tif->tif_header.tiff_diroff; - off = sizeof (uint16) + sizeof (uint16); + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + nextdir = tif->tif_header.classic.tiff_diroff; + off = 4; + } + else + { + nextdir = tif->tif_header.big.tiff_diroff; + off = 8; + } for (n = dirn-1; n > 0; n--) { if (nextdir == 0) { TIFFErrorExt(tif->tif_clientdata, module, "Directory %d does not exist", dirn); @@ -1297,11 +1602,26 @@ TIFFUnlinkDirectory(TIFF* tif, tdir_t dirn) * that follows. */ (void) TIFFSeekFile(tif, off, SEEK_SET); - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabLong(&nextdir); - if (!WriteOK(tif, &nextdir, sizeof (uint32))) { - TIFFErrorExt(tif->tif_clientdata, module, "Error writing directory link"); - return (0); + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + uint32 nextdir32; + nextdir32=(uint32)nextdir; + assert((uint64)nextdir32==nextdir); + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(&nextdir32); + if (!WriteOK(tif, &nextdir32, sizeof (uint32))) { + TIFFErrorExt(tif->tif_clientdata, module, "Error writing directory link"); + return (0); + } + } + else + { + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong8(&nextdir); + if (!WriteOK(tif, &nextdir, sizeof (uint64))) { + TIFFErrorExt(tif->tif_clientdata, module, "Error writing directory link"); + return (0); + } } /* * Leave directory state setup safely. We don't have @@ -1315,70 +1635,20 @@ TIFFUnlinkDirectory(TIFF* tif, tdir_t dirn) _TIFFfree(tif->tif_rawdata); tif->tif_rawdata = NULL; tif->tif_rawcc = 0; + tif->tif_rawdataoff = 0; + tif->tif_rawdataloaded = 0; } - tif->tif_flags &= ~(TIFF_BEENWRITING|TIFF_BUFFERSETUP|TIFF_POSTENCODE); + tif->tif_flags &= ~(TIFF_BEENWRITING|TIFF_BUFFERSETUP|TIFF_POSTENCODE|TIFF_BUF4WRITE); TIFFFreeDirectory(tif); TIFFDefaultDirectory(tif); tif->tif_diroff = 0; /* force link on next write */ tif->tif_nextdiroff = 0; /* next write must be at end */ tif->tif_curoff = 0; tif->tif_row = (uint32) -1; - tif->tif_curstrip = (tstrip_t) -1; + tif->tif_curstrip = (uint32) -1; return (1); } -/* [BFC] - * - * Author: Bruce Cameron - * - * Set a table of tags that are to be replaced during directory process by the - * 'IGNORE' state - or return TRUE/FALSE for the requested tag such that - * 'ReadDirectory' can use the stored information. - * - * FIXME: this is never used properly. Should be removed in the future. - */ -int -TIFFReassignTagToIgnore (enum TIFFIgnoreSense task, int TIFFtagID) -{ - static int TIFFignoretags [FIELD_LAST]; - static int tagcount = 0 ; - int i; /* Loop index */ - int j; /* Loop index */ - - switch (task) - { - case TIS_STORE: - if ( tagcount < (FIELD_LAST - 1) ) - { - for ( j = 0 ; j < tagcount ; ++j ) - { /* Do not add duplicate tag */ - if ( TIFFignoretags [j] == TIFFtagID ) - return (TRUE) ; - } - TIFFignoretags [tagcount++] = TIFFtagID ; - return (TRUE) ; - } - break ; - - case TIS_EXTRACT: - for ( i = 0 ; i < tagcount ; ++i ) - { - if ( TIFFignoretags [i] == TIFFtagID ) - return (TRUE) ; - } - break; - - case TIS_EMPTY: - tagcount = 0 ; /* Clear the list */ - return (TRUE) ; - - default: - break; - } - - return (FALSE); -} - /* vim: set ts=8 sts=8 sw=8 noet: */ /* * Local Variables: diff --git a/dll/3rdparty/libtiff/tif_dirinfo.c b/dll/3rdparty/libtiff/tif_dirinfo.c index 0a77c9714e2..d3199318f49 100644 --- a/dll/3rdparty/libtiff/tif_dirinfo.c +++ b/dll/3rdparty/libtiff/tif_dirinfo.c @@ -1,26 +1,26 @@ -/* $Id: tif_dirinfo.c,v 1.65.2.9 2010-06-09 21:15:27 bfriesen Exp $ */ +/* $Id: tif_dirinfo.c,v 1.117 2012-08-19 16:56:34 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. * - * Permission to use, copy, modify, distribute, and sell this software and + * Permission to use, copy, modify, distribute, and sell this software and * its documentation for any purpose is hereby granted without fee, provided * that (i) the above copyright notices and this permission notice appear in * all copies of the software and related documentation, and (ii) the names of * Sam Leffler and Silicon Graphics may not be used in any advertising or * publicity relating to the software without the specific, prior written * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. */ @@ -31,523 +31,301 @@ */ #include "tiffiop.h" #include -#include /* - * NB: NB: THIS ARRAY IS ASSUMED TO BE SORTED BY TAG. - * If a tag can have both LONG and SHORT types then the LONG must be - * placed before the SHORT for writing to work properly. + * NOTE: THIS ARRAY IS ASSUMED TO BE SORTED BY TAG. * * NOTE: The second field (field_readcount) and third field (field_writecount) * sometimes use the values TIFF_VARIABLE (-1), TIFF_VARIABLE2 (-3) - * and TIFFTAG_SPP (-2). The macros should be used but would throw off - * the formatting of the code, so please interprete the -1, -2 and -3 + * and TIFF_SPP (-2). The macros should be used but would throw off + * the formatting of the code, so please interprete the -1, -2 and -3 * values accordingly. */ -static const TIFFFieldInfo -tiffFieldInfo[] = { - { TIFFTAG_SUBFILETYPE, 1, 1, TIFF_LONG, FIELD_SUBFILETYPE, - 1, 0, "SubfileType" }, -/* XXX SHORT for compatibility w/ old versions of the library */ - { TIFFTAG_SUBFILETYPE, 1, 1, TIFF_SHORT, FIELD_SUBFILETYPE, - 1, 0, "SubfileType" }, - { TIFFTAG_OSUBFILETYPE, 1, 1, TIFF_SHORT, FIELD_SUBFILETYPE, - 1, 0, "OldSubfileType" }, - { TIFFTAG_IMAGEWIDTH, 1, 1, TIFF_LONG, FIELD_IMAGEDIMENSIONS, - 0, 0, "ImageWidth" }, - { TIFFTAG_IMAGEWIDTH, 1, 1, TIFF_SHORT, FIELD_IMAGEDIMENSIONS, - 0, 0, "ImageWidth" }, - { TIFFTAG_IMAGELENGTH, 1, 1, TIFF_LONG, FIELD_IMAGEDIMENSIONS, - 1, 0, "ImageLength" }, - { TIFFTAG_IMAGELENGTH, 1, 1, TIFF_SHORT, FIELD_IMAGEDIMENSIONS, - 1, 0, "ImageLength" }, - { TIFFTAG_BITSPERSAMPLE, -1,-1, TIFF_SHORT, FIELD_BITSPERSAMPLE, - 0, 0, "BitsPerSample" }, -/* XXX LONG for compatibility with some broken TIFF writers */ - { TIFFTAG_BITSPERSAMPLE, -1,-1, TIFF_LONG, FIELD_BITSPERSAMPLE, - 0, 0, "BitsPerSample" }, - { TIFFTAG_COMPRESSION, -1, 1, TIFF_SHORT, FIELD_COMPRESSION, - 0, 0, "Compression" }, -/* XXX LONG for compatibility with some broken TIFF writers */ - { TIFFTAG_COMPRESSION, -1, 1, TIFF_LONG, FIELD_COMPRESSION, - 0, 0, "Compression" }, - { TIFFTAG_PHOTOMETRIC, 1, 1, TIFF_SHORT, FIELD_PHOTOMETRIC, - 0, 0, "PhotometricInterpretation" }, -/* XXX LONG for compatibility with some broken TIFF writers */ - { TIFFTAG_PHOTOMETRIC, 1, 1, TIFF_LONG, FIELD_PHOTOMETRIC, - 0, 0, "PhotometricInterpretation" }, - { TIFFTAG_THRESHHOLDING, 1, 1, TIFF_SHORT, FIELD_THRESHHOLDING, - 1, 0, "Threshholding" }, - { TIFFTAG_CELLWIDTH, 1, 1, TIFF_SHORT, FIELD_IGNORE, - 1, 0, "CellWidth" }, - { TIFFTAG_CELLLENGTH, 1, 1, TIFF_SHORT, FIELD_IGNORE, - 1, 0, "CellLength" }, - { TIFFTAG_FILLORDER, 1, 1, TIFF_SHORT, FIELD_FILLORDER, - 0, 0, "FillOrder" }, - { TIFFTAG_DOCUMENTNAME, -1,-1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "DocumentName" }, - { TIFFTAG_IMAGEDESCRIPTION, -1,-1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "ImageDescription" }, - { TIFFTAG_MAKE, -1,-1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "Make" }, - { TIFFTAG_MODEL, -1,-1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "Model" }, - { TIFFTAG_STRIPOFFSETS, -1,-1, TIFF_LONG, FIELD_STRIPOFFSETS, - 0, 0, "StripOffsets" }, - { TIFFTAG_STRIPOFFSETS, -1,-1, TIFF_SHORT, FIELD_STRIPOFFSETS, - 0, 0, "StripOffsets" }, - { TIFFTAG_ORIENTATION, 1, 1, TIFF_SHORT, FIELD_ORIENTATION, - 0, 0, "Orientation" }, - { TIFFTAG_SAMPLESPERPIXEL, 1, 1, TIFF_SHORT, FIELD_SAMPLESPERPIXEL, - 0, 0, "SamplesPerPixel" }, - { TIFFTAG_ROWSPERSTRIP, 1, 1, TIFF_LONG, FIELD_ROWSPERSTRIP, - 0, 0, "RowsPerStrip" }, - { TIFFTAG_ROWSPERSTRIP, 1, 1, TIFF_SHORT, FIELD_ROWSPERSTRIP, - 0, 0, "RowsPerStrip" }, - { TIFFTAG_STRIPBYTECOUNTS, -1,-1, TIFF_LONG, FIELD_STRIPBYTECOUNTS, - 0, 0, "StripByteCounts" }, - { TIFFTAG_STRIPBYTECOUNTS, -1,-1, TIFF_SHORT, FIELD_STRIPBYTECOUNTS, - 0, 0, "StripByteCounts" }, - { TIFFTAG_MINSAMPLEVALUE, -2,-1, TIFF_SHORT, FIELD_MINSAMPLEVALUE, - 1, 0, "MinSampleValue" }, - { TIFFTAG_MAXSAMPLEVALUE, -2,-1, TIFF_SHORT, FIELD_MAXSAMPLEVALUE, - 1, 0, "MaxSampleValue" }, - { TIFFTAG_XRESOLUTION, 1, 1, TIFF_RATIONAL, FIELD_RESOLUTION, - 1, 0, "XResolution" }, - { TIFFTAG_YRESOLUTION, 1, 1, TIFF_RATIONAL, FIELD_RESOLUTION, - 1, 0, "YResolution" }, - { TIFFTAG_PLANARCONFIG, 1, 1, TIFF_SHORT, FIELD_PLANARCONFIG, - 0, 0, "PlanarConfiguration" }, - { TIFFTAG_PAGENAME, -1,-1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "PageName" }, - { TIFFTAG_XPOSITION, 1, 1, TIFF_RATIONAL, FIELD_POSITION, - 1, 0, "XPosition" }, - { TIFFTAG_YPOSITION, 1, 1, TIFF_RATIONAL, FIELD_POSITION, - 1, 0, "YPosition" }, - { TIFFTAG_FREEOFFSETS, -1,-1, TIFF_LONG, FIELD_IGNORE, - 0, 0, "FreeOffsets" }, - { TIFFTAG_FREEBYTECOUNTS, -1,-1, TIFF_LONG, FIELD_IGNORE, - 0, 0, "FreeByteCounts" }, - { TIFFTAG_GRAYRESPONSEUNIT, 1, 1, TIFF_SHORT, FIELD_IGNORE, - 1, 0, "GrayResponseUnit" }, - { TIFFTAG_GRAYRESPONSECURVE,-1,-1, TIFF_SHORT, FIELD_IGNORE, - 1, 0, "GrayResponseCurve" }, - { TIFFTAG_RESOLUTIONUNIT, 1, 1, TIFF_SHORT, FIELD_RESOLUTIONUNIT, - 1, 0, "ResolutionUnit" }, - { TIFFTAG_PAGENUMBER, 2, 2, TIFF_SHORT, FIELD_PAGENUMBER, - 1, 0, "PageNumber" }, - { TIFFTAG_COLORRESPONSEUNIT, 1, 1, TIFF_SHORT, FIELD_IGNORE, - 1, 0, "ColorResponseUnit" }, - { TIFFTAG_TRANSFERFUNCTION, -1,-1, TIFF_SHORT, FIELD_TRANSFERFUNCTION, - 1, 0, "TransferFunction" }, - { TIFFTAG_SOFTWARE, -1,-1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "Software" }, - { TIFFTAG_DATETIME, 20,20, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "DateTime" }, - { TIFFTAG_ARTIST, -1,-1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "Artist" }, - { TIFFTAG_HOSTCOMPUTER, -1,-1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "HostComputer" }, - { TIFFTAG_WHITEPOINT, 2, 2, TIFF_RATIONAL, FIELD_CUSTOM, - 1, 0, "WhitePoint" }, - { TIFFTAG_PRIMARYCHROMATICITIES,6,6,TIFF_RATIONAL, FIELD_CUSTOM, - 1, 0, "PrimaryChromaticities" }, - { TIFFTAG_COLORMAP, -1,-1, TIFF_SHORT, FIELD_COLORMAP, - 1, 0, "ColorMap" }, - { TIFFTAG_HALFTONEHINTS, 2, 2, TIFF_SHORT, FIELD_HALFTONEHINTS, - 1, 0, "HalftoneHints" }, - { TIFFTAG_TILEWIDTH, 1, 1, TIFF_LONG, FIELD_TILEDIMENSIONS, - 0, 0, "TileWidth" }, - { TIFFTAG_TILEWIDTH, 1, 1, TIFF_SHORT, FIELD_TILEDIMENSIONS, - 0, 0, "TileWidth" }, - { TIFFTAG_TILELENGTH, 1, 1, TIFF_LONG, FIELD_TILEDIMENSIONS, - 0, 0, "TileLength" }, - { TIFFTAG_TILELENGTH, 1, 1, TIFF_SHORT, FIELD_TILEDIMENSIONS, - 0, 0, "TileLength" }, - { TIFFTAG_TILEOFFSETS, -1, 1, TIFF_LONG, FIELD_STRIPOFFSETS, - 0, 0, "TileOffsets" }, - { TIFFTAG_TILEBYTECOUNTS, -1, 1, TIFF_LONG, FIELD_STRIPBYTECOUNTS, - 0, 0, "TileByteCounts" }, - { TIFFTAG_TILEBYTECOUNTS, -1, 1, TIFF_SHORT, FIELD_STRIPBYTECOUNTS, - 0, 0, "TileByteCounts" }, - { TIFFTAG_SUBIFD, -1,-1, TIFF_IFD, FIELD_SUBIFD, - 1, 1, "SubIFD" }, - { TIFFTAG_SUBIFD, -1,-1, TIFF_LONG, FIELD_SUBIFD, - 1, 1, "SubIFD" }, - { TIFFTAG_INKSET, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 0, 0, "InkSet" }, - { TIFFTAG_INKNAMES, -1,-1, TIFF_ASCII, FIELD_INKNAMES, - 1, 1, "InkNames" }, - { TIFFTAG_NUMBEROFINKS, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "NumberOfInks" }, - { TIFFTAG_DOTRANGE, 2, 2, TIFF_SHORT, FIELD_CUSTOM, - 0, 0, "DotRange" }, - { TIFFTAG_DOTRANGE, 2, 2, TIFF_BYTE, FIELD_CUSTOM, - 0, 0, "DotRange" }, - { TIFFTAG_TARGETPRINTER, -1,-1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "TargetPrinter" }, - { TIFFTAG_EXTRASAMPLES, -1,-1, TIFF_SHORT, FIELD_EXTRASAMPLES, - 0, 1, "ExtraSamples" }, -/* XXX for bogus Adobe Photoshop v2.5 files */ - { TIFFTAG_EXTRASAMPLES, -1,-1, TIFF_BYTE, FIELD_EXTRASAMPLES, - 0, 1, "ExtraSamples" }, - { TIFFTAG_SAMPLEFORMAT, -1,-1, TIFF_SHORT, FIELD_SAMPLEFORMAT, - 0, 0, "SampleFormat" }, - { TIFFTAG_SMINSAMPLEVALUE, -2,-1, TIFF_ANY, FIELD_SMINSAMPLEVALUE, - 1, 0, "SMinSampleValue" }, - { TIFFTAG_SMAXSAMPLEVALUE, -2,-1, TIFF_ANY, FIELD_SMAXSAMPLEVALUE, - 1, 0, "SMaxSampleValue" }, - { TIFFTAG_CLIPPATH, -1, -3, TIFF_BYTE, FIELD_CUSTOM, - 0, 1, "ClipPath" }, - { TIFFTAG_XCLIPPATHUNITS, 1, 1, TIFF_SLONG, FIELD_CUSTOM, - 0, 0, "XClipPathUnits" }, - { TIFFTAG_XCLIPPATHUNITS, 1, 1, TIFF_SSHORT, FIELD_CUSTOM, - 0, 0, "XClipPathUnits" }, - { TIFFTAG_XCLIPPATHUNITS, 1, 1, TIFF_SBYTE, FIELD_CUSTOM, - 0, 0, "XClipPathUnits" }, - { TIFFTAG_YCLIPPATHUNITS, 1, 1, TIFF_SLONG, FIELD_CUSTOM, - 0, 0, "YClipPathUnits" }, - { TIFFTAG_YCLIPPATHUNITS, 1, 1, TIFF_SSHORT, FIELD_CUSTOM, - 0, 0, "YClipPathUnits" }, - { TIFFTAG_YCLIPPATHUNITS, 1, 1, TIFF_SBYTE, FIELD_CUSTOM, - 0, 0, "YClipPathUnits" }, - { TIFFTAG_YCBCRCOEFFICIENTS, 3, 3, TIFF_RATIONAL, FIELD_CUSTOM, - 0, 0, "YCbCrCoefficients" }, - { TIFFTAG_YCBCRSUBSAMPLING, 2, 2, TIFF_SHORT, FIELD_YCBCRSUBSAMPLING, - 0, 0, "YCbCrSubsampling" }, - { TIFFTAG_YCBCRPOSITIONING, 1, 1, TIFF_SHORT, FIELD_YCBCRPOSITIONING, - 0, 0, "YCbCrPositioning" }, - { TIFFTAG_REFERENCEBLACKWHITE, 6, 6, TIFF_RATIONAL, FIELD_REFBLACKWHITE, - 1, 0, "ReferenceBlackWhite" }, -/* XXX temporarily accept LONG for backwards compatibility */ - { TIFFTAG_REFERENCEBLACKWHITE, 6, 6, TIFF_LONG, FIELD_REFBLACKWHITE, - 1, 0, "ReferenceBlackWhite" }, - { TIFFTAG_XMLPACKET, -3,-3, TIFF_BYTE, FIELD_CUSTOM, - 0, 1, "XMLPacket" }, -/* begin SGI tags */ - { TIFFTAG_MATTEING, 1, 1, TIFF_SHORT, FIELD_EXTRASAMPLES, - 0, 0, "Matteing" }, - { TIFFTAG_DATATYPE, -2,-1, TIFF_SHORT, FIELD_SAMPLEFORMAT, - 0, 0, "DataType" }, - { TIFFTAG_IMAGEDEPTH, 1, 1, TIFF_LONG, FIELD_IMAGEDEPTH, - 0, 0, "ImageDepth" }, - { TIFFTAG_IMAGEDEPTH, 1, 1, TIFF_SHORT, FIELD_IMAGEDEPTH, - 0, 0, "ImageDepth" }, - { TIFFTAG_TILEDEPTH, 1, 1, TIFF_LONG, FIELD_TILEDEPTH, - 0, 0, "TileDepth" }, - { TIFFTAG_TILEDEPTH, 1, 1, TIFF_SHORT, FIELD_TILEDEPTH, - 0, 0, "TileDepth" }, -/* end SGI tags */ -/* begin Pixar tags */ - { TIFFTAG_PIXAR_IMAGEFULLWIDTH, 1, 1, TIFF_LONG, FIELD_CUSTOM, - 1, 0, "ImageFullWidth" }, - { TIFFTAG_PIXAR_IMAGEFULLLENGTH, 1, 1, TIFF_LONG, FIELD_CUSTOM, - 1, 0, "ImageFullLength" }, - { TIFFTAG_PIXAR_TEXTUREFORMAT, -1, -1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "TextureFormat" }, - { TIFFTAG_PIXAR_WRAPMODES, -1, -1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "TextureWrapModes" }, - { TIFFTAG_PIXAR_FOVCOT, 1, 1, TIFF_FLOAT, FIELD_CUSTOM, - 1, 0, "FieldOfViewCotangent" }, - { TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN, 16,16, TIFF_FLOAT, - FIELD_CUSTOM, 1, 0, "MatrixWorldToScreen" }, - { TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA, 16,16, TIFF_FLOAT, - FIELD_CUSTOM, 1, 0, "MatrixWorldToCamera" }, - { TIFFTAG_COPYRIGHT, -1, -1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "Copyright" }, -/* end Pixar tags */ - { TIFFTAG_RICHTIFFIPTC, -3, -3, TIFF_LONG, FIELD_CUSTOM, - 0, 1, "RichTIFFIPTC" }, - { TIFFTAG_PHOTOSHOP, -3, -3, TIFF_BYTE, FIELD_CUSTOM, - 0, 1, "Photoshop" }, - { TIFFTAG_EXIFIFD, 1, 1, TIFF_LONG, FIELD_CUSTOM, - 0, 0, "EXIFIFDOffset" }, - { TIFFTAG_ICCPROFILE, -3, -3, TIFF_UNDEFINED, FIELD_CUSTOM, - 0, 1, "ICC Profile" }, - { TIFFTAG_GPSIFD, 1, 1, TIFF_LONG, FIELD_CUSTOM, - 0, 0, "GPSIFDOffset" }, - { TIFFTAG_STONITS, 1, 1, TIFF_DOUBLE, FIELD_CUSTOM, - 0, 0, "StoNits" }, - { TIFFTAG_INTEROPERABILITYIFD, 1, 1, TIFF_LONG, FIELD_CUSTOM, - 0, 0, "InteroperabilityIFDOffset" }, -/* begin DNG tags */ - { TIFFTAG_DNGVERSION, 4, 4, TIFF_BYTE, FIELD_CUSTOM, - 0, 0, "DNGVersion" }, - { TIFFTAG_DNGBACKWARDVERSION, 4, 4, TIFF_BYTE, FIELD_CUSTOM, - 0, 0, "DNGBackwardVersion" }, - { TIFFTAG_UNIQUECAMERAMODEL, -1, -1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "UniqueCameraModel" }, - { TIFFTAG_LOCALIZEDCAMERAMODEL, -1, -1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "LocalizedCameraModel" }, - { TIFFTAG_LOCALIZEDCAMERAMODEL, -1, -1, TIFF_BYTE, FIELD_CUSTOM, - 1, 1, "LocalizedCameraModel" }, - { TIFFTAG_CFAPLANECOLOR, -1, -1, TIFF_BYTE, FIELD_CUSTOM, - 0, 1, "CFAPlaneColor" }, - { TIFFTAG_CFALAYOUT, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 0, 0, "CFALayout" }, - { TIFFTAG_LINEARIZATIONTABLE, -1, -1, TIFF_SHORT, FIELD_CUSTOM, - 0, 1, "LinearizationTable" }, - { TIFFTAG_BLACKLEVELREPEATDIM, 2, 2, TIFF_SHORT, FIELD_CUSTOM, - 0, 0, "BlackLevelRepeatDim" }, - { TIFFTAG_BLACKLEVEL, -1, -1, TIFF_LONG, FIELD_CUSTOM, - 0, 1, "BlackLevel" }, - { TIFFTAG_BLACKLEVEL, -1, -1, TIFF_SHORT, FIELD_CUSTOM, - 0, 1, "BlackLevel" }, - { TIFFTAG_BLACKLEVEL, -1, -1, TIFF_RATIONAL, FIELD_CUSTOM, - 0, 1, "BlackLevel" }, - { TIFFTAG_BLACKLEVELDELTAH, -1, -1, TIFF_SRATIONAL, FIELD_CUSTOM, - 0, 1, "BlackLevelDeltaH" }, - { TIFFTAG_BLACKLEVELDELTAV, -1, -1, TIFF_SRATIONAL, FIELD_CUSTOM, - 0, 1, "BlackLevelDeltaV" }, - { TIFFTAG_WHITELEVEL, -2, -2, TIFF_LONG, FIELD_CUSTOM, - 0, 0, "WhiteLevel" }, - { TIFFTAG_WHITELEVEL, -2, -2, TIFF_SHORT, FIELD_CUSTOM, - 0, 0, "WhiteLevel" }, - { TIFFTAG_DEFAULTSCALE, 2, 2, TIFF_RATIONAL, FIELD_CUSTOM, - 0, 0, "DefaultScale" }, - { TIFFTAG_BESTQUALITYSCALE, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 0, 0, "BestQualityScale" }, - { TIFFTAG_DEFAULTCROPORIGIN, 2, 2, TIFF_LONG, FIELD_CUSTOM, - 0, 0, "DefaultCropOrigin" }, - { TIFFTAG_DEFAULTCROPORIGIN, 2, 2, TIFF_SHORT, FIELD_CUSTOM, - 0, 0, "DefaultCropOrigin" }, - { TIFFTAG_DEFAULTCROPORIGIN, 2, 2, TIFF_RATIONAL, FIELD_CUSTOM, - 0, 0, "DefaultCropOrigin" }, - { TIFFTAG_DEFAULTCROPSIZE, 2, 2, TIFF_LONG, FIELD_CUSTOM, - 0, 0, "DefaultCropSize" }, - { TIFFTAG_DEFAULTCROPSIZE, 2, 2, TIFF_SHORT, FIELD_CUSTOM, - 0, 0, "DefaultCropSize" }, - { TIFFTAG_DEFAULTCROPSIZE, 2, 2, TIFF_RATIONAL, FIELD_CUSTOM, - 0, 0, "DefaultCropSize" }, - { TIFFTAG_COLORMATRIX1, -1, -1, TIFF_SRATIONAL, FIELD_CUSTOM, - 0, 1, "ColorMatrix1" }, - { TIFFTAG_COLORMATRIX2, -1, -1, TIFF_SRATIONAL, FIELD_CUSTOM, - 0, 1, "ColorMatrix2" }, - { TIFFTAG_CAMERACALIBRATION1, -1, -1, TIFF_SRATIONAL, FIELD_CUSTOM, - 0, 1, "CameraCalibration1" }, - { TIFFTAG_CAMERACALIBRATION2, -1, -1, TIFF_SRATIONAL, FIELD_CUSTOM, - 0, 1, "CameraCalibration2" }, - { TIFFTAG_REDUCTIONMATRIX1, -1, -1, TIFF_SRATIONAL, FIELD_CUSTOM, - 0, 1, "ReductionMatrix1" }, - { TIFFTAG_REDUCTIONMATRIX2, -1, -1, TIFF_SRATIONAL, FIELD_CUSTOM, - 0, 1, "ReductionMatrix2" }, - { TIFFTAG_ANALOGBALANCE, -1, -1, TIFF_RATIONAL, FIELD_CUSTOM, - 0, 1, "AnalogBalance" }, - { TIFFTAG_ASSHOTNEUTRAL, -1, -1, TIFF_SHORT, FIELD_CUSTOM, - 0, 1, "AsShotNeutral" }, - { TIFFTAG_ASSHOTNEUTRAL, -1, -1, TIFF_RATIONAL, FIELD_CUSTOM, - 0, 1, "AsShotNeutral" }, - { TIFFTAG_ASSHOTWHITEXY, 2, 2, TIFF_RATIONAL, FIELD_CUSTOM, - 0, 0, "AsShotWhiteXY" }, - { TIFFTAG_BASELINEEXPOSURE, 1, 1, TIFF_SRATIONAL, FIELD_CUSTOM, - 0, 0, "BaselineExposure" }, - { TIFFTAG_BASELINENOISE, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 0, 0, "BaselineNoise" }, - { TIFFTAG_BASELINESHARPNESS, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 0, 0, "BaselineSharpness" }, - { TIFFTAG_BAYERGREENSPLIT, 1, 1, TIFF_LONG, FIELD_CUSTOM, - 0, 0, "BayerGreenSplit" }, - { TIFFTAG_LINEARRESPONSELIMIT, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 0, 0, "LinearResponseLimit" }, - { TIFFTAG_CAMERASERIALNUMBER, -1, -1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "CameraSerialNumber" }, - { TIFFTAG_LENSINFO, 4, 4, TIFF_RATIONAL, FIELD_CUSTOM, - 0, 0, "LensInfo" }, - { TIFFTAG_CHROMABLURRADIUS, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 0, 0, "ChromaBlurRadius" }, - { TIFFTAG_ANTIALIASSTRENGTH, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 0, 0, "AntiAliasStrength" }, - { TIFFTAG_SHADOWSCALE, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 0, 0, "ShadowScale" }, - { TIFFTAG_DNGPRIVATEDATA, -1, -1, TIFF_BYTE, FIELD_CUSTOM, - 0, 1, "DNGPrivateData" }, - { TIFFTAG_MAKERNOTESAFETY, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 0, 0, "MakerNoteSafety" }, - { TIFFTAG_CALIBRATIONILLUMINANT1, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 0, 0, "CalibrationIlluminant1" }, - { TIFFTAG_CALIBRATIONILLUMINANT2, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 0, 0, "CalibrationIlluminant2" }, - { TIFFTAG_RAWDATAUNIQUEID, 16, 16, TIFF_BYTE, FIELD_CUSTOM, - 0, 0, "RawDataUniqueID" }, - { TIFFTAG_ORIGINALRAWFILENAME, -1, -1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "OriginalRawFileName" }, - { TIFFTAG_ORIGINALRAWFILENAME, -1, -1, TIFF_BYTE, FIELD_CUSTOM, - 1, 1, "OriginalRawFileName" }, - { TIFFTAG_ORIGINALRAWFILEDATA, -1, -1, TIFF_UNDEFINED, FIELD_CUSTOM, - 0, 1, "OriginalRawFileData" }, - { TIFFTAG_ACTIVEAREA, 4, 4, TIFF_LONG, FIELD_CUSTOM, - 0, 0, "ActiveArea" }, - { TIFFTAG_ACTIVEAREA, 4, 4, TIFF_SHORT, FIELD_CUSTOM, - 0, 0, "ActiveArea" }, - { TIFFTAG_MASKEDAREAS, -1, -1, TIFF_LONG, FIELD_CUSTOM, - 0, 1, "MaskedAreas" }, - { TIFFTAG_ASSHOTICCPROFILE, -1, -1, TIFF_UNDEFINED, FIELD_CUSTOM, - 0, 1, "AsShotICCProfile" }, - { TIFFTAG_ASSHOTPREPROFILEMATRIX, -1, -1, TIFF_SRATIONAL, FIELD_CUSTOM, - 0, 1, "AsShotPreProfileMatrix" }, - { TIFFTAG_CURRENTICCPROFILE, -1, -1, TIFF_UNDEFINED, FIELD_CUSTOM, - 0, 1, "CurrentICCProfile" }, - { TIFFTAG_CURRENTPREPROFILEMATRIX, -1, -1, TIFF_SRATIONAL, FIELD_CUSTOM, - 0, 1, "CurrentPreProfileMatrix" }, -/* end DNG tags */ + +static TIFFFieldArray tiffFieldArray; +static TIFFFieldArray exifFieldArray; + +static TIFFField +tiffFields[] = { + { TIFFTAG_SUBFILETYPE, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_SUBFILETYPE, 1, 0, "SubfileType", NULL }, + { TIFFTAG_OSUBFILETYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_SUBFILETYPE, 1, 0, "OldSubfileType", NULL }, + { TIFFTAG_IMAGEWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_IMAGEDIMENSIONS, 0, 0, "ImageWidth", NULL }, + { TIFFTAG_IMAGELENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_IMAGEDIMENSIONS, 1, 0, "ImageLength", NULL }, + { TIFFTAG_BITSPERSAMPLE, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_BITSPERSAMPLE, 0, 0, "BitsPerSample", NULL }, + { TIFFTAG_COMPRESSION, -1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_COMPRESSION, 0, 0, "Compression", NULL }, + { TIFFTAG_PHOTOMETRIC, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_PHOTOMETRIC, 0, 0, "PhotometricInterpretation", NULL }, + { TIFFTAG_THRESHHOLDING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_THRESHHOLDING, 1, 0, "Threshholding", NULL }, + { TIFFTAG_CELLWIDTH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "CellWidth", NULL }, + { TIFFTAG_CELLLENGTH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "CellLength", NULL }, + { TIFFTAG_FILLORDER, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_FILLORDER, 0, 0, "FillOrder", NULL }, + { TIFFTAG_DOCUMENTNAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DocumentName", NULL }, + { TIFFTAG_IMAGEDESCRIPTION, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageDescription", NULL }, + { TIFFTAG_MAKE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Make", NULL }, + { TIFFTAG_MODEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Model", NULL }, + { TIFFTAG_STRIPOFFSETS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_STRIPOFFSETS, 0, 0, "StripOffsets", NULL }, + { TIFFTAG_ORIENTATION, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_ORIENTATION, 0, 0, "Orientation", NULL }, + { TIFFTAG_SAMPLESPERPIXEL, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_SAMPLESPERPIXEL, 0, 0, "SamplesPerPixel", NULL }, + { TIFFTAG_ROWSPERSTRIP, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_ROWSPERSTRIP, 0, 0, "RowsPerStrip", NULL }, + { TIFFTAG_STRIPBYTECOUNTS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_STRIPBYTECOUNTS, 0, 0, "StripByteCounts", NULL }, + { TIFFTAG_MINSAMPLEVALUE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_MINSAMPLEVALUE, 1, 0, "MinSampleValue", NULL }, + { TIFFTAG_MAXSAMPLEVALUE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_MAXSAMPLEVALUE, 1, 0, "MaxSampleValue", NULL }, + { TIFFTAG_XRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_RESOLUTION, 1, 0, "XResolution", NULL }, + { TIFFTAG_YRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_RESOLUTION, 1, 0, "YResolution", NULL }, + { TIFFTAG_PLANARCONFIG, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_PLANARCONFIG, 0, 0, "PlanarConfiguration", NULL }, + { TIFFTAG_PAGENAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PageName", NULL }, + { TIFFTAG_XPOSITION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_POSITION, 1, 0, "XPosition", NULL }, + { TIFFTAG_YPOSITION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_POSITION, 1, 0, "YPosition", NULL }, + { TIFFTAG_FREEOFFSETS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 0, 0, "FreeOffsets", NULL }, + { TIFFTAG_FREEBYTECOUNTS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 0, 0, "FreeByteCounts", NULL }, + { TIFFTAG_GRAYRESPONSEUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "GrayResponseUnit", NULL }, + { TIFFTAG_GRAYRESPONSECURVE, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "GrayResponseCurve", NULL }, + { TIFFTAG_RESOLUTIONUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_RESOLUTIONUNIT, 1, 0, "ResolutionUnit", NULL }, + { TIFFTAG_PAGENUMBER, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, TIFF_SETGET_UNDEFINED, FIELD_PAGENUMBER, 1, 0, "PageNumber", NULL }, + { TIFFTAG_COLORRESPONSEUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_IGNORE, 1, 0, "ColorResponseUnit", NULL }, + { TIFFTAG_TRANSFERFUNCTION, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_OTHER, TIFF_SETGET_UNDEFINED, FIELD_TRANSFERFUNCTION, 1, 0, "TransferFunction", NULL }, + { TIFFTAG_SOFTWARE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Software", NULL }, + { TIFFTAG_DATETIME, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DateTime", NULL }, + { TIFFTAG_ARTIST, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Artist", NULL }, + { TIFFTAG_HOSTCOMPUTER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "HostComputer", NULL }, + { TIFFTAG_WHITEPOINT, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "WhitePoint", NULL }, + { TIFFTAG_PRIMARYCHROMATICITIES, 6, 6, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PrimaryChromaticities", NULL }, + { TIFFTAG_COLORMAP, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_OTHER, TIFF_SETGET_UNDEFINED, FIELD_COLORMAP, 1, 0, "ColorMap", NULL }, + { TIFFTAG_HALFTONEHINTS, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, TIFF_SETGET_UNDEFINED, FIELD_HALFTONEHINTS, 1, 0, "HalftoneHints", NULL }, + { TIFFTAG_TILEWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_TILEDIMENSIONS, 0, 0, "TileWidth", NULL }, + { TIFFTAG_TILELENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_TILEDIMENSIONS, 0, 0, "TileLength", NULL }, + { TIFFTAG_TILEOFFSETS, -1, 1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_STRIPOFFSETS, 0, 0, "TileOffsets", NULL }, + { TIFFTAG_TILEBYTECOUNTS, -1, 1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_STRIPBYTECOUNTS, 0, 0, "TileByteCounts", NULL }, + { TIFFTAG_SUBIFD, -1, -1, TIFF_IFD8, 0, TIFF_SETGET_C16_IFD8, TIFF_SETGET_UNDEFINED, FIELD_SUBIFD, 1, 1, "SubIFD", &tiffFieldArray }, + { TIFFTAG_INKSET, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "InkSet", NULL }, + { TIFFTAG_INKNAMES, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_C16_ASCII, TIFF_SETGET_UNDEFINED, FIELD_INKNAMES, 1, 1, "InkNames", NULL }, + { TIFFTAG_NUMBEROFINKS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "NumberOfInks", NULL }, + { TIFFTAG_DOTRANGE, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "DotRange", NULL }, + { TIFFTAG_TARGETPRINTER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TargetPrinter", NULL }, + { TIFFTAG_EXTRASAMPLES, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_EXTRASAMPLES, 0, 1, "ExtraSamples", NULL }, + { TIFFTAG_SAMPLEFORMAT, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_SAMPLEFORMAT, 0, 0, "SampleFormat", NULL }, + { TIFFTAG_SMINSAMPLEVALUE, -2, -1, TIFF_ANY, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_SMINSAMPLEVALUE, 1, 0, "SMinSampleValue", NULL }, + { TIFFTAG_SMAXSAMPLEVALUE, -2, -1, TIFF_ANY, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_SMAXSAMPLEVALUE, 1, 0, "SMaxSampleValue", NULL }, + { TIFFTAG_CLIPPATH, -1, -3, TIFF_BYTE, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "ClipPath", NULL }, + { TIFFTAG_XCLIPPATHUNITS, 1, 1, TIFF_SLONG, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "XClipPathUnits", NULL }, + { TIFFTAG_XCLIPPATHUNITS, 1, 1, TIFF_SBYTE, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "XClipPathUnits", NULL }, + { TIFFTAG_YCLIPPATHUNITS, 1, 1, TIFF_SLONG, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "YClipPathUnits", NULL }, + { TIFFTAG_YCBCRCOEFFICIENTS, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "YCbCrCoefficients", NULL }, + { TIFFTAG_YCBCRSUBSAMPLING, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR, TIFF_SETGET_UNDEFINED, FIELD_YCBCRSUBSAMPLING, 0, 0, "YCbCrSubsampling", NULL }, + { TIFFTAG_YCBCRPOSITIONING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_YCBCRPOSITIONING, 0, 0, "YCbCrPositioning", NULL }, + { TIFFTAG_REFERENCEBLACKWHITE, 6, 6, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_REFBLACKWHITE, 1, 0, "ReferenceBlackWhite", NULL }, + { TIFFTAG_XMLPACKET, -3, -3, TIFF_BYTE, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "XMLPacket", NULL }, + /* begin SGI tags */ + { TIFFTAG_MATTEING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_EXTRASAMPLES, 0, 0, "Matteing", NULL }, + { TIFFTAG_DATATYPE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_SAMPLEFORMAT, 0, 0, "DataType", NULL }, + { TIFFTAG_IMAGEDEPTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_IMAGEDEPTH, 0, 0, "ImageDepth", NULL }, + { TIFFTAG_TILEDEPTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_TILEDEPTH, 0, 0, "TileDepth", NULL }, + /* end SGI tags */ + /* begin Pixar tags */ + { TIFFTAG_PIXAR_IMAGEFULLWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageFullWidth", NULL }, + { TIFFTAG_PIXAR_IMAGEFULLLENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageFullLength", NULL }, + { TIFFTAG_PIXAR_TEXTUREFORMAT, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TextureFormat", NULL }, + { TIFFTAG_PIXAR_WRAPMODES, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "TextureWrapModes", NULL }, + { TIFFTAG_PIXAR_FOVCOT, 1, 1, TIFF_FLOAT, 0, TIFF_SETGET_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FieldOfViewCotangent", NULL }, + { TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN, 16, 16, TIFF_FLOAT, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MatrixWorldToScreen", NULL }, + { TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA, 16, 16, TIFF_FLOAT, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MatrixWorldToCamera", NULL }, + { TIFFTAG_COPYRIGHT, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Copyright", NULL }, + /* end Pixar tags */ + { TIFFTAG_RICHTIFFIPTC, -3, -3, TIFF_LONG, 0, TIFF_SETGET_C32_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "RichTIFFIPTC", NULL }, + { TIFFTAG_PHOTOSHOP, -3, -3, TIFF_BYTE, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "Photoshop", NULL }, + { TIFFTAG_EXIFIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "EXIFIFDOffset", &exifFieldArray }, + { TIFFTAG_ICCPROFILE, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "ICC Profile", NULL }, + { TIFFTAG_GPSIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "GPSIFDOffset", NULL }, + { TIFFTAG_FAXRECVPARAMS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UINT32, FIELD_CUSTOM, TRUE, FALSE, "FaxRecvParams", NULL }, + { TIFFTAG_FAXSUBADDRESS, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_ASCII, FIELD_CUSTOM, TRUE, FALSE, "FaxSubAddress", NULL }, + { TIFFTAG_FAXRECVTIME, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UINT32, FIELD_CUSTOM, TRUE, FALSE, "FaxRecvTime", NULL }, + { TIFFTAG_FAXDCS, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_ASCII, FIELD_CUSTOM, TRUE, FALSE, "FaxDcs", NULL }, + { TIFFTAG_STONITS, 1, 1, TIFF_DOUBLE, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "StoNits", NULL }, + { TIFFTAG_INTEROPERABILITYIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "InteroperabilityIFDOffset", NULL }, + /* begin DNG tags */ + { TIFFTAG_DNGVERSION, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "DNGVersion", NULL }, + { TIFFTAG_DNGBACKWARDVERSION, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "DNGBackwardVersion", NULL }, + { TIFFTAG_UNIQUECAMERAMODEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "UniqueCameraModel", NULL }, + { TIFFTAG_LOCALIZEDCAMERAMODEL, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "LocalizedCameraModel", NULL }, + { TIFFTAG_CFAPLANECOLOR, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "CFAPlaneColor", NULL }, + { TIFFTAG_CFALAYOUT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "CFALayout", NULL }, + { TIFFTAG_LINEARIZATIONTABLE, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "LinearizationTable", NULL }, + { TIFFTAG_BLACKLEVELREPEATDIM, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "BlackLevelRepeatDim", NULL }, + { TIFFTAG_BLACKLEVEL, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "BlackLevel", NULL }, + { TIFFTAG_BLACKLEVELDELTAH, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "BlackLevelDeltaH", NULL }, + { TIFFTAG_BLACKLEVELDELTAV, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "BlackLevelDeltaV", NULL }, + { TIFFTAG_WHITELEVEL, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "WhiteLevel", NULL }, + { TIFFTAG_DEFAULTSCALE, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "DefaultScale", NULL }, + { TIFFTAG_BESTQUALITYSCALE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "BestQualityScale", NULL }, + { TIFFTAG_DEFAULTCROPORIGIN, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "DefaultCropOrigin", NULL }, + { TIFFTAG_DEFAULTCROPSIZE, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "DefaultCropSize", NULL }, + { TIFFTAG_COLORMATRIX1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "ColorMatrix1", NULL }, + { TIFFTAG_COLORMATRIX2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "ColorMatrix2", NULL }, + { TIFFTAG_CAMERACALIBRATION1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "CameraCalibration1", NULL }, + { TIFFTAG_CAMERACALIBRATION2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "CameraCalibration2", NULL }, + { TIFFTAG_REDUCTIONMATRIX1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "ReductionMatrix1", NULL }, + { TIFFTAG_REDUCTIONMATRIX2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "ReductionMatrix2", NULL }, + { TIFFTAG_ANALOGBALANCE, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "AnalogBalance", NULL }, + { TIFFTAG_ASSHOTNEUTRAL, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "AsShotNeutral", NULL }, + { TIFFTAG_ASSHOTWHITEXY, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "AsShotWhiteXY", NULL }, + { TIFFTAG_BASELINEEXPOSURE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "BaselineExposure", NULL }, + { TIFFTAG_BASELINENOISE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "BaselineNoise", NULL }, + { TIFFTAG_BASELINESHARPNESS, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "BaselineSharpness", NULL }, + { TIFFTAG_BAYERGREENSPLIT, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "BayerGreenSplit", NULL }, + { TIFFTAG_LINEARRESPONSELIMIT, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "LinearResponseLimit", NULL }, + { TIFFTAG_CAMERASERIALNUMBER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CameraSerialNumber", NULL }, + { TIFFTAG_LENSINFO, 4, 4, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "LensInfo", NULL }, + { TIFFTAG_CHROMABLURRADIUS, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "ChromaBlurRadius", NULL }, + { TIFFTAG_ANTIALIASSTRENGTH, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "AntiAliasStrength", NULL }, + { TIFFTAG_SHADOWSCALE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "ShadowScale", NULL }, + { TIFFTAG_DNGPRIVATEDATA, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "DNGPrivateData", NULL }, + { TIFFTAG_MAKERNOTESAFETY, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "MakerNoteSafety", NULL }, + { TIFFTAG_CALIBRATIONILLUMINANT1, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "CalibrationIlluminant1", NULL }, + { TIFFTAG_CALIBRATIONILLUMINANT2, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "CalibrationIlluminant2", NULL }, + { TIFFTAG_RAWDATAUNIQUEID, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "RawDataUniqueID", NULL }, + { TIFFTAG_ORIGINALRAWFILENAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "OriginalRawFileName", NULL }, + { TIFFTAG_ORIGINALRAWFILEDATA, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "OriginalRawFileData", NULL }, + { TIFFTAG_ACTIVEAREA, 4, 4, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "ActiveArea", NULL }, + { TIFFTAG_MASKEDAREAS, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "MaskedAreas", NULL }, + { TIFFTAG_ASSHOTICCPROFILE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "AsShotICCProfile", NULL }, + { TIFFTAG_ASSHOTPREPROFILEMATRIX, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "AsShotPreProfileMatrix", NULL }, + { TIFFTAG_CURRENTICCPROFILE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "CurrentICCProfile", NULL }, + { TIFFTAG_CURRENTPREPROFILEMATRIX, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "CurrentPreProfileMatrix", NULL }, + { TIFFTAG_PERSAMPLE, 0, 0, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "PerSample", NULL}, + /* end DNG tags */ + /* begin TIFF/FX tags */ + { TIFFTAG_INDEXED, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "Indexed" }, + { TIFFTAG_GLOBALPARAMETERSIFD, 1, 1, TIFF_IFD, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "GlobalParametersIFD", NULL }, + { TIFFTAG_PROFILETYPE, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "ProfileType", NULL }, + { TIFFTAG_FAXPROFILE, 1, 1, TIFF_BYTE, 0, TIFF_SETGET_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "FaxProfile", NULL }, + { TIFFTAG_CODINGMETHODS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "CodingMethods", NULL }, + { TIFFTAG_VERSIONYEAR, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "VersionYear", NULL }, + { TIFFTAG_MODENUMBER, 1, 1, TIFF_BYTE, 0, TIFF_SETGET_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "ModeNumber", NULL }, + { TIFFTAG_DECODE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "Decode", NULL }, + { TIFFTAG_IMAGEBASECOLOR, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "ImageBaseColor", NULL }, + { TIFFTAG_T82OPTIONS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "T82Options", NULL }, + { TIFFTAG_STRIPROWCOUNTS, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 1, "StripRowCounts", NULL }, + { TIFFTAG_IMAGELAYER, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "ImageLayer", NULL }, + /* end DNG tags */ + /* begin pseudo tags */ }; -static const TIFFFieldInfo -exifFieldInfo[] = { - { EXIFTAG_EXPOSURETIME, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 1, 0, "ExposureTime" }, - { EXIFTAG_FNUMBER, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 1, 0, "FNumber" }, - { EXIFTAG_EXPOSUREPROGRAM, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "ExposureProgram" }, - { EXIFTAG_SPECTRALSENSITIVITY, -1, -1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "SpectralSensitivity" }, - { EXIFTAG_ISOSPEEDRATINGS, -1, -1, TIFF_SHORT, FIELD_CUSTOM, - 1, 1, "ISOSpeedRatings" }, - { EXIFTAG_OECF, -1, -1, TIFF_UNDEFINED, FIELD_CUSTOM, - 1, 1, "OptoelectricConversionFactor" }, - { EXIFTAG_EXIFVERSION, 4, 4, TIFF_UNDEFINED, FIELD_CUSTOM, - 1, 0, "ExifVersion" }, - { EXIFTAG_DATETIMEORIGINAL, 20, 20, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "DateTimeOriginal" }, - { EXIFTAG_DATETIMEDIGITIZED, 20, 20, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "DateTimeDigitized" }, - { EXIFTAG_COMPONENTSCONFIGURATION, 4, 4, TIFF_UNDEFINED, FIELD_CUSTOM, - 1, 0, "ComponentsConfiguration" }, - { EXIFTAG_COMPRESSEDBITSPERPIXEL, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 1, 0, "CompressedBitsPerPixel" }, - { EXIFTAG_SHUTTERSPEEDVALUE, 1, 1, TIFF_SRATIONAL, FIELD_CUSTOM, - 1, 0, "ShutterSpeedValue" }, - { EXIFTAG_APERTUREVALUE, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 1, 0, "ApertureValue" }, - { EXIFTAG_BRIGHTNESSVALUE, 1, 1, TIFF_SRATIONAL, FIELD_CUSTOM, - 1, 0, "BrightnessValue" }, - { EXIFTAG_EXPOSUREBIASVALUE, 1, 1, TIFF_SRATIONAL, FIELD_CUSTOM, - 1, 0, "ExposureBiasValue" }, - { EXIFTAG_MAXAPERTUREVALUE, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 1, 0, "MaxApertureValue" }, - { EXIFTAG_SUBJECTDISTANCE, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 1, 0, "SubjectDistance" }, - { EXIFTAG_METERINGMODE, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "MeteringMode" }, - { EXIFTAG_LIGHTSOURCE, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "LightSource" }, - { EXIFTAG_FLASH, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "Flash" }, - { EXIFTAG_FOCALLENGTH, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 1, 0, "FocalLength" }, - { EXIFTAG_SUBJECTAREA, -1, -1, TIFF_SHORT, FIELD_CUSTOM, - 1, 1, "SubjectArea" }, - { EXIFTAG_MAKERNOTE, -1, -1, TIFF_UNDEFINED, FIELD_CUSTOM, - 1, 1, "MakerNote" }, - { EXIFTAG_USERCOMMENT, -1, -1, TIFF_UNDEFINED, FIELD_CUSTOM, - 1, 1, "UserComment" }, - { EXIFTAG_SUBSECTIME, -1, -1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "SubSecTime" }, - { EXIFTAG_SUBSECTIMEORIGINAL, -1, -1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "SubSecTimeOriginal" }, - { EXIFTAG_SUBSECTIMEDIGITIZED,-1, -1, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "SubSecTimeDigitized" }, - { EXIFTAG_FLASHPIXVERSION, 4, 4, TIFF_UNDEFINED, FIELD_CUSTOM, - 1, 0, "FlashpixVersion" }, - { EXIFTAG_COLORSPACE, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "ColorSpace" }, - { EXIFTAG_PIXELXDIMENSION, 1, 1, TIFF_LONG, FIELD_CUSTOM, - 1, 0, "PixelXDimension" }, - { EXIFTAG_PIXELXDIMENSION, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "PixelXDimension" }, - { EXIFTAG_PIXELYDIMENSION, 1, 1, TIFF_LONG, FIELD_CUSTOM, - 1, 0, "PixelYDimension" }, - { EXIFTAG_PIXELYDIMENSION, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "PixelYDimension" }, - { EXIFTAG_RELATEDSOUNDFILE, 13, 13, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "RelatedSoundFile" }, - { EXIFTAG_FLASHENERGY, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 1, 0, "FlashEnergy" }, - { EXIFTAG_SPATIALFREQUENCYRESPONSE, -1, -1, TIFF_UNDEFINED, FIELD_CUSTOM, - 1, 1, "SpatialFrequencyResponse" }, - { EXIFTAG_FOCALPLANEXRESOLUTION, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 1, 0, "FocalPlaneXResolution" }, - { EXIFTAG_FOCALPLANEYRESOLUTION, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 1, 0, "FocalPlaneYResolution" }, - { EXIFTAG_FOCALPLANERESOLUTIONUNIT, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "FocalPlaneResolutionUnit" }, - { EXIFTAG_SUBJECTLOCATION, 2, 2, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "SubjectLocation" }, - { EXIFTAG_EXPOSUREINDEX, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 1, 0, "ExposureIndex" }, - { EXIFTAG_SENSINGMETHOD, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "SensingMethod" }, - { EXIFTAG_FILESOURCE, 1, 1, TIFF_UNDEFINED, FIELD_CUSTOM, - 1, 0, "FileSource" }, - { EXIFTAG_SCENETYPE, 1, 1, TIFF_UNDEFINED, FIELD_CUSTOM, - 1, 0, "SceneType" }, - { EXIFTAG_CFAPATTERN, -1, -1, TIFF_UNDEFINED, FIELD_CUSTOM, - 1, 1, "CFAPattern" }, - { EXIFTAG_CUSTOMRENDERED, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "CustomRendered" }, - { EXIFTAG_EXPOSUREMODE, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "ExposureMode" }, - { EXIFTAG_WHITEBALANCE, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "WhiteBalance" }, - { EXIFTAG_DIGITALZOOMRATIO, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 1, 0, "DigitalZoomRatio" }, - { EXIFTAG_FOCALLENGTHIN35MMFILM, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "FocalLengthIn35mmFilm" }, - { EXIFTAG_SCENECAPTURETYPE, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "SceneCaptureType" }, - { EXIFTAG_GAINCONTROL, 1, 1, TIFF_RATIONAL, FIELD_CUSTOM, - 1, 0, "GainControl" }, - { EXIFTAG_CONTRAST, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "Contrast" }, - { EXIFTAG_SATURATION, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "Saturation" }, - { EXIFTAG_SHARPNESS, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "Sharpness" }, - { EXIFTAG_DEVICESETTINGDESCRIPTION, -1, -1, TIFF_UNDEFINED, FIELD_CUSTOM, - 1, 1, "DeviceSettingDescription" }, - { EXIFTAG_SUBJECTDISTANCERANGE, 1, 1, TIFF_SHORT, FIELD_CUSTOM, - 1, 0, "SubjectDistanceRange" }, - { EXIFTAG_IMAGEUNIQUEID, 33, 33, TIFF_ASCII, FIELD_CUSTOM, - 1, 0, "ImageUniqueID" } +static TIFFField +exifFields[] = { + { EXIFTAG_EXPOSURETIME, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureTime", NULL }, + { EXIFTAG_FNUMBER, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FNumber", NULL }, + { EXIFTAG_EXPOSUREPROGRAM, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureProgram", NULL }, + { EXIFTAG_SPECTRALSENSITIVITY, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SpectralSensitivity", NULL }, + { EXIFTAG_ISOSPEEDRATINGS, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "ISOSpeedRatings", NULL }, + { EXIFTAG_OECF, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "OptoelectricConversionFactor", NULL }, + { EXIFTAG_EXIFVERSION, 4, 4, TIFF_UNDEFINED, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExifVersion", NULL }, + { EXIFTAG_DATETIMEORIGINAL, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DateTimeOriginal", NULL }, + { EXIFTAG_DATETIMEDIGITIZED, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DateTimeDigitized", NULL }, + { EXIFTAG_COMPONENTSCONFIGURATION, 4, 4, TIFF_UNDEFINED, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ComponentsConfiguration", NULL }, + { EXIFTAG_COMPRESSEDBITSPERPIXEL, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CompressedBitsPerPixel", NULL }, + { EXIFTAG_SHUTTERSPEEDVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ShutterSpeedValue", NULL }, + { EXIFTAG_APERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ApertureValue", NULL }, + { EXIFTAG_BRIGHTNESSVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "BrightnessValue", NULL }, + { EXIFTAG_EXPOSUREBIASVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureBiasValue", NULL }, + { EXIFTAG_MAXAPERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MaxApertureValue", NULL }, + { EXIFTAG_SUBJECTDISTANCE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubjectDistance", NULL }, + { EXIFTAG_METERINGMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "MeteringMode", NULL }, + { EXIFTAG_LIGHTSOURCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "LightSource", NULL }, + { EXIFTAG_FLASH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Flash", NULL }, + { EXIFTAG_FOCALLENGTH, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalLength", NULL }, + { EXIFTAG_SUBJECTAREA, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "SubjectArea", NULL }, + { EXIFTAG_MAKERNOTE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "MakerNote", NULL }, + { EXIFTAG_USERCOMMENT, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "UserComment", NULL }, + { EXIFTAG_SUBSECTIME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubSecTime", NULL }, + { EXIFTAG_SUBSECTIMEORIGINAL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubSecTimeOriginal", NULL }, + { EXIFTAG_SUBSECTIMEDIGITIZED, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubSecTimeDigitized", NULL }, + { EXIFTAG_FLASHPIXVERSION, 4, 4, TIFF_UNDEFINED, 0, TIFF_SETGET_C0_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FlashpixVersion", NULL }, + { EXIFTAG_COLORSPACE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ColorSpace", NULL }, + { EXIFTAG_PIXELXDIMENSION, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PixelXDimension", NULL }, + { EXIFTAG_PIXELYDIMENSION, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "PixelYDimension", NULL }, + { EXIFTAG_RELATEDSOUNDFILE, 13, 13, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "RelatedSoundFile", NULL }, + { EXIFTAG_FLASHENERGY, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FlashEnergy", NULL }, + { EXIFTAG_SPATIALFREQUENCYRESPONSE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "SpatialFrequencyResponse", NULL }, + { EXIFTAG_FOCALPLANEXRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalPlaneXResolution", NULL }, + { EXIFTAG_FOCALPLANEYRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalPlaneYResolution", NULL }, + { EXIFTAG_FOCALPLANERESOLUTIONUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalPlaneResolutionUnit", NULL }, + { EXIFTAG_SUBJECTLOCATION, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubjectLocation", NULL }, + { EXIFTAG_EXPOSUREINDEX, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureIndex", NULL }, + { EXIFTAG_SENSINGMETHOD, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SensingMethod", NULL }, + { EXIFTAG_FILESOURCE, 1, 1, TIFF_UNDEFINED, 0, TIFF_SETGET_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FileSource", NULL }, + { EXIFTAG_SCENETYPE, 1, 1, TIFF_UNDEFINED, 0, TIFF_SETGET_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SceneType", NULL }, + { EXIFTAG_CFAPATTERN, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "CFAPattern", NULL }, + { EXIFTAG_CUSTOMRENDERED, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "CustomRendered", NULL }, + { EXIFTAG_EXPOSUREMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ExposureMode", NULL }, + { EXIFTAG_WHITEBALANCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "WhiteBalance", NULL }, + { EXIFTAG_DIGITALZOOMRATIO, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "DigitalZoomRatio", NULL }, + { EXIFTAG_FOCALLENGTHIN35MMFILM, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "FocalLengthIn35mmFilm", NULL }, + { EXIFTAG_SCENECAPTURETYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SceneCaptureType", NULL }, + { EXIFTAG_GAINCONTROL, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "GainControl", NULL }, + { EXIFTAG_CONTRAST, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Contrast", NULL }, + { EXIFTAG_SATURATION, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Saturation", NULL }, + { EXIFTAG_SHARPNESS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "Sharpness", NULL }, + { EXIFTAG_DEVICESETTINGDESCRIPTION, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 1, "DeviceSettingDescription", NULL }, + { EXIFTAG_SUBJECTDISTANCERANGE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "SubjectDistanceRange", NULL }, + { EXIFTAG_IMAGEUNIQUEID, 33, 33, TIFF_ASCII, 0, TIFF_SETGET_ASCII, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 1, 0, "ImageUniqueID", NULL } }; -const TIFFFieldInfo * -_TIFFGetFieldInfo(size_t *size) +static TIFFFieldArray +tiffFieldArray = { tfiatImage, 0, TIFFArrayCount(tiffFields), tiffFields }; +static TIFFFieldArray +exifFieldArray = { tfiatExif, 0, TIFFArrayCount(exifFields), exifFields }; + +/* + * We have our own local lfind() equivelent to avoid subtle differences + * in types passed to lfind() on different systems. + */ + +static void * +td_lfind(const void *key, const void *base, size_t *nmemb, size_t size, + int(*compar)(const void *, const void *)) { - *size = TIFFArrayCount(tiffFieldInfo); - return tiffFieldInfo; + char *element, *end; + + end = (char *)base + *nmemb * size; + for (element = (char *)base; element < end; element += size) + if (!compar(key, element)) /* key found */ + return element; + + return NULL; } -const TIFFFieldInfo * -_TIFFGetExifFieldInfo(size_t *size) +const TIFFFieldArray* +_TIFFGetFields(void) { - *size = TIFFArrayCount(exifFieldInfo); - return exifFieldInfo; + return(&tiffFieldArray); +} + +const TIFFFieldArray* +_TIFFGetExifFields(void) +{ + return(&exifFieldArray); } void -_TIFFSetupFieldInfo(TIFF* tif, const TIFFFieldInfo info[], size_t n) +_TIFFSetupFields(TIFF* tif, const TIFFFieldArray* fieldarray) { - if (tif->tif_fieldinfo) { - size_t i; + if (tif->tif_fields && tif->tif_nfields > 0) { + uint32 i; - for (i = 0; i < tif->tif_nfields; i++) - { - TIFFFieldInfo *fld = tif->tif_fieldinfo[i]; - if (fld->field_bit == FIELD_CUSTOM && + for (i = 0; i < tif->tif_nfields; i++) { + TIFFField *fld = tif->tif_fields[i]; + if (fld->field_bit == FIELD_CUSTOM && strncmp("Tag ", fld->field_name, 4) == 0) { _TIFFfree(fld->field_name); _TIFFfree(fld); } - } - - _TIFFfree(tif->tif_fieldinfo); + } + + _TIFFfree(tif->tif_fields); + tif->tif_fields = NULL; tif->tif_nfields = 0; } - if (!_TIFFMergeFieldInfo(tif, info, n)) - { - TIFFErrorExt(tif->tif_clientdata, "_TIFFSetupFieldInfo", + if (!_TIFFMergeFields(tif, fieldarray->fields, fieldarray->count)) { + TIFFErrorExt(tif->tif_clientdata, "_TIFFSetupFields", "Setting up field info failed"); } } @@ -555,8 +333,8 @@ _TIFFSetupFieldInfo(TIFF* tif, const TIFFFieldInfo info[], size_t n) static int tagCompare(const void* a, const void* b) { - const TIFFFieldInfo* ta = *(const TIFFFieldInfo**) a; - const TIFFFieldInfo* tb = *(const TIFFFieldInfo**) b; + const TIFFField* ta = *(const TIFFField**) a; + const TIFFField* tb = *(const TIFFField**) b; /* NB: be careful of return values for 16-bit platforms */ if (ta->field_tag != tb->field_tag) return (int)ta->field_tag - (int)tb->field_tag; @@ -568,8 +346,8 @@ tagCompare(const void* a, const void* b) static int tagNameCompare(const void* a, const void* b) { - const TIFFFieldInfo* ta = *(const TIFFFieldInfo**) a; - const TIFFFieldInfo* tb = *(const TIFFFieldInfo**) b; + const TIFFField* ta = *(const TIFFField**) a; + const TIFFField* tb = *(const TIFFField**) b; int ret = strcmp(ta->field_name, tb->field_name); if (ret) @@ -579,57 +357,47 @@ tagNameCompare(const void* a, const void* b) 0 : ((int)tb->field_type - (int)ta->field_type); } -void -TIFFMergeFieldInfo(TIFF* tif, const TIFFFieldInfo info[], int n) -{ - if (_TIFFMergeFieldInfo(tif, info, n) < 0) - { - TIFFErrorExt(tif->tif_clientdata, "TIFFMergeFieldInfo", - "Merging block of %d fields failed", n); - } -} - int -_TIFFMergeFieldInfo(TIFF* tif, const TIFFFieldInfo info[], int n) +_TIFFMergeFields(TIFF* tif, const TIFFField info[], uint32 n) { - static const char module[] = "_TIFFMergeFieldInfo"; - static const char reason[] = "for field info array"; - TIFFFieldInfo** tp; - int i; + static const char module[] = "_TIFFMergeFields"; + static const char reason[] = "for fields array"; + /* TIFFField** tp; */ + uint32 i; tif->tif_foundfield = NULL; - if (tif->tif_nfields > 0) { - tif->tif_fieldinfo = (TIFFFieldInfo**) - _TIFFCheckRealloc(tif, tif->tif_fieldinfo, + if (tif->tif_fields && tif->tif_nfields > 0) { + tif->tif_fields = (TIFFField**) + _TIFFCheckRealloc(tif, tif->tif_fields, (tif->tif_nfields + n), - sizeof (TIFFFieldInfo*), reason); + sizeof(TIFFField *), reason); } else { - tif->tif_fieldinfo = (TIFFFieldInfo**) - _TIFFCheckMalloc(tif, n, sizeof (TIFFFieldInfo*), + tif->tif_fields = (TIFFField **) + _TIFFCheckMalloc(tif, n, sizeof(TIFFField *), reason); } - if (!tif->tif_fieldinfo) { + if (!tif->tif_fields) { TIFFErrorExt(tif->tif_clientdata, module, - "Failed to allocate field info array"); + "Failed to allocate fields array"); return 0; } - tp = tif->tif_fieldinfo + tif->tif_nfields; - for (i = 0; i < n; i++) - { - const TIFFFieldInfo *fip = - _TIFFFindFieldInfo(tif, info[i].field_tag, info[i].field_type); - /* only add definitions that aren't already present */ - if (!fip) { - *tp++ = (TIFFFieldInfo*) (info + i); - tif->tif_nfields++; - } - } + /* tp = tif->tif_fields + tif->tif_nfields; */ + for (i = 0; i < n; i++) { + const TIFFField *fip = + TIFFFindField(tif, info[i].field_tag, TIFF_ANY); + + /* only add definitions that aren't already present */ + if (!fip) { + tif->tif_fields[tif->tif_nfields] = (TIFFField *) (info+i); + tif->tif_nfields++; + } + } /* Sort the field info by tag number */ - qsort(tif->tif_fieldinfo, tif->tif_nfields, - sizeof (TIFFFieldInfo*), tagCompare); + qsort(tif->tif_fields, tif->tif_nfields, + sizeof(TIFFField *), tagCompare); return n; } @@ -637,11 +405,11 @@ _TIFFMergeFieldInfo(TIFF* tif, const TIFFFieldInfo info[], int n) void _TIFFPrintFieldInfo(TIFF* tif, FILE* fd) { - size_t i; + uint32 i; fprintf(fd, "%s: \n", tif->tif_name); for (i = 0; i < tif->tif_nfields; i++) { - const TIFFFieldInfo* fip = tif->tif_fieldinfo[i]; + const TIFFField* fip = tif->tif_fields[i]; fprintf(fd, "field[%2d] %5lu, %2d, %2d, %d, %2d, %5s, %5s, %s\n" , (int)i , (unsigned long) fip->field_tag @@ -663,26 +431,29 @@ TIFFDataWidth(TIFFDataType type) { switch(type) { - case 0: /* nothing */ - case 1: /* TIFF_BYTE */ - case 2: /* TIFF_ASCII */ - case 6: /* TIFF_SBYTE */ - case 7: /* TIFF_UNDEFINED */ - return 1; - case 3: /* TIFF_SHORT */ - case 8: /* TIFF_SSHORT */ - return 2; - case 4: /* TIFF_LONG */ - case 9: /* TIFF_SLONG */ - case 11: /* TIFF_FLOAT */ - case 13: /* TIFF_IFD */ - return 4; - case 5: /* TIFF_RATIONAL */ - case 10: /* TIFF_SRATIONAL */ - case 12: /* TIFF_DOUBLE */ - return 8; - default: - return 0; /* will return 0 for unknown types */ + case 0: /* nothing */ + case TIFF_BYTE: + case TIFF_ASCII: + case TIFF_SBYTE: + case TIFF_UNDEFINED: + return 1; + case TIFF_SHORT: + case TIFF_SSHORT: + return 2; + case TIFF_LONG: + case TIFF_SLONG: + case TIFF_FLOAT: + case TIFF_IFD: + return 4; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + case TIFF_DOUBLE: + case TIFF_LONG8: + case TIFF_SLONG8: + case TIFF_IFD8: + return 8; + default: + return 0; /* will return 0 for unknown types */ } } @@ -696,7 +467,8 @@ TIFFDataWidth(TIFFDataType type) int _TIFFDataSize(TIFFDataType type) { - switch (type) { + switch (type) + { case TIFF_BYTE: case TIFF_SBYTE: case TIFF_ASCII: @@ -713,153 +485,218 @@ _TIFFDataSize(TIFFDataType type) case TIFF_SRATIONAL: return 4; case TIFF_DOUBLE: + case TIFF_LONG8: + case TIFF_SLONG8: + case TIFF_IFD8: return 8; default: return 0; } } -/* - * Return nearest TIFFDataType to the sample type of an image. - */ -TIFFDataType -_TIFFSampleToTagType(TIFF* tif) +const TIFFField* +TIFFFindField(TIFF* tif, uint32 tag, TIFFDataType dt) { - uint32 bps = TIFFhowmany8(tif->tif_dir.td_bitspersample); - - switch (tif->tif_dir.td_sampleformat) { - case SAMPLEFORMAT_IEEEFP: - return (bps == 4 ? TIFF_FLOAT : TIFF_DOUBLE); - case SAMPLEFORMAT_INT: - return (bps <= 1 ? TIFF_SBYTE : - bps <= 2 ? TIFF_SSHORT : TIFF_SLONG); - case SAMPLEFORMAT_UINT: - return (bps <= 1 ? TIFF_BYTE : - bps <= 2 ? TIFF_SHORT : TIFF_LONG); - case SAMPLEFORMAT_VOID: - return (TIFF_UNDEFINED); - } - /*NOTREACHED*/ - return (TIFF_UNDEFINED); -} - -const TIFFFieldInfo* -_TIFFFindFieldInfo(TIFF* tif, ttag_t tag, TIFFDataType dt) -{ - TIFFFieldInfo key = {0, 0, 0, TIFF_NOTYPE, 0, 0, 0, 0}; - TIFFFieldInfo* pkey = &key; - const TIFFFieldInfo **ret; - + TIFFField key = {0, 0, 0, TIFF_NOTYPE, 0, 0, 0, 0, 0, 0, NULL, NULL}; + TIFFField* pkey = &key; + const TIFFField **ret; if (tif->tif_foundfield && tif->tif_foundfield->field_tag == tag && (dt == TIFF_ANY || dt == tif->tif_foundfield->field_type)) return tif->tif_foundfield; /* If we are invoked with no field information, then just return. */ - if ( !tif->tif_fieldinfo ) { + if (!tif->tif_fields) return NULL; - } /* NB: use sorted search (e.g. binary search) */ - key.field_tag = tag; - key.field_type = dt; - ret = (const TIFFFieldInfo **) bsearch(&pkey, - tif->tif_fieldinfo, - tif->tif_nfields, - sizeof(TIFFFieldInfo *), - tagCompare); + key.field_tag = tag; + key.field_type = dt; + + ret = (const TIFFField **) bsearch(&pkey, tif->tif_fields, + tif->tif_nfields, + sizeof(TIFFField *), tagCompare); return tif->tif_foundfield = (ret ? *ret : NULL); } -const TIFFFieldInfo* -_TIFFFindFieldInfoByName(TIFF* tif, const char *field_name, TIFFDataType dt) +const TIFFField* +_TIFFFindFieldByName(TIFF* tif, const char *field_name, TIFFDataType dt) { - TIFFFieldInfo key = {0, 0, 0, TIFF_NOTYPE, 0, 0, 0, 0}; - TIFFFieldInfo* pkey = &key; - const TIFFFieldInfo **ret; - + TIFFField key = {0, 0, 0, TIFF_NOTYPE, 0, 0, 0, 0, 0, 0, NULL, NULL}; + TIFFField* pkey = &key; + const TIFFField **ret; if (tif->tif_foundfield && streq(tif->tif_foundfield->field_name, field_name) && (dt == TIFF_ANY || dt == tif->tif_foundfield->field_type)) return (tif->tif_foundfield); /* If we are invoked with no field information, then just return. */ - if ( !tif->tif_fieldinfo ) { + if (!tif->tif_fields) return NULL; - } - /* NB: use sorted search (e.g. binary search) */ - key.field_name = (char *)field_name; - key.field_type = dt; + /* NB: use linear search since list is sorted by key#, not name */ + + key.field_name = (char *)field_name; + key.field_type = dt; + + ret = (const TIFFField **) + td_lfind(&pkey, tif->tif_fields, &tif->tif_nfields, + sizeof(TIFFField *), tagNameCompare); - ret = (const TIFFFieldInfo **) lfind(&pkey, - tif->tif_fieldinfo, - &tif->tif_nfields, - sizeof(TIFFFieldInfo *), - tagNameCompare); return tif->tif_foundfield = (ret ? *ret : NULL); } -const TIFFFieldInfo* -_TIFFFieldWithTag(TIFF* tif, ttag_t tag) +const TIFFField* +TIFFFieldWithTag(TIFF* tif, uint32 tag) { - const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY); + const TIFFField* fip = TIFFFindField(tif, tag, TIFF_ANY); if (!fip) { TIFFErrorExt(tif->tif_clientdata, "TIFFFieldWithTag", "Internal error, unknown tag 0x%x", (unsigned int) tag); - assert(fip != NULL); - /*NOTREACHED*/ } return (fip); } -const TIFFFieldInfo* -_TIFFFieldWithName(TIFF* tif, const char *field_name) +const TIFFField* +TIFFFieldWithName(TIFF* tif, const char *field_name) { - const TIFFFieldInfo* fip = - _TIFFFindFieldInfoByName(tif, field_name, TIFF_ANY); + const TIFFField* fip = + _TIFFFindFieldByName(tif, field_name, TIFF_ANY); if (!fip) { TIFFErrorExt(tif->tif_clientdata, "TIFFFieldWithName", "Internal error, unknown tag %s", field_name); - assert(fip != NULL); - /*NOTREACHED*/ } return (fip); } -const TIFFFieldInfo* -_TIFFFindOrRegisterFieldInfo( TIFF *tif, ttag_t tag, TIFFDataType dt ) - +uint32 +TIFFFieldTag(const TIFFField* fip) { - const TIFFFieldInfo *fld; - - fld = _TIFFFindFieldInfo( tif, tag, dt ); - if( fld == NULL ) - { - fld = _TIFFCreateAnonFieldInfo( tif, tag, dt ); - if (!_TIFFMergeFieldInfo(tif, fld, 1)) - return NULL; - } - - return fld; + return fip->field_tag; } -TIFFFieldInfo* -_TIFFCreateAnonFieldInfo(TIFF *tif, ttag_t tag, TIFFDataType field_type) +const char * +TIFFFieldName(const TIFFField* fip) { - TIFFFieldInfo *fld; + return fip->field_name; +} + +TIFFDataType +TIFFFieldDataType(const TIFFField* fip) +{ + return fip->field_type; +} + +int +TIFFFieldPassCount(const TIFFField* fip) +{ + return fip->field_passcount; +} + +int +TIFFFieldReadCount(const TIFFField* fip) +{ + return fip->field_readcount; +} + +int +TIFFFieldWriteCount(const TIFFField* fip) +{ + return fip->field_writecount; +} + +const TIFFField* +_TIFFFindOrRegisterField(TIFF *tif, uint32 tag, TIFFDataType dt) + +{ + const TIFFField *fld; + + fld = TIFFFindField(tif, tag, dt); + if (fld == NULL) { + fld = _TIFFCreateAnonField(tif, tag, dt); + if (!_TIFFMergeFields(tif, fld, 1)) + return NULL; + } + + return fld; +} + +TIFFField* +_TIFFCreateAnonField(TIFF *tif, uint32 tag, TIFFDataType field_type) +{ + TIFFField *fld; (void) tif; - fld = (TIFFFieldInfo *) _TIFFmalloc(sizeof (TIFFFieldInfo)); + fld = (TIFFField *) _TIFFmalloc(sizeof (TIFFField)); if (fld == NULL) return NULL; - _TIFFmemset( fld, 0, sizeof(TIFFFieldInfo) ); + _TIFFmemset(fld, 0, sizeof(TIFFField)); fld->field_tag = tag; fld->field_readcount = TIFF_VARIABLE2; fld->field_writecount = TIFF_VARIABLE2; fld->field_type = field_type; + fld->reserved = 0; + switch (field_type) + { + case TIFF_BYTE: + case TIFF_UNDEFINED: + fld->set_field_type = TIFF_SETGET_C32_UINT8; + fld->get_field_type = TIFF_SETGET_C32_UINT8; + break; + case TIFF_ASCII: + fld->set_field_type = TIFF_SETGET_C32_ASCII; + fld->get_field_type = TIFF_SETGET_C32_ASCII; + break; + case TIFF_SHORT: + fld->set_field_type = TIFF_SETGET_C32_UINT16; + fld->get_field_type = TIFF_SETGET_C32_UINT16; + break; + case TIFF_LONG: + fld->set_field_type = TIFF_SETGET_C32_UINT32; + fld->get_field_type = TIFF_SETGET_C32_UINT32; + break; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + case TIFF_FLOAT: + fld->set_field_type = TIFF_SETGET_C32_FLOAT; + fld->get_field_type = TIFF_SETGET_C32_FLOAT; + break; + case TIFF_SBYTE: + fld->set_field_type = TIFF_SETGET_C32_SINT8; + fld->get_field_type = TIFF_SETGET_C32_SINT8; + break; + case TIFF_SSHORT: + fld->set_field_type = TIFF_SETGET_C32_SINT16; + fld->get_field_type = TIFF_SETGET_C32_SINT16; + break; + case TIFF_SLONG: + fld->set_field_type = TIFF_SETGET_C32_SINT32; + fld->get_field_type = TIFF_SETGET_C32_SINT32; + break; + case TIFF_DOUBLE: + fld->set_field_type = TIFF_SETGET_C32_DOUBLE; + fld->get_field_type = TIFF_SETGET_C32_DOUBLE; + break; + case TIFF_IFD: + case TIFF_IFD8: + fld->set_field_type = TIFF_SETGET_C32_IFD8; + fld->get_field_type = TIFF_SETGET_C32_IFD8; + break; + case TIFF_LONG8: + fld->set_field_type = TIFF_SETGET_C32_UINT64; + fld->get_field_type = TIFF_SETGET_C32_UINT64; + break; + case TIFF_SLONG8: + fld->set_field_type = TIFF_SETGET_C32_SINT64; + fld->get_field_type = TIFF_SETGET_C32_SINT64; + break; + default: + fld->set_field_type = TIFF_SETGET_UNDEFINED; + fld->get_field_type = TIFF_SETGET_UNDEFINED; + break; + } fld->field_bit = FIELD_CUSTOM; fld->field_oktochange = TRUE; fld->field_passcount = TRUE; @@ -868,17 +705,249 @@ _TIFFCreateAnonFieldInfo(TIFF *tif, ttag_t tag, TIFFDataType field_type) _TIFFfree(fld); return NULL; } + fld->field_subfields = NULL; /* * note that this name is a special sign to TIFFClose() and - * _TIFFSetupFieldInfo() to free the field + * _TIFFSetupFields() to free the field */ sprintf(fld->field_name, "Tag %d", (int) tag); return fld; } +/**************************************************************************** + * O B S O L E T E D I N T E R F A C E S + * + * Don't use this stuff in your applications, it may be removed in the future + * libtiff versions. + ****************************************************************************/ + +static TIFFSetGetFieldType +_TIFFSetGetType(TIFFDataType type, short count, unsigned char passcount) +{ + if (type == TIFF_ASCII && count == TIFF_VARIABLE && passcount == 0) + return TIFF_SETGET_ASCII; + + else if (count == 1 && passcount == 0) { + switch (type) + { + case TIFF_BYTE: + case TIFF_UNDEFINED: + return TIFF_SETGET_UINT8; + case TIFF_ASCII: + return TIFF_SETGET_ASCII; + case TIFF_SHORT: + return TIFF_SETGET_UINT16; + case TIFF_LONG: + return TIFF_SETGET_UINT32; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + case TIFF_FLOAT: + return TIFF_SETGET_FLOAT; + case TIFF_SBYTE: + return TIFF_SETGET_SINT8; + case TIFF_SSHORT: + return TIFF_SETGET_SINT16; + case TIFF_SLONG: + return TIFF_SETGET_SINT32; + case TIFF_DOUBLE: + return TIFF_SETGET_DOUBLE; + case TIFF_IFD: + case TIFF_IFD8: + return TIFF_SETGET_IFD8; + case TIFF_LONG8: + return TIFF_SETGET_UINT64; + case TIFF_SLONG8: + return TIFF_SETGET_SINT64; + default: + return TIFF_SETGET_UNDEFINED; + } + } + + else if (count >= 1 && passcount == 0) { + switch (type) + { + case TIFF_BYTE: + case TIFF_UNDEFINED: + return TIFF_SETGET_C0_UINT8; + case TIFF_ASCII: + return TIFF_SETGET_C0_ASCII; + case TIFF_SHORT: + return TIFF_SETGET_C0_UINT16; + case TIFF_LONG: + return TIFF_SETGET_C0_UINT32; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + case TIFF_FLOAT: + return TIFF_SETGET_C0_FLOAT; + case TIFF_SBYTE: + return TIFF_SETGET_C0_SINT8; + case TIFF_SSHORT: + return TIFF_SETGET_C0_SINT16; + case TIFF_SLONG: + return TIFF_SETGET_C0_SINT32; + case TIFF_DOUBLE: + return TIFF_SETGET_C0_DOUBLE; + case TIFF_IFD: + case TIFF_IFD8: + return TIFF_SETGET_C0_IFD8; + case TIFF_LONG8: + return TIFF_SETGET_C0_UINT64; + case TIFF_SLONG8: + return TIFF_SETGET_C0_SINT64; + default: + return TIFF_SETGET_UNDEFINED; + } + } + + else if (count == TIFF_VARIABLE && passcount == 1) { + switch (type) + { + case TIFF_BYTE: + case TIFF_UNDEFINED: + return TIFF_SETGET_C16_UINT8; + case TIFF_ASCII: + return TIFF_SETGET_C16_ASCII; + case TIFF_SHORT: + return TIFF_SETGET_C16_UINT16; + case TIFF_LONG: + return TIFF_SETGET_C16_UINT32; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + case TIFF_FLOAT: + return TIFF_SETGET_C16_FLOAT; + case TIFF_SBYTE: + return TIFF_SETGET_C16_SINT8; + case TIFF_SSHORT: + return TIFF_SETGET_C16_SINT16; + case TIFF_SLONG: + return TIFF_SETGET_C16_SINT32; + case TIFF_DOUBLE: + return TIFF_SETGET_C16_DOUBLE; + case TIFF_IFD: + case TIFF_IFD8: + return TIFF_SETGET_C16_IFD8; + case TIFF_LONG8: + return TIFF_SETGET_C16_UINT64; + case TIFF_SLONG8: + return TIFF_SETGET_C16_SINT64; + default: + return TIFF_SETGET_UNDEFINED; + } + } + + else if (count == TIFF_VARIABLE2 && passcount == 1) { + switch (type) + { + case TIFF_BYTE: + case TIFF_UNDEFINED: + return TIFF_SETGET_C32_UINT8; + case TIFF_ASCII: + return TIFF_SETGET_C32_ASCII; + case TIFF_SHORT: + return TIFF_SETGET_C32_UINT16; + case TIFF_LONG: + return TIFF_SETGET_C32_UINT32; + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + case TIFF_FLOAT: + return TIFF_SETGET_C32_FLOAT; + case TIFF_SBYTE: + return TIFF_SETGET_C32_SINT8; + case TIFF_SSHORT: + return TIFF_SETGET_C32_SINT16; + case TIFF_SLONG: + return TIFF_SETGET_C32_SINT32; + case TIFF_DOUBLE: + return TIFF_SETGET_C32_DOUBLE; + case TIFF_IFD: + case TIFF_IFD8: + return TIFF_SETGET_C32_IFD8; + case TIFF_LONG8: + return TIFF_SETGET_C32_UINT64; + case TIFF_SLONG8: + return TIFF_SETGET_C32_SINT64; + default: + return TIFF_SETGET_UNDEFINED; + } + } + + return TIFF_SETGET_UNDEFINED; +} + +int +TIFFMergeFieldInfo(TIFF* tif, const TIFFFieldInfo info[], uint32 n) +{ + static const char module[] = "TIFFMergeFieldInfo"; + static const char reason[] = "for fields array"; + TIFFField *tp; + size_t nfields; + uint32 i; + + if (tif->tif_nfieldscompat > 0) { + tif->tif_fieldscompat = (TIFFFieldArray *) + _TIFFCheckRealloc(tif, tif->tif_fieldscompat, + tif->tif_nfieldscompat + 1, + sizeof(TIFFFieldArray), reason); + } else { + tif->tif_fieldscompat = (TIFFFieldArray *) + _TIFFCheckMalloc(tif, 1, sizeof(TIFFFieldArray), + reason); + } + if (!tif->tif_fieldscompat) { + TIFFErrorExt(tif->tif_clientdata, module, + "Failed to allocate fields array"); + return -1; + } + nfields = tif->tif_nfieldscompat++; + + tif->tif_fieldscompat[nfields].type = tfiatOther; + tif->tif_fieldscompat[nfields].allocated_size = n; + tif->tif_fieldscompat[nfields].count = n; + tif->tif_fieldscompat[nfields].fields = + (TIFFField *)_TIFFCheckMalloc(tif, n, sizeof(TIFFField), + reason); + if (!tif->tif_fieldscompat[nfields].fields) { + TIFFErrorExt(tif->tif_clientdata, module, + "Failed to allocate fields array"); + return -1; + } + + tp = tif->tif_fieldscompat[nfields].fields; + for (i = 0; i < n; i++) { + tp->field_tag = info[i].field_tag; + tp->field_readcount = info[i].field_readcount; + tp->field_writecount = info[i].field_writecount; + tp->field_type = info[i].field_type; + tp->reserved = 0; + tp->set_field_type = + _TIFFSetGetType(info[i].field_type, + info[i].field_readcount, + info[i].field_passcount); + tp->get_field_type = + _TIFFSetGetType(info[i].field_type, + info[i].field_readcount, + info[i].field_passcount); + tp->field_bit = info[i].field_bit; + tp->field_oktochange = info[i].field_oktochange; + tp->field_passcount = info[i].field_passcount; + tp->field_name = info[i].field_name; + tp->field_subfields = NULL; + tp++; + } + + if (!_TIFFMergeFields(tif, tif->tif_fieldscompat[nfields].fields, n)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Setting up field info failed"); + return -1; + } + + return 0; +} + /* vim: set ts=8 sts=8 sw=8 noet: */ + /* * Local Variables: * mode: c diff --git a/dll/3rdparty/libtiff/tif_dirread.c b/dll/3rdparty/libtiff/tif_dirread.c index 907b53188c8..19a26e27882 100644 --- a/dll/3rdparty/libtiff/tif_dirread.c +++ b/dll/3rdparty/libtiff/tif_dirread.c @@ -1,26 +1,26 @@ -/* $Id: tif_dirread.c,v 1.92.2.9 2010-06-14 00:21:46 fwarmerdam Exp $ */ +/* $Id: tif_dirread.c,v 1.178 2012-08-19 16:56:34 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. * - * Permission to use, copy, modify, distribute, and sell this software and + * Permission to use, copy, modify, distribute, and sell this software and * its documentation for any purpose is hereby granted without fee, provided * that (i) the above copyright notices and this permission notice appear in * all copies of the software and related documentation, and (ii) the names of * Sam Leffler and Silicon Graphics may not be used in any advertising or * publicity relating to the software without the specific, prior written * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. */ @@ -29,42 +29,3391 @@ * * Directory Read Support Routines. */ + +/* Suggested pending improvements: + * - add a field 'ignore' to the TIFFDirEntry structure, to flag status, + * eliminating current use of the IGNORE value, and therefore eliminating + * current irrational behaviour on tags with tag id code 0 + * - add a field 'field_info' to the TIFFDirEntry structure, and set that with + * the pointer to the appropriate TIFFField structure early on in + * TIFFReadDirectory, so as to eliminate current possibly repetitive lookup. + */ + #include "tiffiop.h" -#define IGNORE 0 /* tag placeholder used below */ +#define IGNORE 0 /* tag placeholder used below */ +#define FAILED_FII ((uint32) -1) #ifdef HAVE_IEEEFP -# define TIFFCvtIEEEFloatToNative(tif, n, fp) -# define TIFFCvtIEEEDoubleToNative(tif, n, dp) +# define TIFFCvtIEEEFloatToNative(tif, n, fp) +# define TIFFCvtIEEEDoubleToNative(tif, n, dp) #else -extern void TIFFCvtIEEEFloatToNative(TIFF*, uint32, float*); -extern void TIFFCvtIEEEDoubleToNative(TIFF*, uint32, double*); +extern void TIFFCvtIEEEFloatToNative(TIFF*, uint32, float*); +extern void TIFFCvtIEEEDoubleToNative(TIFF*, uint32, double*); #endif -static TIFFDirEntry* TIFFReadDirectoryFind(TIFFDirEntry* dir, - uint16 dircount, uint16 tagid); -static int EstimateStripByteCounts(TIFF*, TIFFDirEntry*, uint16); -static void MissingRequired(TIFF*, const char*); -static int TIFFCheckDirOffset(TIFF*, toff_t); -static int CheckDirCount(TIFF*, TIFFDirEntry*, uint32); -static uint16 TIFFFetchDirectory(TIFF*, toff_t, TIFFDirEntry**, toff_t *); -static tsize_t TIFFFetchData(TIFF*, TIFFDirEntry*, char*); -static tsize_t TIFFFetchString(TIFF*, TIFFDirEntry*, char*); -static float TIFFFetchRational(TIFF*, TIFFDirEntry*); -static int TIFFFetchNormalTag(TIFF*, TIFFDirEntry*); -static int TIFFFetchPerSampleShorts(TIFF*, TIFFDirEntry*, uint16*); -static int TIFFFetchPerSampleLongs(TIFF*, TIFFDirEntry*, uint32*); -static int TIFFFetchPerSampleAnys(TIFF*, TIFFDirEntry*, double*); -static int TIFFFetchShortArray(TIFF*, TIFFDirEntry*, uint16*); -static int TIFFFetchStripThing(TIFF*, TIFFDirEntry*, long, uint32**); -static int TIFFFetchRefBlackWhite(TIFF*, TIFFDirEntry*); -static int TIFFFetchSubjectDistance(TIFF*, TIFFDirEntry*); -static float TIFFFetchFloat(TIFF*, TIFFDirEntry*); -static int TIFFFetchFloatArray(TIFF*, TIFFDirEntry*, float*); -static int TIFFFetchDoubleArray(TIFF*, TIFFDirEntry*, double*); -static int TIFFFetchAnyArray(TIFF*, TIFFDirEntry*, double*); -static int TIFFFetchShortPair(TIFF*, TIFFDirEntry*); -static void ChopUpSingleUncompressedStrip(TIFF*); +enum TIFFReadDirEntryErr { + TIFFReadDirEntryErrOk = 0, + TIFFReadDirEntryErrCount = 1, + TIFFReadDirEntryErrType = 2, + TIFFReadDirEntryErrIo = 3, + TIFFReadDirEntryErrRange = 4, + TIFFReadDirEntryErrPsdif = 5, + TIFFReadDirEntryErrSizesan = 6, + TIFFReadDirEntryErrAlloc = 7, +}; + +static enum TIFFReadDirEntryErr TIFFReadDirEntryByte(TIFF* tif, TIFFDirEntry* direntry, uint8* value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryShort(TIFF* tif, TIFFDirEntry* direntry, uint16* value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryLong(TIFF* tif, TIFFDirEntry* direntry, uint32* value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryLong8(TIFF* tif, TIFFDirEntry* direntry, uint64* value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryFloat(TIFF* tif, TIFFDirEntry* direntry, float* value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryDouble(TIFF* tif, TIFFDirEntry* direntry, double* value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryIfd8(TIFF* tif, TIFFDirEntry* direntry, uint64* value); + +static enum TIFFReadDirEntryErr TIFFReadDirEntryArray(TIFF* tif, TIFFDirEntry* direntry, uint32* count, uint32 desttypesize, void** value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryByteArray(TIFF* tif, TIFFDirEntry* direntry, uint8** value); +static enum TIFFReadDirEntryErr TIFFReadDirEntrySbyteArray(TIFF* tif, TIFFDirEntry* direntry, int8** value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryShortArray(TIFF* tif, TIFFDirEntry* direntry, uint16** value); +static enum TIFFReadDirEntryErr TIFFReadDirEntrySshortArray(TIFF* tif, TIFFDirEntry* direntry, int16** value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryLongArray(TIFF* tif, TIFFDirEntry* direntry, uint32** value); +static enum TIFFReadDirEntryErr TIFFReadDirEntrySlongArray(TIFF* tif, TIFFDirEntry* direntry, int32** value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryLong8Array(TIFF* tif, TIFFDirEntry* direntry, uint64** value); +static enum TIFFReadDirEntryErr TIFFReadDirEntrySlong8Array(TIFF* tif, TIFFDirEntry* direntry, int64** value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryFloatArray(TIFF* tif, TIFFDirEntry* direntry, float** value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryDoubleArray(TIFF* tif, TIFFDirEntry* direntry, double** value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryIfd8Array(TIFF* tif, TIFFDirEntry* direntry, uint64** value); + +static enum TIFFReadDirEntryErr TIFFReadDirEntryPersampleShort(TIFF* tif, TIFFDirEntry* direntry, uint16* value); +#if 0 +static enum TIFFReadDirEntryErr TIFFReadDirEntryPersampleDouble(TIFF* tif, TIFFDirEntry* direntry, double* value); +#endif + +static void TIFFReadDirEntryCheckedByte(TIFF* tif, TIFFDirEntry* direntry, uint8* value); +static void TIFFReadDirEntryCheckedSbyte(TIFF* tif, TIFFDirEntry* direntry, int8* value); +static void TIFFReadDirEntryCheckedShort(TIFF* tif, TIFFDirEntry* direntry, uint16* value); +static void TIFFReadDirEntryCheckedSshort(TIFF* tif, TIFFDirEntry* direntry, int16* value); +static void TIFFReadDirEntryCheckedLong(TIFF* tif, TIFFDirEntry* direntry, uint32* value); +static void TIFFReadDirEntryCheckedSlong(TIFF* tif, TIFFDirEntry* direntry, int32* value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckedLong8(TIFF* tif, TIFFDirEntry* direntry, uint64* value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckedSlong8(TIFF* tif, TIFFDirEntry* direntry, int64* value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckedRational(TIFF* tif, TIFFDirEntry* direntry, double* value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckedSrational(TIFF* tif, TIFFDirEntry* direntry, double* value); +static void TIFFReadDirEntryCheckedFloat(TIFF* tif, TIFFDirEntry* direntry, float* value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckedDouble(TIFF* tif, TIFFDirEntry* direntry, double* value); + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeByteSbyte(int8 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeByteShort(uint16 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeByteSshort(int16 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeByteLong(uint32 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeByteSlong(int32 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeByteLong8(uint64 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeByteSlong8(int64 value); + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSbyteByte(uint8 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSbyteShort(uint16 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSbyteSshort(int16 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSbyteLong(uint32 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSbyteSlong(int32 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSbyteLong8(uint64 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSbyteSlong8(int64 value); + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeShortSbyte(int8 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeShortSshort(int16 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeShortLong(uint32 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeShortSlong(int32 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeShortLong8(uint64 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeShortSlong8(int64 value); + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSshortShort(uint16 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSshortLong(uint32 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSshortSlong(int32 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSshortLong8(uint64 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSshortSlong8(int64 value); + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeLongSbyte(int8 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeLongSshort(int16 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeLongSlong(int32 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeLongLong8(uint64 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeLongSlong8(int64 value); + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSlongLong(uint32 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSlongLong8(uint64 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSlongSlong8(int64 value); + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeLong8Sbyte(int8 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeLong8Sshort(int16 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeLong8Slong(int32 value); +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeLong8Slong8(int64 value); + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSlong8Long8(uint64 value); + +static enum TIFFReadDirEntryErr TIFFReadDirEntryData(TIFF* tif, uint64 offset, tmsize_t size, void* dest); +static void TIFFReadDirEntryOutputErr(TIFF* tif, enum TIFFReadDirEntryErr err, const char* module, const char* tagname, int recover); + +static void TIFFReadDirectoryCheckOrder(TIFF* tif, TIFFDirEntry* dir, uint16 dircount); +static TIFFDirEntry* TIFFReadDirectoryFindEntry(TIFF* tif, TIFFDirEntry* dir, uint16 dircount, uint16 tagid); +static void TIFFReadDirectoryFindFieldInfo(TIFF* tif, uint16 tagid, uint32* fii); + +static int EstimateStripByteCounts(TIFF* tif, TIFFDirEntry* dir, uint16 dircount); +static void MissingRequired(TIFF*, const char*); +static int TIFFCheckDirOffset(TIFF* tif, uint64 diroff); +static int CheckDirCount(TIFF*, TIFFDirEntry*, uint32); +static uint16 TIFFFetchDirectory(TIFF* tif, uint64 diroff, TIFFDirEntry** pdir, uint64* nextdiroff); +static int TIFFFetchNormalTag(TIFF*, TIFFDirEntry*, int recover); +static int TIFFFetchStripThing(TIFF* tif, TIFFDirEntry* dir, uint32 nstrips, uint64** lpp); +static int TIFFFetchSubjectDistance(TIFF*, TIFFDirEntry*); +static void ChopUpSingleUncompressedStrip(TIFF*); +static uint64 TIFFReadUInt64(const uint8 *value); + +typedef union _UInt64Aligned_t +{ + double d; + uint64 l; + uint32 i[2]; + uint16 s[4]; + uint8 c[8]; +} UInt64Aligned_t; + +/* + Unaligned safe copy of a uint64 value from an octet array. +*/ +static uint64 TIFFReadUInt64(const uint8 *value) +{ + UInt64Aligned_t result; + + result.c[0]=value[0]; + result.c[1]=value[1]; + result.c[2]=value[2]; + result.c[3]=value[3]; + result.c[4]=value[4]; + result.c[5]=value[5]; + result.c[6]=value[6]; + result.c[7]=value[7]; + + return result.l; +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryByte(TIFF* tif, TIFFDirEntry* direntry, uint8* value) +{ + enum TIFFReadDirEntryErr err; + if (direntry->tdir_count!=1) + return(TIFFReadDirEntryErrCount); + switch (direntry->tdir_type) + { + case TIFF_BYTE: + TIFFReadDirEntryCheckedByte(tif,direntry,value); + return(TIFFReadDirEntryErrOk); + case TIFF_SBYTE: + { + int8 m; + TIFFReadDirEntryCheckedSbyte(tif,direntry,&m); + err=TIFFReadDirEntryCheckRangeByteSbyte(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint8)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SHORT: + { + uint16 m; + TIFFReadDirEntryCheckedShort(tif,direntry,&m); + err=TIFFReadDirEntryCheckRangeByteShort(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint8)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SSHORT: + { + int16 m; + TIFFReadDirEntryCheckedSshort(tif,direntry,&m); + err=TIFFReadDirEntryCheckRangeByteSshort(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint8)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_LONG: + { + uint32 m; + TIFFReadDirEntryCheckedLong(tif,direntry,&m); + err=TIFFReadDirEntryCheckRangeByteLong(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint8)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SLONG: + { + int32 m; + TIFFReadDirEntryCheckedSlong(tif,direntry,&m); + err=TIFFReadDirEntryCheckRangeByteSlong(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint8)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_LONG8: + { + uint64 m; + err=TIFFReadDirEntryCheckedLong8(tif,direntry,&m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + err=TIFFReadDirEntryCheckRangeByteLong8(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint8)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SLONG8: + { + int64 m; + err=TIFFReadDirEntryCheckedSlong8(tif,direntry,&m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + err=TIFFReadDirEntryCheckRangeByteSlong8(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint8)m; + return(TIFFReadDirEntryErrOk); + } + default: + return(TIFFReadDirEntryErrType); + } +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryShort(TIFF* tif, TIFFDirEntry* direntry, uint16* value) +{ + enum TIFFReadDirEntryErr err; + if (direntry->tdir_count!=1) + return(TIFFReadDirEntryErrCount); + switch (direntry->tdir_type) + { + case TIFF_BYTE: + { + uint8 m; + TIFFReadDirEntryCheckedByte(tif,direntry,&m); + *value=(uint16)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SBYTE: + { + int8 m; + TIFFReadDirEntryCheckedSbyte(tif,direntry,&m); + err=TIFFReadDirEntryCheckRangeShortSbyte(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint16)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SHORT: + TIFFReadDirEntryCheckedShort(tif,direntry,value); + return(TIFFReadDirEntryErrOk); + case TIFF_SSHORT: + { + int16 m; + TIFFReadDirEntryCheckedSshort(tif,direntry,&m); + err=TIFFReadDirEntryCheckRangeShortSshort(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint16)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_LONG: + { + uint32 m; + TIFFReadDirEntryCheckedLong(tif,direntry,&m); + err=TIFFReadDirEntryCheckRangeShortLong(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint16)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SLONG: + { + int32 m; + TIFFReadDirEntryCheckedSlong(tif,direntry,&m); + err=TIFFReadDirEntryCheckRangeShortSlong(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint16)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_LONG8: + { + uint64 m; + err=TIFFReadDirEntryCheckedLong8(tif,direntry,&m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + err=TIFFReadDirEntryCheckRangeShortLong8(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint16)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SLONG8: + { + int64 m; + err=TIFFReadDirEntryCheckedSlong8(tif,direntry,&m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + err=TIFFReadDirEntryCheckRangeShortSlong8(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint16)m; + return(TIFFReadDirEntryErrOk); + } + default: + return(TIFFReadDirEntryErrType); + } +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryLong(TIFF* tif, TIFFDirEntry* direntry, uint32* value) +{ + enum TIFFReadDirEntryErr err; + if (direntry->tdir_count!=1) + return(TIFFReadDirEntryErrCount); + switch (direntry->tdir_type) + { + case TIFF_BYTE: + { + uint8 m; + TIFFReadDirEntryCheckedByte(tif,direntry,&m); + *value=(uint32)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SBYTE: + { + int8 m; + TIFFReadDirEntryCheckedSbyte(tif,direntry,&m); + err=TIFFReadDirEntryCheckRangeLongSbyte(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint32)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SHORT: + { + uint16 m; + TIFFReadDirEntryCheckedShort(tif,direntry,&m); + *value=(uint32)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SSHORT: + { + int16 m; + TIFFReadDirEntryCheckedSshort(tif,direntry,&m); + err=TIFFReadDirEntryCheckRangeLongSshort(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint32)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_LONG: + TIFFReadDirEntryCheckedLong(tif,direntry,value); + return(TIFFReadDirEntryErrOk); + case TIFF_SLONG: + { + int32 m; + TIFFReadDirEntryCheckedSlong(tif,direntry,&m); + err=TIFFReadDirEntryCheckRangeLongSlong(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint32)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_LONG8: + { + uint64 m; + err=TIFFReadDirEntryCheckedLong8(tif,direntry,&m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + err=TIFFReadDirEntryCheckRangeLongLong8(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint32)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SLONG8: + { + int64 m; + err=TIFFReadDirEntryCheckedSlong8(tif,direntry,&m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + err=TIFFReadDirEntryCheckRangeLongSlong8(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint32)m; + return(TIFFReadDirEntryErrOk); + } + default: + return(TIFFReadDirEntryErrType); + } +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryLong8(TIFF* tif, TIFFDirEntry* direntry, uint64* value) +{ + enum TIFFReadDirEntryErr err; + if (direntry->tdir_count!=1) + return(TIFFReadDirEntryErrCount); + switch (direntry->tdir_type) + { + case TIFF_BYTE: + { + uint8 m; + TIFFReadDirEntryCheckedByte(tif,direntry,&m); + *value=(uint64)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SBYTE: + { + int8 m; + TIFFReadDirEntryCheckedSbyte(tif,direntry,&m); + err=TIFFReadDirEntryCheckRangeLong8Sbyte(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint64)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SHORT: + { + uint16 m; + TIFFReadDirEntryCheckedShort(tif,direntry,&m); + *value=(uint64)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SSHORT: + { + int16 m; + TIFFReadDirEntryCheckedSshort(tif,direntry,&m); + err=TIFFReadDirEntryCheckRangeLong8Sshort(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint64)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_LONG: + { + uint32 m; + TIFFReadDirEntryCheckedLong(tif,direntry,&m); + *value=(uint64)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SLONG: + { + int32 m; + TIFFReadDirEntryCheckedSlong(tif,direntry,&m); + err=TIFFReadDirEntryCheckRangeLong8Slong(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint64)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_LONG8: + err=TIFFReadDirEntryCheckedLong8(tif,direntry,value); + return(err); + case TIFF_SLONG8: + { + int64 m; + err=TIFFReadDirEntryCheckedSlong8(tif,direntry,&m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + err=TIFFReadDirEntryCheckRangeLong8Slong8(m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(uint64)m; + return(TIFFReadDirEntryErrOk); + } + default: + return(TIFFReadDirEntryErrType); + } +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryFloat(TIFF* tif, TIFFDirEntry* direntry, float* value) +{ + enum TIFFReadDirEntryErr err; + if (direntry->tdir_count!=1) + return(TIFFReadDirEntryErrCount); + switch (direntry->tdir_type) + { + case TIFF_BYTE: + { + uint8 m; + TIFFReadDirEntryCheckedByte(tif,direntry,&m); + *value=(float)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SBYTE: + { + int8 m; + TIFFReadDirEntryCheckedSbyte(tif,direntry,&m); + *value=(float)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SHORT: + { + uint16 m; + TIFFReadDirEntryCheckedShort(tif,direntry,&m); + *value=(float)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SSHORT: + { + int16 m; + TIFFReadDirEntryCheckedSshort(tif,direntry,&m); + *value=(float)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_LONG: + { + uint32 m; + TIFFReadDirEntryCheckedLong(tif,direntry,&m); + *value=(float)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SLONG: + { + int32 m; + TIFFReadDirEntryCheckedSlong(tif,direntry,&m); + *value=(float)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_LONG8: + { + uint64 m; + err=TIFFReadDirEntryCheckedLong8(tif,direntry,&m); + if (err!=TIFFReadDirEntryErrOk) + return(err); +#if defined(__WIN32__) && (_MSC_VER < 1500) + /* + * XXX: MSVC 6.0 does not support conversion + * of 64-bit integers into floating point + * values. + */ + *value = _TIFFUInt64ToFloat(m); +#else + *value=(float)m; +#endif + return(TIFFReadDirEntryErrOk); + } + case TIFF_SLONG8: + { + int64 m; + err=TIFFReadDirEntryCheckedSlong8(tif,direntry,&m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(float)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_RATIONAL: + { + double m; + err=TIFFReadDirEntryCheckedRational(tif,direntry,&m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(float)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SRATIONAL: + { + double m; + err=TIFFReadDirEntryCheckedSrational(tif,direntry,&m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(float)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_FLOAT: + TIFFReadDirEntryCheckedFloat(tif,direntry,value); + return(TIFFReadDirEntryErrOk); + case TIFF_DOUBLE: + { + double m; + err=TIFFReadDirEntryCheckedDouble(tif,direntry,&m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(float)m; + return(TIFFReadDirEntryErrOk); + } + default: + return(TIFFReadDirEntryErrType); + } +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryDouble(TIFF* tif, TIFFDirEntry* direntry, double* value) +{ + enum TIFFReadDirEntryErr err; + if (direntry->tdir_count!=1) + return(TIFFReadDirEntryErrCount); + switch (direntry->tdir_type) + { + case TIFF_BYTE: + { + uint8 m; + TIFFReadDirEntryCheckedByte(tif,direntry,&m); + *value=(double)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SBYTE: + { + int8 m; + TIFFReadDirEntryCheckedSbyte(tif,direntry,&m); + *value=(double)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SHORT: + { + uint16 m; + TIFFReadDirEntryCheckedShort(tif,direntry,&m); + *value=(double)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SSHORT: + { + int16 m; + TIFFReadDirEntryCheckedSshort(tif,direntry,&m); + *value=(double)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_LONG: + { + uint32 m; + TIFFReadDirEntryCheckedLong(tif,direntry,&m); + *value=(double)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SLONG: + { + int32 m; + TIFFReadDirEntryCheckedSlong(tif,direntry,&m); + *value=(double)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_LONG8: + { + uint64 m; + err=TIFFReadDirEntryCheckedLong8(tif,direntry,&m); + if (err!=TIFFReadDirEntryErrOk) + return(err); +#if defined(__WIN32__) && (_MSC_VER < 1500) + /* + * XXX: MSVC 6.0 does not support conversion + * of 64-bit integers into floating point + * values. + */ + *value = _TIFFUInt64ToDouble(m); +#else + *value = (double)m; +#endif + return(TIFFReadDirEntryErrOk); + } + case TIFF_SLONG8: + { + int64 m; + err=TIFFReadDirEntryCheckedSlong8(tif,direntry,&m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + *value=(double)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_RATIONAL: + err=TIFFReadDirEntryCheckedRational(tif,direntry,value); + return(err); + case TIFF_SRATIONAL: + err=TIFFReadDirEntryCheckedSrational(tif,direntry,value); + return(err); + case TIFF_FLOAT: + { + float m; + TIFFReadDirEntryCheckedFloat(tif,direntry,&m); + *value=(double)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_DOUBLE: + err=TIFFReadDirEntryCheckedDouble(tif,direntry,value); + return(err); + default: + return(TIFFReadDirEntryErrType); + } +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryIfd8(TIFF* tif, TIFFDirEntry* direntry, uint64* value) +{ + enum TIFFReadDirEntryErr err; + if (direntry->tdir_count!=1) + return(TIFFReadDirEntryErrCount); + switch (direntry->tdir_type) + { + case TIFF_LONG: + case TIFF_IFD: + { + uint32 m; + TIFFReadDirEntryCheckedLong(tif,direntry,&m); + *value=(uint64)m; + return(TIFFReadDirEntryErrOk); + } + case TIFF_LONG8: + case TIFF_IFD8: + err=TIFFReadDirEntryCheckedLong8(tif,direntry,value); + return(err); + default: + return(TIFFReadDirEntryErrType); + } +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryArray(TIFF* tif, TIFFDirEntry* direntry, uint32* count, uint32 desttypesize, void** value) +{ + int typesize; + uint32 datasize; + void* data; + typesize=TIFFDataWidth(direntry->tdir_type); + if ((direntry->tdir_count==0)||(typesize==0)) + { + *value=0; + return(TIFFReadDirEntryErrOk); + } + (void) desttypesize; + + /* + * As a sanity check, make sure we have no more than a 2GB tag array + * in either the current data type or the dest data type. This also + * avoids problems with overflow of tmsize_t on 32bit systems. + */ + if ((uint64)(2147483647/typesize)tdir_count) + return(TIFFReadDirEntryErrSizesan); + if ((uint64)(2147483647/desttypesize)tdir_count) + return(TIFFReadDirEntryErrSizesan); + + *count=(uint32)direntry->tdir_count; + datasize=(*count)*typesize; + assert((tmsize_t)datasize>0); + data=_TIFFCheckMalloc(tif, *count, typesize, "ReadDirEntryArray"); + if (data==0) + return(TIFFReadDirEntryErrAlloc); + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + if (datasize<=4) + _TIFFmemcpy(data,&direntry->tdir_offset,datasize); + else + { + enum TIFFReadDirEntryErr err; + uint32 offset = direntry->tdir_offset.toff_long; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(&offset); + err=TIFFReadDirEntryData(tif,(uint64)offset,(tmsize_t)datasize,data); + if (err!=TIFFReadDirEntryErrOk) + { + _TIFFfree(data); + return(err); + } + } + } + else + { + if (datasize<=8) + _TIFFmemcpy(data,&direntry->tdir_offset,datasize); + else + { + enum TIFFReadDirEntryErr err; + uint64 offset = direntry->tdir_offset.toff_long8; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8(&offset); + err=TIFFReadDirEntryData(tif,offset,(tmsize_t)datasize,data); + if (err!=TIFFReadDirEntryErrOk) + { + _TIFFfree(data); + return(err); + } + } + } + *value=data; + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryByteArray(TIFF* tif, TIFFDirEntry* direntry, uint8** value) +{ + enum TIFFReadDirEntryErr err; + uint32 count; + void* origdata; + uint8* data; + switch (direntry->tdir_type) + { + case TIFF_ASCII: + case TIFF_UNDEFINED: + case TIFF_BYTE: + case TIFF_SBYTE: + case TIFF_SHORT: + case TIFF_SSHORT: + case TIFF_LONG: + case TIFF_SLONG: + case TIFF_LONG8: + case TIFF_SLONG8: + break; + default: + return(TIFFReadDirEntryErrType); + } + err=TIFFReadDirEntryArray(tif,direntry,&count,1,&origdata); + if ((err!=TIFFReadDirEntryErrOk)||(origdata==0)) + { + *value=0; + return(err); + } + switch (direntry->tdir_type) + { + case TIFF_ASCII: + case TIFF_UNDEFINED: + case TIFF_BYTE: + *value=(uint8*)origdata; + return(TIFFReadDirEntryErrOk); + case TIFF_SBYTE: + { + int8* m; + uint32 n; + m=(int8*)origdata; + for (n=0; ntdir_type) + { + case TIFF_SHORT: + { + uint16* ma; + uint8* mb; + uint32 n; + ma=(uint16*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort(ma); + err=TIFFReadDirEntryCheckRangeByteShort(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(uint8)(*ma++); + } + } + break; + case TIFF_SSHORT: + { + int16* ma; + uint8* mb; + uint32 n; + ma=(int16*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)ma); + err=TIFFReadDirEntryCheckRangeByteSshort(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(uint8)(*ma++); + } + } + break; + case TIFF_LONG: + { + uint32* ma; + uint8* mb; + uint32 n; + ma=(uint32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong(ma); + err=TIFFReadDirEntryCheckRangeByteLong(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(uint8)(*ma++); + } + } + break; + case TIFF_SLONG: + { + int32* ma; + uint8* mb; + uint32 n; + ma=(int32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong((uint32*)ma); + err=TIFFReadDirEntryCheckRangeByteSlong(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(uint8)(*ma++); + } + } + break; + case TIFF_LONG8: + { + uint64* ma; + uint8* mb; + uint32 n; + ma=(uint64*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8(ma); + err=TIFFReadDirEntryCheckRangeByteLong8(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(uint8)(*ma++); + } + } + break; + case TIFF_SLONG8: + { + int64* ma; + uint8* mb; + uint32 n; + ma=(int64*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8((uint64*)ma); + err=TIFFReadDirEntryCheckRangeByteSlong8(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(uint8)(*ma++); + } + } + break; + } + _TIFFfree(origdata); + if (err!=TIFFReadDirEntryErrOk) + { + _TIFFfree(data); + return(err); + } + *value=data; + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntrySbyteArray(TIFF* tif, TIFFDirEntry* direntry, int8** value) +{ + enum TIFFReadDirEntryErr err; + uint32 count; + void* origdata; + int8* data; + switch (direntry->tdir_type) + { + case TIFF_UNDEFINED: + case TIFF_BYTE: + case TIFF_SBYTE: + case TIFF_SHORT: + case TIFF_SSHORT: + case TIFF_LONG: + case TIFF_SLONG: + case TIFF_LONG8: + case TIFF_SLONG8: + break; + default: + return(TIFFReadDirEntryErrType); + } + err=TIFFReadDirEntryArray(tif,direntry,&count,1,&origdata); + if ((err!=TIFFReadDirEntryErrOk)||(origdata==0)) + { + *value=0; + return(err); + } + switch (direntry->tdir_type) + { + case TIFF_UNDEFINED: + case TIFF_BYTE: + { + uint8* m; + uint32 n; + m=(uint8*)origdata; + for (n=0; ntdir_type) + { + case TIFF_SHORT: + { + uint16* ma; + int8* mb; + uint32 n; + ma=(uint16*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort(ma); + err=TIFFReadDirEntryCheckRangeSbyteShort(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(int8)(*ma++); + } + } + break; + case TIFF_SSHORT: + { + int16* ma; + int8* mb; + uint32 n; + ma=(int16*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)ma); + err=TIFFReadDirEntryCheckRangeSbyteSshort(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(int8)(*ma++); + } + } + break; + case TIFF_LONG: + { + uint32* ma; + int8* mb; + uint32 n; + ma=(uint32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong(ma); + err=TIFFReadDirEntryCheckRangeSbyteLong(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(int8)(*ma++); + } + } + break; + case TIFF_SLONG: + { + int32* ma; + int8* mb; + uint32 n; + ma=(int32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong((uint32*)ma); + err=TIFFReadDirEntryCheckRangeSbyteSlong(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(int8)(*ma++); + } + } + break; + case TIFF_LONG8: + { + uint64* ma; + int8* mb; + uint32 n; + ma=(uint64*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8(ma); + err=TIFFReadDirEntryCheckRangeSbyteLong8(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(int8)(*ma++); + } + } + break; + case TIFF_SLONG8: + { + int64* ma; + int8* mb; + uint32 n; + ma=(int64*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8((uint64*)ma); + err=TIFFReadDirEntryCheckRangeSbyteSlong8(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(int8)(*ma++); + } + } + break; + } + _TIFFfree(origdata); + if (err!=TIFFReadDirEntryErrOk) + { + _TIFFfree(data); + return(err); + } + *value=data; + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryShortArray(TIFF* tif, TIFFDirEntry* direntry, uint16** value) +{ + enum TIFFReadDirEntryErr err; + uint32 count; + void* origdata; + uint16* data; + switch (direntry->tdir_type) + { + case TIFF_BYTE: + case TIFF_SBYTE: + case TIFF_SHORT: + case TIFF_SSHORT: + case TIFF_LONG: + case TIFF_SLONG: + case TIFF_LONG8: + case TIFF_SLONG8: + break; + default: + return(TIFFReadDirEntryErrType); + } + err=TIFFReadDirEntryArray(tif,direntry,&count,2,&origdata); + if ((err!=TIFFReadDirEntryErrOk)||(origdata==0)) + { + *value=0; + return(err); + } + switch (direntry->tdir_type) + { + case TIFF_SHORT: + *value=(uint16*)origdata; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfShort(*value,count); + return(TIFFReadDirEntryErrOk); + case TIFF_SSHORT: + { + int16* m; + uint32 n; + m=(int16*)origdata; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)m); + err=TIFFReadDirEntryCheckRangeShortSshort(*m); + if (err!=TIFFReadDirEntryErrOk) + { + _TIFFfree(origdata); + return(err); + } + m++; + } + *value=(uint16*)origdata; + return(TIFFReadDirEntryErrOk); + } + } + data=(uint16*)_TIFFmalloc(count*2); + if (data==0) + { + _TIFFfree(origdata); + return(TIFFReadDirEntryErrAlloc); + } + switch (direntry->tdir_type) + { + case TIFF_BYTE: + { + uint8* ma; + uint16* mb; + uint32 n; + ma=(uint8*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong(ma); + err=TIFFReadDirEntryCheckRangeShortLong(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(uint16)(*ma++); + } + } + break; + case TIFF_SLONG: + { + int32* ma; + uint16* mb; + uint32 n; + ma=(int32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong((uint32*)ma); + err=TIFFReadDirEntryCheckRangeShortSlong(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(uint16)(*ma++); + } + } + break; + case TIFF_LONG8: + { + uint64* ma; + uint16* mb; + uint32 n; + ma=(uint64*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8(ma); + err=TIFFReadDirEntryCheckRangeShortLong8(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(uint16)(*ma++); + } + } + break; + case TIFF_SLONG8: + { + int64* ma; + uint16* mb; + uint32 n; + ma=(int64*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8((uint64*)ma); + err=TIFFReadDirEntryCheckRangeShortSlong8(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(uint16)(*ma++); + } + } + break; + } + _TIFFfree(origdata); + if (err!=TIFFReadDirEntryErrOk) + { + _TIFFfree(data); + return(err); + } + *value=data; + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntrySshortArray(TIFF* tif, TIFFDirEntry* direntry, int16** value) +{ + enum TIFFReadDirEntryErr err; + uint32 count; + void* origdata; + int16* data; + switch (direntry->tdir_type) + { + case TIFF_BYTE: + case TIFF_SBYTE: + case TIFF_SHORT: + case TIFF_SSHORT: + case TIFF_LONG: + case TIFF_SLONG: + case TIFF_LONG8: + case TIFF_SLONG8: + break; + default: + return(TIFFReadDirEntryErrType); + } + err=TIFFReadDirEntryArray(tif,direntry,&count,2,&origdata); + if ((err!=TIFFReadDirEntryErrOk)||(origdata==0)) + { + *value=0; + return(err); + } + switch (direntry->tdir_type) + { + case TIFF_SHORT: + { + uint16* m; + uint32 n; + m=(uint16*)origdata; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort(m); + err=TIFFReadDirEntryCheckRangeSshortShort(*m); + if (err!=TIFFReadDirEntryErrOk) + { + _TIFFfree(origdata); + return(err); + } + m++; + } + *value=(int16*)origdata; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SSHORT: + *value=(int16*)origdata; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfShort((uint16*)(*value),count); + return(TIFFReadDirEntryErrOk); + } + data=(int16*)_TIFFmalloc(count*2); + if (data==0) + { + _TIFFfree(origdata); + return(TIFFReadDirEntryErrAlloc); + } + switch (direntry->tdir_type) + { + case TIFF_BYTE: + { + uint8* ma; + int16* mb; + uint32 n; + ma=(uint8*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong(ma); + err=TIFFReadDirEntryCheckRangeSshortLong(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(int16)(*ma++); + } + } + break; + case TIFF_SLONG: + { + int32* ma; + int16* mb; + uint32 n; + ma=(int32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong((uint32*)ma); + err=TIFFReadDirEntryCheckRangeSshortSlong(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(int16)(*ma++); + } + } + break; + case TIFF_LONG8: + { + uint64* ma; + int16* mb; + uint32 n; + ma=(uint64*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8(ma); + err=TIFFReadDirEntryCheckRangeSshortLong8(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(int16)(*ma++); + } + } + break; + case TIFF_SLONG8: + { + int64* ma; + int16* mb; + uint32 n; + ma=(int64*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8((uint64*)ma); + err=TIFFReadDirEntryCheckRangeSshortSlong8(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(int16)(*ma++); + } + } + break; + } + _TIFFfree(origdata); + if (err!=TIFFReadDirEntryErrOk) + { + _TIFFfree(data); + return(err); + } + *value=data; + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryLongArray(TIFF* tif, TIFFDirEntry* direntry, uint32** value) +{ + enum TIFFReadDirEntryErr err; + uint32 count; + void* origdata; + uint32* data; + switch (direntry->tdir_type) + { + case TIFF_BYTE: + case TIFF_SBYTE: + case TIFF_SHORT: + case TIFF_SSHORT: + case TIFF_LONG: + case TIFF_SLONG: + case TIFF_LONG8: + case TIFF_SLONG8: + break; + default: + return(TIFFReadDirEntryErrType); + } + err=TIFFReadDirEntryArray(tif,direntry,&count,4,&origdata); + if ((err!=TIFFReadDirEntryErrOk)||(origdata==0)) + { + *value=0; + return(err); + } + switch (direntry->tdir_type) + { + case TIFF_LONG: + *value=(uint32*)origdata; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong(*value,count); + return(TIFFReadDirEntryErrOk); + case TIFF_SLONG: + { + int32* m; + uint32 n; + m=(int32*)origdata; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong((uint32*)m); + err=TIFFReadDirEntryCheckRangeLongSlong(*m); + if (err!=TIFFReadDirEntryErrOk) + { + _TIFFfree(origdata); + return(err); + } + m++; + } + *value=(uint32*)origdata; + return(TIFFReadDirEntryErrOk); + } + } + data=(uint32*)_TIFFmalloc(count*4); + if (data==0) + { + _TIFFfree(origdata); + return(TIFFReadDirEntryErrAlloc); + } + switch (direntry->tdir_type) + { + case TIFF_BYTE: + { + uint8* ma; + uint32* mb; + uint32 n; + ma=(uint8*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort(ma); + *mb++=(uint32)(*ma++); + } + } + break; + case TIFF_SSHORT: + { + int16* ma; + uint32* mb; + uint32 n; + ma=(int16*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)ma); + err=TIFFReadDirEntryCheckRangeLongSshort(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(uint32)(*ma++); + } + } + break; + case TIFF_LONG8: + { + uint64* ma; + uint32* mb; + uint32 n; + ma=(uint64*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8(ma); + err=TIFFReadDirEntryCheckRangeLongLong8(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(uint32)(*ma++); + } + } + break; + case TIFF_SLONG8: + { + int64* ma; + uint32* mb; + uint32 n; + ma=(int64*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8((uint64*)ma); + err=TIFFReadDirEntryCheckRangeLongSlong8(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(uint32)(*ma++); + } + } + break; + } + _TIFFfree(origdata); + if (err!=TIFFReadDirEntryErrOk) + { + _TIFFfree(data); + return(err); + } + *value=data; + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntrySlongArray(TIFF* tif, TIFFDirEntry* direntry, int32** value) +{ + enum TIFFReadDirEntryErr err; + uint32 count; + void* origdata; + int32* data; + switch (direntry->tdir_type) + { + case TIFF_BYTE: + case TIFF_SBYTE: + case TIFF_SHORT: + case TIFF_SSHORT: + case TIFF_LONG: + case TIFF_SLONG: + case TIFF_LONG8: + case TIFF_SLONG8: + break; + default: + return(TIFFReadDirEntryErrType); + } + err=TIFFReadDirEntryArray(tif,direntry,&count,4,&origdata); + if ((err!=TIFFReadDirEntryErrOk)||(origdata==0)) + { + *value=0; + return(err); + } + switch (direntry->tdir_type) + { + case TIFF_LONG: + { + uint32* m; + uint32 n; + m=(uint32*)origdata; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong((uint32*)m); + err=TIFFReadDirEntryCheckRangeSlongLong(*m); + if (err!=TIFFReadDirEntryErrOk) + { + _TIFFfree(origdata); + return(err); + } + m++; + } + *value=(int32*)origdata; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SLONG: + *value=(int32*)origdata; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong((uint32*)(*value),count); + return(TIFFReadDirEntryErrOk); + } + data=(int32*)_TIFFmalloc(count*4); + if (data==0) + { + _TIFFfree(origdata); + return(TIFFReadDirEntryErrAlloc); + } + switch (direntry->tdir_type) + { + case TIFF_BYTE: + { + uint8* ma; + int32* mb; + uint32 n; + ma=(uint8*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort(ma); + *mb++=(int32)(*ma++); + } + } + break; + case TIFF_SSHORT: + { + int16* ma; + int32* mb; + uint32 n; + ma=(int16*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)ma); + *mb++=(int32)(*ma++); + } + } + break; + case TIFF_LONG8: + { + uint64* ma; + int32* mb; + uint32 n; + ma=(uint64*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8(ma); + err=TIFFReadDirEntryCheckRangeSlongLong8(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(int32)(*ma++); + } + } + break; + case TIFF_SLONG8: + { + int64* ma; + int32* mb; + uint32 n; + ma=(int64*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8((uint64*)ma); + err=TIFFReadDirEntryCheckRangeSlongSlong8(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(int32)(*ma++); + } + } + break; + } + _TIFFfree(origdata); + if (err!=TIFFReadDirEntryErrOk) + { + _TIFFfree(data); + return(err); + } + *value=data; + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryLong8Array(TIFF* tif, TIFFDirEntry* direntry, uint64** value) +{ + enum TIFFReadDirEntryErr err; + uint32 count; + void* origdata; + uint64* data; + switch (direntry->tdir_type) + { + case TIFF_BYTE: + case TIFF_SBYTE: + case TIFF_SHORT: + case TIFF_SSHORT: + case TIFF_LONG: + case TIFF_SLONG: + case TIFF_LONG8: + case TIFF_SLONG8: + break; + default: + return(TIFFReadDirEntryErrType); + } + err=TIFFReadDirEntryArray(tif,direntry,&count,8,&origdata); + if ((err!=TIFFReadDirEntryErrOk)||(origdata==0)) + { + *value=0; + return(err); + } + switch (direntry->tdir_type) + { + case TIFF_LONG8: + *value=(uint64*)origdata; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong8(*value,count); + return(TIFFReadDirEntryErrOk); + case TIFF_SLONG8: + { + int64* m; + uint32 n; + m=(int64*)origdata; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8((uint64*)m); + err=TIFFReadDirEntryCheckRangeLong8Slong8(*m); + if (err!=TIFFReadDirEntryErrOk) + { + _TIFFfree(origdata); + return(err); + } + m++; + } + *value=(uint64*)origdata; + return(TIFFReadDirEntryErrOk); + } + } + data=(uint64*)_TIFFmalloc(count*8); + if (data==0) + { + _TIFFfree(origdata); + return(TIFFReadDirEntryErrAlloc); + } + switch (direntry->tdir_type) + { + case TIFF_BYTE: + { + uint8* ma; + uint64* mb; + uint32 n; + ma=(uint8*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort(ma); + *mb++=(uint64)(*ma++); + } + } + break; + case TIFF_SSHORT: + { + int16* ma; + uint64* mb; + uint32 n; + ma=(int16*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)ma); + err=TIFFReadDirEntryCheckRangeLong8Sshort(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(uint64)(*ma++); + } + } + break; + case TIFF_LONG: + { + uint32* ma; + uint64* mb; + uint32 n; + ma=(uint32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong(ma); + *mb++=(uint64)(*ma++); + } + } + break; + case TIFF_SLONG: + { + int32* ma; + uint64* mb; + uint32 n; + ma=(int32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong((uint32*)ma); + err=TIFFReadDirEntryCheckRangeLong8Slong(*ma); + if (err!=TIFFReadDirEntryErrOk) + break; + *mb++=(uint64)(*ma++); + } + } + break; + } + _TIFFfree(origdata); + if (err!=TIFFReadDirEntryErrOk) + { + _TIFFfree(data); + return(err); + } + *value=data; + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntrySlong8Array(TIFF* tif, TIFFDirEntry* direntry, int64** value) +{ + enum TIFFReadDirEntryErr err; + uint32 count; + void* origdata; + int64* data; + switch (direntry->tdir_type) + { + case TIFF_BYTE: + case TIFF_SBYTE: + case TIFF_SHORT: + case TIFF_SSHORT: + case TIFF_LONG: + case TIFF_SLONG: + case TIFF_LONG8: + case TIFF_SLONG8: + break; + default: + return(TIFFReadDirEntryErrType); + } + err=TIFFReadDirEntryArray(tif,direntry,&count,8,&origdata); + if ((err!=TIFFReadDirEntryErrOk)||(origdata==0)) + { + *value=0; + return(err); + } + switch (direntry->tdir_type) + { + case TIFF_LONG8: + { + uint64* m; + uint32 n; + m=(uint64*)origdata; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8(m); + err=TIFFReadDirEntryCheckRangeSlong8Long8(*m); + if (err!=TIFFReadDirEntryErrOk) + { + _TIFFfree(origdata); + return(err); + } + m++; + } + *value=(int64*)origdata; + return(TIFFReadDirEntryErrOk); + } + case TIFF_SLONG8: + *value=(int64*)origdata; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong8((uint64*)(*value),count); + return(TIFFReadDirEntryErrOk); + } + data=(int64*)_TIFFmalloc(count*8); + if (data==0) + { + _TIFFfree(origdata); + return(TIFFReadDirEntryErrAlloc); + } + switch (direntry->tdir_type) + { + case TIFF_BYTE: + { + uint8* ma; + int64* mb; + uint32 n; + ma=(uint8*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort(ma); + *mb++=(int64)(*ma++); + } + } + break; + case TIFF_SSHORT: + { + int16* ma; + int64* mb; + uint32 n; + ma=(int16*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)ma); + *mb++=(int64)(*ma++); + } + } + break; + case TIFF_LONG: + { + uint32* ma; + int64* mb; + uint32 n; + ma=(uint32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong(ma); + *mb++=(int64)(*ma++); + } + } + break; + case TIFF_SLONG: + { + int32* ma; + int64* mb; + uint32 n; + ma=(int32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong((uint32*)ma); + *mb++=(int64)(*ma++); + } + } + break; + } + _TIFFfree(origdata); + if (err!=TIFFReadDirEntryErrOk) + { + _TIFFfree(data); + return(err); + } + *value=data; + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryFloatArray(TIFF* tif, TIFFDirEntry* direntry, float** value) +{ + enum TIFFReadDirEntryErr err; + uint32 count; + void* origdata; + float* data; + switch (direntry->tdir_type) + { + case TIFF_BYTE: + case TIFF_SBYTE: + case TIFF_SHORT: + case TIFF_SSHORT: + case TIFF_LONG: + case TIFF_SLONG: + case TIFF_LONG8: + case TIFF_SLONG8: + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + case TIFF_FLOAT: + case TIFF_DOUBLE: + break; + default: + return(TIFFReadDirEntryErrType); + } + err=TIFFReadDirEntryArray(tif,direntry,&count,4,&origdata); + if ((err!=TIFFReadDirEntryErrOk)||(origdata==0)) + { + *value=0; + return(err); + } + switch (direntry->tdir_type) + { + case TIFF_FLOAT: + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong((uint32*)origdata,count); + TIFFCvtIEEEDoubleToNative(tif,count,(float*)origdata); + *value=(float*)origdata; + return(TIFFReadDirEntryErrOk); + } + data=(float*)_TIFFmalloc(count*sizeof(float)); + if (data==0) + { + _TIFFfree(origdata); + return(TIFFReadDirEntryErrAlloc); + } + switch (direntry->tdir_type) + { + case TIFF_BYTE: + { + uint8* ma; + float* mb; + uint32 n; + ma=(uint8*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort(ma); + *mb++=(float)(*ma++); + } + } + break; + case TIFF_SSHORT: + { + int16* ma; + float* mb; + uint32 n; + ma=(int16*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)ma); + *mb++=(float)(*ma++); + } + } + break; + case TIFF_LONG: + { + uint32* ma; + float* mb; + uint32 n; + ma=(uint32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong(ma); + *mb++=(float)(*ma++); + } + } + break; + case TIFF_SLONG: + { + int32* ma; + float* mb; + uint32 n; + ma=(int32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong((uint32*)ma); + *mb++=(float)(*ma++); + } + } + break; + case TIFF_LONG8: + { + uint64* ma; + float* mb; + uint32 n; + ma=(uint64*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8(ma); +#if defined(__WIN32__) && (_MSC_VER < 1500) + /* + * XXX: MSVC 6.0 does not support + * conversion of 64-bit integers into + * floating point values. + */ + *mb++ = _TIFFUInt64ToFloat(*ma++); +#else + *mb++ = (float)(*ma++); +#endif + } + } + break; + case TIFF_SLONG8: + { + int64* ma; + float* mb; + uint32 n; + ma=(int64*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8((uint64*)ma); + *mb++=(float)(*ma++); + } + } + break; + case TIFF_RATIONAL: + { + uint32* ma; + uint32 maa; + uint32 mab; + float* mb; + uint32 n; + ma=(uint32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong(ma); + maa=*ma++; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(ma); + mab=*ma++; + if (mab==0) + *mb++=0.0; + else + *mb++=(float)maa/(float)mab; + } + } + break; + case TIFF_SRATIONAL: + { + uint32* ma; + int32 maa; + uint32 mab; + float* mb; + uint32 n; + ma=(uint32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong(ma); + maa=*(int32*)ma; + ma++; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(ma); + mab=*ma++; + if (mab==0) + *mb++=0.0; + else + *mb++=(float)maa/(float)mab; + } + } + break; + case TIFF_DOUBLE: + { + double* ma; + float* mb; + uint32 n; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong8((uint64*)origdata,count); + TIFFCvtIEEEDoubleToNative(tif,count,(double*)origdata); + ma=(double*)origdata; + mb=data; + for (n=0; ntdir_type) + { + case TIFF_BYTE: + case TIFF_SBYTE: + case TIFF_SHORT: + case TIFF_SSHORT: + case TIFF_LONG: + case TIFF_SLONG: + case TIFF_LONG8: + case TIFF_SLONG8: + case TIFF_RATIONAL: + case TIFF_SRATIONAL: + case TIFF_FLOAT: + case TIFF_DOUBLE: + break; + default: + return(TIFFReadDirEntryErrType); + } + err=TIFFReadDirEntryArray(tif,direntry,&count,8,&origdata); + if ((err!=TIFFReadDirEntryErrOk)||(origdata==0)) + { + *value=0; + return(err); + } + switch (direntry->tdir_type) + { + case TIFF_DOUBLE: + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong8((uint64*)origdata,count); + TIFFCvtIEEEDoubleToNative(tif,count,(double*)origdata); + *value=(double*)origdata; + return(TIFFReadDirEntryErrOk); + } + data=(double*)_TIFFmalloc(count*sizeof(double)); + if (data==0) + { + _TIFFfree(origdata); + return(TIFFReadDirEntryErrAlloc); + } + switch (direntry->tdir_type) + { + case TIFF_BYTE: + { + uint8* ma; + double* mb; + uint32 n; + ma=(uint8*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort(ma); + *mb++=(double)(*ma++); + } + } + break; + case TIFF_SSHORT: + { + int16* ma; + double* mb; + uint32 n; + ma=(int16*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)ma); + *mb++=(double)(*ma++); + } + } + break; + case TIFF_LONG: + { + uint32* ma; + double* mb; + uint32 n; + ma=(uint32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong(ma); + *mb++=(double)(*ma++); + } + } + break; + case TIFF_SLONG: + { + int32* ma; + double* mb; + uint32 n; + ma=(int32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong((uint32*)ma); + *mb++=(double)(*ma++); + } + } + break; + case TIFF_LONG8: + { + uint64* ma; + double* mb; + uint32 n; + ma=(uint64*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8(ma); +#if defined(__WIN32__) && (_MSC_VER < 1500) + /* + * XXX: MSVC 6.0 does not support + * conversion of 64-bit integers into + * floating point values. + */ + *mb++ = _TIFFUInt64ToDouble(*ma++); +#else + *mb++ = (double)(*ma++); +#endif + } + } + break; + case TIFF_SLONG8: + { + int64* ma; + double* mb; + uint32 n; + ma=(int64*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong8((uint64*)ma); + *mb++=(double)(*ma++); + } + } + break; + case TIFF_RATIONAL: + { + uint32* ma; + uint32 maa; + uint32 mab; + double* mb; + uint32 n; + ma=(uint32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong(ma); + maa=*ma++; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(ma); + mab=*ma++; + if (mab==0) + *mb++=0.0; + else + *mb++=(double)maa/(double)mab; + } + } + break; + case TIFF_SRATIONAL: + { + uint32* ma; + int32 maa; + uint32 mab; + double* mb; + uint32 n; + ma=(uint32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong(ma); + maa=*(int32*)ma; + ma++; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(ma); + mab=*ma++; + if (mab==0) + *mb++=0.0; + else + *mb++=(double)maa/(double)mab; + } + } + break; + case TIFF_FLOAT: + { + float* ma; + double* mb; + uint32 n; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong((uint32*)origdata,count); + TIFFCvtIEEEFloatToNative(tif,count,(float*)origdata); + ma=(float*)origdata; + mb=data; + for (n=0; ntdir_type) + { + case TIFF_LONG: + case TIFF_LONG8: + case TIFF_IFD: + case TIFF_IFD8: + break; + default: + return(TIFFReadDirEntryErrType); + } + err=TIFFReadDirEntryArray(tif,direntry,&count,8,&origdata); + if ((err!=TIFFReadDirEntryErrOk)||(origdata==0)) + { + *value=0; + return(err); + } + switch (direntry->tdir_type) + { + case TIFF_LONG8: + case TIFF_IFD8: + *value=(uint64*)origdata; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong8(*value,count); + return(TIFFReadDirEntryErrOk); + } + data=(uint64*)_TIFFmalloc(count*8); + if (data==0) + { + _TIFFfree(origdata); + return(TIFFReadDirEntryErrAlloc); + } + switch (direntry->tdir_type) + { + case TIFF_LONG: + case TIFF_IFD: + { + uint32* ma; + uint64* mb; + uint32 n; + ma=(uint32*)origdata; + mb=data; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabLong(ma); + *mb++=(uint64)(*ma++); + } + } + break; + } + _TIFFfree(origdata); + if (err!=TIFFReadDirEntryErrOk) + { + _TIFFfree(data); + return(err); + } + *value=data; + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryPersampleShort(TIFF* tif, TIFFDirEntry* direntry, uint16* value) +{ + enum TIFFReadDirEntryErr err; + uint16* m; + uint16* na; + uint16 nb; + if (direntry->tdir_count<(uint64)tif->tif_dir.td_samplesperpixel) + return(TIFFReadDirEntryErrCount); + err=TIFFReadDirEntryShortArray(tif,direntry,&m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + na=m; + nb=tif->tif_dir.td_samplesperpixel; + *value=*na++; + nb--; + while (nb>0) + { + if (*na++!=*value) + { + err=TIFFReadDirEntryErrPsdif; + break; + } + nb--; + } + _TIFFfree(m); + return(err); +} + +#if 0 +static enum TIFFReadDirEntryErr TIFFReadDirEntryPersampleDouble(TIFF* tif, TIFFDirEntry* direntry, double* value) +{ + enum TIFFReadDirEntryErr err; + double* m; + double* na; + uint16 nb; + if (direntry->tdir_count<(uint64)tif->tif_dir.td_samplesperpixel) + return(TIFFReadDirEntryErrCount); + err=TIFFReadDirEntryDoubleArray(tif,direntry,&m); + if (err!=TIFFReadDirEntryErrOk) + return(err); + na=m; + nb=tif->tif_dir.td_samplesperpixel; + *value=*na++; + nb--; + while (nb>0) + { + if (*na++!=*value) + { + err=TIFFReadDirEntryErrPsdif; + break; + } + nb--; + } + _TIFFfree(m); + return(err); +} +#endif + +static void TIFFReadDirEntryCheckedByte(TIFF* tif, TIFFDirEntry* direntry, uint8* value) +{ + (void) tif; + *value=*(uint8*)(&direntry->tdir_offset); +} + +static void TIFFReadDirEntryCheckedSbyte(TIFF* tif, TIFFDirEntry* direntry, int8* value) +{ + (void) tif; + *value=*(int8*)(&direntry->tdir_offset); +} + +static void TIFFReadDirEntryCheckedShort(TIFF* tif, TIFFDirEntry* direntry, uint16* value) +{ + *value = direntry->tdir_offset.toff_short; + /* *value=*(uint16*)(&direntry->tdir_offset); */ + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabShort(value); +} + +static void TIFFReadDirEntryCheckedSshort(TIFF* tif, TIFFDirEntry* direntry, int16* value) +{ + *value=*(int16*)(&direntry->tdir_offset); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)value); +} + +static void TIFFReadDirEntryCheckedLong(TIFF* tif, TIFFDirEntry* direntry, uint32* value) +{ + *value=*(uint32*)(&direntry->tdir_offset); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(value); +} + +static void TIFFReadDirEntryCheckedSlong(TIFF* tif, TIFFDirEntry* direntry, int32* value) +{ + *value=*(int32*)(&direntry->tdir_offset); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong((uint32*)value); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckedLong8(TIFF* tif, TIFFDirEntry* direntry, uint64* value) +{ + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + enum TIFFReadDirEntryErr err; + uint32 offset = direntry->tdir_offset.toff_long; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(&offset); + err=TIFFReadDirEntryData(tif,offset,8,value); + if (err!=TIFFReadDirEntryErrOk) + return(err); + } + else + *value = direntry->tdir_offset.toff_long8; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8(value); + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckedSlong8(TIFF* tif, TIFFDirEntry* direntry, int64* value) +{ + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + enum TIFFReadDirEntryErr err; + uint32 offset = direntry->tdir_offset.toff_long; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(&offset); + err=TIFFReadDirEntryData(tif,offset,8,value); + if (err!=TIFFReadDirEntryErrOk) + return(err); + } + else + *value=*(int64*)(&direntry->tdir_offset); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8((uint64*)value); + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckedRational(TIFF* tif, TIFFDirEntry* direntry, double* value) +{ + UInt64Aligned_t m; + + assert(sizeof(double)==8); + assert(sizeof(uint64)==8); + assert(sizeof(uint32)==4); + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + enum TIFFReadDirEntryErr err; + uint32 offset = direntry->tdir_offset.toff_long; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(&offset); + err=TIFFReadDirEntryData(tif,offset,8,m.i); + if (err!=TIFFReadDirEntryErrOk) + return(err); + } + else + m.l = direntry->tdir_offset.toff_long8; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong(m.i,2); + if (m.i[0]==0) + *value=0.0; + else + *value=(double)m.i[0]/(double)m.i[1]; + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckedSrational(TIFF* tif, TIFFDirEntry* direntry, double* value) +{ + UInt64Aligned_t m; + assert(sizeof(double)==8); + assert(sizeof(uint64)==8); + assert(sizeof(int32)==4); + assert(sizeof(uint32)==4); + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + enum TIFFReadDirEntryErr err; + uint32 offset = direntry->tdir_offset.toff_long; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(&offset); + err=TIFFReadDirEntryData(tif,offset,8,m.i); + if (err!=TIFFReadDirEntryErrOk) + return(err); + } + else + m.l=direntry->tdir_offset.toff_long8; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong(m.i,2); + if ((int32)m.i[0]==0) + *value=0.0; + else + *value=(double)((int32)m.i[0])/(double)m.i[1]; + return(TIFFReadDirEntryErrOk); +} + +static void TIFFReadDirEntryCheckedFloat(TIFF* tif, TIFFDirEntry* direntry, float* value) +{ + union + { + float f; + uint32 i; + } float_union; + assert(sizeof(float)==4); + assert(sizeof(uint32)==4); + assert(sizeof(float_union)==4); + float_union.i=*(uint32*)(&direntry->tdir_offset); + *value=float_union.f; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong((uint32*)value); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckedDouble(TIFF* tif, TIFFDirEntry* direntry, double* value) +{ + assert(sizeof(double)==8); + assert(sizeof(uint64)==8); + assert(sizeof(UInt64Aligned_t)==8); + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + enum TIFFReadDirEntryErr err; + uint32 offset = direntry->tdir_offset.toff_long; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(&offset); + err=TIFFReadDirEntryData(tif,offset,8,value); + if (err!=TIFFReadDirEntryErrOk) + return(err); + } + else + { + UInt64Aligned_t uint64_union; + uint64_union.l=direntry->tdir_offset.toff_long8; + *value=uint64_union.d; + } + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8((uint64*)value); + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeByteSbyte(int8 value) +{ + if (value<0) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeByteShort(uint16 value) +{ + if (value>0xFF) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeByteSshort(int16 value) +{ + if ((value<0)||(value>0xFF)) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeByteLong(uint32 value) +{ + if (value>0xFF) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeByteSlong(int32 value) +{ + if ((value<0)||(value>0xFF)) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeByteLong8(uint64 value) +{ + if (value>0xFF) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeByteSlong8(int64 value) +{ + if ((value<0)||(value>0xFF)) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSbyteByte(uint8 value) +{ + if (value>0x7F) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSbyteShort(uint16 value) +{ + if (value>0x7F) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSbyteSshort(int16 value) +{ + if ((value<-0x80)||(value>0x7F)) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSbyteLong(uint32 value) +{ + if (value>0x7F) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSbyteSlong(int32 value) +{ + if ((value<-0x80)||(value>0x7F)) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSbyteLong8(uint64 value) +{ + if (value>0x7F) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSbyteSlong8(int64 value) +{ + if ((value<-0x80)||(value>0x7F)) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeShortSbyte(int8 value) +{ + if (value<0) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeShortSshort(int16 value) +{ + if (value<0) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeShortLong(uint32 value) +{ + if (value>0xFFFF) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeShortSlong(int32 value) +{ + if ((value<0)||(value>0xFFFF)) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeShortLong8(uint64 value) +{ + if (value>0xFFFF) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeShortSlong8(int64 value) +{ + if ((value<0)||(value>0xFFFF)) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSshortShort(uint16 value) +{ + if (value>0x7FFF) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSshortLong(uint32 value) +{ + if (value>0x7FFF) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSshortSlong(int32 value) +{ + if ((value<-0x8000)||(value>0x7FFF)) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSshortLong8(uint64 value) +{ + if (value>0x7FFF) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeSshortSlong8(int64 value) +{ + if ((value<-0x8000)||(value>0x7FFF)) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeLongSbyte(int8 value) +{ + if (value<0) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeLongSshort(int16 value) +{ + if (value<0) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckRangeLongSlong(int32 value) +{ + if (value<0) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +/* + * Largest 32-bit unsigned integer value. + */ +#if defined(__WIN32__) && defined(_MSC_VER) +# define TIFF_UINT32_MAX 0xFFFFFFFFI64 +#else +# define TIFF_UINT32_MAX 0xFFFFFFFFLL +#endif + +static enum TIFFReadDirEntryErr +TIFFReadDirEntryCheckRangeLongLong8(uint64 value) +{ + if (value > TIFF_UINT32_MAX) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr +TIFFReadDirEntryCheckRangeLongSlong8(int64 value) +{ + if ((value<0) || (value > TIFF_UINT32_MAX)) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +#undef TIFF_UINT32_MAX + +static enum TIFFReadDirEntryErr +TIFFReadDirEntryCheckRangeSlongLong(uint32 value) +{ + if (value > 0x7FFFFFFFUL) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr +TIFFReadDirEntryCheckRangeSlongLong8(uint64 value) +{ + if (value > 0x7FFFFFFFUL) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr +TIFFReadDirEntryCheckRangeSlongSlong8(int64 value) +{ + if ((value < 0L-0x80000000L) || (value > 0x7FFFFFFFL)) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr +TIFFReadDirEntryCheckRangeLong8Sbyte(int8 value) +{ + if (value < 0) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr +TIFFReadDirEntryCheckRangeLong8Sshort(int16 value) +{ + if (value < 0) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr +TIFFReadDirEntryCheckRangeLong8Slong(int32 value) +{ + if (value < 0) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +static enum TIFFReadDirEntryErr +TIFFReadDirEntryCheckRangeLong8Slong8(int64 value) +{ + if (value < 0) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +/* + * Largest 64-bit signed integer value. + */ +#if defined(__WIN32__) && defined(_MSC_VER) +# define TIFF_INT64_MAX 0x7FFFFFFFFFFFFFFFI64 +#else +# define TIFF_INT64_MAX 0x7FFFFFFFFFFFFFFFLL +#endif + +static enum TIFFReadDirEntryErr +TIFFReadDirEntryCheckRangeSlong8Long8(uint64 value) +{ + if (value > TIFF_INT64_MAX) + return(TIFFReadDirEntryErrRange); + else + return(TIFFReadDirEntryErrOk); +} + +#undef TIFF_INT64_MAX + +static enum TIFFReadDirEntryErr +TIFFReadDirEntryData(TIFF* tif, uint64 offset, tmsize_t size, void* dest) +{ + assert(size>0); + if (!isMapped(tif)) { + if (!SeekOK(tif,offset)) + return(TIFFReadDirEntryErrIo); + if (!ReadOK(tif,dest,size)) + return(TIFFReadDirEntryErrIo); + } else { + size_t ma,mb; + ma=(size_t)offset; + mb=ma+size; + if (((uint64)ma!=offset) + || (mb < ma) + || (mb - ma != (size_t) size) + || (mb < (size_t)size) + || (mb > (size_t)tif->tif_size) + ) + return(TIFFReadDirEntryErrIo); + _TIFFmemcpy(dest,tif->tif_base+ma,size); + } + return(TIFFReadDirEntryErrOk); +} + +static void TIFFReadDirEntryOutputErr(TIFF* tif, enum TIFFReadDirEntryErr err, const char* module, const char* tagname, int recover) +{ + if (!recover) { + switch (err) { + case TIFFReadDirEntryErrCount: + TIFFErrorExt(tif->tif_clientdata, module, + "Incorrect count for \"%s\"", + tagname); + break; + case TIFFReadDirEntryErrType: + TIFFErrorExt(tif->tif_clientdata, module, + "Incompatible type for \"%s\"", + tagname); + break; + case TIFFReadDirEntryErrIo: + TIFFErrorExt(tif->tif_clientdata, module, + "IO error during reading of \"%s\"", + tagname); + break; + case TIFFReadDirEntryErrRange: + TIFFErrorExt(tif->tif_clientdata, module, + "Incorrect value for \"%s\"", + tagname); + break; + case TIFFReadDirEntryErrPsdif: + TIFFErrorExt(tif->tif_clientdata, module, + "Cannot handle different values per sample for \"%s\"", + tagname); + break; + case TIFFReadDirEntryErrSizesan: + TIFFErrorExt(tif->tif_clientdata, module, + "Sanity check on size of \"%s\" value failed", + tagname); + break; + case TIFFReadDirEntryErrAlloc: + TIFFErrorExt(tif->tif_clientdata, module, + "Out of memory reading of \"%s\"", + tagname); + break; + default: + assert(0); /* we should never get here */ + break; + } + } else { + switch (err) { + case TIFFReadDirEntryErrCount: + TIFFErrorExt(tif->tif_clientdata, module, + "Incorrect count for \"%s\"; tag ignored", + tagname); + break; + case TIFFReadDirEntryErrType: + TIFFWarningExt(tif->tif_clientdata, module, + "Incompatible type for \"%s\"; tag ignored", + tagname); + break; + case TIFFReadDirEntryErrIo: + TIFFWarningExt(tif->tif_clientdata, module, + "IO error during reading of \"%s\"; tag ignored", + tagname); + break; + case TIFFReadDirEntryErrRange: + TIFFWarningExt(tif->tif_clientdata, module, + "Incorrect value for \"%s\"; tag ignored", + tagname); + break; + case TIFFReadDirEntryErrPsdif: + TIFFWarningExt(tif->tif_clientdata, module, + "Cannot handle different values per sample for \"%s\"; tag ignored", + tagname); + break; + case TIFFReadDirEntryErrSizesan: + TIFFWarningExt(tif->tif_clientdata, module, + "Sanity check on size of \"%s\" value failed; tag ignored", + tagname); + break; + case TIFFReadDirEntryErrAlloc: + TIFFWarningExt(tif->tif_clientdata, module, + "Out of memory reading of \"%s\"; tag ignored", + tagname); + break; + default: + assert(0); /* we should never get here */ + break; + } + } +} /* * Read the next TIFF directory from a file and convert it to the internal @@ -74,47 +3423,49 @@ int TIFFReadDirectory(TIFF* tif) { static const char module[] = "TIFFReadDirectory"; - - int n; - TIFFDirectory* td; - TIFFDirEntry *dp, *dir = NULL; - uint16 iv; - uint32 v; - const TIFFFieldInfo* fip; - size_t fix; + TIFFDirEntry* dir; uint16 dircount; - int diroutoforderwarning = 0, compressionknown = 0; - int haveunknowntags = 0; - - tif->tif_diroff = tif->tif_nextdiroff; - /* - * Check whether we have the last offset or bad offset (IFD looping). - */ - if (!TIFFCheckDirOffset(tif, tif->tif_nextdiroff)) - return 0; - /* - * Cleanup any previous compression state. - */ - (*tif->tif_cleanup)(tif); + TIFFDirEntry* dp; + uint16 di; + const TIFFField* fip; + uint32 fii=FAILED_FII; + toff_t nextdiroff; + tif->tif_diroff=tif->tif_nextdiroff; + if (!TIFFCheckDirOffset(tif,tif->tif_nextdiroff)) + return 0; /* last offset or bad offset (IFD looping) */ + (*tif->tif_cleanup)(tif); /* cleanup any previous compression state */ tif->tif_curdir++; - dircount = TIFFFetchDirectory(tif, tif->tif_nextdiroff, - &dir, &tif->tif_nextdiroff); - if (!dircount) { - TIFFErrorExt(tif->tif_clientdata, module, - "%s: Failed to read directory at offset %u", - tif->tif_name, tif->tif_nextdiroff); + nextdiroff = tif->tif_nextdiroff; + dircount=TIFFFetchDirectory(tif,nextdiroff,&dir,&tif->tif_nextdiroff); + if (!dircount) + { + TIFFErrorExt(tif->tif_clientdata,module, + "Failed to read directory at offset " TIFF_UINT64_FORMAT,nextdiroff); return 0; } + TIFFReadDirectoryCheckOrder(tif,dir,dircount); - tif->tif_flags &= ~TIFF_BEENWRITING; /* reset before new dir */ - /* - * Setup default value and then make a pass over - * the fields to check type and tag information, - * and to extract info required to size data - * structures. A second pass is made afterwards - * to read in everthing not taken in the first pass. - */ - td = &tif->tif_dir; + /* + * Mark duplicates of any tag to be ignored (bugzilla 1994) + * to avoid certain pathological problems. + */ + { + TIFFDirEntry* ma; + uint16 mb; + for (ma=dir, mb=0; mbtdir_tag==na->tdir_tag) + na->tdir_tag=IGNORE; + } + } + } + + tif->tif_flags &= ~TIFF_BEENWRITING; /* reset before new dir */ + tif->tif_flags &= ~TIFF_BUF4WRITE; /* reset before new dir */ /* free any old stuff and reinit */ TIFFFreeDirectory(tif); TIFFDefaultDirectory(tif); @@ -124,13 +3475,14 @@ TIFFReadDirectory(TIFF* tif) * Thus we setup a default value here, even though * the TIFF spec says there is no default value. */ - TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); - + TIFFSetField(tif,TIFFTAG_PLANARCONFIG,PLANARCONFIG_CONTIG); /* - * Sigh, we must make a separate pass through the - * directory for the following reason: - * - * We must process the Compression tag in the first pass + * Setup default value and then make a pass over + * the fields to check type and tag information, + * and to extract info required to size data + * structures. A second pass is made afterwards + * to read in everthing not taken in the first pass. + * But we must process the Compression tag first * in order to merge in codec-private tag definitions (otherwise * we may get complaints about unknown tags). However, the * Compression tag may be dependent on the SamplesPerPixel @@ -140,213 +3492,106 @@ TIFFReadDirectory(TIFF* tif) * tag value then we may end up ignoring the Compression tag * value because it has an incorrect count value (if the * true value of SamplesPerPixel is not 1). - * - * It sure would have been nice if Aldus had really thought - * this stuff through carefully. */ - for (dp = dir, n = dircount; n > 0; n--, dp++) { - if (tif->tif_flags & TIFF_SWAB) { - TIFFSwabArrayOfShort(&dp->tdir_tag, 2); - TIFFSwabArrayOfLong(&dp->tdir_count, 2); - } - if (dp->tdir_tag == TIFFTAG_SAMPLESPERPIXEL) { - if (!TIFFFetchNormalTag(tif, dp)) - goto bad; - dp->tdir_tag = IGNORE; + dp=TIFFReadDirectoryFindEntry(tif,dir,dircount,TIFFTAG_SAMPLESPERPIXEL); + if (dp) + { + if (!TIFFFetchNormalTag(tif,dp,0)) + goto bad; + dp->tdir_tag=IGNORE; + } + dp=TIFFReadDirectoryFindEntry(tif,dir,dircount,TIFFTAG_COMPRESSION); + if (dp) + { + /* + * The 5.0 spec says the Compression tag has one value, while + * earlier specs say it has one value per sample. Because of + * this, we accept the tag if one value is supplied with either + * count. + */ + uint16 value; + enum TIFFReadDirEntryErr err; + err=TIFFReadDirEntryShort(tif,dp,&value); + if (err==TIFFReadDirEntryErrCount) + err=TIFFReadDirEntryPersampleShort(tif,dp,&value); + if (err!=TIFFReadDirEntryErrOk) + { + TIFFReadDirEntryOutputErr(tif,err,module,"Compression",0); + goto bad; } + if (!TIFFSetField(tif,TIFFTAG_COMPRESSION,value)) + goto bad; + dp->tdir_tag=IGNORE; + } + else + { + if (!TIFFSetField(tif,TIFFTAG_COMPRESSION,COMPRESSION_NONE)) + goto bad; } /* * First real pass over the directory. */ - fix = 0; - for (dp = dir, n = dircount; n > 0; n--, dp++) { - - if (dp->tdir_tag == IGNORE) - continue; - if (fix >= tif->tif_nfields) - fix = 0; - - /* - * Silicon Beach (at least) writes unordered - * directory tags (violating the spec). Handle - * it here, but be obnoxious (maybe they'll fix it?). - */ - if (dp->tdir_tag < tif->tif_fieldinfo[fix]->field_tag) { - if (!diroutoforderwarning) { + for (di=0, dp=dir; ditdir_tag!=IGNORE) + { + TIFFReadDirectoryFindFieldInfo(tif,dp->tdir_tag,&fii); + if (fii == FAILED_FII) + { TIFFWarningExt(tif->tif_clientdata, module, - "%s: invalid TIFF directory; tags are not sorted in ascending order", - tif->tif_name); - diroutoforderwarning = 1; - } - fix = 0; /* O(n^2) */ - } - while (fix < tif->tif_nfields && - tif->tif_fieldinfo[fix]->field_tag < dp->tdir_tag) - fix++; - if (fix >= tif->tif_nfields || - tif->tif_fieldinfo[fix]->field_tag != dp->tdir_tag) { - /* Unknown tag ... we'll deal with it below */ - haveunknowntags = 1; - continue; - } - /* - * Null out old tags that we ignore. - */ - if (tif->tif_fieldinfo[fix]->field_bit == FIELD_IGNORE) { - ignore: - dp->tdir_tag = IGNORE; - continue; - } - /* - * Check data type. - */ - fip = tif->tif_fieldinfo[fix]; - while (dp->tdir_type != (unsigned short) fip->field_type - && fix < tif->tif_nfields) { - if (fip->field_type == TIFF_ANY) /* wildcard */ - break; - fip = tif->tif_fieldinfo[++fix]; - if (fix >= tif->tif_nfields || - fip->field_tag != dp->tdir_tag) { - TIFFWarningExt(tif->tif_clientdata, module, - "%s: wrong data type %d for \"%s\"; tag ignored", - tif->tif_name, dp->tdir_type, - tif->tif_fieldinfo[fix-1]->field_name); - goto ignore; - } - } - /* - * Check count if known in advance. - */ - if (fip->field_readcount != TIFF_VARIABLE - && fip->field_readcount != TIFF_VARIABLE2) { - uint32 expected = (fip->field_readcount == TIFF_SPP) ? - (uint32) td->td_samplesperpixel : - (uint32) fip->field_readcount; - if (!CheckDirCount(tif, dp, expected)) - goto ignore; - } - - switch (dp->tdir_tag) { - case TIFFTAG_COMPRESSION: - /* - * The 5.0 spec says the Compression tag has - * one value, while earlier specs say it has - * one value per sample. Because of this, we - * accept the tag if one value is supplied. - */ - if (dp->tdir_count == 1) { - v = TIFFExtractData(tif, - dp->tdir_type, dp->tdir_offset); - if (!TIFFSetField(tif, dp->tdir_tag, (uint16)v)) - goto bad; - else - compressionknown = 1; - break; - /* XXX: workaround for broken TIFFs */ - } else if (dp->tdir_type == TIFF_LONG) { - if (!TIFFFetchPerSampleLongs(tif, dp, &v) || - !TIFFSetField(tif, dp->tdir_tag, (uint16)v)) - goto bad; - } else { - if (!TIFFFetchPerSampleShorts(tif, dp, &iv) - || !TIFFSetField(tif, dp->tdir_tag, iv)) - goto bad; - } - dp->tdir_tag = IGNORE; - break; - case TIFFTAG_STRIPOFFSETS: - case TIFFTAG_STRIPBYTECOUNTS: - case TIFFTAG_TILEOFFSETS: - case TIFFTAG_TILEBYTECOUNTS: - TIFFSetFieldBit(tif, fip->field_bit); - break; - case TIFFTAG_IMAGEWIDTH: - case TIFFTAG_IMAGELENGTH: - case TIFFTAG_IMAGEDEPTH: - case TIFFTAG_TILELENGTH: - case TIFFTAG_TILEWIDTH: - case TIFFTAG_TILEDEPTH: - case TIFFTAG_PLANARCONFIG: - case TIFFTAG_ROWSPERSTRIP: - case TIFFTAG_EXTRASAMPLES: - if (!TIFFFetchNormalTag(tif, dp)) - goto bad; - dp->tdir_tag = IGNORE; - break; - } - } - - /* - * If we saw any unknown tags, make an extra pass over the directory - * to deal with them. This must be done separately because the tags - * could have become known when we registered a codec after finding - * the Compression tag. In a correctly-sorted directory there's - * no problem because Compression will come before any codec-private - * tags, but if the sorting is wrong that might not hold. - */ - if (haveunknowntags) { - fix = 0; - for (dp = dir, n = dircount; n > 0; n--, dp++) { - if (dp->tdir_tag == IGNORE) - continue; - if (fix >= tif->tif_nfields || - dp->tdir_tag < tif->tif_fieldinfo[fix]->field_tag) - fix = 0; /* O(n^2) */ - while (fix < tif->tif_nfields && - tif->tif_fieldinfo[fix]->field_tag < dp->tdir_tag) - fix++; - if (fix >= tif->tif_nfields || - tif->tif_fieldinfo[fix]->field_tag != dp->tdir_tag) { - - TIFFWarningExt(tif->tif_clientdata, - module, - "%s: unknown field with tag %d (0x%x) encountered", - tif->tif_name, - dp->tdir_tag, - dp->tdir_tag); - - if (!_TIFFMergeFieldInfo(tif, - _TIFFCreateAnonFieldInfo(tif, + "Unknown field with tag %d (0x%x) encountered", + dp->tdir_tag,dp->tdir_tag); + /* the following knowingly leaks the + anonymous field structure */ + if (!_TIFFMergeFields(tif, + _TIFFCreateAnonField(tif, dp->tdir_tag, (TIFFDataType) dp->tdir_type), - 1)) - { + 1)) { TIFFWarningExt(tif->tif_clientdata, - module, - "Registering anonymous field with tag %d (0x%x) failed", - dp->tdir_tag, - dp->tdir_tag); - dp->tdir_tag = IGNORE; - continue; - } - fix = 0; - while (fix < tif->tif_nfields && - tif->tif_fieldinfo[fix]->field_tag < dp->tdir_tag) - fix++; - } - /* - * Check data type. - */ - fip = tif->tif_fieldinfo[fix]; - while (dp->tdir_type != (unsigned short) fip->field_type - && fix < tif->tif_nfields) { - if (fip->field_type == TIFF_ANY) /* wildcard */ - break; - fip = tif->tif_fieldinfo[++fix]; - if (fix >= tif->tif_nfields || - fip->field_tag != dp->tdir_tag) { - TIFFWarningExt(tif->tif_clientdata, module, - "%s: wrong data type %d for \"%s\"; tag ignored", - tif->tif_name, dp->tdir_type, - tif->tif_fieldinfo[fix-1]->field_name); - dp->tdir_tag = IGNORE; - break; + module, + "Registering anonymous field with tag %d (0x%x) failed", + dp->tdir_tag, + dp->tdir_tag); + dp->tdir_tag=IGNORE; + } else { + TIFFReadDirectoryFindFieldInfo(tif,dp->tdir_tag,&fii); + assert(fii != FAILED_FII); + } + } + } + if (dp->tdir_tag!=IGNORE) + { + fip=tif->tif_fields[fii]; + if (fip->field_bit==FIELD_IGNORE) + dp->tdir_tag=IGNORE; + else + { + switch (dp->tdir_tag) + { + case TIFFTAG_STRIPOFFSETS: + case TIFFTAG_STRIPBYTECOUNTS: + case TIFFTAG_TILEOFFSETS: + case TIFFTAG_TILEBYTECOUNTS: + TIFFSetFieldBit(tif,fip->field_bit); + break; + case TIFFTAG_IMAGEWIDTH: + case TIFFTAG_IMAGELENGTH: + case TIFFTAG_IMAGEDEPTH: + case TIFFTAG_TILELENGTH: + case TIFFTAG_TILEWIDTH: + case TIFFTAG_TILEDEPTH: + case TIFFTAG_PLANARCONFIG: + case TIFFTAG_ROWSPERSTRIP: + case TIFFTAG_EXTRASAMPLES: + if (!TIFFFetchNormalTag(tif,dp,0)) + goto bad; + dp->tdir_tag=IGNORE; + break; + } } } - } } - /* * XXX: OJPEG hack. * If a) compression is OJPEG, b) planarconfig tag says it's separate, @@ -355,55 +3600,59 @@ TIFFReadDirectory(TIFF* tif) * that the buggy implementation of the buggy compression scheme * matches contig planarconfig best. So we 'fix-up' the tag here */ - if ((td->td_compression==COMPRESSION_OJPEG) && - (td->td_planarconfig==PLANARCONFIG_SEPARATE)) { - dp = TIFFReadDirectoryFind(dir,dircount,TIFFTAG_STRIPOFFSETS); - if ((dp!=0) && (dp->tdir_count==1)) { - dp = TIFFReadDirectoryFind(dir, dircount, - TIFFTAG_STRIPBYTECOUNTS); - if ((dp!=0) && (dp->tdir_count==1)) { - td->td_planarconfig=PLANARCONFIG_CONTIG; - TIFFWarningExt(tif->tif_clientdata, - "TIFFReadDirectory", - "Planarconfig tag value assumed incorrect, " - "assuming data is contig instead of chunky"); + if ((tif->tif_dir.td_compression==COMPRESSION_OJPEG)&& + (tif->tif_dir.td_planarconfig==PLANARCONFIG_SEPARATE)) + { + if (!_TIFFFillStriles(tif)) + goto bad; + dp=TIFFReadDirectoryFindEntry(tif,dir,dircount,TIFFTAG_STRIPOFFSETS); + if ((dp!=0)&&(dp->tdir_count==1)) + { + dp=TIFFReadDirectoryFindEntry(tif,dir,dircount, + TIFFTAG_STRIPBYTECOUNTS); + if ((dp!=0)&&(dp->tdir_count==1)) + { + tif->tif_dir.td_planarconfig=PLANARCONFIG_CONTIG; + TIFFWarningExt(tif->tif_clientdata,module, + "Planarconfig tag value assumed incorrect, " + "assuming data is contig instead of chunky"); } } } - /* * Allocate directory structure and setup defaults. */ - if (!TIFFFieldSet(tif, FIELD_IMAGEDIMENSIONS)) { - MissingRequired(tif, "ImageLength"); + if (!TIFFFieldSet(tif,FIELD_IMAGEDIMENSIONS)) + { + MissingRequired(tif,"ImageLength"); goto bad; } - /* + /* * Setup appropriate structures (by strip or by tile) */ if (!TIFFFieldSet(tif, FIELD_TILEDIMENSIONS)) { - td->td_nstrips = TIFFNumberOfStrips(tif); - td->td_tilewidth = td->td_imagewidth; - td->td_tilelength = td->td_rowsperstrip; - td->td_tiledepth = td->td_imagedepth; + tif->tif_dir.td_nstrips = TIFFNumberOfStrips(tif); + tif->tif_dir.td_tilewidth = tif->tif_dir.td_imagewidth; + tif->tif_dir.td_tilelength = tif->tif_dir.td_rowsperstrip; + tif->tif_dir.td_tiledepth = tif->tif_dir.td_imagedepth; tif->tif_flags &= ~TIFF_ISTILED; } else { - td->td_nstrips = TIFFNumberOfTiles(tif); + tif->tif_dir.td_nstrips = TIFFNumberOfTiles(tif); tif->tif_flags |= TIFF_ISTILED; } - if (!td->td_nstrips) { + if (!tif->tif_dir.td_nstrips) { TIFFErrorExt(tif->tif_clientdata, module, - "%s: cannot handle zero number of %s", - tif->tif_name, isTiled(tif) ? "tiles" : "strips"); + "Cannot handle zero number of %s", + isTiled(tif) ? "tiles" : "strips"); goto bad; } - td->td_stripsperimage = td->td_nstrips; - if (td->td_planarconfig == PLANARCONFIG_SEPARATE) - td->td_stripsperimage /= td->td_samplesperpixel; + tif->tif_dir.td_stripsperimage = tif->tif_dir.td_nstrips; + if (tif->tif_dir.td_planarconfig == PLANARCONFIG_SEPARATE) + tif->tif_dir.td_stripsperimage /= tif->tif_dir.td_samplesperpixel; if (!TIFFFieldSet(tif, FIELD_STRIPOFFSETS)) { - if ((td->td_compression==COMPRESSION_OJPEG) && + if ((tif->tif_dir.td_compression==COMPRESSION_OJPEG) && (isTiled(tif)==0) && - (td->td_nstrips==1)) { + (tif->tif_dir.td_nstrips==1)) { /* * XXX: OJPEG hack. * If a) compression is OJPEG, b) it's not a tiled TIFF, @@ -419,137 +3668,150 @@ TIFFReadDirectory(TIFF* tif) goto bad; } } - /* * Second pass: extract other information. */ - for (dp = dir, n = dircount; n > 0; n--, dp++) { - if (dp->tdir_tag == IGNORE) - continue; - switch (dp->tdir_tag) { - case TIFFTAG_MINSAMPLEVALUE: - case TIFFTAG_MAXSAMPLEVALUE: - case TIFFTAG_BITSPERSAMPLE: - case TIFFTAG_DATATYPE: - case TIFFTAG_SAMPLEFORMAT: - /* - * The 5.0 spec says the Compression tag has - * one value, while earlier specs say it has - * one value per sample. Because of this, we - * accept the tag if one value is supplied. - * - * The MinSampleValue, MaxSampleValue, BitsPerSample - * DataType and SampleFormat tags are supposed to be - * written as one value/sample, but some vendors - * incorrectly write one value only -- so we accept - * that as well (yech). Other vendors write correct - * value for NumberOfSamples, but incorrect one for - * BitsPerSample and friends, and we will read this - * too. - */ - if (dp->tdir_count == 1) { - v = TIFFExtractData(tif, - dp->tdir_type, dp->tdir_offset); - if (!TIFFSetField(tif, dp->tdir_tag, (uint16)v)) - goto bad; - /* XXX: workaround for broken TIFFs */ - } else if (dp->tdir_tag == TIFFTAG_BITSPERSAMPLE - && dp->tdir_type == TIFF_LONG) { - if (!TIFFFetchPerSampleLongs(tif, dp, &v) || - !TIFFSetField(tif, dp->tdir_tag, (uint16)v)) - goto bad; - } else { - if (!TIFFFetchPerSampleShorts(tif, dp, &iv) || - !TIFFSetField(tif, dp->tdir_tag, iv)) - goto bad; - } - break; - case TIFFTAG_SMINSAMPLEVALUE: - case TIFFTAG_SMAXSAMPLEVALUE: - { - double dv = 0.0; - if (!TIFFFetchPerSampleAnys(tif, dp, &dv) || - !TIFFSetField(tif, dp->tdir_tag, dv)) - goto bad; - } - break; - case TIFFTAG_STRIPOFFSETS: - case TIFFTAG_TILEOFFSETS: - if (!TIFFFetchStripThing(tif, dp, - td->td_nstrips, &td->td_stripoffset)) - goto bad; - break; - case TIFFTAG_STRIPBYTECOUNTS: - case TIFFTAG_TILEBYTECOUNTS: - if (!TIFFFetchStripThing(tif, dp, - td->td_nstrips, &td->td_stripbytecount)) - goto bad; - break; - case TIFFTAG_COLORMAP: - case TIFFTAG_TRANSFERFUNCTION: - { - char* cp; + for (di=0, dp=dir; ditdir_tag) + { + case IGNORE: + break; + case TIFFTAG_MINSAMPLEVALUE: + case TIFFTAG_MAXSAMPLEVALUE: + case TIFFTAG_BITSPERSAMPLE: + case TIFFTAG_DATATYPE: + case TIFFTAG_SAMPLEFORMAT: /* - * TransferFunction can have either 1x or 3x - * data values; Colormap can have only 3x - * items. + * The MinSampleValue, MaxSampleValue, BitsPerSample + * DataType and SampleFormat tags are supposed to be + * written as one value/sample, but some vendors + * incorrectly write one value only -- so we accept + * that as well (yech). Other vendors write correct + * value for NumberOfSamples, but incorrect one for + * BitsPerSample and friends, and we will read this + * too. */ - v = 1L<td_bitspersample; - if (dp->tdir_tag == TIFFTAG_COLORMAP || - dp->tdir_count != v) { - if (!CheckDirCount(tif, dp, 3 * v)) - break; - } - v *= sizeof(uint16); - cp = (char *)_TIFFCheckMalloc(tif, - dp->tdir_count, - sizeof (uint16), - "to read \"TransferFunction\" tag"); - if (cp != NULL) { - if (TIFFFetchData(tif, dp, cp)) { - /* - * This deals with there being - * only one array to apply to - * all samples. - */ - uint32 c = 1L << td->td_bitspersample; - if (dp->tdir_count == c) - v = 0L; - TIFFSetField(tif, dp->tdir_tag, - cp, cp+v, cp+2*v); + { + uint16 value; + enum TIFFReadDirEntryErr err; + err=TIFFReadDirEntryShort(tif,dp,&value); + if (err==TIFFReadDirEntryErrCount) + err=TIFFReadDirEntryPersampleShort(tif,dp,&value); + if (err!=TIFFReadDirEntryErrOk) + { + fip = TIFFFieldWithTag(tif,dp->tdir_tag); + TIFFReadDirEntryOutputErr(tif,err,module,fip ? fip->field_name : "unknown tagname",0); + goto bad; + } + if (!TIFFSetField(tif,dp->tdir_tag,value)) + goto bad; + } + break; + case TIFFTAG_SMINSAMPLEVALUE: + case TIFFTAG_SMAXSAMPLEVALUE: + { + + double *data; + enum TIFFReadDirEntryErr err; + uint32 saved_flags; + int m; + if (dp->tdir_count != (uint64)tif->tif_dir.td_samplesperpixel) + err = TIFFReadDirEntryErrCount; + else + err = TIFFReadDirEntryDoubleArray(tif, dp, &data); + if (err!=TIFFReadDirEntryErrOk) + { + fip = TIFFFieldWithTag(tif,dp->tdir_tag); + TIFFReadDirEntryOutputErr(tif,err,module,fip ? fip->field_name : "unknown tagname",0); + goto bad; + } + saved_flags = tif->tif_flags; + tif->tif_flags |= TIFF_PERSAMPLE; + m = TIFFSetField(tif,dp->tdir_tag,data); + tif->tif_flags = saved_flags; + _TIFFfree(data); + if (!m) + goto bad; + } + break; + case TIFFTAG_STRIPOFFSETS: + case TIFFTAG_TILEOFFSETS: +#if defined(DEFER_STRILE_LOAD) + _TIFFmemcpy( &(tif->tif_dir.td_stripoffset_entry), + dp, sizeof(TIFFDirEntry) ); +#else + if (!TIFFFetchStripThing(tif,dp,tif->tif_dir.td_nstrips,&tif->tif_dir.td_stripoffset)) + goto bad; +#endif + break; + case TIFFTAG_STRIPBYTECOUNTS: + case TIFFTAG_TILEBYTECOUNTS: +#if defined(DEFER_STRILE_LOAD) + _TIFFmemcpy( &(tif->tif_dir.td_stripbytecount_entry), + dp, sizeof(TIFFDirEntry) ); +#else + if (!TIFFFetchStripThing(tif,dp,tif->tif_dir.td_nstrips,&tif->tif_dir.td_stripbytecount)) + goto bad; +#endif + break; + case TIFFTAG_COLORMAP: + case TIFFTAG_TRANSFERFUNCTION: + { + enum TIFFReadDirEntryErr err; + uint32 countpersample; + uint32 countrequired; + uint32 incrementpersample; + uint16* value=NULL; + countpersample=(1L<tif_dir.td_bitspersample); + if ((dp->tdir_tag==TIFFTAG_TRANSFERFUNCTION)&&(dp->tdir_count==(uint64)countpersample)) + { + countrequired=countpersample; + incrementpersample=0; + } + else + { + countrequired=3*countpersample; + incrementpersample=countpersample; + } + if (dp->tdir_count!=(uint64)countrequired) + err=TIFFReadDirEntryErrCount; + else + err=TIFFReadDirEntryShortArray(tif,dp,&value); + if (err!=TIFFReadDirEntryErrOk) + { + fip = TIFFFieldWithTag(tif,dp->tdir_tag); + TIFFReadDirEntryOutputErr(tif,err,module,fip ? fip->field_name : "unknown tagname",1); + } + else + { + TIFFSetField(tif,dp->tdir_tag,value,value+incrementpersample,value+2*incrementpersample); + _TIFFfree(value); } - _TIFFfree(cp); } break; - } - case TIFFTAG_PAGENUMBER: - case TIFFTAG_HALFTONEHINTS: - case TIFFTAG_YCBCRSUBSAMPLING: - case TIFFTAG_DOTRANGE: - (void) TIFFFetchShortPair(tif, dp); - break; - case TIFFTAG_REFERENCEBLACKWHITE: - (void) TIFFFetchRefBlackWhite(tif, dp); - break; /* BEGIN REV 4.0 COMPATIBILITY */ - case TIFFTAG_OSUBFILETYPE: - v = 0L; - switch (TIFFExtractData(tif, dp->tdir_type, - dp->tdir_offset)) { - case OFILETYPE_REDUCEDIMAGE: - v = FILETYPE_REDUCEDIMAGE; + case TIFFTAG_OSUBFILETYPE: + { + uint16 valueo; + uint32 value; + if (TIFFReadDirEntryShort(tif,dp,&valueo)==TIFFReadDirEntryErrOk) + { + switch (valueo) + { + case OFILETYPE_REDUCEDIMAGE: value=FILETYPE_REDUCEDIMAGE; break; + case OFILETYPE_PAGE: value=FILETYPE_PAGE; break; + default: value=0; break; + } + if (value!=0) + TIFFSetField(tif,TIFFTAG_SUBFILETYPE,value); + } + } break; - case OFILETYPE_PAGE: - v = FILETYPE_PAGE; - break; - } - if (v) - TIFFSetField(tif, TIFFTAG_SUBFILETYPE, v); - break; /* END REV 4.0 COMPATIBILITY */ - default: - (void) TIFFFetchNormalTag(tif, dp); - break; + default: + (void) TIFFFetchNormalTag(tif, dp, TRUE); + break; } } /* @@ -568,48 +3830,54 @@ TIFFReadDirectory(TIFF* tif) * and c) photometric is MINISWHITE or MINISBLACK, then we consistently * find samplesperpixel should be 3 */ - if (td->td_compression==COMPRESSION_OJPEG) + if (tif->tif_dir.td_compression==COMPRESSION_OJPEG) { if (!TIFFFieldSet(tif,FIELD_PHOTOMETRIC)) { - TIFFWarningExt(tif->tif_clientdata, "TIFFReadDirectory", - "Photometric tag is missing, assuming data is YCbCr"); + TIFFWarningExt(tif->tif_clientdata, module, + "Photometric tag is missing, assuming data is YCbCr"); if (!TIFFSetField(tif,TIFFTAG_PHOTOMETRIC,PHOTOMETRIC_YCBCR)) goto bad; } - else if (td->td_photometric==PHOTOMETRIC_RGB) + else if (tif->tif_dir.td_photometric==PHOTOMETRIC_RGB) { - td->td_photometric=PHOTOMETRIC_YCBCR; - TIFFWarningExt(tif->tif_clientdata, "TIFFReadDirectory", - "Photometric tag value assumed incorrect, " - "assuming data is YCbCr instead of RGB"); + tif->tif_dir.td_photometric=PHOTOMETRIC_YCBCR; + TIFFWarningExt(tif->tif_clientdata, module, + "Photometric tag value assumed incorrect, " + "assuming data is YCbCr instead of RGB"); } if (!TIFFFieldSet(tif,FIELD_BITSPERSAMPLE)) { - TIFFWarningExt(tif->tif_clientdata,"TIFFReadDirectory", - "BitsPerSample tag is missing, assuming 8 bits per sample"); + TIFFWarningExt(tif->tif_clientdata,module, + "BitsPerSample tag is missing, assuming 8 bits per sample"); if (!TIFFSetField(tif,TIFFTAG_BITSPERSAMPLE,8)) goto bad; } if (!TIFFFieldSet(tif,FIELD_SAMPLESPERPIXEL)) { - if ((td->td_photometric==PHOTOMETRIC_RGB) - || (td->td_photometric==PHOTOMETRIC_YCBCR)) + if (tif->tif_dir.td_photometric==PHOTOMETRIC_RGB) { - TIFFWarningExt(tif->tif_clientdata, - "TIFFReadDirectory", - "SamplesPerPixel tag is missing, " - "assuming correct SamplesPerPixel value is 3"); + TIFFWarningExt(tif->tif_clientdata,module, + "SamplesPerPixel tag is missing, " + "assuming correct SamplesPerPixel value is 3"); if (!TIFFSetField(tif,TIFFTAG_SAMPLESPERPIXEL,3)) goto bad; } - else if ((td->td_photometric==PHOTOMETRIC_MINISWHITE) - || (td->td_photometric==PHOTOMETRIC_MINISBLACK)) + if (tif->tif_dir.td_photometric==PHOTOMETRIC_YCBCR) { - TIFFWarningExt(tif->tif_clientdata, - "TIFFReadDirectory", - "SamplesPerPixel tag is missing, " - "assuming correct SamplesPerPixel value is 1"); + TIFFWarningExt(tif->tif_clientdata,module, + "SamplesPerPixel tag is missing, " + "applying correct SamplesPerPixel value of 3"); + if (!TIFFSetField(tif,TIFFTAG_SAMPLESPERPIXEL,3)) + goto bad; + } + else if ((tif->tif_dir.td_photometric==PHOTOMETRIC_MINISWHITE) + || (tif->tif_dir.td_photometric==PHOTOMETRIC_MINISBLACK)) + { + /* + * SamplesPerPixel tag is missing, but is not required + * by spec. Assume correct SamplesPerPixel value of 1. + */ if (!TIFFSetField(tif,TIFFTAG_SAMPLESPERPIXEL,1)) goto bad; } @@ -618,17 +3886,23 @@ TIFFReadDirectory(TIFF* tif) /* * Verify Palette image has a Colormap. */ - if (td->td_photometric == PHOTOMETRIC_PALETTE && + if (tif->tif_dir.td_photometric == PHOTOMETRIC_PALETTE && !TIFFFieldSet(tif, FIELD_COLORMAP)) { - MissingRequired(tif, "Colormap"); - goto bad; + if ( tif->tif_dir.td_bitspersample>=8 && tif->tif_dir.td_samplesperpixel==3) + tif->tif_dir.td_photometric = PHOTOMETRIC_RGB; + else if (tif->tif_dir.td_bitspersample>=8) + tif->tif_dir.td_photometric = PHOTOMETRIC_MINISBLACK; + else { + MissingRequired(tif, "Colormap"); + goto bad; + } } /* * OJPEG hack: * We do no further messing with strip/tile offsets/bytecounts in OJPEG * TIFFs */ - if (td->td_compression!=COMPRESSION_OJPEG) + if (tif->tif_dir.td_compression!=COMPRESSION_OJPEG) { /* * Attempt to deal with a missing StripByteCounts tag. @@ -639,18 +3913,16 @@ TIFFReadDirectory(TIFF* tif) * the size of the strips. In this case, assume there * is one uncompressed strip of data. */ - if ((td->td_planarconfig == PLANARCONFIG_CONTIG && - td->td_nstrips > 1) || - (td->td_planarconfig == PLANARCONFIG_SEPARATE && - td->td_nstrips != td->td_samplesperpixel)) { + if ((tif->tif_dir.td_planarconfig == PLANARCONFIG_CONTIG && + tif->tif_dir.td_nstrips > 1) || + (tif->tif_dir.td_planarconfig == PLANARCONFIG_SEPARATE && + tif->tif_dir.td_nstrips != (uint32)tif->tif_dir.td_samplesperpixel)) { MissingRequired(tif, "StripByteCounts"); goto bad; } TIFFWarningExt(tif->tif_clientdata, module, - "%s: TIFF directory is missing required " - "\"%s\" field, calculating from imagelength", - tif->tif_name, - _TIFFFieldWithTag(tif,TIFFTAG_STRIPBYTECOUNTS)->field_name); + "TIFF directory is missing required " + "\"StripByteCounts\" field, calculating from imagelength"); if (EstimateStripByteCounts(tif, dir, dircount) < 0) goto bad; /* @@ -667,15 +3939,16 @@ TIFFReadDirectory(TIFF* tif) * dumped out. */ #define BYTECOUNTLOOKSBAD \ - ( (td->td_stripbytecount[0] == 0 && td->td_stripoffset[0] != 0) || \ - (td->td_compression == COMPRESSION_NONE && \ - td->td_stripbytecount[0] > TIFFGetFileSize(tif) - td->td_stripoffset[0]) || \ + ( (tif->tif_dir.td_stripbytecount[0] == 0 && tif->tif_dir.td_stripoffset[0] != 0) || \ + (tif->tif_dir.td_compression == COMPRESSION_NONE && \ + tif->tif_dir.td_stripbytecount[0] > TIFFGetFileSize(tif) - tif->tif_dir.td_stripoffset[0]) || \ (tif->tif_mode == O_RDONLY && \ - td->td_compression == COMPRESSION_NONE && \ - td->td_stripbytecount[0] < TIFFScanlineSize(tif) * td->td_imagelength) ) + tif->tif_dir.td_compression == COMPRESSION_NONE && \ + tif->tif_dir.td_stripbytecount[0] < TIFFScanlineSize64(tif) * tif->tif_dir.td_imagelength) ) - } else if (td->td_nstrips == 1 - && td->td_stripoffset[0] != 0 + } else if (tif->tif_dir.td_nstrips == 1 + && _TIFFFillStriles(tif) + && tif->tif_dir.td_stripoffset[0] != 0 && BYTECOUNTLOOKSBAD) { /* * XXX: Plexus (and others) sometimes give a value of @@ -684,61 +3957,71 @@ TIFFReadDirectory(TIFF* tif) * of estimating the size of a one strip image. */ TIFFWarningExt(tif->tif_clientdata, module, - "%s: Bogus \"%s\" field, ignoring and calculating from imagelength", - tif->tif_name, - _TIFFFieldWithTag(tif,TIFFTAG_STRIPBYTECOUNTS)->field_name); + "Bogus \"StripByteCounts\" field, ignoring and calculating from imagelength"); if(EstimateStripByteCounts(tif, dir, dircount) < 0) goto bad; - } else if (td->td_planarconfig == PLANARCONFIG_CONTIG - && td->td_nstrips > 2 - && td->td_compression == COMPRESSION_NONE - && td->td_stripbytecount[0] != td->td_stripbytecount[1] - && td->td_stripbytecount[0] != 0 - && td->td_stripbytecount[1] != 0 ) { + +#if !defined(DEFER_STRILE_LOAD) + } else if (tif->tif_dir.td_planarconfig == PLANARCONFIG_CONTIG + && tif->tif_dir.td_nstrips > 2 + && tif->tif_dir.td_compression == COMPRESSION_NONE + && tif->tif_dir.td_stripbytecount[0] != tif->tif_dir.td_stripbytecount[1] + && tif->tif_dir.td_stripbytecount[0] != 0 + && tif->tif_dir.td_stripbytecount[1] != 0 ) { /* - * XXX: Some vendors fill StripByteCount array with - * absolutely wrong values (it can be equal to - * StripOffset array, for example). Catch this case - * here. + * XXX: Some vendors fill StripByteCount array with + * absolutely wrong values (it can be equal to + * StripOffset array, for example). Catch this case + * here. + * + * We avoid this check if deferring strile loading + * as it would always force us to load the strip/tile + * information. */ TIFFWarningExt(tif->tif_clientdata, module, - "%s: Wrong \"%s\" field, ignoring and calculating from imagelength", - tif->tif_name, - _TIFFFieldWithTag(tif,TIFFTAG_STRIPBYTECOUNTS)->field_name); + "Wrong \"StripByteCounts\" field, ignoring and calculating from imagelength"); if (EstimateStripByteCounts(tif, dir, dircount) < 0) goto bad; +#endif /* !defined(DEFER_STRILE_LOAD) */ } } - if (dir) { - _TIFFfree((char *)dir); - dir = NULL; + if (dir) + { + _TIFFfree(dir); + dir=NULL; } if (!TIFFFieldSet(tif, FIELD_MAXSAMPLEVALUE)) - td->td_maxsamplevalue = (uint16)((1L<td_bitspersample)-1); - /* - * Setup default compression scheme. - */ - + { + if (tif->tif_dir.td_bitspersample>=16) + tif->tif_dir.td_maxsamplevalue=0xFFFF; + else + tif->tif_dir.td_maxsamplevalue = (uint16)((1L<tif_dir.td_bitspersample)-1); + } /* * XXX: We can optimize checking for the strip bounds using the sorted * bytecounts array. See also comments for TIFFAppendToStrip() * function in tif_write.c. */ - if (td->td_nstrips > 1) { - tstrip_t strip; +#if !defined(DEFER_STRILE_LOAD) + if (tif->tif_dir.td_nstrips > 1) { + uint32 strip; - td->td_stripbytecountsorted = 1; - for (strip = 1; strip < td->td_nstrips; strip++) { - if (td->td_stripoffset[strip - 1] > - td->td_stripoffset[strip]) { - td->td_stripbytecountsorted = 0; + tif->tif_dir.td_stripbytecountsorted = 1; + for (strip = 1; strip < tif->tif_dir.td_nstrips; strip++) { + if (tif->tif_dir.td_stripoffset[strip - 1] > + tif->tif_dir.td_stripoffset[strip]) { + tif->tif_dir.td_stripbytecountsorted = 0; break; } } } +#endif /* !defined(DEFER_STRILE_LOAD) */ + + /* + * An opportunity for compression mode dependent tag fixup + */ + (*tif->tif_fixuptags)(tif); - if (!TIFFFieldSet(tif, FIELD_COMPRESSION)) - TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); /* * Some manufacturers make life difficult by writing * large amounts of uncompressed data as a single strip. @@ -748,24 +4031,35 @@ TIFFReadDirectory(TIFF* tif) * side effect, however, is that the RowsPerStrip tag * value may be changed. */ - if (td->td_nstrips == 1 && td->td_compression == COMPRESSION_NONE && - (tif->tif_flags & (TIFF_STRIPCHOP|TIFF_ISTILED)) == TIFF_STRIPCHOP) + if ((tif->tif_dir.td_planarconfig==PLANARCONFIG_CONTIG)&& + (tif->tif_dir.td_nstrips==1)&& + (tif->tif_dir.td_compression==COMPRESSION_NONE)&& + ((tif->tif_flags&(TIFF_STRIPCHOP|TIFF_ISTILED))==TIFF_STRIPCHOP)) + { + if ( !_TIFFFillStriles(tif) || !tif->tif_dir.td_stripbytecount ) + return 0; ChopUpSingleUncompressedStrip(tif); + } + + /* + * Clear the dirty directory flag. + */ + tif->tif_flags &= ~TIFF_DIRTYDIRECT; + tif->tif_flags &= ~TIFF_DIRTYSTRIP; /* * Reinitialize i/o since we are starting on a new directory. */ tif->tif_row = (uint32) -1; - tif->tif_curstrip = (tstrip_t) -1; + tif->tif_curstrip = (uint32) -1; tif->tif_col = (uint32) -1; - tif->tif_curtile = (ttile_t) -1; - tif->tif_tilesize = (tsize_t) -1; + tif->tif_curtile = (uint32) -1; + tif->tif_tilesize = (tmsize_t) -1; tif->tif_scanlinesize = TIFFScanlineSize(tif); if (!tif->tif_scanlinesize) { TIFFErrorExt(tif->tif_clientdata, module, - "%s: cannot handle zero scanline size", - tif->tif_name); + "Cannot handle zero scanline size"); return (0); } @@ -773,15 +4067,13 @@ TIFFReadDirectory(TIFF* tif) tif->tif_tilesize = TIFFTileSize(tif); if (!tif->tif_tilesize) { TIFFErrorExt(tif->tif_clientdata, module, - "%s: cannot handle zero tile size", - tif->tif_name); + "Cannot handle zero tile size"); return (0); } } else { if (!TIFFStripSize(tif)) { TIFFErrorExt(tif->tif_clientdata, module, - "%s: cannot handle zero strip size", - tif->tif_name); + "Cannot handle zero strip size"); return (0); } } @@ -792,11 +4084,32 @@ bad: return (0); } +static void +TIFFReadDirectoryCheckOrder(TIFF* tif, TIFFDirEntry* dir, uint16 dircount) +{ + static const char module[] = "TIFFReadDirectoryCheckOrder"; + uint16 m; + uint16 n; + TIFFDirEntry* o; + m=0; + for (n=0, o=dir; ntdir_tagtif_clientdata,module, + "Invalid TIFF directory; tags are not sorted in ascending order"); + break; + } + m=o->tdir_tag+1; + } +} + static TIFFDirEntry* -TIFFReadDirectoryFind(TIFFDirEntry* dir, uint16 dircount, uint16 tagid) +TIFFReadDirectoryFindEntry(TIFF* tif, TIFFDirEntry* dir, uint16 dircount, uint16 tagid) { TIFFDirEntry* m; uint16 n; + (void) tif; for (m=dir, n=0; ntdir_tag==tagid) @@ -805,123 +4118,140 @@ TIFFReadDirectoryFind(TIFFDirEntry* dir, uint16 dircount, uint16 tagid) return(0); } +static void +TIFFReadDirectoryFindFieldInfo(TIFF* tif, uint16 tagid, uint32* fii) +{ + int32 ma,mb,mc; + ma=-1; + mc=(int32)tif->tif_nfields; + while (1) + { + if (ma+1==mc) + { + *fii = FAILED_FII; + return; + } + mb=(ma+mc)/2; + if (tif->tif_fields[mb]->field_tag==(uint32)tagid) + break; + if (tif->tif_fields[mb]->field_tag<(uint32)tagid) + ma=mb; + else + mc=mb; + } + while (1) + { + if (mb==0) + break; + if (tif->tif_fields[mb-1]->field_tag!=(uint32)tagid) + break; + mb--; + } + *fii=mb; +} + /* * Read custom directory from the arbitarry offset. * The code is very similar to TIFFReadDirectory(). */ int TIFFReadCustomDirectory(TIFF* tif, toff_t diroff, - const TIFFFieldInfo info[], size_t n) + const TIFFFieldArray* infoarray) { static const char module[] = "TIFFReadCustomDirectory"; - - TIFFDirectory* td = &tif->tif_dir; - TIFFDirEntry *dp, *dir = NULL; - const TIFFFieldInfo* fip; - size_t fix; - uint16 i, dircount; - - _TIFFSetupFieldInfo(tif, info, n); - - dircount = TIFFFetchDirectory(tif, diroff, &dir, NULL); - if (!dircount) { - TIFFErrorExt(tif->tif_clientdata, module, - "%s: Failed to read custom directory at offset %u", - tif->tif_name, diroff); + TIFFDirEntry* dir; + uint16 dircount; + TIFFDirEntry* dp; + uint16 di; + const TIFFField* fip; + uint32 fii; + _TIFFSetupFields(tif, infoarray); + dircount=TIFFFetchDirectory(tif,diroff,&dir,NULL); + if (!dircount) + { + TIFFErrorExt(tif->tif_clientdata,module, + "Failed to read custom directory at offset " TIFF_UINT64_FORMAT,diroff); return 0; } - TIFFFreeDirectory(tif); - _TIFFmemset(&tif->tif_dir, 0, sizeof(TIFFDirectory)); - - fix = 0; - for (dp = dir, i = dircount; i > 0; i--, dp++) { - if (tif->tif_flags & TIFF_SWAB) { - TIFFSwabArrayOfShort(&dp->tdir_tag, 2); - TIFFSwabArrayOfLong(&dp->tdir_count, 2); - } - - if (fix >= tif->tif_nfields || dp->tdir_tag == IGNORE) - continue; - - while (fix < tif->tif_nfields && - tif->tif_fieldinfo[fix]->field_tag < dp->tdir_tag) - fix++; - - if (fix >= tif->tif_nfields || - tif->tif_fieldinfo[fix]->field_tag != dp->tdir_tag) { - + _TIFFmemset(&tif->tif_dir, 0, sizeof(TIFFDirectory)); + TIFFReadDirectoryCheckOrder(tif,dir,dircount); + for (di=0, dp=dir; ditdir_tag,&fii); + if (fii == FAILED_FII) + { TIFFWarningExt(tif->tif_clientdata, module, - "%s: unknown field with tag %d (0x%x) encountered", - tif->tif_name, dp->tdir_tag, dp->tdir_tag); - if (!_TIFFMergeFieldInfo(tif, - _TIFFCreateAnonFieldInfo(tif, - dp->tdir_tag, - (TIFFDataType) dp->tdir_type), - 1)) + "Unknown field with tag %d (0x%x) encountered", + dp->tdir_tag, dp->tdir_tag); + if (!_TIFFMergeFields(tif, _TIFFCreateAnonField(tif, + dp->tdir_tag, + (TIFFDataType) dp->tdir_type), + 1)) { + TIFFWarningExt(tif->tif_clientdata, module, + "Registering anonymous field with tag %d (0x%x) failed", + dp->tdir_tag, dp->tdir_tag); + dp->tdir_tag=IGNORE; + } else { + TIFFReadDirectoryFindFieldInfo(tif,dp->tdir_tag,&fii); + assert( fii != FAILED_FII ); + } + } + if (dp->tdir_tag!=IGNORE) + { + fip=tif->tif_fields[fii]; + if (fip->field_bit==FIELD_IGNORE) + dp->tdir_tag=IGNORE; + else { - TIFFWarningExt(tif->tif_clientdata, module, - "Registering anonymous field with tag %d (0x%x) failed", - dp->tdir_tag, dp->tdir_tag); - goto ignore; + /* check data type */ + while ((fip->field_type!=TIFF_ANY)&&(fip->field_type!=dp->tdir_type)) + { + fii++; + if ((fii==tif->tif_nfields)|| + (tif->tif_fields[fii]->field_tag!=(uint32)dp->tdir_tag)) + { + fii=0xFFFF; + break; + } + fip=tif->tif_fields[fii]; + } + if (fii==0xFFFF) + { + TIFFWarningExt(tif->tif_clientdata, module, + "Wrong data type %d for \"%s\"; tag ignored", + dp->tdir_type,fip->field_name); + dp->tdir_tag=IGNORE; + } + else + { + /* check count if known in advance */ + if ((fip->field_readcount!=TIFF_VARIABLE)&& + (fip->field_readcount!=TIFF_VARIABLE2)) + { + uint32 expected; + if (fip->field_readcount==TIFF_SPP) + expected=(uint32)tif->tif_dir.td_samplesperpixel; + else + expected=(uint32)fip->field_readcount; + if (!CheckDirCount(tif,dp,expected)) + dp->tdir_tag=IGNORE; + } + } } - - fix = 0; - while (fix < tif->tif_nfields && - tif->tif_fieldinfo[fix]->field_tag < dp->tdir_tag) - fix++; - } - /* - * Null out old tags that we ignore. - */ - if (tif->tif_fieldinfo[fix]->field_bit == FIELD_IGNORE) { - ignore: - dp->tdir_tag = IGNORE; - continue; - } - /* - * Check data type. - */ - fip = tif->tif_fieldinfo[fix]; - while (dp->tdir_type != (unsigned short) fip->field_type - && fix < tif->tif_nfields) { - if (fip->field_type == TIFF_ANY) /* wildcard */ - break; - fip = tif->tif_fieldinfo[++fix]; - if (fix >= tif->tif_nfields || - fip->field_tag != dp->tdir_tag) { - TIFFWarningExt(tif->tif_clientdata, module, - "%s: wrong data type %d for \"%s\"; tag ignored", - tif->tif_name, dp->tdir_type, - tif->tif_fieldinfo[fix-1]->field_name); - goto ignore; + switch (dp->tdir_tag) + { + case IGNORE: + break; + case EXIFTAG_SUBJECTDISTANCE: + (void) TIFFFetchSubjectDistance(tif,dp); + break; + default: + (void) TIFFFetchNormalTag(tif, dp, TRUE); + break; } } - /* - * Check count if known in advance. - */ - if (fip->field_readcount != TIFF_VARIABLE - && fip->field_readcount != TIFF_VARIABLE2) { - uint32 expected = (fip->field_readcount == TIFF_SPP) ? - (uint32) td->td_samplesperpixel : - (uint32) fip->field_readcount; - if (!CheckDirCount(tif, dp, expected)) - goto ignore; - } - - /* - * EXIF tags which need to be specifically processed. - */ - switch (dp->tdir_tag) { - case EXIFTAG_SUBJECTDISTANCE: - (void) TIFFFetchSubjectDistance(tif, dp); - break; - default: - (void) TIFFFetchNormalTag(tif, dp); - break; - } } - if (dir) _TIFFfree(dir); return 1; @@ -934,11 +4264,9 @@ TIFFReadCustomDirectory(TIFF* tif, toff_t diroff, int TIFFReadEXIFDirectory(TIFF* tif, toff_t diroff) { - size_t exifFieldInfoCount; - const TIFFFieldInfo *exifFieldInfo = - _TIFFGetExifFieldInfo(&exifFieldInfoCount); - return TIFFReadCustomDirectory(tif, diroff, exifFieldInfo, - exifFieldInfoCount); + const TIFFFieldArray* exifFieldArray; + exifFieldArray = _TIFFGetExifFields(); + return TIFFReadCustomDirectory(tif, diroff, exifFieldArray); } static int @@ -950,35 +4278,49 @@ EstimateStripByteCounts(TIFF* tif, TIFFDirEntry* dir, uint16 dircount) TIFFDirectory *td = &tif->tif_dir; uint32 strip; + _TIFFFillStriles( tif ); + if (td->td_stripbytecount) _TIFFfree(td->td_stripbytecount); - td->td_stripbytecount = (uint32*) - _TIFFCheckMalloc(tif, td->td_nstrips, sizeof (uint32), + td->td_stripbytecount = (uint64*) + _TIFFCheckMalloc(tif, td->td_nstrips, sizeof (uint64), "for \"StripByteCounts\" array"); if( td->td_stripbytecount == NULL ) return -1; if (td->td_compression != COMPRESSION_NONE) { - uint32 space = (uint32)(sizeof (TIFFHeader) - + sizeof (uint16) - + (dircount * sizeof (TIFFDirEntry)) - + sizeof (uint32)); - toff_t filesize = TIFFGetFileSize(tif); + uint64 space; + uint64 filesize; uint16 n; - + filesize = TIFFGetFileSize(tif); + if (!(tif->tif_flags&TIFF_BIGTIFF)) + space=sizeof(TIFFHeaderClassic)+2+dircount*12+4; + else + space=sizeof(TIFFHeaderBig)+8+dircount*20+8; /* calculate amount of space used by indirect values */ for (dp = dir, n = dircount; n > 0; n--, dp++) { - uint32 cc = TIFFDataWidth((TIFFDataType) dp->tdir_type); - if (cc == 0) { + uint32 typewidth = TIFFDataWidth((TIFFDataType) dp->tdir_type); + uint64 datasize; + typewidth = TIFFDataWidth((TIFFDataType) dp->tdir_type); + if (typewidth == 0) { TIFFErrorExt(tif->tif_clientdata, module, - "%s: Cannot determine size of unknown tag type %d", - tif->tif_name, dp->tdir_type); + "Cannot determine size of unknown tag type %d", + dp->tdir_type); return -1; } - cc = cc * dp->tdir_count; - if (cc > sizeof (uint32)) - space += cc; + datasize=(uint64)typewidth*dp->tdir_count; + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + if (datasize<=4) + datasize=0; + } + else + { + if (datasize<=8) + datasize=0; + } + space+=datasize; } space = filesize - space; if (td->td_planarconfig == PLANARCONFIG_SEPARATE) @@ -991,19 +4333,17 @@ EstimateStripByteCounts(TIFF* tif, TIFFDirEntry* dir, uint16 dircount) * should begin. Since a strip of data must be contiguous, * it's safe to assume that we've overestimated the amount * of data in the strip and trim this number back accordingly. - */ + */ strip--; - if (((toff_t)(td->td_stripoffset[strip]+ - td->td_stripbytecount[strip])) > filesize) - td->td_stripbytecount[strip] = - filesize - td->td_stripoffset[strip]; + if (td->td_stripoffset[strip]+td->td_stripbytecount[strip] > filesize) + td->td_stripbytecount[strip] = filesize - td->td_stripoffset[strip]; } else if (isTiled(tif)) { - uint32 bytespertile = TIFFTileSize(tif); + uint64 bytespertile = TIFFTileSize64(tif); for (strip = 0; strip < td->td_nstrips; strip++) - td->td_stripbytecount[strip] = bytespertile; + td->td_stripbytecount[strip] = bytespertile; } else { - uint32 rowbytes = TIFFScanlineSize(tif); + uint64 rowbytes = TIFFScanlineSize64(tif); uint32 rowsperstrip = td->td_imagelength/td->td_stripsperimage; for (strip = 0; strip < td->td_nstrips; strip++) td->td_stripbytecount[strip] = rowbytes * rowsperstrip; @@ -1020,8 +4360,8 @@ MissingRequired(TIFF* tif, const char* tagname) static const char module[] = "MissingRequired"; TIFFErrorExt(tif->tif_clientdata, module, - "%s: TIFF directory is missing required \"%s\" field", - tif->tif_name, tagname); + "TIFF directory is missing required \"%s\" field", + tagname); } /* @@ -1031,7 +4371,7 @@ MissingRequired(TIFF* tif, const char* tagname) * seen directories and check every IFD offset against that list. */ static int -TIFFCheckDirOffset(TIFF* tif, toff_t diroff) +TIFFCheckDirOffset(TIFF* tif, uint64 diroff) { uint16 n; @@ -1046,17 +4386,14 @@ TIFFCheckDirOffset(TIFF* tif, toff_t diroff) tif->tif_dirnumber++; if (tif->tif_dirnumber > tif->tif_dirlistsize) { - toff_t* new_dirlist; + uint64* new_dirlist; /* * XXX: Reduce memory allocation granularity of the dirlist * array. */ - new_dirlist = (toff_t *)_TIFFCheckRealloc(tif, - tif->tif_dirlist, - tif->tif_dirnumber, - 2 * sizeof(toff_t), - "for IFD list"); + new_dirlist = (uint64*)_TIFFCheckRealloc(tif, tif->tif_dirlist, + tif->tif_dirnumber, 2 * sizeof(uint64), "for IFD list"); if (!new_dirlist) return 0; tif->tif_dirlistsize = 2 * tif->tif_dirnumber; @@ -1075,17 +4412,20 @@ TIFFCheckDirOffset(TIFF* tif, toff_t diroff) static int CheckDirCount(TIFF* tif, TIFFDirEntry* dir, uint32 count) { - if (count > dir->tdir_count) { + if ((uint64)count > dir->tdir_count) { + const TIFFField* fip = TIFFFieldWithTag(tif, dir->tdir_tag); TIFFWarningExt(tif->tif_clientdata, tif->tif_name, - "incorrect count for field \"%s\" (%u, expecting %u); tag ignored", - _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name, + "incorrect count for field \"%s\" (" TIFF_UINT64_FORMAT ", expecting %u); tag ignored", + fip ? fip->field_name : "unknown tagname", dir->tdir_count, count); return (0); - } else if (count < dir->tdir_count) { + } else if ((uint64)count < dir->tdir_count) { + const TIFFField* fip = TIFFFieldWithTag(tif, dir->tdir_tag); TIFFWarningExt(tif->tif_clientdata, tif->tif_name, - "incorrect count for field \"%s\" (%u, expecting %u); tag trimmed", - _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name, + "incorrect count for field \"%s\" (" TIFF_UINT64_FORMAT ", expecting %u); tag trimmed", + fip ? fip->field_name : "unknown tagname", dir->tdir_count, count); + dir->tdir_count = count; return (1); } return (1); @@ -1097,13 +4437,18 @@ CheckDirCount(TIFF* tif, TIFFDirEntry* dir, uint32 count) * number of fields in the directory or 0 if failed. */ static uint16 -TIFFFetchDirectory(TIFF* tif, toff_t diroff, TIFFDirEntry **pdir, - toff_t *nextdiroff) +TIFFFetchDirectory(TIFF* tif, uint64 diroff, TIFFDirEntry** pdir, + uint64 *nextdiroff) { static const char module[] = "TIFFFetchDirectory"; - TIFFDirEntry *dir; - uint16 dircount; + void* origdir; + uint16 dircount16; + uint32 dirsize; + TIFFDirEntry* dir; + uint8* ma; + TIFFDirEntry* mb; + uint16 n; assert(pdir); @@ -1117,24 +4462,51 @@ TIFFFetchDirectory(TIFF* tif, toff_t diroff, TIFFDirEntry **pdir, tif->tif_name); return 0; } - if (!ReadOK(tif, &dircount, sizeof (uint16))) { - TIFFErrorExt(tif->tif_clientdata, module, - "%s: Can not read TIFF directory count", - tif->tif_name); - return 0; + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + if (!ReadOK(tif, &dircount16, sizeof (uint16))) { + TIFFErrorExt(tif->tif_clientdata, module, + "%s: Can not read TIFF directory count", + tif->tif_name); + return 0; + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabShort(&dircount16); + if (dircount16>4096) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Sanity check on directory count failed, this is probably not a valid IFD offset"); + return 0; + } + dirsize = 12; + } else { + uint64 dircount64; + if (!ReadOK(tif, &dircount64, sizeof (uint64))) { + TIFFErrorExt(tif->tif_clientdata, module, + "%s: Can not read TIFF directory count", + tif->tif_name); + return 0; + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong8(&dircount64); + if (dircount64>4096) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Sanity check on directory count failed, this is probably not a valid IFD offset"); + return 0; + } + dircount16 = (uint16)dircount64; + dirsize = 20; } - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabShort(&dircount); - dir = (TIFFDirEntry *)_TIFFCheckMalloc(tif, dircount, - sizeof (TIFFDirEntry), - "to read TIFF directory"); - if (dir == NULL) + origdir = _TIFFCheckMalloc(tif, dircount16, + dirsize, "to read TIFF directory"); + if (origdir == NULL) return 0; - if (!ReadOK(tif, dir, dircount*sizeof (TIFFDirEntry))) { + if (!ReadOK(tif, origdir, (tmsize_t)(dircount16*dirsize))) { TIFFErrorExt(tif->tif_clientdata, module, "%.100s: Can not read TIFF directory", tif->tif_name); - _TIFFfree(dir); + _TIFFfree(origdir); return 0; } /* @@ -1142,9 +4514,30 @@ TIFFFetchDirectory(TIFF* tif, toff_t diroff, TIFFDirEntry **pdir, * needed. */ if (nextdiroff) - (void) ReadOK(tif, nextdiroff, sizeof(uint32)); + { + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + uint32 nextdiroff32; + if (!ReadOK(tif, &nextdiroff32, sizeof(uint32))) + nextdiroff32 = 0; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(&nextdiroff32); + *nextdiroff=nextdiroff32; + } else { + if (!ReadOK(tif, nextdiroff, sizeof(uint64))) + *nextdiroff = 0; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8(nextdiroff); + } + } } else { - toff_t off = tif->tif_diroff; + tmsize_t m; + tmsize_t off = (tmsize_t) tif->tif_diroff; + if ((uint64)off!=tif->tif_diroff) + { + TIFFErrorExt(tif->tif_clientdata,module,"Can not read TIFF directory count"); + return(0); + } /* * Check for integer overflow when validating the dir_off, @@ -1155,809 +4548,856 @@ TIFFFetchDirectory(TIFF* tif, toff_t diroff, TIFFDirEntry **pdir, * * to avoid overflow. */ - if (tif->tif_size < sizeof (uint16) || - off > tif->tif_size - sizeof(uint16)) { - TIFFErrorExt(tif->tif_clientdata, module, - "%s: Can not read TIFF directory count", - tif->tif_name); - return 0; - } else { - _TIFFmemcpy(&dircount, tif->tif_base + off, - sizeof(uint16)); + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + m=off+sizeof(uint16); + if ((mtif->tif_size)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Can not read TIFF directory count"); + return 0; + } else { + _TIFFmemcpy(&dircount16, tif->tif_base + off, + sizeof(uint16)); + } + off += sizeof (uint16); + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabShort(&dircount16); + if (dircount16>4096) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Sanity check on directory count failed, this is probably not a valid IFD offset"); + return 0; + } + dirsize = 12; } - off += sizeof (uint16); - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabShort(&dircount); - dir = (TIFFDirEntry *)_TIFFCheckMalloc(tif, dircount, - sizeof(TIFFDirEntry), - "to read TIFF directory"); - if (dir == NULL) - return 0; - if (off + dircount * sizeof (TIFFDirEntry) > tif->tif_size) { + else + { + tmsize_t m; + uint64 dircount64; + m=off+sizeof(uint64); + if ((mtif->tif_size)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Can not read TIFF directory count"); + return 0; + } else { + _TIFFmemcpy(&dircount64, tif->tif_base + off, + sizeof(uint64)); + } + off += sizeof (uint64); + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong8(&dircount64); + if (dircount64>4096) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Sanity check on directory count failed, this is probably not a valid IFD offset"); + return 0; + } + dircount16 = (uint16)dircount64; + dirsize = 20; + } + if (dircount16 == 0 ) + { TIFFErrorExt(tif->tif_clientdata, module, - "%s: Can not read TIFF directory", - tif->tif_name); - _TIFFfree(dir); + "Sanity check on directory count failed, zero tag directories not supported"); + return 0; + } + origdir = _TIFFCheckMalloc(tif, dircount16, + dirsize, + "to read TIFF directory"); + if (origdir == NULL) + return 0; + m=off+dircount16*dirsize; + if ((mtif->tif_size)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Can not read TIFF directory"); + _TIFFfree(origdir); return 0; } else { - _TIFFmemcpy(dir, tif->tif_base + off, - dircount * sizeof(TIFFDirEntry)); + _TIFFmemcpy(origdir, tif->tif_base + off, + dircount16 * dirsize); } if (nextdiroff) { - off += dircount * sizeof (TIFFDirEntry); - if (off + sizeof (uint32) <= tif->tif_size) { - _TIFFmemcpy(nextdiroff, tif->tif_base + off, - sizeof (uint32)); + off += dircount16 * dirsize; + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + uint32 nextdiroff32; + m=off+sizeof(uint32); + if ((mtif->tif_size)) + nextdiroff32 = 0; + else + _TIFFmemcpy(&nextdiroff32, tif->tif_base + off, + sizeof (uint32)); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(&nextdiroff32); + *nextdiroff = nextdiroff32; + } + else + { + m=off+sizeof(uint64); + if ((mtif->tif_size)) + *nextdiroff = 0; + else + _TIFFmemcpy(nextdiroff, tif->tif_base + off, + sizeof (uint64)); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8(nextdiroff); } } } - if (nextdiroff && tif->tif_flags & TIFF_SWAB) - TIFFSwabLong(nextdiroff); - *pdir = dir; - return dircount; -} - -/* - * Fetch a contiguous directory item. - */ -static tsize_t -TIFFFetchData(TIFF* tif, TIFFDirEntry* dir, char* cp) -{ - uint32 w = TIFFDataWidth((TIFFDataType) dir->tdir_type); - /* - * FIXME: butecount should have tsize_t type, but for now libtiff - * defines tsize_t as a signed 32-bit integer and we are losing - * ability to read arrays larger than 2^31 bytes. So we are using - * uint32 instead of tsize_t here. - */ - uint32 cc = dir->tdir_count * w; - - /* Check for overflow. */ - if (!dir->tdir_count || !w || cc / w != dir->tdir_count) - goto bad; - - if (!isMapped(tif)) { - if (!SeekOK(tif, dir->tdir_offset)) - goto bad; - if (!ReadOK(tif, cp, cc)) - goto bad; - } else { - /* Check for overflow. */ - if (dir->tdir_offset + cc < dir->tdir_offset - || dir->tdir_offset + cc < cc - || dir->tdir_offset + cc > tif->tif_size) - goto bad; - _TIFFmemcpy(cp, tif->tif_base + dir->tdir_offset, cc); - } - if (tif->tif_flags & TIFF_SWAB) { - switch (dir->tdir_type) { - case TIFF_SHORT: - case TIFF_SSHORT: - TIFFSwabArrayOfShort((uint16*) cp, dir->tdir_count); - break; - case TIFF_LONG: - case TIFF_SLONG: - case TIFF_FLOAT: - TIFFSwabArrayOfLong((uint32*) cp, dir->tdir_count); - break; - case TIFF_RATIONAL: - case TIFF_SRATIONAL: - TIFFSwabArrayOfLong((uint32*) cp, 2*dir->tdir_count); - break; - case TIFF_DOUBLE: - TIFFSwabArrayOfDouble((double*) cp, dir->tdir_count); - break; - } - } - return (cc); -bad: - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Error fetching data for field \"%s\"", - _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); - return (tsize_t) 0; -} - -/* - * Fetch an ASCII item from the file. - */ -static tsize_t -TIFFFetchString(TIFF* tif, TIFFDirEntry* dir, char* cp) -{ - if (dir->tdir_count <= 4) { - uint32 l = dir->tdir_offset; - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabLong(&l); - _TIFFmemcpy(cp, &l, dir->tdir_count); - return (1); - } - return (TIFFFetchData(tif, dir, cp)); -} - -/* - * Convert numerator+denominator to float. - */ -static int -cvtRational(TIFF* tif, TIFFDirEntry* dir, uint32 num, uint32 denom, float* rv) -{ - if (denom == 0) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "%s: Rational with zero denominator (num = %u)", - _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name, num); - return (0); - } else { - if (dir->tdir_type == TIFF_RATIONAL) - *rv = ((float)num / (float)denom); - else - *rv = ((float)(int32)num / (float)(int32)denom); - return (1); - } -} - -/* - * Fetch a rational item from the file at offset off and return the value as a - * floating point number. - */ -static float -TIFFFetchRational(TIFF* tif, TIFFDirEntry* dir) -{ - uint32 l[2]; - float v; - - return (!TIFFFetchData(tif, dir, (char *)l) || - !cvtRational(tif, dir, l[0], l[1], &v) ? 1.0f : v); -} - -/* - * Fetch a single floating point value from the offset field and return it as - * a native float. - */ -static float -TIFFFetchFloat(TIFF* tif, TIFFDirEntry* dir) -{ - float v; - int32 l = TIFFExtractData(tif, dir->tdir_type, dir->tdir_offset); - _TIFFmemcpy(&v, &l, sizeof(float)); - TIFFCvtIEEEFloatToNative(tif, 1, &v); - return (v); -} - -/* - * Fetch an array of BYTE or SBYTE values. - */ -static int -TIFFFetchByteArray(TIFF* tif, TIFFDirEntry* dir, uint8* v) -{ - if (dir->tdir_count <= 4) { - /* - * Extract data from offset field. - */ - if (tif->tif_header.tiff_magic == TIFF_BIGENDIAN) { - if (dir->tdir_type == TIFF_SBYTE) - switch (dir->tdir_count) { - case 4: v[3] = dir->tdir_offset & 0xff; - case 3: v[2] = (dir->tdir_offset >> 8) & 0xff; - case 2: v[1] = (dir->tdir_offset >> 16) & 0xff; - case 1: v[0] = dir->tdir_offset >> 24; - } - else - switch (dir->tdir_count) { - case 4: v[3] = dir->tdir_offset & 0xff; - case 3: v[2] = (dir->tdir_offset >> 8) & 0xff; - case 2: v[1] = (dir->tdir_offset >> 16) & 0xff; - case 1: v[0] = dir->tdir_offset >> 24; - } - } else { - if (dir->tdir_type == TIFF_SBYTE) - switch (dir->tdir_count) { - case 4: v[3] = dir->tdir_offset >> 24; - case 3: v[2] = (dir->tdir_offset >> 16) & 0xff; - case 2: v[1] = (dir->tdir_offset >> 8) & 0xff; - case 1: v[0] = dir->tdir_offset & 0xff; - } - else - switch (dir->tdir_count) { - case 4: v[3] = dir->tdir_offset >> 24; - case 3: v[2] = (dir->tdir_offset >> 16) & 0xff; - case 2: v[1] = (dir->tdir_offset >> 8) & 0xff; - case 1: v[0] = dir->tdir_offset & 0xff; - } - } - return (1); - } else - return (TIFFFetchData(tif, dir, (char*) v) != 0); /* XXX */ -} - -/* - * Fetch an array of SHORT or SSHORT values. - */ -static int -TIFFFetchShortArray(TIFF* tif, TIFFDirEntry* dir, uint16* v) -{ - if (dir->tdir_count <= 2) { - if (tif->tif_header.tiff_magic == TIFF_BIGENDIAN) { - switch (dir->tdir_count) { - case 2: v[1] = (uint16) (dir->tdir_offset & 0xffff); - case 1: v[0] = (uint16) (dir->tdir_offset >> 16); - } - } else { - switch (dir->tdir_count) { - case 2: v[1] = (uint16) (dir->tdir_offset >> 16); - case 1: v[0] = (uint16) (dir->tdir_offset & 0xffff); - } - } - return (1); - } else - return (TIFFFetchData(tif, dir, (char *)v) != 0); -} - -/* - * Fetch a pair of SHORT or BYTE values. Some tags may have either BYTE - * or SHORT type and this function works with both ones. - */ -static int -TIFFFetchShortPair(TIFF* tif, TIFFDirEntry* dir) -{ - /* - * Prevent overflowing the v stack arrays below by performing a sanity - * check on tdir_count, this should never be greater than two. - */ - if (dir->tdir_count > 2) { - TIFFWarningExt(tif->tif_clientdata, tif->tif_name, - "unexpected count for field \"%s\", %u, expected 2; ignored", - _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name, - dir->tdir_count); + dir = (TIFFDirEntry*)_TIFFCheckMalloc(tif, dircount16, + sizeof(TIFFDirEntry), + "to read TIFF directory"); + if (dir==0) + { + _TIFFfree(origdir); return 0; } - - switch (dir->tdir_type) { - case TIFF_BYTE: - case TIFF_SBYTE: - { - uint8 v[4]; - return TIFFFetchByteArray(tif, dir, v) - && TIFFSetField(tif, dir->tdir_tag, v[0], v[1]); - } - case TIFF_SHORT: - case TIFF_SSHORT: - { - uint16 v[2]; - return TIFFFetchShortArray(tif, dir, v) - && TIFFSetField(tif, dir->tdir_tag, v[0], v[1]); - } - default: - return 0; - } -} - -/* - * Fetch an array of LONG or SLONG values. - */ -static int -TIFFFetchLongArray(TIFF* tif, TIFFDirEntry* dir, uint32* v) -{ - if (dir->tdir_count == 1) { - v[0] = dir->tdir_offset; - return (1); - } else - return (TIFFFetchData(tif, dir, (char*) v) != 0); -} - -/* - * Fetch an array of RATIONAL or SRATIONAL values. - */ -static int -TIFFFetchRationalArray(TIFF* tif, TIFFDirEntry* dir, float* v) -{ - int ok = 0; - uint32* l; - - l = (uint32*)_TIFFCheckMalloc(tif, - dir->tdir_count, TIFFDataWidth((TIFFDataType) dir->tdir_type), - "to fetch array of rationals"); - if (l) { - if (TIFFFetchData(tif, dir, (char *)l)) { - uint32 i; - for (i = 0; i < dir->tdir_count; i++) { - ok = cvtRational(tif, dir, - l[2*i+0], l[2*i+1], &v[i]); - if (!ok) - break; - } - } - _TIFFfree((char *)l); - } - return (ok); -} - -/* - * Fetch an array of FLOAT values. - */ -static int -TIFFFetchFloatArray(TIFF* tif, TIFFDirEntry* dir, float* v) -{ - - if (dir->tdir_count == 1) { - union + ma=(uint8*)origdir; + mb=dir; + for (n=0; ntif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)ma); + mb->tdir_tag=*(uint16*)ma; + ma+=sizeof(uint16); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)ma); + mb->tdir_type=*(uint16*)ma; + ma+=sizeof(uint16); + if (!(tif->tif_flags&TIFF_BIGTIFF)) { - float f; - uint32 i; - } float_union; - - float_union.i=dir->tdir_offset; - v[0]=float_union.f; - TIFFCvtIEEEFloatToNative(tif, dir->tdir_count, v); - return (1); - } else if (TIFFFetchData(tif, dir, (char*) v)) { - TIFFCvtIEEEFloatToNative(tif, dir->tdir_count, v); - return (1); - } else - return (0); -} - -/* - * Fetch an array of DOUBLE values. - */ -static int -TIFFFetchDoubleArray(TIFF* tif, TIFFDirEntry* dir, double* v) -{ - if (TIFFFetchData(tif, dir, (char*) v)) { - TIFFCvtIEEEDoubleToNative(tif, dir->tdir_count, v); - return (1); - } else - return (0); -} - -/* - * Fetch an array of ANY values. The actual values are returned as doubles - * which should be able hold all the types. Yes, there really should be an - * tany_t to avoid this potential non-portability ... Note in particular that - * we assume that the double return value vector is large enough to read in - * any fundamental type. We use that vector as a buffer to read in the base - * type vector and then convert it in place to double (from end to front of - * course). - */ -static int -TIFFFetchAnyArray(TIFF* tif, TIFFDirEntry* dir, double* v) -{ - int i; - - switch (dir->tdir_type) { - case TIFF_BYTE: - case TIFF_SBYTE: - if (!TIFFFetchByteArray(tif, dir, (uint8*) v)) - return (0); - if (dir->tdir_type == TIFF_BYTE) { - uint8* vp = (uint8*) v; - for (i = dir->tdir_count-1; i >= 0; i--) - v[i] = vp[i]; - } else { - int8* vp = (int8*) v; - for (i = dir->tdir_count-1; i >= 0; i--) - v[i] = vp[i]; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong((uint32*)ma); + mb->tdir_count=(uint64)(*(uint32*)ma); + ma+=sizeof(uint32); + *(uint32*)(&mb->tdir_offset)=*(uint32*)ma; + ma+=sizeof(uint32); } - break; - case TIFF_SHORT: - case TIFF_SSHORT: - if (!TIFFFetchShortArray(tif, dir, (uint16*) v)) - return (0); - if (dir->tdir_type == TIFF_SHORT) { - uint16* vp = (uint16*) v; - for (i = dir->tdir_count-1; i >= 0; i--) - v[i] = vp[i]; - } else { - int16* vp = (int16*) v; - for (i = dir->tdir_count-1; i >= 0; i--) - v[i] = vp[i]; + else + { + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8((uint64*)ma); + mb->tdir_count=TIFFReadUInt64(ma); + ma+=sizeof(uint64); + mb->tdir_offset.toff_long8=TIFFReadUInt64(ma); + ma+=sizeof(uint64); } - break; - case TIFF_LONG: - case TIFF_SLONG: - if (!TIFFFetchLongArray(tif, dir, (uint32*) v)) - return (0); - if (dir->tdir_type == TIFF_LONG) { - uint32* vp = (uint32*) v; - for (i = dir->tdir_count-1; i >= 0; i--) - v[i] = vp[i]; - } else { - int32* vp = (int32*) v; - for (i = dir->tdir_count-1; i >= 0; i--) - v[i] = vp[i]; - } - break; - case TIFF_RATIONAL: - case TIFF_SRATIONAL: - if (!TIFFFetchRationalArray(tif, dir, (float*) v)) - return (0); - { float* vp = (float*) v; - for (i = dir->tdir_count-1; i >= 0; i--) - v[i] = vp[i]; - } - break; - case TIFF_FLOAT: - if (!TIFFFetchFloatArray(tif, dir, (float*) v)) - return (0); - { float* vp = (float*) v; - for (i = dir->tdir_count-1; i >= 0; i--) - v[i] = vp[i]; - } - break; - case TIFF_DOUBLE: - return (TIFFFetchDoubleArray(tif, dir, (double*) v)); - default: - /* TIFF_NOTYPE */ - /* TIFF_ASCII */ - /* TIFF_UNDEFINED */ - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "cannot read TIFF_ANY type %d for field \"%s\"", - dir->tdir_type, - _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); - return (0); + mb++; } - return (1); + _TIFFfree(origdir); + *pdir = dir; + return dircount16; } /* * Fetch a tag that is not handled by special case code. */ static int -TIFFFetchNormalTag(TIFF* tif, TIFFDirEntry* dp) +TIFFFetchNormalTag(TIFF* tif, TIFFDirEntry* dp, int recover) { - static const char mesg[] = "to fetch tag value"; - int ok = 0; - const TIFFFieldInfo* fip = _TIFFFieldWithTag(tif, dp->tdir_tag); - - if (dp->tdir_count > 1) { /* array of values */ - char* cp = NULL; - - switch (dp->tdir_type) { - case TIFF_BYTE: - case TIFF_SBYTE: - cp = (char *)_TIFFCheckMalloc(tif, - dp->tdir_count, sizeof (uint8), mesg); - ok = cp && TIFFFetchByteArray(tif, dp, (uint8*) cp); + static const char module[] = "TIFFFetchNormalTag"; + enum TIFFReadDirEntryErr err; + uint32 fii; + const TIFFField* fip = NULL; + TIFFReadDirectoryFindFieldInfo(tif,dp->tdir_tag,&fii); + if( fii == FAILED_FII ) + { + TIFFErrorExt(tif->tif_clientdata, "TIFFFetchNormalTag", + "No definition found for tag %d", + dp->tdir_tag); + return 0; + } + fip=tif->tif_fields[fii]; + assert(fip->set_field_type!=TIFF_SETGET_OTHER); /* if so, we shouldn't arrive here but deal with this in specialized code */ + assert(fip->set_field_type!=TIFF_SETGET_INT); /* if so, we shouldn't arrive here as this is only the case for pseudo-tags */ + err=TIFFReadDirEntryErrOk; + switch (fip->set_field_type) + { + case TIFF_SETGET_UNDEFINED: break; - case TIFF_SHORT: - case TIFF_SSHORT: - cp = (char *)_TIFFCheckMalloc(tif, - dp->tdir_count, sizeof (uint16), mesg); - ok = cp && TIFFFetchShortArray(tif, dp, (uint16*) cp); - break; - case TIFF_LONG: - case TIFF_SLONG: - cp = (char *)_TIFFCheckMalloc(tif, - dp->tdir_count, sizeof (uint32), mesg); - ok = cp && TIFFFetchLongArray(tif, dp, (uint32*) cp); - break; - case TIFF_RATIONAL: - case TIFF_SRATIONAL: - cp = (char *)_TIFFCheckMalloc(tif, - dp->tdir_count, sizeof (float), mesg); - ok = cp && TIFFFetchRationalArray(tif, dp, (float*) cp); - break; - case TIFF_FLOAT: - cp = (char *)_TIFFCheckMalloc(tif, - dp->tdir_count, sizeof (float), mesg); - ok = cp && TIFFFetchFloatArray(tif, dp, (float*) cp); - break; - case TIFF_DOUBLE: - cp = (char *)_TIFFCheckMalloc(tif, - dp->tdir_count, sizeof (double), mesg); - ok = cp && TIFFFetchDoubleArray(tif, dp, (double*) cp); - break; - case TIFF_ASCII: - case TIFF_UNDEFINED: /* bit of a cheat... */ - /* - * Some vendors write strings w/o the trailing - * NULL byte, so always append one just in case. - */ - cp = (char *)_TIFFCheckMalloc(tif, dp->tdir_count + 1, - 1, mesg); - if( (ok = (cp && TIFFFetchString(tif, dp, cp))) != 0 ) - cp[dp->tdir_count] = '\0'; /* XXX */ - break; - } - if (ok) { - ok = (fip->field_passcount ? - TIFFSetField(tif, dp->tdir_tag, dp->tdir_count, cp) - : TIFFSetField(tif, dp->tdir_tag, cp)); - } - if (cp != NULL) - _TIFFfree(cp); - } else if (CheckDirCount(tif, dp, 1)) { /* singleton value */ - switch (dp->tdir_type) { - case TIFF_BYTE: - case TIFF_SBYTE: - case TIFF_SHORT: - case TIFF_SSHORT: - /* - * If the tag is also acceptable as a LONG or SLONG - * then TIFFSetField will expect an uint32 parameter - * passed to it (through varargs). Thus, for machines - * where sizeof (int) != sizeof (uint32) we must do - * a careful check here. It's hard to say if this - * is worth optimizing. - * - * NB: We use TIFFFieldWithTag here knowing that - * it returns us the first entry in the table - * for the tag and that that entry is for the - * widest potential data type the tag may have. - */ - { TIFFDataType type = fip->field_type; - if (type != TIFF_LONG && type != TIFF_SLONG) { - uint16 v = (uint16) - TIFFExtractData(tif, dp->tdir_type, dp->tdir_offset); - ok = (fip->field_passcount ? - TIFFSetField(tif, dp->tdir_tag, 1, &v) - : TIFFSetField(tif, dp->tdir_tag, v)); - break; - } - } - /* fall thru... */ - case TIFF_LONG: - case TIFF_SLONG: - { uint32 v32 = - TIFFExtractData(tif, dp->tdir_type, dp->tdir_offset); - ok = (fip->field_passcount ? - TIFFSetField(tif, dp->tdir_tag, 1, &v32) - : TIFFSetField(tif, dp->tdir_tag, v32)); + case TIFF_SETGET_ASCII: + { + uint8* data; + assert(fip->field_passcount==0); + err=TIFFReadDirEntryByteArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + uint8* ma; + uint32 mb; + int n; + ma=data; + mb=0; + while (mb<(uint32)dp->tdir_count) + { + if (*ma==0) + break; + ma++; + mb++; + } + if (mb+1<(uint32)dp->tdir_count) + TIFFWarningExt(tif->tif_clientdata,module,"ASCII value for tag \"%s\" contains null byte in value; value incorrectly truncated during reading due to implementation limitations",fip->field_name); + else if (mb+1>(uint32)dp->tdir_count) + { + uint8* o; + TIFFWarningExt(tif->tif_clientdata,module,"ASCII value for tag \"%s\" does not end in null byte",fip->field_name); + if ((uint32)dp->tdir_count+1!=dp->tdir_count+1) + o=NULL; + else + o=_TIFFmalloc((uint32)dp->tdir_count+1); + if (o==NULL) + { + if (data!=NULL) + _TIFFfree(data); + return(0); + } + _TIFFmemcpy(o,data,(uint32)dp->tdir_count); + o[(uint32)dp->tdir_count]=0; + if (data!=0) + _TIFFfree(data); + data=o; + } + n=TIFFSetField(tif,dp->tdir_tag,data); + if (data!=0) + _TIFFfree(data); + if (!n) + return(0); + } } break; - case TIFF_RATIONAL: - case TIFF_SRATIONAL: - case TIFF_FLOAT: - { float v = (dp->tdir_type == TIFF_FLOAT ? - TIFFFetchFloat(tif, dp) - : TIFFFetchRational(tif, dp)); - ok = (fip->field_passcount ? - TIFFSetField(tif, dp->tdir_tag, 1, &v) - : TIFFSetField(tif, dp->tdir_tag, v)); + case TIFF_SETGET_UINT8: + { + uint8 data=0; + assert(fip->field_readcount==1); + assert(fip->field_passcount==0); + err=TIFFReadDirEntryByte(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + if (!TIFFSetField(tif,dp->tdir_tag,data)) + return(0); + } } break; - case TIFF_DOUBLE: - { double v; - ok = (TIFFFetchDoubleArray(tif, dp, &v) && - (fip->field_passcount ? - TIFFSetField(tif, dp->tdir_tag, 1, &v) - : TIFFSetField(tif, dp->tdir_tag, v)) - ); + case TIFF_SETGET_UINT16: + { + uint16 data; + assert(fip->field_readcount==1); + assert(fip->field_passcount==0); + err=TIFFReadDirEntryShort(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + if (!TIFFSetField(tif,dp->tdir_tag,data)) + return(0); + } } break; - case TIFF_ASCII: - case TIFF_UNDEFINED: /* bit of a cheat... */ - { char c[2]; - if( (ok = (TIFFFetchString(tif, dp, c) != 0)) != 0 ) { - c[1] = '\0'; /* XXX paranoid */ - ok = (fip->field_passcount ? - TIFFSetField(tif, dp->tdir_tag, 1, c) - : TIFFSetField(tif, dp->tdir_tag, c)); - } + case TIFF_SETGET_UINT32: + { + uint32 data; + assert(fip->field_readcount==1); + assert(fip->field_passcount==0); + err=TIFFReadDirEntryLong(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + if (!TIFFSetField(tif,dp->tdir_tag,data)) + return(0); + } } break; - } + case TIFF_SETGET_UINT64: + { + uint64 data; + assert(fip->field_readcount==1); + assert(fip->field_passcount==0); + err=TIFFReadDirEntryLong8(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + if (!TIFFSetField(tif,dp->tdir_tag,data)) + return(0); + } + } + break; + case TIFF_SETGET_FLOAT: + { + float data; + assert(fip->field_readcount==1); + assert(fip->field_passcount==0); + err=TIFFReadDirEntryFloat(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + if (!TIFFSetField(tif,dp->tdir_tag,data)) + return(0); + } + } + break; + case TIFF_SETGET_DOUBLE: + { + double data; + assert(fip->field_readcount==1); + assert(fip->field_passcount==0); + err=TIFFReadDirEntryDouble(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + if (!TIFFSetField(tif,dp->tdir_tag,data)) + return(0); + } + } + break; + case TIFF_SETGET_IFD8: + { + uint64 data; + assert(fip->field_readcount==1); + assert(fip->field_passcount==0); + err=TIFFReadDirEntryIfd8(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + if (!TIFFSetField(tif,dp->tdir_tag,data)) + return(0); + } + } + break; + case TIFF_SETGET_UINT16_PAIR: + { + uint16* data; + assert(fip->field_readcount==2); + assert(fip->field_passcount==0); + if (dp->tdir_count!=2) { + TIFFWarningExt(tif->tif_clientdata,module, + "incorrect count for field \"%s\", expected 2, got %d", + fip->field_name,(int)dp->tdir_count); + return(0); + } + err=TIFFReadDirEntryShortArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,data[0],data[1]); + _TIFFfree(data); + if (!m) + return(0); + } + } + break; + case TIFF_SETGET_C0_UINT8: + { + uint8* data; + assert(fip->field_readcount>=1); + assert(fip->field_passcount==0); + if (dp->tdir_count!=(uint64)fip->field_readcount) { + TIFFWarningExt(tif->tif_clientdata,module, + "incorrect count for field \"%s\", expected %d, got %d", + fip->field_name,(int) fip->field_readcount, (int)dp->tdir_count); + return 0; + } + else + { + err=TIFFReadDirEntryByteArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + } + break; + case TIFF_SETGET_C0_UINT16: + { + uint16* data; + assert(fip->field_readcount>=1); + assert(fip->field_passcount==0); + if (dp->tdir_count!=(uint64)fip->field_readcount) + /* corrupt file */; + else + { + err=TIFFReadDirEntryShortArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + } + break; + case TIFF_SETGET_C0_UINT32: + { + uint32* data; + assert(fip->field_readcount>=1); + assert(fip->field_passcount==0); + if (dp->tdir_count!=(uint64)fip->field_readcount) + /* corrupt file */; + else + { + err=TIFFReadDirEntryLongArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + } + break; + case TIFF_SETGET_C0_FLOAT: + { + float* data; + assert(fip->field_readcount>=1); + assert(fip->field_passcount==0); + if (dp->tdir_count!=(uint64)fip->field_readcount) + /* corrupt file */; + else + { + err=TIFFReadDirEntryFloatArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + } + break; + case TIFF_SETGET_C16_ASCII: + { + uint8* data; + assert(fip->field_readcount==TIFF_VARIABLE); + assert(fip->field_passcount==1); + if (dp->tdir_count>0xFFFF) + err=TIFFReadDirEntryErrCount; + else + { + err=TIFFReadDirEntryByteArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint16)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + } + break; + case TIFF_SETGET_C16_UINT8: + { + uint8* data; + assert(fip->field_readcount==TIFF_VARIABLE); + assert(fip->field_passcount==1); + if (dp->tdir_count>0xFFFF) + err=TIFFReadDirEntryErrCount; + else + { + err=TIFFReadDirEntryByteArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint16)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + } + break; + case TIFF_SETGET_C16_UINT16: + { + uint16* data; + assert(fip->field_readcount==TIFF_VARIABLE); + assert(fip->field_passcount==1); + if (dp->tdir_count>0xFFFF) + err=TIFFReadDirEntryErrCount; + else + { + err=TIFFReadDirEntryShortArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint16)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + } + break; + case TIFF_SETGET_C16_UINT32: + { + uint32* data; + assert(fip->field_readcount==TIFF_VARIABLE); + assert(fip->field_passcount==1); + if (dp->tdir_count>0xFFFF) + err=TIFFReadDirEntryErrCount; + else + { + err=TIFFReadDirEntryLongArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint16)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + } + break; + case TIFF_SETGET_C16_UINT64: + { + uint64* data; + assert(fip->field_readcount==TIFF_VARIABLE); + assert(fip->field_passcount==1); + if (dp->tdir_count>0xFFFF) + err=TIFFReadDirEntryErrCount; + else + { + err=TIFFReadDirEntryLong8Array(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint16)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + } + break; + case TIFF_SETGET_C16_FLOAT: + { + float* data; + assert(fip->field_readcount==TIFF_VARIABLE); + assert(fip->field_passcount==1); + if (dp->tdir_count>0xFFFF) + err=TIFFReadDirEntryErrCount; + else + { + err=TIFFReadDirEntryFloatArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint16)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + } + break; + case TIFF_SETGET_C16_DOUBLE: + { + double* data; + assert(fip->field_readcount==TIFF_VARIABLE); + assert(fip->field_passcount==1); + if (dp->tdir_count>0xFFFF) + err=TIFFReadDirEntryErrCount; + else + { + err=TIFFReadDirEntryDoubleArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint16)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + } + break; + case TIFF_SETGET_C16_IFD8: + { + uint64* data; + assert(fip->field_readcount==TIFF_VARIABLE); + assert(fip->field_passcount==1); + if (dp->tdir_count>0xFFFF) + err=TIFFReadDirEntryErrCount; + else + { + err=TIFFReadDirEntryIfd8Array(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint16)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + } + break; + case TIFF_SETGET_C32_ASCII: + { + uint8* data; + assert(fip->field_readcount==TIFF_VARIABLE2); + assert(fip->field_passcount==1); + err=TIFFReadDirEntryByteArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint32)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + break; + case TIFF_SETGET_C32_UINT8: + { + uint8* data; + assert(fip->field_readcount==TIFF_VARIABLE2); + assert(fip->field_passcount==1); + err=TIFFReadDirEntryByteArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint32)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + break; + case TIFF_SETGET_C32_SINT8: + { + int8* data = NULL; + assert(fip->field_readcount==TIFF_VARIABLE2); + assert(fip->field_passcount==1); + err=TIFFReadDirEntrySbyteArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint32)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + break; + case TIFF_SETGET_C32_UINT16: + { + uint16* data; + assert(fip->field_readcount==TIFF_VARIABLE2); + assert(fip->field_passcount==1); + err=TIFFReadDirEntryShortArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint32)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + break; + case TIFF_SETGET_C32_SINT16: + { + int16* data = NULL; + assert(fip->field_readcount==TIFF_VARIABLE2); + assert(fip->field_passcount==1); + err=TIFFReadDirEntrySshortArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint32)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + break; + case TIFF_SETGET_C32_UINT32: + { + uint32* data; + assert(fip->field_readcount==TIFF_VARIABLE2); + assert(fip->field_passcount==1); + err=TIFFReadDirEntryLongArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint32)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + break; + case TIFF_SETGET_C32_SINT32: + { + int32* data = NULL; + assert(fip->field_readcount==TIFF_VARIABLE2); + assert(fip->field_passcount==1); + err=TIFFReadDirEntrySlongArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint32)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + break; + case TIFF_SETGET_C32_UINT64: + { + uint64* data; + assert(fip->field_readcount==TIFF_VARIABLE2); + assert(fip->field_passcount==1); + err=TIFFReadDirEntryLong8Array(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint32)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + break; + case TIFF_SETGET_C32_SINT64: + { + int64* data = NULL; + assert(fip->field_readcount==TIFF_VARIABLE2); + assert(fip->field_passcount==1); + err=TIFFReadDirEntrySlong8Array(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint32)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + break; + case TIFF_SETGET_C32_FLOAT: + { + float* data; + assert(fip->field_readcount==TIFF_VARIABLE2); + assert(fip->field_passcount==1); + err=TIFFReadDirEntryFloatArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint32)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + break; + case TIFF_SETGET_C32_DOUBLE: + { + double* data; + assert(fip->field_readcount==TIFF_VARIABLE2); + assert(fip->field_passcount==1); + err=TIFFReadDirEntryDoubleArray(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint32)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + break; + case TIFF_SETGET_C32_IFD8: + { + uint64* data; + assert(fip->field_readcount==TIFF_VARIABLE2); + assert(fip->field_passcount==1); + err=TIFFReadDirEntryIfd8Array(tif,dp,&data); + if (err==TIFFReadDirEntryErrOk) + { + int m; + m=TIFFSetField(tif,dp->tdir_tag,(uint32)(dp->tdir_count),data); + if (data!=0) + _TIFFfree(data); + if (!m) + return(0); + } + } + break; + default: + assert(0); /* we should never get here */ + break; } - return (ok); + if (err!=TIFFReadDirEntryErrOk) + { + TIFFReadDirEntryOutputErr(tif,err,module,fip ? fip->field_name : "unknown tagname",recover); + return(0); + } + return(1); } -#define NITEMS(x) (sizeof (x) / sizeof (x[0])) -/* - * Fetch samples/pixel short values for - * the specified tag and verify that - * all values are the same. - */ -static int -TIFFFetchPerSampleShorts(TIFF* tif, TIFFDirEntry* dir, uint16* pl) -{ - uint16 samples = tif->tif_dir.td_samplesperpixel; - int status = 0; - - if (CheckDirCount(tif, dir, (uint32) samples)) { - uint16 buf[10]; - uint16* v = buf; - - if (dir->tdir_count > NITEMS(buf)) - v = (uint16*) _TIFFCheckMalloc(tif, dir->tdir_count, sizeof(uint16), - "to fetch per-sample values"); - if (v && TIFFFetchShortArray(tif, dir, v)) { - uint16 i; - int check_count = dir->tdir_count; - if( samples < check_count ) - check_count = samples; - - for (i = 1; i < check_count; i++) - if (v[i] != v[0]) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Cannot handle different per-sample values for field \"%s\"", - _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); - goto bad; - } - *pl = v[0]; - status = 1; - } - bad: - if (v && v != buf) - _TIFFfree(v); - } - return (status); -} - -/* - * Fetch samples/pixel long values for - * the specified tag and verify that - * all values are the same. - */ -static int -TIFFFetchPerSampleLongs(TIFF* tif, TIFFDirEntry* dir, uint32* pl) -{ - uint16 samples = tif->tif_dir.td_samplesperpixel; - int status = 0; - - if (CheckDirCount(tif, dir, (uint32) samples)) { - uint32 buf[10]; - uint32* v = buf; - - if (dir->tdir_count > NITEMS(buf)) - v = (uint32*) _TIFFCheckMalloc(tif, dir->tdir_count, sizeof(uint32), - "to fetch per-sample values"); - if (v && TIFFFetchLongArray(tif, dir, v)) { - uint16 i; - int check_count = dir->tdir_count; - - if( samples < check_count ) - check_count = samples; - for (i = 1; i < check_count; i++) - if (v[i] != v[0]) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Cannot handle different per-sample values for field \"%s\"", - _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); - goto bad; - } - *pl = v[0]; - status = 1; - } - bad: - if (v && v != buf) - _TIFFfree(v); - } - return (status); -} - -/* - * Fetch samples/pixel ANY values for the specified tag and verify that all - * values are the same. - */ -static int -TIFFFetchPerSampleAnys(TIFF* tif, TIFFDirEntry* dir, double* pl) -{ - uint16 samples = tif->tif_dir.td_samplesperpixel; - int status = 0; - - if (CheckDirCount(tif, dir, (uint32) samples)) { - double buf[10]; - double* v = buf; - - if (dir->tdir_count > NITEMS(buf)) - v = (double*) _TIFFCheckMalloc(tif, dir->tdir_count, sizeof (double), - "to fetch per-sample values"); - if (v && TIFFFetchAnyArray(tif, dir, v)) { - uint16 i; - int check_count = dir->tdir_count; - if( samples < check_count ) - check_count = samples; - - for (i = 1; i < check_count; i++) - if (v[i] != v[0]) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Cannot handle different per-sample values for field \"%s\"", - _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); - goto bad; - } - *pl = v[0]; - status = 1; - } - bad: - if (v && v != buf) - _TIFFfree(v); - } - return (status); -} -#undef NITEMS - /* * Fetch a set of offsets or lengths. * While this routine says "strips", in fact it's also used for tiles. */ static int -TIFFFetchStripThing(TIFF* tif, TIFFDirEntry* dir, long nstrips, uint32** lpp) +TIFFFetchStripThing(TIFF* tif, TIFFDirEntry* dir, uint32 nstrips, uint64** lpp) { - register uint32* lp; - int status; - - CheckDirCount(tif, dir, (uint32) nstrips); - - /* - * Allocate space for strip information. - */ - if (*lpp == NULL && - (*lpp = (uint32 *)_TIFFCheckMalloc(tif, - nstrips, sizeof (uint32), "for strip array")) == NULL) - return (0); - lp = *lpp; - _TIFFmemset( lp, 0, sizeof(uint32) * nstrips ); - - if (dir->tdir_type == (int)TIFF_SHORT) { - /* - * Handle uint16->uint32 expansion. - */ - uint16* dp = (uint16*) _TIFFCheckMalloc(tif, - dir->tdir_count, sizeof (uint16), "to fetch strip tag"); - if (dp == NULL) - return (0); - if( (status = TIFFFetchShortArray(tif, dir, dp)) != 0 ) { - int i; - - for( i = 0; i < nstrips && i < (int) dir->tdir_count; i++ ) - { - lp[i] = dp[i]; - } - } - _TIFFfree((char*) dp); - - } else if( nstrips != (int) dir->tdir_count ) { - /* Special case to correct length */ - - uint32* dp = (uint32*) _TIFFCheckMalloc(tif, - dir->tdir_count, sizeof (uint32), "to fetch strip tag"); - if (dp == NULL) - return (0); - - status = TIFFFetchLongArray(tif, dir, dp); - if( status != 0 ) { - int i; - - for( i = 0; i < nstrips && i < (int) dir->tdir_count; i++ ) - { - lp[i] = dp[i]; - } - } - - _TIFFfree( (char *) dp ); - } else - status = TIFFFetchLongArray(tif, dir, lp); - - return (status); -} - -/* - * Fetch and set the RefBlackWhite tag. - */ -static int -TIFFFetchRefBlackWhite(TIFF* tif, TIFFDirEntry* dir) -{ - static const char mesg[] = "for \"ReferenceBlackWhite\" array"; - char* cp; - int ok; - - if (dir->tdir_type == TIFF_RATIONAL) - return (TIFFFetchNormalTag(tif, dir)); - /* - * Handle LONG's for backward compatibility. - */ - cp = (char *)_TIFFCheckMalloc(tif, dir->tdir_count, - sizeof (uint32), mesg); - if( (ok = (cp && TIFFFetchLongArray(tif, dir, (uint32*) cp))) != 0) { - float* fp = (float*) - _TIFFCheckMalloc(tif, dir->tdir_count, sizeof (float), mesg); - if( (ok = (fp != NULL)) != 0 ) { - uint32 i; - for (i = 0; i < dir->tdir_count; i++) - fp[i] = (float)((uint32*) cp)[i]; - ok = TIFFSetField(tif, dir->tdir_tag, fp); - _TIFFfree((char*) fp); - } + static const char module[] = "TIFFFetchStripThing"; + enum TIFFReadDirEntryErr err; + uint64* data; + err=TIFFReadDirEntryLong8Array(tif,dir,&data); + if (err!=TIFFReadDirEntryErrOk) + { + const TIFFField* fip = TIFFFieldWithTag(tif,dir->tdir_tag); + TIFFReadDirEntryOutputErr(tif,err,module,fip ? fip->field_name : "unknown tagname",0); + return(0); } - if (cp) - _TIFFfree(cp); - return (ok); + if (dir->tdir_count!=(uint64)nstrips) + { + uint64* resizeddata; + resizeddata=(uint64*)_TIFFCheckMalloc(tif,nstrips,sizeof(uint64),"for strip array"); + if (resizeddata==0) { + _TIFFfree(data); + return(0); + } + if (dir->tdir_count<(uint64)nstrips) + { + _TIFFmemcpy(resizeddata,data,(uint32)dir->tdir_count*sizeof(uint64)); + _TIFFmemset(resizeddata+(uint32)dir->tdir_count,0,(nstrips-(uint32)dir->tdir_count)*sizeof(uint64)); + } + else + _TIFFmemcpy(resizeddata,data,nstrips*sizeof(uint64)); + _TIFFfree(data); + data=resizeddata; + } + *lpp=data; + return(1); } /* @@ -1966,29 +5406,56 @@ TIFFFetchRefBlackWhite(TIFF* tif, TIFFDirEntry* dir) static int TIFFFetchSubjectDistance(TIFF* tif, TIFFDirEntry* dir) { - uint32 l[2]; - float v; - int ok = 0; - - if( dir->tdir_count != 1 || dir->tdir_type != TIFF_RATIONAL ) - { - TIFFWarningExt(tif->tif_clientdata, tif->tif_name, - "incorrect count or type for SubjectDistance, tag ignored" ); - return (0); - } - - if (TIFFFetchData(tif, dir, (char *)l) - && cvtRational(tif, dir, l[0], l[1], &v)) { - /* - * XXX: Numerator 0xFFFFFFFF means that we have infinite - * distance. Indicate that with a negative floating point - * SubjectDistance value. - */ - ok = TIFFSetField(tif, dir->tdir_tag, - (l[0] != 0xFFFFFFFF) ? v : -v); + static const char module[] = "TIFFFetchSubjectDistance"; + enum TIFFReadDirEntryErr err; + UInt64Aligned_t m; + m.l=0; + assert(sizeof(double)==8); + assert(sizeof(uint64)==8); + assert(sizeof(uint32)==4); + if (dir->tdir_count!=1) + err=TIFFReadDirEntryErrCount; + else if (dir->tdir_type!=TIFF_RATIONAL) + err=TIFFReadDirEntryErrType; + else + { + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + uint32 offset; + offset=*(uint32*)(&dir->tdir_offset); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(&offset); + err=TIFFReadDirEntryData(tif,offset,8,m.i); + } + else + { + m.l=dir->tdir_offset.toff_long8; + err=TIFFReadDirEntryErrOk; + } + } + if (err==TIFFReadDirEntryErrOk) + { + double n; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong(m.i,2); + if (m.i[0]==0) + n=0.0; + else if (m.i[0]==0xFFFFFFFF) + /* + * XXX: Numerator 0xFFFFFFFF means that we have infinite + * distance. Indicate that with a negative floating point + * SubjectDistance value. + */ + n=-1.0; + else + n=(double)m.i[0]/(double)m.i[1]; + return(TIFFSetField(tif,dir->tdir_tag,n)); + } + else + { + TIFFReadDirEntryOutputErr(tif,err,module,"SubjectDistance",TRUE); + return(0); } - - return ok; } /* @@ -2001,42 +5468,59 @@ static void ChopUpSingleUncompressedStrip(TIFF* tif) { register TIFFDirectory *td = &tif->tif_dir; - uint32 bytecount = td->td_stripbytecount[0]; - uint32 offset = td->td_stripoffset[0]; - tsize_t rowbytes = TIFFVTileSize(tif, 1), stripbytes; - tstrip_t strip, nstrips, rowsperstrip; - uint32* newcounts; - uint32* newoffsets; + uint64 bytecount; + uint64 offset; + uint32 rowblock; + uint64 rowblockbytes; + uint64 stripbytes; + uint32 strip; + uint64 nstrips64; + uint32 nstrips32; + uint32 rowsperstrip; + uint64* newcounts; + uint64* newoffsets; + bytecount = td->td_stripbytecount[0]; + offset = td->td_stripoffset[0]; + assert(td->td_planarconfig == PLANARCONFIG_CONTIG); + if ((td->td_photometric == PHOTOMETRIC_YCBCR)&& + (!isUpSampled(tif))) + rowblock = td->td_ycbcrsubsampling[1]; + else + rowblock = 1; + rowblockbytes = TIFFVTileSize64(tif, rowblock); /* * Make the rows hold at least one scanline, but fill specified amount * of data if possible. */ - if (rowbytes > STRIP_SIZE_DEFAULT) { - stripbytes = rowbytes; - rowsperstrip = 1; - } else if (rowbytes > 0 ) { - rowsperstrip = STRIP_SIZE_DEFAULT / rowbytes; - stripbytes = rowbytes * rowsperstrip; + if (rowblockbytes > STRIP_SIZE_DEFAULT) { + stripbytes = rowblockbytes; + rowsperstrip = rowblock; + } else if (rowblockbytes > 0 ) { + uint32 rowblocksperstrip; + rowblocksperstrip = (uint32) (STRIP_SIZE_DEFAULT / rowblockbytes); + rowsperstrip = rowblocksperstrip * rowblock; + stripbytes = rowblocksperstrip * rowblockbytes; } - else - return; + else + return; - /* + /* * never increase the number of strips in an image */ if (rowsperstrip >= td->td_rowsperstrip) return; - nstrips = (tstrip_t) TIFFhowmany(bytecount, stripbytes); - if( nstrips == 0 ) /* something is wonky, do nothing. */ - return; + nstrips64 = TIFFhowmany_64(bytecount, stripbytes); + if ((nstrips64==0)||(nstrips64>0xFFFFFFFF)) /* something is wonky, do nothing. */ + return; + nstrips32 = (uint32)nstrips64; - newcounts = (uint32*) _TIFFCheckMalloc(tif, nstrips, sizeof (uint32), + newcounts = (uint64*) _TIFFCheckMalloc(tif, nstrips32, sizeof (uint64), "for chopped \"StripByteCounts\" array"); - newoffsets = (uint32*) _TIFFCheckMalloc(tif, nstrips, sizeof (uint32), + newoffsets = (uint64*) _TIFFCheckMalloc(tif, nstrips32, sizeof (uint64), "for chopped \"StripOffsets\" array"); if (newcounts == NULL || newoffsets == NULL) { - /* + /* * Unable to allocate new strip information, give up and use * the original one strip information. */ @@ -2050,8 +5534,8 @@ ChopUpSingleUncompressedStrip(TIFF* tif) * Fill the strip information arrays with new bytecounts and offsets * that reflect the broken-up format. */ - for (strip = 0; strip < nstrips; strip++) { - if ((uint32)stripbytes > bytecount) + for (strip = 0; strip < nstrips32; strip++) { + if (stripbytes > bytecount) stripbytes = bytecount; newcounts[strip] = stripbytes; newoffsets[strip] = offset; @@ -2061,7 +5545,7 @@ ChopUpSingleUncompressedStrip(TIFF* tif) /* * Replace old single strip info with multi-strip info. */ - td->td_stripsperimage = td->td_nstrips = nstrips; + td->td_stripsperimage = td->td_nstrips = nstrips32; TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rowsperstrip); _TIFFfree(td->td_stripbytecount); @@ -2071,6 +5555,54 @@ ChopUpSingleUncompressedStrip(TIFF* tif) td->td_stripbytecountsorted = 1; } +int _TIFFFillStriles( TIFF *tif ) +{ +#if defined(DEFER_STRILE_LOAD) + register TIFFDirectory *td = &tif->tif_dir; + int return_value = 1; + + if( td->td_stripoffset != NULL ) + return 1; + + if( td->td_stripoffset_entry.tdir_count == 0 ) + return 0; + + if (!TIFFFetchStripThing(tif,&(td->td_stripoffset_entry), + td->td_nstrips,&td->td_stripoffset)) + { + return_value = 0; + } + + if (!TIFFFetchStripThing(tif,&(td->td_stripbytecount_entry), + td->td_nstrips,&td->td_stripbytecount)) + { + return_value = 0; + } + + _TIFFmemset( &(td->td_stripoffset_entry), 0, sizeof(TIFFDirEntry)); + _TIFFmemset( &(td->td_stripbytecount_entry), 0, sizeof(TIFFDirEntry)); + + if (tif->tif_dir.td_nstrips > 1 && return_value == 1 ) { + uint32 strip; + + tif->tif_dir.td_stripbytecountsorted = 1; + for (strip = 1; strip < tif->tif_dir.td_nstrips; strip++) { + if (tif->tif_dir.td_stripoffset[strip - 1] > + tif->tif_dir.td_stripoffset[strip]) { + tif->tif_dir.td_stripbytecountsorted = 0; + break; + } + } + } + + return return_value; +#else /* !defined(DEFER_STRILE_LOAD) */ + (void) tif; + return 1; +#endif +} + + /* vim: set ts=8 sts=8 sw=8 noet: */ /* * Local Variables: diff --git a/dll/3rdparty/libtiff/tif_dirwrite.c b/dll/3rdparty/libtiff/tif_dirwrite.c index 8d308c42926..fa20609e2bd 100644 --- a/dll/3rdparty/libtiff/tif_dirwrite.c +++ b/dll/3rdparty/libtiff/tif_dirwrite.c @@ -1,26 +1,26 @@ -/* $Id: tif_dirwrite.c,v 1.37.2.7 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Id: tif_dirwrite.c,v 1.77 2012-07-06 19:18:31 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. * - * Permission to use, copy, modify, distribute, and sell this software and + * Permission to use, copy, modify, distribute, and sell this software and * its documentation for any purpose is hereby granted without fee, provided * that (i) the above copyright notices and this permission notice appear in * all copies of the software and related documentation, and (ii) the names of * Sam Leffler and Silicon Graphics may not be used in any advertising or * publicity relating to the software without the specific, prior written * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. */ @@ -32,44 +32,144 @@ #include "tiffiop.h" #ifdef HAVE_IEEEFP -# define TIFFCvtNativeToIEEEFloat(tif, n, fp) -# define TIFFCvtNativeToIEEEDouble(tif, n, dp) +#define TIFFCvtNativeToIEEEFloat(tif, n, fp) +#define TIFFCvtNativeToIEEEDouble(tif, n, dp) #else -extern void TIFFCvtNativeToIEEEFloat(TIFF*, uint32, float*); -extern void TIFFCvtNativeToIEEEDouble(TIFF*, uint32, double*); +extern void TIFFCvtNativeToIEEEFloat(TIFF* tif, uint32 n, float* fp); +extern void TIFFCvtNativeToIEEEDouble(TIFF* tif, uint32 n, double* dp); #endif -static int TIFFWriteNormalTag(TIFF*, TIFFDirEntry*, const TIFFFieldInfo*); -static void TIFFSetupShortLong(TIFF*, ttag_t, TIFFDirEntry*, uint32); -static void TIFFSetupShort(TIFF*, ttag_t, TIFFDirEntry*, uint16); -static int TIFFSetupShortPair(TIFF*, ttag_t, TIFFDirEntry*); -static int TIFFWritePerSampleShorts(TIFF*, ttag_t, TIFFDirEntry*); -static int TIFFWritePerSampleAnys(TIFF*, TIFFDataType, ttag_t, TIFFDirEntry*); -static int TIFFWriteShortTable(TIFF*, ttag_t, TIFFDirEntry*, uint32, uint16**); -static int TIFFWriteShortArray(TIFF*, TIFFDirEntry*, uint16*); -static int TIFFWriteLongArray(TIFF *, TIFFDirEntry*, uint32*); -static int TIFFWriteRationalArray(TIFF *, TIFFDirEntry*, float*); -static int TIFFWriteFloatArray(TIFF *, TIFFDirEntry*, float*); -static int TIFFWriteDoubleArray(TIFF *, TIFFDirEntry*, double*); -static int TIFFWriteByteArray(TIFF*, TIFFDirEntry*, char*); -static int TIFFWriteAnyArray(TIFF*, - TIFFDataType, ttag_t, TIFFDirEntry*, uint32, double*); -static int TIFFWriteTransferFunction(TIFF*, TIFFDirEntry*); -static int TIFFWriteInkNames(TIFF*, TIFFDirEntry*); -static int TIFFWriteData(TIFF*, TIFFDirEntry*, char*); -static int TIFFLinkDirectory(TIFF*); +static int TIFFWriteDirectorySec(TIFF* tif, int isimage, int imagedone, uint64* pdiroff); -#define WriteRationalPair(type, tag1, v1, tag2, v2) { \ - TIFFWriteRational((tif), (type), (tag1), (dir), (v1)) \ - TIFFWriteRational((tif), (type), (tag2), (dir)+1, (v2)) \ - (dir)++; \ -} -#define TIFFWriteRational(tif, type, tag, dir, v) \ - (dir)->tdir_tag = (tag); \ - (dir)->tdir_type = (type); \ - (dir)->tdir_count = 1; \ - if (!TIFFWriteRationalArray((tif), (dir), &(v))) \ - goto bad; +static int TIFFWriteDirectoryTagSampleformatArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, double* value); +#if 0 +static int TIFFWriteDirectoryTagSampleformatPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value); +#endif + +static int TIFFWriteDirectoryTagAscii(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, char* value); +static int TIFFWriteDirectoryTagUndefinedArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint8* value); +#ifdef notdef +static int TIFFWriteDirectoryTagByte(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint8 value); +#endif +static int TIFFWriteDirectoryTagByteArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint8* value); +#if 0 +static int TIFFWriteDirectoryTagBytePerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint8 value); +#endif +#ifdef notdef +static int TIFFWriteDirectoryTagSbyte(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int8 value); +#endif +static int TIFFWriteDirectoryTagSbyteArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int8* value); +#if 0 +static int TIFFWriteDirectoryTagSbytePerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int8 value); +#endif +static int TIFFWriteDirectoryTagShort(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint16 value); +static int TIFFWriteDirectoryTagShortArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint16* value); +static int TIFFWriteDirectoryTagShortPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint16 value); +#ifdef notdef +static int TIFFWriteDirectoryTagSshort(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int16 value); +#endif +static int TIFFWriteDirectoryTagSshortArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int16* value); +#if 0 +static int TIFFWriteDirectoryTagSshortPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int16 value); +#endif +static int TIFFWriteDirectoryTagLong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 value); +static int TIFFWriteDirectoryTagLongArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint32* value); +#if 0 +static int TIFFWriteDirectoryTagLongPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 value); +#endif +#ifdef notdef +static int TIFFWriteDirectoryTagSlong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int32 value); +#endif +static int TIFFWriteDirectoryTagSlongArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int32* value); +#if 0 +static int TIFFWriteDirectoryTagSlongPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int32 value); +#endif +#ifdef notdef +static int TIFFWriteDirectoryTagLong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint64 value); +#endif +static int TIFFWriteDirectoryTagLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value); +#ifdef notdef +static int TIFFWriteDirectoryTagSlong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int64 value); +#endif +static int TIFFWriteDirectoryTagSlong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int64* value); +static int TIFFWriteDirectoryTagRational(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value); +static int TIFFWriteDirectoryTagRationalArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value); +static int TIFFWriteDirectoryTagSrationalArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value); +#ifdef notdef +static int TIFFWriteDirectoryTagFloat(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, float value); +#endif +static int TIFFWriteDirectoryTagFloatArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value); +#if 0 +static int TIFFWriteDirectoryTagFloatPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, float value); +#endif +#ifdef notdef +static int TIFFWriteDirectoryTagDouble(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value); +#endif +static int TIFFWriteDirectoryTagDoubleArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, double* value); +#if 0 +static int TIFFWriteDirectoryTagDoublePerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value); +#endif +static int TIFFWriteDirectoryTagIfdArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint32* value); +#ifdef notdef +static int TIFFWriteDirectoryTagIfd8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value); +#endif +static int TIFFWriteDirectoryTagShortLong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 value); +static int TIFFWriteDirectoryTagLongLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value); +static int TIFFWriteDirectoryTagIfdIfd8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value); +#ifdef notdef +static int TIFFWriteDirectoryTagShortLongLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value); +#endif +static int TIFFWriteDirectoryTagColormap(TIFF* tif, uint32* ndir, TIFFDirEntry* dir); +static int TIFFWriteDirectoryTagTransferfunction(TIFF* tif, uint32* ndir, TIFFDirEntry* dir); +static int TIFFWriteDirectoryTagSubifd(TIFF* tif, uint32* ndir, TIFFDirEntry* dir); + +static int TIFFWriteDirectoryTagCheckedAscii(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, char* value); +static int TIFFWriteDirectoryTagCheckedUndefinedArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint8* value); +#ifdef notdef +static int TIFFWriteDirectoryTagCheckedByte(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint8 value); +#endif +static int TIFFWriteDirectoryTagCheckedByteArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint8* value); +#ifdef notdef +static int TIFFWriteDirectoryTagCheckedSbyte(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int8 value); +#endif +static int TIFFWriteDirectoryTagCheckedSbyteArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int8* value); +static int TIFFWriteDirectoryTagCheckedShort(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint16 value); +static int TIFFWriteDirectoryTagCheckedShortArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint16* value); +#ifdef notdef +static int TIFFWriteDirectoryTagCheckedSshort(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int16 value); +#endif +static int TIFFWriteDirectoryTagCheckedSshortArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int16* value); +static int TIFFWriteDirectoryTagCheckedLong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 value); +static int TIFFWriteDirectoryTagCheckedLongArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint32* value); +#ifdef notdef +static int TIFFWriteDirectoryTagCheckedSlong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int32 value); +#endif +static int TIFFWriteDirectoryTagCheckedSlongArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int32* value); +#ifdef notdef +static int TIFFWriteDirectoryTagCheckedLong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint64 value); +#endif +static int TIFFWriteDirectoryTagCheckedLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value); +#ifdef notdef +static int TIFFWriteDirectoryTagCheckedSlong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int64 value); +#endif +static int TIFFWriteDirectoryTagCheckedSlong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int64* value); +static int TIFFWriteDirectoryTagCheckedRational(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value); +static int TIFFWriteDirectoryTagCheckedRationalArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value); +static int TIFFWriteDirectoryTagCheckedSrationalArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value); +#ifdef notdef +static int TIFFWriteDirectoryTagCheckedFloat(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, float value); +#endif +static int TIFFWriteDirectoryTagCheckedFloatArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value); +#ifdef notdef +static int TIFFWriteDirectoryTagCheckedDouble(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value); +#endif +static int TIFFWriteDirectoryTagCheckedDoubleArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, double* value); +static int TIFFWriteDirectoryTagCheckedIfdArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint32* value); +static int TIFFWriteDirectoryTagCheckedIfd8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value); + +static int TIFFWriteDirectoryTagData(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint16 datatype, uint32 count, uint32 datalength, void* data); + +static int TIFFLinkDirectory(TIFF*); /* * Write the contents of the current directory @@ -77,343 +177,10 @@ static int TIFFLinkDirectory(TIFF*); * handle overwriting a directory with auxiliary * storage that's been changed. */ -static int -_TIFFWriteDirectory(TIFF* tif, int done) -{ - uint16 dircount; - toff_t diroff; - ttag_t tag; - uint32 nfields; - tsize_t dirsize; - char* data; - TIFFDirEntry* dir; - TIFFDirectory* td; - unsigned long b, fields[FIELD_SETLONGS]; - int fi, nfi; - - if (tif->tif_mode == O_RDONLY) - return (1); - /* - * Clear write state so that subsequent images with - * different characteristics get the right buffers - * setup for them. - */ - if (done) - { - if (tif->tif_flags & TIFF_POSTENCODE) { - tif->tif_flags &= ~TIFF_POSTENCODE; - if (!(*tif->tif_postencode)(tif)) { - TIFFErrorExt(tif->tif_clientdata, - tif->tif_name, - "Error post-encoding before directory write"); - return (0); - } - } - (*tif->tif_close)(tif); /* shutdown encoder */ - /* - * Flush any data that might have been written - * by the compression close+cleanup routines. - */ - if (tif->tif_rawcc > 0 - && (tif->tif_flags & TIFF_BEENWRITING) != 0 - && !TIFFFlushData1(tif)) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Error flushing data before directory write"); - return (0); - } - if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata) { - _TIFFfree(tif->tif_rawdata); - tif->tif_rawdata = NULL; - tif->tif_rawcc = 0; - tif->tif_rawdatasize = 0; - } - tif->tif_flags &= ~(TIFF_BEENWRITING|TIFF_BUFFERSETUP); - } - - td = &tif->tif_dir; - /* - * Size the directory so that we can calculate - * offsets for the data items that aren't kept - * in-place in each field. - */ - nfields = 0; - for (b = 0; b <= FIELD_LAST; b++) - if (TIFFFieldSet(tif, b) && b != FIELD_CUSTOM) - nfields += (b < FIELD_SUBFILETYPE ? 2 : 1); - nfields += td->td_customValueCount; - dirsize = nfields * sizeof (TIFFDirEntry); - data = (char*) _TIFFmalloc(dirsize); - if (data == NULL) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Cannot write directory, out of space"); - return (0); - } - /* - * Directory hasn't been placed yet, put - * it at the end of the file and link it - * into the existing directory structure. - */ - if (tif->tif_diroff == 0 && !TIFFLinkDirectory(tif)) - goto bad; - tif->tif_dataoff = (toff_t)( - tif->tif_diroff + sizeof (uint16) + dirsize + sizeof (toff_t)); - if (tif->tif_dataoff & 1) - tif->tif_dataoff++; - (void) TIFFSeekFile(tif, tif->tif_dataoff, SEEK_SET); - tif->tif_curdir++; - dir = (TIFFDirEntry*) data; - /* - * Setup external form of directory - * entries and write data items. - */ - _TIFFmemcpy(fields, td->td_fieldsset, sizeof (fields)); - /* - * Write out ExtraSamples tag only if - * extra samples are present in the data. - */ - if (FieldSet(fields, FIELD_EXTRASAMPLES) && !td->td_extrasamples) { - ResetFieldBit(fields, FIELD_EXTRASAMPLES); - nfields--; - dirsize -= sizeof (TIFFDirEntry); - } /*XXX*/ - for (fi = 0, nfi = tif->tif_nfields; nfi > 0; nfi--, fi++) { - const TIFFFieldInfo* fip = tif->tif_fieldinfo[fi]; - - /* - * For custom fields, we test to see if the custom field - * is set or not. For normal fields, we just use the - * FieldSet test. - */ - if( fip->field_bit == FIELD_CUSTOM ) - { - int ci, is_set = FALSE; - - for( ci = 0; ci < td->td_customValueCount; ci++ ) - is_set |= (td->td_customValues[ci].info == fip); - - if( !is_set ) - continue; - } - else if (!FieldSet(fields, fip->field_bit)) - continue; - - /* - * Handle other fields. - */ - switch (fip->field_bit) - { - case FIELD_STRIPOFFSETS: - /* - * We use one field bit for both strip and tile - - * offsets, and so must be careful in selecting - * the appropriate field descriptor (so that tags - * are written in sorted order). - */ - tag = isTiled(tif) ? - TIFFTAG_TILEOFFSETS : TIFFTAG_STRIPOFFSETS; - if (tag != fip->field_tag) - continue; - - dir->tdir_tag = (uint16) tag; - dir->tdir_type = (uint16) TIFF_LONG; - dir->tdir_count = (uint32) td->td_nstrips; - if (!TIFFWriteLongArray(tif, dir, td->td_stripoffset)) - goto bad; - break; - case FIELD_STRIPBYTECOUNTS: - /* - * We use one field bit for both strip and tile - * byte counts, and so must be careful in selecting - * the appropriate field descriptor (so that tags - * are written in sorted order). - */ - tag = isTiled(tif) ? - TIFFTAG_TILEBYTECOUNTS : TIFFTAG_STRIPBYTECOUNTS; - if (tag != fip->field_tag) - continue; - - dir->tdir_tag = (uint16) tag; - dir->tdir_type = (uint16) TIFF_LONG; - dir->tdir_count = (uint32) td->td_nstrips; - if (!TIFFWriteLongArray(tif, dir, td->td_stripbytecount)) - goto bad; - break; - case FIELD_ROWSPERSTRIP: - TIFFSetupShortLong(tif, TIFFTAG_ROWSPERSTRIP, - dir, td->td_rowsperstrip); - break; - case FIELD_COLORMAP: - if (!TIFFWriteShortTable(tif, TIFFTAG_COLORMAP, dir, - 3, td->td_colormap)) - goto bad; - break; - case FIELD_IMAGEDIMENSIONS: - TIFFSetupShortLong(tif, TIFFTAG_IMAGEWIDTH, - dir++, td->td_imagewidth); - TIFFSetupShortLong(tif, TIFFTAG_IMAGELENGTH, - dir, td->td_imagelength); - break; - case FIELD_TILEDIMENSIONS: - TIFFSetupShortLong(tif, TIFFTAG_TILEWIDTH, - dir++, td->td_tilewidth); - TIFFSetupShortLong(tif, TIFFTAG_TILELENGTH, - dir, td->td_tilelength); - break; - case FIELD_COMPRESSION: - TIFFSetupShort(tif, TIFFTAG_COMPRESSION, - dir, td->td_compression); - break; - case FIELD_PHOTOMETRIC: - TIFFSetupShort(tif, TIFFTAG_PHOTOMETRIC, - dir, td->td_photometric); - break; - case FIELD_POSITION: - WriteRationalPair(TIFF_RATIONAL, - TIFFTAG_XPOSITION, td->td_xposition, - TIFFTAG_YPOSITION, td->td_yposition); - break; - case FIELD_RESOLUTION: - WriteRationalPair(TIFF_RATIONAL, - TIFFTAG_XRESOLUTION, td->td_xresolution, - TIFFTAG_YRESOLUTION, td->td_yresolution); - break; - case FIELD_BITSPERSAMPLE: - case FIELD_MINSAMPLEVALUE: - case FIELD_MAXSAMPLEVALUE: - case FIELD_SAMPLEFORMAT: - if (!TIFFWritePerSampleShorts(tif, fip->field_tag, dir)) - goto bad; - break; - case FIELD_SMINSAMPLEVALUE: - case FIELD_SMAXSAMPLEVALUE: - if (!TIFFWritePerSampleAnys(tif, - _TIFFSampleToTagType(tif), fip->field_tag, dir)) - goto bad; - break; - case FIELD_PAGENUMBER: - case FIELD_HALFTONEHINTS: - case FIELD_YCBCRSUBSAMPLING: - if (!TIFFSetupShortPair(tif, fip->field_tag, dir)) - goto bad; - break; - case FIELD_INKNAMES: - if (!TIFFWriteInkNames(tif, dir)) - goto bad; - break; - case FIELD_TRANSFERFUNCTION: - if (!TIFFWriteTransferFunction(tif, dir)) - goto bad; - break; - case FIELD_SUBIFD: - /* - * XXX: Always write this field using LONG type - * for backward compatibility. - */ - dir->tdir_tag = (uint16) fip->field_tag; - dir->tdir_type = (uint16) TIFF_LONG; - dir->tdir_count = (uint32) td->td_nsubifd; - if (!TIFFWriteLongArray(tif, dir, td->td_subifd)) - goto bad; - /* - * Total hack: if this directory includes a SubIFD - * tag then force the next directories to be - * written as ``sub directories'' of this one. This - * is used to write things like thumbnails and - * image masks that one wants to keep out of the - * normal directory linkage access mechanism. - */ - if (dir->tdir_count > 0) { - tif->tif_flags |= TIFF_INSUBIFD; - tif->tif_nsubifd = (uint16) dir->tdir_count; - if (dir->tdir_count > 1) - tif->tif_subifdoff = dir->tdir_offset; - else - tif->tif_subifdoff = (uint32)( - tif->tif_diroff - + sizeof (uint16) - + ((char*)&dir->tdir_offset-data)); - } - break; - default: - /* XXX: Should be fixed and removed. */ - if (fip->field_tag == TIFFTAG_DOTRANGE) { - if (!TIFFSetupShortPair(tif, fip->field_tag, dir)) - goto bad; - } - else if (!TIFFWriteNormalTag(tif, dir, fip)) - goto bad; - break; - } - dir++; - - if( fip->field_bit != FIELD_CUSTOM ) - ResetFieldBit(fields, fip->field_bit); - } - - /* - * Write directory. - */ - dircount = (uint16) nfields; - diroff = (uint32) tif->tif_nextdiroff; - if (tif->tif_flags & TIFF_SWAB) { - /* - * The file's byte order is opposite to the - * native machine architecture. We overwrite - * the directory information with impunity - * because it'll be released below after we - * write it to the file. Note that all the - * other tag construction routines assume that - * we do this byte-swapping; i.e. they only - * byte-swap indirect data. - */ - for (dir = (TIFFDirEntry*) data; dircount; dir++, dircount--) { - TIFFSwabArrayOfShort(&dir->tdir_tag, 2); - TIFFSwabArrayOfLong(&dir->tdir_count, 2); - } - dircount = (uint16) nfields; - TIFFSwabShort(&dircount); - TIFFSwabLong(&diroff); - } - (void) TIFFSeekFile(tif, tif->tif_diroff, SEEK_SET); - if (!WriteOK(tif, &dircount, sizeof (dircount))) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Error writing directory count"); - goto bad; - } - if (!WriteOK(tif, data, dirsize)) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Error writing directory contents"); - goto bad; - } - if (!WriteOK(tif, &diroff, sizeof (uint32))) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Error writing directory link"); - goto bad; - } - if (done) { - TIFFFreeDirectory(tif); - tif->tif_flags &= ~TIFF_DIRTYDIRECT; - (*tif->tif_cleanup)(tif); - - /* - * Reset directory-related state for subsequent - * directories. - */ - TIFFCreateDirectory(tif); - } - _TIFFfree(data); - return (1); -bad: - _TIFFfree(data); - return (0); -} -#undef WriteRationalPair - int TIFFWriteDirectory(TIFF* tif) { - return _TIFFWriteDirectory(tif, TRUE); + return TIFFWriteDirectorySec(tif,TRUE,TRUE,NULL); } /* @@ -421,7 +188,7 @@ TIFFWriteDirectory(TIFF* tif) * but leaves all data structures in memory so that it can be * written again. This will make a partially written TIFF file * readable before it is successfully completed/closed. - */ + */ int TIFFCheckpointDirectory(TIFF* tif) { @@ -429,892 +196,2169 @@ TIFFCheckpointDirectory(TIFF* tif) /* Setup the strips arrays, if they haven't already been. */ if (tif->tif_dir.td_stripoffset == NULL) (void) TIFFSetupStrips(tif); - rc = _TIFFWriteDirectory(tif, FALSE); + rc = TIFFWriteDirectorySec(tif,TRUE,FALSE,NULL); (void) TIFFSetWriteOffset(tif, TIFFSeekFile(tif, 0, SEEK_END)); return rc; } -static int -_TIFFWriteCustomDirectory(TIFF* tif, toff_t *pdiroff) +int +TIFFWriteCustomDirectory(TIFF* tif, uint64* pdiroff) { - uint16 dircount; - uint32 nfields; - tsize_t dirsize; - char* data; - TIFFDirEntry* dir; - TIFFDirectory* td; - unsigned long b, fields[FIELD_SETLONGS]; - int fi, nfi; + return TIFFWriteDirectorySec(tif,FALSE,FALSE,pdiroff); +} +/* + * Similar to TIFFWriteDirectory(), but if the directory has already + * been written once, it is relocated to the end of the file, in case it + * has changed in size. Note that this will result in the loss of the + * previously used directory space. + */ +int +TIFFRewriteDirectory( TIFF *tif ) +{ + static const char module[] = "TIFFRewriteDirectory"; + + /* We don't need to do anything special if it hasn't been written. */ + if( tif->tif_diroff == 0 ) + return TIFFWriteDirectory( tif ); + + /* + * Find and zero the pointer to this directory, so that TIFFLinkDirectory + * will cause it to be added after this directories current pre-link. + */ + + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + if (tif->tif_header.classic.tiff_diroff == tif->tif_diroff) + { + tif->tif_header.classic.tiff_diroff = 0; + tif->tif_diroff = 0; + + TIFFSeekFile(tif,4,SEEK_SET); + if (!WriteOK(tif, &(tif->tif_header.classic.tiff_diroff),4)) + { + TIFFErrorExt(tif->tif_clientdata, tif->tif_name, + "Error updating TIFF header"); + return (0); + } + } + else + { + uint32 nextdir; + nextdir = tif->tif_header.classic.tiff_diroff; + while(1) { + uint16 dircount; + uint32 nextnextdir; + + if (!SeekOK(tif, nextdir) || + !ReadOK(tif, &dircount, 2)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error fetching directory count"); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabShort(&dircount); + (void) TIFFSeekFile(tif, + nextdir+2+dircount*12, SEEK_SET); + if (!ReadOK(tif, &nextnextdir, 4)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error fetching directory link"); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(&nextnextdir); + if (nextnextdir==tif->tif_diroff) + { + uint32 m; + m=0; + (void) TIFFSeekFile(tif, + nextdir+2+dircount*12, SEEK_SET); + if (!WriteOK(tif, &m, 4)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error writing directory link"); + return (0); + } + tif->tif_diroff=0; + break; + } + nextdir=nextnextdir; + } + } + } + else + { + if (tif->tif_header.big.tiff_diroff == tif->tif_diroff) + { + tif->tif_header.big.tiff_diroff = 0; + tif->tif_diroff = 0; + + TIFFSeekFile(tif,8,SEEK_SET); + if (!WriteOK(tif, &(tif->tif_header.big.tiff_diroff),8)) + { + TIFFErrorExt(tif->tif_clientdata, tif->tif_name, + "Error updating TIFF header"); + return (0); + } + } + else + { + uint64 nextdir; + nextdir = tif->tif_header.big.tiff_diroff; + while(1) { + uint64 dircount64; + uint16 dircount; + uint64 nextnextdir; + + if (!SeekOK(tif, nextdir) || + !ReadOK(tif, &dircount64, 8)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error fetching directory count"); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong8(&dircount64); + if (dircount64>0xFFFF) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Sanity check on tag count failed, likely corrupt TIFF"); + return (0); + } + dircount=(uint16)dircount64; + (void) TIFFSeekFile(tif, + nextdir+8+dircount*20, SEEK_SET); + if (!ReadOK(tif, &nextnextdir, 8)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error fetching directory link"); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong8(&nextnextdir); + if (nextnextdir==tif->tif_diroff) + { + uint64 m; + m=0; + (void) TIFFSeekFile(tif, + nextdir+8+dircount*20, SEEK_SET); + if (!WriteOK(tif, &m, 8)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error writing directory link"); + return (0); + } + tif->tif_diroff=0; + break; + } + nextdir=nextnextdir; + } + } + } + + /* + * Now use TIFFWriteDirectory() normally. + */ + + return TIFFWriteDirectory( tif ); +} + +static int +TIFFWriteDirectorySec(TIFF* tif, int isimage, int imagedone, uint64* pdiroff) +{ + static const char module[] = "TIFFWriteDirectorySec"; + uint32 ndir; + TIFFDirEntry* dir; + uint32 dirsize; + void* dirmem; + uint32 m; if (tif->tif_mode == O_RDONLY) return (1); - td = &tif->tif_dir; + _TIFFFillStriles( tif ); + /* - * Size the directory so that we can calculate - * offsets for the data items that aren't kept - * in-place in each field. + * Clear write state so that subsequent images with + * different characteristics get the right buffers + * setup for them. */ - nfields = 0; - for (b = 0; b <= FIELD_LAST; b++) - if (TIFFFieldSet(tif, b) && b != FIELD_CUSTOM) - nfields += (b < FIELD_SUBFILETYPE ? 2 : 1); - nfields += td->td_customValueCount; - dirsize = nfields * sizeof (TIFFDirEntry); - data = (char*) _TIFFmalloc(dirsize); - if (data == NULL) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Cannot write directory, out of space"); - return (0); - } - /* - * Put the directory at the end of the file. - */ - tif->tif_diroff = (TIFFSeekFile(tif, (toff_t) 0, SEEK_END)+1) &~ 1; - tif->tif_dataoff = (toff_t)( - tif->tif_diroff + sizeof (uint16) + dirsize + sizeof (toff_t)); - if (tif->tif_dataoff & 1) - tif->tif_dataoff++; - (void) TIFFSeekFile(tif, tif->tif_dataoff, SEEK_SET); - dir = (TIFFDirEntry*) data; - /* - * Setup external form of directory - * entries and write data items. - */ - _TIFFmemcpy(fields, td->td_fieldsset, sizeof (fields)); - - for (fi = 0, nfi = tif->tif_nfields; nfi > 0; nfi--, fi++) { - const TIFFFieldInfo* fip = tif->tif_fieldinfo[fi]; - - /* - * For custom fields, we test to see if the custom field - * is set or not. For normal fields, we just use the - * FieldSet test. - */ - if( fip->field_bit == FIELD_CUSTOM ) + if (imagedone) + { + if (tif->tif_flags & TIFF_POSTENCODE) { - int ci, is_set = FALSE; - - for( ci = 0; ci < td->td_customValueCount; ci++ ) - is_set |= (td->td_customValues[ci].info == fip); - - if( !is_set ) - continue; + tif->tif_flags &= ~TIFF_POSTENCODE; + if (!(*tif->tif_postencode)(tif)) + { + TIFFErrorExt(tif->tif_clientdata,module, + "Error post-encoding before directory write"); + return (0); + } } - else if (!FieldSet(fields, fip->field_bit)) - continue; - - if( fip->field_bit != FIELD_CUSTOM ) - ResetFieldBit(fields, fip->field_bit); - } - - /* - * Write directory. - */ - dircount = (uint16) nfields; - *pdiroff = (uint32) tif->tif_nextdiroff; - if (tif->tif_flags & TIFF_SWAB) { + (*tif->tif_close)(tif); /* shutdown encoder */ /* - * The file's byte order is opposite to the - * native machine architecture. We overwrite - * the directory information with impunity - * because it'll be released below after we - * write it to the file. Note that all the - * other tag construction routines assume that - * we do this byte-swapping; i.e. they only - * byte-swap indirect data. + * Flush any data that might have been written + * by the compression close+cleanup routines. But + * be careful not to write stuff if we didn't add data + * in the previous steps as the "rawcc" data may well be + * a previously read tile/strip in mixed read/write mode. */ - for (dir = (TIFFDirEntry*) data; dircount; dir++, dircount--) { - TIFFSwabArrayOfShort(&dir->tdir_tag, 2); - TIFFSwabArrayOfLong(&dir->tdir_count, 2); - } - dircount = (uint16) nfields; - TIFFSwabShort(&dircount); - TIFFSwabLong(pdiroff); - } - (void) TIFFSeekFile(tif, tif->tif_diroff, SEEK_SET); - if (!WriteOK(tif, &dircount, sizeof (dircount))) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Error writing directory count"); - goto bad; - } - if (!WriteOK(tif, data, dirsize)) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Error writing directory contents"); - goto bad; - } - if (!WriteOK(tif, pdiroff, sizeof (uint32))) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Error writing directory link"); - goto bad; - } - _TIFFfree(data); - return (1); -bad: - _TIFFfree(data); - return (0); -} - -int -TIFFWriteCustomDirectory(TIFF* tif, toff_t *pdiroff) -{ - return _TIFFWriteCustomDirectory(tif, pdiroff); -} - -/* - * Process tags that are not special cased. - */ -static int -TIFFWriteNormalTag(TIFF* tif, TIFFDirEntry* dir, const TIFFFieldInfo* fip) -{ - uint16 wc = (uint16) fip->field_writecount; - uint32 wc2; - - dir->tdir_tag = (uint16) fip->field_tag; - dir->tdir_type = (uint16) fip->field_type; - dir->tdir_count = wc; - - switch (fip->field_type) { - case TIFF_SHORT: - case TIFF_SSHORT: - if (fip->field_passcount) { - uint16* wp; - if (wc == (uint16) TIFF_VARIABLE2) { - TIFFGetField(tif, fip->field_tag, &wc2, &wp); - dir->tdir_count = wc2; - } else { /* Assume TIFF_VARIABLE */ - TIFFGetField(tif, fip->field_tag, &wc, &wp); - dir->tdir_count = wc; - } - if (!TIFFWriteShortArray(tif, dir, wp)) - return 0; - } else { - if (wc == 1) { - uint16 sv; - TIFFGetField(tif, fip->field_tag, &sv); - dir->tdir_offset = - TIFFInsertData(tif, dir->tdir_type, sv); - } else { - uint16* wp; - TIFFGetField(tif, fip->field_tag, &wp); - if (!TIFFWriteShortArray(tif, dir, wp)) - return 0; - } - } - break; - case TIFF_LONG: - case TIFF_SLONG: - case TIFF_IFD: - if (fip->field_passcount) { - uint32* lp; - if (wc == (uint16) TIFF_VARIABLE2) { - TIFFGetField(tif, fip->field_tag, &wc2, &lp); - dir->tdir_count = wc2; - } else { /* Assume TIFF_VARIABLE */ - TIFFGetField(tif, fip->field_tag, &wc, &lp); - dir->tdir_count = wc; - } - if (!TIFFWriteLongArray(tif, dir, lp)) - return 0; - } else { - if (wc == 1) { - /* XXX handle LONG->SHORT conversion */ - TIFFGetField(tif, fip->field_tag, - &dir->tdir_offset); - } else { - uint32* lp; - TIFFGetField(tif, fip->field_tag, &lp); - if (!TIFFWriteLongArray(tif, dir, lp)) - return 0; - } - } - break; - case TIFF_RATIONAL: - case TIFF_SRATIONAL: - if (fip->field_passcount) { - float* fp; - if (wc == (uint16) TIFF_VARIABLE2) { - TIFFGetField(tif, fip->field_tag, &wc2, &fp); - dir->tdir_count = wc2; - } else { /* Assume TIFF_VARIABLE */ - TIFFGetField(tif, fip->field_tag, &wc, &fp); - dir->tdir_count = wc; - } - if (!TIFFWriteRationalArray(tif, dir, fp)) - return 0; - } else { - if (wc == 1) { - float fv; - TIFFGetField(tif, fip->field_tag, &fv); - if (!TIFFWriteRationalArray(tif, dir, &fv)) - return 0; - } else { - float* fp; - TIFFGetField(tif, fip->field_tag, &fp); - if (!TIFFWriteRationalArray(tif, dir, fp)) - return 0; - } - } - break; - case TIFF_FLOAT: - if (fip->field_passcount) { - float* fp; - if (wc == (uint16) TIFF_VARIABLE2) { - TIFFGetField(tif, fip->field_tag, &wc2, &fp); - dir->tdir_count = wc2; - } else { /* Assume TIFF_VARIABLE */ - TIFFGetField(tif, fip->field_tag, &wc, &fp); - dir->tdir_count = wc; - } - if (!TIFFWriteFloatArray(tif, dir, fp)) - return 0; - } else { - if (wc == 1) { - float fv; - TIFFGetField(tif, fip->field_tag, &fv); - if (!TIFFWriteFloatArray(tif, dir, &fv)) - return 0; - } else { - float* fp; - TIFFGetField(tif, fip->field_tag, &fp); - if (!TIFFWriteFloatArray(tif, dir, fp)) - return 0; - } - } - break; - case TIFF_DOUBLE: - if (fip->field_passcount) { - double* dp; - if (wc == (uint16) TIFF_VARIABLE2) { - TIFFGetField(tif, fip->field_tag, &wc2, &dp); - dir->tdir_count = wc2; - } else { /* Assume TIFF_VARIABLE */ - TIFFGetField(tif, fip->field_tag, &wc, &dp); - dir->tdir_count = wc; - } - if (!TIFFWriteDoubleArray(tif, dir, dp)) - return 0; - } else { - if (wc == 1) { - double dv; - TIFFGetField(tif, fip->field_tag, &dv); - if (!TIFFWriteDoubleArray(tif, dir, &dv)) - return 0; - } else { - double* dp; - TIFFGetField(tif, fip->field_tag, &dp); - if (!TIFFWriteDoubleArray(tif, dir, dp)) - return 0; - } - } - break; - case TIFF_ASCII: - { - char* cp; - if (fip->field_passcount) + if (tif->tif_rawcc > 0 + && (tif->tif_flags & TIFF_BEENWRITING) != 0 ) + { + if( !TIFFFlushData1(tif) ) { - if( wc == (uint16) TIFF_VARIABLE2 ) - TIFFGetField(tif, fip->field_tag, &wc2, &cp); - else - TIFFGetField(tif, fip->field_tag, &wc, &cp); + TIFFErrorExt(tif->tif_clientdata, module, + "Error flushing data before directory write"); + return (0); } - else - TIFFGetField(tif, fip->field_tag, &cp); - - dir->tdir_count = (uint32) (strlen(cp) + 1); - if (!TIFFWriteByteArray(tif, dir, cp)) - return (0); } - break; - - case TIFF_BYTE: - case TIFF_SBYTE: - if (fip->field_passcount) { - char* cp; - if (wc == (uint16) TIFF_VARIABLE2) { - TIFFGetField(tif, fip->field_tag, &wc2, &cp); - dir->tdir_count = wc2; - } else { /* Assume TIFF_VARIABLE */ - TIFFGetField(tif, fip->field_tag, &wc, &cp); - dir->tdir_count = wc; + if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata) + { + _TIFFfree(tif->tif_rawdata); + tif->tif_rawdata = NULL; + tif->tif_rawcc = 0; + tif->tif_rawdatasize = 0; + tif->tif_rawdataoff = 0; + tif->tif_rawdataloaded = 0; + } + tif->tif_flags &= ~(TIFF_BEENWRITING|TIFF_BUFFERSETUP); + } + dir=NULL; + dirmem=NULL; + dirsize=0; + while (1) + { + ndir=0; + if (isimage) + { + if (TIFFFieldSet(tif,FIELD_IMAGEDIMENSIONS)) + { + if (!TIFFWriteDirectoryTagShortLong(tif,&ndir,dir,TIFFTAG_IMAGEWIDTH,tif->tif_dir.td_imagewidth)) + goto bad; + if (!TIFFWriteDirectoryTagShortLong(tif,&ndir,dir,TIFFTAG_IMAGELENGTH,tif->tif_dir.td_imagelength)) + goto bad; } - if (!TIFFWriteByteArray(tif, dir, cp)) - return 0; - } else { - if (wc == 1) { - char cv; - TIFFGetField(tif, fip->field_tag, &cv); - if (!TIFFWriteByteArray(tif, dir, &cv)) - return 0; - } else { - char* cp; - TIFFGetField(tif, fip->field_tag, &cp); - if (!TIFFWriteByteArray(tif, dir, cp)) - return 0; + if (TIFFFieldSet(tif,FIELD_TILEDIMENSIONS)) + { + if (!TIFFWriteDirectoryTagShortLong(tif,&ndir,dir,TIFFTAG_TILEWIDTH,tif->tif_dir.td_tilewidth)) + goto bad; + if (!TIFFWriteDirectoryTagShortLong(tif,&ndir,dir,TIFFTAG_TILELENGTH,tif->tif_dir.td_tilelength)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_RESOLUTION)) + { + if (!TIFFWriteDirectoryTagRational(tif,&ndir,dir,TIFFTAG_XRESOLUTION,tif->tif_dir.td_xresolution)) + goto bad; + if (!TIFFWriteDirectoryTagRational(tif,&ndir,dir,TIFFTAG_YRESOLUTION,tif->tif_dir.td_yresolution)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_POSITION)) + { + if (!TIFFWriteDirectoryTagRational(tif,&ndir,dir,TIFFTAG_XPOSITION,tif->tif_dir.td_xposition)) + goto bad; + if (!TIFFWriteDirectoryTagRational(tif,&ndir,dir,TIFFTAG_YPOSITION,tif->tif_dir.td_yposition)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_SUBFILETYPE)) + { + if (!TIFFWriteDirectoryTagLong(tif,&ndir,dir,TIFFTAG_SUBFILETYPE,tif->tif_dir.td_subfiletype)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_BITSPERSAMPLE)) + { + if (!TIFFWriteDirectoryTagShortPerSample(tif,&ndir,dir,TIFFTAG_BITSPERSAMPLE,tif->tif_dir.td_bitspersample)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_COMPRESSION)) + { + if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_COMPRESSION,tif->tif_dir.td_compression)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_PHOTOMETRIC)) + { + if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_PHOTOMETRIC,tif->tif_dir.td_photometric)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_THRESHHOLDING)) + { + if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_THRESHHOLDING,tif->tif_dir.td_threshholding)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_FILLORDER)) + { + if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_FILLORDER,tif->tif_dir.td_fillorder)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_ORIENTATION)) + { + if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_ORIENTATION,tif->tif_dir.td_orientation)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_SAMPLESPERPIXEL)) + { + if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_SAMPLESPERPIXEL,tif->tif_dir.td_samplesperpixel)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_ROWSPERSTRIP)) + { + if (!TIFFWriteDirectoryTagShortLong(tif,&ndir,dir,TIFFTAG_ROWSPERSTRIP,tif->tif_dir.td_rowsperstrip)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_MINSAMPLEVALUE)) + { + if (!TIFFWriteDirectoryTagShortPerSample(tif,&ndir,dir,TIFFTAG_MINSAMPLEVALUE,tif->tif_dir.td_minsamplevalue)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_MAXSAMPLEVALUE)) + { + if (!TIFFWriteDirectoryTagShortPerSample(tif,&ndir,dir,TIFFTAG_MAXSAMPLEVALUE,tif->tif_dir.td_maxsamplevalue)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_PLANARCONFIG)) + { + if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_PLANARCONFIG,tif->tif_dir.td_planarconfig)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_RESOLUTIONUNIT)) + { + if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_RESOLUTIONUNIT,tif->tif_dir.td_resolutionunit)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_PAGENUMBER)) + { + if (!TIFFWriteDirectoryTagShortArray(tif,&ndir,dir,TIFFTAG_PAGENUMBER,2,&tif->tif_dir.td_pagenumber[0])) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_STRIPBYTECOUNTS)) + { + if (!isTiled(tif)) + { + if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_STRIPBYTECOUNTS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripbytecount)) + goto bad; + } + else + { + if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_TILEBYTECOUNTS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripbytecount)) + goto bad; + } + } + if (TIFFFieldSet(tif,FIELD_STRIPOFFSETS)) + { + if (!isTiled(tif)) + { + if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_STRIPOFFSETS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripoffset)) + goto bad; + } + else + { + if (!TIFFWriteDirectoryTagLongLong8Array(tif,&ndir,dir,TIFFTAG_TILEOFFSETS,tif->tif_dir.td_nstrips,tif->tif_dir.td_stripoffset)) + goto bad; + } + } + if (TIFFFieldSet(tif,FIELD_COLORMAP)) + { + if (!TIFFWriteDirectoryTagColormap(tif,&ndir,dir)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_EXTRASAMPLES)) + { + if (tif->tif_dir.td_extrasamples) + { + uint16 na; + uint16* nb; + TIFFGetFieldDefaulted(tif,TIFFTAG_EXTRASAMPLES,&na,&nb); + if (!TIFFWriteDirectoryTagShortArray(tif,&ndir,dir,TIFFTAG_EXTRASAMPLES,na,nb)) + goto bad; + } + } + if (TIFFFieldSet(tif,FIELD_SAMPLEFORMAT)) + { + if (!TIFFWriteDirectoryTagShortPerSample(tif,&ndir,dir,TIFFTAG_SAMPLEFORMAT,tif->tif_dir.td_sampleformat)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_SMINSAMPLEVALUE)) + { + if (!TIFFWriteDirectoryTagSampleformatArray(tif,&ndir,dir,TIFFTAG_SMINSAMPLEVALUE,tif->tif_dir.td_samplesperpixel,tif->tif_dir.td_sminsamplevalue)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_SMAXSAMPLEVALUE)) + { + if (!TIFFWriteDirectoryTagSampleformatArray(tif,&ndir,dir,TIFFTAG_SMAXSAMPLEVALUE,tif->tif_dir.td_samplesperpixel,tif->tif_dir.td_smaxsamplevalue)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_IMAGEDEPTH)) + { + if (!TIFFWriteDirectoryTagLong(tif,&ndir,dir,TIFFTAG_IMAGEDEPTH,tif->tif_dir.td_imagedepth)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_TILEDEPTH)) + { + if (!TIFFWriteDirectoryTagLong(tif,&ndir,dir,TIFFTAG_TILEDEPTH,tif->tif_dir.td_tiledepth)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_HALFTONEHINTS)) + { + if (!TIFFWriteDirectoryTagShortArray(tif,&ndir,dir,TIFFTAG_HALFTONEHINTS,2,&tif->tif_dir.td_halftonehints[0])) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_YCBCRSUBSAMPLING)) + { + if (!TIFFWriteDirectoryTagShortArray(tif,&ndir,dir,TIFFTAG_YCBCRSUBSAMPLING,2,&tif->tif_dir.td_ycbcrsubsampling[0])) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_YCBCRPOSITIONING)) + { + if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,TIFFTAG_YCBCRPOSITIONING,tif->tif_dir.td_ycbcrpositioning)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_REFBLACKWHITE)) + { + if (!TIFFWriteDirectoryTagRationalArray(tif,&ndir,dir,TIFFTAG_REFERENCEBLACKWHITE,6,tif->tif_dir.td_refblackwhite)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_TRANSFERFUNCTION)) + { + if (!TIFFWriteDirectoryTagTransferfunction(tif,&ndir,dir)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_INKNAMES)) + { + if (!TIFFWriteDirectoryTagAscii(tif,&ndir,dir,TIFFTAG_INKNAMES,tif->tif_dir.td_inknameslen,tif->tif_dir.td_inknames)) + goto bad; + } + if (TIFFFieldSet(tif,FIELD_SUBIFD)) + { + if (!TIFFWriteDirectoryTagSubifd(tif,&ndir,dir)) + goto bad; + } + { + uint32 n; + for (n=0; ntif_nfields; n++) { + const TIFFField* o; + o = tif->tif_fields[n]; + if ((o->field_bit>=FIELD_CODEC)&&(TIFFFieldSet(tif,o->field_bit))) + { + switch (o->get_field_type) + { + case TIFF_SETGET_ASCII: + { + uint32 pa; + char* pb; + assert(o->field_type==TIFF_ASCII); + assert(o->field_readcount==TIFF_VARIABLE); + assert(o->field_passcount==0); + TIFFGetField(tif,o->field_tag,&pb); + pa=(uint32)(strlen(pb)); + if (!TIFFWriteDirectoryTagAscii(tif,&ndir,dir,o->field_tag,pa,pb)) + goto bad; + } + break; + case TIFF_SETGET_UINT16: + { + uint16 p; + assert(o->field_type==TIFF_SHORT); + assert(o->field_readcount==1); + assert(o->field_passcount==0); + TIFFGetField(tif,o->field_tag,&p); + if (!TIFFWriteDirectoryTagShort(tif,&ndir,dir,o->field_tag,p)) + goto bad; + } + break; + case TIFF_SETGET_UINT32: + { + uint32 p; + assert(o->field_type==TIFF_LONG); + assert(o->field_readcount==1); + assert(o->field_passcount==0); + TIFFGetField(tif,o->field_tag,&p); + if (!TIFFWriteDirectoryTagLong(tif,&ndir,dir,o->field_tag,p)) + goto bad; + } + break; + case TIFF_SETGET_C32_UINT8: + { + uint32 pa; + void* pb; + assert(o->field_type==TIFF_UNDEFINED); + assert(o->field_readcount==TIFF_VARIABLE2); + assert(o->field_passcount==1); + TIFFGetField(tif,o->field_tag,&pa,&pb); + if (!TIFFWriteDirectoryTagUndefinedArray(tif,&ndir,dir,o->field_tag,pa,pb)) + goto bad; + } + break; + default: + assert(0); /* we should never get here */ + break; + } + } + } } } - break; - - case TIFF_UNDEFINED: - { char* cp; - if (wc == (unsigned short) TIFF_VARIABLE) { - TIFFGetField(tif, fip->field_tag, &wc, &cp); - dir->tdir_count = wc; - } else if (wc == (unsigned short) TIFF_VARIABLE2) { - TIFFGetField(tif, fip->field_tag, &wc2, &cp); - dir->tdir_count = wc2; - } else - TIFFGetField(tif, fip->field_tag, &cp); - if (!TIFFWriteByteArray(tif, dir, cp)) - return (0); + for (m=0; m<(uint32)(tif->tif_dir.td_customValueCount); m++) + { + switch (tif->tif_dir.td_customValues[m].info->field_type) + { + case TIFF_ASCII: + if (!TIFFWriteDirectoryTagAscii(tif,&ndir,dir,tif->tif_dir.td_customValues[m].info->field_tag,tif->tif_dir.td_customValues[m].count,tif->tif_dir.td_customValues[m].value)) + goto bad; + break; + case TIFF_UNDEFINED: + if (!TIFFWriteDirectoryTagUndefinedArray(tif,&ndir,dir,tif->tif_dir.td_customValues[m].info->field_tag,tif->tif_dir.td_customValues[m].count,tif->tif_dir.td_customValues[m].value)) + goto bad; + break; + case TIFF_BYTE: + if (!TIFFWriteDirectoryTagByteArray(tif,&ndir,dir,tif->tif_dir.td_customValues[m].info->field_tag,tif->tif_dir.td_customValues[m].count,tif->tif_dir.td_customValues[m].value)) + goto bad; + break; + case TIFF_SBYTE: + if (!TIFFWriteDirectoryTagSbyteArray(tif,&ndir,dir,tif->tif_dir.td_customValues[m].info->field_tag,tif->tif_dir.td_customValues[m].count,tif->tif_dir.td_customValues[m].value)) + goto bad; + break; + case TIFF_SHORT: + if (!TIFFWriteDirectoryTagShortArray(tif,&ndir,dir,tif->tif_dir.td_customValues[m].info->field_tag,tif->tif_dir.td_customValues[m].count,tif->tif_dir.td_customValues[m].value)) + goto bad; + break; + case TIFF_SSHORT: + if (!TIFFWriteDirectoryTagSshortArray(tif,&ndir,dir,tif->tif_dir.td_customValues[m].info->field_tag,tif->tif_dir.td_customValues[m].count,tif->tif_dir.td_customValues[m].value)) + goto bad; + break; + case TIFF_LONG: + if (!TIFFWriteDirectoryTagLongArray(tif,&ndir,dir,tif->tif_dir.td_customValues[m].info->field_tag,tif->tif_dir.td_customValues[m].count,tif->tif_dir.td_customValues[m].value)) + goto bad; + break; + case TIFF_SLONG: + if (!TIFFWriteDirectoryTagSlongArray(tif,&ndir,dir,tif->tif_dir.td_customValues[m].info->field_tag,tif->tif_dir.td_customValues[m].count,tif->tif_dir.td_customValues[m].value)) + goto bad; + break; + case TIFF_LONG8: + if (!TIFFWriteDirectoryTagLong8Array(tif,&ndir,dir,tif->tif_dir.td_customValues[m].info->field_tag,tif->tif_dir.td_customValues[m].count,tif->tif_dir.td_customValues[m].value)) + goto bad; + break; + case TIFF_SLONG8: + if (!TIFFWriteDirectoryTagSlong8Array(tif,&ndir,dir,tif->tif_dir.td_customValues[m].info->field_tag,tif->tif_dir.td_customValues[m].count,tif->tif_dir.td_customValues[m].value)) + goto bad; + break; + case TIFF_RATIONAL: + if (!TIFFWriteDirectoryTagRationalArray(tif,&ndir,dir,tif->tif_dir.td_customValues[m].info->field_tag,tif->tif_dir.td_customValues[m].count,tif->tif_dir.td_customValues[m].value)) + goto bad; + break; + case TIFF_SRATIONAL: + if (!TIFFWriteDirectoryTagSrationalArray(tif,&ndir,dir,tif->tif_dir.td_customValues[m].info->field_tag,tif->tif_dir.td_customValues[m].count,tif->tif_dir.td_customValues[m].value)) + goto bad; + break; + case TIFF_FLOAT: + if (!TIFFWriteDirectoryTagFloatArray(tif,&ndir,dir,tif->tif_dir.td_customValues[m].info->field_tag,tif->tif_dir.td_customValues[m].count,tif->tif_dir.td_customValues[m].value)) + goto bad; + break; + case TIFF_DOUBLE: + if (!TIFFWriteDirectoryTagDoubleArray(tif,&ndir,dir,tif->tif_dir.td_customValues[m].info->field_tag,tif->tif_dir.td_customValues[m].count,tif->tif_dir.td_customValues[m].value)) + goto bad; + break; + case TIFF_IFD: + if (!TIFFWriteDirectoryTagIfdArray(tif,&ndir,dir,tif->tif_dir.td_customValues[m].info->field_tag,tif->tif_dir.td_customValues[m].count,tif->tif_dir.td_customValues[m].value)) + goto bad; + break; + case TIFF_IFD8: + if (!TIFFWriteDirectoryTagIfdIfd8Array(tif,&ndir,dir,tif->tif_dir.td_customValues[m].info->field_tag,tif->tif_dir.td_customValues[m].count,tif->tif_dir.td_customValues[m].value)) + goto bad; + break; + default: + assert(0); /* we should never get here */ + break; + } } - break; - - case TIFF_NOTYPE: - break; + if (dir!=NULL) + break; + dir=_TIFFmalloc(ndir*sizeof(TIFFDirEntry)); + if (dir==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + goto bad; + } + if (isimage) + { + if ((tif->tif_diroff==0)&&(!TIFFLinkDirectory(tif))) + goto bad; + } + else + tif->tif_diroff=(TIFFSeekFile(tif,0,SEEK_END)+1)&(~1); + if (pdiroff!=NULL) + *pdiroff=tif->tif_diroff; + if (!(tif->tif_flags&TIFF_BIGTIFF)) + dirsize=2+ndir*12+4; + else + dirsize=8+ndir*20+8; + tif->tif_dataoff=tif->tif_diroff+dirsize; + if (!(tif->tif_flags&TIFF_BIGTIFF)) + tif->tif_dataoff=(uint32)tif->tif_dataoff; + if ((tif->tif_dataofftif_diroff)||(tif->tif_dataoff<(uint64)dirsize)) + { + TIFFErrorExt(tif->tif_clientdata,module,"Maximum TIFF file size exceeded"); + goto bad; + } + if (tif->tif_dataoff&1) + tif->tif_dataoff++; + if (isimage) + tif->tif_curdir++; } - return (1); -} - -/* - * Setup a directory entry with either a SHORT - * or LONG type according to the value. - */ -static void -TIFFSetupShortLong(TIFF* tif, ttag_t tag, TIFFDirEntry* dir, uint32 v) -{ - dir->tdir_tag = (uint16) tag; - dir->tdir_count = 1; - if (v > 0xffffL) { - dir->tdir_type = (short) TIFF_LONG; - dir->tdir_offset = v; - } else { - dir->tdir_type = (short) TIFF_SHORT; - dir->tdir_offset = TIFFInsertData(tif, (int) TIFF_SHORT, v); - } -} - -/* - * Setup a SHORT directory entry - */ -static void -TIFFSetupShort(TIFF* tif, ttag_t tag, TIFFDirEntry* dir, uint16 v) -{ - dir->tdir_tag = (uint16) tag; - dir->tdir_count = 1; - dir->tdir_type = (short) TIFF_SHORT; - dir->tdir_offset = TIFFInsertData(tif, (int) TIFF_SHORT, v); -} -#undef MakeShortDirent - -#define NITEMS(x) (sizeof (x) / sizeof (x[0])) -/* - * Setup a directory entry that references a - * samples/pixel array of SHORT values and - * (potentially) write the associated indirect - * values. - */ -static int -TIFFWritePerSampleShorts(TIFF* tif, ttag_t tag, TIFFDirEntry* dir) -{ - uint16 buf[10], v; - uint16* w = buf; - uint16 i, samples = tif->tif_dir.td_samplesperpixel; - int status; - - if (samples > NITEMS(buf)) { - w = (uint16*) _TIFFmalloc(samples * sizeof (uint16)); - if (w == NULL) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "No space to write per-sample shorts"); - return (0); + if (isimage) + { + if (TIFFFieldSet(tif,FIELD_SUBIFD)&&(tif->tif_subifdoff==0)) + { + uint32 na; + TIFFDirEntry* nb; + for (na=0, nb=dir; ; na++, nb++) + { + assert(natdir_tag==TIFFTAG_SUBIFD) + break; + } + if (!(tif->tif_flags&TIFF_BIGTIFF)) + tif->tif_subifdoff=tif->tif_diroff+2+na*12+8; + else + tif->tif_subifdoff=tif->tif_diroff+8+na*20+12; } } - TIFFGetField(tif, tag, &v); - for (i = 0; i < samples; i++) - w[i] = v; - - dir->tdir_tag = (uint16) tag; - dir->tdir_type = (uint16) TIFF_SHORT; - dir->tdir_count = samples; - status = TIFFWriteShortArray(tif, dir, w); - if (w != buf) - _TIFFfree((char*) w); - return (status); -} - -/* - * Setup a directory entry that references a samples/pixel array of ``type'' - * values and (potentially) write the associated indirect values. The source - * data from TIFFGetField() for the specified tag must be returned as double. - */ -static int -TIFFWritePerSampleAnys(TIFF* tif, - TIFFDataType type, ttag_t tag, TIFFDirEntry* dir) -{ - double buf[10], v; - double* w = buf; - uint16 i, samples = tif->tif_dir.td_samplesperpixel; - int status; - - if (samples > NITEMS(buf)) { - w = (double*) _TIFFmalloc(samples * sizeof (double)); - if (w == NULL) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "No space to write per-sample values"); - return (0); - } + dirmem=_TIFFmalloc(dirsize); + if (dirmem==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + goto bad; } - TIFFGetField(tif, tag, &v); - for (i = 0; i < samples; i++) - w[i] = v; - status = TIFFWriteAnyArray(tif, type, tag, dir, samples, w); - if (w != buf) - _TIFFfree(w); - return (status); -} -#undef NITEMS - -/* - * Setup a pair of shorts that are returned by - * value, rather than as a reference to an array. - */ -static int -TIFFSetupShortPair(TIFF* tif, ttag_t tag, TIFFDirEntry* dir) -{ - uint16 v[2]; - - TIFFGetField(tif, tag, &v[0], &v[1]); - - dir->tdir_tag = (uint16) tag; - dir->tdir_type = (uint16) TIFF_SHORT; - dir->tdir_count = 2; - return (TIFFWriteShortArray(tif, dir, v)); -} - -/* - * Setup a directory entry for an NxM table of shorts, - * where M is known to be 2**bitspersample, and write - * the associated indirect data. - */ -static int -TIFFWriteShortTable(TIFF* tif, - ttag_t tag, TIFFDirEntry* dir, uint32 n, uint16** table) -{ - uint32 i, off; - - dir->tdir_tag = (uint16) tag; - dir->tdir_type = (short) TIFF_SHORT; - /* XXX -- yech, fool TIFFWriteData */ - dir->tdir_count = (uint32) (1L<tif_dir.td_bitspersample); - off = tif->tif_dataoff; - for (i = 0; i < n; i++) - if (!TIFFWriteData(tif, dir, (char *)table[i])) - return (0); - dir->tdir_count *= n; - dir->tdir_offset = off; - return (1); -} - -/* - * Write/copy data associated with an ASCII or opaque tag value. - */ -static int -TIFFWriteByteArray(TIFF* tif, TIFFDirEntry* dir, char* cp) -{ - if (dir->tdir_count <= 4) { - if (tif->tif_header.tiff_magic == TIFF_BIGENDIAN) { - dir->tdir_offset = (uint32)cp[0] << 24; - if (dir->tdir_count >= 2) - dir->tdir_offset |= (uint32)cp[1] << 16; - if (dir->tdir_count >= 3) - dir->tdir_offset |= (uint32)cp[2] << 8; - if (dir->tdir_count == 4) - dir->tdir_offset |= cp[3]; - } else { - dir->tdir_offset = cp[0]; - if (dir->tdir_count >= 2) - dir->tdir_offset |= (uint32) cp[1] << 8; - if (dir->tdir_count >= 3) - dir->tdir_offset |= (uint32) cp[2] << 16; - if (dir->tdir_count == 4) - dir->tdir_offset |= (uint32) cp[3] << 24; + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + uint8* n; + uint32 nTmp; + TIFFDirEntry* o; + n=dirmem; + *(uint16*)n=ndir; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)n); + n+=2; + o=dir; + for (m=0; mtdir_tag; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)n); + n+=2; + *(uint16*)n=o->tdir_type; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)n); + n+=2; + nTmp = (uint32)o->tdir_count; + _TIFFmemcpy(n,&nTmp,4); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong((uint32*)n); + n+=4; + /* This is correct. The data has been */ + /* swabbed previously in TIFFWriteDirectoryTagData */ + _TIFFmemcpy(n,&o->tdir_offset,4); + n+=4; + o++; } - return 1; - } else - return TIFFWriteData(tif, dir, cp); -} - -/* - * Setup a directory entry of an array of SHORT - * or SSHORT and write the associated indirect values. - */ -static int -TIFFWriteShortArray(TIFF* tif, TIFFDirEntry* dir, uint16* v) -{ - if (dir->tdir_count <= 2) { - if (tif->tif_header.tiff_magic == TIFF_BIGENDIAN) { - dir->tdir_offset = (uint32) v[0] << 16; - if (dir->tdir_count == 2) - dir->tdir_offset |= v[1] & 0xffff; - } else { - dir->tdir_offset = v[0] & 0xffff; - if (dir->tdir_count == 2) - dir->tdir_offset |= (uint32) v[1] << 16; + nTmp = (uint32)tif->tif_nextdiroff; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(&nTmp); + _TIFFmemcpy(n,&nTmp,4); + } + else + { + uint8* n; + TIFFDirEntry* o; + n=dirmem; + *(uint64*)n=ndir; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8((uint64*)n); + n+=8; + o=dir; + for (m=0; mtdir_tag; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)n); + n+=2; + *(uint16*)n=o->tdir_type; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)n); + n+=2; + _TIFFmemcpy(n,&o->tdir_count,8); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8((uint64*)n); + n+=8; + _TIFFmemcpy(n,&o->tdir_offset,8); + n+=8; + o++; } - return (1); - } else - return (TIFFWriteData(tif, dir, (char*) v)); + _TIFFmemcpy(n,&tif->tif_nextdiroff,8); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8((uint64*)n); + } + _TIFFfree(dir); + dir=NULL; + if (!SeekOK(tif,tif->tif_diroff)) + { + TIFFErrorExt(tif->tif_clientdata,module,"IO error writing directory"); + goto bad; + } + if (!WriteOK(tif,dirmem,(tmsize_t)dirsize)) + { + TIFFErrorExt(tif->tif_clientdata,module,"IO error writing directory"); + goto bad; + } + _TIFFfree(dirmem); + if (imagedone) + { + TIFFFreeDirectory(tif); + tif->tif_flags &= ~TIFF_DIRTYDIRECT; + tif->tif_flags &= ~TIFF_DIRTYSTRIP; + (*tif->tif_cleanup)(tif); + /* + * Reset directory-related state for subsequent + * directories. + */ + TIFFCreateDirectory(tif); + } + return(1); +bad: + if (dir!=NULL) + _TIFFfree(dir); + if (dirmem!=NULL) + _TIFFfree(dirmem); + return(0); } -/* - * Setup a directory entry of an array of LONG - * or SLONG and write the associated indirect values. - */ static int -TIFFWriteLongArray(TIFF* tif, TIFFDirEntry* dir, uint32* v) -{ - if (dir->tdir_count == 1) { - dir->tdir_offset = v[0]; - return (1); - } else - return (TIFFWriteData(tif, dir, (char*) v)); -} - -/* - * Setup a directory entry of an array of RATIONAL - * or SRATIONAL and write the associated indirect values. - */ -static int -TIFFWriteRationalArray(TIFF* tif, TIFFDirEntry* dir, float* v) +TIFFWriteDirectoryTagSampleformatArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, double* value) { + static const char module[] = "TIFFWriteDirectoryTagSampleformatArray"; + void* conv; uint32 i; - uint32* t; - int status; - - t = (uint32*) _TIFFmalloc(2 * dir->tdir_count * sizeof (uint32)); - if (t == NULL) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "No space to write RATIONAL array"); + int ok; + conv = _TIFFmalloc(count*sizeof(double)); + if (conv == NULL) + { + TIFFErrorExt(tif->tif_clientdata, module, "Out of memory"); return (0); } - for (i = 0; i < dir->tdir_count; i++) { - float fv = v[i]; - int sign = 1; - uint32 den; - if (fv < 0) { - if (dir->tdir_type == TIFF_RATIONAL) { - TIFFWarningExt(tif->tif_clientdata, - tif->tif_name, - "\"%s\": Information lost writing value (%g) as (unsigned) RATIONAL", - _TIFFFieldWithTag(tif,dir->tdir_tag)->field_name, - fv); - fv = 0; - } else - fv = -fv, sign = -1; - } - den = 1L; - if (fv > 0) { - while (fv < 1L<<(31-3) && den < 1L<<(31-3)) - fv *= 1<<3, den *= 1L<<3; - } - t[2*i+0] = (uint32) (sign * (fv + 0.5)); - t[2*i+1] = den; - } - status = TIFFWriteData(tif, dir, (char *)t); - _TIFFfree((char*) t); - return (status); -} - -static int -TIFFWriteFloatArray(TIFF* tif, TIFFDirEntry* dir, float* v) -{ - TIFFCvtNativeToIEEEFloat(tif, dir->tdir_count, v); - if (dir->tdir_count == 1) { - dir->tdir_offset = *(uint32*) &v[0]; - return (1); - } else - return (TIFFWriteData(tif, dir, (char*) v)); -} - -static int -TIFFWriteDoubleArray(TIFF* tif, TIFFDirEntry* dir, double* v) -{ - TIFFCvtNativeToIEEEDouble(tif, dir->tdir_count, v); - return (TIFFWriteData(tif, dir, (char*) v)); -} - -/* - * Write an array of ``type'' values for a specified tag (i.e. this is a tag - * which is allowed to have different types, e.g. SMaxSampleType). - * Internally the data values are represented as double since a double can - * hold any of the TIFF tag types (yes, this should really be an abstract - * type tany_t for portability). The data is converted into the specified - * type in a temporary buffer and then handed off to the appropriate array - * writer. - */ -static int -TIFFWriteAnyArray(TIFF* tif, - TIFFDataType type, ttag_t tag, TIFFDirEntry* dir, uint32 n, double* v) -{ - char buf[10 * sizeof(double)]; - char* w = buf; - int i, status = 0; - - if (n * TIFFDataWidth(type) > sizeof buf) { - w = (char*) _TIFFmalloc(n * TIFFDataWidth(type)); - if (w == NULL) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "No space to write array"); - return (0); - } + switch (tif->tif_dir.td_sampleformat) + { + case SAMPLEFORMAT_IEEEFP: + if (tif->tif_dir.td_bitspersample<=32) + { + for (i = 0; i < count; ++i) + ((float*)conv)[i] = (float)value[i]; + ok = TIFFWriteDirectoryTagFloatArray(tif,ndir,dir,tag,count,(float*)conv); + } + else + { + ok = TIFFWriteDirectoryTagDoubleArray(tif,ndir,dir,tag,count,value); + } + break; + case SAMPLEFORMAT_INT: + if (tif->tif_dir.td_bitspersample<=8) + { + for (i = 0; i < count; ++i) + ((int8*)conv)[i] = (int8)value[i]; + ok = TIFFWriteDirectoryTagSbyteArray(tif,ndir,dir,tag,count,(int8*)conv); + } + else if (tif->tif_dir.td_bitspersample<=16) + { + for (i = 0; i < count; ++i) + ((int16*)conv)[i] = (int16)value[i]; + ok = TIFFWriteDirectoryTagSshortArray(tif,ndir,dir,tag,count,(int16*)conv); + } + else + { + for (i = 0; i < count; ++i) + ((int32*)conv)[i] = (int32)value[i]; + ok = TIFFWriteDirectoryTagSlongArray(tif,ndir,dir,tag,count,(int32*)conv); + } + break; + case SAMPLEFORMAT_UINT: + if (tif->tif_dir.td_bitspersample<=8) + { + for (i = 0; i < count; ++i) + ((uint8*)conv)[i] = (uint8)value[i]; + ok = TIFFWriteDirectoryTagByteArray(tif,ndir,dir,tag,count,(uint8*)conv); + } + else if (tif->tif_dir.td_bitspersample<=16) + { + for (i = 0; i < count; ++i) + ((uint16*)conv)[i] = (uint16)value[i]; + ok = TIFFWriteDirectoryTagShortArray(tif,ndir,dir,tag,count,(uint16*)conv); + } + else + { + for (i = 0; i < count; ++i) + ((uint32*)conv)[i] = (uint32)value[i]; + ok = TIFFWriteDirectoryTagLongArray(tif,ndir,dir,tag,count,(uint32*)conv); + } + break; + default: + ok = 0; } - dir->tdir_tag = (uint16) tag; - dir->tdir_type = (uint16) type; - dir->tdir_count = n; + _TIFFfree(conv); + return (ok); +} - switch (type) { - case TIFF_BYTE: - { - uint8* bp = (uint8*) w; - for (i = 0; i < (int) n; i++) - bp[i] = (uint8) v[i]; - if (!TIFFWriteByteArray(tif, dir, (char*) bp)) - goto out; - } - break; - case TIFF_SBYTE: - { - int8* bp = (int8*) w; - for (i = 0; i < (int) n; i++) - bp[i] = (int8) v[i]; - if (!TIFFWriteByteArray(tif, dir, (char*) bp)) - goto out; - } - break; - case TIFF_SHORT: - { - uint16* bp = (uint16*) w; - for (i = 0; i < (int) n; i++) - bp[i] = (uint16) v[i]; - if (!TIFFWriteShortArray(tif, dir, (uint16*)bp)) - goto out; - } - break; - case TIFF_SSHORT: - { - int16* bp = (int16*) w; - for (i = 0; i < (int) n; i++) - bp[i] = (int16) v[i]; - if (!TIFFWriteShortArray(tif, dir, (uint16*)bp)) - goto out; - } - break; - case TIFF_LONG: - { - uint32* bp = (uint32*) w; - for (i = 0; i < (int) n; i++) - bp[i] = (uint32) v[i]; - if (!TIFFWriteLongArray(tif, dir, bp)) - goto out; - } - break; - case TIFF_SLONG: - { - int32* bp = (int32*) w; - for (i = 0; i < (int) n; i++) - bp[i] = (int32) v[i]; - if (!TIFFWriteLongArray(tif, dir, (uint32*) bp)) - goto out; - } - break; - case TIFF_FLOAT: - { - float* bp = (float*) w; - for (i = 0; i < (int) n; i++) - bp[i] = (float) v[i]; - if (!TIFFWriteFloatArray(tif, dir, bp)) - goto out; - } - break; - case TIFF_DOUBLE: - { - if( !TIFFWriteDoubleArray(tif, dir, v)) - goto out; - } - break; - default: - /* TIFF_NOTYPE */ - /* TIFF_ASCII */ - /* TIFF_UNDEFINED */ - /* TIFF_RATIONAL */ - /* TIFF_SRATIONAL */ - goto out; +#if 0 +static int +TIFFWriteDirectoryTagSampleformatPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value) +{ + switch (tif->tif_dir.td_sampleformat) + { + case SAMPLEFORMAT_IEEEFP: + if (tif->tif_dir.td_bitspersample<=32) + return(TIFFWriteDirectoryTagFloatPerSample(tif,ndir,dir,tag,(float)value)); + else + return(TIFFWriteDirectoryTagDoublePerSample(tif,ndir,dir,tag,value)); + case SAMPLEFORMAT_INT: + if (tif->tif_dir.td_bitspersample<=8) + return(TIFFWriteDirectoryTagSbytePerSample(tif,ndir,dir,tag,(int8)value)); + else if (tif->tif_dir.td_bitspersample<=16) + return(TIFFWriteDirectoryTagSshortPerSample(tif,ndir,dir,tag,(int16)value)); + else + return(TIFFWriteDirectoryTagSlongPerSample(tif,ndir,dir,tag,(int32)value)); + case SAMPLEFORMAT_UINT: + if (tif->tif_dir.td_bitspersample<=8) + return(TIFFWriteDirectoryTagBytePerSample(tif,ndir,dir,tag,(uint8)value)); + else if (tif->tif_dir.td_bitspersample<=16) + return(TIFFWriteDirectoryTagShortPerSample(tif,ndir,dir,tag,(uint16)value)); + else + return(TIFFWriteDirectoryTagLongPerSample(tif,ndir,dir,tag,(uint32)value)); + default: + return(1); } - status = 1; - out: - if (w != buf) - _TIFFfree(w); - return (status); +} +#endif + +static int +TIFFWriteDirectoryTagAscii(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, char* value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedAscii(tif,ndir,dir,tag,count,value)); } static int -TIFFWriteTransferFunction(TIFF* tif, TIFFDirEntry* dir) +TIFFWriteDirectoryTagUndefinedArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint8* value) { - TIFFDirectory* td = &tif->tif_dir; - tsize_t n = (1L<td_bitspersample) * sizeof (uint16); - uint16** tf = td->td_transferfunction; - int ncols; + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedUndefinedArray(tif,ndir,dir,tag,count,value)); +} +#ifdef notdef +static int +TIFFWriteDirectoryTagByte(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint8 value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedByte(tif,ndir,dir,tag,value)); +} +#endif + +static int +TIFFWriteDirectoryTagByteArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint8* value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedByteArray(tif,ndir,dir,tag,count,value)); +} + +#if 0 +static int +TIFFWriteDirectoryTagBytePerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint8 value) +{ + static const char module[] = "TIFFWriteDirectoryTagBytePerSample"; + uint8* m; + uint8* na; + uint16 nb; + int o; + if (dir==NULL) + { + (*ndir)++; + return(1); + } + m=_TIFFmalloc(tif->tif_dir.td_samplesperpixel*sizeof(uint8)); + if (m==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + return(0); + } + for (na=m, nb=0; nbtif_dir.td_samplesperpixel; na++, nb++) + *na=value; + o=TIFFWriteDirectoryTagCheckedByteArray(tif,ndir,dir,tag,tif->tif_dir.td_samplesperpixel,m); + _TIFFfree(m); + return(o); +} +#endif + +#ifdef notdef +static int +TIFFWriteDirectoryTagSbyte(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int8 value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedSbyte(tif,ndir,dir,tag,value)); +} +#endif + +static int +TIFFWriteDirectoryTagSbyteArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int8* value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedSbyteArray(tif,ndir,dir,tag,count,value)); +} + +#if 0 +static int +TIFFWriteDirectoryTagSbytePerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int8 value) +{ + static const char module[] = "TIFFWriteDirectoryTagSbytePerSample"; + int8* m; + int8* na; + uint16 nb; + int o; + if (dir==NULL) + { + (*ndir)++; + return(1); + } + m=_TIFFmalloc(tif->tif_dir.td_samplesperpixel*sizeof(int8)); + if (m==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + return(0); + } + for (na=m, nb=0; nbtif_dir.td_samplesperpixel; na++, nb++) + *na=value; + o=TIFFWriteDirectoryTagCheckedSbyteArray(tif,ndir,dir,tag,tif->tif_dir.td_samplesperpixel,m); + _TIFFfree(m); + return(o); +} +#endif + +static int +TIFFWriteDirectoryTagShort(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint16 value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedShort(tif,ndir,dir,tag,value)); +} + +static int +TIFFWriteDirectoryTagShortArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint16* value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedShortArray(tif,ndir,dir,tag,count,value)); +} + +static int +TIFFWriteDirectoryTagShortPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint16 value) +{ + static const char module[] = "TIFFWriteDirectoryTagShortPerSample"; + uint16* m; + uint16* na; + uint16 nb; + int o; + if (dir==NULL) + { + (*ndir)++; + return(1); + } + m=_TIFFmalloc(tif->tif_dir.td_samplesperpixel*sizeof(uint16)); + if (m==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + return(0); + } + for (na=m, nb=0; nbtif_dir.td_samplesperpixel; na++, nb++) + *na=value; + o=TIFFWriteDirectoryTagCheckedShortArray(tif,ndir,dir,tag,tif->tif_dir.td_samplesperpixel,m); + _TIFFfree(m); + return(o); +} + +#ifdef notdef +static int +TIFFWriteDirectoryTagSshort(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int16 value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedSshort(tif,ndir,dir,tag,value)); +} +#endif + +static int +TIFFWriteDirectoryTagSshortArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int16* value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedSshortArray(tif,ndir,dir,tag,count,value)); +} + +#if 0 +static int +TIFFWriteDirectoryTagSshortPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int16 value) +{ + static const char module[] = "TIFFWriteDirectoryTagSshortPerSample"; + int16* m; + int16* na; + uint16 nb; + int o; + if (dir==NULL) + { + (*ndir)++; + return(1); + } + m=_TIFFmalloc(tif->tif_dir.td_samplesperpixel*sizeof(int16)); + if (m==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + return(0); + } + for (na=m, nb=0; nbtif_dir.td_samplesperpixel; na++, nb++) + *na=value; + o=TIFFWriteDirectoryTagCheckedSshortArray(tif,ndir,dir,tag,tif->tif_dir.td_samplesperpixel,m); + _TIFFfree(m); + return(o); +} +#endif + +static int +TIFFWriteDirectoryTagLong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedLong(tif,ndir,dir,tag,value)); +} + +static int +TIFFWriteDirectoryTagLongArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint32* value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedLongArray(tif,ndir,dir,tag,count,value)); +} + +#if 0 +static int +TIFFWriteDirectoryTagLongPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 value) +{ + static const char module[] = "TIFFWriteDirectoryTagLongPerSample"; + uint32* m; + uint32* na; + uint16 nb; + int o; + if (dir==NULL) + { + (*ndir)++; + return(1); + } + m=_TIFFmalloc(tif->tif_dir.td_samplesperpixel*sizeof(uint32)); + if (m==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + return(0); + } + for (na=m, nb=0; nbtif_dir.td_samplesperpixel; na++, nb++) + *na=value; + o=TIFFWriteDirectoryTagCheckedLongArray(tif,ndir,dir,tag,tif->tif_dir.td_samplesperpixel,m); + _TIFFfree(m); + return(o); +} +#endif + +#ifdef notdef +static int +TIFFWriteDirectoryTagSlong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int32 value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedSlong(tif,ndir,dir,tag,value)); +} +#endif + +static int +TIFFWriteDirectoryTagSlongArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int32* value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedSlongArray(tif,ndir,dir,tag,count,value)); +} + +#if 0 +static int +TIFFWriteDirectoryTagSlongPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int32 value) +{ + static const char module[] = "TIFFWriteDirectoryTagSlongPerSample"; + int32* m; + int32* na; + uint16 nb; + int o; + if (dir==NULL) + { + (*ndir)++; + return(1); + } + m=_TIFFmalloc(tif->tif_dir.td_samplesperpixel*sizeof(int32)); + if (m==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + return(0); + } + for (na=m, nb=0; nbtif_dir.td_samplesperpixel; na++, nb++) + *na=value; + o=TIFFWriteDirectoryTagCheckedSlongArray(tif,ndir,dir,tag,tif->tif_dir.td_samplesperpixel,m); + _TIFFfree(m); + return(o); +} +#endif + +#ifdef notdef +static int +TIFFWriteDirectoryTagLong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint64 value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedLong8(tif,ndir,dir,tag,value)); +} +#endif + +static int +TIFFWriteDirectoryTagLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedLong8Array(tif,ndir,dir,tag,count,value)); +} + +#ifdef notdef +static int +TIFFWriteDirectoryTagSlong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int64 value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedSlong8(tif,ndir,dir,tag,value)); +} +#endif + +static int +TIFFWriteDirectoryTagSlong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int64* value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedSlong8Array(tif,ndir,dir,tag,count,value)); +} + +static int +TIFFWriteDirectoryTagRational(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedRational(tif,ndir,dir,tag,value)); +} + +static int +TIFFWriteDirectoryTagRationalArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedRationalArray(tif,ndir,dir,tag,count,value)); +} + +static int +TIFFWriteDirectoryTagSrationalArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedSrationalArray(tif,ndir,dir,tag,count,value)); +} + +#ifdef notdef +static int TIFFWriteDirectoryTagFloat(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, float value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedFloat(tif,ndir,dir,tag,value)); +} +#endif + +static int TIFFWriteDirectoryTagFloatArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedFloatArray(tif,ndir,dir,tag,count,value)); +} + +#if 0 +static int TIFFWriteDirectoryTagFloatPerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, float value) +{ + static const char module[] = "TIFFWriteDirectoryTagFloatPerSample"; + float* m; + float* na; + uint16 nb; + int o; + if (dir==NULL) + { + (*ndir)++; + return(1); + } + m=_TIFFmalloc(tif->tif_dir.td_samplesperpixel*sizeof(float)); + if (m==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + return(0); + } + for (na=m, nb=0; nbtif_dir.td_samplesperpixel; na++, nb++) + *na=value; + o=TIFFWriteDirectoryTagCheckedFloatArray(tif,ndir,dir,tag,tif->tif_dir.td_samplesperpixel,m); + _TIFFfree(m); + return(o); +} +#endif + +#ifdef notdef +static int TIFFWriteDirectoryTagDouble(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedDouble(tif,ndir,dir,tag,value)); +} +#endif + +static int TIFFWriteDirectoryTagDoubleArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, double* value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedDoubleArray(tif,ndir,dir,tag,count,value)); +} + +#if 0 +static int TIFFWriteDirectoryTagDoublePerSample(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value) +{ + static const char module[] = "TIFFWriteDirectoryTagDoublePerSample"; + double* m; + double* na; + uint16 nb; + int o; + if (dir==NULL) + { + (*ndir)++; + return(1); + } + m=_TIFFmalloc(tif->tif_dir.td_samplesperpixel*sizeof(double)); + if (m==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + return(0); + } + for (na=m, nb=0; nbtif_dir.td_samplesperpixel; na++, nb++) + *na=value; + o=TIFFWriteDirectoryTagCheckedDoubleArray(tif,ndir,dir,tag,tif->tif_dir.td_samplesperpixel,m); + _TIFFfree(m); + return(o); +} +#endif + +static int +TIFFWriteDirectoryTagIfdArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint32* value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedIfdArray(tif,ndir,dir,tag,count,value)); +} + +#ifdef notdef +static int +TIFFWriteDirectoryTagIfd8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + return(TIFFWriteDirectoryTagCheckedIfd8Array(tif,ndir,dir,tag,count,value)); +} +#endif + +static int +TIFFWriteDirectoryTagShortLong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 value) +{ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + if (value<=0xFFFF) + return(TIFFWriteDirectoryTagCheckedShort(tif,ndir,dir,tag,(uint16)value)); + else + return(TIFFWriteDirectoryTagCheckedLong(tif,ndir,dir,tag,value)); +} + +/************************************************************************/ +/* TIFFWriteDirectoryTagLongLong8Array() */ +/* */ +/* Write out LONG8 array as LONG8 for BigTIFF or LONG for */ +/* Classic TIFF with some checking. */ +/************************************************************************/ + +static int +TIFFWriteDirectoryTagLongLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value) +{ + static const char module[] = "TIFFWriteDirectoryTagLongLong8Array"; + uint64* ma; + uint32 mb; + uint32* p; + uint32* q; + int o; + + /* is this just a counting pass? */ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + + /* We always write LONG8 for BigTIFF, no checking needed. */ + if( tif->tif_flags&TIFF_BIGTIFF ) + return TIFFWriteDirectoryTagCheckedLong8Array(tif,ndir,dir, + tag,count,value); + + /* + ** For classic tiff we want to verify everything is in range for LONG + ** and convert to long format. + */ + + p = _TIFFmalloc(count*sizeof(uint32)); + if (p==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + return(0); + } + + for (q=p, ma=value, mb=0; mb0xFFFFFFFF) + { + TIFFErrorExt(tif->tif_clientdata,module, + "Attempt to write value larger than 0xFFFFFFFF in Classic TIFF file."); + _TIFFfree(p); + return(0); + } + *q= (uint32)(*ma); + } + + o=TIFFWriteDirectoryTagCheckedLongArray(tif,ndir,dir,tag,count,p); + _TIFFfree(p); + + return(o); +} + +/************************************************************************/ +/* TIFFWriteDirectoryTagIfdIfd8Array() */ +/* */ +/* Write either IFD8 or IFD array depending on file type. */ +/************************************************************************/ + +static int +TIFFWriteDirectoryTagIfdIfd8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value) +{ + static const char module[] = "TIFFWriteDirectoryTagIfdIfd8Array"; + uint64* ma; + uint32 mb; + uint32* p; + uint32* q; + int o; + + /* is this just a counting pass? */ + if (dir==NULL) + { + (*ndir)++; + return(1); + } + + /* We always write IFD8 for BigTIFF, no checking needed. */ + if( tif->tif_flags&TIFF_BIGTIFF ) + return TIFFWriteDirectoryTagCheckedIfd8Array(tif,ndir,dir, + tag,count,value); + + /* + ** For classic tiff we want to verify everything is in range for IFD + ** and convert to long format. + */ + + p = _TIFFmalloc(count*sizeof(uint32)); + if (p==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + return(0); + } + + for (q=p, ma=value, mb=0; mb0xFFFFFFFF) + { + TIFFErrorExt(tif->tif_clientdata,module, + "Attempt to write value larger than 0xFFFFFFFF in Classic TIFF file."); + _TIFFfree(p); + return(0); + } + *q= (uint32)(*ma); + } + + o=TIFFWriteDirectoryTagCheckedIfdArray(tif,ndir,dir,tag,count,p); + _TIFFfree(p); + + return(o); +} + +#ifdef notdef +static int +TIFFWriteDirectoryTagShortLongLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value) +{ + static const char module[] = "TIFFWriteDirectoryTagShortLongLong8Array"; + uint64* ma; + uint32 mb; + uint8 n; + int o; + if (dir==NULL) + { + (*ndir)++; + return(1); + } + n=0; + for (ma=value, mb=0; mb0xFFFF)) + n=1; + if ((n==1)&&(*ma>0xFFFFFFFF)) + { + n=2; + break; + } + } + if (n==0) + { + uint16* p; + uint16* q; + p=_TIFFmalloc(count*sizeof(uint16)); + if (p==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + return(0); + } + for (ma=value, mb=0, q=p; mbtif_clientdata,module,"Out of memory"); + return(0); + } + for (ma=value, mb=0, q=p; mbtif_dir.td_bitspersample); + n=_TIFFmalloc(3*m*sizeof(uint16)); + if (n==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + return(0); + } + _TIFFmemcpy(&n[0],tif->tif_dir.td_colormap[0],m*sizeof(uint16)); + _TIFFmemcpy(&n[m],tif->tif_dir.td_colormap[1],m*sizeof(uint16)); + _TIFFmemcpy(&n[2*m],tif->tif_dir.td_colormap[2],m*sizeof(uint16)); + o=TIFFWriteDirectoryTagCheckedShortArray(tif,ndir,dir,TIFFTAG_COLORMAP,3*m,n); + _TIFFfree(n); + return(o); +} + +static int +TIFFWriteDirectoryTagTransferfunction(TIFF* tif, uint32* ndir, TIFFDirEntry* dir) +{ + static const char module[] = "TIFFWriteDirectoryTagTransferfunction"; + uint32 m; + uint16 n; + uint16* o; + int p; + if (dir==NULL) + { + (*ndir)++; + return(1); + } + m=(1<tif_dir.td_bitspersample); + n=tif->tif_dir.td_samplesperpixel-tif->tif_dir.td_extrasamples; /* * Check if the table can be written as a single column, * or if it must be written as 3 columns. Note that we * write a 3-column tag if there are 2 samples/pixel and * a single column of data won't suffice--hmm. */ - switch (td->td_samplesperpixel - td->td_extrasamples) { - default: if (_TIFFmemcmp(tf[0], tf[2], n)) { ncols = 3; break; } - case 2: if (_TIFFmemcmp(tf[0], tf[1], n)) { ncols = 3; break; } - case 1: case 0: ncols = 1; + if (n>3) + n=3; + if (n==3) + { + if (!_TIFFmemcmp(tif->tif_dir.td_transferfunction[0],tif->tif_dir.td_transferfunction[2],m*sizeof(uint16))) + n=2; } - return (TIFFWriteShortTable(tif, - TIFFTAG_TRANSFERFUNCTION, dir, ncols, tf)); + if (n==2) + { + if (!_TIFFmemcmp(tif->tif_dir.td_transferfunction[0],tif->tif_dir.td_transferfunction[1],m*sizeof(uint16))) + n=1; + } + if (n==0) + n=1; + o=_TIFFmalloc(n*m*sizeof(uint16)); + if (o==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + return(0); + } + _TIFFmemcpy(&o[0],tif->tif_dir.td_transferfunction[0],m*sizeof(uint16)); + if (n>1) + _TIFFmemcpy(&o[m],tif->tif_dir.td_transferfunction[1],m*sizeof(uint16)); + if (n>2) + _TIFFmemcpy(&o[2*m],tif->tif_dir.td_transferfunction[2],m*sizeof(uint16)); + p=TIFFWriteDirectoryTagCheckedShortArray(tif,ndir,dir,TIFFTAG_TRANSFERFUNCTION,n*m,o); + _TIFFfree(o); + return(p); } static int -TIFFWriteInkNames(TIFF* tif, TIFFDirEntry* dir) +TIFFWriteDirectoryTagSubifd(TIFF* tif, uint32* ndir, TIFFDirEntry* dir) { - TIFFDirectory* td = &tif->tif_dir; - - dir->tdir_tag = TIFFTAG_INKNAMES; - dir->tdir_type = (short) TIFF_ASCII; - dir->tdir_count = td->td_inknameslen; - return (TIFFWriteByteArray(tif, dir, td->td_inknames)); + static const char module[] = "TIFFWriteDirectoryTagSubifd"; + uint64 m; + int n; + if (tif->tif_dir.td_nsubifd==0) + return(1); + if (dir==NULL) + { + (*ndir)++; + return(1); + } + m=tif->tif_dataoff; + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + uint32* o; + uint64* pa; + uint32* pb; + uint16 p; + o=_TIFFmalloc(tif->tif_dir.td_nsubifd*sizeof(uint32)); + if (o==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + return(0); + } + pa=tif->tif_dir.td_subifd; + pb=o; + for (p=0; p < tif->tif_dir.td_nsubifd; p++) + { + assert(pa != 0); + assert(*pa <= 0xFFFFFFFFUL); + *pb++=(uint32)(*pa++); + } + n=TIFFWriteDirectoryTagCheckedIfdArray(tif,ndir,dir,TIFFTAG_SUBIFD,tif->tif_dir.td_nsubifd,o); + _TIFFfree(o); + } + else + n=TIFFWriteDirectoryTagCheckedIfd8Array(tif,ndir,dir,TIFFTAG_SUBIFD,tif->tif_dir.td_nsubifd,tif->tif_dir.td_subifd); + if (!n) + return(0); + /* + * Total hack: if this directory includes a SubIFD + * tag then force the next directories to be + * written as ``sub directories'' of this one. This + * is used to write things like thumbnails and + * image masks that one wants to keep out of the + * normal directory linkage access mechanism. + */ + tif->tif_flags|=TIFF_INSUBIFD; + tif->tif_nsubifd=tif->tif_dir.td_nsubifd; + if (tif->tif_dir.td_nsubifd==1) + tif->tif_subifdoff=0; + else + tif->tif_subifdoff=m; + return(1); } -/* - * Write a contiguous directory item. - */ static int -TIFFWriteData(TIFF* tif, TIFFDirEntry* dir, char* cp) +TIFFWriteDirectoryTagCheckedAscii(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, char* value) { - tsize_t cc; - - if (tif->tif_flags & TIFF_SWAB) { - switch (dir->tdir_type) { - case TIFF_SHORT: - case TIFF_SSHORT: - TIFFSwabArrayOfShort((uint16*) cp, dir->tdir_count); - break; - case TIFF_LONG: - case TIFF_SLONG: - case TIFF_FLOAT: - TIFFSwabArrayOfLong((uint32*) cp, dir->tdir_count); - break; - case TIFF_RATIONAL: - case TIFF_SRATIONAL: - TIFFSwabArrayOfLong((uint32*) cp, 2*dir->tdir_count); - break; - case TIFF_DOUBLE: - TIFFSwabArrayOfDouble((double*) cp, dir->tdir_count); - break; - } - } - dir->tdir_offset = tif->tif_dataoff; - cc = dir->tdir_count * TIFFDataWidth((TIFFDataType) dir->tdir_type); - if (SeekOK(tif, dir->tdir_offset) && - WriteOK(tif, cp, cc)) { - tif->tif_dataoff += (cc + 1) & ~1; - return (1); - } - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Error writing data for field \"%s\"", - _TIFFFieldWithTag(tif, dir->tdir_tag)->field_name); - return (0); + assert(sizeof(char)==1); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_ASCII,count,count,value)); } -/* - * Similar to TIFFWriteDirectory(), but if the directory has already - * been written once, it is relocated to the end of the file, in case it - * has changed in size. Note that this will result in the loss of the - * previously used directory space. - */ - -int -TIFFRewriteDirectory( TIFF *tif ) +static int +TIFFWriteDirectoryTagCheckedUndefinedArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint8* value) { - static const char module[] = "TIFFRewriteDirectory"; - - /* We don't need to do anything special if it hasn't been written. */ - if( tif->tif_diroff == 0 ) - return TIFFWriteDirectory( tif ); - - /* - ** Find and zero the pointer to this directory, so that TIFFLinkDirectory - ** will cause it to be added after this directories current pre-link. - */ - - /* Is it the first directory in the file? */ - if (tif->tif_header.tiff_diroff == tif->tif_diroff) - { - tif->tif_header.tiff_diroff = 0; - tif->tif_diroff = 0; - - TIFFSeekFile(tif, (toff_t)(TIFF_MAGIC_SIZE+TIFF_VERSION_SIZE), - SEEK_SET); - if (!WriteOK(tif, &(tif->tif_header.tiff_diroff), - sizeof (tif->tif_diroff))) - { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Error updating TIFF header"); - return (0); - } - } - else - { - toff_t nextdir, off; - - nextdir = tif->tif_header.tiff_diroff; - do { - uint16 dircount; - - if (!SeekOK(tif, nextdir) || - !ReadOK(tif, &dircount, sizeof (dircount))) { - TIFFErrorExt(tif->tif_clientdata, module, - "Error fetching directory count"); - return (0); - } - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabShort(&dircount); - (void) TIFFSeekFile(tif, - dircount * sizeof (TIFFDirEntry), SEEK_CUR); - if (!ReadOK(tif, &nextdir, sizeof (nextdir))) { - TIFFErrorExt(tif->tif_clientdata, module, - "Error fetching directory link"); - return (0); - } - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabLong(&nextdir); - } while (nextdir != tif->tif_diroff && nextdir != 0); - off = TIFFSeekFile(tif, 0, SEEK_CUR); /* get current offset */ - (void) TIFFSeekFile(tif, off - (toff_t)sizeof(nextdir), SEEK_SET); - tif->tif_diroff = 0; - if (!WriteOK(tif, &(tif->tif_diroff), sizeof (nextdir))) { - TIFFErrorExt(tif->tif_clientdata, module, - "Error writing directory link"); - return (0); - } - } - - /* - ** Now use TIFFWriteDirectory() normally. - */ - - return TIFFWriteDirectory( tif ); + assert(sizeof(uint8)==1); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_UNDEFINED,count,count,value)); } +#ifdef notdef +static int +TIFFWriteDirectoryTagCheckedByte(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint8 value) +{ + assert(sizeof(uint8)==1); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_BYTE,1,1,&value)); +} +#endif + +static int +TIFFWriteDirectoryTagCheckedByteArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint8* value) +{ + assert(sizeof(uint8)==1); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_BYTE,count,count,value)); +} + +#ifdef notdef +static int +TIFFWriteDirectoryTagCheckedSbyte(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int8 value) +{ + assert(sizeof(int8)==1); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SBYTE,1,1,&value)); +} +#endif + +static int +TIFFWriteDirectoryTagCheckedSbyteArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int8* value) +{ + assert(sizeof(int8)==1); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SBYTE,count,count,value)); +} + +static int +TIFFWriteDirectoryTagCheckedShort(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint16 value) +{ + uint16 m; + assert(sizeof(uint16)==2); + m=value; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabShort(&m); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SHORT,1,2,&m)); +} + +static int +TIFFWriteDirectoryTagCheckedShortArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint16* value) +{ + assert(count<0x80000000); + assert(sizeof(uint16)==2); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfShort(value,count); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SHORT,count,count*2,value)); +} + +#ifdef notdef +static int +TIFFWriteDirectoryTagCheckedSshort(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int16 value) +{ + int16 m; + assert(sizeof(int16)==2); + m=value; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabShort((uint16*)(&m)); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SSHORT,1,2,&m)); +} +#endif + +static int +TIFFWriteDirectoryTagCheckedSshortArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int16* value) +{ + assert(count<0x80000000); + assert(sizeof(int16)==2); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfShort((uint16*)value,count); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SSHORT,count,count*2,value)); +} + +static int +TIFFWriteDirectoryTagCheckedLong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 value) +{ + uint32 m; + assert(sizeof(uint32)==4); + m=value; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(&m); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_LONG,1,4,&m)); +} + +static int +TIFFWriteDirectoryTagCheckedLongArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint32* value) +{ + assert(count<0x40000000); + assert(sizeof(uint32)==4); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong(value,count); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_LONG,count,count*4,value)); +} + +#ifdef notdef +static int +TIFFWriteDirectoryTagCheckedSlong(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int32 value) +{ + int32 m; + assert(sizeof(int32)==4); + m=value; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong((uint32*)(&m)); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SLONG,1,4,&m)); +} +#endif + +static int +TIFFWriteDirectoryTagCheckedSlongArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int32* value) +{ + assert(count<0x40000000); + assert(sizeof(int32)==4); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong((uint32*)value,count); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SLONG,count,count*4,value)); +} + +#ifdef notdef +static int +TIFFWriteDirectoryTagCheckedLong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint64 value) +{ + uint64 m; + assert(sizeof(uint64)==8); + assert(tif->tif_flags&TIFF_BIGTIFF); + m=value; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8(&m); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_LONG8,1,8,&m)); +} +#endif + +static int +TIFFWriteDirectoryTagCheckedLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value) +{ + assert(count<0x20000000); + assert(sizeof(uint64)==8); + assert(tif->tif_flags&TIFF_BIGTIFF); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong8(value,count); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_LONG8,count,count*8,value)); +} + +#ifdef notdef +static int +TIFFWriteDirectoryTagCheckedSlong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, int64 value) +{ + int64 m; + assert(sizeof(int64)==8); + assert(tif->tif_flags&TIFF_BIGTIFF); + m=value; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8((uint64*)(&m)); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SLONG8,1,8,&m)); +} +#endif + +static int +TIFFWriteDirectoryTagCheckedSlong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, int64* value) +{ + assert(count<0x20000000); + assert(sizeof(int64)==8); + assert(tif->tif_flags&TIFF_BIGTIFF); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong8((uint64*)value,count); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SLONG8,count,count*8,value)); +} + +static int +TIFFWriteDirectoryTagCheckedRational(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value) +{ + uint32 m[2]; + assert(value>=0.0); + assert(sizeof(uint32)==4); + if (value<=0.0) + { + m[0]=0; + m[1]=1; + } + else if (value==(double)(uint32)value) + { + m[0]=(uint32)value; + m[1]=1; + } + else if (value<1.0) + { + m[0]=(uint32)(value*0xFFFFFFFF); + m[1]=0xFFFFFFFF; + } + else + { + m[0]=0xFFFFFFFF; + m[1]=(uint32)(0xFFFFFFFF/value); + } + if (tif->tif_flags&TIFF_SWAB) + { + TIFFSwabLong(&m[0]); + TIFFSwabLong(&m[1]); + } + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_RATIONAL,1,8,&m[0])); +} + +static int +TIFFWriteDirectoryTagCheckedRationalArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value) +{ + static const char module[] = "TIFFWriteDirectoryTagCheckedRationalArray"; + uint32* m; + float* na; + uint32* nb; + uint32 nc; + int o; + assert(sizeof(uint32)==4); + m=_TIFFmalloc(count*2*sizeof(uint32)); + if (m==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + return(0); + } + for (na=value, nb=m, nc=0; nctif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong(m,count*2); + o=TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_RATIONAL,count,count*8,&m[0]); + _TIFFfree(m); + return(o); +} + +static int +TIFFWriteDirectoryTagCheckedSrationalArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value) +{ + static const char module[] = "TIFFWriteDirectoryTagCheckedSrationalArray"; + int32* m; + float* na; + int32* nb; + uint32 nc; + int o; + assert(sizeof(int32)==4); + m=_TIFFmalloc(count*2*sizeof(int32)); + if (m==NULL) + { + TIFFErrorExt(tif->tif_clientdata,module,"Out of memory"); + return(0); + } + for (na=value, nb=m, nc=0; nc-1.0) + { + nb[0]=-(int32)((-*na)*0x7FFFFFFF); + nb[1]=0x7FFFFFFF; + } + else + { + nb[0]=-0x7FFFFFFF; + nb[1]=(int32)(0x7FFFFFFF/(-*na)); + } + } + else + { + if (*na==(int32)(*na)) + { + nb[0]=(int32)(*na); + nb[1]=1; + } + else if (*na<1.0) + { + nb[0]=(int32)((*na)*0x7FFFFFFF); + nb[1]=0x7FFFFFFF; + } + else + { + nb[0]=0x7FFFFFFF; + nb[1]=(int32)(0x7FFFFFFF/(*na)); + } + } + } + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong((uint32*)m,count*2); + o=TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SRATIONAL,count,count*8,&m[0]); + _TIFFfree(m); + return(o); +} + +#ifdef notdef +static int +TIFFWriteDirectoryTagCheckedFloat(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, float value) +{ + float m; + assert(sizeof(float)==4); + m=value; + TIFFCvtNativeToIEEEFloat(tif,1,&m); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabFloat(&m); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_FLOAT,1,4,&m)); +} +#endif + +static int +TIFFWriteDirectoryTagCheckedFloatArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, float* value) +{ + assert(count<0x40000000); + assert(sizeof(float)==4); + TIFFCvtNativeToIEEEFloat(tif,count,&value); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfFloat(value,count); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_FLOAT,count,count*4,value)); +} + +#ifdef notdef +static int +TIFFWriteDirectoryTagCheckedDouble(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, double value) +{ + double m; + assert(sizeof(double)==8); + m=value; + TIFFCvtNativeToIEEEDouble(tif,1,&m); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabDouble(&m); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_DOUBLE,1,8,&m)); +} +#endif + +static int +TIFFWriteDirectoryTagCheckedDoubleArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, double* value) +{ + assert(count<0x20000000); + assert(sizeof(double)==8); + TIFFCvtNativeToIEEEDouble(tif,count,&value); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfDouble(value,count); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_DOUBLE,count,count*8,value)); +} + +static int +TIFFWriteDirectoryTagCheckedIfdArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint32* value) +{ + assert(count<0x40000000); + assert(sizeof(uint32)==4); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong(value,count); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_IFD,count,count*4,value)); +} + +static int +TIFFWriteDirectoryTagCheckedIfd8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, uint64* value) +{ + assert(count<0x20000000); + assert(sizeof(uint64)==8); + assert(tif->tif_flags&TIFF_BIGTIFF); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong8(value,count); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_IFD8,count,count*8,value)); +} + +static int +TIFFWriteDirectoryTagData(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint16 datatype, uint32 count, uint32 datalength, void* data) +{ + static const char module[] = "TIFFWriteDirectoryTagData"; + uint32 m; + m=0; + while (m<(*ndir)) + { + assert(dir[m].tdir_tag!=tag); + if (dir[m].tdir_tag>tag) + break; + m++; + } + if (m<(*ndir)) + { + uint32 n; + for (n=*ndir; n>m; n--) + dir[n]=dir[n-1]; + } + dir[m].tdir_tag=tag; + dir[m].tdir_type=datatype; + dir[m].tdir_count=count; + dir[m].tdir_offset.toff_long8 = 0; + if (datalength<=((tif->tif_flags&TIFF_BIGTIFF)?0x8U:0x4U)) + _TIFFmemcpy(&dir[m].tdir_offset,data,datalength); + else + { + uint64 na,nb; + na=tif->tif_dataoff; + nb=na+datalength; + if (!(tif->tif_flags&TIFF_BIGTIFF)) + nb=(uint32)nb; + if ((nbtif_clientdata,module,"Maximum TIFF file size exceeded"); + return(0); + } + if (!SeekOK(tif,na)) + { + TIFFErrorExt(tif->tif_clientdata,module,"IO error writing tag data"); + return(0); + } + assert(datalength<0x80000000UL); + if (!WriteOK(tif,data,(tmsize_t)datalength)) + { + TIFFErrorExt(tif->tif_clientdata,module,"IO error writing tag data"); + return(0); + } + tif->tif_dataoff=nb; + if (tif->tif_dataoff&1) + tif->tif_dataoff++; + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + uint32 o; + o=(uint32)na; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong(&o); + _TIFFmemcpy(&dir[m].tdir_offset,&o,4); + } + else + { + dir[m].tdir_offset.toff_long8 = na; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8(&dir[m].tdir_offset.toff_long8); + } + } + (*ndir)++; + return(1); +} /* * Link the current directory into the directory chain for the file. @@ -1323,87 +2367,539 @@ static int TIFFLinkDirectory(TIFF* tif) { static const char module[] = "TIFFLinkDirectory"; - toff_t nextdir; - toff_t diroff, off; - tif->tif_diroff = (TIFFSeekFile(tif, (toff_t) 0, SEEK_END)+1) &~ 1; - diroff = tif->tif_diroff; - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabLong(&diroff); + tif->tif_diroff = (TIFFSeekFile(tif,0,SEEK_END)+1) &~ 1; /* * Handle SubIFDs */ - if (tif->tif_flags & TIFF_INSUBIFD) { - (void) TIFFSeekFile(tif, tif->tif_subifdoff, SEEK_SET); - if (!WriteOK(tif, &diroff, sizeof (diroff))) { - TIFFErrorExt(tif->tif_clientdata, module, - "%s: Error writing SubIFD directory link", - tif->tif_name); - return (0); + if (tif->tif_flags & TIFF_INSUBIFD) + { + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + uint32 m; + m = (uint32)tif->tif_diroff; + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(&m); + (void) TIFFSeekFile(tif, tif->tif_subifdoff, SEEK_SET); + if (!WriteOK(tif, &m, 4)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error writing SubIFD directory link"); + return (0); + } + /* + * Advance to the next SubIFD or, if this is + * the last one configured, revert back to the + * normal directory linkage. + */ + if (--tif->tif_nsubifd) + tif->tif_subifdoff += 4; + else + tif->tif_flags &= ~TIFF_INSUBIFD; + return (1); } - /* - * Advance to the next SubIFD or, if this is - * the last one configured, revert back to the - * normal directory linkage. - */ - if (--tif->tif_nsubifd) - tif->tif_subifdoff += sizeof (diroff); else - tif->tif_flags &= ~TIFF_INSUBIFD; - return (1); + { + uint64 m; + m = tif->tif_diroff; + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong8(&m); + (void) TIFFSeekFile(tif, tif->tif_subifdoff, SEEK_SET); + if (!WriteOK(tif, &m, 8)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error writing SubIFD directory link"); + return (0); + } + /* + * Advance to the next SubIFD or, if this is + * the last one configured, revert back to the + * normal directory linkage. + */ + if (--tif->tif_nsubifd) + tif->tif_subifdoff += 8; + else + tif->tif_flags &= ~TIFF_INSUBIFD; + return (1); + } } - if (tif->tif_header.tiff_diroff == 0) { + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + uint32 m; + uint32 nextdir; + m = (uint32)(tif->tif_diroff); + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(&m); + if (tif->tif_header.classic.tiff_diroff == 0) { + /* + * First directory, overwrite offset in header. + */ + tif->tif_header.classic.tiff_diroff = (uint32) tif->tif_diroff; + (void) TIFFSeekFile(tif,4, SEEK_SET); + if (!WriteOK(tif, &m, 4)) { + TIFFErrorExt(tif->tif_clientdata, tif->tif_name, + "Error writing TIFF header"); + return (0); + } + return (1); + } /* - * First directory, overwrite offset in header. + * Not the first directory, search to the last and append. */ - tif->tif_header.tiff_diroff = tif->tif_diroff; - (void) TIFFSeekFile(tif, - (toff_t)(TIFF_MAGIC_SIZE+TIFF_VERSION_SIZE), - SEEK_SET); - if (!WriteOK(tif, &diroff, sizeof (diroff))) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Error writing TIFF header"); - return (0); - } - return (1); - } - /* - * Not the first directory, search to the last and append. - */ - nextdir = tif->tif_header.tiff_diroff; - do { - uint16 dircount; + nextdir = tif->tif_header.classic.tiff_diroff; + while(1) { + uint16 dircount; + uint32 nextnextdir; - if (!SeekOK(tif, nextdir) || - !ReadOK(tif, &dircount, sizeof (dircount))) { - TIFFErrorExt(tif->tif_clientdata, module, - "Error fetching directory count"); - return (0); + if (!SeekOK(tif, nextdir) || + !ReadOK(tif, &dircount, 2)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error fetching directory count"); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabShort(&dircount); + (void) TIFFSeekFile(tif, + nextdir+2+dircount*12, SEEK_SET); + if (!ReadOK(tif, &nextnextdir, 4)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error fetching directory link"); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(&nextnextdir); + if (nextnextdir==0) + { + (void) TIFFSeekFile(tif, + nextdir+2+dircount*12, SEEK_SET); + if (!WriteOK(tif, &m, 4)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error writing directory link"); + return (0); + } + break; + } + nextdir=nextnextdir; } + } + else + { + uint64 m; + uint64 nextdir; + m = tif->tif_diroff; if (tif->tif_flags & TIFF_SWAB) - TIFFSwabShort(&dircount); - (void) TIFFSeekFile(tif, - dircount * sizeof (TIFFDirEntry), SEEK_CUR); - if (!ReadOK(tif, &nextdir, sizeof (nextdir))) { - TIFFErrorExt(tif->tif_clientdata, module, - "Error fetching directory link"); - return (0); + TIFFSwabLong8(&m); + if (tif->tif_header.big.tiff_diroff == 0) { + /* + * First directory, overwrite offset in header. + */ + tif->tif_header.big.tiff_diroff = tif->tif_diroff; + (void) TIFFSeekFile(tif,8, SEEK_SET); + if (!WriteOK(tif, &m, 8)) { + TIFFErrorExt(tif->tif_clientdata, tif->tif_name, + "Error writing TIFF header"); + return (0); + } + return (1); + } + /* + * Not the first directory, search to the last and append. + */ + nextdir = tif->tif_header.big.tiff_diroff; + while(1) { + uint64 dircount64; + uint16 dircount; + uint64 nextnextdir; + + if (!SeekOK(tif, nextdir) || + !ReadOK(tif, &dircount64, 8)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error fetching directory count"); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong8(&dircount64); + if (dircount64>0xFFFF) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Sanity check on tag count failed, likely corrupt TIFF"); + return (0); + } + dircount=(uint16)dircount64; + (void) TIFFSeekFile(tif, + nextdir+8+dircount*20, SEEK_SET); + if (!ReadOK(tif, &nextnextdir, 8)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error fetching directory link"); + return (0); + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong8(&nextnextdir); + if (nextnextdir==0) + { + (void) TIFFSeekFile(tif, + nextdir+8+dircount*20, SEEK_SET); + if (!WriteOK(tif, &m, 8)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error writing directory link"); + return (0); + } + break; + } + nextdir=nextnextdir; } - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabLong(&nextdir); - } while (nextdir != 0); - off = TIFFSeekFile(tif, 0, SEEK_CUR); /* get current offset */ - (void) TIFFSeekFile(tif, off - (toff_t)sizeof(nextdir), SEEK_SET); - if (!WriteOK(tif, &diroff, sizeof (diroff))) { - TIFFErrorExt(tif->tif_clientdata, module, - "Error writing directory link"); - return (0); } return (1); } +/************************************************************************/ +/* TIFFRewriteField() */ +/* */ +/* Rewrite a field in the directory on disk without regard to */ +/* updating the TIFF directory structure in memory. Currently */ +/* only supported for field that already exist in the on-disk */ +/* directory. Mainly used for updating stripoffset / */ +/* stripbytecount values after the directory is already on */ +/* disk. */ +/* */ +/* Returns zero on failure, and one on success. */ +/************************************************************************/ + +int +_TIFFRewriteField(TIFF* tif, uint16 tag, TIFFDataType in_datatype, + tmsize_t count, void* data) +{ + static const char module[] = "TIFFResetField"; + /* const TIFFField* fip = NULL; */ + uint16 dircount; + tmsize_t dirsize; + uint8 direntry_raw[20]; + uint16 entry_tag = 0; + uint16 entry_type = 0; + uint64 entry_count = 0; + uint64 entry_offset = 0; + int value_in_entry = 0; + uint64 read_offset; + uint8 *buf_to_write = NULL; + TIFFDataType datatype; + +/* -------------------------------------------------------------------- */ +/* Find field definition. */ +/* -------------------------------------------------------------------- */ + /*fip =*/ TIFFFindField(tif, tag, TIFF_ANY); + +/* -------------------------------------------------------------------- */ +/* Do some checking this is a straight forward case. */ +/* -------------------------------------------------------------------- */ + if( isMapped(tif) ) + { + TIFFErrorExt( tif->tif_clientdata, module, + "Memory mapped files not currently supported for this operation." ); + return 0; + } + + if( tif->tif_diroff == 0 ) + { + TIFFErrorExt( tif->tif_clientdata, module, + "Attempt to reset field on directory not already on disk." ); + return 0; + } + +/* -------------------------------------------------------------------- */ +/* Read the directory entry count. */ +/* -------------------------------------------------------------------- */ + if (!SeekOK(tif, tif->tif_diroff)) { + TIFFErrorExt(tif->tif_clientdata, module, + "%s: Seek error accessing TIFF directory", + tif->tif_name); + return 0; + } + + read_offset = tif->tif_diroff; + + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + if (!ReadOK(tif, &dircount, sizeof (uint16))) { + TIFFErrorExt(tif->tif_clientdata, module, + "%s: Can not read TIFF directory count", + tif->tif_name); + return 0; + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabShort(&dircount); + dirsize = 12; + read_offset += 2; + } else { + uint64 dircount64; + if (!ReadOK(tif, &dircount64, sizeof (uint64))) { + TIFFErrorExt(tif->tif_clientdata, module, + "%s: Can not read TIFF directory count", + tif->tif_name); + return 0; + } + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong8(&dircount64); + dircount = (uint16)dircount64; + dirsize = 20; + read_offset += 8; + } + +/* -------------------------------------------------------------------- */ +/* Read through directory to find target tag. */ +/* -------------------------------------------------------------------- */ + while( dircount > 0 ) + { + if (!ReadOK(tif, direntry_raw, dirsize)) { + TIFFErrorExt(tif->tif_clientdata, module, + "%s: Can not read TIFF directory entry.", + tif->tif_name); + return 0; + } + + memcpy( &entry_tag, direntry_raw + 0, sizeof(uint16) ); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabShort( &entry_tag ); + + if( entry_tag == tag ) + break; + + read_offset += dirsize; + } + + if( entry_tag != tag ) + { + TIFFErrorExt(tif->tif_clientdata, module, + "%s: Could not find tag %d.", + tif->tif_name, tag ); + return 0; + } + +/* -------------------------------------------------------------------- */ +/* Extract the type, count and offset for this entry. */ +/* -------------------------------------------------------------------- */ + memcpy( &entry_type, direntry_raw + 2, sizeof(uint16) ); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabShort( &entry_type ); + + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + uint32 value; + + memcpy( &value, direntry_raw + 4, sizeof(uint32) ); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong( &value ); + entry_count = value; + + memcpy( &value, direntry_raw + 8, sizeof(uint32) ); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong( &value ); + entry_offset = value; + } + else + { + memcpy( &entry_count, direntry_raw + 4, sizeof(uint64) ); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8( &entry_count ); + + memcpy( &entry_offset, direntry_raw + 12, sizeof(uint64) ); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8( &entry_offset ); + } + +/* -------------------------------------------------------------------- */ +/* What data type do we want to write this as? */ +/* -------------------------------------------------------------------- */ + if( TIFFDataWidth(in_datatype) == 8 && !(tif->tif_flags&TIFF_BIGTIFF) ) + { + if( in_datatype == TIFF_LONG8 ) + datatype = TIFF_LONG; + else if( in_datatype == TIFF_SLONG8 ) + datatype = TIFF_SLONG; + else if( in_datatype == TIFF_IFD8 ) + datatype = TIFF_IFD; + else + datatype = in_datatype; + } + else + datatype = in_datatype; + +/* -------------------------------------------------------------------- */ +/* Prepare buffer of actual data to write. This includes */ +/* swabbing as needed. */ +/* -------------------------------------------------------------------- */ + buf_to_write = + (uint8 *)_TIFFCheckMalloc(tif, count, TIFFDataWidth(datatype), + "for field buffer."); + if (!buf_to_write) + return 0; + + if( datatype == in_datatype ) + memcpy( buf_to_write, data, count * TIFFDataWidth(datatype) ); + else if( datatype == TIFF_SLONG && in_datatype == TIFF_SLONG8 ) + { + tmsize_t i; + + for( i = 0; i < count; i++ ) + { + ((int32 *) buf_to_write)[i] = + (int32) ((int64 *) data)[i]; + if( (int64) ((int32 *) buf_to_write)[i] != ((int64 *) data)[i] ) + { + _TIFFfree( buf_to_write ); + TIFFErrorExt( tif->tif_clientdata, module, + "Value exceeds 32bit range of output type." ); + return 0; + } + } + } + else if( (datatype == TIFF_LONG && in_datatype == TIFF_LONG8) + || (datatype == TIFF_IFD && in_datatype == TIFF_IFD8) ) + { + tmsize_t i; + + for( i = 0; i < count; i++ ) + { + ((uint32 *) buf_to_write)[i] = + (uint32) ((uint64 *) data)[i]; + if( (uint64) ((uint32 *) buf_to_write)[i] != ((uint64 *) data)[i] ) + { + _TIFFfree( buf_to_write ); + TIFFErrorExt( tif->tif_clientdata, module, + "Value exceeds 32bit range of output type." ); + return 0; + } + } + } + + if( TIFFDataWidth(datatype) > 1 && (tif->tif_flags&TIFF_SWAB) ) + { + if( TIFFDataWidth(datatype) == 2 ) + TIFFSwabArrayOfShort( (uint16 *) buf_to_write, count ); + else if( TIFFDataWidth(datatype) == 4 ) + TIFFSwabArrayOfLong( (uint32 *) buf_to_write, count ); + else if( TIFFDataWidth(datatype) == 8 ) + TIFFSwabArrayOfLong8( (uint64 *) buf_to_write, count ); + } + +/* -------------------------------------------------------------------- */ +/* Is this a value that fits into the directory entry? */ +/* -------------------------------------------------------------------- */ + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + if( TIFFDataWidth(datatype) * count <= 4 ) + { + entry_offset = read_offset + 8; + value_in_entry = 1; + } + } + else + { + if( TIFFDataWidth(datatype) * count <= 8 ) + { + entry_offset = read_offset + 12; + value_in_entry = 1; + } + } + +/* -------------------------------------------------------------------- */ +/* If the tag type, and count match, then we just write it out */ +/* over the old values without altering the directory entry at */ +/* all. */ +/* -------------------------------------------------------------------- */ + if( entry_count == (uint64)count && entry_type == (uint16) datatype ) + { + if (!SeekOK(tif, entry_offset)) { + _TIFFfree( buf_to_write ); + TIFFErrorExt(tif->tif_clientdata, module, + "%s: Seek error accessing TIFF directory", + tif->tif_name); + return 0; + } + if (!WriteOK(tif, buf_to_write, count*TIFFDataWidth(datatype))) { + _TIFFfree( buf_to_write ); + TIFFErrorExt(tif->tif_clientdata, module, + "Error writing directory link"); + return (0); + } + + _TIFFfree( buf_to_write ); + return 1; + } + +/* -------------------------------------------------------------------- */ +/* Otherwise, we write the new tag data at the end of the file. */ +/* -------------------------------------------------------------------- */ + if( !value_in_entry ) + { + entry_offset = TIFFSeekFile(tif,0,SEEK_END); + + if (!WriteOK(tif, buf_to_write, count*TIFFDataWidth(datatype))) { + _TIFFfree( buf_to_write ); + TIFFErrorExt(tif->tif_clientdata, module, + "Error writing directory link"); + return (0); + } + + _TIFFfree( buf_to_write ); + } + else + { + memcpy( &entry_offset, buf_to_write, count*TIFFDataWidth(datatype)); + } + +/* -------------------------------------------------------------------- */ +/* Adjust the directory entry. */ +/* -------------------------------------------------------------------- */ + entry_type = datatype; + memcpy( direntry_raw + 2, &entry_type, sizeof(uint16) ); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabShort( (uint16 *) (direntry_raw + 2) ); + + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + uint32 value; + + value = (uint32) entry_count; + memcpy( direntry_raw + 4, &value, sizeof(uint32) ); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong( (uint32 *) (direntry_raw + 4) ); + + value = (uint32) entry_offset; + memcpy( direntry_raw + 8, &value, sizeof(uint32) ); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong( (uint32 *) (direntry_raw + 8) ); + } + else + { + memcpy( direntry_raw + 4, &entry_count, sizeof(uint64) ); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8( (uint64 *) (direntry_raw + 4) ); + + memcpy( direntry_raw + 12, &entry_offset, sizeof(uint64) ); + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8( (uint64 *) (direntry_raw + 12) ); + } + +/* -------------------------------------------------------------------- */ +/* Write the directory entry out to disk. */ +/* -------------------------------------------------------------------- */ + if (!SeekOK(tif, read_offset )) { + TIFFErrorExt(tif->tif_clientdata, module, + "%s: Seek error accessing TIFF directory", + tif->tif_name); + return 0; + } + + if (!WriteOK(tif, direntry_raw,dirsize)) + { + TIFFErrorExt(tif->tif_clientdata, module, + "%s: Can not write TIFF directory entry.", + tif->tif_name); + return 0; + } + + return 1; +} /* vim: set ts=8 sts=8 sw=8 noet: */ /* * Local Variables: diff --git a/dll/3rdparty/libtiff/tif_dumpmode.c b/dll/3rdparty/libtiff/tif_dumpmode.c index da861503d80..a94cf0b34a9 100644 --- a/dll/3rdparty/libtiff/tif_dumpmode.c +++ b/dll/3rdparty/libtiff/tif_dumpmode.c @@ -1,4 +1,4 @@ -/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_dumpmode.c,v 1.5.2.2 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_dumpmode.c,v 1.14 2011-04-02 20:54:09 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -31,22 +31,29 @@ */ #include "tiffiop.h" +static int +DumpFixupTags(TIFF* tif) +{ + (void) tif; + return (1); +} + /* * Encode a hunk of pixels. */ static int -DumpModeEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) +DumpModeEncode(TIFF* tif, uint8* pp, tmsize_t cc, uint16 s) { (void) s; while (cc > 0) { - tsize_t n; + tmsize_t n; n = cc; if (tif->tif_rawcc + n > tif->tif_rawdatasize) n = tif->tif_rawdatasize - tif->tif_rawcc; assert( n > 0 ); - + /* * Avoid copy if client has setup raw * data buffer to avoid extra copy. @@ -68,15 +75,24 @@ DumpModeEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) * Decode a hunk of pixels. */ static int -DumpModeDecode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) +DumpModeDecode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s) { + static const char module[] = "DumpModeDecode"; (void) s; -/* fprintf(stderr,"DumpModeDecode: scanline %ld, expected %ld bytes, got %ld bytes\n", */ -/* (long) tif->tif_row, (long) tif->tif_rawcc, (long) cc); */ if (tif->tif_rawcc < cc) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "DumpModeDecode: Not enough data for scanline %d", - tif->tif_row); +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + TIFFErrorExt(tif->tif_clientdata, module, +"Not enough data for scanline %lu, expected a request for at most %I64d bytes, got a request for %I64d bytes", + (unsigned long) tif->tif_row, + (signed __int64) tif->tif_rawcc, + (signed __int64) cc); +#else + TIFFErrorExt(tif->tif_clientdata, module, +"Not enough data for scanline %lu, expected a request for at most %lld bytes, got a request for %lld bytes", + (unsigned long) tif->tif_row, + (signed long long) tif->tif_rawcc, + (signed long long) cc); +#endif return (0); } /* @@ -86,7 +102,7 @@ DumpModeDecode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) if (tif->tif_rawcp != buf) _TIFFmemcpy(buf, tif->tif_rawcp, cc); tif->tif_rawcp += cc; - tif->tif_rawcc -= cc; + tif->tif_rawcc -= cc; return (1); } @@ -108,12 +124,13 @@ int TIFFInitDumpMode(TIFF* tif, int scheme) { (void) scheme; + tif->tif_fixuptags = DumpFixupTags; tif->tif_decoderow = DumpModeDecode; tif->tif_decodestrip = DumpModeDecode; tif->tif_decodetile = DumpModeDecode; tif->tif_encoderow = DumpModeEncode; tif->tif_encodestrip = DumpModeEncode; - tif->tif_encodetile = DumpModeEncode; + tif->tif_encodetile = DumpModeEncode; tif->tif_seek = DumpModeSeek; return (1); } diff --git a/dll/3rdparty/libtiff/tif_error.c b/dll/3rdparty/libtiff/tif_error.c index 2377abda877..0bc8b878bd0 100644 --- a/dll/3rdparty/libtiff/tif_error.c +++ b/dll/3rdparty/libtiff/tif_error.c @@ -1,4 +1,4 @@ -/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_error.c,v 1.4.2.1 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_error.c,v 1.5 2010-03-10 18:56:48 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler diff --git a/dll/3rdparty/libtiff/tif_extension.c b/dll/3rdparty/libtiff/tif_extension.c index b67c0f00be3..10afd4162c1 100644 --- a/dll/3rdparty/libtiff/tif_extension.c +++ b/dll/3rdparty/libtiff/tif_extension.c @@ -1,4 +1,4 @@ -/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_extension.c,v 1.4.2.1 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_extension.c,v 1.7 2010-03-10 18:56:48 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -41,13 +41,13 @@ int TIFFGetTagListCount( TIFF *tif ) return td->td_customValueCount; } -ttag_t TIFFGetTagListEntry( TIFF *tif, int tag_index ) +uint32 TIFFGetTagListEntry( TIFF *tif, int tag_index ) { TIFFDirectory* td = &tif->tif_dir; if( tag_index < 0 || tag_index >= td->td_customValueCount ) - return (ttag_t) -1; + return (uint32)(-1); else return td->td_customValues[tag_index].info->field_tag; } @@ -102,7 +102,7 @@ void TIFFSetClientInfo( TIFF *tif, void *data, const char *name ) link = (TIFFClientInfoLink *) _TIFFmalloc(sizeof(TIFFClientInfoLink)); assert (link != NULL); link->next = tif->tif_clientinfo; - link->name = (char *) _TIFFmalloc(strlen(name)+1); + link->name = (char *) _TIFFmalloc((tmsize_t)(strlen(name)+1)); assert (link->name != NULL); strcpy(link->name, name); link->data = data; diff --git a/dll/3rdparty/libtiff/tif_fax3.c b/dll/3rdparty/libtiff/tif_fax3.c index 9eec4ab7b7a..2b2dccd08ee 100644 --- a/dll/3rdparty/libtiff/tif_fax3.c +++ b/dll/3rdparty/libtiff/tif_fax3.c @@ -1,4 +1,4 @@ -/* $Id: tif_fax3.c,v 1.43.2.10 2010-06-09 17:16:58 bfriesen Exp $ */ +/* $Id: tif_fax3.c,v 1.74 2012-06-21 02:01:31 fwarmerdam Exp $ */ /* * Copyright (c) 1990-1997 Sam Leffler @@ -48,22 +48,19 @@ * derived from this ``base state'' block. */ typedef struct { - int rw_mode; /* O_RDONLY for decode, else encode */ - int mode; /* operating mode */ - uint32 rowbytes; /* bytes in a decoded scanline */ - uint32 rowpixels; /* pixels in a scanline */ + int rw_mode; /* O_RDONLY for decode, else encode */ + int mode; /* operating mode */ + tmsize_t rowbytes; /* bytes in a decoded scanline */ + uint32 rowpixels; /* pixels in a scanline */ - uint16 cleanfaxdata; /* CleanFaxData tag */ - uint32 badfaxrun; /* BadFaxRun tag */ - uint32 badfaxlines; /* BadFaxLines tag */ - uint32 groupoptions; /* Group 3/4 options tag */ - uint32 recvparams; /* encoded Class 2 session params */ - char* subaddress; /* subaddress string */ - uint32 recvtime; /* time spent receiving (secs) */ - char* faxdcs; /* Table 2/T.30 encoded session params */ - TIFFVGetMethod vgetparent; /* super-class method */ - TIFFVSetMethod vsetparent; /* super-class method */ - TIFFPrintMethod printdir; /* super-class method */ + uint16 cleanfaxdata; /* CleanFaxData tag */ + uint32 badfaxrun; /* BadFaxRun tag */ + uint32 badfaxlines; /* BadFaxLines tag */ + uint32 groupoptions; /* Group 3/4 options tag */ + + TIFFVGetMethod vgetparent; /* super-class method */ + TIFFVSetMethod vsetparent; /* super-class method */ + TIFFPrintMethod printdir; /* super-class method */ } Fax3BaseState; #define Fax3State(tif) ((Fax3BaseState*) (tif)->tif_data) @@ -89,12 +86,11 @@ typedef struct { int line; } Fax3CodecState; -#define DecoderState(tif) ((Fax3CodecState*) Fax3State(tif)) -#define EncoderState(tif) ((Fax3CodecState*) Fax3State(tif)) +#define DecoderState(tif) ((Fax3CodecState*) Fax3State(tif)) +#define EncoderState(tif) ((Fax3CodecState*) Fax3State(tif)) -#define is2DEncoding(sp) \ - (sp->b.groupoptions & GROUP3OPT_2DENCODING) -#define isAligned(p,t) ((((unsigned long)(p)) & (sizeof (t)-1)) == 0) +#define is2DEncoding(sp) (sp->b.groupoptions & GROUP3OPT_2DENCODING) +#define isAligned(p,t) ((((size_t)(p)) & (sizeof (t)-1)) == 0) /* * Group 3 and Group 4 Decoding. @@ -140,15 +136,15 @@ typedef struct { sp->bit = BitsAvail; \ sp->data = BitAcc; \ sp->EOLcnt = EOLcnt; \ - tif->tif_rawcc -= (tidata_t) cp - tif->tif_rawcp; \ - tif->tif_rawcp = (tidata_t) cp; \ + tif->tif_rawcc -= (tmsize_t)((uint8*) cp - tif->tif_rawcp); \ + tif->tif_rawcp = (uint8*) cp; \ } while (0) /* * Setup state for decoding a strip. */ static int -Fax3PreDecode(TIFF* tif, tsample_t s) +Fax3PreDecode(TIFF* tif, uint16 s) { Fax3CodecState* sp = DecoderState(tif); @@ -183,10 +179,10 @@ Fax3PreDecode(TIFF* tif, tsample_t s) static void Fax3Unexpected(const char* module, TIFF* tif, uint32 line, uint32 a0) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: Bad code word at line %u of %s %u (x %u)", - tif->tif_name, line, isTiled(tif) ? "tile" : "strip", - (isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip), - a0); + TIFFErrorExt(tif->tif_clientdata, module, "Bad code word at line %u of %s %u (x %u)", + line, isTiled(tif) ? "tile" : "strip", + (isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip), + a0); } #define unexpected(table, a0) Fax3Unexpected(module, tif, sp->line, a0) @@ -194,33 +190,31 @@ static void Fax3Extension(const char* module, TIFF* tif, uint32 line, uint32 a0) { TIFFErrorExt(tif->tif_clientdata, module, - "%s: Uncompressed data (not supported) at line %u of %s %u (x %u)", - tif->tif_name, line, isTiled(tif) ? "tile" : "strip", - (isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip), - a0); + "Uncompressed data (not supported) at line %u of %s %u (x %u)", + line, isTiled(tif) ? "tile" : "strip", + (isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip), + a0); } #define extension(a0) Fax3Extension(module, tif, sp->line, a0) static void Fax3BadLength(const char* module, TIFF* tif, uint32 line, uint32 a0, uint32 lastx) { - TIFFWarningExt(tif->tif_clientdata, module, "%s: %s at line %u of %s %u (got %u, expected %u)", - tif->tif_name, - a0 < lastx ? "Premature EOL" : "Line length mismatch", - line, isTiled(tif) ? "tile" : "strip", - (isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip), - a0, lastx); + TIFFWarningExt(tif->tif_clientdata, module, "%s at line %u of %s %u (got %u, expected %u)", + a0 < lastx ? "Premature EOL" : "Line length mismatch", + line, isTiled(tif) ? "tile" : "strip", + (isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip), + a0, lastx); } #define badlength(a0,lastx) Fax3BadLength(module, tif, sp->line, a0, lastx) static void Fax3PrematureEOF(const char* module, TIFF* tif, uint32 line, uint32 a0) { - TIFFWarningExt(tif->tif_clientdata, module, "%s: Premature EOF at line %u of %s %u (x %u)", - tif->tif_name, - line, isTiled(tif) ? "tile" : "strip", - (isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip), - a0); + TIFFWarningExt(tif->tif_clientdata, module, "Premature EOF at line %u of %s %u (x %u)", + line, isTiled(tif) ? "tile" : "strip", + (isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip), + a0); } #define prematureEOF(a0) Fax3PrematureEOF(module, tif, sp->line, a0) @@ -230,14 +224,18 @@ Fax3PrematureEOF(const char* module, TIFF* tif, uint32 line, uint32 a0) * Decode the requested amount of G3 1D-encoded data. */ static int -Fax3Decode1D(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) +Fax3Decode1D(TIFF* tif, uint8* buf, tmsize_t occ, uint16 s) { DECLARE_STATE(tif, sp, "Fax3Decode1D"); - (void) s; + if (occ % sp->b.rowbytes) + { + TIFFErrorExt(tif->tif_clientdata, module, "Fractional scanlines cannot be read"); + return (-1); + } CACHE_STATE(tif, sp); thisrun = sp->curruns; - while ((long)occ > 0) { + while (occ > 0) { a0 = 0; RunLength = 0; pa = thisrun; @@ -269,14 +267,18 @@ Fax3Decode1D(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) * Decode the requested amount of G3 2D-encoded data. */ static int -Fax3Decode2D(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) +Fax3Decode2D(TIFF* tif, uint8* buf, tmsize_t occ, uint16 s) { DECLARE_STATE_2D(tif, sp, "Fax3Decode2D"); int is1D; /* current line is 1d/2d-encoded */ - (void) s; + if (occ % sp->b.rowbytes) + { + TIFFErrorExt(tif->tif_clientdata, module, "Fractional scanlines cannot be read"); + return (-1); + } CACHE_STATE(tif, sp); - while ((long)occ > 0) { + while (occ > 0) { a0 = 0; RunLength = 0; pa = thisrun = sp->curruns; @@ -324,7 +326,7 @@ Fax3Decode2D(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) * this is <8 bytes. We optimize the code here to reflect the * machine characteristics. */ -#if SIZEOF_LONG == 8 +#if SIZEOF_UNSIGNED_LONG == 8 # define FILL(n, cp) \ switch (n) { \ case 15:(cp)[14] = 0xff; case 14:(cp)[13] = 0xff; case 13: (cp)[12] = 0xff;\ @@ -452,6 +454,13 @@ _TIFFFax3fillruns(unsigned char* buf, uint32* runs, uint32* erun, uint32 lastx) #undef ZERO #undef FILL +static int +Fax3FixupTags(TIFF* tif) +{ + (void) tif; + return (1); +} + /* * Setup G3/G4-related compression/decompression state * before data is processed. This routine is called once @@ -462,14 +471,16 @@ _TIFFFax3fillruns(unsigned char* buf, uint32* runs, uint32* erun, uint32 lastx) static int Fax3SetupState(TIFF* tif) { + static const char module[] = "Fax3SetupState"; TIFFDirectory* td = &tif->tif_dir; Fax3BaseState* sp = Fax3State(tif); int needsRefLine; Fax3CodecState* dsp = (Fax3CodecState*) Fax3State(tif); - uint32 rowbytes, rowpixels, nruns; + tmsize_t rowbytes; + uint32 rowpixels, nruns; if (td->td_bitspersample != 1) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, + TIFFErrorExt(tif->tif_clientdata, module, "Bits/sample must be 1 for Group 3/4 encoding/decoding"); return (0); } @@ -483,8 +494,8 @@ Fax3SetupState(TIFF* tif) rowbytes = TIFFScanlineSize(tif); rowpixels = td->td_imagewidth; } - sp->rowbytes = (uint32) rowbytes; - sp->rowpixels = (uint32) rowpixels; + sp->rowbytes = rowbytes; + sp->rowpixels = rowpixels; /* * Allocate any additional space required for decoding/encoding. */ @@ -495,11 +506,11 @@ Fax3SetupState(TIFF* tif) /* Assure that allocation computations do not overflow. - + TIFFroundup and TIFFSafeMultiply return zero on integer overflow */ dsp->runs=(uint32*) NULL; - nruns = TIFFroundup(rowpixels,32); + nruns = TIFFroundup_32(rowpixels,32); if (needsRefLine) { nruns = TIFFSafeMultiply(uint32,nruns,2); } @@ -515,6 +526,7 @@ Fax3SetupState(TIFF* tif) "for Group 3/4 run arrays"); if (dsp->runs == NULL) return (0); + memset( dsp->runs, 0, TIFFSafeMultiply(uint32,nruns,2)*sizeof(uint32)); dsp->curruns = dsp->runs; if (needsRefLine) dsp->refruns = dsp->runs + nruns; @@ -538,9 +550,8 @@ Fax3SetupState(TIFF* tif) */ esp->refline = (unsigned char*) _TIFFmalloc(rowbytes); if (esp->refline == NULL) { - TIFFErrorExt(tif->tif_clientdata, "Fax3SetupState", - "%s: No space for Group 3/4 reference line", - tif->tif_name); + TIFFErrorExt(tif->tif_clientdata, module, + "No space for Group 3/4 reference line"); return (0); } } else /* 1d encoding */ @@ -556,14 +567,14 @@ Fax3SetupState(TIFF* tif) #define Fax3FlushBits(tif, sp) { \ if ((tif)->tif_rawcc >= (tif)->tif_rawdatasize) \ (void) TIFFFlushData1(tif); \ - *(tif)->tif_rawcp++ = (tidataval_t) (sp)->data; \ + *(tif)->tif_rawcp++ = (uint8) (sp)->data; \ (tif)->tif_rawcc++; \ (sp)->data = 0, (sp)->bit = 8; \ } #define _FlushBits(tif) { \ if ((tif)->tif_rawcc >= (tif)->tif_rawdatasize) \ (void) TIFFFlushData1(tif); \ - *(tif)->tif_rawcp++ = (tidataval_t) data; \ + *(tif)->tif_rawcp++ = (uint8) data; \ (tif)->tif_rawcc++; \ data = 0, bit = 8; \ } @@ -575,6 +586,7 @@ static const int _msbmask[9] = length -= bit; \ _FlushBits(tif); \ } \ + assert( length < 9 ); \ data |= (bits & _msbmask[length]) << (bit - length); \ bit -= length; \ if (bit == 0) \ @@ -702,7 +714,7 @@ Fax3PutEOL(TIFF* tif) * Reset encoding state at the start of a strip. */ static int -Fax3PreEncode(TIFF* tif, tsample_t s) +Fax3PreEncode(TIFF* tif, uint16 s) { Fax3CodecState* sp = EncoderState(tif); @@ -792,7 +804,7 @@ static int32 find1span(unsigned char*, int32, int32); * table. The ``base'' of the bit string is supplied * along with the start+end bit indices. */ -static int32 +inline static int32 find0span(unsigned char* bp, int32 bs, int32 be) { int32 bits = be - bs; @@ -851,7 +863,7 @@ find0span(unsigned char* bp, int32 bs, int32 be) return (span); } -static int32 +inline static int32 find1span(unsigned char* bp, int32 bs, int32 be) { int32 bits = be - bs; @@ -1023,12 +1035,17 @@ Fax3Encode2DRow(TIFF* tif, unsigned char* bp, unsigned char* rp, uint32 bits) * Encode a buffer of pixels. */ static int -Fax3Encode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +Fax3Encode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) { + static const char module[] = "Fax3Encode"; Fax3CodecState* sp = EncoderState(tif); - (void) s; - while ((long)cc > 0) { + if (cc % sp->b.rowbytes) + { + TIFFErrorExt(tif->tif_clientdata, module, "Fractional scanlines cannot be written"); + return (0); + } + while (cc > 0) { if ((sp->b.mode & FAXMODE_NOEOL) == 0) Fax3PutEOL(tif); if (is2DEncoding(sp)) { @@ -1038,7 +1055,7 @@ Fax3Encode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) sp->tag = G3_2D; } else { if (!Fax3Encode2DRow(tif, bp, sp->refline, - sp->b.rowpixels)) + sp->b.rowpixels)) return (0); sp->k--; } @@ -1100,11 +1117,6 @@ Fax3Cleanup(TIFF* tif) if (sp->refline) _TIFFfree(sp->refline); - if (Fax3State(tif)->subaddress) - _TIFFfree(Fax3State(tif)->subaddress); - if (Fax3State(tif)->faxdcs) - _TIFFfree(Fax3State(tif)->faxdcs); - _TIFFfree(tif->tif_data); tif->tif_data = NULL; @@ -1114,59 +1126,34 @@ Fax3Cleanup(TIFF* tif) #define FIELD_BADFAXLINES (FIELD_CODEC+0) #define FIELD_CLEANFAXDATA (FIELD_CODEC+1) #define FIELD_BADFAXRUN (FIELD_CODEC+2) -#define FIELD_RECVPARAMS (FIELD_CODEC+3) -#define FIELD_SUBADDRESS (FIELD_CODEC+4) -#define FIELD_RECVTIME (FIELD_CODEC+5) -#define FIELD_FAXDCS (FIELD_CODEC+6) #define FIELD_OPTIONS (FIELD_CODEC+7) -static const TIFFFieldInfo faxFieldInfo[] = { - { TIFFTAG_FAXMODE, 0, 0, TIFF_ANY, FIELD_PSEUDO, - FALSE, FALSE, "FaxMode" }, - { TIFFTAG_FAXFILLFUNC, 0, 0, TIFF_ANY, FIELD_PSEUDO, - FALSE, FALSE, "FaxFillFunc" }, - { TIFFTAG_BADFAXLINES, 1, 1, TIFF_LONG, FIELD_BADFAXLINES, - TRUE, FALSE, "BadFaxLines" }, - { TIFFTAG_BADFAXLINES, 1, 1, TIFF_SHORT, FIELD_BADFAXLINES, - TRUE, FALSE, "BadFaxLines" }, - { TIFFTAG_CLEANFAXDATA, 1, 1, TIFF_SHORT, FIELD_CLEANFAXDATA, - TRUE, FALSE, "CleanFaxData" }, - { TIFFTAG_CONSECUTIVEBADFAXLINES,1,1, TIFF_LONG, FIELD_BADFAXRUN, - TRUE, FALSE, "ConsecutiveBadFaxLines" }, - { TIFFTAG_CONSECUTIVEBADFAXLINES,1,1, TIFF_SHORT, FIELD_BADFAXRUN, - TRUE, FALSE, "ConsecutiveBadFaxLines" }, - { TIFFTAG_FAXRECVPARAMS, 1, 1, TIFF_LONG, FIELD_RECVPARAMS, - TRUE, FALSE, "FaxRecvParams" }, - { TIFFTAG_FAXSUBADDRESS, -1,-1, TIFF_ASCII, FIELD_SUBADDRESS, - TRUE, FALSE, "FaxSubAddress" }, - { TIFFTAG_FAXRECVTIME, 1, 1, TIFF_LONG, FIELD_RECVTIME, - TRUE, FALSE, "FaxRecvTime" }, - { TIFFTAG_FAXDCS, -1,-1, TIFF_ASCII, FIELD_FAXDCS, - TRUE, FALSE, "FaxDcs" }, +static const TIFFField faxFields[] = { + { TIFFTAG_FAXMODE, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, FALSE, FALSE, "FaxMode", NULL }, + { TIFFTAG_FAXFILLFUNC, 0, 0, TIFF_ANY, 0, TIFF_SETGET_OTHER, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, FALSE, FALSE, "FaxFillFunc", NULL }, + { TIFFTAG_BADFAXLINES, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UINT32, FIELD_BADFAXLINES, TRUE, FALSE, "BadFaxLines", NULL }, + { TIFFTAG_CLEANFAXDATA, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UINT16, FIELD_CLEANFAXDATA, TRUE, FALSE, "CleanFaxData", NULL }, + { TIFFTAG_CONSECUTIVEBADFAXLINES, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UINT32, FIELD_BADFAXRUN, TRUE, FALSE, "ConsecutiveBadFaxLines", NULL }}; +static const TIFFField fax3Fields[] = { + { TIFFTAG_GROUP3OPTIONS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UINT32, FIELD_OPTIONS, FALSE, FALSE, "Group3Options", NULL }, }; -static const TIFFFieldInfo fax3FieldInfo[] = { - { TIFFTAG_GROUP3OPTIONS, 1, 1, TIFF_LONG, FIELD_OPTIONS, - FALSE, FALSE, "Group3Options" }, +static const TIFFField fax4Fields[] = { + { TIFFTAG_GROUP4OPTIONS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, TIFF_SETGET_UINT32, FIELD_OPTIONS, FALSE, FALSE, "Group4Options", NULL }, }; -static const TIFFFieldInfo fax4FieldInfo[] = { - { TIFFTAG_GROUP4OPTIONS, 1, 1, TIFF_LONG, FIELD_OPTIONS, - FALSE, FALSE, "Group4Options" }, -}; -#define N(a) (sizeof (a) / sizeof (a[0])) static int -Fax3VSetField(TIFF* tif, ttag_t tag, va_list ap) +Fax3VSetField(TIFF* tif, uint32 tag, va_list ap) { Fax3BaseState* sp = Fax3State(tif); - const TIFFFieldInfo* fip; + const TIFFField* fip; assert(sp != 0); assert(sp->vsetparent != 0); switch (tag) { case TIFFTAG_FAXMODE: - sp->mode = va_arg(ap, int); + sp->mode = (int) va_arg(ap, int); return 1; /* NB: pseudo tag */ case TIFFTAG_FAXFILLFUNC: DecoderState(tif)->fill = va_arg(ap, TIFFFaxFillFunc); @@ -1174,39 +1161,27 @@ Fax3VSetField(TIFF* tif, ttag_t tag, va_list ap) case TIFFTAG_GROUP3OPTIONS: /* XXX: avoid reading options if compression mismatches. */ if (tif->tif_dir.td_compression == COMPRESSION_CCITTFAX3) - sp->groupoptions = va_arg(ap, uint32); + sp->groupoptions = (uint32) va_arg(ap, uint32); break; case TIFFTAG_GROUP4OPTIONS: /* XXX: avoid reading options if compression mismatches. */ if (tif->tif_dir.td_compression == COMPRESSION_CCITTFAX4) - sp->groupoptions = va_arg(ap, uint32); + sp->groupoptions = (uint32) va_arg(ap, uint32); break; case TIFFTAG_BADFAXLINES: - sp->badfaxlines = va_arg(ap, uint32); + sp->badfaxlines = (uint32) va_arg(ap, uint32); break; case TIFFTAG_CLEANFAXDATA: - sp->cleanfaxdata = (uint16) va_arg(ap, int); + sp->cleanfaxdata = (uint16) va_arg(ap, uint16_vap); break; case TIFFTAG_CONSECUTIVEBADFAXLINES: - sp->badfaxrun = va_arg(ap, uint32); - break; - case TIFFTAG_FAXRECVPARAMS: - sp->recvparams = va_arg(ap, uint32); - break; - case TIFFTAG_FAXSUBADDRESS: - _TIFFsetString(&sp->subaddress, va_arg(ap, char*)); - break; - case TIFFTAG_FAXRECVTIME: - sp->recvtime = va_arg(ap, uint32); - break; - case TIFFTAG_FAXDCS: - _TIFFsetString(&sp->faxdcs, va_arg(ap, char*)); + sp->badfaxrun = (uint32) va_arg(ap, uint32); break; default: return (*sp->vsetparent)(tif, tag, ap); } - if ((fip = _TIFFFieldWithTag(tif, tag))) + if ((fip = TIFFFieldWithTag(tif, tag))) TIFFSetFieldBit(tif, fip->field_bit); else return 0; @@ -1216,7 +1191,7 @@ Fax3VSetField(TIFF* tif, ttag_t tag, va_list ap) } static int -Fax3VGetField(TIFF* tif, ttag_t tag, va_list ap) +Fax3VGetField(TIFF* tif, uint32 tag, va_list ap) { Fax3BaseState* sp = Fax3State(tif); @@ -1242,18 +1217,6 @@ Fax3VGetField(TIFF* tif, ttag_t tag, va_list ap) case TIFFTAG_CONSECUTIVEBADFAXLINES: *va_arg(ap, uint32*) = sp->badfaxrun; break; - case TIFFTAG_FAXRECVPARAMS: - *va_arg(ap, uint32*) = sp->recvparams; - break; - case TIFFTAG_FAXSUBADDRESS: - *va_arg(ap, char**) = sp->subaddress; - break; - case TIFFTAG_FAXRECVTIME: - *va_arg(ap, uint32*) = sp->recvtime; - break; - case TIFFTAG_FAXDCS: - *va_arg(ap, char**) = sp->faxdcs; - break; default: return (*sp->vgetparent)(tif, tag, ap); } @@ -1310,27 +1273,20 @@ Fax3PrintDir(TIFF* tif, FILE* fd, long flags) if (TIFFFieldSet(tif,FIELD_BADFAXRUN)) fprintf(fd, " Consecutive Bad Fax Lines: %lu\n", (unsigned long) sp->badfaxrun); - if (TIFFFieldSet(tif,FIELD_RECVPARAMS)) - fprintf(fd, " Fax Receive Parameters: %08lx\n", - (unsigned long) sp->recvparams); - if (TIFFFieldSet(tif,FIELD_SUBADDRESS)) - fprintf(fd, " Fax SubAddress: %s\n", sp->subaddress); - if (TIFFFieldSet(tif,FIELD_RECVTIME)) - fprintf(fd, " Fax Receive Time: %lu secs\n", - (unsigned long) sp->recvtime); - if (TIFFFieldSet(tif,FIELD_FAXDCS)) - fprintf(fd, " Fax DCS: %s\n", sp->faxdcs); + if (sp->printdir) + (*sp->printdir)(tif, fd, flags); } static int InitCCITTFax3(TIFF* tif) { + static const char module[] = "InitCCITTFax3"; Fax3BaseState* sp; /* * Merge codec-specific tag information. */ - if (!_TIFFMergeFieldInfo(tif, faxFieldInfo, N(faxFieldInfo))) { + if (!_TIFFMergeFields(tif, faxFields, TIFFArrayCount(faxFields))) { TIFFErrorExt(tif->tif_clientdata, "InitCCITTFax3", "Merging common CCITT Fax codec-specific tags failed"); return 0; @@ -1339,12 +1295,12 @@ InitCCITTFax3(TIFF* tif) /* * Allocate state block so tag methods have storage to record values. */ - tif->tif_data = (tidata_t) + tif->tif_data = (uint8*) _TIFFmalloc(sizeof (Fax3CodecState)); if (tif->tif_data == NULL) { - TIFFErrorExt(tif->tif_clientdata, "TIFFInitCCITTFax3", - "%s: No space for state block", tif->tif_name); + TIFFErrorExt(tif->tif_clientdata, module, + "No space for state block"); return (0); } @@ -1361,9 +1317,6 @@ InitCCITTFax3(TIFF* tif) sp->printdir = tif->tif_tagmethods.printdir; tif->tif_tagmethods.printdir = Fax3PrintDir; /* hook for codec tags */ sp->groupoptions = 0; - sp->recvparams = 0; - sp->subaddress = NULL; - sp->faxdcs = NULL; if (sp->rw_mode == O_RDONLY) /* FIXME: improve for in place update */ tif->tif_flags |= TIFF_NOBITREV; /* decoder does bit reversal */ @@ -1374,6 +1327,7 @@ InitCCITTFax3(TIFF* tif) /* * Install codec methods. */ + tif->tif_fixuptags = Fax3FixupTags; tif->tif_setupdecode = Fax3SetupState; tif->tif_predecode = Fax3PreDecode; tif->tif_decoderow = Fax3Decode1D; @@ -1399,7 +1353,8 @@ TIFFInitCCITTFax3(TIFF* tif, int scheme) /* * Merge codec-specific tag information. */ - if (!_TIFFMergeFieldInfo(tif, fax3FieldInfo, N(fax3FieldInfo))) { + if (!_TIFFMergeFields(tif, fax3Fields, + TIFFArrayCount(fax3Fields))) { TIFFErrorExt(tif->tif_clientdata, "TIFFInitCCITTFax3", "Merging CCITT Fax 3 codec-specific tags failed"); return 0; @@ -1418,18 +1373,22 @@ TIFFInitCCITTFax3(TIFF* tif, int scheme) * Compression Scheme Support. */ -#define SWAP(t,a,b) { t x; x = (a); (a) = (b); (b) = x; } +#define SWAP(t,a,b) { t x; x = (a); (a) = (b); (b) = x; } /* * Decode the requested amount of G4-encoded data. */ static int -Fax4Decode(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) +Fax4Decode(TIFF* tif, uint8* buf, tmsize_t occ, uint16 s) { DECLARE_STATE_2D(tif, sp, "Fax4Decode"); - (void) s; + if (occ % sp->b.rowbytes) + { + TIFFErrorExt(tif->tif_clientdata, module, "Fractional scanlines cannot be read"); + return (-1); + } CACHE_STATE(tif, sp); - while ((long)occ > 0) { + while (occ > 0) { a0 = 0; RunLength = 0; pa = thisrun = sp->curruns; @@ -1471,12 +1430,17 @@ Fax4Decode(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) * Encode the requested amount of data. */ static int -Fax4Encode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +Fax4Encode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) { + static const char module[] = "Fax4Encode"; Fax3CodecState *sp = EncoderState(tif); - (void) s; - while ((long)cc > 0) { + if (cc % sp->b.rowbytes) + { + TIFFErrorExt(tif->tif_clientdata, module, "Fractional scanlines cannot be written"); + return (0); + } + while (cc > 0) { if (!Fax3Encode2DRow(tif, bp, sp->refline, sp->b.rowpixels)) return (0); _TIFFmemcpy(sp->refline, bp, sp->b.rowbytes); @@ -1507,7 +1471,8 @@ TIFFInitCCITTFax4(TIFF* tif, int scheme) /* * Merge codec-specific tag information. */ - if (!_TIFFMergeFieldInfo(tif, fax4FieldInfo, N(fax4FieldInfo))) { + if (!_TIFFMergeFields(tif, fax4Fields, + TIFFArrayCount(fax4Fields))) { TIFFErrorExt(tif->tif_clientdata, "TIFFInitCCITTFax4", "Merging CCITT Fax 4 codec-specific tags failed"); return 0; @@ -1537,15 +1502,19 @@ TIFFInitCCITTFax4(TIFF* tif, int scheme) * Decode the requested amount of RLE-encoded data. */ static int -Fax3DecodeRLE(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) +Fax3DecodeRLE(TIFF* tif, uint8* buf, tmsize_t occ, uint16 s) { DECLARE_STATE(tif, sp, "Fax3DecodeRLE"); int mode = sp->b.mode; - (void) s; + if (occ % sp->b.rowbytes) + { + TIFFErrorExt(tif->tif_clientdata, module, "Fractional scanlines cannot be read"); + return (-1); + } CACHE_STATE(tif, sp); thisrun = sp->curruns; - while ((long)occ > 0) { + while (occ > 0) { a0 = 0; RunLength = 0; pa = thisrun; @@ -1605,7 +1574,7 @@ TIFFInitCCITTRLEW(TIFF* tif, int scheme) if (InitCCITTFax3(tif)) { /* reuse G3 support */ tif->tif_decoderow = Fax3DecodeRLE; tif->tif_decodestrip = Fax3DecodeRLE; - tif->tif_decodetile = Fax3DecodeRLE; + tif->tif_decodetile = Fax3DecodeRLE; /* * Suppress RTC+EOLs when encoding and word-align data. */ diff --git a/dll/3rdparty/libtiff/tif_flush.c b/dll/3rdparty/libtiff/tif_flush.c index 7ecc4d8345d..fd14e4cdae1 100644 --- a/dll/3rdparty/libtiff/tif_flush.c +++ b/dll/3rdparty/libtiff/tif_flush.c @@ -1,4 +1,4 @@ -/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_flush.c,v 1.3.2.1 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Id: tif_flush.c,v 1.9 2010-03-31 06:40:10 fwarmerdam Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -32,15 +32,58 @@ int TIFFFlush(TIFF* tif) { + if( tif->tif_mode == O_RDONLY ) + return 1; - if (tif->tif_mode != O_RDONLY) { - if (!TIFFFlushData(tif)) - return (0); - if ((tif->tif_flags & TIFF_DIRTYDIRECT) && - !TIFFWriteDirectory(tif)) - return (0); - } - return (1); + if (!TIFFFlushData(tif)) + return (0); + + /* In update (r+) mode we try to detect the case where + only the strip/tile map has been altered, and we try to + rewrite only that portion of the directory without + making any other changes */ + + if( (tif->tif_flags & TIFF_DIRTYSTRIP) + && !(tif->tif_flags & TIFF_DIRTYDIRECT) + && tif->tif_mode == O_RDWR ) + { + uint64 *offsets=NULL, *sizes=NULL; + + if( TIFFIsTiled(tif) ) + { + if( TIFFGetField( tif, TIFFTAG_TILEOFFSETS, &offsets ) + && TIFFGetField( tif, TIFFTAG_TILEBYTECOUNTS, &sizes ) + && _TIFFRewriteField( tif, TIFFTAG_TILEOFFSETS, TIFF_LONG8, + tif->tif_dir.td_nstrips, offsets ) + && _TIFFRewriteField( tif, TIFFTAG_TILEBYTECOUNTS, TIFF_LONG8, + tif->tif_dir.td_nstrips, sizes ) ) + { + tif->tif_flags &= ~TIFF_DIRTYSTRIP; + tif->tif_flags &= ~TIFF_BEENWRITING; + return 1; + } + } + else + { + if( TIFFGetField( tif, TIFFTAG_STRIPOFFSETS, &offsets ) + && TIFFGetField( tif, TIFFTAG_STRIPBYTECOUNTS, &sizes ) + && _TIFFRewriteField( tif, TIFFTAG_STRIPOFFSETS, TIFF_LONG8, + tif->tif_dir.td_nstrips, offsets ) + && _TIFFRewriteField( tif, TIFFTAG_STRIPBYTECOUNTS, TIFF_LONG8, + tif->tif_dir.td_nstrips, sizes ) ) + { + tif->tif_flags &= ~TIFF_DIRTYSTRIP; + tif->tif_flags &= ~TIFF_BEENWRITING; + return 1; + } + } + } + + if ((tif->tif_flags & (TIFF_DIRTYDIRECT|TIFF_DIRTYSTRIP)) + && !TIFFRewriteDirectory(tif)) + return (0); + + return (1); } /* @@ -56,7 +99,7 @@ int TIFFFlushData(TIFF* tif) { if ((tif->tif_flags & TIFF_BEENWRITING) == 0) - return (0); + return (1); if (tif->tif_flags & TIFF_POSTENCODE) { tif->tif_flags &= ~TIFF_POSTENCODE; if (!(*tif->tif_postencode)(tif)) @@ -65,6 +108,7 @@ TIFFFlushData(TIFF* tif) return (TIFFFlushData1(tif)); } +/* vim: set ts=8 sts=8 sw=8 noet: */ /* * Local Variables: * mode: c diff --git a/dll/3rdparty/libtiff/tif_getimage.c b/dll/3rdparty/libtiff/tif_getimage.c index 38455fbc074..a85273cc3ae 100644 --- a/dll/3rdparty/libtiff/tif_getimage.c +++ b/dll/3rdparty/libtiff/tif_getimage.c @@ -1,4 +1,4 @@ -/* $Id: tif_getimage.c,v 1.63.2.4 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Id: tif_getimage.c,v 1.82 2012-06-06 00:17:49 fwarmerdam Exp $ */ /* * Copyright (c) 1991-1997 Sam Leffler @@ -38,6 +38,10 @@ static int gtStripContig(TIFFRGBAImage*, uint32*, uint32, uint32); static int gtStripSeparate(TIFFRGBAImage*, uint32*, uint32, uint32); static int PickContigCase(TIFFRGBAImage*); static int PickSeparateCase(TIFFRGBAImage*); + +static int BuildMapUaToAa(TIFFRGBAImage* img); +static int BuildMapBitdepth16To8(TIFFRGBAImage* img); + static const char photoTag[] = "PhotometricInterpretation"; /* @@ -50,7 +54,7 @@ static const char photoTag[] = "PhotometricInterpretation"; * Color conversion constants. We will define display types here. */ -TIFFDisplay display_sRGB = { +static const TIFFDisplay display_sRGB = { { /* XYZ -> luminance matrix */ { 3.2410F, -1.5374F, -0.4986F }, { -0.9692F, 1.8760F, 0.0416F }, @@ -202,10 +206,16 @@ TIFFRGBAImageEnd(TIFFRGBAImage* img) _TIFFfree(img->ycbcr), img->ycbcr = NULL; if (img->cielab) _TIFFfree(img->cielab), img->cielab = NULL; + if (img->UaToAa) + _TIFFfree(img->UaToAa), img->UaToAa = NULL; + if (img->Bitdepth16To8) + _TIFFfree(img->Bitdepth16To8), img->Bitdepth16To8 = NULL; + if( img->redcmap ) { _TIFFfree( img->redcmap ); _TIFFfree( img->greencmap ); _TIFFfree( img->bluecmap ); + img->redcmap = img->greencmap = img->bluecmap = NULL; } } @@ -252,7 +262,7 @@ TIFFRGBAImageBegin(TIFFRGBAImage* img, TIFF* tif, int stop, char emsg[1024]) default: sprintf(emsg, "Sorry, can not handle images with %d-bit samples", img->bitspersample); - return (0); + goto fail_return; } img->alpha = 0; TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &img->samplesperpixel); @@ -301,7 +311,7 @@ TIFFRGBAImageBegin(TIFFRGBAImage* img, TIFF* tif, int stop, char emsg[1024]) break; default: sprintf(emsg, "Missing needed %s tag", photoTag); - return (0); + goto fail_return; } } switch (img->photometric) { @@ -309,7 +319,7 @@ TIFFRGBAImageBegin(TIFFRGBAImage* img, TIFF* tif, int stop, char emsg[1024]) if (!TIFFGetField(tif, TIFFTAG_COLORMAP, &red_orig, &green_orig, &blue_orig)) { sprintf(emsg, "Missing required \"Colormap\" tag"); - return (0); + goto fail_return; } /* copy the colormaps so we can modify them */ @@ -319,7 +329,7 @@ TIFFRGBAImageBegin(TIFFRGBAImage* img, TIFF* tif, int stop, char emsg[1024]) img->bluecmap = (uint16 *) _TIFFmalloc(sizeof(uint16)*n_color); if( !img->redcmap || !img->greencmap || !img->bluecmap ) { sprintf(emsg, "Out of memory for colormap copy"); - return (0); + goto fail_return; } _TIFFmemcpy( img->redcmap, red_orig, n_color * 2 ); @@ -338,7 +348,7 @@ TIFFRGBAImageBegin(TIFFRGBAImage* img, TIFF* tif, int stop, char emsg[1024]) photoTag, img->photometric, "Samples/pixel", img->samplesperpixel, img->bitspersample); - return (0); + goto fail_return; } break; case PHOTOMETRIC_YCBCR: @@ -371,7 +381,7 @@ TIFFRGBAImageBegin(TIFFRGBAImage* img, TIFF* tif, int stop, char emsg[1024]) if (colorchannels < 3) { sprintf(emsg, "Sorry, can not handle RGB image with %s=%d", "Color channels", colorchannels); - return (0); + goto fail_return; } break; case PHOTOMETRIC_SEPARATED: @@ -381,12 +391,12 @@ TIFFRGBAImageBegin(TIFFRGBAImage* img, TIFF* tif, int stop, char emsg[1024]) if (inkset != INKSET_CMYK) { sprintf(emsg, "Sorry, can not handle separated image with %s=%d", "InkSet", inkset); - return (0); + goto fail_return; } if (img->samplesperpixel < 4) { sprintf(emsg, "Sorry, can not handle separated image with %s=%d", "Samples/pixel", img->samplesperpixel); - return (0); + goto fail_return; } } break; @@ -394,7 +404,7 @@ TIFFRGBAImageBegin(TIFFRGBAImage* img, TIFF* tif, int stop, char emsg[1024]) if (compress != COMPRESSION_SGILOG) { sprintf(emsg, "Sorry, LogL data must have %s=%d", "Compression", COMPRESSION_SGILOG); - return (0); + goto fail_return; } TIFFSetField(tif, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_8BIT); img->photometric = PHOTOMETRIC_MINISBLACK; /* little white lie */ @@ -404,7 +414,7 @@ TIFFRGBAImageBegin(TIFFRGBAImage* img, TIFF* tif, int stop, char emsg[1024]) if (compress != COMPRESSION_SGILOG && compress != COMPRESSION_SGILOG24) { sprintf(emsg, "Sorry, LogLuv data must have %s=%d or %d", "Compression", COMPRESSION_SGILOG, COMPRESSION_SGILOG24); - return (0); + goto fail_return; } if (planarconfig != PLANARCONFIG_CONTIG) { sprintf(emsg, "Sorry, can not handle LogLuv images with %s=%d", @@ -420,30 +430,39 @@ TIFFRGBAImageBegin(TIFFRGBAImage* img, TIFF* tif, int stop, char emsg[1024]) default: sprintf(emsg, "Sorry, can not handle image with %s=%d", photoTag, img->photometric); - return (0); + goto fail_return; } img->Map = NULL; img->BWmap = NULL; img->PALmap = NULL; img->ycbcr = NULL; img->cielab = NULL; + img->UaToAa = NULL; + img->Bitdepth16To8 = NULL; TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &img->width); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &img->height); TIFFGetFieldDefaulted(tif, TIFFTAG_ORIENTATION, &img->orientation); img->isContig = - !(planarconfig == PLANARCONFIG_SEPARATE && colorchannels > 1); + !(planarconfig == PLANARCONFIG_SEPARATE && img->samplesperpixel > 1); if (img->isContig) { if (!PickContigCase(img)) { sprintf(emsg, "Sorry, can not handle image"); - return 0; + goto fail_return; } } else { if (!PickSeparateCase(img)) { sprintf(emsg, "Sorry, can not handle image"); - return 0; + goto fail_return; } } return 1; + + fail_return: + _TIFFfree( img->redcmap ); + _TIFFfree( img->greencmap ); + _TIFFfree( img->bluecmap ); + img->redcmap = img->greencmap = img->bluecmap = NULL; + return 0; } int @@ -572,7 +591,7 @@ gtTileContig(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) TIFF* tif = img->tif; tileContigRoutine put = img->put.contig; uint32 col, row, y, rowstoread; - uint32 pos; + tmsize_t pos; uint32 tw, th; unsigned char* buf; int32 fromskew, toskew; @@ -581,7 +600,7 @@ gtTileContig(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) buf = (unsigned char*) _TIFFmalloc(TIFFTileSize(tif)); if (buf == 0) { - TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "No space for tile buffer"); + TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "%s", "No space for tile buffer"); return (0); } _TIFFmemset(buf, 0, TIFFTileSize(tif)); @@ -604,14 +623,14 @@ gtTileContig(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) nrow = (row + rowstoread > h ? h - row : rowstoread); for (col = 0; col < w; col += tw) { - if (TIFFReadTile(tif, buf, col+img->col_offset, - row+img->row_offset, 0, 0) < 0 && img->stoponerr) + if (TIFFReadTile(tif, buf, col+img->col_offset, + row+img->row_offset, 0, 0)==(tmsize_t)(-1) && img->stoponerr) { ret = 0; break; } - pos = ((row+img->row_offset) % th) * TIFFTileRowSize(tif); + pos = ((row+img->row_offset) % th) * TIFFTileRowSize(tif); if (col + tw > w) { @@ -665,26 +684,33 @@ gtTileSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) TIFF* tif = img->tif; tileSeparateRoutine put = img->put.separate; uint32 col, row, y, rowstoread; - uint32 pos; + tmsize_t pos; uint32 tw, th; unsigned char* buf; unsigned char* p0; unsigned char* p1; unsigned char* p2; unsigned char* pa; - tsize_t tilesize; + tmsize_t tilesize; + tmsize_t bufsize; int32 fromskew, toskew; int alpha = img->alpha; uint32 nrow; int ret = 1, flip; + int colorchannels; - tilesize = TIFFTileSize(tif); - buf = (unsigned char*) _TIFFmalloc((alpha?4:3)*tilesize); - if (buf == 0) { - TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "No space for tile buffer"); + tilesize = TIFFTileSize(tif); + bufsize = TIFFSafeMultiply(tmsize_t,alpha?4:3,tilesize); + if (bufsize == 0) { + TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "Integer overflow in %s", "gtTileSeparate"); return (0); } - _TIFFmemset(buf, 0, (alpha?4:3)*tilesize); + buf = (unsigned char*) _TIFFmalloc(bufsize); + if (buf == 0) { + TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "%s", "No space for tile buffer"); + return (0); + } + _TIFFmemset(buf, 0, bufsize); p0 = buf; p1 = p0 + tilesize; p2 = p1 + tilesize; @@ -702,41 +728,58 @@ gtTileSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) toskew = -(int32)(tw - w); } + switch( img->photometric ) + { + case PHOTOMETRIC_MINISWHITE: + case PHOTOMETRIC_MINISBLACK: + case PHOTOMETRIC_PALETTE: + colorchannels = 1; + p2 = p1 = p0; + break; + + default: + colorchannels = 3; + break; + } + for (row = 0; row < h; row += nrow) { rowstoread = th - (row + img->row_offset) % th; nrow = (row + rowstoread > h ? h - row : rowstoread); for (col = 0; col < w; col += tw) { - if (TIFFReadTile(tif, p0, col+img->col_offset, - row+img->row_offset,0,0) < 0 && img->stoponerr) + if (TIFFReadTile(tif, p0, col+img->col_offset, + row+img->row_offset,0,0)==(tmsize_t)(-1) && img->stoponerr) { ret = 0; break; } - if (TIFFReadTile(tif, p1, col+img->col_offset, - row+img->row_offset,0,1) < 0 && img->stoponerr) + if (colorchannels > 1 + && TIFFReadTile(tif, p1, col+img->col_offset, + row+img->row_offset,0,1) == (tmsize_t)(-1) + && img->stoponerr) { ret = 0; break; } - if (TIFFReadTile(tif, p2, col+img->col_offset, - row+img->row_offset,0,2) < 0 && img->stoponerr) + if (colorchannels > 1 + && TIFFReadTile(tif, p2, col+img->col_offset, + row+img->row_offset,0,2) == (tmsize_t)(-1) + && img->stoponerr) { ret = 0; break; } - if (alpha) - { - if (TIFFReadTile(tif,pa,col+img->col_offset, - row+img->row_offset,0,3) < 0 && img->stoponerr) - { - ret = 0; - break; - } + if (alpha + && TIFFReadTile(tif,pa,col+img->col_offset, + row+img->row_offset,0,colorchannels) == (tmsize_t)(-1) + && img->stoponerr) + { + ret = 0; + break; } - pos = ((row+img->row_offset) % th) * TIFFTileRowSize(tif); + pos = ((row+img->row_offset) % th) * TIFFTileRowSize(tif); if (col + tw > w) { @@ -790,12 +833,12 @@ gtStripContig(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) TIFF* tif = img->tif; tileContigRoutine put = img->put.contig; uint32 row, y, nrow, nrowsub, rowstoread; - uint32 pos; + tmsize_t pos; unsigned char* buf; uint32 rowsperstrip; uint16 subsamplinghor,subsamplingver; uint32 imagewidth = img->width; - tsize_t scanline; + tmsize_t scanline; int32 fromskew, toskew; int ret = 1, flip; @@ -817,7 +860,7 @@ gtStripContig(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) TIFFGetFieldDefaulted(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); TIFFGetFieldDefaulted(tif, TIFFTAG_YCBCRSUBSAMPLING, &subsamplinghor, &subsamplingver); - scanline = TIFFNewScanlineSize(tif); + scanline = TIFFScanlineSize(tif); fromskew = (w < imagewidth ? imagewidth - w : 0); for (row = 0; row < h; row += nrow) { @@ -829,7 +872,7 @@ gtStripContig(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif,row+img->row_offset, 0), buf, - ((row + img->row_offset)%rowsperstrip + nrowsub) * scanline) < 0 + ((row + img->row_offset)%rowsperstrip + nrowsub) * scanline)==(tmsize_t)(-1) && img->stoponerr) { ret = 0; @@ -875,22 +918,28 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) unsigned char *buf; unsigned char *p0, *p1, *p2, *pa; uint32 row, y, nrow, rowstoread; - uint32 pos; - tsize_t scanline; + tmsize_t pos; + tmsize_t scanline; uint32 rowsperstrip, offset_row; uint32 imagewidth = img->width; - tsize_t stripsize; + tmsize_t stripsize; + tmsize_t bufsize; int32 fromskew, toskew; int alpha = img->alpha; - int ret = 1, flip; + int ret = 1, flip, colorchannels; - stripsize = TIFFStripSize(tif); - p0 = buf = (unsigned char *)_TIFFmalloc((alpha?4:3)*stripsize); + stripsize = TIFFStripSize(tif); + bufsize = TIFFSafeMultiply(tmsize_t,alpha?4:3,stripsize); + if (bufsize == 0) { + TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "Integer overflow in %s", "gtStripSeparate"); + return (0); + } + p0 = buf = (unsigned char *)_TIFFmalloc(bufsize); if (buf == 0) { TIFFErrorExt(tif->tif_clientdata, TIFFFileName(tif), "No space for tile buffer"); return (0); } - _TIFFmemset(buf, 0, (alpha?4:3)*stripsize); + _TIFFmemset(buf, 0, bufsize); p1 = p0 + stripsize; p2 = p1 + stripsize; pa = (alpha?(p2+stripsize):NULL); @@ -905,8 +954,22 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) toskew = -(int32)(w - w); } + switch( img->photometric ) + { + case PHOTOMETRIC_MINISWHITE: + case PHOTOMETRIC_MINISBLACK: + case PHOTOMETRIC_PALETTE: + colorchannels = 1; + p2 = p1 = p0; + break; + + default: + colorchannels = 3; + break; + } + TIFFGetFieldDefaulted(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); - scanline = TIFFScanlineSize(tif); + scanline = TIFFScanlineSize(tif); fromskew = (w < imagewidth ? imagewidth - w : 0); for (row = 0; row < h; row += nrow) { @@ -914,21 +977,23 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) nrow = (row + rowstoread > h ? h - row : rowstoread); offset_row = row + img->row_offset; if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 0), - p0, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) < 0 + p0, ((row + img->row_offset)%rowsperstrip + nrow) * scanline)==(tmsize_t)(-1) && img->stoponerr) { ret = 0; break; } - if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 1), - p1, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) < 0 + if (colorchannels > 1 + && TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 1), + p1, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) == (tmsize_t)(-1) && img->stoponerr) { ret = 0; break; } - if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 2), - p2, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) < 0 + if (colorchannels > 1 + && TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 2), + p2, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) == (tmsize_t)(-1) && img->stoponerr) { ret = 0; @@ -936,8 +1001,8 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) } if (alpha) { - if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, 3), - pa, ((row + img->row_offset)%rowsperstrip + nrow) * scanline) < 0 + if (TIFFReadEncodedStrip(tif, TIFFComputeStrip(tif, offset_row, colorchannels), + pa, ((row + img->row_offset)%rowsperstrip + nrow) * scanline)==(tmsize_t)(-1) && img->stoponerr) { ret = 0; @@ -1036,6 +1101,7 @@ gtStripSeparate(TIFFRGBAImage* img, uint32* raster, uint32 w, uint32 h) #define PACK4(r,g,b,a) \ ((uint32)(r)|((uint32)(g)<<8)|((uint32)(b)<<16)|((uint32)(a)<<24)) #define W2B(v) (((v)>>8)&0xff) +/* TODO: PACKW should have be made redundant in favor of Bitdepth16To8 LUT */ #define PACKW(r,g,b) \ ((uint32)W2B(r)|((uint32)W2B(g)<<8)|((uint32)W2B(b)<<16)|A1) #define PACKW4(r,g,b,a) \ @@ -1142,6 +1208,26 @@ DECLAREContigPutFunc(putgreytile) } } +/* + * 8-bit greyscale with associated alpha => colormap/RGBA + */ +DECLAREContigPutFunc(putagreytile) +{ + int samplesperpixel = img->samplesperpixel; + uint32** BWmap = img->BWmap; + + (void) y; + while (h-- > 0) { + for (x = w; x-- > 0;) + { + *cp++ = BWmap[*pp][0] & (*(pp+1) << 24 | ~A1); + pp += samplesperpixel; + } + cp += toskew; + pp += fromskew; + } +} + /* * 16-bit greyscale => colormap/RGB */ @@ -1266,11 +1352,13 @@ DECLAREContigPutFunc(putRGBUAcontig8bittile) fromskew *= samplesperpixel; while (h-- > 0) { uint32 r, g, b, a; + uint8* m; for (x = w; x-- > 0;) { a = pp[3]; - r = (a*pp[0] + 127) / 255; - g = (a*pp[1] + 127) / 255; - b = (a*pp[2] + 127) / 255; + m = img->UaToAa+(a<<8); + r = m[pp[0]]; + g = m[pp[1]]; + b = m[pp[2]]; *cp++ = PACK4(r,g,b,a); pp += samplesperpixel; } @@ -1290,8 +1378,10 @@ DECLAREContigPutFunc(putRGBcontig16bittile) fromskew *= samplesperpixel; while (h-- > 0) { for (x = w; x-- > 0;) { - *cp++ = PACKW(wp[0],wp[1],wp[2]); - wp += samplesperpixel; + *cp++ = PACK(img->Bitdepth16To8[wp[0]], + img->Bitdepth16To8[wp[1]], + img->Bitdepth16To8[wp[2]]); + wp += samplesperpixel; } cp += toskew; wp += fromskew; @@ -1310,8 +1400,11 @@ DECLAREContigPutFunc(putRGBAAcontig16bittile) fromskew *= samplesperpixel; while (h-- > 0) { for (x = w; x-- > 0;) { - *cp++ = PACKW4(wp[0],wp[1],wp[2],wp[3]); - wp += samplesperpixel; + *cp++ = PACK4(img->Bitdepth16To8[wp[0]], + img->Bitdepth16To8[wp[1]], + img->Bitdepth16To8[wp[2]], + img->Bitdepth16To8[wp[3]]); + wp += samplesperpixel; } cp += toskew; wp += fromskew; @@ -1330,13 +1423,15 @@ DECLAREContigPutFunc(putRGBUAcontig16bittile) fromskew *= samplesperpixel; while (h-- > 0) { uint32 r,g,b,a; + uint8* m; for (x = w; x-- > 0;) { - a = W2B(wp[3]); - r = (a*W2B(wp[0]) + 127) / 255; - g = (a*W2B(wp[1]) + 127) / 255; - b = (a*W2B(wp[2]) + 127) / 255; - *cp++ = PACK4(r,g,b,a); - wp += samplesperpixel; + a = img->Bitdepth16To8[wp[3]]; + m = img->UaToAa+(a<<8); + r = m[img->Bitdepth16To8[wp[0]]]; + g = m[img->Bitdepth16To8[wp[1]]]; + b = m[img->Bitdepth16To8[wp[2]]]; + *cp++ = PACK4(r,g,b,a); + wp += samplesperpixel; } cp += toskew; wp += fromskew; @@ -1423,7 +1518,7 @@ DECLARESepPutFunc(putRGBseparate8bittile) */ DECLARESepPutFunc(putRGBAAseparate8bittile) { - (void) img; (void) x; (void) y; + (void) img; (void) x; (void) y; while (h-- > 0) { UNROLL8(w, NOP, *cp++ = PACK4(*r++, *g++, *b++, *a++)); SKEW4(r, g, b, a, fromskew); @@ -1431,6 +1526,26 @@ DECLARESepPutFunc(putRGBAAseparate8bittile) } } +/* + * 8-bit unpacked CMYK samples => RGBA + */ +DECLARESepPutFunc(putCMYKseparate8bittile) +{ + (void) img; (void) y; + while (h-- > 0) { + uint32 rv, gv, bv, kv; + for (x = w; x-- > 0;) { + kv = 255 - *a++; + rv = (kv*(255-*r++))/255; + gv = (kv*(255-*g++))/255; + bv = (kv*(255-*b++))/255; + *cp++ = PACK4(rv,gv,bv,255); + } + SKEW4(r, g, b, a, fromskew); + cp += toskew; + } +} + /* * 8-bit unpacked samples => RGBA w/ unassociated alpha */ @@ -1439,11 +1554,13 @@ DECLARESepPutFunc(putRGBUAseparate8bittile) (void) img; (void) y; while (h-- > 0) { uint32 rv, gv, bv, av; + uint8* m; for (x = w; x-- > 0;) { av = *a++; - rv = (av* *r++ + 127) / 255; - gv = (av* *g++ + 127) / 255; - bv = (av* *b++ + 127) / 255; + m = img->UaToAa+(av<<8); + rv = m[*r++]; + gv = m[*g++]; + bv = m[*b++]; *cp++ = PACK4(rv,gv,bv,av); } SKEW4(r, g, b, a, fromskew); @@ -1462,7 +1579,9 @@ DECLARESepPutFunc(putRGBseparate16bittile) (void) img; (void) y; (void) a; while (h-- > 0) { for (x = 0; x < w; x++) - *cp++ = PACKW(*wr++,*wg++,*wb++); + *cp++ = PACK(img->Bitdepth16To8[*wr++], + img->Bitdepth16To8[*wg++], + img->Bitdepth16To8[*wb++]); SKEW(wr, wg, wb, fromskew); cp += toskew; } @@ -1480,7 +1599,10 @@ DECLARESepPutFunc(putRGBAAseparate16bittile) (void) img; (void) y; while (h-- > 0) { for (x = 0; x < w; x++) - *cp++ = PACKW4(*wr++,*wg++,*wb++,*wa++); + *cp++ = PACK4(img->Bitdepth16To8[*wr++], + img->Bitdepth16To8[*wg++], + img->Bitdepth16To8[*wb++], + img->Bitdepth16To8[*wa++]); SKEW4(wr, wg, wb, wa, fromskew); cp += toskew; } @@ -1498,12 +1620,14 @@ DECLARESepPutFunc(putRGBUAseparate16bittile) (void) img; (void) y; while (h-- > 0) { uint32 r,g,b,a; + uint8* m; for (x = w; x-- > 0;) { - a = W2B(*wa++); - r = (a*W2B(*wr++) + 127) / 255; - g = (a*W2B(*wg++) + 127) / 255; - b = (a*W2B(*wb++) + 127) / 255; - *cp++ = PACK4(r,g,b,a); + a = img->Bitdepth16To8[*wa++]; + m = img->UaToAa+(a<<8); + r = m[img->Bitdepth16To8[*wr++]]; + g = m[img->Bitdepth16To8[*wg++]]; + b = m[img->Bitdepth16To8[*wb++]]; + *cp++ = PACK4(r,g,b,a); } SKEW4(wr, wg, wb, wa, fromskew); cp += toskew; @@ -1846,6 +1970,7 @@ DECLAREContigPutFunc(putcontig8bitYCbCr41tile) DECLAREContigPutFunc(putcontig8bitYCbCr22tile) { uint32* cp2; + int32 incr = 2*toskew+w; (void) y; fromskew = (fromskew / 2) * 6; cp2 = cp+w+toskew; @@ -1872,8 +1997,8 @@ DECLAREContigPutFunc(putcontig8bitYCbCr22tile) cp2 ++ ; pp += 6; } - cp += toskew*2+w; - cp2 += toskew*2+w; + cp += incr; + cp2 += incr; pp += fromskew; h-=2; } @@ -1939,6 +2064,7 @@ DECLAREContigPutFunc(putcontig8bitYCbCr21tile) DECLAREContigPutFunc(putcontig8bitYCbCr12tile) { uint32* cp2; + int32 incr = 2*toskew+w; (void) y; fromskew = (fromskew / 2) * 4; cp2 = cp+w+toskew; @@ -1953,8 +2079,8 @@ DECLAREContigPutFunc(putcontig8bitYCbCr12tile) cp2 ++; pp += 4; } while (--x); - cp += toskew*2+w; - cp2 += toskew*2+w; + cp += incr; + cp2 += incr; pp += fromskew; h-=2; } @@ -2016,13 +2142,13 @@ DECLARESepPutFunc(putseparate8bitYCbCr11tile) static int initYCbCrConversion(TIFFRGBAImage* img) { - static char module[] = "initYCbCrConversion"; + static const char module[] = "initYCbCrConversion"; float *luma, *refBlackWhite; if (img->ycbcr == NULL) { img->ycbcr = (TIFFYCbCrToRGB*) _TIFFmalloc( - TIFFroundup(sizeof (TIFFYCbCrToRGB), sizeof (long)) + TIFFroundup_32(sizeof (TIFFYCbCrToRGB), sizeof (long)) + 4*256*sizeof (TIFFRGBValue) + 2*256*sizeof (int) + 3*256*sizeof (int32) @@ -2045,7 +2171,7 @@ initYCbCrConversion(TIFFRGBAImage* img) static tileContigRoutine initCIELabConversion(TIFFRGBAImage* img) { - static char module[] = "initCIELabConversion"; + static const char module[] = "initCIELabConversion"; float *whitePoint; float refWhite[3]; @@ -2325,23 +2451,28 @@ PickContigCase(TIFFRGBAImage* img) img->put.contig = putRGBAAcontig8bittile; else if (img->alpha == EXTRASAMPLE_UNASSALPHA) { - img->put.contig = putRGBUAcontig8bittile; + if (BuildMapUaToAa(img)) + img->put.contig = putRGBUAcontig8bittile; } else - img->put.contig = putRGBcontig8bittile; + img->put.contig = putRGBcontig8bittile; break; case 16: if (img->alpha == EXTRASAMPLE_ASSOCALPHA) { - img->put.contig = putRGBAAcontig16bittile; + if (BuildMapBitdepth16To8(img)) + img->put.contig = putRGBAAcontig16bittile; } else if (img->alpha == EXTRASAMPLE_UNASSALPHA) { - img->put.contig = putRGBUAcontig16bittile; + if (BuildMapBitdepth16To8(img) && + BuildMapUaToAa(img)) + img->put.contig = putRGBUAcontig16bittile; } else { - img->put.contig = putRGBcontig16bittile; + if (BuildMapBitdepth16To8(img)) + img->put.contig = putRGBcontig16bittile; } break; } @@ -2382,7 +2513,10 @@ PickContigCase(TIFFRGBAImage* img) img->put.contig = put16bitbwtile; break; case 8: - img->put.contig = putgreytile; + if (img->alpha && img->samplesperpixel == 2) + img->put.contig = putagreytile; + else + img->put.contig = putgreytile; break; case 4: img->put.contig = put4bitbwtile; @@ -2397,7 +2531,7 @@ PickContigCase(TIFFRGBAImage* img) } break; case PHOTOMETRIC_YCBCR: - if (img->bitspersample == 8) + if ((img->bitspersample==8) && (img->samplesperpixel==3)) { if (initYCbCrConversion(img)!=0) { @@ -2461,54 +2595,111 @@ PickSeparateCase(TIFFRGBAImage* img) img->get = TIFFIsTiled(img->tif) ? gtTileSeparate : gtStripSeparate; img->put.separate = NULL; switch (img->photometric) { - case PHOTOMETRIC_RGB: - switch (img->bitspersample) { - case 8: - if (img->alpha == EXTRASAMPLE_ASSOCALPHA) - img->put.separate = putRGBAAseparate8bittile; - else if (img->alpha == EXTRASAMPLE_UNASSALPHA) - { - img->put.separate = putRGBUAseparate8bittile; - } - else - img->put.separate = putRGBseparate8bittile; - break; - case 16: - if (img->alpha == EXTRASAMPLE_ASSOCALPHA) - { - img->put.separate = putRGBAAseparate16bittile; - } - else if (img->alpha == EXTRASAMPLE_UNASSALPHA) - { - img->put.separate = putRGBUAseparate16bittile; - } - else - { - img->put.separate = putRGBseparate16bittile; - } - break; + case PHOTOMETRIC_MINISWHITE: + case PHOTOMETRIC_MINISBLACK: + /* greyscale images processed pretty much as RGB by gtTileSeparate */ + case PHOTOMETRIC_RGB: + switch (img->bitspersample) { + case 8: + if (img->alpha == EXTRASAMPLE_ASSOCALPHA) + img->put.separate = putRGBAAseparate8bittile; + else if (img->alpha == EXTRASAMPLE_UNASSALPHA) + { + if (BuildMapUaToAa(img)) + img->put.separate = putRGBUAseparate8bittile; + } + else + img->put.separate = putRGBseparate8bittile; + break; + case 16: + if (img->alpha == EXTRASAMPLE_ASSOCALPHA) + { + if (BuildMapBitdepth16To8(img)) + img->put.separate = putRGBAAseparate16bittile; + } + else if (img->alpha == EXTRASAMPLE_UNASSALPHA) + { + if (BuildMapBitdepth16To8(img) && + BuildMapUaToAa(img)) + img->put.separate = putRGBUAseparate16bittile; + } + else + { + if (BuildMapBitdepth16To8(img)) + img->put.separate = putRGBseparate16bittile; } break; - case PHOTOMETRIC_YCBCR: - if ((img->bitspersample==8) && (img->samplesperpixel==3)) + } + break; + case PHOTOMETRIC_SEPARATED: + if (img->bitspersample == 8 && img->samplesperpixel == 4) + { + img->alpha = 1; // Not alpha, but seems like the only way to get 4th band + img->put.separate = putCMYKseparate8bittile; + } + break; + case PHOTOMETRIC_YCBCR: + if ((img->bitspersample==8) && (img->samplesperpixel==3)) + { + if (initYCbCrConversion(img)!=0) { - if (initYCbCrConversion(img)!=0) - { - uint16 hs, vs; - TIFFGetFieldDefaulted(img->tif, TIFFTAG_YCBCRSUBSAMPLING, &hs, &vs); - switch ((hs<<4)|vs) { - case 0x11: - img->put.separate = putseparate8bitYCbCr11tile; - break; - /* TODO: add other cases here */ - } + uint16 hs, vs; + TIFFGetFieldDefaulted(img->tif, TIFFTAG_YCBCRSUBSAMPLING, &hs, &vs); + switch ((hs<<4)|vs) { + case 0x11: + img->put.separate = putseparate8bitYCbCr11tile; + break; + /* TODO: add other cases here */ } } - break; + } + break; } return ((img->get!=NULL) && (img->put.separate!=NULL)); } +static int +BuildMapUaToAa(TIFFRGBAImage* img) +{ + static const char module[]="BuildMapUaToAa"; + uint8* m; + uint16 na,nv; + assert(img->UaToAa==NULL); + img->UaToAa=_TIFFmalloc(65536); + if (img->UaToAa==NULL) + { + TIFFErrorExt(img->tif->tif_clientdata,module,"Out of memory"); + return(0); + } + m=img->UaToAa; + for (na=0; na<256; na++) + { + for (nv=0; nv<256; nv++) + *m++=(nv*na+127)/255; + } + return(1); +} + +static int +BuildMapBitdepth16To8(TIFFRGBAImage* img) +{ + static const char module[]="BuildMapBitdepth16To8"; + uint8* m; + uint32 n; + assert(img->Bitdepth16To8==NULL); + img->Bitdepth16To8=_TIFFmalloc(65536); + if (img->Bitdepth16To8==NULL) + { + TIFFErrorExt(img->tif->tif_clientdata,module,"Out of memory"); + return(0); + } + m=img->Bitdepth16To8; + for (n=0; n<65536; n++) + *m++=(n+128)/257; + return(1); +} + + /* * Read a whole strip off data from the file, and convert to RGBA form. * If this is the last strip, then it will only contain the portion of diff --git a/dll/3rdparty/libtiff/tif_jbig.c b/dll/3rdparty/libtiff/tif_jbig.c index c92ee3de6c8..37878f6e702 100644 --- a/dll/3rdparty/libtiff/tif_jbig.c +++ b/dll/3rdparty/libtiff/tif_jbig.c @@ -1,26 +1,26 @@ -/* $Id: tif_jbig.c,v 1.2.2.3 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Id: tif_jbig.c,v 1.15 2010-03-10 18:56:48 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. * - * Permission to use, copy, modify, distribute, and sell this software and + * Permission to use, copy, modify, distribute, and sell this software and * its documentation for any purpose is hereby granted without fee, provided * that (i) the above copyright notices and this permission notice appear in * all copies of the software and related documentation, and (ii) the names of * Sam Leffler and Silicon Graphics may not be used in any advertising or * publicity relating to the software without the specific, prior written * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. */ @@ -29,7 +29,7 @@ * * JBIG Compression Algorithm Support. * Contributed by Lee Howard - * + * */ #include "tiffiop.h" @@ -37,339 +37,167 @@ #ifdef JBIG_SUPPORT #include "jbig.h" -typedef struct -{ - uint32 recvparams; /* encoded Class 2 session params */ - char* subaddress; /* subaddress string */ - uint32 recvtime; /* time spend receiving in seconds */ - char* faxdcs; /* encoded fax parameters (DCS, Table 2/T.30) */ - - TIFFVGetMethod vgetparent; - TIFFVSetMethod vsetparent; -} JBIGState; - -#define GetJBIGState(tif) ((JBIGState*)(tif)->tif_data) - -#define FIELD_RECVPARAMS (FIELD_CODEC+0) -#define FIELD_SUBADDRESS (FIELD_CODEC+1) -#define FIELD_RECVTIME (FIELD_CODEC+2) -#define FIELD_FAXDCS (FIELD_CODEC+3) - -static const TIFFFieldInfo jbigFieldInfo[] = -{ - {TIFFTAG_FAXRECVPARAMS, 1, 1, TIFF_LONG, FIELD_RECVPARAMS, TRUE, FALSE, "FaxRecvParams"}, - {TIFFTAG_FAXSUBADDRESS, -1, -1, TIFF_ASCII, FIELD_SUBADDRESS, TRUE, FALSE, "FaxSubAddress"}, - {TIFFTAG_FAXRECVTIME, 1, 1, TIFF_LONG, FIELD_RECVTIME, TRUE, FALSE, "FaxRecvTime"}, - {TIFFTAG_FAXDCS, -1, -1, TIFF_ASCII, FIELD_FAXDCS, TRUE, FALSE, "FaxDcs"}, -}; - static int JBIGSetupDecode(TIFF* tif) { - if (TIFFNumberOfStrips(tif) != 1) - { - TIFFError("JBIG", "Multistrip images not supported in decoder"); - return 0; - } + if (TIFFNumberOfStrips(tif) != 1) + { + TIFFErrorExt(tif->tif_clientdata, "JBIG", "Multistrip images not supported in decoder"); + return 0; + } - return 1; + return 1; } -static int JBIGDecode(TIFF* tif, tidata_t buffer, tsize_t size, tsample_t s) +static int JBIGDecode(TIFF* tif, uint8* buffer, tmsize_t size, uint16 s) { - struct jbg_dec_state decoder; - int decodeStatus = 0; - unsigned char* pImage = NULL; + struct jbg_dec_state decoder; + int decodeStatus = 0; + unsigned char* pImage = NULL; (void) size, (void) s; - if (isFillOrder(tif, tif->tif_dir.td_fillorder)) - { - TIFFReverseBits(tif->tif_rawdata, tif->tif_rawdatasize); - } + if (isFillOrder(tif, tif->tif_dir.td_fillorder)) + { + TIFFReverseBits(tif->tif_rawdata, tif->tif_rawdatasize); + } - jbg_dec_init(&decoder); + jbg_dec_init(&decoder); #if defined(HAVE_JBG_NEWLEN) - jbg_newlen(tif->tif_rawdata, tif->tif_rawdatasize); - /* - * I do not check the return status of jbg_newlen because even if this - * function fails it does not necessarily mean that decoding the image - * will fail. It is generally only needed for received fax images - * that do not contain the actual length of the image in the BIE - * header. I do not log when an error occurs because that will cause - * problems when converting JBIG encoded TIFF's to - * PostScript. As long as the actual image length is contained in the - * BIE header jbg_dec_in should succeed. - */ + jbg_newlen(tif->tif_rawdata, (size_t)tif->tif_rawdatasize); + /* + * I do not check the return status of jbg_newlen because even if this + * function fails it does not necessarily mean that decoding the image + * will fail. It is generally only needed for received fax images + * that do not contain the actual length of the image in the BIE + * header. I do not log when an error occurs because that will cause + * problems when converting JBIG encoded TIFF's to + * PostScript. As long as the actual image length is contained in the + * BIE header jbg_dec_in should succeed. + */ #endif /* HAVE_JBG_NEWLEN */ - decodeStatus = jbg_dec_in(&decoder, tif->tif_rawdata, - tif->tif_rawdatasize, NULL); - if (JBG_EOK != decodeStatus) - { + decodeStatus = jbg_dec_in(&decoder, (unsigned char*)tif->tif_rawdata, + (size_t)tif->tif_rawdatasize, NULL); + if (JBG_EOK != decodeStatus) + { /* * XXX: JBG_EN constant was defined in pre-2.0 releases of the * JBIG-KIT. Since the 2.0 the error reporting functions were * changed. We will handle both cases here. */ - TIFFError("JBIG", "Error (%d) decoding: %s", decodeStatus, + TIFFErrorExt(tif->tif_clientdata, + "JBIG", "Error (%d) decoding: %s", + decodeStatus, #if defined(JBG_EN) - jbg_strerror(decodeStatus, JBG_EN) + jbg_strerror(decodeStatus, JBG_EN) #else - jbg_strerror(decodeStatus) + jbg_strerror(decodeStatus) #endif - ); - return 0; - } - - pImage = jbg_dec_getimage(&decoder, 0); - _TIFFmemcpy(buffer, pImage, jbg_dec_getsize(&decoder)); - jbg_dec_free(&decoder); - return 1; + ); + return 0; + } + + pImage = jbg_dec_getimage(&decoder, 0); + _TIFFmemcpy(buffer, pImage, jbg_dec_getsize(&decoder)); + jbg_dec_free(&decoder); + return 1; } static int JBIGSetupEncode(TIFF* tif) { - if (TIFFNumberOfStrips(tif) != 1) - { - TIFFError("JBIG", "Multistrip images not supported in encoder"); - return 0; - } + if (TIFFNumberOfStrips(tif) != 1) + { + TIFFErrorExt(tif->tif_clientdata, "JBIG", "Multistrip images not supported in encoder"); + return 0; + } - return 1; + return 1; } -static int JBIGCopyEncodedData(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s) +static int JBIGCopyEncodedData(TIFF* tif, unsigned char* pp, size_t cc, uint16 s) { - (void) s; - while (cc > 0) - { - tsize_t n = cc; + (void) s; + while (cc > 0) + { + tmsize_t n = (tmsize_t)cc; - if (tif->tif_rawcc + n > tif->tif_rawdatasize) - { - n = tif->tif_rawdatasize - tif->tif_rawcc; - } + if (tif->tif_rawcc + n > tif->tif_rawdatasize) + { + n = tif->tif_rawdatasize - tif->tif_rawcc; + } - assert(n > 0); - _TIFFmemcpy(tif->tif_rawcp, pp, n); - tif->tif_rawcp += n; - tif->tif_rawcc += n; - pp += n; - cc -= n; - if (tif->tif_rawcc >= tif->tif_rawdatasize && - !TIFFFlushData1(tif)) - { - return (-1); - } - } + assert(n > 0); + _TIFFmemcpy(tif->tif_rawcp, pp, n); + tif->tif_rawcp += n; + tif->tif_rawcc += n; + pp += n; + cc -= (size_t)n; + if (tif->tif_rawcc >= tif->tif_rawdatasize && + !TIFFFlushData1(tif)) + { + return (-1); + } + } - return (1); + return (1); } -static void JBIGOutputBie(unsigned char* buffer, size_t len, void *userData) +static void JBIGOutputBie(unsigned char* buffer, size_t len, void* userData) { - TIFF* tif = (TIFF*)userData; + TIFF* tif = (TIFF*)userData; - if (isFillOrder(tif, tif->tif_dir.td_fillorder)) - { - TIFFReverseBits(buffer, len); - } + if (isFillOrder(tif, tif->tif_dir.td_fillorder)) + { + TIFFReverseBits(buffer, (tmsize_t)len); + } - JBIGCopyEncodedData(tif, buffer, len, 0); + JBIGCopyEncodedData(tif, buffer, len, 0); } -static int JBIGEncode(TIFF* tif, tidata_t buffer, tsize_t size, tsample_t s) +static int JBIGEncode(TIFF* tif, uint8* buffer, tmsize_t size, uint16 s) { - TIFFDirectory* dir = &tif->tif_dir; - struct jbg_enc_state encoder; + TIFFDirectory* dir = &tif->tif_dir; + struct jbg_enc_state encoder; (void) size, (void) s; - jbg_enc_init(&encoder, - dir->td_imagewidth, - dir->td_imagelength, - 1, - &buffer, - JBIGOutputBie, - tif); - /* - * jbg_enc_out does the "real" encoding. As data is encoded, - * JBIGOutputBie is called, which writes the data to the directory. - */ - jbg_enc_out(&encoder); - jbg_enc_free(&encoder); + jbg_enc_init(&encoder, + dir->td_imagewidth, + dir->td_imagelength, + 1, + &buffer, + JBIGOutputBie, + tif); + /* + * jbg_enc_out does the "real" encoding. As data is encoded, + * JBIGOutputBie is called, which writes the data to the directory. + */ + jbg_enc_out(&encoder); + jbg_enc_free(&encoder); - return 1; -} - -static void JBIGCleanup(TIFF* tif) -{ - JBIGState *sp = GetJBIGState(tif); - - assert(sp != 0); - - tif->tif_tagmethods.vgetfield = sp->vgetparent; - tif->tif_tagmethods.vsetfield = sp->vsetparent; - - _TIFFfree(tif->tif_data); - tif->tif_data = NULL; - - _TIFFSetDefaultCompressionState(tif); -} - -static void JBIGPrintDir(TIFF* tif, FILE* fd, long flags) -{ - JBIGState* codec = GetJBIGState(tif); - (void)flags; - - if (TIFFFieldSet(tif, FIELD_RECVPARAMS)) - { - fprintf(fd, - " Fax Receive Parameters: %08lx\n", - (unsigned long)codec->recvparams); - } - - if (TIFFFieldSet(tif, FIELD_SUBADDRESS)) - { - fprintf(fd, - " Fax SubAddress: %s\n", - codec->subaddress); - } - - if (TIFFFieldSet(tif, FIELD_RECVTIME)) - { - fprintf(fd, - " Fax Receive Time: %lu secs\n", - (unsigned long)codec->recvtime); - } - - if (TIFFFieldSet(tif, FIELD_FAXDCS)) - { - fprintf(fd, - " Fax DCS: %s\n", - codec->faxdcs); - } -} - -static int JBIGVGetField(TIFF* tif, ttag_t tag, va_list ap) -{ - JBIGState* codec = GetJBIGState(tif); - - switch (tag) - { - case TIFFTAG_FAXRECVPARAMS: - *va_arg(ap, uint32*) = codec->recvparams; - break; - - case TIFFTAG_FAXSUBADDRESS: - *va_arg(ap, char**) = codec->subaddress; - break; - - case TIFFTAG_FAXRECVTIME: - *va_arg(ap, uint32*) = codec->recvtime; - break; - - case TIFFTAG_FAXDCS: - *va_arg(ap, char**) = codec->faxdcs; - break; - - default: - return (*codec->vgetparent)(tif, tag, ap); - } - - return 1; -} - -static int JBIGVSetField(TIFF* tif, ttag_t tag, va_list ap) -{ - JBIGState* codec = GetJBIGState(tif); - - switch (tag) - { - case TIFFTAG_FAXRECVPARAMS: - codec->recvparams = va_arg(ap, uint32); - break; - - case TIFFTAG_FAXSUBADDRESS: - _TIFFsetString(&codec->subaddress, va_arg(ap, char*)); - break; - - case TIFFTAG_FAXRECVTIME: - codec->recvtime = va_arg(ap, uint32); - break; - - case TIFFTAG_FAXDCS: - _TIFFsetString(&codec->faxdcs, va_arg(ap, char*)); - break; - - default: - return (*codec->vsetparent)(tif, tag, ap); - } - - TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif, tag)->field_bit); - tif->tif_flags |= TIFF_DIRTYDIRECT; - return 1; + return 1; } int TIFFInitJBIG(TIFF* tif, int scheme) { - JBIGState* codec = NULL; - assert(scheme == COMPRESSION_JBIG); /* - * Merge codec-specific tag information. + * These flags are set so the JBIG Codec can control when to reverse + * bits and when not to and to allow the jbig decoder and bit reverser + * to write to memory when necessary. */ - if (!_TIFFMergeFieldInfo(tif, jbigFieldInfo, - TIFFArrayCount(jbigFieldInfo))) { - TIFFErrorExt(tif->tif_clientdata, "TIFFInitJBIG", - "Merging JBIG codec-specific tags failed"); - return 0; - } + tif->tif_flags |= TIFF_NOBITREV; + tif->tif_flags &= ~TIFF_MAPPED; - /* Allocate memory for the JBIGState structure.*/ - tif->tif_data = (tdata_t)_TIFFmalloc(sizeof(JBIGState)); - if (tif->tif_data == NULL) - { - TIFFError("TIFFInitJBIG", "Not enough memory for JBIGState"); - return 0; - } - _TIFFmemset(tif->tif_data, 0, sizeof(JBIGState)); - codec = GetJBIGState(tif); + /* Setup the function pointers for encode, decode, and cleanup. */ + tif->tif_setupdecode = JBIGSetupDecode; + tif->tif_decodestrip = JBIGDecode; - /* Initialize codec private fields */ - codec->recvparams = 0; - codec->subaddress = NULL; - codec->faxdcs = NULL; - codec->recvtime = 0; + tif->tif_setupencode = JBIGSetupEncode; + tif->tif_encodestrip = JBIGEncode; - /* - * Override parent get/set field methods. - */ - codec->vgetparent = tif->tif_tagmethods.vgetfield; - codec->vsetparent = tif->tif_tagmethods.vsetfield; - tif->tif_tagmethods.vgetfield = JBIGVGetField; - tif->tif_tagmethods.vsetfield = JBIGVSetField; - tif->tif_tagmethods.printdir = JBIGPrintDir; - - /* - * These flags are set so the JBIG Codec can control when to reverse - * bits and when not to and to allow the jbig decoder and bit reverser - * to write to memory when necessary. - */ - tif->tif_flags |= TIFF_NOBITREV; - tif->tif_flags &= ~TIFF_MAPPED; - - /* Setup the function pointers for encode, decode, and cleanup. */ - tif->tif_setupdecode = JBIGSetupDecode; - tif->tif_decodestrip = JBIGDecode; - - tif->tif_setupencode = JBIGSetupEncode; - tif->tif_encodestrip = JBIGEncode; - - tif->tif_cleanup = JBIGCleanup; - - return 1; + return 1; } #endif /* JBIG_SUPPORT */ diff --git a/dll/3rdparty/libtiff/tif_jpeg.c b/dll/3rdparty/libtiff/tif_jpeg.c index a967827e749..b61b91b0dcc 100644 --- a/dll/3rdparty/libtiff/tif_jpeg.c +++ b/dll/3rdparty/libtiff/tif_jpeg.c @@ -1,4 +1,4 @@ -/* $Id: tif_jpeg.c,v 1.50.2.9 2010-06-14 02:47:16 fwarmerdam Exp $ */ +/* $Id: tif_jpeg.c,v 1.111 2012-07-06 18:48:04 bfriesen Exp $ */ /* * Copyright (c) 1994-1997 Sam Leffler @@ -44,8 +44,9 @@ */ #include -int TIFFFillStrip(TIFF*, tstrip_t); -int TIFFFillTile(TIFF*, ttile_t); +int TIFFFillStrip(TIFF* tif, uint32 strip); +int TIFFFillTile(TIFF* tif, uint32 tile); +int TIFFReInitJPEG_12( TIFF *tif, int scheme, int is_encode ); /* We undefine FAR to avoid conflict with JPEG definition */ @@ -77,7 +78,7 @@ int TIFFFillTile(TIFF*, ttile_t); */ /* Define "boolean" as unsigned char, not int, per Windows custom. */ -#if defined(WIN32) && !defined(__MINGW32__) +#if defined(__WIN32__) && !defined(__MINGW32__) # ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ typedef unsigned char boolean; # endif @@ -87,6 +88,17 @@ int TIFFFillTile(TIFF*, ttile_t); #include "jpeglib.h" #include "jerror.h" +/* + * Do we want to do special processing suitable for when JSAMPLE is a + * 16bit value? + */ + +#if defined(JPEG_LIB_MK1) +# define JPEG_LIB_MK1_OR_12BIT 1 +#elif BITS_IN_JSAMPLE == 12 +# define JPEG_LIB_MK1_OR_12BIT 1 +#endif + /* * We are using width_in_blocks which is supposed to be private to * libjpeg. Unfortunately, the libjpeg delivered with Cygwin has @@ -108,7 +120,7 @@ int TIFFFillTile(TIFF*, ttile_t); typedef struct jpeg_destination_mgr jpeg_destination_mgr; typedef struct jpeg_source_mgr jpeg_source_mgr; -typedef struct jpeg_error_mgr jpeg_error_mgr; +typedef struct jpeg_error_mgr jpeg_error_mgr; /* * State block for each open TIFF file using @@ -123,13 +135,13 @@ typedef struct jpeg_error_mgr jpeg_error_mgr; * so we can safely cast JPEGState* -> jpeg_xxx_struct* * and vice versa! */ -typedef struct { +typedef struct { union { struct jpeg_compress_struct c; struct jpeg_decompress_struct d; struct jpeg_common_struct comm; } cinfo; /* NB: must be first */ - int cinfo_initialized; + int cinfo_initialized; jpeg_error_mgr err; /* libjpeg error manager */ JMP_BUF exit_jmpbuf; /* for catching libjpeg failures */ @@ -144,7 +156,7 @@ typedef struct { uint16 photometric; /* copy of PhotometricInterpretation */ uint16 h_sampling; /* luminance sampling factors */ uint16 v_sampling; - tsize_t bytesperline; /* decompressed bytes per scanline */ + tmsize_t bytesperline; /* decompressed bytes per scanline */ /* pointers to intermediate buffers when processing downsampled data */ JSAMPARRAY ds_buffer[MAX_COMPONENTS]; int scancount; /* number of "scanlines" accumulated */ @@ -163,47 +175,25 @@ typedef struct { int jpegtablesmode; /* What to put in JPEGTables */ int ycbcrsampling_fetched; - uint32 recvparams; /* encoded Class 2 session params */ - char* subaddress; /* subaddress string */ - uint32 recvtime; /* time spent receiving (secs) */ - char* faxdcs; /* encoded fax parameters (DCS, Table 2/T.30) */ } JPEGState; #define JState(tif) ((JPEGState*)(tif)->tif_data) -static int JPEGDecode(TIFF*, tidata_t, tsize_t, tsample_t); -static int JPEGDecodeRaw(TIFF*, tidata_t, tsize_t, tsample_t); -static int JPEGEncode(TIFF*, tidata_t, tsize_t, tsample_t); -static int JPEGEncodeRaw(TIFF*, tidata_t, tsize_t, tsample_t); -static int JPEGInitializeLibJPEG( TIFF * tif, - int force_encode, int force_decode ); +static int JPEGDecode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s); +static int JPEGDecodeRaw(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s); +static int JPEGEncode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s); +static int JPEGEncodeRaw(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s); +static int JPEGInitializeLibJPEG(TIFF * tif, int decode ); +static int DecodeRowError(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s); #define FIELD_JPEGTABLES (FIELD_CODEC+0) -#define FIELD_RECVPARAMS (FIELD_CODEC+1) -#define FIELD_SUBADDRESS (FIELD_CODEC+2) -#define FIELD_RECVTIME (FIELD_CODEC+3) -#define FIELD_FAXDCS (FIELD_CODEC+4) -static const TIFFFieldInfo jpegFieldInfo[] = { - { TIFFTAG_JPEGTABLES, -3,-3, TIFF_UNDEFINED, FIELD_JPEGTABLES, - FALSE, TRUE, "JPEGTables" }, - { TIFFTAG_JPEGQUALITY, 0, 0, TIFF_ANY, FIELD_PSEUDO, - TRUE, FALSE, "" }, - { TIFFTAG_JPEGCOLORMODE, 0, 0, TIFF_ANY, FIELD_PSEUDO, - FALSE, FALSE, "" }, - { TIFFTAG_JPEGTABLESMODE, 0, 0, TIFF_ANY, FIELD_PSEUDO, - FALSE, FALSE, "" }, - /* Specific for JPEG in faxes */ - { TIFFTAG_FAXRECVPARAMS, 1, 1, TIFF_LONG, FIELD_RECVPARAMS, - TRUE, FALSE, "FaxRecvParams" }, - { TIFFTAG_FAXSUBADDRESS, -1,-1, TIFF_ASCII, FIELD_SUBADDRESS, - TRUE, FALSE, "FaxSubAddress" }, - { TIFFTAG_FAXRECVTIME, 1, 1, TIFF_LONG, FIELD_RECVTIME, - TRUE, FALSE, "FaxRecvTime" }, - { TIFFTAG_FAXDCS, -1, -1, TIFF_ASCII, FIELD_FAXDCS, - TRUE, FALSE, "FaxDcs" }, +static const TIFFField jpegFields[] = { + { TIFFTAG_JPEGTABLES, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8, TIFF_SETGET_C32_UINT8, FIELD_JPEGTABLES, FALSE, TRUE, "JPEGTables", NULL }, + { TIFFTAG_JPEGQUALITY, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "", NULL }, + { TIFFTAG_JPEGCOLORMODE, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, FALSE, FALSE, "", NULL }, + { TIFFTAG_JPEGTABLESMODE, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, FALSE, FALSE, "", NULL } }; -#define N(a) (sizeof (a) / sizeof (a[0])) /* * libjpeg interface layer. @@ -411,6 +401,19 @@ std_empty_output_buffer(j_compress_ptr cinfo) /* the entire buffer has been filled */ tif->tif_rawcc = tif->tif_rawdatasize; + +#ifdef IPPJ_HUFF + /* + * The Intel IPP performance library does not necessarily fill up + * the whole output buffer on each pass, so only dump out the parts + * that have been filled. + * http://trac.osgeo.org/gdal/wiki/JpegIPP + */ + if ( sp->dest.free_in_buffer >= 0 ) { + tif->tif_rawcc = tif->tif_rawdatasize - sp->dest.free_in_buffer; + } +#endif + TIFFFlushData1(tif); sp->dest.next_output_byte = (JOCTET*) tif->tif_rawdata; sp->dest.free_in_buffer = (size_t) tif->tif_rawdatasize; @@ -424,9 +427,9 @@ std_term_destination(j_compress_ptr cinfo) JPEGState* sp = (JPEGState*) cinfo; TIFF* tif = sp->tif; - tif->tif_rawcp = (tidata_t) sp->dest.next_output_byte; + tif->tif_rawcp = (uint8*) sp->dest.next_output_byte; tif->tif_rawcc = - tif->tif_rawdatasize - (tsize_t) sp->dest.free_in_buffer; + tif->tif_rawdatasize - (tmsize_t) sp->dest.free_in_buffer; /* NB: libtiff does the final buffer flush */ } @@ -461,8 +464,8 @@ tables_empty_output_buffer(j_compress_ptr cinfo) void* newbuf; /* the entire buffer has been filled; enlarge it by 1000 bytes */ - newbuf = _TIFFrealloc((tdata_t) sp->jpegtables, - (tsize_t) (sp->jpegtables_length + 1000)); + newbuf = _TIFFrealloc((void*) sp->jpegtables, + (tmsize_t) (sp->jpegtables_length + 1000)); if (newbuf == NULL) ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 100); sp->dest.next_output_byte = (JOCTET*) newbuf + sp->jpegtables_length; @@ -478,7 +481,7 @@ tables_term_destination(j_compress_ptr cinfo) JPEGState* sp = (JPEGState*) cinfo; /* set tables length to number of bytes actually emitted */ - sp->jpegtables_length -= sp->dest.free_in_buffer; + sp->jpegtables_length -= (uint32) sp->dest.free_in_buffer; } static int @@ -492,7 +495,7 @@ TIFFjpeg_tables_dest(JPEGState* sp, TIFF* tif) if (sp->jpegtables) _TIFFfree(sp->jpegtables); sp->jpegtables_length = 1000; - sp->jpegtables = (void*) _TIFFmalloc((tsize_t) sp->jpegtables_length); + sp->jpegtables = (void*) _TIFFmalloc((tmsize_t) sp->jpegtables_length); if (sp->jpegtables == NULL) { sp->jpegtables_length = 0; TIFFErrorExt(sp->tif->tif_clientdata, "TIFFjpeg_tables_dest", "No space for JPEGTables"); @@ -526,11 +529,29 @@ std_fill_input_buffer(j_decompress_ptr cinfo) JPEGState* sp = (JPEGState* ) cinfo; static const JOCTET dummy_EOI[2] = { 0xFF, JPEG_EOI }; +#ifdef IPPJ_HUFF + /* + * The Intel IPP performance library does not necessarily read the whole + * input buffer in one pass, so it is possible to get here with data + * yet to read. + * + * We just return without doing anything, until the entire buffer has + * been read. + * http://trac.osgeo.org/gdal/wiki/JpegIPP + */ + if( sp->src.bytes_in_buffer > 0 ) { + return (TRUE); + } +#endif + /* - * Should never get here since entire strip/tile is - * read into memory before the decompressor is called, - * and thus was supplied by init_source. + * Normally the whole strip/tile is read and so we don't need to do + * a fill. In the case of CHUNKY_STRIP_READ_SUPPORT we might not have + * all the data, but the rawdata is refreshed between scanlines and + * we push this into the io machinery in JPEGDecode(). + * http://trac.osgeo.org/gdal/ticket/3894 */ + WARNMS(cinfo, JWRN_JPEG_EOF); /* insert a fake EOI marker */ sp->src.next_input_byte = dummy_EOI; @@ -544,7 +565,7 @@ std_skip_input_data(j_decompress_ptr cinfo, long num_bytes) JPEGState* sp = (JPEGState*) cinfo; if (num_bytes > 0) { - if (num_bytes > (long) sp->src.bytes_in_buffer) { + if ((size_t)num_bytes > sp->src.bytes_in_buffer) { /* oops, buffer overrun */ (void) std_fill_input_buffer(cinfo); } else { @@ -558,8 +579,6 @@ static void std_term_source(j_decompress_ptr cinfo) { /* No work necessary here */ - /* Or must we update tif->tif_rawcp, tif->tif_rawcc ??? */ - /* (if so, need empty tables_term_source!) */ (void) cinfo; } @@ -635,13 +654,308 @@ alloc_downsampled_buffers(TIFF* tif, jpeg_component_info* comp_info, * JPEG Decoding. */ +#ifdef CHECK_JPEG_YCBCR_SUBSAMPLING + +#define JPEG_MARKER_SOF0 0xC0 +#define JPEG_MARKER_SOF1 0xC1 +#define JPEG_MARKER_SOF3 0xC3 +#define JPEG_MARKER_DHT 0xC4 +#define JPEG_MARKER_SOI 0xD8 +#define JPEG_MARKER_SOS 0xDA +#define JPEG_MARKER_DQT 0xDB +#define JPEG_MARKER_DRI 0xDD +#define JPEG_MARKER_APP0 0xE0 +#define JPEG_MARKER_COM 0xFE +struct JPEGFixupTagsSubsamplingData +{ + TIFF* tif; + void* buffer; + uint32 buffersize; + uint8* buffercurrentbyte; + uint32 bufferbytesleft; + uint64 fileoffset; + uint64 filebytesleft; + uint8 filepositioned; +}; +static void JPEGFixupTagsSubsampling(TIFF* tif); +static int JPEGFixupTagsSubsamplingSec(struct JPEGFixupTagsSubsamplingData* data); +static int JPEGFixupTagsSubsamplingReadByte(struct JPEGFixupTagsSubsamplingData* data, uint8* result); +static int JPEGFixupTagsSubsamplingReadWord(struct JPEGFixupTagsSubsamplingData* data, uint16* result); +static void JPEGFixupTagsSubsamplingSkip(struct JPEGFixupTagsSubsamplingData* data, uint16 skiplength); + +#endif + +static int +JPEGFixupTags(TIFF* tif) +{ +#ifdef CHECK_JPEG_YCBCR_SUBSAMPLING + if ((tif->tif_dir.td_photometric==PHOTOMETRIC_YCBCR)&& + (tif->tif_dir.td_planarconfig==PLANARCONFIG_CONTIG)&& + (tif->tif_dir.td_samplesperpixel==3)) + JPEGFixupTagsSubsampling(tif); +#endif + + return(1); +} + +#ifdef CHECK_JPEG_YCBCR_SUBSAMPLING + +static void +JPEGFixupTagsSubsampling(TIFF* tif) +{ + /* + * Some JPEG-in-TIFF produces do not emit the YCBCRSUBSAMPLING values in + * the TIFF tags, but still use non-default (2,2) values within the jpeg + * data stream itself. In order for TIFF applications to work properly + * - for instance to get the strip buffer size right - it is imperative + * that the subsampling be available before we start reading the image + * data normally. This function will attempt to analyze the first strip in + * order to get the sampling values from the jpeg data stream. + * + * Note that JPEGPreDeocode() will produce a fairly loud warning when the + * discovered sampling does not match the default sampling (2,2) or whatever + * was actually in the tiff tags. + * + * See the bug in bugzilla for details: + * + * http://bugzilla.remotesensing.org/show_bug.cgi?id=168 + * + * Frank Warmerdam, July 2002 + * Joris Van Damme, May 2007 + */ + static const char module[] = "JPEGFixupTagsSubsampling"; + struct JPEGFixupTagsSubsamplingData m; + + _TIFFFillStriles( tif ); + + if( tif->tif_dir.td_stripbytecount == NULL + || tif->tif_dir.td_stripbytecount[0] == 0 ) + { + /* Do not even try to check if the first strip/tile does not + yet exist, as occurs when GDAL has created a new NULL file + for instance. */ + return; + } + + m.tif=tif; + m.buffersize=2048; + m.buffer=_TIFFmalloc(m.buffersize); + if (m.buffer==NULL) + { + TIFFWarningExt(tif->tif_clientdata,module, + "Unable to allocate memory for auto-correcting of subsampling values; auto-correcting skipped"); + return; + } + m.buffercurrentbyte=NULL; + m.bufferbytesleft=0; + m.fileoffset=tif->tif_dir.td_stripoffset[0]; + m.filepositioned=0; + m.filebytesleft=tif->tif_dir.td_stripbytecount[0]; + if (!JPEGFixupTagsSubsamplingSec(&m)) + TIFFWarningExt(tif->tif_clientdata,module, + "Unable to auto-correct subsampling values, likely corrupt JPEG compressed data in first strip/tile; auto-correcting skipped"); + _TIFFfree(m.buffer); +} + +static int +JPEGFixupTagsSubsamplingSec(struct JPEGFixupTagsSubsamplingData* data) +{ + static const char module[] = "JPEGFixupTagsSubsamplingSec"; + uint8 m; + while (1) + { + while (1) + { + if (!JPEGFixupTagsSubsamplingReadByte(data,&m)) + return(0); + if (m==255) + break; + } + while (1) + { + if (!JPEGFixupTagsSubsamplingReadByte(data,&m)) + return(0); + if (m!=255) + break; + } + switch (m) + { + case JPEG_MARKER_SOI: + /* this type of marker has no data and should be skipped */ + break; + case JPEG_MARKER_COM: + case JPEG_MARKER_APP0: + case JPEG_MARKER_APP0+1: + case JPEG_MARKER_APP0+2: + case JPEG_MARKER_APP0+3: + case JPEG_MARKER_APP0+4: + case JPEG_MARKER_APP0+5: + case JPEG_MARKER_APP0+6: + case JPEG_MARKER_APP0+7: + case JPEG_MARKER_APP0+8: + case JPEG_MARKER_APP0+9: + case JPEG_MARKER_APP0+10: + case JPEG_MARKER_APP0+11: + case JPEG_MARKER_APP0+12: + case JPEG_MARKER_APP0+13: + case JPEG_MARKER_APP0+14: + case JPEG_MARKER_APP0+15: + case JPEG_MARKER_DQT: + case JPEG_MARKER_SOS: + case JPEG_MARKER_DHT: + case JPEG_MARKER_DRI: + /* this type of marker has data, but it has no use to us and should be skipped */ + { + uint16 n; + if (!JPEGFixupTagsSubsamplingReadWord(data,&n)) + return(0); + if (n<2) + return(0); + n-=2; + if (n>0) + JPEGFixupTagsSubsamplingSkip(data,n); + } + break; + case JPEG_MARKER_SOF0: + case JPEG_MARKER_SOF1: + /* this marker contains the subsampling factors we're scanning for */ + { + uint16 n; + uint16 o; + uint8 p; + uint8 ph,pv; + if (!JPEGFixupTagsSubsamplingReadWord(data,&n)) + return(0); + if (n!=8+data->tif->tif_dir.td_samplesperpixel*3) + return(0); + JPEGFixupTagsSubsamplingSkip(data,7); + if (!JPEGFixupTagsSubsamplingReadByte(data,&p)) + return(0); + ph=(p>>4); + pv=(p&15); + JPEGFixupTagsSubsamplingSkip(data,1); + for (o=1; otif->tif_dir.td_samplesperpixel; o++) + { + JPEGFixupTagsSubsamplingSkip(data,1); + if (!JPEGFixupTagsSubsamplingReadByte(data,&p)) + return(0); + if (p!=0x11) + { + TIFFWarningExt(data->tif->tif_clientdata,module, + "Subsampling values inside JPEG compressed data have no TIFF equivalent, auto-correction of TIFF subsampling values failed"); + return(1); + } + JPEGFixupTagsSubsamplingSkip(data,1); + } + if (((ph!=1)&&(ph!=2)&&(ph!=4))||((pv!=1)&&(pv!=2)&&(pv!=4))) + { + TIFFWarningExt(data->tif->tif_clientdata,module, + "Subsampling values inside JPEG compressed data have no TIFF equivalent, auto-correction of TIFF subsampling values failed"); + return(1); + } + if ((ph!=data->tif->tif_dir.td_ycbcrsubsampling[0])||(pv!=data->tif->tif_dir.td_ycbcrsubsampling[1])) + { + TIFFWarningExt(data->tif->tif_clientdata,module, + "Auto-corrected former TIFF subsampling values [%d,%d] to match subsampling values inside JPEG compressed data [%d,%d]", + (int)data->tif->tif_dir.td_ycbcrsubsampling[0], + (int)data->tif->tif_dir.td_ycbcrsubsampling[1], + (int)ph,(int)pv); + data->tif->tif_dir.td_ycbcrsubsampling[0]=ph; + data->tif->tif_dir.td_ycbcrsubsampling[1]=pv; + } + } + return(1); + default: + return(0); + } + } +} + +static int +JPEGFixupTagsSubsamplingReadByte(struct JPEGFixupTagsSubsamplingData* data, uint8* result) +{ + if (data->bufferbytesleft==0) + { + uint32 m; + if (data->filebytesleft==0) + return(0); + if (!data->filepositioned) + { + TIFFSeekFile(data->tif,data->fileoffset,SEEK_SET); + data->filepositioned=1; + } + m=data->buffersize; + if ((uint64)m>data->filebytesleft) + m=(uint32)data->filebytesleft; + assert(m<0x80000000UL); + if (TIFFReadFile(data->tif,data->buffer,(tmsize_t)m)!=(tmsize_t)m) + return(0); + data->buffercurrentbyte=data->buffer; + data->bufferbytesleft=m; + data->fileoffset+=m; + data->filebytesleft-=m; + } + *result=*data->buffercurrentbyte; + data->buffercurrentbyte++; + data->bufferbytesleft--; + return(1); +} + +static int +JPEGFixupTagsSubsamplingReadWord(struct JPEGFixupTagsSubsamplingData* data, uint16* result) +{ + uint8 ma; + uint8 mb; + if (!JPEGFixupTagsSubsamplingReadByte(data,&ma)) + return(0); + if (!JPEGFixupTagsSubsamplingReadByte(data,&mb)) + return(0); + *result=(ma<<8)|mb; + return(1); +} + +static void +JPEGFixupTagsSubsamplingSkip(struct JPEGFixupTagsSubsamplingData* data, uint16 skiplength) +{ + if ((uint32)skiplength<=data->bufferbytesleft) + { + data->buffercurrentbyte+=skiplength; + data->bufferbytesleft-=skiplength; + } + else + { + uint16 m; + m=skiplength-data->bufferbytesleft; + if (m<=data->filebytesleft) + { + data->bufferbytesleft=0; + data->fileoffset+=m; + data->filebytesleft-=m; + data->filepositioned=0; + } + else + { + data->bufferbytesleft=0; + data->filebytesleft=0; + } + } +} + +#endif + + static int JPEGSetupDecode(TIFF* tif) { JPEGState* sp = JState(tif); TIFFDirectory *td = &tif->tif_dir; - JPEGInitializeLibJPEG( tif, 0, 1 ); +#if defined(JPEG_DUAL_MODE_8_12) && !defined(TIFFInitJPEG) + if( tif->tif_dir.td_bitspersample == 12 ) + return TIFFReInitJPEG_12( tif, COMPRESSION_JPEG, 0 ); +#endif + + JPEGInitializeLibJPEG( tif, TRUE ); assert(sp != NULL); assert(sp->cinfo.comm.is_decompressor); @@ -679,7 +993,7 @@ JPEGSetupDecode(TIFF* tif) * Set up for decoding a strip or tile. */ static int -JPEGPreDecode(TIFF* tif, tsample_t s) +JPEGPreDecode(TIFF* tif, uint16 s) { JPEGState *sp = JState(tif); TIFFDirectory *td = &tif->tif_dir; @@ -689,6 +1003,12 @@ JPEGPreDecode(TIFF* tif, tsample_t s) int ci; assert(sp != NULL); + + if (sp->cinfo.comm.is_decompressor == 0) + { + tif->tif_setupdecode( tif ); + } + assert(sp->cinfo.comm.is_decompressor); /* * Reset decoder state from any previous strip/tile, @@ -699,8 +1019,13 @@ JPEGPreDecode(TIFF* tif, tsample_t s) /* * Read the header for this strip/tile. */ + if (TIFFjpeg_read_header(sp, TRUE) != JPEG_HEADER_OK) return (0); + + tif->tif_rawcp = (uint8*) sp->src.next_input_byte; + tif->tif_rawcc = sp->src.bytes_in_buffer; + /* * Check image parameters and set decompression parameters. */ @@ -713,15 +1038,15 @@ JPEGPreDecode(TIFF* tif, tsample_t s) } else { if (segment_height > td->td_rowsperstrip) segment_height = td->td_rowsperstrip; - sp->bytesperline = TIFFOldScanlineSize(tif); + sp->bytesperline = TIFFScanlineSize(tif); } if (td->td_planarconfig == PLANARCONFIG_SEPARATE && s > 0) { /* * For PC 2, scale down the expected strip/tile size * to match a downsampled component */ - segment_width = TIFFhowmany(segment_width, sp->h_sampling); - segment_height = TIFFhowmany(segment_height, sp->v_sampling); + segment_width = TIFFhowmany_32(segment_width, sp->h_sampling); + segment_height = TIFFhowmany_32(segment_height, sp->v_sampling); } if (sp->cinfo.d.image_width < segment_width || sp->cinfo.d.image_height < segment_height) { @@ -755,65 +1080,28 @@ JPEGPreDecode(TIFF* tif, tsample_t s) } #ifdef JPEG_LIB_MK1 if (12 != td->td_bitspersample && 8 != td->td_bitspersample) { - TIFFErrorExt(tif->tif_clientdata, module, "Improper JPEG data precision"); - return (0); + TIFFErrorExt(tif->tif_clientdata, module, "Improper JPEG data precision"); + return (0); } - sp->cinfo.d.data_precision = td->td_bitspersample; - sp->cinfo.d.bits_in_jsample = td->td_bitspersample; + sp->cinfo.d.data_precision = td->td_bitspersample; + sp->cinfo.d.bits_in_jsample = td->td_bitspersample; #else if (sp->cinfo.d.data_precision != td->td_bitspersample) { - TIFFErrorExt(tif->tif_clientdata, module, "Improper JPEG data precision"); - return (0); + TIFFErrorExt(tif->tif_clientdata, module, "Improper JPEG data precision"); + return (0); } #endif if (td->td_planarconfig == PLANARCONFIG_CONTIG) { /* Component 0 should have expected sampling factors */ if (sp->cinfo.d.comp_info[0].h_samp_factor != sp->h_sampling || sp->cinfo.d.comp_info[0].v_samp_factor != sp->v_sampling) { - TIFFWarningExt(tif->tif_clientdata, module, - "Improper JPEG sampling factors %d,%d\n" - "Apparently should be %d,%d.", - sp->cinfo.d.comp_info[0].h_samp_factor, - sp->cinfo.d.comp_info[0].v_samp_factor, - sp->h_sampling, sp->v_sampling); - - /* - * There are potential security issues here - * for decoders that have already allocated - * buffers based on the expected sampling - * factors. Lets check the sampling factors - * dont exceed what we were expecting. - */ - if (sp->cinfo.d.comp_info[0].h_samp_factor - > sp->h_sampling - || sp->cinfo.d.comp_info[0].v_samp_factor - > sp->v_sampling) { - TIFFErrorExt(tif->tif_clientdata, - module, - "Cannot honour JPEG sampling factors" - " that exceed those specified."); - return (0); - } - - /* - * XXX: Files written by the Intergraph software - * has different sampling factors stored in the - * TIFF tags and in the JPEG structures. We will - * try to deduce Intergraph files by the presense - * of the tag 33918. - */ - if (!_TIFFFindFieldInfo(tif, 33918, TIFF_ANY)) { - TIFFWarningExt(tif->tif_clientdata, module, - "Decompressor will try reading with " - "sampling %d,%d.", - sp->cinfo.d.comp_info[0].h_samp_factor, - sp->cinfo.d.comp_info[0].v_samp_factor); - - sp->h_sampling = (uint16) - sp->cinfo.d.comp_info[0].h_samp_factor; - sp->v_sampling = (uint16) - sp->cinfo.d.comp_info[0].v_samp_factor; - } + TIFFErrorExt(tif->tif_clientdata, module, + "Improper JPEG sampling factors %d,%d\n" + "Apparently should be %d,%d.", + sp->cinfo.d.comp_info[0].h_samp_factor, + sp->cinfo.d.comp_info[0].v_samp_factor, + sp->h_sampling, sp->v_sampling); + return (0); } /* Rest should have sampling factors 1,1 */ for (ci = 1; ci < sp->cinfo.d.num_components; ci++) { @@ -835,11 +1123,11 @@ JPEGPreDecode(TIFF* tif, tsample_t s) if (td->td_planarconfig == PLANARCONFIG_CONTIG && sp->photometric == PHOTOMETRIC_YCBCR && sp->jpegcolormode == JPEGCOLORMODE_RGB) { - /* Convert YCbCr to RGB */ + /* Convert YCbCr to RGB */ sp->cinfo.d.jpeg_color_space = JCS_YCbCr; sp->cinfo.d.out_color_space = JCS_RGB; } else { - /* Suppress colorspace handling */ + /* Suppress colorspace handling */ sp->cinfo.d.jpeg_color_space = JCS_UNKNOWN; sp->cinfo.d.out_color_space = JCS_UNKNOWN; if (td->td_planarconfig == PLANARCONFIG_CONTIG && @@ -850,7 +1138,10 @@ JPEGPreDecode(TIFF* tif, tsample_t s) if (downsampled_output) { /* Need to use raw-data interface to libjpeg */ sp->cinfo.d.raw_data_out = TRUE; - tif->tif_decoderow = JPEGDecodeRaw; +#if JPEG_LIB_VERSION >= 70 + sp->cinfo.d.do_fancy_upsampling = FALSE; +#endif /* JPEG_LIB_VERSION >= 70 */ + tif->tif_decoderow = DecodeRowError; tif->tif_decodestrip = JPEGDecodeRaw; tif->tif_decodetile = JPEGDecodeRaw; } else { @@ -858,7 +1149,7 @@ JPEGPreDecode(TIFF* tif, tsample_t s) sp->cinfo.d.raw_data_out = FALSE; tif->tif_decoderow = JPEGDecode; tif->tif_decodestrip = JPEGDecode; - tif->tif_decodetile = JPEGDecode; + tif->tif_decodetile = JPEGDecode; } /* Start JPEG decompressor */ if (!TIFFjpeg_start_decompress(sp)) @@ -878,103 +1169,130 @@ JPEGPreDecode(TIFF* tif, tsample_t s) * "Standard" case: returned data is not downsampled. */ /*ARGSUSED*/ static int -JPEGDecode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) +JPEGDecode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s) { - JPEGState *sp = JState(tif); - tsize_t nrows; - (void) s; - - nrows = cc / sp->bytesperline; - if (cc % sp->bytesperline) - TIFFWarningExt(tif->tif_clientdata, tif->tif_name, "fractional scanline not read"); - - if( nrows > (int) sp->cinfo.d.image_height ) - nrows = sp->cinfo.d.image_height; - - /* data is expected to be read in multiples of a scanline */ - if (nrows) - { - JSAMPROW line_work_buf = NULL; + JPEGState *sp = JState(tif); + tmsize_t nrows; + (void) s; /* - ** For 6B, only use temporary buffer for 12 bit imagery. - ** For Mk1 always use it. + ** Update available information, buffer may have been refilled + ** between decode requests */ -#if !defined(JPEG_LIB_MK1) - if( sp->cinfo.d.data_precision == 12 ) + sp->src.next_input_byte = (const JOCTET*) tif->tif_rawcp; + sp->src.bytes_in_buffer = (size_t) tif->tif_rawcc; + + if( sp->bytesperline == 0 ) + return 0; + + nrows = cc / sp->bytesperline; + if (cc % sp->bytesperline) + TIFFWarningExt(tif->tif_clientdata, tif->tif_name, "fractional scanline not read"); + + if( nrows > (tmsize_t) sp->cinfo.d.image_height ) + nrows = sp->cinfo.d.image_height; + + /* data is expected to be read in multiples of a scanline */ + if (nrows) + { + JSAMPROW line_work_buf = NULL; + + /* + * For 6B, only use temporary buffer for 12 bit imagery. + * For Mk1 always use it. + */ +#if !defined(JPEG_LIB_MK1) + if( sp->cinfo.d.data_precision == 12 ) #endif - { - line_work_buf = (JSAMPROW) - _TIFFmalloc(sizeof(short) * sp->cinfo.d.output_width - * sp->cinfo.d.num_components ); - } + { + line_work_buf = (JSAMPROW) + _TIFFmalloc(sizeof(short) * sp->cinfo.d.output_width + * sp->cinfo.d.num_components ); + } - do { - if( line_work_buf != NULL ) - { - /* - ** In the MK1 case, we aways read into a 16bit buffer, and then - ** pack down to 12bit or 8bit. In 6B case we only read into 16 - ** bit buffer for 12bit data, which we need to repack. - */ - if (TIFFjpeg_read_scanlines(sp, &line_work_buf, 1) != 1) - return (0); + do { + if( line_work_buf != NULL ) + { + /* + * In the MK1 case, we aways read into a 16bit buffer, and then + * pack down to 12bit or 8bit. In 6B case we only read into 16 + * bit buffer for 12bit data, which we need to repack. + */ + if (TIFFjpeg_read_scanlines(sp, &line_work_buf, 1) != 1) + return (0); - if( sp->cinfo.d.data_precision == 12 ) - { - int value_pairs = (sp->cinfo.d.output_width - * sp->cinfo.d.num_components) / 2; - int iPair; + if( sp->cinfo.d.data_precision == 12 ) + { + int value_pairs = (sp->cinfo.d.output_width + * sp->cinfo.d.num_components) / 2; + int iPair; - for( iPair = 0; iPair < value_pairs; iPair++ ) - { - unsigned char *out_ptr = - ((unsigned char *) buf) + iPair * 3; - JSAMPLE *in_ptr = line_work_buf + iPair * 2; + for( iPair = 0; iPair < value_pairs; iPair++ ) + { + unsigned char *out_ptr = + ((unsigned char *) buf) + iPair * 3; + JSAMPLE *in_ptr = line_work_buf + iPair * 2; - out_ptr[0] = (in_ptr[0] & 0xff0) >> 4; - out_ptr[1] = ((in_ptr[0] & 0xf) << 4) - | ((in_ptr[1] & 0xf00) >> 8); - out_ptr[2] = ((in_ptr[1] & 0xff) >> 0); - } - } - else if( sp->cinfo.d.data_precision == 8 ) - { - int value_count = (sp->cinfo.d.output_width - * sp->cinfo.d.num_components); - int iValue; + out_ptr[0] = (in_ptr[0] & 0xff0) >> 4; + out_ptr[1] = ((in_ptr[0] & 0xf) << 4) + | ((in_ptr[1] & 0xf00) >> 8); + out_ptr[2] = ((in_ptr[1] & 0xff) >> 0); + } + } + else if( sp->cinfo.d.data_precision == 8 ) + { + int value_count = (sp->cinfo.d.output_width + * sp->cinfo.d.num_components); + int iValue; - for( iValue = 0; iValue < value_count; iValue++ ) - { - ((unsigned char *) buf)[iValue] = - line_work_buf[iValue] & 0xff; - } - } - } - else - { - /* - ** In the libjpeg6b 8bit case. We read directly into the - ** TIFF buffer. - */ - JSAMPROW bufptr = (JSAMPROW)buf; - - if (TIFFjpeg_read_scanlines(sp, &bufptr, 1) != 1) - return (0); - } + for( iValue = 0; iValue < value_count; iValue++ ) + { + ((unsigned char *) buf)[iValue] = + line_work_buf[iValue] & 0xff; + } + } + } + else + { + /* + * In the libjpeg6b 8bit case. We read directly into the + * TIFF buffer. + */ + JSAMPROW bufptr = (JSAMPROW)buf; - ++tif->tif_row; - buf += sp->bytesperline; - cc -= sp->bytesperline; - } while (--nrows > 0); + if (TIFFjpeg_read_scanlines(sp, &bufptr, 1) != 1) + return (0); + } - if( line_work_buf != NULL ) - _TIFFfree( line_work_buf ); - } + ++tif->tif_row; + buf += sp->bytesperline; + cc -= sp->bytesperline; + } while (--nrows > 0); - /* Close down the decompressor if we've finished the strip or tile. */ - return sp->cinfo.d.output_scanline < sp->cinfo.d.output_height - || TIFFjpeg_finish_decompress(sp); + if( line_work_buf != NULL ) + _TIFFfree( line_work_buf ); + } + + /* Update information on consumed data */ + tif->tif_rawcp = (uint8*) sp->src.next_input_byte; + tif->tif_rawcc = sp->src.bytes_in_buffer; + + /* Close down the decompressor if we've finished the strip or tile. */ + return sp->cinfo.d.output_scanline < sp->cinfo.d.output_height + || TIFFjpeg_finish_decompress(sp); +} + +/*ARGSUSED*/ static int +DecodeRowError(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s) + +{ + (void) buf; + (void) cc; + (void) s; + + TIFFErrorExt(tif->tif_clientdata, "TIFFReadScanline", + "scanline oriented access is not supported for downsampled JPEG compressed images, consider enabling TIFF_JPEGCOLORMODE as JPEGCOLORMODE_RGB." ); + return 0; } /* @@ -982,28 +1300,40 @@ JPEGDecode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) * Returned data is downsampled per sampling factors. */ /*ARGSUSED*/ static int -JPEGDecodeRaw(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) +JPEGDecodeRaw(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s) { JPEGState *sp = JState(tif); - tsize_t nrows; + tmsize_t nrows; (void) s; /* data is expected to be read in multiples of a scanline */ if ( (nrows = sp->cinfo.d.image_height) ) { + /* Cb,Cr both have sampling factors 1, so this is correct */ JDIMENSION clumps_per_line = sp->cinfo.d.comp_info[1].downsampled_width; int samples_per_clump = sp->samplesperclump; -#ifdef JPEG_LIB_MK1 +#if defined(JPEG_LIB_MK1_OR_12BIT) unsigned short* tmpbuf = _TIFFmalloc(sizeof(unsigned short) * - sp->cinfo.d.output_width * - sp->cinfo.d.num_components); + sp->cinfo.d.output_width * + sp->cinfo.d.num_components); + if(tmpbuf==NULL) { + TIFFErrorExt(tif->tif_clientdata, "JPEGDecodeRaw", + "Out of memory"); + return 0; + } #endif do { jpeg_component_info *compptr; int ci, clumpoffset; + if( cc < sp->bytesperline ) { + TIFFErrorExt(tif->tif_clientdata, "JPEGDecodeRaw", + "application buffer not large enough for all data."); + return 0; + } + /* Reload downsampled-data buffer if needed */ if (sp->scancount >= DCTSIZE) { int n = sp->cinfo.d.max_v_samp_factor * DCTSIZE; @@ -1017,20 +1347,25 @@ JPEGDecodeRaw(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) */ clumpoffset = 0; /* first sample in clump */ for (ci = 0, compptr = sp->cinfo.d.comp_info; - ci < sp->cinfo.d.num_components; - ci++, compptr++) { + ci < sp->cinfo.d.num_components; + ci++, compptr++) { int hsamp = compptr->h_samp_factor; int vsamp = compptr->v_samp_factor; int ypos; for (ypos = 0; ypos < vsamp; ypos++) { JSAMPLE *inptr = sp->ds_buffer[ci][sp->scancount*vsamp + ypos]; -#ifdef JPEG_LIB_MK1 + JDIMENSION nclump; +#if defined(JPEG_LIB_MK1_OR_12BIT) JSAMPLE *outptr = (JSAMPLE*)tmpbuf + clumpoffset; #else JSAMPLE *outptr = (JSAMPLE*)buf + clumpoffset; + if (cc < (tmsize_t) (clumpoffset + samples_per_clump*(clumps_per_line-1) + hsamp)) { + TIFFErrorExt(tif->tif_clientdata, "JPEGDecodeRaw", + "application buffer not large enough for all data, possible subsampling issue"); + return 0; + } #endif - JDIMENSION nclump; if (hsamp == 1) { /* fast path for at least Cb and Cr */ @@ -1041,7 +1376,7 @@ JPEGDecodeRaw(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) } else { int xpos; - /* general case */ + /* general case */ for (nclump = clumps_per_line; nclump-- > 0; ) { for (xpos = 0; xpos < hsamp; xpos++) outptr[xpos] = *inptr++; @@ -1052,7 +1387,7 @@ JPEGDecodeRaw(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) } } -#ifdef JPEG_LIB_MK1 +#if defined(JPEG_LIB_MK1_OR_12BIT) { if (sp->cinfo.d.data_precision == 8) { @@ -1064,17 +1399,17 @@ JPEGDecodeRaw(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) } } else - { // 12-bit + { /* 12-bit */ int value_pairs = (sp->cinfo.d.output_width - * sp->cinfo.d.num_components) / 2; + * sp->cinfo.d.num_components) / 2; int iPair; for( iPair = 0; iPair < value_pairs; iPair++ ) { unsigned char *out_ptr = ((unsigned char *) buf) + iPair * 3; - JSAMPLE *in_ptr = tmpbuf + iPair * 2; + JSAMPLE *in_ptr = (JSAMPLE *) (tmpbuf + iPair * 2); out_ptr[0] = (in_ptr[0] & 0xff0) >> 4; out_ptr[1] = ((in_ptr[0] & 0xf) << 4) - | ((in_ptr[1] & 0xf00) >> 8); + | ((in_ptr[1] & 0xf00) >> 8); out_ptr[2] = ((in_ptr[1] & 0xff) >> 0); } } @@ -1083,14 +1418,14 @@ JPEGDecodeRaw(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) sp->scancount ++; tif->tif_row += sp->v_sampling; - /* increment/decrement of buf and cc is still incorrect, but should not matter - * TODO: resolve this */ + buf += sp->bytesperline; cc -= sp->bytesperline; + nrows -= sp->v_sampling; } while (nrows > 0); -#ifdef JPEG_LIB_MK1 +#if defined(JPEG_LIB_MK1_OR_12BIT) _TIFFfree(tmpbuf); #endif @@ -1098,7 +1433,7 @@ JPEGDecodeRaw(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) /* Close down the decompressor if done. */ return sp->cinfo.d.output_scanline < sp->cinfo.d.output_height - || TIFFjpeg_finish_decompress(sp); + || TIFFjpeg_finish_decompress(sp); } @@ -1131,8 +1466,6 @@ prepare_JPEGTables(TIFF* tif) { JPEGState* sp = JState(tif); - JPEGInitializeLibJPEG( tif, 0, 0 ); - /* Initialize quant tables for current quality setting */ if (!TIFFjpeg_set_quality(sp, sp->jpegquality, FALSE)) return (0); @@ -1167,7 +1500,12 @@ JPEGSetupEncode(TIFF* tif) TIFFDirectory *td = &tif->tif_dir; static const char module[] = "JPEGSetupEncode"; - JPEGInitializeLibJPEG( tif, 1, 0 ); +#if defined(JPEG_DUAL_MODE_8_12) && !defined(TIFFInitJPEG) + if( tif->tif_dir.td_bitspersample == 12 ) + return TIFFReInitJPEG_12( tif, COMPRESSION_JPEG, 1 ); +#endif + + JPEGInitializeLibJPEG( tif, FALSE ); assert(sp != NULL); assert(!sp->cinfo.comm.is_decompressor); @@ -1295,7 +1633,7 @@ JPEGSetupEncode(TIFF* tif) * Set encoding state at the start of a strip or tile. */ static int -JPEGPreEncode(TIFF* tif, tsample_t s) +JPEGPreEncode(TIFF* tif, uint16 s) { JPEGState *sp = JState(tif); TIFFDirectory *td = &tif->tif_dir; @@ -1304,6 +1642,12 @@ JPEGPreEncode(TIFF* tif, tsample_t s) int downsampled_input; assert(sp != NULL); + + if (sp->cinfo.comm.is_decompressor == 1) + { + tif->tif_setupencode( tif ); + } + assert(!sp->cinfo.comm.is_decompressor); /* * Set encoding parameters for this strip/tile. @@ -1317,14 +1661,14 @@ JPEGPreEncode(TIFF* tif, tsample_t s) segment_height = td->td_imagelength - tif->tif_row; if (segment_height > td->td_rowsperstrip) segment_height = td->td_rowsperstrip; - sp->bytesperline = TIFFOldScanlineSize(tif); + sp->bytesperline = TIFFScanlineSize(tif); } if (td->td_planarconfig == PLANARCONFIG_SEPARATE && s > 0) { /* for PC 2, scale down the strip/tile size * to match a downsampled component */ - segment_width = TIFFhowmany(segment_width, sp->h_sampling); - segment_height = TIFFhowmany(segment_height, sp->v_sampling); + segment_width = TIFFhowmany_32(segment_width, sp->h_sampling); + segment_height = TIFFhowmany_32(segment_height, sp->v_sampling); } if (segment_width > 65535 || segment_height > 65535) { TIFFErrorExt(tif->tif_clientdata, module, "Strip/tile too large for JPEG"); @@ -1352,8 +1696,15 @@ JPEGPreEncode(TIFF* tif, tsample_t s) sp->cinfo.c.comp_info[0].h_samp_factor = sp->h_sampling; sp->cinfo.c.comp_info[0].v_samp_factor = sp->v_sampling; } else { - sp->cinfo.c.in_color_space = JCS_UNKNOWN; - if (!TIFFjpeg_set_colorspace(sp, JCS_UNKNOWN)) + if ((td->td_photometric == PHOTOMETRIC_MINISWHITE || td->td_photometric == PHOTOMETRIC_MINISBLACK) && td->td_samplesperpixel == 1) + sp->cinfo.c.in_color_space = JCS_GRAYSCALE; + else if (td->td_photometric == PHOTOMETRIC_RGB && td->td_samplesperpixel == 3) + sp->cinfo.c.in_color_space = JCS_RGB; + else if (td->td_photometric == PHOTOMETRIC_SEPARATED && td->td_samplesperpixel == 4) + sp->cinfo.c.in_color_space = JCS_CMYK; + else + sp->cinfo.c.in_color_space = JCS_UNKNOWN; + if (!TIFFjpeg_set_colorspace(sp, sp->cinfo.c.in_color_space)) return (0); /* jpeg_set_colorspace set all sampling factors to 1 */ } @@ -1375,7 +1726,7 @@ JPEGPreEncode(TIFF* tif, tsample_t s) sp->cinfo.c.write_Adobe_marker = FALSE; /* set up table handling correctly */ if (!TIFFjpeg_set_quality(sp, sp->jpegquality, FALSE)) - return (0); + return (0); if (! (sp->jpegtablesmode & JPEGTABLESMODE_QUANT)) { unsuppress_quant_table(sp, 0); unsuppress_quant_table(sp, 1); @@ -1416,31 +1767,69 @@ JPEGPreEncode(TIFF* tif, tsample_t s) * "Standard" case: incoming data is not downsampled. */ static int -JPEGEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) +JPEGEncode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s) { JPEGState *sp = JState(tif); - tsize_t nrows; + tmsize_t nrows; JSAMPROW bufptr[1]; + short *line16 = NULL; + int line16_count = 0; (void) s; assert(sp != NULL); /* data is expected to be supplied in multiples of a scanline */ nrows = cc / sp->bytesperline; if (cc % sp->bytesperline) - TIFFWarningExt(tif->tif_clientdata, tif->tif_name, "fractional scanline discarded"); + TIFFWarningExt(tif->tif_clientdata, tif->tif_name, + "fractional scanline discarded"); /* The last strip will be limited to image size */ if( !isTiled(tif) && tif->tif_row+nrows > tif->tif_dir.td_imagelength ) nrows = tif->tif_dir.td_imagelength - tif->tif_row; + if( sp->cinfo.c.data_precision == 12 ) + { + line16_count = (sp->bytesperline * 2) / 3; + line16 = (short *) _TIFFmalloc(sizeof(short) * line16_count); + // FIXME: undiagnosed malloc failure + } + while (nrows-- > 0) { + + if( sp->cinfo.c.data_precision == 12 ) + { + + int value_pairs = line16_count / 2; + int iPair; + + bufptr[0] = (JSAMPROW) line16; + + for( iPair = 0; iPair < value_pairs; iPair++ ) + { + unsigned char *in_ptr = + ((unsigned char *) buf) + iPair * 3; + JSAMPLE *out_ptr = (JSAMPLE *) (line16 + iPair * 2); + + out_ptr[0] = (in_ptr[0] << 4) | ((in_ptr[1] & 0xf0) >> 4); + out_ptr[1] = ((in_ptr[1] & 0x0f) << 8) | in_ptr[2]; + } + } + else + { bufptr[0] = (JSAMPROW) buf; - if (TIFFjpeg_write_scanlines(sp, bufptr, 1) != 1) - return (0); - if (nrows > 0) - tif->tif_row++; - buf += sp->bytesperline; + } + if (TIFFjpeg_write_scanlines(sp, bufptr, 1) != 1) + return (0); + if (nrows > 0) + tif->tif_row++; + buf += sp->bytesperline; } + + if( sp->cinfo.c.data_precision == 12 ) + { + _TIFFfree( line16 ); + } + return (1); } @@ -1449,17 +1838,17 @@ JPEGEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) * Incoming data is expected to be downsampled per sampling factors. */ static int -JPEGEncodeRaw(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) +JPEGEncodeRaw(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s) { JPEGState *sp = JState(tif); JSAMPLE* inptr; JSAMPLE* outptr; - tsize_t nrows; + tmsize_t nrows; JDIMENSION clumps_per_line, nclump; int clumpoffset, ci, xpos, ypos; jpeg_component_info* compptr; int samples_per_clump = sp->samplesperclump; - tsize_t bytesperclumpline; + tmsize_t bytesperclumpline; (void) s; assert(sp != NULL); @@ -1523,7 +1912,7 @@ JPEGEncodeRaw(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) sp->scancount = 0; } tif->tif_row += sp->v_sampling; - buf += sp->bytesperline; + buf += bytesperclumpline; nrows -= sp->v_sampling; } return (1); @@ -1549,12 +1938,12 @@ JPEGPostEncode(TIFF* tif) ci < sp->cinfo.c.num_components; ci++, compptr++) { int vsamp = compptr->v_samp_factor; - tsize_t row_width = compptr->width_in_blocks * DCTSIZE + tmsize_t row_width = compptr->width_in_blocks * DCTSIZE * sizeof(JSAMPLE); for (ypos = sp->scancount * vsamp; ypos < DCTSIZE * vsamp; ypos++) { - _TIFFmemcpy((tdata_t)sp->ds_buffer[ci][ypos], - (tdata_t)sp->ds_buffer[ci][ypos-1], + _TIFFmemcpy((void*)sp->ds_buffer[ci][ypos], + (void*)sp->ds_buffer[ci][ypos-1], row_width); } @@ -1578,10 +1967,12 @@ JPEGCleanup(TIFF* tif) tif->tif_tagmethods.vsetfield = sp->vsetparent; tif->tif_tagmethods.printdir = sp->printdir; - if( sp->cinfo_initialized ) - TIFFjpeg_destroy(sp); /* release libjpeg resources */ - if (sp->jpegtables) /* tag value */ - _TIFFfree(sp->jpegtables); + if( sp != NULL ) { + if( sp->cinfo_initialized ) + TIFFjpeg_destroy(sp); /* release libjpeg resources */ + if (sp->jpegtables) /* tag value */ + _TIFFfree(sp->jpegtables); + } _TIFFfree(tif->tif_data); /* release local state */ tif->tif_data = NULL; @@ -1618,24 +2009,23 @@ JPEGResetUpsampled( TIFF* tif ) * Should we really be doing this now if image size isn't set? */ if( tif->tif_tilesize > 0 ) - tif->tif_tilesize = isTiled(tif) ? TIFFTileSize(tif) : (tsize_t) -1; - - if(tif->tif_scanlinesize > 0 ) + tif->tif_tilesize = isTiled(tif) ? TIFFTileSize(tif) : (tmsize_t)(-1); + if( tif->tif_scanlinesize > 0 ) tif->tif_scanlinesize = TIFFScanlineSize(tif); } static int -JPEGVSetField(TIFF* tif, ttag_t tag, va_list ap) +JPEGVSetField(TIFF* tif, uint32 tag, va_list ap) { JPEGState* sp = JState(tif); - const TIFFFieldInfo* fip; + const TIFFField* fip; uint32 v32; assert(sp != NULL); switch (tag) { case TIFFTAG_JPEGTABLES: - v32 = va_arg(ap, uint32); + v32 = (uint32) va_arg(ap, uint32); if (v32 == 0) { /* XXX */ return (0); @@ -1646,43 +2036,31 @@ JPEGVSetField(TIFF* tif, ttag_t tag, va_list ap) TIFFSetFieldBit(tif, FIELD_JPEGTABLES); break; case TIFFTAG_JPEGQUALITY: - sp->jpegquality = va_arg(ap, int); + sp->jpegquality = (int) va_arg(ap, int); return (1); /* pseudo tag */ case TIFFTAG_JPEGCOLORMODE: - sp->jpegcolormode = va_arg(ap, int); - JPEGResetUpsampled( tif ); + sp->jpegcolormode = (int) va_arg(ap, int); + JPEGResetUpsampled( tif ); return (1); /* pseudo tag */ case TIFFTAG_PHOTOMETRIC: - { - int ret_value = (*sp->vsetparent)(tif, tag, ap); - JPEGResetUpsampled( tif ); - return ret_value; - } + { + int ret_value = (*sp->vsetparent)(tif, tag, ap); + JPEGResetUpsampled( tif ); + return ret_value; + } case TIFFTAG_JPEGTABLESMODE: - sp->jpegtablesmode = va_arg(ap, int); + sp->jpegtablesmode = (int) va_arg(ap, int); return (1); /* pseudo tag */ case TIFFTAG_YCBCRSUBSAMPLING: - /* mark the fact that we have a real ycbcrsubsampling! */ + /* mark the fact that we have a real ycbcrsubsampling! */ sp->ycbcrsampling_fetched = 1; - /* should we be recomputing upsampling info here? */ + /* should we be recomputing upsampling info here? */ return (*sp->vsetparent)(tif, tag, ap); - case TIFFTAG_FAXRECVPARAMS: - sp->recvparams = va_arg(ap, uint32); - break; - case TIFFTAG_FAXSUBADDRESS: - _TIFFsetString(&sp->subaddress, va_arg(ap, char*)); - break; - case TIFFTAG_FAXRECVTIME: - sp->recvtime = va_arg(ap, uint32); - break; - case TIFFTAG_FAXDCS: - _TIFFsetString(&sp->faxdcs, va_arg(ap, char*)); - break; default: return (*sp->vsetparent)(tif, tag, ap); } - if ((fip = _TIFFFieldWithTag(tif, tag))) { + if ((fip = TIFFFieldWithTag(tif, tag))) { TIFFSetFieldBit(tif, fip->field_bit); } else { return (0); @@ -1692,83 +2070,8 @@ JPEGVSetField(TIFF* tif, ttag_t tag, va_list ap) return (1); } -/* - * Some JPEG-in-TIFF produces do not emit the YCBCRSUBSAMPLING values in - * the TIFF tags, but still use non-default (2,2) values within the jpeg - * data stream itself. In order for TIFF applications to work properly - * - for instance to get the strip buffer size right - it is imperative - * that the subsampling be available before we start reading the image - * data normally. This function will attempt to load the first strip in - * order to get the sampling values from the jpeg data stream. Various - * hacks are various places are done to ensure this function gets called - * before the td_ycbcrsubsampling values are used from the directory structure, - * including calling TIFFGetField() for the YCBCRSUBSAMPLING field from - * TIFFStripSize(), and the printing code in tif_print.c. - * - * Note that JPEGPreDeocode() will produce a fairly loud warning when the - * discovered sampling does not match the default sampling (2,2) or whatever - * was actually in the tiff tags. - * - * Problems: - * o This code will cause one whole strip/tile of compressed data to be - * loaded just to get the tags right, even if the imagery is never read. - * It would be more efficient to just load a bit of the header, and - * initialize things from that. - * - * See the bug in bugzilla for details: - * - * http://bugzilla.remotesensing.org/show_bug.cgi?id=168 - * - * Frank Warmerdam, July 2002 - */ - -static void -JPEGFixupTestSubsampling( TIFF * tif ) -{ -#ifdef CHECK_JPEG_YCBCR_SUBSAMPLING - JPEGState *sp = JState(tif); - TIFFDirectory *td = &tif->tif_dir; - - JPEGInitializeLibJPEG( tif, 0, 0 ); - - /* - * Some JPEG-in-TIFF files don't provide the ycbcrsampling tags, - * and use a sampling schema other than the default 2,2. To handle - * this we actually have to scan the header of a strip or tile of - * jpeg data to get the sampling. - */ - if( !sp->cinfo.comm.is_decompressor - || sp->ycbcrsampling_fetched - || td->td_photometric != PHOTOMETRIC_YCBCR ) - return; - - sp->ycbcrsampling_fetched = 1; - if( TIFFIsTiled( tif ) ) - { - if( !TIFFFillTile( tif, 0 ) ) - return; - } - else - { - if( !TIFFFillStrip( tif, 0 ) ) - return; - } - - TIFFSetField( tif, TIFFTAG_YCBCRSUBSAMPLING, - (uint16) sp->h_sampling, (uint16) sp->v_sampling ); - - /* - ** We want to clear the loaded strip so the application has time - ** to set JPEGCOLORMODE or other behavior modifiers. This essentially - ** undoes the JPEGPreDecode triggers by TIFFFileStrip(). (#1936) - */ - tif->tif_curstrip = -1; - -#endif /* CHECK_JPEG_YCBCR_SUBSAMPLING */ -} - static int -JPEGVGetField(TIFF* tif, ttag_t tag, va_list ap) +JPEGVGetField(TIFF* tif, uint32 tag, va_list ap) { JPEGState* sp = JState(tif); @@ -1788,21 +2091,6 @@ JPEGVGetField(TIFF* tif, ttag_t tag, va_list ap) case TIFFTAG_JPEGTABLESMODE: *va_arg(ap, int*) = sp->jpegtablesmode; break; - case TIFFTAG_YCBCRSUBSAMPLING: - JPEGFixupTestSubsampling( tif ); - return (*sp->vgetparent)(tif, tag, ap); - case TIFFTAG_FAXRECVPARAMS: - *va_arg(ap, uint32*) = sp->recvparams; - break; - case TIFFTAG_FAXSUBADDRESS: - *va_arg(ap, char**) = sp->subaddress; - break; - case TIFFTAG_FAXRECVTIME: - *va_arg(ap, uint32*) = sp->recvtime; - break; - case TIFFTAG_FAXDCS: - *va_arg(ap, char**) = sp->faxdcs; - break; default: return (*sp->vgetparent)(tif, tag, ap); } @@ -1815,21 +2103,15 @@ JPEGPrintDir(TIFF* tif, FILE* fd, long flags) JPEGState* sp = JState(tif); assert(sp != NULL); - (void) flags; - if (TIFFFieldSet(tif,FIELD_JPEGTABLES)) - fprintf(fd, " JPEG Tables: (%lu bytes)\n", - (unsigned long) sp->jpegtables_length); - if (TIFFFieldSet(tif,FIELD_RECVPARAMS)) - fprintf(fd, " Fax Receive Parameters: %08lx\n", - (unsigned long) sp->recvparams); - if (TIFFFieldSet(tif,FIELD_SUBADDRESS)) - fprintf(fd, " Fax SubAddress: %s\n", sp->subaddress); - if (TIFFFieldSet(tif,FIELD_RECVTIME)) - fprintf(fd, " Fax Receive Time: %lu secs\n", - (unsigned long) sp->recvtime); - if (TIFFFieldSet(tif,FIELD_FAXDCS)) - fprintf(fd, " Fax DCS: %s\n", sp->faxdcs); + + if( sp != NULL ) { + if (TIFFFieldSet(tif,FIELD_JPEGTABLES)) + fprintf(fd, " JPEG Tables: (%lu bytes)\n", + (unsigned long) sp->jpegtables_length); + if (sp->printdir) + (*sp->printdir)(tif, fd, flags); + } } static uint32 @@ -1840,7 +2122,7 @@ JPEGDefaultStripSize(TIFF* tif, uint32 s) s = (*sp->defsparent)(tif, s); if (s < td->td_imagelength) - s = TIFFroundup(s, td->td_ycbcrsubsampling[1] * DCTSIZE); + s = TIFFroundup_32(s, td->td_ycbcrsubsampling[1] * DCTSIZE); return (s); } @@ -1851,8 +2133,8 @@ JPEGDefaultTileSize(TIFF* tif, uint32* tw, uint32* th) TIFFDirectory *td = &tif->tif_dir; (*sp->deftparent)(tif, tw, th); - *tw = TIFFroundup(*tw, td->td_ycbcrsubsampling[0] * DCTSIZE); - *th = TIFFroundup(*th, td->td_ycbcrsubsampling[1] * DCTSIZE); + *tw = TIFFroundup_32(*tw, td->td_ycbcrsubsampling[0] * DCTSIZE); + *th = TIFFroundup_32(*th, td->td_ycbcrsubsampling[1] * DCTSIZE); } /* @@ -1877,19 +2159,15 @@ JPEGDefaultTileSize(TIFF* tif, uint32* tw, uint32* th) * NFW, Feb 3rd, 2003. */ -static int JPEGInitializeLibJPEG( TIFF * tif, int force_encode, int force_decode ) +static int JPEGInitializeLibJPEG( TIFF * tif, int decompress ) { JPEGState* sp = JState(tif); - uint32 *byte_counts = NULL; - int data_is_empty = TRUE; - int decompress; - if(sp->cinfo_initialized) { - if( force_encode && sp->cinfo.comm.is_decompressor ) + if( !decompress && sp->cinfo.comm.is_decompressor ) TIFFjpeg_destroy( sp ); - else if( force_decode && !sp->cinfo.comm.is_decompressor ) + else if( decompress && !sp->cinfo.comm.is_decompressor ) TIFFjpeg_destroy( sp ); else return 1; @@ -1897,42 +2175,12 @@ static int JPEGInitializeLibJPEG( TIFF * tif, int force_encode, int force_decode sp->cinfo_initialized = 0; } - /* - * Do we have tile data already? Make sure we initialize the - * the state in decompressor mode if we have tile data, even if we - * are not in read-only file access mode. - */ - if( TIFFIsTiled( tif ) - && TIFFGetField( tif, TIFFTAG_TILEBYTECOUNTS, &byte_counts ) - && byte_counts != NULL ) - { - data_is_empty = byte_counts[0] == 0; - } - if( !TIFFIsTiled( tif ) - && TIFFGetField( tif, TIFFTAG_STRIPBYTECOUNTS, &byte_counts) - && byte_counts != NULL ) - { - data_is_empty = byte_counts[0] == 0; - } - - if( force_decode ) - decompress = 1; - else if( force_encode ) - decompress = 0; - else if( tif->tif_mode == O_RDONLY ) - decompress = 1; - else if( data_is_empty ) - decompress = 0; - else - decompress = 1; - /* * Initialize libjpeg. */ if ( decompress ) { if (!TIFFjpeg_create_decompress(sp)) return (0); - } else { if (!TIFFjpeg_create_compress(sp)) return (0); @@ -1953,7 +2201,7 @@ TIFFInitJPEG(TIFF* tif, int scheme) /* * Merge codec-specific tag information. */ - if (!_TIFFMergeFieldInfo(tif, jpegFieldInfo, N(jpegFieldInfo))) { + if (!_TIFFMergeFields(tif, jpegFields, TIFFArrayCount(jpegFields))) { TIFFErrorExt(tif->tif_clientdata, "TIFFInitJPEG", "Merging JPEG codec-specific tags failed"); @@ -1963,7 +2211,7 @@ TIFFInitJPEG(TIFF* tif, int scheme) /* * Allocate state block so tag methods have storage to record values. */ - tif->tif_data = (tidata_t) _TIFFmalloc(sizeof (JPEGState)); + tif->tif_data = (uint8*) _TIFFmalloc(sizeof (JPEGState)); if (tif->tif_data == NULL) { TIFFErrorExt(tif->tif_clientdata, @@ -1991,16 +2239,12 @@ TIFFInitJPEG(TIFF* tif, int scheme) sp->jpegquality = 75; /* Default IJG quality */ sp->jpegcolormode = JPEGCOLORMODE_RAW; sp->jpegtablesmode = JPEGTABLESMODE_QUANT | JPEGTABLESMODE_HUFF; - - sp->recvparams = 0; - sp->subaddress = NULL; - sp->faxdcs = NULL; - sp->ycbcrsampling_fetched = 0; /* * Install codec methods. */ + tif->tif_fixuptags = JPEGFixupTags; tif->tif_setupdecode = JPEGSetupDecode; tif->tif_predecode = JPEGPreDecode; tif->tif_decoderow = JPEGDecode; @@ -2011,7 +2255,7 @@ TIFFInitJPEG(TIFF* tif, int scheme) tif->tif_postencode = JPEGPostEncode; tif->tif_encoderow = JPEGEncode; tif->tif_encodestrip = JPEGEncode; - tif->tif_encodetile = JPEGEncode; + tif->tif_encodetile = JPEGEncode; tif->tif_cleanup = JPEGCleanup; sp->defsparent = tif->tif_defstripsize; tif->tif_defstripsize = JPEGDefaultStripSize; @@ -2040,16 +2284,11 @@ here hopefully is harmless. */ sp->jpegtables_length = SIZE_OF_JPEGTABLES; sp->jpegtables = (void *) _TIFFmalloc(sp->jpegtables_length); + // FIXME: NULL-deref after malloc failure _TIFFmemset(sp->jpegtables, 0, SIZE_OF_JPEGTABLES); #undef SIZE_OF_JPEGTABLES } - /* - * Mark the TIFFTAG_YCBCRSAMPLES as present even if it is not - * see: JPEGFixupTestSubsampling(). - */ - TIFFSetFieldBit( tif, FIELD_YCBCRSUBSAMPLING ); - return 1; } #endif /* JPEG_SUPPORT */ diff --git a/dll/3rdparty/libtiff/tif_jpeg_12.c b/dll/3rdparty/libtiff/tif_jpeg_12.c new file mode 100644 index 00000000000..87aaa19e0b1 --- /dev/null +++ b/dll/3rdparty/libtiff/tif_jpeg_12.c @@ -0,0 +1,65 @@ + +#include "tiffiop.h" + +#if defined(JPEG_DUAL_MODE_8_12) + +# define TIFFInitJPEG TIFFInitJPEG_12 + +# include LIBJPEG_12_PATH + +# include "tif_jpeg.c" + +int TIFFReInitJPEG_12( TIFF *tif, int scheme, int is_encode ) + +{ + JPEGState* sp; + + assert(scheme == COMPRESSION_JPEG); + + sp = JState(tif); + sp->tif = tif; /* back link */ + + /* + * Override parent get/set field methods. + */ + tif->tif_tagmethods.vgetfield = JPEGVGetField; /* hook for codec tags */ + tif->tif_tagmethods.vsetfield = JPEGVSetField; /* hook for codec tags */ + tif->tif_tagmethods.printdir = JPEGPrintDir; /* hook for codec tags */ + + /* + * Install codec methods. + */ + tif->tif_fixuptags = JPEGFixupTags; + tif->tif_setupdecode = JPEGSetupDecode; + tif->tif_predecode = JPEGPreDecode; + tif->tif_decoderow = JPEGDecode; + tif->tif_decodestrip = JPEGDecode; + tif->tif_decodetile = JPEGDecode; + tif->tif_setupencode = JPEGSetupEncode; + tif->tif_preencode = JPEGPreEncode; + tif->tif_postencode = JPEGPostEncode; + tif->tif_encoderow = JPEGEncode; + tif->tif_encodestrip = JPEGEncode; + tif->tif_encodetile = JPEGEncode; + tif->tif_cleanup = JPEGCleanup; + tif->tif_defstripsize = JPEGDefaultStripSize; + tif->tif_deftilesize = JPEGDefaultTileSize; + tif->tif_flags |= TIFF_NOBITREV; /* no bit reversal, please */ + + sp->cinfo_initialized = FALSE; + + if( is_encode ) + return JPEGSetupEncode(tif); + else + return JPEGSetupDecode(tif); +} + +#endif /* defined(JPEG_DUAL_MODE_8_12) */ + +/* + * Local Variables: + * mode: c + * c-basic-offset: 8 + * fill-column: 78 + * End: + */ diff --git a/dll/3rdparty/libtiff/tif_luv.c b/dll/3rdparty/libtiff/tif_luv.c index eb622b9b0bf..eba6c08ebd9 100644 --- a/dll/3rdparty/libtiff/tif_luv.c +++ b/dll/3rdparty/libtiff/tif_luv.c @@ -1,4 +1,4 @@ -/* $Id: tif_luv.c,v 1.17.2.4 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Id: tif_luv.c,v 1.35 2011-04-02 20:54:09 bfriesen Exp $ */ /* * Copyright (c) 1997 Greg Ward Larson @@ -155,40 +155,44 @@ * State block for each open TIFF * file using LogLuv compression/decompression. */ -typedef struct logLuvState LogLuvState; +typedef struct logLuvState LogLuvState; struct logLuvState { - int user_datafmt; /* user data format */ - int encode_meth; /* encoding method */ - int pixel_size; /* bytes per pixel */ + int user_datafmt; /* user data format */ + int encode_meth; /* encoding method */ + int pixel_size; /* bytes per pixel */ - tidata_t* tbuf; /* translation buffer */ - int tbuflen; /* buffer length */ - void (*tfunc)(LogLuvState*, tidata_t, int); + uint8* tbuf; /* translation buffer */ + tmsize_t tbuflen; /* buffer length */ + void (*tfunc)(LogLuvState*, uint8*, tmsize_t); - TIFFVSetMethod vgetparent; /* super-class method */ - TIFFVSetMethod vsetparent; /* super-class method */ + TIFFVSetMethod vgetparent; /* super-class method */ + TIFFVSetMethod vsetparent; /* super-class method */ }; -#define DecoderState(tif) ((LogLuvState*) (tif)->tif_data) -#define EncoderState(tif) ((LogLuvState*) (tif)->tif_data) +#define DecoderState(tif) ((LogLuvState*) (tif)->tif_data) +#define EncoderState(tif) ((LogLuvState*) (tif)->tif_data) -#define SGILOGDATAFMT_UNKNOWN -1 +#define SGILOGDATAFMT_UNKNOWN -1 -#define MINRUN 4 /* minimum run length */ +#define MINRUN 4 /* minimum run length */ /* * Decode a string of 16-bit gray pixels. */ static int -LogL16Decode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) +LogL16Decode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s) { + static const char module[] = "LogL16Decode"; LogLuvState* sp = DecoderState(tif); - int shft, i, npixels; + int shft; + tmsize_t i; + tmsize_t npixels; unsigned char* bp; int16* tp; int16 b; - int cc, rc; + tmsize_t cc; + int rc; assert(s == 0); assert(sp != NULL); @@ -201,15 +205,15 @@ LogL16Decode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) assert(sp->tbuflen >= npixels); tp = (int16*) sp->tbuf; } - _TIFFmemset((tdata_t) tp, 0, npixels*sizeof (tp[0])); + _TIFFmemset((void*) tp, 0, npixels*sizeof (tp[0])); bp = (unsigned char*) tif->tif_rawcp; cc = tif->tif_rawcc; - /* get each byte string */ + /* get each byte string */ for (shft = 2*8; (shft -= 8) >= 0; ) { for (i = 0; i < npixels && cc > 0; ) if (*bp >= 128) { /* run */ - rc = *bp++ + (2-128); + rc = *bp++ + (2-128); /* TODO: potential input buffer overrun when decoding corrupt or truncated data */ b = (int16)(*bp++ << shft); cc -= 2; while (rc-- && i < npixels) @@ -220,16 +224,24 @@ LogL16Decode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) tp[i++] |= (int16)*bp++ << shft; } if (i != npixels) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "LogL16Decode: Not enough data at row %d (short %d pixels)", - tif->tif_row, npixels - i); - tif->tif_rawcp = (tidata_t) bp; +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + TIFFErrorExt(tif->tif_clientdata, module, + "Not enough data at row %lu (short %I64d pixels)", + (unsigned long) tif->tif_row, + (unsigned __int64) (npixels - i)); +#else + TIFFErrorExt(tif->tif_clientdata, module, + "Not enough data at row %lu (short %llu pixels)", + (unsigned long) tif->tif_row, + (unsigned long long) (npixels - i)); +#endif + tif->tif_rawcp = (uint8*) bp; tif->tif_rawcc = cc; return (0); } } (*sp->tfunc)(sp, op, npixels); - tif->tif_rawcp = (tidata_t) bp; + tif->tif_rawcp = (uint8*) bp; tif->tif_rawcc = cc; return (1); } @@ -238,10 +250,13 @@ LogL16Decode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) * Decode a string of 24-bit pixels. */ static int -LogLuvDecode24(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) +LogLuvDecode24(TIFF* tif, uint8* op, tmsize_t occ, uint16 s) { + static const char module[] = "LogLuvDecode24"; LogLuvState* sp = DecoderState(tif); - int cc, i, npixels; + tmsize_t cc; + tmsize_t i; + tmsize_t npixels; unsigned char* bp; uint32* tp; @@ -256,7 +271,7 @@ LogLuvDecode24(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) assert(sp->tbuflen >= npixels); tp = (uint32 *) sp->tbuf; } - /* copy to array of uint32 */ + /* copy to array of uint32 */ bp = (unsigned char*) tif->tif_rawcp; cc = tif->tif_rawcc; for (i = 0; i < npixels && cc > 0; i++) { @@ -264,12 +279,20 @@ LogLuvDecode24(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) bp += 3; cc -= 3; } - tif->tif_rawcp = (tidata_t) bp; + tif->tif_rawcp = (uint8*) bp; tif->tif_rawcc = cc; if (i != npixels) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "LogLuvDecode24: Not enough data at row %d (short %d pixels)", - tif->tif_row, npixels - i); +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + TIFFErrorExt(tif->tif_clientdata, module, + "Not enough data at row %lu (short %I64d pixels)", + (unsigned long) tif->tif_row, + (unsigned __int64) (npixels - i)); +#else + TIFFErrorExt(tif->tif_clientdata, module, + "Not enough data at row %lu (short %llu pixels)", + (unsigned long) tif->tif_row, + (unsigned long long) (npixels - i)); +#endif return (0); } (*sp->tfunc)(sp, op, npixels); @@ -280,14 +303,18 @@ LogLuvDecode24(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) * Decode a string of 32-bit pixels. */ static int -LogLuvDecode32(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) +LogLuvDecode32(TIFF* tif, uint8* op, tmsize_t occ, uint16 s) { + static const char module[] = "LogLuvDecode32"; LogLuvState* sp; - int shft, i, npixels; + int shft; + tmsize_t i; + tmsize_t npixels; unsigned char* bp; uint32* tp; uint32 b; - int cc, rc; + tmsize_t cc; + int rc; assert(s == 0); sp = DecoderState(tif); @@ -301,17 +328,17 @@ LogLuvDecode32(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) assert(sp->tbuflen >= npixels); tp = (uint32*) sp->tbuf; } - _TIFFmemset((tdata_t) tp, 0, npixels*sizeof (tp[0])); + _TIFFmemset((void*) tp, 0, npixels*sizeof (tp[0])); bp = (unsigned char*) tif->tif_rawcp; cc = tif->tif_rawcc; - /* get each byte string */ + /* get each byte string */ for (shft = 4*8; (shft -= 8) >= 0; ) { for (i = 0; i < npixels && cc > 0; ) if (*bp >= 128) { /* run */ rc = *bp++ + (2-128); b = (uint32)*bp++ << shft; - cc -= 2; + cc -= 2; /* TODO: potential input buffer overrun when decoding corrupt or truncated data */ while (rc-- && i < npixels) tp[i++] |= b; } else { /* non-run */ @@ -320,16 +347,24 @@ LogLuvDecode32(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) tp[i++] |= (uint32)*bp++ << shft; } if (i != npixels) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "LogLuvDecode32: Not enough data at row %d (short %d pixels)", - tif->tif_row, npixels - i); - tif->tif_rawcp = (tidata_t) bp; +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + TIFFErrorExt(tif->tif_clientdata, module, + "Not enough data at row %lu (short %I64d pixels)", + (unsigned long) tif->tif_row, + (unsigned __int64) (npixels - i)); +#else + TIFFErrorExt(tif->tif_clientdata, module, + "Not enough data at row %lu (short %llu pixels)", + (unsigned long) tif->tif_row, + (unsigned long long) (npixels - i)); +#endif + tif->tif_rawcp = (uint8*) bp; tif->tif_rawcc = cc; return (0); } } (*sp->tfunc)(sp, op, npixels); - tif->tif_rawcp = (tidata_t) bp; + tif->tif_rawcp = (uint8*) bp; tif->tif_rawcc = cc; return (1); } @@ -340,9 +375,9 @@ LogLuvDecode32(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) * is row by row. */ static int -LogLuvDecodeStrip(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +LogLuvDecodeStrip(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) { - tsize_t rowlen = TIFFScanlineSize(tif); + tmsize_t rowlen = TIFFScanlineSize(tif); assert(cc%rowlen == 0); while (cc && (*tif->tif_decoderow)(tif, bp, rowlen, s)) @@ -356,9 +391,9 @@ LogLuvDecodeStrip(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) * is row by row. */ static int -LogLuvDecodeTile(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +LogLuvDecodeTile(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) { - tsize_t rowlen = TIFFTileRowSize(tif); + tmsize_t rowlen = TIFFTileRowSize(tif); assert(cc%rowlen == 0); while (cc && (*tif->tif_decoderow)(tif, bp, rowlen, s)) @@ -370,14 +405,19 @@ LogLuvDecodeTile(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) * Encode a row of 16-bit pixels. */ static int -LogL16Encode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +LogL16Encode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) { LogLuvState* sp = EncoderState(tif); - int shft, i, j, npixels; - tidata_t op; + int shft; + tmsize_t i; + tmsize_t j; + tmsize_t npixels; + uint8* op; int16* tp; int16 b; - int occ, rc=0, mask, beg; + tmsize_t occ; + int rc=0, mask; + tmsize_t beg; assert(s == 0); assert(sp != NULL); @@ -390,7 +430,7 @@ LogL16Encode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) assert(sp->tbuflen >= npixels); (*sp->tfunc)(sp, bp, npixels); } - /* compress each byte string */ + /* compress each byte string */ op = tif->tif_rawcp; occ = tif->tif_rawdatasize - tif->tif_rawcc; for (shft = 2*8; (shft -= 8) >= 0; ) @@ -408,7 +448,7 @@ LogL16Encode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) b = (int16) (tp[beg] & mask); rc = 1; while (rc < 127+2 && beg+rc < npixels && - (tp[beg+rc] & mask) == b) + (tp[beg+rc] & mask) == b) rc++; if (rc >= MINRUN) break; /* long enough */ @@ -417,33 +457,33 @@ LogL16Encode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) b = (int16) (tp[i] & mask);/*check short run */ j = i+1; while ((tp[j++] & mask) == b) - if (j == beg) { - *op++ = (tidataval_t)(128-2+j-i); - *op++ = (tidataval_t) (b >> shft); - occ -= 2; - i = beg; - break; - } + if (j == beg) { + *op++ = (uint8)(128-2+j-i); + *op++ = (uint8)(b >> shft); + occ -= 2; + i = beg; + break; + } } while (i < beg) { /* write out non-run */ if ((j = beg-i) > 127) j = 127; if (occ < j+3) { - tif->tif_rawcp = op; - tif->tif_rawcc = tif->tif_rawdatasize - occ; - if (!TIFFFlushData1(tif)) - return (-1); - op = tif->tif_rawcp; - occ = tif->tif_rawdatasize - tif->tif_rawcc; + tif->tif_rawcp = op; + tif->tif_rawcc = tif->tif_rawdatasize - occ; + if (!TIFFFlushData1(tif)) + return (-1); + op = tif->tif_rawcp; + occ = tif->tif_rawdatasize - tif->tif_rawcc; } - *op++ = (tidataval_t) j; occ--; + *op++ = (uint8) j; occ--; while (j--) { - *op++ = (tidataval_t) (tp[i++] >> shft & 0xff); + *op++ = (uint8) (tp[i++] >> shft & 0xff); occ--; } } if (rc >= MINRUN) { /* write out run */ - *op++ = (tidataval_t) (128-2+rc); - *op++ = (tidataval_t) (tp[beg] >> shft & 0xff); + *op++ = (uint8) (128-2+rc); + *op++ = (uint8) (tp[beg] >> shft & 0xff); occ -= 2; } else rc = 0; @@ -458,11 +498,13 @@ LogL16Encode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) * Encode a row of 24-bit pixels. */ static int -LogLuvEncode24(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +LogLuvEncode24(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) { LogLuvState* sp = EncoderState(tif); - int i, npixels, occ; - tidata_t op; + tmsize_t i; + tmsize_t npixels; + tmsize_t occ; + uint8* op; uint32* tp; assert(s == 0); @@ -476,7 +518,7 @@ LogLuvEncode24(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) assert(sp->tbuflen >= npixels); (*sp->tfunc)(sp, bp, npixels); } - /* write out encoded pixels */ + /* write out encoded pixels */ op = tif->tif_rawcp; occ = tif->tif_rawdatasize - tif->tif_rawcc; for (i = npixels; i--; ) { @@ -488,9 +530,9 @@ LogLuvEncode24(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) op = tif->tif_rawcp; occ = tif->tif_rawdatasize - tif->tif_rawcc; } - *op++ = (tidataval_t)(*tp >> 16); - *op++ = (tidataval_t)(*tp >> 8 & 0xff); - *op++ = (tidataval_t)(*tp++ & 0xff); + *op++ = (uint8)(*tp >> 16); + *op++ = (uint8)(*tp >> 8 & 0xff); + *op++ = (uint8)(*tp++ & 0xff); occ -= 3; } tif->tif_rawcp = op; @@ -503,14 +545,19 @@ LogLuvEncode24(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) * Encode a row of 32-bit pixels. */ static int -LogLuvEncode32(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +LogLuvEncode32(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) { LogLuvState* sp = EncoderState(tif); - int shft, i, j, npixels; - tidata_t op; + int shft; + tmsize_t i; + tmsize_t j; + tmsize_t npixels; + uint8* op; uint32* tp; uint32 b; - int occ, rc=0, mask, beg; + tmsize_t occ; + int rc=0, mask; + tmsize_t beg; assert(s == 0); assert(sp != NULL); @@ -524,7 +571,7 @@ LogLuvEncode32(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) assert(sp->tbuflen >= npixels); (*sp->tfunc)(sp, bp, npixels); } - /* compress each byte string */ + /* compress each byte string */ op = tif->tif_rawcp; occ = tif->tif_rawdatasize - tif->tif_rawcc; for (shft = 4*8; (shft -= 8) >= 0; ) @@ -552,8 +599,8 @@ LogLuvEncode32(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) j = i+1; while ((tp[j++] & mask) == b) if (j == beg) { - *op++ = (tidataval_t)(128-2+j-i); - *op++ = (tidataval_t)(b >> shft); + *op++ = (uint8)(128-2+j-i); + *op++ = (uint8)(b >> shft); occ -= 2; i = beg; break; @@ -569,15 +616,15 @@ LogLuvEncode32(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) op = tif->tif_rawcp; occ = tif->tif_rawdatasize - tif->tif_rawcc; } - *op++ = (tidataval_t) j; occ--; + *op++ = (uint8) j; occ--; while (j--) { - *op++ = (tidataval_t)(tp[i++] >> shft & 0xff); + *op++ = (uint8)(tp[i++] >> shft & 0xff); occ--; } } if (rc >= MINRUN) { /* write out run */ - *op++ = (tidataval_t) (128-2+rc); - *op++ = (tidataval_t)(tp[beg] >> shft & 0xff); + *op++ = (uint8) (128-2+rc); + *op++ = (uint8)(tp[beg] >> shft & 0xff); occ -= 2; } else rc = 0; @@ -593,9 +640,9 @@ LogLuvEncode32(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) * avoid encoding runs across row boundaries. */ static int -LogLuvEncodeStrip(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +LogLuvEncodeStrip(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) { - tsize_t rowlen = TIFFScanlineSize(tif); + tmsize_t rowlen = TIFFScanlineSize(tif); assert(cc%rowlen == 0); while (cc && (*tif->tif_encoderow)(tif, bp, rowlen, s) == 1) @@ -608,9 +655,9 @@ LogLuvEncodeStrip(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) * avoid encoding runs across row boundaries. */ static int -LogLuvEncodeTile(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +LogLuvEncodeTile(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) { - tsize_t rowlen = TIFFTileRowSize(tif); + tmsize_t rowlen = TIFFTileRowSize(tif); assert(cc%rowlen == 0); while (cc && (*tif->tif_encoderow)(tif, bp, rowlen, s) == 1) @@ -676,7 +723,7 @@ LogL16fromY(double Y, int em) /* get 16-bit LogL from Y */ } static void -L16toY(LogLuvState* sp, tidata_t op, int n) +L16toY(LogLuvState* sp, uint8* op, tmsize_t n) { int16* l16 = (int16*) sp->tbuf; float* yp = (float*) op; @@ -686,7 +733,7 @@ L16toY(LogLuvState* sp, tidata_t op, int n) } static void -L16toGry(LogLuvState* sp, tidata_t op, int n) +L16toGry(LogLuvState* sp, uint8* op, tmsize_t n) { int16* l16 = (int16*) sp->tbuf; uint8* gp = (uint8*) op; @@ -698,7 +745,7 @@ L16toGry(LogLuvState* sp, tidata_t op, int n) } static void -L16fromY(LogLuvState* sp, tidata_t op, int n) +L16fromY(LogLuvState* sp, uint8* op, tmsize_t n) { int16* l16 = (int16*) sp->tbuf; float* yp = (float*) op; @@ -760,7 +807,7 @@ oog_encode(double u, double v) /* encode out-of-gamut chroma */ static int oog_table[NANGLES]; static int initialized = 0; register int i; - + if (!initialized) { /* set up perimeter table */ double eps[NANGLES], ua, va, ang, epsa; int ui, vi, ustep; @@ -774,7 +821,7 @@ oog_encode(double u, double v) /* encode out-of-gamut chroma */ for (ui = uv_row[vi].nus-1; ui >= 0; ui -= ustep) { ua = uv_row[vi].ustart + (ui+.5)*UV_SQSIZ; ang = uv2ang(ua, va); - i = (int) ang; + i = (int) ang; epsa = fabs(ang - (i+.5)); if (epsa < eps[i]) { oog_table[i] = uv_row[vi].ncum + ui; @@ -916,9 +963,9 @@ LogLuv24fromXYZ(float XYZ[3], int em) } static void -Luv24toXYZ(LogLuvState* sp, tidata_t op, int n) +Luv24toXYZ(LogLuvState* sp, uint8* op, tmsize_t n) { - uint32* luv = (uint32*) sp->tbuf; + uint32* luv = (uint32*) sp->tbuf; float* xyz = (float*) op; while (n-- > 0) { @@ -929,9 +976,9 @@ Luv24toXYZ(LogLuvState* sp, tidata_t op, int n) } static void -Luv24toLuv48(LogLuvState* sp, tidata_t op, int n) +Luv24toLuv48(LogLuvState* sp, uint8* op, tmsize_t n) { - uint32* luv = (uint32*) sp->tbuf; + uint32* luv = (uint32*) sp->tbuf; int16* luv3 = (int16*) op; while (n-- > 0) { @@ -949,9 +996,9 @@ Luv24toLuv48(LogLuvState* sp, tidata_t op, int n) } static void -Luv24toRGB(LogLuvState* sp, tidata_t op, int n) +Luv24toRGB(LogLuvState* sp, uint8* op, tmsize_t n) { - uint32* luv = (uint32*) sp->tbuf; + uint32* luv = (uint32*) sp->tbuf; uint8* rgb = (uint8*) op; while (n-- > 0) { @@ -964,9 +1011,9 @@ Luv24toRGB(LogLuvState* sp, tidata_t op, int n) } static void -Luv24fromXYZ(LogLuvState* sp, tidata_t op, int n) +Luv24fromXYZ(LogLuvState* sp, uint8* op, tmsize_t n) { - uint32* luv = (uint32*) sp->tbuf; + uint32* luv = (uint32*) sp->tbuf; float* xyz = (float*) op; while (n-- > 0) { @@ -976,9 +1023,9 @@ Luv24fromXYZ(LogLuvState* sp, tidata_t op, int n) } static void -Luv24fromLuv48(LogLuvState* sp, tidata_t op, int n) +Luv24fromLuv48(LogLuvState* sp, uint8* op, tmsize_t n) { - uint32* luv = (uint32*) sp->tbuf; + uint32* luv = (uint32*) sp->tbuf; int16* luv3 = (int16*) op; while (n-- > 0) { @@ -1057,9 +1104,9 @@ LogLuv32fromXYZ(float XYZ[3], int em) } static void -Luv32toXYZ(LogLuvState* sp, tidata_t op, int n) +Luv32toXYZ(LogLuvState* sp, uint8* op, tmsize_t n) { - uint32* luv = (uint32*) sp->tbuf; + uint32* luv = (uint32*) sp->tbuf; float* xyz = (float*) op; while (n-- > 0) { @@ -1069,9 +1116,9 @@ Luv32toXYZ(LogLuvState* sp, tidata_t op, int n) } static void -Luv32toLuv48(LogLuvState* sp, tidata_t op, int n) +Luv32toLuv48(LogLuvState* sp, uint8* op, tmsize_t n) { - uint32* luv = (uint32*) sp->tbuf; + uint32* luv = (uint32*) sp->tbuf; int16* luv3 = (int16*) op; while (n-- > 0) { @@ -1087,9 +1134,9 @@ Luv32toLuv48(LogLuvState* sp, tidata_t op, int n) } static void -Luv32toRGB(LogLuvState* sp, tidata_t op, int n) +Luv32toRGB(LogLuvState* sp, uint8* op, tmsize_t n) { - uint32* luv = (uint32*) sp->tbuf; + uint32* luv = (uint32*) sp->tbuf; uint8* rgb = (uint8*) op; while (n-- > 0) { @@ -1102,9 +1149,9 @@ Luv32toRGB(LogLuvState* sp, tidata_t op, int n) } static void -Luv32fromXYZ(LogLuvState* sp, tidata_t op, int n) +Luv32fromXYZ(LogLuvState* sp, uint8* op, tmsize_t n) { - uint32* luv = (uint32*) sp->tbuf; + uint32* luv = (uint32*) sp->tbuf; float* xyz = (float*) op; while (n-- > 0) { @@ -1114,7 +1161,7 @@ Luv32fromXYZ(LogLuvState* sp, tidata_t op, int n) } static void -Luv32fromLuv48(LogLuvState* sp, tidata_t op, int n) +Luv32fromLuv48(LogLuvState* sp, uint8* op, tmsize_t n) { uint32* luv = (uint32*) sp->tbuf; int16* luv3 = (int16*) op; @@ -1137,7 +1184,7 @@ Luv32fromLuv48(LogLuvState* sp, tidata_t op, int n) } static void -_logLuvNop(LogLuvState* sp, tidata_t op, int n) +_logLuvNop(LogLuvState* sp, uint8* op, tmsize_t n) { (void) sp; (void) op; (void) n; } @@ -1161,10 +1208,10 @@ LogL16GuessDataFmt(TIFFDirectory *td) return (SGILOGDATAFMT_UNKNOWN); } -static uint32 -multiply(size_t m1, size_t m2) +static tmsize_t +multiply_ms(tmsize_t m1, tmsize_t m2) { - uint32 bytes = m1 * m2; + tmsize_t bytes = m1 * m2; if (m1 && bytes / m1 != m2) bytes = 0; @@ -1175,9 +1222,9 @@ multiply(size_t m1, size_t m2) static int LogL16InitState(TIFF* tif) { + static const char module[] = "LogL16InitState"; TIFFDirectory *td = &tif->tif_dir; LogLuvState* sp = DecoderState(tif); - static const char module[] = "LogL16InitState"; assert(sp != NULL); assert(td->td_photometric == PHOTOMETRIC_LOGL); @@ -1196,18 +1243,17 @@ LogL16InitState(TIFF* tif) sp->pixel_size = sizeof (uint8); break; default: - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, + TIFFErrorExt(tif->tif_clientdata, module, "No support for converting user data format to LogL"); return (0); } if( isTiled(tif) ) - sp->tbuflen = multiply(td->td_tilewidth, td->td_tilelength); + sp->tbuflen = multiply_ms(td->td_tilewidth, td->td_tilelength); else - sp->tbuflen = multiply(td->td_imagewidth, td->td_rowsperstrip); - if (multiply(sp->tbuflen, sizeof (int16)) == 0 || - (sp->tbuf = (tidata_t*) _TIFFmalloc(sp->tbuflen * sizeof (int16))) == NULL) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: No space for SGILog translation buffer", - tif->tif_name); + sp->tbuflen = multiply_ms(td->td_imagewidth, td->td_rowsperstrip); + if (multiply_ms(sp->tbuflen, sizeof (int16)) == 0 || + (sp->tbuf = (uint8*) _TIFFmalloc(sp->tbuflen * sizeof (int16))) == NULL) { + TIFFErrorExt(tif->tif_clientdata, module, "No space for SGILog translation buffer"); return (0); } return (1); @@ -1268,9 +1314,9 @@ LogLuvGuessDataFmt(TIFFDirectory *td) static int LogLuvInitState(TIFF* tif) { + static const char module[] = "LogLuvInitState"; TIFFDirectory* td = &tif->tif_dir; LogLuvState* sp = DecoderState(tif); - static const char module[] = "LogLuvInitState"; assert(sp != NULL); assert(td->td_photometric == PHOTOMETRIC_LOGLUV); @@ -1297,26 +1343,33 @@ LogLuvInitState(TIFF* tif) sp->pixel_size = 3*sizeof (uint8); break; default: - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, + TIFFErrorExt(tif->tif_clientdata, module, "No support for converting user data format to LogLuv"); return (0); } if( isTiled(tif) ) - sp->tbuflen = multiply(td->td_tilewidth, td->td_tilelength); + sp->tbuflen = multiply_ms(td->td_tilewidth, td->td_tilelength); else - sp->tbuflen = multiply(td->td_imagewidth, td->td_rowsperstrip); - if (multiply(sp->tbuflen, sizeof (uint32)) == 0 || - (sp->tbuf = (tidata_t*) _TIFFmalloc(sp->tbuflen * sizeof (uint32))) == NULL) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: No space for SGILog translation buffer", - tif->tif_name); + sp->tbuflen = multiply_ms(td->td_imagewidth, td->td_rowsperstrip); + if (multiply_ms(sp->tbuflen, sizeof (uint32)) == 0 || + (sp->tbuf = (uint8*) _TIFFmalloc(sp->tbuflen * sizeof (uint32))) == NULL) { + TIFFErrorExt(tif->tif_clientdata, module, "No space for SGILog translation buffer"); return (0); } return (1); } +static int +LogLuvFixupTags(TIFF* tif) +{ + (void) tif; + return (1); +} + static int LogLuvSetupDecode(TIFF* tif) { + static const char module[] = "LogLuvSetupDecode"; LogLuvState* sp = DecoderState(tif); TIFFDirectory* td = &tif->tif_dir; @@ -1329,10 +1382,10 @@ LogLuvSetupDecode(TIFF* tif) tif->tif_decoderow = LogLuvDecode24; switch (sp->user_datafmt) { case SGILOGDATAFMT_FLOAT: - sp->tfunc = Luv24toXYZ; + sp->tfunc = Luv24toXYZ; break; case SGILOGDATAFMT_16BIT: - sp->tfunc = Luv24toLuv48; + sp->tfunc = Luv24toLuv48; break; case SGILOGDATAFMT_8BIT: sp->tfunc = Luv24toRGB; @@ -1367,8 +1420,8 @@ LogLuvSetupDecode(TIFF* tif) } return (1); default: - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Inappropriate photometric interpretation %d for SGILog compression; %s", + TIFFErrorExt(tif->tif_clientdata, module, + "Inappropriate photometric interpretation %d for SGILog compression; %s", td->td_photometric, "must be either LogLUV or LogL"); break; } @@ -1378,6 +1431,7 @@ LogLuvSetupDecode(TIFF* tif) static int LogLuvSetupEncode(TIFF* tif) { + static const char module[] = "LogLuvSetupEncode"; LogLuvState* sp = EncoderState(tif); TIFFDirectory* td = &tif->tif_dir; @@ -1392,7 +1446,7 @@ LogLuvSetupEncode(TIFF* tif) sp->tfunc = Luv24fromXYZ; break; case SGILOGDATAFMT_16BIT: - sp->tfunc = Luv24fromLuv48; + sp->tfunc = Luv24fromLuv48; break; case SGILOGDATAFMT_RAW: break; @@ -1400,13 +1454,13 @@ LogLuvSetupEncode(TIFF* tif) goto notsupported; } } else { - tif->tif_encoderow = LogLuvEncode32; + tif->tif_encoderow = LogLuvEncode32; switch (sp->user_datafmt) { case SGILOGDATAFMT_FLOAT: - sp->tfunc = Luv32fromXYZ; + sp->tfunc = Luv32fromXYZ; break; case SGILOGDATAFMT_16BIT: - sp->tfunc = Luv32fromLuv48; + sp->tfunc = Luv32fromLuv48; break; case SGILOGDATAFMT_RAW: break; @@ -1418,7 +1472,7 @@ LogLuvSetupEncode(TIFF* tif) case PHOTOMETRIC_LOGL: if (!LogL16InitState(tif)) break; - tif->tif_encoderow = LogL16Encode; + tif->tif_encoderow = LogL16Encode; switch (sp->user_datafmt) { case SGILOGDATAFMT_FLOAT: sp->tfunc = L16fromY; @@ -1430,14 +1484,14 @@ LogLuvSetupEncode(TIFF* tif) } break; default: - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Inappropriate photometric interpretation %d for SGILog compression; %s", - td->td_photometric, "must be either LogLUV or LogL"); + TIFFErrorExt(tif->tif_clientdata, module, + "Inappropriate photometric interpretation %d for SGILog compression; %s", + td->td_photometric, "must be either LogLUV or LogL"); break; } return (1); notsupported: - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, + TIFFErrorExt(tif->tif_clientdata, module, "SGILog compression supported only for %s, or raw data", td->td_photometric == PHOTOMETRIC_LOGL ? "Y, L" : "XYZ, Luv"); return (0); @@ -1480,14 +1534,15 @@ LogLuvCleanup(TIFF* tif) } static int -LogLuvVSetField(TIFF* tif, ttag_t tag, va_list ap) +LogLuvVSetField(TIFF* tif, uint32 tag, va_list ap) { + static const char module[] = "LogLuvVSetField"; LogLuvState* sp = DecoderState(tif); int bps, fmt; switch (tag) { case TIFFTAG_SGILOGDATAFMT: - sp->user_datafmt = va_arg(ap, int); + sp->user_datafmt = (int) va_arg(ap, int); /* * Tweak the TIFF header so that the rest of libtiff knows what * size of data will be passed between app and library, and @@ -1519,16 +1574,16 @@ LogLuvVSetField(TIFF* tif, ttag_t tag, va_list ap) /* * Must recalculate sizes should bits/sample change. */ - tif->tif_tilesize = isTiled(tif) ? TIFFTileSize(tif) : (tsize_t) -1; + tif->tif_tilesize = isTiled(tif) ? TIFFTileSize(tif) : (tmsize_t) -1; tif->tif_scanlinesize = TIFFScanlineSize(tif); return (1); case TIFFTAG_SGILOGENCODE: - sp->encode_meth = va_arg(ap, int); + sp->encode_meth = (int) va_arg(ap, int); if (sp->encode_meth != SGILOGENCODE_NODITHER && - sp->encode_meth != SGILOGENCODE_RANDITHER) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Unknown encoding %d for LogLuv compression", - sp->encode_meth); + sp->encode_meth != SGILOGENCODE_RANDITHER) { + TIFFErrorExt(tif->tif_clientdata, module, + "Unknown encoding %d for LogLuv compression", + sp->encode_meth); return (0); } return (1); @@ -1538,7 +1593,7 @@ LogLuvVSetField(TIFF* tif, ttag_t tag, va_list ap) } static int -LogLuvVGetField(TIFF* tif, ttag_t tag, va_list ap) +LogLuvVGetField(TIFF* tif, uint32 tag, va_list ap) { LogLuvState *sp = (LogLuvState *)tif->tif_data; @@ -1551,11 +1606,9 @@ LogLuvVGetField(TIFF* tif, ttag_t tag, va_list ap) } } -static const TIFFFieldInfo LogLuvFieldInfo[] = { - { TIFFTAG_SGILOGDATAFMT, 0, 0, TIFF_SHORT, FIELD_PSEUDO, - TRUE, FALSE, "SGILogDataFmt"}, - { TIFFTAG_SGILOGENCODE, 0, 0, TIFF_SHORT, FIELD_PSEUDO, - TRUE, FALSE, "SGILogEncode"} +static const TIFFField LogLuvFields[] = { + { TIFFTAG_SGILOGDATAFMT, 0, 0, TIFF_SHORT, 0, TIFF_SETGET_INT, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "SGILogDataFmt", NULL}, + { TIFFTAG_SGILOGENCODE, 0, 0, TIFF_SHORT, 0, TIFF_SETGET_INT, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "SGILogEncode", NULL} }; int @@ -1569,24 +1622,24 @@ TIFFInitSGILog(TIFF* tif, int scheme) /* * Merge codec-specific tag information. */ - if (!_TIFFMergeFieldInfo(tif, LogLuvFieldInfo, - TIFFArrayCount(LogLuvFieldInfo))) { + if (!_TIFFMergeFields(tif, LogLuvFields, + TIFFArrayCount(LogLuvFields))) { TIFFErrorExt(tif->tif_clientdata, module, - "Merging SGILog codec-specific tags failed"); + "Merging SGILog codec-specific tags failed"); return 0; } /* * Allocate state block so tag methods have storage to record values. */ - tif->tif_data = (tidata_t) _TIFFmalloc(sizeof (LogLuvState)); + tif->tif_data = (uint8*) _TIFFmalloc(sizeof (LogLuvState)); if (tif->tif_data == NULL) goto bad; sp = (LogLuvState*) tif->tif_data; - _TIFFmemset((tdata_t)sp, 0, sizeof (*sp)); + _TIFFmemset((void*)sp, 0, sizeof (*sp)); sp->user_datafmt = SGILOGDATAFMT_UNKNOWN; sp->encode_meth = (scheme == COMPRESSION_SGILOG24) ? - SGILOGENCODE_RANDITHER : SGILOGENCODE_NODITHER; + SGILOGENCODE_RANDITHER : SGILOGENCODE_NODITHER; sp->tfunc = _logLuvNop; /* @@ -1594,16 +1647,17 @@ TIFFInitSGILog(TIFF* tif, int scheme) * NB: tif_decoderow & tif_encoderow are filled * in at setup time. */ + tif->tif_fixuptags = LogLuvFixupTags; tif->tif_setupdecode = LogLuvSetupDecode; tif->tif_decodestrip = LogLuvDecodeStrip; tif->tif_decodetile = LogLuvDecodeTile; tif->tif_setupencode = LogLuvSetupEncode; - tif->tif_encodestrip = LogLuvEncodeStrip; + tif->tif_encodestrip = LogLuvEncodeStrip; tif->tif_encodetile = LogLuvEncodeTile; tif->tif_close = LogLuvClose; tif->tif_cleanup = LogLuvCleanup; - /* + /* * Override parent get/set field methods. */ sp->vgetparent = tif->tif_tagmethods.vgetfield; diff --git a/dll/3rdparty/libtiff/tif_lzma.c b/dll/3rdparty/libtiff/tif_lzma.c new file mode 100644 index 00000000000..dedf1d948b5 --- /dev/null +++ b/dll/3rdparty/libtiff/tif_lzma.c @@ -0,0 +1,495 @@ +/* $Id: tif_lzma.c,v 1.4 2011-12-22 00:29:29 bfriesen Exp $ */ + +/* + * Copyright (c) 2010, Andrey Kiselev + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the names of + * Sam Leffler and Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Sam Leffler and Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include "tiffiop.h" +#ifdef LZMA_SUPPORT +/* + * TIFF Library. + * + * LZMA2 Compression Support + * + * You need an LZMA2 SDK to link with. See http://tukaani.org/xz/ for details. + * + * The codec is derived from ZLIB codec (tif_zip.c). + */ + +#include "tif_predict.h" +#include "lzma.h" + +#include + +/* + * State block for each open TIFF file using LZMA2 compression/decompression. + */ +typedef struct { + TIFFPredictorState predict; + lzma_stream stream; + lzma_filter filters[LZMA_FILTERS_MAX + 1]; + lzma_options_delta opt_delta; /* delta filter options */ + lzma_options_lzma opt_lzma; /* LZMA2 filter options */ + int preset; /* compression level */ + lzma_check check; /* type of the integrity check */ + int state; /* state flags */ +#define LSTATE_INIT_DECODE 0x01 +#define LSTATE_INIT_ENCODE 0x02 + + TIFFVGetMethod vgetparent; /* super-class method */ + TIFFVSetMethod vsetparent; /* super-class method */ +} LZMAState; + +#define LState(tif) ((LZMAState*) (tif)->tif_data) +#define DecoderState(tif) LState(tif) +#define EncoderState(tif) LState(tif) + +static int LZMAEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s); +static int LZMADecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s); + +static const char * +LZMAStrerror(lzma_ret ret) +{ + switch (ret) { + case LZMA_OK: + return "operation completed successfully"; + case LZMA_STREAM_END: + return "end of stream was reached"; + case LZMA_NO_CHECK: + return "input stream has no integrity check"; + case LZMA_UNSUPPORTED_CHECK: + return "cannot calculate the integrity check"; + case LZMA_GET_CHECK: + return "integrity check type is now available"; + case LZMA_MEM_ERROR: + return "cannot allocate memory"; + case LZMA_MEMLIMIT_ERROR: + return "memory usage limit was reached"; + case LZMA_FORMAT_ERROR: + return "file format not recognized"; + case LZMA_OPTIONS_ERROR: + return "invalid or unsupported options"; + case LZMA_DATA_ERROR: + return "data is corrupt"; + case LZMA_BUF_ERROR: + return "no progress is possible (stream is truncated or corrupt)"; + case LZMA_PROG_ERROR: + return "programming error"; + default: + return "unindentified liblzma error"; + } +} + +static int +LZMAFixupTags(TIFF* tif) +{ + (void) tif; + return 1; +} + +static int +LZMASetupDecode(TIFF* tif) +{ + LZMAState* sp = DecoderState(tif); + + assert(sp != NULL); + + /* if we were last encoding, terminate this mode */ + if (sp->state & LSTATE_INIT_ENCODE) { + lzma_end(&sp->stream); + sp->state = 0; + } + + sp->state |= LSTATE_INIT_DECODE; + return 1; +} + +/* + * Setup state for decoding a strip. + */ +static int +LZMAPreDecode(TIFF* tif, uint16 s) +{ + static const char module[] = "LZMAPreDecode"; + LZMAState* sp = DecoderState(tif); + lzma_ret ret; + + (void) s; + assert(sp != NULL); + + if( (sp->state & LSTATE_INIT_DECODE) == 0 ) + tif->tif_setupdecode(tif); + + sp->stream.next_in = tif->tif_rawdata; + sp->stream.avail_in = (size_t) tif->tif_rawcc; + if ((tmsize_t)sp->stream.avail_in != tif->tif_rawcc) { + TIFFErrorExt(tif->tif_clientdata, module, + "Liblzma cannot deal with buffers this size"); + return 0; + } + + /* + * Disable memory limit when decoding. UINT64_MAX is a flag to disable + * the limit, we are passing (uint64_t)-1 which should be the same. + */ + ret = lzma_stream_decoder(&sp->stream, (uint64_t)-1, 0); + if (ret != LZMA_OK) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error initializing the stream decoder, %s", + LZMAStrerror(ret)); + return 0; + } + return 1; +} + +static int +LZMADecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s) +{ + static const char module[] = "LZMADecode"; + LZMAState* sp = DecoderState(tif); + + (void) s; + assert(sp != NULL); + assert(sp->state == LSTATE_INIT_DECODE); + + sp->stream.next_in = tif->tif_rawcp; + sp->stream.avail_in = (size_t) tif->tif_rawcc; + + sp->stream.next_out = op; + sp->stream.avail_out = (size_t) occ; + if ((tmsize_t)sp->stream.avail_out != occ) { + TIFFErrorExt(tif->tif_clientdata, module, + "Liblzma cannot deal with buffers this size"); + return 0; + } + + do { + /* + * Save the current stream state to properly recover from the + * decoding errors later. + */ + const uint8_t *next_in = sp->stream.next_in; + size_t avail_in = sp->stream.avail_in; + + lzma_ret ret = lzma_code(&sp->stream, LZMA_RUN); + if (ret == LZMA_STREAM_END) + break; + if (ret == LZMA_MEMLIMIT_ERROR) { + lzma_ret r = lzma_stream_decoder(&sp->stream, + lzma_memusage(&sp->stream), 0); + if (r != LZMA_OK) { + TIFFErrorExt(tif->tif_clientdata, module, + "Error initializing the stream decoder, %s", + LZMAStrerror(r)); + break; + } + sp->stream.next_in = next_in; + sp->stream.avail_in = avail_in; + continue; + } + if (ret != LZMA_OK) { + TIFFErrorExt(tif->tif_clientdata, module, + "Decoding error at scanline %lu, %s", + (unsigned long) tif->tif_row, LZMAStrerror(ret)); + break; + } + } while (sp->stream.avail_out > 0); + if (sp->stream.avail_out != 0) { + TIFFErrorExt(tif->tif_clientdata, module, + "Not enough data at scanline %lu (short %lu bytes)", + (unsigned long) tif->tif_row, (unsigned long) sp->stream.avail_out); + return 0; + } + + tif->tif_rawcp = (uint8 *)sp->stream.next_in; /* cast away const */ + tif->tif_rawcc = sp->stream.avail_in; + + return 1; +} + +static int +LZMASetupEncode(TIFF* tif) +{ + LZMAState* sp = EncoderState(tif); + + assert(sp != NULL); + if (sp->state & LSTATE_INIT_DECODE) { + lzma_end(&sp->stream); + sp->state = 0; + } + + sp->state |= LSTATE_INIT_ENCODE; + return 1; +} + +/* + * Reset encoding state at the start of a strip. + */ +static int +LZMAPreEncode(TIFF* tif, uint16 s) +{ + static const char module[] = "LZMAPreEncode"; + LZMAState *sp = EncoderState(tif); + + (void) s; + assert(sp != NULL); + if( sp->state != LSTATE_INIT_ENCODE ) + tif->tif_setupencode(tif); + + sp->stream.next_out = tif->tif_rawdata; + sp->stream.avail_out = (size_t)tif->tif_rawdatasize; + if ((tmsize_t)sp->stream.avail_out != tif->tif_rawdatasize) { + TIFFErrorExt(tif->tif_clientdata, module, + "Liblzma cannot deal with buffers this size"); + return 0; + } + return (lzma_stream_encoder(&sp->stream, sp->filters, sp->check) == LZMA_OK); +} + +/* + * Encode a chunk of pixels. + */ +static int +LZMAEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) +{ + static const char module[] = "LZMAEncode"; + LZMAState *sp = EncoderState(tif); + + assert(sp != NULL); + assert(sp->state == LSTATE_INIT_ENCODE); + + (void) s; + sp->stream.next_in = bp; + sp->stream.avail_in = (size_t) cc; + if ((tmsize_t)sp->stream.avail_in != cc) { + TIFFErrorExt(tif->tif_clientdata, module, + "Liblzma cannot deal with buffers this size"); + return 0; + } + do { + lzma_ret ret = lzma_code(&sp->stream, LZMA_RUN); + if (ret != LZMA_OK) { + TIFFErrorExt(tif->tif_clientdata, module, + "Encoding error at scanline %lu, %s", + (unsigned long) tif->tif_row, LZMAStrerror(ret)); + return 0; + } + if (sp->stream.avail_out == 0) { + tif->tif_rawcc = tif->tif_rawdatasize; + TIFFFlushData1(tif); + sp->stream.next_out = tif->tif_rawdata; + sp->stream.avail_out = (size_t)tif->tif_rawdatasize; /* this is a safe typecast, as check is made already in LZMAPreEncode */ + } + } while (sp->stream.avail_in > 0); + return 1; +} + +/* + * Finish off an encoded strip by flushing the last + * string and tacking on an End Of Information code. + */ +static int +LZMAPostEncode(TIFF* tif) +{ + static const char module[] = "LZMAPostEncode"; + LZMAState *sp = EncoderState(tif); + lzma_ret ret; + + sp->stream.avail_in = 0; + do { + ret = lzma_code(&sp->stream, LZMA_FINISH); + switch (ret) { + case LZMA_STREAM_END: + case LZMA_OK: + if ((tmsize_t)sp->stream.avail_out != tif->tif_rawdatasize) { + tif->tif_rawcc = + tif->tif_rawdatasize - sp->stream.avail_out; + TIFFFlushData1(tif); + sp->stream.next_out = tif->tif_rawdata; + sp->stream.avail_out = (size_t)tif->tif_rawdatasize; /* this is a safe typecast, as check is made already in ZIPPreEncode */ + } + break; + default: + TIFFErrorExt(tif->tif_clientdata, module, "Liblzma error: %s", + LZMAStrerror(ret)); + return 0; + } + } while (ret != LZMA_STREAM_END); + return 1; +} + +static void +LZMACleanup(TIFF* tif) +{ + LZMAState* sp = LState(tif); + + assert(sp != 0); + + (void)TIFFPredictorCleanup(tif); + + tif->tif_tagmethods.vgetfield = sp->vgetparent; + tif->tif_tagmethods.vsetfield = sp->vsetparent; + + if (sp->state) { + lzma_end(&sp->stream); + sp->state = 0; + } + _TIFFfree(sp); + tif->tif_data = NULL; + + _TIFFSetDefaultCompressionState(tif); +} + +static int +LZMAVSetField(TIFF* tif, uint32 tag, va_list ap) +{ + static const char module[] = "LZMAVSetField"; + LZMAState* sp = LState(tif); + + switch (tag) { + case TIFFTAG_LZMAPRESET: + sp->preset = (int) va_arg(ap, int); + lzma_lzma_preset(&sp->opt_lzma, sp->preset); + if (sp->state & LSTATE_INIT_ENCODE) { + lzma_ret ret = lzma_stream_encoder(&sp->stream, + sp->filters, + sp->check); + if (ret != LZMA_OK) { + TIFFErrorExt(tif->tif_clientdata, module, + "Liblzma error: %s", + LZMAStrerror(ret)); + } + } + return 1; + default: + return (*sp->vsetparent)(tif, tag, ap); + } + /*NOTREACHED*/ +} + +static int +LZMAVGetField(TIFF* tif, uint32 tag, va_list ap) +{ + LZMAState* sp = LState(tif); + + switch (tag) { + case TIFFTAG_LZMAPRESET: + *va_arg(ap, int*) = sp->preset; + break; + default: + return (*sp->vgetparent)(tif, tag, ap); + } + return 1; +} + +static const TIFFField lzmaFields[] = { + { TIFFTAG_LZMAPRESET, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, TIFF_SETGET_UNDEFINED, + FIELD_PSEUDO, TRUE, FALSE, "LZMA2 Compression Preset", NULL }, +}; + +int +TIFFInitLZMA(TIFF* tif, int scheme) +{ + static const char module[] = "TIFFInitLZMA"; + LZMAState* sp; + lzma_stream tmp_stream = LZMA_STREAM_INIT; + + assert( scheme == COMPRESSION_LZMA ); + + /* + * Merge codec-specific tag information. + */ + if (!_TIFFMergeFields(tif, lzmaFields, TIFFArrayCount(lzmaFields))) { + TIFFErrorExt(tif->tif_clientdata, module, + "Merging LZMA2 codec-specific tags failed"); + return 0; + } + + /* + * Allocate state block so tag methods have storage to record values. + */ + tif->tif_data = (uint8*) _TIFFmalloc(sizeof(LZMAState)); + if (tif->tif_data == NULL) + goto bad; + sp = LState(tif); + memcpy(&sp->stream, &tmp_stream, sizeof(lzma_stream)); + + /* + * Override parent get/set field methods. + */ + sp->vgetparent = tif->tif_tagmethods.vgetfield; + tif->tif_tagmethods.vgetfield = LZMAVGetField; /* hook for codec tags */ + sp->vsetparent = tif->tif_tagmethods.vsetfield; + tif->tif_tagmethods.vsetfield = LZMAVSetField; /* hook for codec tags */ + + /* Default values for codec-specific fields */ + sp->preset = LZMA_PRESET_DEFAULT; /* default comp. level */ + sp->check = LZMA_CHECK_NONE; + sp->state = 0; + + /* Data filters. So far we are using delta and LZMA2 filters only. */ + sp->opt_delta.type = LZMA_DELTA_TYPE_BYTE; + /* + * The sample size in bytes seems to be reasonable distance for delta + * filter. + */ + sp->opt_delta.dist = (tif->tif_dir.td_bitspersample % 8) ? + 1 : tif->tif_dir.td_bitspersample / 8; + sp->filters[0].id = LZMA_FILTER_DELTA; + sp->filters[0].options = &sp->opt_delta; + + lzma_lzma_preset(&sp->opt_lzma, sp->preset); + sp->filters[1].id = LZMA_FILTER_LZMA2; + sp->filters[1].options = &sp->opt_lzma; + + sp->filters[2].id = LZMA_VLI_UNKNOWN; + sp->filters[2].options = NULL; + + /* + * Install codec methods. + */ + tif->tif_fixuptags = LZMAFixupTags; + tif->tif_setupdecode = LZMASetupDecode; + tif->tif_predecode = LZMAPreDecode; + tif->tif_decoderow = LZMADecode; + tif->tif_decodestrip = LZMADecode; + tif->tif_decodetile = LZMADecode; + tif->tif_setupencode = LZMASetupEncode; + tif->tif_preencode = LZMAPreEncode; + tif->tif_postencode = LZMAPostEncode; + tif->tif_encoderow = LZMAEncode; + tif->tif_encodestrip = LZMAEncode; + tif->tif_encodetile = LZMAEncode; + tif->tif_cleanup = LZMACleanup; + /* + * Setup predictor setup. + */ + (void) TIFFPredictorInit(tif); + return 1; +bad: + TIFFErrorExt(tif->tif_clientdata, module, + "No space for LZMA2 state block"); + return 0; +} +#endif /* LZMA_SUPORT */ + +/* vim: set ts=8 sts=8 sw=8 noet: */ diff --git a/dll/3rdparty/libtiff/tif_lzw.c b/dll/3rdparty/libtiff/tif_lzw.c index d423866359e..fd9c7a0a74b 100644 --- a/dll/3rdparty/libtiff/tif_lzw.c +++ b/dll/3rdparty/libtiff/tif_lzw.c @@ -1,4 +1,4 @@ -/* $Id: tif_lzw.c,v 1.29.2.6 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Id: tif_lzw.c,v 1.45 2011-04-02 20:54:09 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -27,7 +27,7 @@ #include "tiffiop.h" #ifdef LZW_SUPPORT /* - * TIFF Library. + * TIFF Library. * Rev 5.0 Lempel-Ziv & Welch Compression Support * * This code is derived from the compress program whose code is @@ -53,34 +53,34 @@ * * Future revisions to the TIFF spec are expected to "clarify this issue". */ -#define LZW_COMPAT /* include backwards compatibility code */ +#define LZW_COMPAT /* include backwards compatibility code */ /* * Each strip of data is supposed to be terminated by a CODE_EOI. * If the following #define is included, the decoder will also * check for end-of-strip w/o seeing this code. This makes the * library more robust, but also slower. */ -#define LZW_CHECKEOS /* include checks for strips w/o EOI code */ +#define LZW_CHECKEOS /* include checks for strips w/o EOI code */ #define MAXCODE(n) ((1L<<(n))-1) /* * The TIFF spec specifies that encoded bit * strings range from 9 to 12 bits. */ -#define BITS_MIN 9 /* start with 9 bits */ -#define BITS_MAX 12 /* max of 12 bit strings */ +#define BITS_MIN 9 /* start with 9 bits */ +#define BITS_MAX 12 /* max of 12 bit strings */ /* predefined codes */ -#define CODE_CLEAR 256 /* code to clear string table */ -#define CODE_EOI 257 /* end-of-information code */ -#define CODE_FIRST 258 /* first free code entry */ -#define CODE_MAX MAXCODE(BITS_MAX) -#define HSIZE 9001L /* 91% occupancy */ -#define HSHIFT (13-8) +#define CODE_CLEAR 256 /* code to clear string table */ +#define CODE_EOI 257 /* end-of-information code */ +#define CODE_FIRST 258 /* first free code entry */ +#define CODE_MAX MAXCODE(BITS_MAX) +#define HSIZE 9001L /* 91% occupancy */ +#define HSHIFT (13-8) #ifdef LZW_COMPAT /* NB: +1024 is for compatibility with old files */ -#define CSIZE (MAXCODE(BITS_MAX)+1024L) +#define CSIZE (MAXCODE(BITS_MAX)+1024L) #else -#define CSIZE (MAXCODE(BITS_MAX)+1L) +#define CSIZE (MAXCODE(BITS_MAX)+1L) #endif /* @@ -88,23 +88,23 @@ * compression/decompression. Note that the predictor * state block must be first in this data structure. */ -typedef struct { - TIFFPredictorState predict; /* predictor super class */ +typedef struct { + TIFFPredictorState predict; /* predictor super class */ - unsigned short nbits; /* # of bits/code */ - unsigned short maxcode; /* maximum code for lzw_nbits */ - unsigned short free_ent; /* next free entry in hash table */ - long nextdata; /* next bits of i/o */ - long nextbits; /* # of valid bits in lzw_nextdata */ + unsigned short nbits; /* # of bits/code */ + unsigned short maxcode; /* maximum code for lzw_nbits */ + unsigned short free_ent; /* next free entry in hash table */ + long nextdata; /* next bits of i/o */ + long nextbits; /* # of valid bits in lzw_nextdata */ - int rw_mode; /* preserve rw_mode from init */ + int rw_mode; /* preserve rw_mode from init */ } LZWBaseState; -#define lzw_nbits base.nbits -#define lzw_maxcode base.maxcode -#define lzw_free_ent base.free_ent -#define lzw_nextdata base.nextdata -#define lzw_nextbits base.nextbits +#define lzw_nbits base.nbits +#define lzw_maxcode base.maxcode +#define lzw_free_ent base.free_ent +#define lzw_nextdata base.nextdata +#define lzw_nextbits base.nextbits /* * Encoding-specific state. @@ -125,44 +125,44 @@ typedef struct code_ent { unsigned char firstchar; /* first token of string */ } code_t; -typedef int (*decodeFunc)(TIFF*, tidata_t, tsize_t, tsample_t); +typedef int (*decodeFunc)(TIFF*, uint8*, tmsize_t, uint16); typedef struct { LZWBaseState base; /* Decoding specific data */ - long dec_nbitsmask; /* lzw_nbits 1 bits, right adjusted */ - long dec_restart; /* restart count */ + long dec_nbitsmask; /* lzw_nbits 1 bits, right adjusted */ + long dec_restart; /* restart count */ #ifdef LZW_CHECKEOS - long dec_bitsleft; /* available bits in raw data */ + uint64 dec_bitsleft; /* available bits in raw data */ #endif decodeFunc dec_decode; /* regular or backwards compatible */ - code_t* dec_codep; /* current recognized code */ - code_t* dec_oldcodep; /* previously recognized code */ - code_t* dec_free_entp; /* next free entry */ - code_t* dec_maxcodep; /* max available entry */ - code_t* dec_codetab; /* kept separate for small machines */ + code_t* dec_codep; /* current recognized code */ + code_t* dec_oldcodep; /* previously recognized code */ + code_t* dec_free_entp; /* next free entry */ + code_t* dec_maxcodep; /* max available entry */ + code_t* dec_codetab; /* kept separate for small machines */ /* Encoding specific data */ - int enc_oldcode; /* last code encountered */ - long enc_checkpoint; /* point at which to clear table */ + int enc_oldcode; /* last code encountered */ + long enc_checkpoint; /* point at which to clear table */ #define CHECK_GAP 10000 /* enc_ratio check interval */ - long enc_ratio; /* current compression ratio */ - long enc_incount; /* (input) data bytes encoded */ - long enc_outcount; /* encoded (output) bytes */ - tidata_t enc_rawlimit; /* bound on tif_rawdata buffer */ - hash_t* enc_hashtab; /* kept separate for small machines */ + long enc_ratio; /* current compression ratio */ + long enc_incount; /* (input) data bytes encoded */ + long enc_outcount; /* encoded (output) bytes */ + uint8* enc_rawlimit; /* bound on tif_rawdata buffer */ + hash_t* enc_hashtab; /* kept separate for small machines */ } LZWCodecState; -#define LZWState(tif) ((LZWBaseState*) (tif)->tif_data) -#define DecoderState(tif) ((LZWCodecState*) LZWState(tif)) -#define EncoderState(tif) ((LZWCodecState*) LZWState(tif)) +#define LZWState(tif) ((LZWBaseState*) (tif)->tif_data) +#define DecoderState(tif) ((LZWCodecState*) LZWState(tif)) +#define EncoderState(tif) ((LZWCodecState*) LZWState(tif)) -static int LZWDecode(TIFF*, tidata_t, tsize_t, tsample_t); +static int LZWDecode(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s); #ifdef LZW_COMPAT -static int LZWDecodeCompat(TIFF*, tidata_t, tsize_t, tsample_t); +static int LZWDecodeCompat(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s); #endif -static void cl_hash(LZWCodecState*); +static void cl_hash(LZWCodecState*); /* * LZW Decoder. @@ -174,8 +174,8 @@ static void cl_hash(LZWCodecState*); * strip is suppose to be terminated with CODE_EOI. */ #define NextCode(_tif, _sp, _bp, _code, _get) { \ - if ((_sp)->dec_bitsleft < nbits) { \ - TIFFWarningExt(_tif->tif_clientdata, _tif->tif_name, \ + if ((_sp)->dec_bitsleft < (uint64)nbits) { \ + TIFFWarningExt(_tif->tif_clientdata, module, \ "LZWDecode: Strip %d not terminated with EOI code", \ _tif->tif_curstrip); \ _code = CODE_EOI; \ @@ -188,37 +188,44 @@ static void cl_hash(LZWCodecState*); #define NextCode(tif, sp, bp, code, get) get(sp, bp, code) #endif +static int +LZWFixupTags(TIFF* tif) +{ + (void) tif; + return (1); +} + static int LZWSetupDecode(TIFF* tif) { + static const char module[] = "LZWSetupDecode"; LZWCodecState* sp = DecoderState(tif); - static const char module[] = " LZWSetupDecode"; int code; - if( sp == NULL ) - { - /* - * Allocate state block so tag methods have storage to record - * values. - */ - tif->tif_data = (tidata_t) _TIFFmalloc(sizeof(LZWCodecState)); - if (tif->tif_data == NULL) - { - TIFFErrorExt(tif->tif_clientdata, "LZWPreDecode", "No space for LZW state block"); - return (0); - } + if( sp == NULL ) + { + /* + * Allocate state block so tag methods have storage to record + * values. + */ + tif->tif_data = (uint8*) _TIFFmalloc(sizeof(LZWCodecState)); + if (tif->tif_data == NULL) + { + TIFFErrorExt(tif->tif_clientdata, module, "No space for LZW state block"); + return (0); + } - DecoderState(tif)->dec_codetab = NULL; - DecoderState(tif)->dec_decode = NULL; - - /* - * Setup predictor setup. - */ - (void) TIFFPredictorInit(tif); + DecoderState(tif)->dec_codetab = NULL; + DecoderState(tif)->dec_decode = NULL; + + /* + * Setup predictor setup. + */ + (void) TIFFPredictorInit(tif); + + sp = DecoderState(tif); + } - sp = DecoderState(tif); - } - assert(sp != NULL); if (sp->dec_codetab == NULL) { @@ -231,13 +238,13 @@ LZWSetupDecode(TIFF* tif) /* * Pre-load the table. */ - code = 255; - do { - sp->dec_codetab[code].value = code; - sp->dec_codetab[code].firstchar = code; - sp->dec_codetab[code].length = 1; - sp->dec_codetab[code].next = NULL; - } while (code--); + code = 255; + do { + sp->dec_codetab[code].value = code; + sp->dec_codetab[code].firstchar = code; + sp->dec_codetab[code].length = 1; + sp->dec_codetab[code].next = NULL; + } while (code--); /* * Zero-out the unused entries */ @@ -251,13 +258,14 @@ LZWSetupDecode(TIFF* tif) * Setup state for decoding a strip. */ static int -LZWPreDecode(TIFF* tif, tsample_t s) +LZWPreDecode(TIFF* tif, uint16 s) { + static const char module[] = "LZWPreDecode"; LZWCodecState *sp = DecoderState(tif); (void) s; assert(sp != NULL); - if( sp->dec_codetab == NULL ) + if( sp->dec_codetab == NULL ) { tif->tif_setupdecode( tif ); } @@ -268,7 +276,7 @@ LZWPreDecode(TIFF* tif, tsample_t s) if (tif->tif_rawdata[0] == 0 && (tif->tif_rawdata[1] & 0x1)) { #ifdef LZW_COMPAT if (!sp->dec_decode) { - TIFFWarningExt(tif->tif_clientdata, tif->tif_name, + TIFFWarningExt(tif->tif_clientdata, module, "Old-style LZW codes, convert file"); /* * Override default decoding methods with @@ -291,7 +299,7 @@ LZWPreDecode(TIFF* tif, tsample_t s) sp->lzw_maxcode = MAXCODE(BITS_MIN); #else /* !LZW_COMPAT */ if (!sp->dec_decode) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, + TIFFErrorExt(tif->tif_clientdata, module, "Old-style LZW codes not supported"); sp->dec_decode = LZWDecode; } @@ -308,7 +316,7 @@ LZWPreDecode(TIFF* tif, tsample_t s) sp->dec_restart = 0; sp->dec_nbitsmask = MAXCODE(BITS_MIN); #ifdef LZW_CHECKEOS - sp->dec_bitsleft = tif->tif_rawcc << 3; + sp->dec_bitsleft = ((uint64)tif->tif_rawcc) << 3; #endif sp->dec_free_entp = sp->dec_codetab + CODE_FIRST; /* @@ -339,16 +347,17 @@ LZWPreDecode(TIFF* tif, tsample_t s) } static void -codeLoop(TIFF* tif) +codeLoop(TIFF* tif, const char* module) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "LZWDecode: Bogus encoding, loop in the code table; scanline %d", + TIFFErrorExt(tif->tif_clientdata, module, + "Bogus encoding, loop in the code table; scanline %d", tif->tif_row); } static int -LZWDecode(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) +LZWDecode(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s) { + static const char module[] = "LZWDecode"; LZWCodecState *sp = DecoderState(tif); char *op = (char*) op0; long occ = (long) occ0; @@ -362,6 +371,12 @@ LZWDecode(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) (void) s; assert(sp != NULL); assert(sp->dec_codetab != NULL); + + /* + Fail if value does not fit in long. + */ + if ((tmsize_t) occ != occ0) + return (0); /* * Restart interrupted output operation. */ @@ -428,7 +443,7 @@ LZWDecode(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) NextCode(tif, sp, bp, code, GetNextCode); if (code == CODE_EOI) break; - if (code == CODE_CLEAR) { + if (code >= CODE_CLEAR) { TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "LZWDecode: Corrupted LZW table at scanline %d", tif->tif_row); @@ -441,22 +456,22 @@ LZWDecode(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) codep = sp->dec_codetab + code; /* - * Add the new entry to the code table. - */ + * Add the new entry to the code table. + */ if (free_entp < &sp->dec_codetab[0] || - free_entp >= &sp->dec_codetab[CSIZE]) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "LZWDecode: Corrupted LZW table at scanline %d", - tif->tif_row); + free_entp >= &sp->dec_codetab[CSIZE]) { + TIFFErrorExt(tif->tif_clientdata, module, + "Corrupted LZW table at scanline %d", + tif->tif_row); return (0); } free_entp->next = oldcodep; if (free_entp->next < &sp->dec_codetab[0] || - free_entp->next >= &sp->dec_codetab[CSIZE]) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "LZWDecode: Corrupted LZW table at scanline %d", - tif->tif_row); + free_entp->next >= &sp->dec_codetab[CSIZE]) { + TIFFErrorExt(tif->tif_clientdata, module, + "Corrupted LZW table at scanline %d", + tif->tif_row); return (0); } free_entp->firstchar = free_entp->next->firstchar; @@ -472,15 +487,15 @@ LZWDecode(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) oldcodep = codep; if (code >= 256) { /* - * Code maps to a string, copy string + * Code maps to a string, copy string * value to output (written in reverse). - */ + */ if(codep->length == 0) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "LZWDecode: Wrong length of decoded string: " - "data probably corrupted at scanline %d", - tif->tif_row); - return (0); + TIFFErrorExt(tif->tif_clientdata, module, + "Wrong length of decoded string: " + "data probably corrupted at scanline %d", + tif->tif_row); + return (0); } if (codep->length > occ) { /* @@ -494,14 +509,14 @@ LZWDecode(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) codep = codep->next; } while (codep && codep->length > occ); if (codep) { - sp->dec_restart = occ; + sp->dec_restart = (long)occ; tp = op + occ; do { *--tp = codep->value; codep = codep->next; } while (--occ && codep); if (codep) - codeLoop(tif); + codeLoop(tif, module); } break; } @@ -515,15 +530,16 @@ LZWDecode(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) *tp = t; } while (codep && tp > op); if (codep) { - codeLoop(tif); + codeLoop(tif, module); break; } + assert(occ >= len); op += len, occ -= len; } else *op++ = (char)code, occ--; } - tif->tif_rawcp = (tidata_t) bp; + tif->tif_rawcp = (uint8*) bp; sp->lzw_nbits = (unsigned short) nbits; sp->lzw_nextdata = nextdata; sp->lzw_nextbits = nextbits; @@ -533,9 +549,15 @@ LZWDecode(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) sp->dec_maxcodep = maxcodep; if (occ > 0) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "LZWDecode: Not enough data at scanline %d (short %ld bytes)", - tif->tif_row, occ); +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + TIFFErrorExt(tif->tif_clientdata, module, + "Not enough data at scanline %d (short %I64d bytes)", + tif->tif_row, (unsigned __int64) occ); +#else + TIFFErrorExt(tif->tif_clientdata, module, + "Not enough data at scanline %d (short %llu bytes)", + tif->tif_row, (unsigned long long) occ); +#endif return (0); } return (1); @@ -558,8 +580,9 @@ LZWDecode(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) } static int -LZWDecodeCompat(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) +LZWDecodeCompat(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s) { + static const char module[] = "LZWDecodeCompat"; LZWCodecState *sp = DecoderState(tif); char *op = (char*) op0; long occ = (long) occ0; @@ -571,6 +594,13 @@ LZWDecodeCompat(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) (void) s; assert(sp != NULL); + + /* + Fail if value does not fit in long. + */ + if ((tmsize_t) occ != occ0) + return (0); + /* * Restart interrupted output operation. */ @@ -632,7 +662,7 @@ LZWDecodeCompat(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) NextCode(tif, sp, bp, code, GetNextCodeCompat); if (code == CODE_EOI) break; - if (code == CODE_CLEAR) { + if (code >= CODE_CLEAR) { TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "LZWDecode: Corrupted LZW table at scanline %d", tif->tif_row); @@ -645,22 +675,20 @@ LZWDecodeCompat(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) codep = sp->dec_codetab + code; /* - * Add the new entry to the code table. - */ + * Add the new entry to the code table. + */ if (free_entp < &sp->dec_codetab[0] || - free_entp >= &sp->dec_codetab[CSIZE]) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "LZWDecodeCompat: Corrupted LZW table at scanline %d", - tif->tif_row); + free_entp >= &sp->dec_codetab[CSIZE]) { + TIFFErrorExt(tif->tif_clientdata, module, + "Corrupted LZW table at scanline %d", tif->tif_row); return (0); } free_entp->next = oldcodep; if (free_entp->next < &sp->dec_codetab[0] || - free_entp->next >= &sp->dec_codetab[CSIZE]) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "LZWDecodeCompat: Corrupted LZW table at scanline %d", - tif->tif_row); + free_entp->next >= &sp->dec_codetab[CSIZE]) { + TIFFErrorExt(tif->tif_clientdata, module, + "Corrupted LZW table at scanline %d", tif->tif_row); return (0); } free_entp->firstchar = free_entp->next->firstchar; @@ -675,17 +703,16 @@ LZWDecodeCompat(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) } oldcodep = codep; if (code >= 256) { - char *op_orig = op; /* - * Code maps to a string, copy string + * Code maps to a string, copy string * value to output (written in reverse). - */ + */ if(codep->length == 0) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "LZWDecodeCompat: Wrong length of decoded " - "string: data probably corrupted at scanline %d", - tif->tif_row); - return (0); + TIFFErrorExt(tif->tif_clientdata, module, + "Wrong length of decoded " + "string: data probably corrupted at scanline %d", + tif->tif_row); + return (0); } if (codep->length > occ) { /* @@ -706,16 +733,17 @@ LZWDecodeCompat(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) } while (--occ); break; } + assert(occ >= codep->length); op += codep->length, occ -= codep->length; tp = op; do { *--tp = codep->value; - } while( (codep = codep->next) != NULL && tp > op_orig); + } while( (codep = codep->next) != NULL ); } else *op++ = code, occ--; } - tif->tif_rawcp = (tidata_t) bp; + tif->tif_rawcp = (uint8*) bp; sp->lzw_nbits = nbits; sp->lzw_nextdata = nextdata; sp->lzw_nextbits = nextbits; @@ -725,9 +753,15 @@ LZWDecodeCompat(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) sp->dec_maxcodep = maxcodep; if (occ > 0) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "LZWDecodeCompat: Not enough data at scanline %d (short %ld bytes)", - tif->tif_row, occ); +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + TIFFErrorExt(tif->tif_clientdata, module, + "Not enough data at scanline %d (short %I64d bytes)", + tif->tif_row, (unsigned __int64) occ); +#else + TIFFErrorExt(tif->tif_clientdata, module, + "Not enough data at scanline %d (short %llu bytes)", + tif->tif_row, (unsigned long long) occ); +#endif return (0); } return (1); @@ -741,13 +775,14 @@ LZWDecodeCompat(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) static int LZWSetupEncode(TIFF* tif) { - LZWCodecState* sp = EncoderState(tif); static const char module[] = "LZWSetupEncode"; + LZWCodecState* sp = EncoderState(tif); assert(sp != NULL); sp->enc_hashtab = (hash_t*) _TIFFmalloc(HSIZE*sizeof (hash_t)); if (sp->enc_hashtab == NULL) { - TIFFErrorExt(tif->tif_clientdata, module, "No space for LZW hash table"); + TIFFErrorExt(tif->tif_clientdata, module, + "No space for LZW hash table"); return (0); } return (1); @@ -757,14 +792,14 @@ LZWSetupEncode(TIFF* tif) * Reset encoding state at the start of a strip. */ static int -LZWPreEncode(TIFF* tif, tsample_t s) +LZWPreEncode(TIFF* tif, uint16 s) { LZWCodecState *sp = EncoderState(tif); (void) s; assert(sp != NULL); - - if( sp->enc_hashtab == NULL ) + + if( sp->enc_hashtab == NULL ) { tif->tif_setupencode( tif ); } @@ -822,7 +857,7 @@ LZWPreEncode(TIFF* tif, tsample_t s) * for the decoder. */ static int -LZWEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +LZWEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) { register LZWCodecState *sp = EncoderState(tif); register long fcode; @@ -833,7 +868,8 @@ LZWEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) long incount, outcount, checkpoint; long nextdata, nextbits; int free_ent, maxcode, nbits; - tidata_t op, limit; + uint8* op; + uint8* limit; (void) s; if (sp == NULL) @@ -912,7 +948,7 @@ LZWEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) * are at least 4 bytes free--room for 2 codes. */ if (op > limit) { - tif->tif_rawcc = (tsize_t)(op - tif->tif_rawdata); + tif->tif_rawcc = (tmsize_t)(op - tif->tif_rawdata); TIFFFlushData1(tif); op = tif->tif_rawdata; } @@ -990,14 +1026,14 @@ static int LZWPostEncode(TIFF* tif) { register LZWCodecState *sp = EncoderState(tif); - tidata_t op = tif->tif_rawcp; + uint8* op = tif->tif_rawcp; long nextbits = sp->lzw_nextbits; long nextdata = sp->lzw_nextdata; long outcount = sp->enc_outcount; int nbits = sp->lzw_nbits; if (op > sp->enc_rawlimit) { - tif->tif_rawcc = (tsize_t)(op - tif->tif_rawdata); + tif->tif_rawcc = (tmsize_t)(op - tif->tif_rawdata); TIFFFlushData1(tif); op = tif->tif_rawdata; } @@ -1008,7 +1044,7 @@ LZWPostEncode(TIFF* tif) PutNextCode(op, CODE_EOI); if (nextbits > 0) *op++ = (unsigned char)(nextdata << (8-nextbits)); - tif->tif_rawcc = (tsize_t)(op - tif->tif_rawdata); + tif->tif_rawcc = (tmsize_t)(op - tif->tif_rawdata); return (1); } @@ -1021,7 +1057,7 @@ cl_hash(LZWCodecState* sp) register hash_t *hp = &sp->enc_hashtab[HSIZE-1]; register long i = HSIZE-8; - do { + do { i -= 8; hp[-7].hash = -1; hp[-6].hash = -1; @@ -1033,7 +1069,7 @@ cl_hash(LZWCodecState* sp) hp[ 0].hash = -1; hp -= 8; } while (i >= 0); - for (i += 8; i > 0; i--, hp--) + for (i += 8; i > 0; i--, hp--) hp->hash = -1; } @@ -1059,11 +1095,12 @@ LZWCleanup(TIFF* tif) int TIFFInitLZW(TIFF* tif, int scheme) { + static const char module[] = "TIFFInitLZW"; assert(scheme == COMPRESSION_LZW); /* * Allocate state block so tag methods have storage to record values. */ - tif->tif_data = (tidata_t) _TIFFmalloc(sizeof (LZWCodecState)); + tif->tif_data = (uint8*) _TIFFmalloc(sizeof (LZWCodecState)); if (tif->tif_data == NULL) goto bad; DecoderState(tif)->dec_codetab = NULL; @@ -1074,6 +1111,7 @@ TIFFInitLZW(TIFF* tif, int scheme) /* * Install codec methods. */ + tif->tif_fixuptags = LZWFixupTags; tif->tif_setupdecode = LZWSetupDecode; tif->tif_predecode = LZWPreDecode; tif->tif_decoderow = LZWDecode; @@ -1092,7 +1130,7 @@ TIFFInitLZW(TIFF* tif, int scheme) (void) TIFFPredictorInit(tif); return (1); bad: - TIFFErrorExt(tif->tif_clientdata, "TIFFInitLZW", + TIFFErrorExt(tif->tif_clientdata, module, "No space for LZW state block"); return (0); } diff --git a/dll/3rdparty/libtiff/tif_next.c b/dll/3rdparty/libtiff/tif_next.c index d7652bb4c13..524e127c13d 100644 --- a/dll/3rdparty/libtiff/tif_next.c +++ b/dll/3rdparty/libtiff/tif_next.c @@ -1,4 +1,4 @@ -/* $Id: tif_next.c,v 1.8.2.1 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Id: tif_next.c,v 1.13 2010-03-10 18:56:48 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -46,12 +46,13 @@ #define WHITE ((1<<2)-1) static int -NeXTDecode(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) +NeXTDecode(TIFF* tif, uint8* buf, tmsize_t occ, uint16 s) { + static const char module[] = "NeXTDecode"; unsigned char *bp, *op; - tsize_t cc; - tidata_t row; - tsize_t scanline, n; + tmsize_t cc; + uint8* row; + tmsize_t scanline, n; (void) s; /* @@ -59,12 +60,17 @@ NeXTDecode(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) * white (we assume a PhotometricInterpretation * of ``min-is-black''). */ - for (op = buf, cc = occ; cc-- > 0;) + for (op = (unsigned char*) buf, cc = occ; cc-- > 0;) *op++ = 0xff; bp = (unsigned char *)tif->tif_rawcp; cc = tif->tif_rawcc; scanline = tif->tif_scanlinesize; + if (occ % scanline) + { + TIFFErrorExt(tif->tif_clientdata, module, "Fractional scanlines cannot be read"); + return (0); + } for (row = buf; occ > 0; occ -= scanline, row += scanline) { n = *bp++, cc--; switch (n) { @@ -79,7 +85,7 @@ NeXTDecode(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) cc -= scanline; break; case LITERALSPAN: { - tsize_t off; + tmsize_t off; /* * The scanline has a literal span that begins at some * offset. @@ -105,7 +111,7 @@ NeXTDecode(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) */ op = row; for (;;) { - grey = (n>>6) & 0x3; + grey = (uint32)((n>>6) & 0x3); n &= 0x3f; /* * Ensure the run does not exceed the scanline @@ -124,11 +130,11 @@ NeXTDecode(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) } } } - tif->tif_rawcp = (tidata_t) bp; + tif->tif_rawcp = (uint8*) bp; tif->tif_rawcc = cc; return (1); bad: - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "NeXTDecode: Not enough data for scanline %ld", + TIFFErrorExt(tif->tif_clientdata, module, "Not enough data for scanline %ld", (long) tif->tif_row); return (0); } @@ -137,8 +143,8 @@ int TIFFInitNeXT(TIFF* tif, int scheme) { (void) scheme; - tif->tif_decoderow = NeXTDecode; - tif->tif_decodestrip = NeXTDecode; + tif->tif_decoderow = NeXTDecode; + tif->tif_decodestrip = NeXTDecode; tif->tif_decodetile = NeXTDecode; return (1); } diff --git a/dll/3rdparty/libtiff/tif_ojpeg.c b/dll/3rdparty/libtiff/tif_ojpeg.c index 9ae856cfdef..6ea3c38ba72 100644 --- a/dll/3rdparty/libtiff/tif_ojpeg.c +++ b/dll/3rdparty/libtiff/tif_ojpeg.c @@ -1,4 +1,4 @@ -/* $Id: tif_ojpeg.c,v 1.24.2.6 2010-06-08 23:29:51 bfriesen Exp $ */ +/* $Id: tif_ojpeg.c,v 1.56 2012-05-24 03:15:18 fwarmerdam Exp $ */ /* WARNING: The type of JPEG encapsulation defined by the TIFF Version 6.0 specification is now totally obsolete and deprecated for new applications and @@ -120,6 +120,8 @@ session. */ +#define WIN32_LEAN_AND_MEAN +#define VC_EXTRALEAN #include "tiffiop.h" #ifdef OJPEG_SUPPORT @@ -146,7 +148,7 @@ * absolutely no effect. That is why most people insist the EGYPTIANWALK is a bit silly. */ -/* #define LIBJPEG_ENCAP_EXTERNAL */ +/* define LIBJPEG_ENCAP_EXTERNAL */ #define SETJMP(jbuf) setjmp(jbuf) #define LONGJMP(jbuf,code) longjmp(jbuf,code) #define JMP_BUF jmp_buf @@ -173,22 +175,45 @@ #define FIELD_OJPEG_JPEGACTABLES (FIELD_CODEC+4) #define FIELD_OJPEG_JPEGPROC (FIELD_CODEC+5) #define FIELD_OJPEG_JPEGRESTARTINTERVAL (FIELD_CODEC+6) -#define FIELD_OJPEG_COUNT 7 -static const TIFFFieldInfo ojpeg_field_info[] = { - {TIFFTAG_JPEGIFOFFSET,1,1,TIFF_LONG,FIELD_OJPEG_JPEGINTERCHANGEFORMAT,TRUE,FALSE,"JpegInterchangeFormat"}, - {TIFFTAG_JPEGIFBYTECOUNT,1,1,TIFF_LONG,FIELD_OJPEG_JPEGINTERCHANGEFORMATLENGTH,TRUE,FALSE,"JpegInterchangeFormatLength"}, - {TIFFTAG_JPEGQTABLES,TIFF_VARIABLE,TIFF_VARIABLE,TIFF_LONG,FIELD_OJPEG_JPEGQTABLES,FALSE,TRUE,"JpegQTables"}, - {TIFFTAG_JPEGDCTABLES,TIFF_VARIABLE,TIFF_VARIABLE,TIFF_LONG,FIELD_OJPEG_JPEGDCTABLES,FALSE,TRUE,"JpegDcTables"}, - {TIFFTAG_JPEGACTABLES,TIFF_VARIABLE,TIFF_VARIABLE,TIFF_LONG,FIELD_OJPEG_JPEGACTABLES,FALSE,TRUE,"JpegAcTables"}, - {TIFFTAG_JPEGPROC,1,1,TIFF_SHORT,FIELD_OJPEG_JPEGPROC,FALSE,FALSE,"JpegProc"}, - {TIFFTAG_JPEGRESTARTINTERVAL,1,1,TIFF_SHORT,FIELD_OJPEG_JPEGRESTARTINTERVAL,FALSE,FALSE,"JpegRestartInterval"}, +static const TIFFField ojpegFields[] = { + {TIFFTAG_JPEGIFOFFSET,1,1,TIFF_LONG8,0,TIFF_SETGET_UINT64,TIFF_SETGET_UNDEFINED,FIELD_OJPEG_JPEGINTERCHANGEFORMAT,TRUE,FALSE,"JpegInterchangeFormat",NULL}, + {TIFFTAG_JPEGIFBYTECOUNT,1,1,TIFF_LONG8,0,TIFF_SETGET_UINT64,TIFF_SETGET_UNDEFINED,FIELD_OJPEG_JPEGINTERCHANGEFORMATLENGTH,TRUE,FALSE,"JpegInterchangeFormatLength",NULL}, + {TIFFTAG_JPEGQTABLES,TIFF_VARIABLE2,TIFF_VARIABLE2,TIFF_LONG8,0,TIFF_SETGET_C32_UINT64,TIFF_SETGET_UNDEFINED,FIELD_OJPEG_JPEGQTABLES,FALSE,TRUE,"JpegQTables",NULL}, + {TIFFTAG_JPEGDCTABLES,TIFF_VARIABLE2,TIFF_VARIABLE2,TIFF_LONG8,0,TIFF_SETGET_C32_UINT64,TIFF_SETGET_UNDEFINED,FIELD_OJPEG_JPEGDCTABLES,FALSE,TRUE,"JpegDcTables",NULL}, + {TIFFTAG_JPEGACTABLES,TIFF_VARIABLE2,TIFF_VARIABLE2,TIFF_LONG8,0,TIFF_SETGET_C32_UINT64,TIFF_SETGET_UNDEFINED,FIELD_OJPEG_JPEGACTABLES,FALSE,TRUE,"JpegAcTables",NULL}, + {TIFFTAG_JPEGPROC,1,1,TIFF_SHORT,0,TIFF_SETGET_UINT16,TIFF_SETGET_UNDEFINED,FIELD_OJPEG_JPEGPROC,FALSE,FALSE,"JpegProc",NULL}, + {TIFFTAG_JPEGRESTARTINTERVAL,1,1,TIFF_SHORT,0,TIFF_SETGET_UINT16,TIFF_SETGET_UNDEFINED,FIELD_OJPEG_JPEGRESTARTINTERVAL,FALSE,FALSE,"JpegRestartInterval",NULL}, }; #ifndef LIBJPEG_ENCAP_EXTERNAL #include #endif +/* We undefine FAR to avoid conflict with JPEG definition */ + +#ifdef FAR +#undef FAR +#endif + +/* + Libjpeg's jmorecfg.h defines INT16 and INT32, but only if XMD_H is + not defined. Unfortunately, the MinGW and Borland compilers include + a typedef for INT32, which causes a conflict. MSVC does not include + a conficting typedef given the headers which are included. +*/ +#if defined(__BORLANDC__) || defined(__MINGW32__) +# define XMD_H 1 +#endif + +/* Define "boolean" as unsigned char, not int, per Windows custom. */ +#if defined(__WIN32__) && !defined(__MINGW32__) +# ifndef __RPCNDR_H__ /* don't conflict if rpcndr.h already read */ + typedef unsigned char boolean; +# endif +# define HAVE_BOOLEAN /* prevent jmorecfg.h from redefining it */ +#endif + #include "jpeglib.h" #include "jerror.h" @@ -224,7 +249,8 @@ typedef struct { #endif TIFFVGetMethod vgetparent; TIFFVSetMethod vsetparent; - toff_t file_size; + TIFFPrintMethod printdir; + uint64 file_size; uint32 image_width; uint32 image_length; uint32 strile_width; @@ -233,8 +259,8 @@ typedef struct { uint8 samples_per_pixel; uint8 plane_sample_offset; uint8 samples_per_pixel_per_plane; - toff_t jpeg_interchange_format; - toff_t jpeg_interchange_format_length; + uint64 jpeg_interchange_format; + uint64 jpeg_interchange_format_length; uint8 jpeg_proc; uint8 subsamplingcorrect; uint8 subsamplingcorrect_done; @@ -245,9 +271,9 @@ typedef struct { uint8 qtable_offset_count; uint8 dctable_offset_count; uint8 actable_offset_count; - toff_t qtable_offset[3]; - toff_t dctable_offset[3]; - toff_t actable_offset[3]; + uint64 qtable_offset[3]; + uint64 dctable_offset[3]; + uint64 actable_offset[3]; uint8* qtable[4]; uint8* dctable[4]; uint8* actable[4]; @@ -265,14 +291,14 @@ typedef struct { struct { uint8 log; OJPEGStateInBufferSource in_buffer_source; - tstrile_t in_buffer_next_strile; - toff_t in_buffer_file_pos; - toff_t in_buffer_file_togo; + uint32 in_buffer_next_strile; + uint64 in_buffer_file_pos; + uint64 in_buffer_file_togo; } sos_end[3]; uint8 readheader_done; uint8 writeheader_done; - tsample_t write_cursample; - tstrile_t write_curstrile; + uint16 write_cursample; + uint32 write_curstrile; uint8 libjpeg_session_active; uint8 libjpeg_jpeg_query_style; jpeg_error_mgr libjpeg_jpeg_error_mgr; @@ -297,11 +323,11 @@ typedef struct { uint32 bytes_per_line; /* if the codec outputs subsampled data, a 'line' in bytes_per_line */ uint32 lines_per_strile; /* and lines_per_strile means subsampling_ver desubsampled rows */ OJPEGStateInBufferSource in_buffer_source; - tstrile_t in_buffer_next_strile; - tstrile_t in_buffer_strile_count; - toff_t in_buffer_file_pos; + uint32 in_buffer_next_strile; + uint32 in_buffer_strile_count; + uint64 in_buffer_file_pos; uint8 in_buffer_file_pos_log; - toff_t in_buffer_file_togo; + uint64 in_buffer_file_togo; uint16 in_buffer_togo; uint8* in_buffer_cur; uint8 in_buffer[OJPEG_BUFFER]; @@ -310,27 +336,28 @@ typedef struct { uint8* skip_buffer; } OJPEGState; -static int OJPEGVGetField(TIFF* tif, ttag_t tag, va_list ap); -static int OJPEGVSetField(TIFF* tif, ttag_t tag, va_list ap); +static int OJPEGVGetField(TIFF* tif, uint32 tag, va_list ap); +static int OJPEGVSetField(TIFF* tif, uint32 tag, va_list ap); static void OJPEGPrintDir(TIFF* tif, FILE* fd, long flags); +static int OJPEGFixupTags(TIFF* tif); static int OJPEGSetupDecode(TIFF* tif); -static int OJPEGPreDecode(TIFF* tif, tsample_t s); +static int OJPEGPreDecode(TIFF* tif, uint16 s); static int OJPEGPreDecodeSkipRaw(TIFF* tif); static int OJPEGPreDecodeSkipScanlines(TIFF* tif); -static int OJPEGDecode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s); -static int OJPEGDecodeRaw(TIFF* tif, tidata_t buf, tsize_t cc); -static int OJPEGDecodeScanlines(TIFF* tif, tidata_t buf, tsize_t cc); -static void OJPEGPostDecode(TIFF* tif, tidata_t buf, tsize_t cc); +static int OJPEGDecode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s); +static int OJPEGDecodeRaw(TIFF* tif, uint8* buf, tmsize_t cc); +static int OJPEGDecodeScanlines(TIFF* tif, uint8* buf, tmsize_t cc); +static void OJPEGPostDecode(TIFF* tif, uint8* buf, tmsize_t cc); static int OJPEGSetupEncode(TIFF* tif); -static int OJPEGPreEncode(TIFF* tif, tsample_t s); -static int OJPEGEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s); +static int OJPEGPreEncode(TIFF* tif, uint16 s); +static int OJPEGEncode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s); static int OJPEGPostEncode(TIFF* tif); static void OJPEGCleanup(TIFF* tif); static void OJPEGSubsamplingCorrect(TIFF* tif); static int OJPEGReadHeaderInfo(TIFF* tif); -static int OJPEGReadSecondarySos(TIFF* tif, tsample_t s); +static int OJPEGReadSecondarySos(TIFF* tif, uint16 s); static int OJPEGWriteHeaderInfo(TIFF* tif); static void OJPEGLibjpegSessionAbort(TIFF* tif); @@ -399,9 +426,9 @@ TIFFInitOJPEG(TIFF* tif, int scheme) /* * Merge codec-specific tag information. */ - if (!_TIFFMergeFieldInfo(tif,ojpeg_field_info,FIELD_OJPEG_COUNT)) { + if (!_TIFFMergeFields(tif, ojpegFields, TIFFArrayCount(ojpegFields))) { TIFFErrorExt(tif->tif_clientdata, module, - "Merging Old JPEG codec-specific tags failed"); + "Merging Old JPEG codec-specific tags failed"); return 0; } @@ -419,25 +446,27 @@ TIFFInitOJPEG(TIFF* tif, int scheme) sp->subsampling_ver=2; TIFFSetField(tif,TIFFTAG_YCBCRSUBSAMPLING,2,2); /* tif codec methods */ + tif->tif_fixuptags=OJPEGFixupTags; tif->tif_setupdecode=OJPEGSetupDecode; tif->tif_predecode=OJPEGPreDecode; - tif->tif_postdecode=OJPEGPostDecode; - tif->tif_decoderow=OJPEGDecode; - tif->tif_decodestrip=OJPEGDecode; - tif->tif_decodetile=OJPEGDecode; + tif->tif_postdecode=OJPEGPostDecode; + tif->tif_decoderow=OJPEGDecode; + tif->tif_decodestrip=OJPEGDecode; + tif->tif_decodetile=OJPEGDecode; tif->tif_setupencode=OJPEGSetupEncode; tif->tif_preencode=OJPEGPreEncode; tif->tif_postencode=OJPEGPostEncode; - tif->tif_encoderow=OJPEGEncode; - tif->tif_encodestrip=OJPEGEncode; - tif->tif_encodetile=OJPEGEncode; + tif->tif_encoderow=OJPEGEncode; + tif->tif_encodestrip=OJPEGEncode; + tif->tif_encodetile=OJPEGEncode; tif->tif_cleanup=OJPEGCleanup; - tif->tif_data=(tidata_t)sp; + tif->tif_data=(uint8*)sp; /* tif tag methods */ sp->vgetparent=tif->tif_tagmethods.vgetfield; tif->tif_tagmethods.vgetfield=OJPEGVGetField; sp->vsetparent=tif->tif_tagmethods.vsetfield; tif->tif_tagmethods.vsetfield=OJPEGVSetField; + sp->printdir=tif->tif_tagmethods.printdir; tif->tif_tagmethods.printdir=OJPEGPrintDir; /* Some OJPEG files don't have strip or tile offsets or bytecounts tags. Some others do, but have totally meaningless or corrupt values @@ -450,16 +479,16 @@ TIFFInitOJPEG(TIFF* tif, int scheme) } static int -OJPEGVGetField(TIFF* tif, ttag_t tag, va_list ap) +OJPEGVGetField(TIFF* tif, uint32 tag, va_list ap) { OJPEGState* sp=(OJPEGState*)tif->tif_data; switch(tag) { case TIFFTAG_JPEGIFOFFSET: - *va_arg(ap,uint32*)=(uint32)sp->jpeg_interchange_format; + *va_arg(ap,uint64*)=(uint64)sp->jpeg_interchange_format; break; case TIFFTAG_JPEGIFBYTECOUNT: - *va_arg(ap,uint32*)=(uint32)sp->jpeg_interchange_format_length; + *va_arg(ap,uint64*)=(uint64)sp->jpeg_interchange_format_length; break; case TIFFTAG_YCBCRSUBSAMPLING: if (sp->subsamplingcorrect_done==0) @@ -469,11 +498,11 @@ OJPEGVGetField(TIFF* tif, ttag_t tag, va_list ap) break; case TIFFTAG_JPEGQTABLES: *va_arg(ap,uint32*)=(uint32)sp->qtable_offset_count; - *va_arg(ap,void**)=(void*)sp->qtable_offset; + *va_arg(ap,void**)=(void*)sp->qtable_offset; break; case TIFFTAG_JPEGDCTABLES: *va_arg(ap,uint32*)=(uint32)sp->dctable_offset_count; - *va_arg(ap,void**)=(void*)sp->dctable_offset; + *va_arg(ap,void**)=(void*)sp->dctable_offset; break; case TIFFTAG_JPEGACTABLES: *va_arg(ap,uint32*)=(uint32)sp->actable_offset_count; @@ -492,30 +521,30 @@ OJPEGVGetField(TIFF* tif, ttag_t tag, va_list ap) } static int -OJPEGVSetField(TIFF* tif, ttag_t tag, va_list ap) +OJPEGVSetField(TIFF* tif, uint32 tag, va_list ap) { static const char module[]="OJPEGVSetField"; OJPEGState* sp=(OJPEGState*)tif->tif_data; uint32 ma; - uint32* mb; + uint64* mb; uint32 n; switch(tag) { case TIFFTAG_JPEGIFOFFSET: - sp->jpeg_interchange_format=(toff_t)va_arg(ap,uint32); + sp->jpeg_interchange_format=(uint64)va_arg(ap,uint64); break; case TIFFTAG_JPEGIFBYTECOUNT: - sp->jpeg_interchange_format_length=(toff_t)va_arg(ap,uint32); + sp->jpeg_interchange_format_length=(uint64)va_arg(ap,uint64); break; case TIFFTAG_YCBCRSUBSAMPLING: sp->subsampling_tag=1; - sp->subsampling_hor=(uint8)va_arg(ap,int); - sp->subsampling_ver=(uint8)va_arg(ap,int); + sp->subsampling_hor=(uint8)va_arg(ap,uint16_vap); + sp->subsampling_ver=(uint8)va_arg(ap,uint16_vap); tif->tif_dir.td_ycbcrsubsampling[0]=sp->subsampling_hor; tif->tif_dir.td_ycbcrsubsampling[1]=sp->subsampling_ver; break; case TIFFTAG_JPEGQTABLES: - ma=va_arg(ap,uint32); + ma=(uint32)va_arg(ap,uint32); if (ma!=0) { if (ma>3) @@ -524,13 +553,13 @@ OJPEGVSetField(TIFF* tif, ttag_t tag, va_list ap) return(0); } sp->qtable_offset_count=(uint8)ma; - mb=va_arg(ap,uint32*); + mb=(uint64*)va_arg(ap,uint64*); for (n=0; nqtable_offset[n]=(toff_t)mb[n]; + sp->qtable_offset[n]=mb[n]; } break; case TIFFTAG_JPEGDCTABLES: - ma=va_arg(ap,uint32); + ma=(uint32)va_arg(ap,uint32); if (ma!=0) { if (ma>3) @@ -539,13 +568,13 @@ OJPEGVSetField(TIFF* tif, ttag_t tag, va_list ap) return(0); } sp->dctable_offset_count=(uint8)ma; - mb=va_arg(ap,uint32*); + mb=(uint64*)va_arg(ap,uint64*); for (n=0; ndctable_offset[n]=(toff_t)mb[n]; + sp->dctable_offset[n]=mb[n]; } break; case TIFFTAG_JPEGACTABLES: - ma=va_arg(ap,uint32); + ma=(uint32)va_arg(ap,uint32); if (ma!=0) { if (ma>3) @@ -554,21 +583,21 @@ OJPEGVSetField(TIFF* tif, ttag_t tag, va_list ap) return(0); } sp->actable_offset_count=(uint8)ma; - mb=va_arg(ap,uint32*); + mb=(uint64*)va_arg(ap,uint64*); for (n=0; nactable_offset[n]=(toff_t)mb[n]; + sp->actable_offset[n]=mb[n]; } break; case TIFFTAG_JPEGPROC: - sp->jpeg_proc=(uint8)va_arg(ap,uint32); + sp->jpeg_proc=(uint8)va_arg(ap,uint16_vap); break; case TIFFTAG_JPEGRESTARTINTERVAL: - sp->restart_interval=(uint16)va_arg(ap,uint32); + sp->restart_interval=(uint16)va_arg(ap,uint16_vap); break; default: return (*sp->vsetparent)(tif,tag,ap); } - TIFFSetFieldBit(tif,_TIFFFieldWithTag(tif,tag)->field_bit); + TIFFSetFieldBit(tif,TIFFFieldWithTag(tif,tag)->field_bit); tif->tif_flags|=TIFF_DIRTYDIRECT; return(1); } @@ -581,34 +610,43 @@ OJPEGPrintDir(TIFF* tif, FILE* fd, long flags) (void)flags; assert(sp!=NULL); if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGINTERCHANGEFORMAT)) - fprintf(fd," JpegInterchangeFormat: %lu\n",(unsigned long)sp->jpeg_interchange_format); + fprintf(fd," JpegInterchangeFormat: " TIFF_UINT64_FORMAT "\n",(TIFF_UINT64_T)sp->jpeg_interchange_format); if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGINTERCHANGEFORMATLENGTH)) - fprintf(fd," JpegInterchangeFormatLength: %lu\n",(unsigned long)sp->jpeg_interchange_format_length); + fprintf(fd," JpegInterchangeFormatLength: " TIFF_UINT64_FORMAT "\n",(TIFF_UINT64_T)sp->jpeg_interchange_format_length); if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGQTABLES)) { fprintf(fd," JpegQTables:"); for (m=0; mqtable_offset_count; m++) - fprintf(fd," %lu",(unsigned long)sp->qtable_offset[m]); + fprintf(fd," " TIFF_UINT64_FORMAT,(TIFF_UINT64_T)sp->qtable_offset[m]); fprintf(fd,"\n"); } if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGDCTABLES)) { fprintf(fd," JpegDcTables:"); for (m=0; mdctable_offset_count; m++) - fprintf(fd," %lu",(unsigned long)sp->dctable_offset[m]); + fprintf(fd," " TIFF_UINT64_FORMAT,(TIFF_UINT64_T)sp->dctable_offset[m]); fprintf(fd,"\n"); } if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGACTABLES)) { fprintf(fd," JpegAcTables:"); for (m=0; mactable_offset_count; m++) - fprintf(fd," %lu",(unsigned long)sp->actable_offset[m]); + fprintf(fd," " TIFF_UINT64_FORMAT,(TIFF_UINT64_T)sp->actable_offset[m]); fprintf(fd,"\n"); } if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGPROC)) fprintf(fd," JpegProc: %u\n",(unsigned int)sp->jpeg_proc); if (TIFFFieldSet(tif,FIELD_OJPEG_JPEGRESTARTINTERVAL)) fprintf(fd," JpegRestartInterval: %u\n",(unsigned int)sp->restart_interval); + if (sp->printdir) + (*sp->printdir)(tif, fd, flags); +} + +static int +OJPEGFixupTags(TIFF* tif) +{ + (void) tif; + return(1); } static int @@ -620,10 +658,10 @@ OJPEGSetupDecode(TIFF* tif) } static int -OJPEGPreDecode(TIFF* tif, tsample_t s) +OJPEGPreDecode(TIFF* tif, uint16 s) { OJPEGState* sp=(OJPEGState*)tif->tif_data; - tstrile_t m; + uint32 m; if (sp->subsamplingcorrect_done==0) OJPEGSubsamplingCorrect(tif); if (sp->readheader_done==0) @@ -637,9 +675,9 @@ OJPEGPreDecode(TIFF* tif, tsample_t s) return(0); } if isTiled(tif) - m=(tstrile_t)tif->tif_curtile; + m=tif->tif_curtile; else - m=(tstrile_t)tif->tif_curstrip; + m=tif->tif_curstrip; if ((sp->writeheader_done!=0) && ((sp->write_cursample!=s) || (sp->write_curstrile>m))) { if (sp->libjpeg_session_active!=0) @@ -648,7 +686,7 @@ OJPEGPreDecode(TIFF* tif, tsample_t s) } if (sp->writeheader_done==0) { - sp->plane_sample_offset=s; + sp->plane_sample_offset=(uint8)s; sp->write_cursample=s; sp->write_curstrile=s*tif->tif_dir.td_stripsperimage; if ((sp->in_buffer_file_pos_log==0) || @@ -739,7 +777,7 @@ OJPEGPreDecodeSkipScanlines(TIFF* tif) } static int -OJPEGDecode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) +OJPEGDecode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s) { OJPEGState* sp=(OJPEGState*)tif->tif_data; (void)s; @@ -757,12 +795,12 @@ OJPEGDecode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) } static int -OJPEGDecodeRaw(TIFF* tif, tidata_t buf, tsize_t cc) +OJPEGDecodeRaw(TIFF* tif, uint8* buf, tmsize_t cc) { static const char module[]="OJPEGDecodeRaw"; OJPEGState* sp=(OJPEGState*)tif->tif_data; uint8* m; - uint32 n; + tmsize_t n; uint8* oy; uint8* ocb; uint8* ocr; @@ -812,12 +850,12 @@ OJPEGDecodeRaw(TIFF* tif, tidata_t buf, tsize_t cc) } static int -OJPEGDecodeScanlines(TIFF* tif, tidata_t buf, tsize_t cc) +OJPEGDecodeScanlines(TIFF* tif, uint8* buf, tmsize_t cc) { static const char module[]="OJPEGDecodeScanlines"; OJPEGState* sp=(OJPEGState*)tif->tif_data; uint8* m; - uint32 n; + tmsize_t n; if (cc%sp->bytes_per_line!=0) { TIFFErrorExt(tif->tif_clientdata,module,"Fractional scanline not read"); @@ -837,13 +875,13 @@ OJPEGDecodeScanlines(TIFF* tif, tidata_t buf, tsize_t cc) } static void -OJPEGPostDecode(TIFF* tif, tidata_t buf, tsize_t cc) +OJPEGPostDecode(TIFF* tif, uint8* buf, tmsize_t cc) { OJPEGState* sp=(OJPEGState*)tif->tif_data; (void)buf; (void)cc; sp->write_curstrile++; - if (sp->write_curstrile%tif->tif_dir.td_stripsperimage==0) + if (sp->write_curstrile%tif->tif_dir.td_stripsperimage==0) { assert(sp->libjpeg_session_active!=0); OJPEGLibjpegSessionAbort(tif); @@ -860,7 +898,7 @@ OJPEGSetupEncode(TIFF* tif) } static int -OJPEGPreEncode(TIFF* tif, tsample_t s) +OJPEGPreEncode(TIFF* tif, uint16 s) { static const char module[]="OJPEGPreEncode"; (void)s; @@ -869,7 +907,7 @@ OJPEGPreEncode(TIFF* tif, tsample_t s) } static int -OJPEGEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) +OJPEGEncode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s) { static const char module[]="OJPEGEncode"; (void)buf; @@ -895,6 +933,7 @@ OJPEGCleanup(TIFF* tif) { tif->tif_tagmethods.vgetfield=sp->vgetparent; tif->tif_tagmethods.vsetfield=sp->vsetparent; + tif->tif_tagmethods.printdir=sp->printdir; if (sp->qtable[0]!=0) _TIFFfree(sp->qtable[0]); if (sp->qtable[1]!=0) @@ -940,6 +979,8 @@ OJPEGSubsamplingCorrect(TIFF* tif) OJPEGState* sp=(OJPEGState*)tif->tif_data; uint8 mh; uint8 mv; + _TIFFFillStriles( tif ); + assert(sp->subsamplingcorrect_done==0); if ((tif->tif_dir.td_samplesperpixel!=3) || ((tif->tif_dir.td_photometric!=PHOTOMETRIC_YCBCR) && (tif->tif_dir.td_photometric!=PHOTOMETRIC_ITULAB))) @@ -1006,9 +1047,9 @@ OJPEGReadHeaderInfo(TIFF* tif) sp->strile_length=tif->tif_dir.td_rowsperstrip; sp->strile_length_total=sp->image_length; } - sp->samples_per_pixel=tif->tif_dir.td_samplesperpixel; - if (sp->samples_per_pixel==1) + if (tif->tif_dir.td_samplesperpixel==1) { + sp->samples_per_pixel=1; sp->plane_sample_offset=0; sp->samples_per_pixel_per_plane=sp->samples_per_pixel; sp->subsampling_hor=1; @@ -1016,11 +1057,12 @@ OJPEGReadHeaderInfo(TIFF* tif) } else { - if (sp->samples_per_pixel!=3) + if (tif->tif_dir.td_samplesperpixel!=3) { TIFFErrorExt(tif->tif_clientdata,module,"SamplesPerPixel %d not supported for this compression scheme",sp->samples_per_pixel); return(0); } + sp->samples_per_pixel=3; sp->plane_sample_offset=0; if (tif->tif_dir.td_planarconfig==PLANARCONFIG_CONTIG) sp->samples_per_pixel_per_plane=3; @@ -1042,13 +1084,13 @@ OJPEGReadHeaderInfo(TIFF* tif) sp->sos_end[0].in_buffer_source=sp->in_buffer_source; sp->sos_end[0].in_buffer_next_strile=sp->in_buffer_next_strile; sp->sos_end[0].in_buffer_file_pos=sp->in_buffer_file_pos-sp->in_buffer_togo; - sp->sos_end[0].in_buffer_file_togo=sp->in_buffer_file_togo+sp->in_buffer_togo; + sp->sos_end[0].in_buffer_file_togo=sp->in_buffer_file_togo+sp->in_buffer_togo; sp->readheader_done=1; return(1); } static int -OJPEGReadSecondarySos(TIFF* tif, tsample_t s) +OJPEGReadSecondarySos(TIFF* tif, uint16 s) { OJPEGState* sp=(OJPEGState*)tif->tif_data; uint8 m; @@ -1061,7 +1103,7 @@ OJPEGReadSecondarySos(TIFF* tif, tsample_t s) sp->plane_sample_offset--; sp->in_buffer_source=sp->sos_end[sp->plane_sample_offset].in_buffer_source; sp->in_buffer_next_strile=sp->sos_end[sp->plane_sample_offset].in_buffer_next_strile; - sp->in_buffer_file_pos=sp->sos_end[sp->plane_sample_offset].in_buffer_file_pos; + sp->in_buffer_file_pos=sp->sos_end[sp->plane_sample_offset].in_buffer_file_pos; sp->in_buffer_file_pos_log=0; sp->in_buffer_file_togo=sp->sos_end[sp->plane_sample_offset].in_buffer_file_togo; sp->in_buffer_togo=0; @@ -1104,7 +1146,9 @@ OJPEGWriteHeaderInfo(TIFF* tif) OJPEGState* sp=(OJPEGState*)tif->tif_data; uint8** m; uint32 n; - assert(sp->libjpeg_session_active==0); + /* if a previous attempt failed, don't try again */ + if (sp->libjpeg_session_active != 0) + return 0; sp->out_state=ososSoi; sp->restart_index=0; jpeg_std_error(&(sp->libjpeg_jpeg_error_mgr)); @@ -1223,7 +1267,7 @@ OJPEGReadHeaderInfoSec(TIFF* tif) } sp->in_buffer_source=osibsNotSetYet; sp->in_buffer_next_strile=0; - sp->in_buffer_strile_count=tif->tif_dir.td_nstrips; + sp->in_buffer_strile_count=tif->tif_dir.td_nstrips; sp->in_buffer_file_togo=0; sp->in_buffer_togo=0; do @@ -1391,12 +1435,15 @@ OJPEGReadHeaderInfoSecStreamDqt(TIFF* tif) nb[sizeof(uint32)+1]=JPEG_MARKER_DQT; nb[sizeof(uint32)+2]=0; nb[sizeof(uint32)+3]=67; - if (OJPEGReadBlock(sp,65,&nb[sizeof(uint32)+4])==0) + if (OJPEGReadBlock(sp,65,&nb[sizeof(uint32)+4])==0) { + _TIFFfree(nb); return(0); + } o=nb[sizeof(uint32)+4]&15; if (3tif_clientdata,module,"Corrupt DQT marker in JPEG data"); + _TIFFfree(nb); return(0); } if (sp->qtable[o]!=0) @@ -1537,11 +1584,10 @@ OJPEGReadHeaderInfoSecStreamSof(TIFF* tif, uint8 marker_id) OJPEGReadSkip(sp,4); else { - /* TODO: probably best to also add check on allowed upper bound, especially x, may cause buffer overflow otherwise i think */ /* Y: Number of lines */ if (OJPEGReadWord(sp,&p)==0) return(0); - if ((pimage_length) && (pstrile_length_total)) + if (((uint32)pimage_length) && ((uint32)pstrile_length_total)) { TIFFErrorExt(tif->tif_clientdata,module,"JPEG compressed data indicates unexpected height"); return(0); @@ -1550,11 +1596,16 @@ OJPEGReadHeaderInfoSecStreamSof(TIFF* tif, uint8 marker_id) /* X: Number of samples per line */ if (OJPEGReadWord(sp,&p)==0) return(0); - if ((pimage_width) && (pstrile_width)) + if (((uint32)pimage_width) && ((uint32)pstrile_width)) { TIFFErrorExt(tif->tif_clientdata,module,"JPEG compressed data indicates unexpected width"); return(0); } + if ((uint32)p>sp->strile_width) + { + TIFFErrorExt(tif->tif_clientdata,module,"JPEG compressed data image width exceeds expected image width"); + return(0); + } sp->sof_x=p; } /* Nf: Number of image components in frame */ @@ -1717,7 +1768,7 @@ OJPEGReadHeaderInfoSecTablesQTable(TIFF* tif) ob[sizeof(uint32)+2]=0; ob[sizeof(uint32)+3]=67; ob[sizeof(uint32)+4]=m; - TIFFSeekFile(tif,sp->qtable_offset[m],SEEK_SET); + TIFFSeekFile(tif,sp->qtable_offset[m],SEEK_SET); p=TIFFReadFile(tif,&ob[sizeof(uint32)+5],64); if (p!=64) return(0); @@ -1824,7 +1875,7 @@ OJPEGReadHeaderInfoSecTablesAcTable(TIFF* tif) return(0); } } - TIFFSeekFile(tif,sp->actable_offset[m],SEEK_SET); + TIFFSeekFile(tif,sp->actable_offset[m],SEEK_SET); p=TIFFReadFile(tif,o,16); if (p!=16) return(0); @@ -1862,7 +1913,7 @@ static int OJPEGReadBufferFill(OJPEGState* sp) { uint16 m; - tsize_t n; + tmsize_t n; /* TODO: double-check: when subsamplingcorrect is set, no call to TIFFErrorExt or TIFFWarningExt should be made * in any other case, seek or read errors should be passed through */ do @@ -1875,15 +1926,15 @@ OJPEGReadBufferFill(OJPEGState* sp) sp->in_buffer_file_pos_log=1; } m=OJPEG_BUFFER; - if (m>sp->in_buffer_file_togo) + if ((uint64)m>sp->in_buffer_file_togo) m=(uint16)sp->in_buffer_file_togo; - n=TIFFReadFile(sp->tif,sp->in_buffer,(tsize_t)m); + n=TIFFReadFile(sp->tif,sp->in_buffer,(tmsize_t)m); if (n==0) return(0); assert(n>0); assert(n<=OJPEG_BUFFER); assert(n<65536); - assert((uint16)n<=sp->in_buffer_file_togo); + assert((uint64)n<=sp->in_buffer_file_togo); m=(uint16)n; sp->in_buffer_togo=m; sp->in_buffer_cur=sp->in_buffer; @@ -1905,22 +1956,29 @@ OJPEGReadBufferFill(OJPEGState* sp) case osibsJpegInterchangeFormat: sp->in_buffer_source=osibsStrile; case osibsStrile: - if (sp->in_buffer_next_strile==sp->in_buffer_strile_count) + if (!_TIFFFillStriles( sp->tif ) + || sp->tif->tif_dir.td_stripoffset == NULL + || sp->tif->tif_dir.td_stripbytecount == NULL) + return 0; + + if (sp->in_buffer_next_strile==sp->in_buffer_strile_count) sp->in_buffer_source=osibsEof; else { - if (sp->tif->tif_dir.td_stripoffset == 0) { - TIFFErrorExt(sp->tif->tif_clientdata,sp->tif->tif_name,"Strip offsets are missing"); - return(0); - } - sp->in_buffer_file_pos=sp->tif->tif_dir.td_stripoffset[sp->in_buffer_next_strile]; + sp->in_buffer_file_pos=sp->tif->tif_dir.td_stripoffset[sp->in_buffer_next_strile]; if (sp->in_buffer_file_pos!=0) { if (sp->in_buffer_file_pos>=sp->file_size) sp->in_buffer_file_pos=0; + else if (sp->tif->tif_dir.td_stripbytecount==NULL) + sp->in_buffer_file_togo=sp->file_size-sp->in_buffer_file_pos; else { - sp->in_buffer_file_togo=sp->tif->tif_dir.td_stripbytecount[sp->in_buffer_next_strile]; + if (sp->tif->tif_dir.td_stripbytecount == 0) { + TIFFErrorExt(sp->tif->tif_clientdata,sp->tif->tif_name,"Strip byte counts are missing"); + return(0); + } + sp->in_buffer_file_togo=sp->tif->tif_dir.td_stripbytecount[sp->in_buffer_next_strile]; if (sp->in_buffer_file_togo==0) sp->in_buffer_file_pos=0; else if (sp->in_buffer_file_pos+sp->in_buffer_file_togo>sp->file_size) @@ -2031,8 +2089,8 @@ OJPEGReadSkip(OJPEGState* sp, uint16 len) { assert(sp->in_buffer_togo==0); n=m; - if (n>sp->in_buffer_file_togo) - n=sp->in_buffer_file_togo; + if ((uint64)n>sp->in_buffer_file_togo) + n=(uint16)sp->in_buffer_file_togo; sp->in_buffer_file_pos+=n; sp->in_buffer_file_togo-=n; sp->in_buffer_file_pos_log=0; @@ -2271,7 +2329,7 @@ OJPEGWriteStreamCompressed(TIFF* tif, void** mem, uint32* len) switch(sp->in_buffer_source) { case osibsStrile: - if (sp->in_buffer_next_strilein_buffer_strile_count) + if (sp->in_buffer_next_strilein_buffer_strile_count) sp->out_state=ososRst; else sp->out_state=ososEoi; @@ -2366,7 +2424,7 @@ OJPEGLibjpegJpegErrorMgrOutputMessage(jpeg_common_struct* cinfo) { char buffer[JMSG_LENGTH_MAX]; (*cinfo->err->format_message)(cinfo,buffer); - TIFFWarningExt(((TIFF*)(cinfo->client_data))->tif_clientdata,"LibJpeg", "%s", buffer); + TIFFWarningExt(((TIFF*)(cinfo->client_data))->tif_clientdata,"LibJpeg","%s",buffer); } static void @@ -2374,7 +2432,7 @@ OJPEGLibjpegJpegErrorMgrErrorExit(jpeg_common_struct* cinfo) { char buffer[JMSG_LENGTH_MAX]; (*cinfo->err->format_message)(cinfo,buffer); - TIFFErrorExt(((TIFF*)(cinfo->client_data))->tif_clientdata,"LibJpeg", "%s", buffer); + TIFFErrorExt(((TIFF*)(cinfo->client_data))->tif_clientdata,"LibJpeg","%s",buffer); jpeg_encap_unwind((TIFF*)(cinfo->client_data)); } @@ -2390,7 +2448,7 @@ OJPEGLibjpegJpegSourceMgrFillInputBuffer(jpeg_decompress_struct* cinfo) TIFF* tif=(TIFF*)cinfo->client_data; OJPEGState* sp=(OJPEGState*)tif->tif_data; void* mem=0; - uint32 len=0; + uint32 len=0U; if (OJPEGWriteStream(tif,&mem,&len)==0) { TIFFErrorExt(tif->tif_clientdata,"LibJpeg","Premature end of JPEG data"); diff --git a/dll/3rdparty/libtiff/tif_open.c b/dll/3rdparty/libtiff/tif_open.c index d3ef004d863..8c88328cf28 100644 --- a/dll/3rdparty/libtiff/tif_open.c +++ b/dll/3rdparty/libtiff/tif_open.c @@ -1,4 +1,4 @@ -/* $Id: tif_open.c,v 1.33.2.1 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Id: tif_open.c,v 1.46 2010-12-06 16:54:54 faxguy Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -29,90 +29,22 @@ */ #include "tiffiop.h" -static const long typemask[13] = { - (long)0L, /* TIFF_NOTYPE */ - (long)0x000000ffL, /* TIFF_BYTE */ - (long)0xffffffffL, /* TIFF_ASCII */ - (long)0x0000ffffL, /* TIFF_SHORT */ - (long)0xffffffffL, /* TIFF_LONG */ - (long)0xffffffffL, /* TIFF_RATIONAL */ - (long)0x000000ffL, /* TIFF_SBYTE */ - (long)0x000000ffL, /* TIFF_UNDEFINED */ - (long)0x0000ffffL, /* TIFF_SSHORT */ - (long)0xffffffffL, /* TIFF_SLONG */ - (long)0xffffffffL, /* TIFF_SRATIONAL */ - (long)0xffffffffL, /* TIFF_FLOAT */ - (long)0xffffffffL, /* TIFF_DOUBLE */ -}; -static const int bigTypeshift[13] = { - 0, /* TIFF_NOTYPE */ - 24, /* TIFF_BYTE */ - 0, /* TIFF_ASCII */ - 16, /* TIFF_SHORT */ - 0, /* TIFF_LONG */ - 0, /* TIFF_RATIONAL */ - 24, /* TIFF_SBYTE */ - 24, /* TIFF_UNDEFINED */ - 16, /* TIFF_SSHORT */ - 0, /* TIFF_SLONG */ - 0, /* TIFF_SRATIONAL */ - 0, /* TIFF_FLOAT */ - 0, /* TIFF_DOUBLE */ -}; -static const int litTypeshift[13] = { - 0, /* TIFF_NOTYPE */ - 0, /* TIFF_BYTE */ - 0, /* TIFF_ASCII */ - 0, /* TIFF_SHORT */ - 0, /* TIFF_LONG */ - 0, /* TIFF_RATIONAL */ - 0, /* TIFF_SBYTE */ - 0, /* TIFF_UNDEFINED */ - 0, /* TIFF_SSHORT */ - 0, /* TIFF_SLONG */ - 0, /* TIFF_SRATIONAL */ - 0, /* TIFF_FLOAT */ - 0, /* TIFF_DOUBLE */ -}; - /* * Dummy functions to fill the omitted client procedures. */ static int -_tiffDummyMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) +_tiffDummyMapProc(thandle_t fd, void** pbase, toff_t* psize) { (void) fd; (void) pbase; (void) psize; return (0); } static void -_tiffDummyUnmapProc(thandle_t fd, tdata_t base, toff_t size) +_tiffDummyUnmapProc(thandle_t fd, void* base, toff_t size) { (void) fd; (void) base; (void) size; } -/* - * Initialize the shift & mask tables, and the - * byte swapping state according to the file - * contents and the machine architecture. - */ -static void -TIFFInitOrder(TIFF* tif, int magic) -{ - tif->tif_typemask = typemask; - if (magic == TIFF_BIGENDIAN) { - tif->tif_typeshift = bigTypeshift; -#ifndef WORDS_BIGENDIAN - tif->tif_flags |= TIFF_SWAB; -#endif - } else { - tif->tif_typeshift = litTypeshift; -#ifdef WORDS_BIGENDIAN - tif->tif_flags |= TIFF_SWAB; -#endif - } -} - int _TIFFgetMode(const char* mode, const char* module) { @@ -155,10 +87,36 @@ TIFFClientOpen( int m; const char* cp; + /* The following are configuration checks. They should be redundant, but should not + * compile to any actual code in an optimised release build anyway. If any of them + * fail, (makefile-based or other) configuration is not correct */ + assert(sizeof(uint8)==1); + assert(sizeof(int8)==1); + assert(sizeof(uint16)==2); + assert(sizeof(int16)==2); + assert(sizeof(uint32)==4); + assert(sizeof(int32)==4); + assert(sizeof(uint64)==8); + assert(sizeof(int64)==8); + assert(sizeof(tmsize_t)==sizeof(void*)); + { + union{ + uint8 a8[2]; + uint16 a16; + } n; + n.a8[0]=1; + n.a8[1]=0; + #ifdef WORDS_BIGENDIAN + assert(n.a16==256); + #else + assert(n.a16==1); + #endif + } + m = _TIFFgetMode(mode, module); if (m == -1) goto bad2; - tif = (TIFF *)_TIFFmalloc(sizeof (TIFF) + strlen(name) + 1); + tif = (TIFF *)_TIFFmalloc((tmsize_t)(sizeof (TIFF) + strlen(name) + 1)); if (tif == NULL) { TIFFErrorExt(clientdata, module, "%s: Out of memory (TIFF structure)", name); goto bad2; @@ -167,14 +125,14 @@ TIFFClientOpen( tif->tif_name = (char *)tif + sizeof (TIFF); strcpy(tif->tif_name, name); tif->tif_mode = m &~ (O_CREAT|O_TRUNC); - tif->tif_curdir = (tdir_t) -1; /* non-existent directory */ + tif->tif_curdir = (uint16) -1; /* non-existent directory */ tif->tif_curoff = 0; - tif->tif_curstrip = (tstrip_t) -1; /* invalid strip */ + tif->tif_curstrip = (uint32) -1; /* invalid strip */ tif->tif_row = (uint32) -1; /* read/write pre-increment */ tif->tif_clientdata = clientdata; if (!readproc || !writeproc || !seekproc || !closeproc || !sizeproc) { TIFFErrorExt(clientdata, module, - "One of the client procedures is NULL pointer."); + "One of the client procedures is NULL pointer."); goto bad2; } tif->tif_readproc = readproc; @@ -182,7 +140,7 @@ TIFFClientOpen( tif->tif_seekproc = seekproc; tif->tif_closeproc = closeproc; tif->tif_sizeproc = sizeproc; - if (mapproc) + if (mapproc) tif->tif_mapproc = mapproc; else tif->tif_mapproc = _tiffDummyMapProc; @@ -190,7 +148,7 @@ TIFFClientOpen( tif->tif_unmapproc = unmapproc; else tif->tif_unmapproc = _tiffDummyUnmapProc; - _TIFFSetDefaultCompressionState(tif); /* setup default state */ + _TIFFSetDefaultCompressionState(tif); /* setup default state */ /* * Default is to return data MSB2LSB and enable the * use of memory-mapped files and strip chopping when @@ -200,10 +158,10 @@ TIFFClientOpen( if (m == O_RDONLY ) tif->tif_flags |= TIFF_MAPPED; -#ifdef STRIPCHOP_DEFAULT + #ifdef STRIPCHOP_DEFAULT if (m == O_RDONLY || m == O_RDWR) tif->tif_flags |= STRIPCHOP_DEFAULT; -#endif + #endif /* * Process library-specific flags in the open mode string. @@ -213,16 +171,18 @@ TIFFClientOpen( * TIFF but only supports some braindead idea of what the * vendor thinks TIFF is): * - * 'l' use little-endian byte order for creating a file - * 'b' use big-endian byte order for creating a file - * 'L' read/write information using LSB2MSB bit order - * 'B' read/write information using MSB2LSB bit order - * 'H' read/write information using host bit order - * 'M' enable use of memory-mapped files when supported - * 'm' disable use of memory-mapped files - * 'C' enable strip chopping support when reading - * 'c' disable strip chopping support - * 'h' read TIFF header only, do not load the first IFD + * 'l' use little-endian byte order for creating a file + * 'b' use big-endian byte order for creating a file + * 'L' read/write information using LSB2MSB bit order + * 'B' read/write information using MSB2LSB bit order + * 'H' read/write information using host bit order + * 'M' enable use of memory-mapped files when supported + * 'm' disable use of memory-mapped files + * 'C' enable strip chopping support when reading + * 'c' disable strip chopping support + * 'h' read TIFF header only, do not load the first IFD + * '4' ClassicTIFF for creating a file (default) + * '8' BigTIFF for creating a file * * The use of the 'l' and 'b' flags is strongly discouraged. * These flags are provided solely because numerous vendors, @@ -257,94 +217,120 @@ TIFFClientOpen( */ for (cp = mode; *cp; cp++) switch (*cp) { - case 'b': -#ifndef WORDS_BIGENDIAN - if (m&O_CREAT) - tif->tif_flags |= TIFF_SWAB; -#endif - break; - case 'l': -#ifdef WORDS_BIGENDIAN - if ((m&O_CREAT)) - tif->tif_flags |= TIFF_SWAB; -#endif - break; - case 'B': - tif->tif_flags = (tif->tif_flags &~ TIFF_FILLORDER) | - FILLORDER_MSB2LSB; - break; - case 'L': - tif->tif_flags = (tif->tif_flags &~ TIFF_FILLORDER) | - FILLORDER_LSB2MSB; - break; - case 'H': - tif->tif_flags = (tif->tif_flags &~ TIFF_FILLORDER) | - HOST_FILLORDER; - break; - case 'M': - if (m == O_RDONLY) - tif->tif_flags |= TIFF_MAPPED; - break; - case 'm': - if (m == O_RDONLY) - tif->tif_flags &= ~TIFF_MAPPED; - break; - case 'C': - if (m == O_RDONLY) - tif->tif_flags |= TIFF_STRIPCHOP; - break; - case 'c': - if (m == O_RDONLY) - tif->tif_flags &= ~TIFF_STRIPCHOP; - break; - case 'h': - tif->tif_flags |= TIFF_HEADERONLY; - break; + case 'b': + #ifndef WORDS_BIGENDIAN + if (m&O_CREAT) + tif->tif_flags |= TIFF_SWAB; + #endif + break; + case 'l': + #ifdef WORDS_BIGENDIAN + if ((m&O_CREAT)) + tif->tif_flags |= TIFF_SWAB; + #endif + break; + case 'B': + tif->tif_flags = (tif->tif_flags &~ TIFF_FILLORDER) | + FILLORDER_MSB2LSB; + break; + case 'L': + tif->tif_flags = (tif->tif_flags &~ TIFF_FILLORDER) | + FILLORDER_LSB2MSB; + break; + case 'H': + tif->tif_flags = (tif->tif_flags &~ TIFF_FILLORDER) | + HOST_FILLORDER; + break; + case 'M': + if (m == O_RDONLY) + tif->tif_flags |= TIFF_MAPPED; + break; + case 'm': + if (m == O_RDONLY) + tif->tif_flags &= ~TIFF_MAPPED; + break; + case 'C': + if (m == O_RDONLY) + tif->tif_flags |= TIFF_STRIPCHOP; + break; + case 'c': + if (m == O_RDONLY) + tif->tif_flags &= ~TIFF_STRIPCHOP; + break; + case 'h': + tif->tif_flags |= TIFF_HEADERONLY; + break; + case '8': + if (m&O_CREAT) + tif->tif_flags |= TIFF_BIGTIFF; + break; } /* * Read in TIFF header. */ - if (tif->tif_mode & O_TRUNC || - !ReadOK(tif, &tif->tif_header, sizeof (TIFFHeader))) { + if ((m & O_TRUNC) || + !ReadOK(tif, &tif->tif_header, sizeof (TIFFHeaderClassic))) { if (tif->tif_mode == O_RDONLY) { TIFFErrorExt(tif->tif_clientdata, name, - "Cannot read TIFF header"); + "Cannot read TIFF header"); goto bad; } /* * Setup header and write. */ -#ifdef WORDS_BIGENDIAN - tif->tif_header.tiff_magic = tif->tif_flags & TIFF_SWAB + #ifdef WORDS_BIGENDIAN + tif->tif_header.common.tiff_magic = tif->tif_flags & TIFF_SWAB ? TIFF_LITTLEENDIAN : TIFF_BIGENDIAN; -#else - tif->tif_header.tiff_magic = tif->tif_flags & TIFF_SWAB + #else + tif->tif_header.common.tiff_magic = tif->tif_flags & TIFF_SWAB ? TIFF_BIGENDIAN : TIFF_LITTLEENDIAN; -#endif - tif->tif_header.tiff_version = TIFF_VERSION; - if (tif->tif_flags & TIFF_SWAB) - TIFFSwabShort(&tif->tif_header.tiff_version); - tif->tif_header.tiff_diroff = 0; /* filled in later */ - - - /* - * The doc for "fopen" for some STD_C_LIBs says that if you - * open a file for modify ("+"), then you must fseek (or - * fflush?) between any freads and fwrites. This is not - * necessary on most systems, but has been shown to be needed - * on Solaris. - */ - TIFFSeekFile( tif, 0, SEEK_SET ); - - if (!WriteOK(tif, &tif->tif_header, sizeof (TIFFHeader))) { + #endif + if (!(tif->tif_flags&TIFF_BIGTIFF)) + { + tif->tif_header.common.tiff_version = TIFF_VERSION_CLASSIC; + tif->tif_header.classic.tiff_diroff = 0; + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabShort(&tif->tif_header.common.tiff_version); + tif->tif_header_size = sizeof(TIFFHeaderClassic); + } + else + { + tif->tif_header.common.tiff_version = TIFF_VERSION_BIG; + tif->tif_header.big.tiff_offsetsize = 8; + tif->tif_header.big.tiff_unused = 0; + tif->tif_header.big.tiff_diroff = 0; + if (tif->tif_flags & TIFF_SWAB) + { + TIFFSwabShort(&tif->tif_header.common.tiff_version); + TIFFSwabShort(&tif->tif_header.big.tiff_offsetsize); + } + tif->tif_header_size = sizeof (TIFFHeaderBig); + } + /* + * The doc for "fopen" for some STD_C_LIBs says that if you + * open a file for modify ("+"), then you must fseek (or + * fflush?) between any freads and fwrites. This is not + * necessary on most systems, but has been shown to be needed + * on Solaris. + */ + TIFFSeekFile( tif, 0, SEEK_SET ); + if (!WriteOK(tif, &tif->tif_header, (tmsize_t)(tif->tif_header_size))) { TIFFErrorExt(tif->tif_clientdata, name, - "Error writing TIFF header"); + "Error writing TIFF header"); goto bad; } /* * Setup the byte order handling. */ - TIFFInitOrder(tif, tif->tif_header.tiff_magic); + if (tif->tif_header.common.tiff_magic == TIFF_BIGENDIAN) { + #ifndef WORDS_BIGENDIAN + tif->tif_flags |= TIFF_SWAB; + #endif + } else { + #ifdef WORDS_BIGENDIAN + tif->tif_flags |= TIFF_SWAB; + #endif + } /* * Setup default directory. */ @@ -359,95 +345,139 @@ TIFFClientOpen( /* * Setup the byte order handling. */ - if (tif->tif_header.tiff_magic != TIFF_BIGENDIAN && - tif->tif_header.tiff_magic != TIFF_LITTLEENDIAN -#if MDI_SUPPORT + if (tif->tif_header.common.tiff_magic != TIFF_BIGENDIAN && + tif->tif_header.common.tiff_magic != TIFF_LITTLEENDIAN + #if MDI_SUPPORT && -#if HOST_BIGENDIAN - tif->tif_header.tiff_magic != MDI_BIGENDIAN -#else - tif->tif_header.tiff_magic != MDI_LITTLEENDIAN -#endif + #if HOST_BIGENDIAN + tif->tif_header.common.tiff_magic != MDI_BIGENDIAN + #else + tif->tif_header.common.tiff_magic != MDI_LITTLEENDIAN + #endif ) { TIFFErrorExt(tif->tif_clientdata, name, - "Not a TIFF or MDI file, bad magic number %d (0x%x)", -#else + "Not a TIFF or MDI file, bad magic number %d (0x%x)", + #else ) { TIFFErrorExt(tif->tif_clientdata, name, - "Not a TIFF file, bad magic number %d (0x%x)", -#endif - tif->tif_header.tiff_magic, - tif->tif_header.tiff_magic); + "Not a TIFF file, bad magic number %d (0x%x)", + #endif + tif->tif_header.common.tiff_magic, + tif->tif_header.common.tiff_magic); goto bad; } - TIFFInitOrder(tif, tif->tif_header.tiff_magic); - /* - * Swap header if required. - */ - if (tif->tif_flags & TIFF_SWAB) { - TIFFSwabShort(&tif->tif_header.tiff_version); - TIFFSwabLong(&tif->tif_header.tiff_diroff); + if (tif->tif_header.common.tiff_magic == TIFF_BIGENDIAN) { + #ifndef WORDS_BIGENDIAN + tif->tif_flags |= TIFF_SWAB; + #endif + } else { + #ifdef WORDS_BIGENDIAN + tif->tif_flags |= TIFF_SWAB; + #endif } - /* - * Now check version (if needed, it's been byte-swapped). - * Note that this isn't actually a version number, it's a - * magic number that doesn't change (stupid). - */ - if (tif->tif_header.tiff_version == TIFF_BIGTIFF_VERSION) { - TIFFErrorExt(tif->tif_clientdata, name, - "This is a BigTIFF file. This format not supported\n" - "by this version of libtiff." ); - goto bad; - } - if (tif->tif_header.tiff_version != TIFF_VERSION) { + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabShort(&tif->tif_header.common.tiff_version); + if ((tif->tif_header.common.tiff_version != TIFF_VERSION_CLASSIC)&& + (tif->tif_header.common.tiff_version != TIFF_VERSION_BIG)) { TIFFErrorExt(tif->tif_clientdata, name, "Not a TIFF file, bad version number %d (0x%x)", - tif->tif_header.tiff_version, - tif->tif_header.tiff_version); + tif->tif_header.common.tiff_version, + tif->tif_header.common.tiff_version); goto bad; } + if (tif->tif_header.common.tiff_version == TIFF_VERSION_CLASSIC) + { + if (tif->tif_flags & TIFF_SWAB) + TIFFSwabLong(&tif->tif_header.classic.tiff_diroff); + tif->tif_header_size = sizeof(TIFFHeaderClassic); + } + else + { + if (!ReadOK(tif, ((uint8*)(&tif->tif_header) + sizeof(TIFFHeaderClassic)), (sizeof(TIFFHeaderBig)-sizeof(TIFFHeaderClassic)))) + { + TIFFErrorExt(tif->tif_clientdata, name, + "Cannot read TIFF header"); + goto bad; + } + if (tif->tif_flags & TIFF_SWAB) + { + TIFFSwabShort(&tif->tif_header.big.tiff_offsetsize); + TIFFSwabLong8(&tif->tif_header.big.tiff_diroff); + } + if (tif->tif_header.big.tiff_offsetsize != 8) + { + TIFFErrorExt(tif->tif_clientdata, name, + "Not a TIFF file, bad BigTIFF offsetsize %d (0x%x)", + tif->tif_header.big.tiff_offsetsize, + tif->tif_header.big.tiff_offsetsize); + goto bad; + } + if (tif->tif_header.big.tiff_unused != 0) + { + TIFFErrorExt(tif->tif_clientdata, name, + "Not a TIFF file, bad BigTIFF unused %d (0x%x)", + tif->tif_header.big.tiff_unused, + tif->tif_header.big.tiff_unused); + goto bad; + } + tif->tif_header_size = sizeof(TIFFHeaderBig); + tif->tif_flags |= TIFF_BIGTIFF; + } tif->tif_flags |= TIFF_MYBUFFER; tif->tif_rawcp = tif->tif_rawdata = 0; tif->tif_rawdatasize = 0; + tif->tif_rawdataoff = 0; + tif->tif_rawdataloaded = 0; - /* - * Sometimes we do not want to read the first directory (for example, - * it may be broken) and want to proceed to other directories. I this - * case we use the TIFF_HEADERONLY flag to open file and return - * immediately after reading TIFF header. - */ - if (tif->tif_flags & TIFF_HEADERONLY) - return (tif); - - /* - * Setup initial directory. - */ switch (mode[0]) { - case 'r': - tif->tif_nextdiroff = tif->tif_header.tiff_diroff; - /* - * Try to use a memory-mapped file if the client - * has not explicitly suppressed usage with the - * 'm' flag in the open mode (see above). - */ - if ((tif->tif_flags & TIFF_MAPPED) && - !TIFFMapFileContents(tif, (tdata_t*) &tif->tif_base, &tif->tif_size)) - tif->tif_flags &= ~TIFF_MAPPED; - if (TIFFReadDirectory(tif)) { - tif->tif_rawcc = -1; - tif->tif_flags |= TIFF_BUFFERSETUP; + case 'r': + if (!(tif->tif_flags&TIFF_BIGTIFF)) + tif->tif_nextdiroff = tif->tif_header.classic.tiff_diroff; + else + tif->tif_nextdiroff = tif->tif_header.big.tiff_diroff; + /* + * Try to use a memory-mapped file if the client + * has not explicitly suppressed usage with the + * 'm' flag in the open mode (see above). + */ + if (tif->tif_flags & TIFF_MAPPED) + { + toff_t n; + if (TIFFMapFileContents(tif,(void**)(&tif->tif_base),&n)) + { + tif->tif_size=(tmsize_t)n; + assert((toff_t)tif->tif_size==n); + } + else + tif->tif_flags &= ~TIFF_MAPPED; + } + /* + * Sometimes we do not want to read the first directory (for example, + * it may be broken) and want to proceed to other directories. I this + * case we use the TIFF_HEADERONLY flag to open file and return + * immediately after reading TIFF header. + */ + if (tif->tif_flags & TIFF_HEADERONLY) + return (tif); + + /* + * Setup initial directory. + */ + if (TIFFReadDirectory(tif)) { + tif->tif_rawcc = (tmsize_t)-1; + tif->tif_flags |= TIFF_BUFFERSETUP; + return (tif); + } + break; + case 'a': + /* + * New directories are automatically append + * to the end of the directory chain when they + * are written out (see TIFFWriteDirectory). + */ + if (!TIFFDefaultDirectory(tif)) + goto bad; return (tif); - } - break; - case 'a': - /* - * New directories are automatically append - * to the end of the directory chain when they - * are written out (see TIFFWriteDirectory). - */ - if (!TIFFDefaultDirectory(tif)) - goto bad; - return (tif); } bad: tif->tif_mode = O_RDONLY; /* XXX avoid flush */ @@ -516,9 +546,6 @@ thandle_t TIFFSetClientdata(TIFF* tif, thandle_t newvalue) { thandle_t m = tif->tif_clientdata; -#ifdef USE_WIN32_FILEIO - newvalue = (thandle_t)_get_osfhandle((int)newvalue); -#endif /* USE_WIN32_FILEIO */ tif->tif_clientdata = newvalue; return m; } @@ -565,7 +592,7 @@ TIFFCurrentRow(TIFF* tif) /* * Return index of the current directory. */ -tdir_t +uint16 TIFFCurrentDirectory(TIFF* tif) { return (tif->tif_curdir); @@ -574,7 +601,7 @@ TIFFCurrentDirectory(TIFF* tif) /* * Return current strip. */ -tstrip_t +uint32 TIFFCurrentStrip(TIFF* tif) { return (tif->tif_curstrip); @@ -583,7 +610,7 @@ TIFFCurrentStrip(TIFF* tif) /* * Return current tile. */ -ttile_t +uint32 TIFFCurrentTile(TIFF* tif) { return (tif->tif_curtile); @@ -622,7 +649,7 @@ TIFFIsMSB2LSB(TIFF* tif) int TIFFIsBigEndian(TIFF* tif) { - return (tif->tif_header.tiff_magic == TIFF_BIGENDIAN); + return (tif->tif_header.common.tiff_magic == TIFF_BIGENDIAN); } /* diff --git a/dll/3rdparty/libtiff/tif_packbits.c b/dll/3rdparty/libtiff/tif_packbits.c index ee095f568e8..9e77190131e 100644 --- a/dll/3rdparty/libtiff/tif_packbits.c +++ b/dll/3rdparty/libtiff/tif_packbits.c @@ -1,4 +1,4 @@ -/* $Id: tif_packbits.c,v 1.13.2.2 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Id: tif_packbits.c,v 1.22 2012-06-20 05:25:33 fwarmerdam Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -34,19 +34,19 @@ #include static int -PackBitsPreEncode(TIFF* tif, tsample_t s) +PackBitsPreEncode(TIFF* tif, uint16 s) { (void) s; - if (!(tif->tif_data = (tidata_t)_TIFFmalloc(sizeof(tsize_t)))) + if (!(tif->tif_data = (uint8*)_TIFFmalloc(sizeof(tmsize_t)))) return (0); /* * Calculate the scanline/tile-width size in bytes. */ if (isTiled(tif)) - *(tsize_t*)tif->tif_data = TIFFTileRowSize(tif); + *(tmsize_t*)tif->tif_data = TIFFTileRowSize(tif); else - *(tsize_t*)tif->tif_data = TIFFScanlineSize(tif); + *(tmsize_t*)tif->tif_data = TIFFScanlineSize(tif); return (1); } @@ -58,21 +58,16 @@ PackBitsPostEncode(TIFF* tif) return (1); } -/* - * NB: tidata is the type representing *(tidata_t); - * if tidata_t is made signed then this type must - * be adjusted accordingly. - */ -typedef unsigned char tidata; - /* * Encode a run of pixels. */ static int -PackBitsEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) +PackBitsEncode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s) { unsigned char* bp = (unsigned char*) buf; - tidata_t op, ep, lastliteral; + uint8* op; + uint8* ep; + uint8* lastliteral; long n, slop; int b; enum { BASE, LITERAL, RUN, LITERAL_RUN } state; @@ -98,8 +93,8 @@ PackBitsEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) * front of the buffer. */ if (state == LITERAL || state == LITERAL_RUN) { - slop = op - lastliteral; - tif->tif_rawcc += lastliteral - tif->tif_rawcp; + slop = (long)(op - lastliteral); + tif->tif_rawcc += (tmsize_t)(lastliteral - tif->tif_rawcp); if (!TIFFFlushData1(tif)) return (-1); op = tif->tif_rawcp; @@ -107,7 +102,7 @@ PackBitsEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) *op++ = *lastliteral++; lastliteral = tif->tif_rawcp; } else { - tif->tif_rawcc += op - tif->tif_rawcp; + tif->tif_rawcc += (tmsize_t)(op - tif->tif_rawcp); if (!TIFFFlushData1(tif)) return (-1); op = tif->tif_rawcp; @@ -118,17 +113,17 @@ PackBitsEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) if (n > 1) { state = RUN; if (n > 128) { - *op++ = (tidata) -127; - *op++ = (tidataval_t) b; + *op++ = (uint8) -127; + *op++ = (uint8) b; n -= 128; goto again; } - *op++ = (tidataval_t)(-(n-1)); - *op++ = (tidataval_t) b; + *op++ = (uint8)(-(n-1)); + *op++ = (uint8) b; } else { lastliteral = op; *op++ = 0; - *op++ = (tidataval_t) b; + *op++ = (uint8) b; state = LITERAL; } break; @@ -136,33 +131,33 @@ PackBitsEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) if (n > 1) { state = LITERAL_RUN; if (n > 128) { - *op++ = (tidata) -127; - *op++ = (tidataval_t) b; + *op++ = (uint8) -127; + *op++ = (uint8) b; n -= 128; goto again; } - *op++ = (tidataval_t)(-(n-1)); /* encode run */ - *op++ = (tidataval_t) b; + *op++ = (uint8)(-(n-1)); /* encode run */ + *op++ = (uint8) b; } else { /* extend literal */ if (++(*lastliteral) == 127) state = BASE; - *op++ = (tidataval_t) b; + *op++ = (uint8) b; } break; case RUN: /* last object was run */ if (n > 1) { if (n > 128) { - *op++ = (tidata) -127; - *op++ = (tidataval_t) b; + *op++ = (uint8) -127; + *op++ = (uint8) b; n -= 128; goto again; } - *op++ = (tidataval_t)(-(n-1)); - *op++ = (tidataval_t) b; + *op++ = (uint8)(-(n-1)); + *op++ = (uint8) b; } else { lastliteral = op; *op++ = 0; - *op++ = (tidataval_t) b; + *op++ = (uint8) b; state = LITERAL; } break; @@ -173,7 +168,7 @@ PackBitsEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) * case we convert literal-run-literal * to a single literal. */ - if (n == 1 && op[-2] == (tidata) -1 && + if (n == 1 && op[-2] == (uint8) -1 && *lastliteral < 126) { state = (((*lastliteral) += 2) == 127 ? BASE : LITERAL); @@ -183,7 +178,7 @@ PackBitsEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) goto again; } } - tif->tif_rawcc += op - tif->tif_rawcp; + tif->tif_rawcc += (tmsize_t)(op - tif->tif_rawcp); tif->tif_rawcp = op; return (1); } @@ -196,12 +191,12 @@ PackBitsEncode(TIFF* tif, tidata_t buf, tsize_t cc, tsample_t s) * when it was encoded by strips. */ static int -PackBitsEncodeChunk(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +PackBitsEncodeChunk(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) { - tsize_t rowsize = *(tsize_t*)tif->tif_data; + tmsize_t rowsize = *(tmsize_t*)tif->tif_data; - while ((long)cc > 0) { - int chunk = rowsize; + while (cc > 0) { + tmsize_t chunk = rowsize; if( cc < chunk ) chunk = cc; @@ -215,17 +210,18 @@ PackBitsEncodeChunk(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) } static int -PackBitsDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) +PackBitsDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s) { + static const char module[] = "PackBitsDecode"; char *bp; - tsize_t cc; + tmsize_t cc; long n; int b; (void) s; bp = (char*) tif->tif_rawcp; cc = tif->tif_rawcc; - while (cc > 0 && (long)occ > 0) { + while (cc > 0 && occ > 0) { n = (long) *bp++, cc--; /* * Watch out for compilers that @@ -236,39 +232,43 @@ PackBitsDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) if (n < 0) { /* replicate next byte -n+1 times */ if (n == -128) /* nop */ continue; - n = -n + 1; - if( occ < n ) - { - TIFFWarningExt(tif->tif_clientdata, tif->tif_name, - "PackBitsDecode: discarding %ld bytes " - "to avoid buffer overrun", - n - occ); - n = occ; - } + n = -n + 1; + if( occ < (tmsize_t)n ) + { + TIFFWarningExt(tif->tif_clientdata, module, + "Discarding %lu bytes to avoid buffer overrun", + (unsigned long) ((tmsize_t)n - occ)); + n = (long)occ; + } occ -= n; b = *bp++, cc--; while (n-- > 0) - *op++ = (tidataval_t) b; + *op++ = (uint8) b; } else { /* copy next n+1 bytes literally */ - if (occ < n + 1) - { - TIFFWarningExt(tif->tif_clientdata, tif->tif_name, - "PackBitsDecode: discarding %ld bytes " - "to avoid buffer overrun", - n - occ + 1); - n = occ - 1; - } - _TIFFmemcpy(op, bp, ++n); + if (occ < (tmsize_t)(n + 1)) + { + TIFFWarningExt(tif->tif_clientdata, module, + "Discarding %lu bytes to avoid buffer overrun", + (unsigned long) ((tmsize_t)n - occ + 1)); + n = (long)occ - 1; + } + if (cc < (tmsize_t) (n+1)) + { + TIFFWarningExt(tif->tif_clientdata, module, + "Terminating PackBitsDecode due to lack of data."); + break; + } + _TIFFmemcpy(op, bp, ++n); op += n; occ -= n; bp += n; cc -= n; } } - tif->tif_rawcp = (tidata_t) bp; + tif->tif_rawcp = (uint8*) bp; tif->tif_rawcc = cc; if (occ > 0) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "PackBitsDecode: Not enough data for scanline %ld", - (long) tif->tif_row); + TIFFErrorExt(tif->tif_clientdata, module, + "Not enough data for scanline %lu", + (unsigned long) tif->tif_row); return (0); } return (1); @@ -282,7 +282,7 @@ TIFFInitPackBits(TIFF* tif, int scheme) tif->tif_decodestrip = PackBitsDecode; tif->tif_decodetile = PackBitsDecode; tif->tif_preencode = PackBitsPreEncode; - tif->tif_postencode = PackBitsPostEncode; + tif->tif_postencode = PackBitsPostEncode; tif->tif_encoderow = PackBitsEncode; tif->tif_encodestrip = PackBitsEncodeChunk; tif->tif_encodetile = PackBitsEncodeChunk; diff --git a/dll/3rdparty/libtiff/tif_pixarlog.c b/dll/3rdparty/libtiff/tif_pixarlog.c index ed8eb4026ff..e5831170486 100644 --- a/dll/3rdparty/libtiff/tif_pixarlog.c +++ b/dll/3rdparty/libtiff/tif_pixarlog.c @@ -1,4 +1,4 @@ -/* $Id: tif_pixarlog.c,v 1.15.2.4 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Id: tif_pixarlog.c,v 1.38 2012-06-21 01:01:53 fwarmerdam Exp $ */ /* * Copyright (c) 1996-1997 Sam Leffler @@ -83,7 +83,10 @@ * The codec also handle byte swapping the encoded values as necessary * since the library does not have the information necessary * to know the bit depth of the raw unencoded buffer. - * + * + * NOTE: This decoder does not appear to update tif_rawcp, and tif_rawcc. + * This can cause problems with the implementation of CHUNKY_STRIP_READ_SUPPORT + * as noted in http://trac.osgeo.org/gdal/ticket/3894. FrankW - Jan'11 */ #include "tif_predict.h" @@ -108,7 +111,7 @@ static float LogK1, LogK2; #define REPEAT(n, op) { int i; i=n; do { i--; op; } while (i>0); } static void -horizontalAccumulateF(uint16 *wp, int n, int stride, float *op, +horizontalAccumulateF(uint16 *wp, int n, int stride, float *op, float *ToLinearF) { register unsigned int cr, cg, cb, ca, mask; @@ -117,9 +120,9 @@ horizontalAccumulateF(uint16 *wp, int n, int stride, float *op, if (n >= stride) { mask = CODE_MASK; if (stride == 3) { - t0 = ToLinearF[cr = wp[0]]; - t1 = ToLinearF[cg = wp[1]]; - t2 = ToLinearF[cb = wp[2]]; + t0 = ToLinearF[cr = (wp[0] & mask)]; + t1 = ToLinearF[cg = (wp[1] & mask)]; + t2 = ToLinearF[cb = (wp[2] & mask)]; op[0] = t0; op[1] = t1; op[2] = t2; @@ -136,10 +139,10 @@ horizontalAccumulateF(uint16 *wp, int n, int stride, float *op, op[2] = t2; } } else if (stride == 4) { - t0 = ToLinearF[cr = wp[0]]; - t1 = ToLinearF[cg = wp[1]]; - t2 = ToLinearF[cb = wp[2]]; - t3 = ToLinearF[ca = wp[3]]; + t0 = ToLinearF[cr = (wp[0] & mask)]; + t1 = ToLinearF[cg = (wp[1] & mask)]; + t2 = ToLinearF[cb = (wp[2] & mask)]; + t3 = ToLinearF[ca = (wp[3] & mask)]; op[0] = t0; op[1] = t1; op[2] = t2; @@ -183,9 +186,9 @@ horizontalAccumulate12(uint16 *wp, int n, int stride, int16 *op, if (n >= stride) { mask = CODE_MASK; if (stride == 3) { - t0 = ToLinearF[cr = wp[0]] * SCALE12; - t1 = ToLinearF[cg = wp[1]] * SCALE12; - t2 = ToLinearF[cb = wp[2]] * SCALE12; + t0 = ToLinearF[cr = (wp[0] & mask)] * SCALE12; + t1 = ToLinearF[cg = (wp[1] & mask)] * SCALE12; + t2 = ToLinearF[cb = (wp[2] & mask)] * SCALE12; op[0] = CLAMP12(t0); op[1] = CLAMP12(t1); op[2] = CLAMP12(t2); @@ -202,10 +205,10 @@ horizontalAccumulate12(uint16 *wp, int n, int stride, int16 *op, op[2] = CLAMP12(t2); } } else if (stride == 4) { - t0 = ToLinearF[cr = wp[0]] * SCALE12; - t1 = ToLinearF[cg = wp[1]] * SCALE12; - t2 = ToLinearF[cb = wp[2]] * SCALE12; - t3 = ToLinearF[ca = wp[3]] * SCALE12; + t0 = ToLinearF[cr = (wp[0] & mask)] * SCALE12; + t1 = ToLinearF[cg = (wp[1] & mask)] * SCALE12; + t2 = ToLinearF[cb = (wp[2] & mask)] * SCALE12; + t3 = ToLinearF[ca = (wp[3] & mask)] * SCALE12; op[0] = CLAMP12(t0); op[1] = CLAMP12(t1); op[2] = CLAMP12(t2); @@ -247,9 +250,9 @@ horizontalAccumulate16(uint16 *wp, int n, int stride, uint16 *op, if (n >= stride) { mask = CODE_MASK; if (stride == 3) { - op[0] = ToLinear16[cr = wp[0]]; - op[1] = ToLinear16[cg = wp[1]]; - op[2] = ToLinear16[cb = wp[2]]; + op[0] = ToLinear16[cr = (wp[0] & mask)]; + op[1] = ToLinear16[cg = (wp[1] & mask)]; + op[2] = ToLinear16[cb = (wp[2] & mask)]; n -= 3; while (n > 0) { wp += 3; @@ -260,10 +263,10 @@ horizontalAccumulate16(uint16 *wp, int n, int stride, uint16 *op, op[2] = ToLinear16[(cb += wp[2]) & mask]; } } else if (stride == 4) { - op[0] = ToLinear16[cr = wp[0]]; - op[1] = ToLinear16[cg = wp[1]]; - op[2] = ToLinear16[cb = wp[2]]; - op[3] = ToLinear16[ca = wp[3]]; + op[0] = ToLinear16[cr = (wp[0] & mask)]; + op[1] = ToLinear16[cg = (wp[1] & mask)]; + op[2] = ToLinear16[cb = (wp[2] & mask)]; + op[3] = ToLinear16[ca = (wp[3] & mask)]; n -= 4; while (n > 0) { wp += 4; @@ -342,9 +345,9 @@ horizontalAccumulate8(uint16 *wp, int n, int stride, unsigned char *op, if (n >= stride) { mask = CODE_MASK; if (stride == 3) { - op[0] = ToLinear8[cr = wp[0]]; - op[1] = ToLinear8[cg = wp[1]]; - op[2] = ToLinear8[cb = wp[2]]; + op[0] = ToLinear8[cr = (wp[0] & mask)]; + op[1] = ToLinear8[cg = (wp[1] & mask)]; + op[2] = ToLinear8[cb = (wp[2] & mask)]; n -= 3; while (n > 0) { n -= 3; @@ -355,10 +358,10 @@ horizontalAccumulate8(uint16 *wp, int n, int stride, unsigned char *op, op[2] = ToLinear8[(cb += wp[2]) & mask]; } } else if (stride == 4) { - op[0] = ToLinear8[cr = wp[0]]; - op[1] = ToLinear8[cg = wp[1]]; - op[2] = ToLinear8[cb = wp[2]]; - op[3] = ToLinear8[ca = wp[3]]; + op[0] = ToLinear8[cr = (wp[0] & mask)]; + op[1] = ToLinear8[cg = (wp[1] & mask)]; + op[2] = ToLinear8[cb = (wp[2] & mask)]; + op[3] = ToLinear8[ca = (wp[3] & mask)]; n -= 4; while (n > 0) { n -= 4; @@ -393,9 +396,9 @@ horizontalAccumulate8abgr(uint16 *wp, int n, int stride, unsigned char *op, mask = CODE_MASK; if (stride == 3) { op[0] = 0; - t1 = ToLinear8[cb = wp[2]]; - t2 = ToLinear8[cg = wp[1]]; - t3 = ToLinear8[cr = wp[0]]; + t1 = ToLinear8[cb = (wp[2] & mask)]; + t2 = ToLinear8[cg = (wp[1] & mask)]; + t3 = ToLinear8[cr = (wp[0] & mask)]; op[1] = t1; op[2] = t2; op[3] = t3; @@ -413,10 +416,10 @@ horizontalAccumulate8abgr(uint16 *wp, int n, int stride, unsigned char *op, op[3] = t3; } } else if (stride == 4) { - t0 = ToLinear8[ca = wp[3]]; - t1 = ToLinear8[cb = wp[2]]; - t2 = ToLinear8[cg = wp[1]]; - t3 = ToLinear8[cr = wp[0]]; + t0 = ToLinear8[ca = (wp[3] & mask)]; + t1 = ToLinear8[cb = (wp[2] & mask)]; + t2 = ToLinear8[cg = (wp[1] & mask)]; + t3 = ToLinear8[cr = (wp[0] & mask)]; op[0] = t0; op[1] = t1; op[2] = t2; @@ -587,11 +590,11 @@ PixarLogMakeTables(PixarLogState *sp) return 1; } -#define DecoderState(tif) ((PixarLogState*) (tif)->tif_data) -#define EncoderState(tif) ((PixarLogState*) (tif)->tif_data) +#define DecoderState(tif) ((PixarLogState*) (tif)->tif_data) +#define EncoderState(tif) ((PixarLogState*) (tif)->tif_data) -static int PixarLogEncode(TIFF*, tidata_t, tsize_t, tsample_t); -static int PixarLogDecode(TIFF*, tidata_t, tsize_t, tsample_t); +static int PixarLogEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s); +static int PixarLogDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s); #define PIXARLOGDATAFMT_UNKNOWN -1 @@ -630,10 +633,10 @@ PixarLogGuessDataFmt(TIFFDirectory *td) return guess; } -static uint32 -multiply(size_t m1, size_t m2) +static tmsize_t +multiply_ms(tmsize_t m1, tmsize_t m2) { - uint32 bytes = m1 * m2; + tmsize_t bytes = m1 * m2; if (m1 && bytes / m1 != m2) bytes = 0; @@ -641,29 +644,36 @@ multiply(size_t m1, size_t m2) return bytes; } +static int +PixarLogFixupTags(TIFF* tif) +{ + (void) tif; + return (1); +} + static int PixarLogSetupDecode(TIFF* tif) { + static const char module[] = "PixarLogSetupDecode"; TIFFDirectory *td = &tif->tif_dir; PixarLogState* sp = DecoderState(tif); - tsize_t tbuf_size; - static const char module[] = "PixarLogSetupDecode"; + tmsize_t tbuf_size; assert(sp != NULL); /* Make sure no byte swapping happens on the data * after decompression. */ - tif->tif_postdecode = _TIFFNoPostDecode; + tif->tif_postdecode = _TIFFNoPostDecode; /* for some reason, we can't do this in TIFFInitPixarLog */ sp->stride = (td->td_planarconfig == PLANARCONFIG_CONTIG ? td->td_samplesperpixel : 1); - tbuf_size = multiply(multiply(multiply(sp->stride, td->td_imagewidth), + tbuf_size = multiply_ms(multiply_ms(multiply_ms(sp->stride, td->td_imagewidth), td->td_rowsperstrip), sizeof(uint16)); if (tbuf_size == 0) - return (0); - sp->tbuf = (uint16 *) _TIFFmalloc(tbuf_size); + return (0); /* TODO: this is an error return without error report through TIFFErrorExt */ + sp->tbuf = (uint16 *) _TIFFmalloc(tbuf_size+sizeof(uint16)*sp->stride); if (sp->tbuf == NULL) return (0); if (sp->user_datafmt == PIXARLOGDATAFMT_UNKNOWN) @@ -676,7 +686,7 @@ PixarLogSetupDecode(TIFF* tif) } if (inflateInit(&sp->stream) != Z_OK) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: %s", tif->tif_name, sp->stream.msg); + TIFFErrorExt(tif->tif_clientdata, module, "%s", sp->stream.msg); return (0); } else { sp->state |= PLSTATE_INIT; @@ -688,24 +698,36 @@ PixarLogSetupDecode(TIFF* tif) * Setup state for decoding a strip. */ static int -PixarLogPreDecode(TIFF* tif, tsample_t s) +PixarLogPreDecode(TIFF* tif, uint16 s) { + static const char module[] = "PixarLogPreDecode"; PixarLogState* sp = DecoderState(tif); (void) s; assert(sp != NULL); sp->stream.next_in = tif->tif_rawdata; - sp->stream.avail_in = tif->tif_rawcc; + assert(sizeof(sp->stream.avail_in)==4); /* if this assert gets raised, + we need to simplify this code to reflect a ZLib that is likely updated + to deal with 8byte memory sizes, though this code will respond + apropriately even before we simplify it */ + sp->stream.avail_in = (uInt) tif->tif_rawcc; + if ((tmsize_t)sp->stream.avail_in != tif->tif_rawcc) + { + TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size"); + return (0); + } return (inflateReset(&sp->stream) == Z_OK); } static int -PixarLogDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) +PixarLogDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s) { + static const char module[] = "PixarLogDecode"; TIFFDirectory *td = &tif->tif_dir; PixarLogState* sp = DecoderState(tif); - static const char module[] = "PixarLogDecode"; - int i, nsamples, llen; + tmsize_t i; + tmsize_t nsamples; + int llen; uint16 *up; switch (sp->user_datafmt) { @@ -722,7 +744,7 @@ PixarLogDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) nsamples = occ; break; default: - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, + TIFFErrorExt(tif->tif_clientdata, module, "%d bit input not supported in PixarLog", td->td_bitspersample); return 0; @@ -733,7 +755,16 @@ PixarLogDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) (void) s; assert(sp != NULL); sp->stream.next_out = (unsigned char *) sp->tbuf; - sp->stream.avail_out = nsamples * sizeof(uint16); + assert(sizeof(sp->stream.avail_out)==4); /* if this assert gets raised, + we need to simplify this code to reflect a ZLib that is likely updated + to deal with 8byte memory sizes, though this code will respond + apropriately even before we simplify it */ + sp->stream.avail_out = (uInt) (nsamples * sizeof(uint16)); + if (sp->stream.avail_out != nsamples * sizeof(uint16)) + { + TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size"); + return (0); + } do { int state = inflate(&sp->stream, Z_PARTIAL_FLUSH); if (state == Z_STREAM_END) { @@ -741,15 +772,15 @@ PixarLogDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) } if (state == Z_DATA_ERROR) { TIFFErrorExt(tif->tif_clientdata, module, - "%s: Decoding error at scanline %d, %s", - tif->tif_name, tif->tif_row, sp->stream.msg); + "Decoding error at scanline %lu, %s", + (unsigned long) tif->tif_row, sp->stream.msg); if (inflateSync(&sp->stream) != Z_OK) return (0); continue; } if (state != Z_OK) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: zlib error: %s", - tif->tif_name, sp->stream.msg); + TIFFErrorExt(tif->tif_clientdata, module, "ZLib error: %s", + sp->stream.msg); return (0); } } while (sp->stream.avail_out > 0); @@ -757,8 +788,8 @@ PixarLogDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) /* hopefully, we got all the bytes we needed */ if (sp->stream.avail_out != 0) { TIFFErrorExt(tif->tif_clientdata, module, - "%s: Not enough data at scanline %d (short %d bytes)", - tif->tif_name, tif->tif_row, sp->stream.avail_out); + "Not enough data at scanline %lu (short " TIFF_UINT64_FORMAT " bytes)", + (unsigned long) tif->tif_row, (TIFF_UINT64_T) sp->stream.avail_out); return (0); } @@ -767,15 +798,15 @@ PixarLogDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) if (tif->tif_flags & TIFF_SWAB) TIFFSwabArrayOfShort(up, nsamples); - /* + /* * if llen is not an exact multiple of nsamples, the decode operation * may overflow the output buffer, so truncate it enough to prevent * that but still salvage as much data as possible. */ if (nsamples % llen) { TIFFWarningExt(tif->tif_clientdata, module, - "%s: stride %d is not a multiple of sample count, " - "%d, data truncated.", tif->tif_name, llen, nsamples); + "stride %lu is not a multiple of sample count, " + "%lu, data truncated.", (unsigned long) llen, (unsigned long) nsamples); nsamples -= nsamples % llen; } @@ -812,8 +843,8 @@ PixarLogDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) op += llen * sizeof(unsigned char); break; default: - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "PixarLogDecode: unsupported bits/sample: %d", + TIFFErrorExt(tif->tif_clientdata, module, + "Unsupported bits/sample: %d", td->td_bitspersample); return (0); } @@ -825,10 +856,10 @@ PixarLogDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) static int PixarLogSetupEncode(TIFF* tif) { + static const char module[] = "PixarLogSetupEncode"; TIFFDirectory *td = &tif->tif_dir; PixarLogState* sp = EncoderState(tif); - tsize_t tbuf_size; - static const char module[] = "PixarLogSetupEncode"; + tmsize_t tbuf_size; assert(sp != NULL); @@ -836,10 +867,10 @@ PixarLogSetupEncode(TIFF* tif) sp->stride = (td->td_planarconfig == PLANARCONFIG_CONTIG ? td->td_samplesperpixel : 1); - tbuf_size = multiply(multiply(multiply(sp->stride, td->td_imagewidth), + tbuf_size = multiply_ms(multiply_ms(multiply_ms(sp->stride, td->td_imagewidth), td->td_rowsperstrip), sizeof(uint16)); if (tbuf_size == 0) - return (0); + return (0); /* TODO: this is an error return without error report through TIFFErrorExt */ sp->tbuf = (uint16 *) _TIFFmalloc(tbuf_size); if (sp->tbuf == NULL) return (0); @@ -851,7 +882,7 @@ PixarLogSetupEncode(TIFF* tif) } if (deflateInit(&sp->stream, sp->quality) != Z_OK) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: %s", tif->tif_name, sp->stream.msg); + TIFFErrorExt(tif->tif_clientdata, module, "%s", sp->stream.msg); return (0); } else { sp->state |= PLSTATE_INIT; @@ -863,21 +894,30 @@ PixarLogSetupEncode(TIFF* tif) * Reset encoding state at the start of a strip. */ static int -PixarLogPreEncode(TIFF* tif, tsample_t s) +PixarLogPreEncode(TIFF* tif, uint16 s) { + static const char module[] = "PixarLogPreEncode"; PixarLogState *sp = EncoderState(tif); (void) s; assert(sp != NULL); sp->stream.next_out = tif->tif_rawdata; + assert(sizeof(sp->stream.avail_out)==4); /* if this assert gets raised, + we need to simplify this code to reflect a ZLib that is likely updated + to deal with 8byte memory sizes, though this code will respond + apropriately even before we simplify it */ sp->stream.avail_out = tif->tif_rawdatasize; + if ((tmsize_t)sp->stream.avail_out != tif->tif_rawdatasize) + { + TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size"); + return (0); + } return (deflateReset(&sp->stream) == Z_OK); } static void horizontalDifferenceF(float *ip, int n, int stride, uint16 *wp, uint16 *FromLT2) { - int32 r1, g1, b1, a1, r2, g2, b2, a2, mask; float fltsize = Fltsize; @@ -1042,12 +1082,14 @@ horizontalDifference8(unsigned char *ip, int n, int stride, * Encode a chunk of pixels. */ static int -PixarLogEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +PixarLogEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) { + static const char module[] = "PixarLogEncode"; TIFFDirectory *td = &tif->tif_dir; PixarLogState *sp = EncoderState(tif); - static const char module[] = "PixarLogEncode"; - int i, n, llen; + tmsize_t i; + tmsize_t n; + int llen; unsigned short * up; (void) s; @@ -1066,7 +1108,7 @@ PixarLogEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) n = cc; break; default: - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, + TIFFErrorExt(tif->tif_clientdata, module, "%d bit input not supported in PixarLog", td->td_bitspersample); return 0; @@ -1092,7 +1134,7 @@ PixarLogEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) bp += llen * sizeof(unsigned char); break; default: - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, + TIFFErrorExt(tif->tif_clientdata, module, "%d bit input not supported in PixarLog", td->td_bitspersample); return 0; @@ -1100,19 +1142,29 @@ PixarLogEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) } sp->stream.next_in = (unsigned char *) sp->tbuf; - sp->stream.avail_in = n * sizeof(uint16); + assert(sizeof(sp->stream.avail_in)==4); /* if this assert gets raised, + we need to simplify this code to reflect a ZLib that is likely updated + to deal with 8byte memory sizes, though this code will respond + apropriately even before we simplify it */ + sp->stream.avail_in = (uInt) (n * sizeof(uint16)); + if ((sp->stream.avail_in / sizeof(uint16)) != (uInt) n) + { + TIFFErrorExt(tif->tif_clientdata, module, + "ZLib cannot deal with buffers this size"); + return (0); + } do { if (deflate(&sp->stream, Z_NO_FLUSH) != Z_OK) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: Encoder error: %s", - tif->tif_name, sp->stream.msg); + TIFFErrorExt(tif->tif_clientdata, module, "Encoder error: %s", + sp->stream.msg); return (0); } if (sp->stream.avail_out == 0) { tif->tif_rawcc = tif->tif_rawdatasize; TIFFFlushData1(tif); sp->stream.next_out = tif->tif_rawdata; - sp->stream.avail_out = tif->tif_rawdatasize; + sp->stream.avail_out = (uInt) tif->tif_rawdatasize; /* this is a safe typecast, as check is made already in PixarLogPreEncode */ } } while (sp->stream.avail_in > 0); return (1); @@ -1126,8 +1178,8 @@ PixarLogEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) static int PixarLogPostEncode(TIFF* tif) { - PixarLogState *sp = EncoderState(tif); static const char module[] = "PixarLogPostEncode"; + PixarLogState *sp = EncoderState(tif); int state; sp->stream.avail_in = 0; @@ -1137,17 +1189,17 @@ PixarLogPostEncode(TIFF* tif) switch (state) { case Z_STREAM_END: case Z_OK: - if (sp->stream.avail_out != (uint32)tif->tif_rawdatasize) { + if ((tmsize_t)sp->stream.avail_out != tif->tif_rawdatasize) { tif->tif_rawcc = tif->tif_rawdatasize - sp->stream.avail_out; TIFFFlushData1(tif); sp->stream.next_out = tif->tif_rawdata; - sp->stream.avail_out = tif->tif_rawdatasize; + sp->stream.avail_out = (uInt) tif->tif_rawdatasize; /* this is a safe typecast, as check is made already in PixarLogPreEncode */ } break; default: - TIFFErrorExt(tif->tif_clientdata, module, "%s: zlib error: %s", - tif->tif_name, sp->stream.msg); + TIFFErrorExt(tif->tif_clientdata, module, "ZLib error: %s", + sp->stream.msg); return (0); } } while (state != Z_STREAM_END); @@ -1159,9 +1211,11 @@ PixarLogClose(TIFF* tif) { TIFFDirectory *td = &tif->tif_dir; - /* In a really sneaky maneuver, on close, we covertly modify both - * bitspersample and sampleformat in the directory to indicate - * 8-bit linear. This way, the decode "just works" even for + /* In a really sneaky (and really incorrect, and untruthfull, and + * troublesome, and error-prone) maneuver that completely goes against + * the spirit of TIFF, and breaks TIFF, on close, we covertly + * modify both bitspersample and sampleformat in the directory to + * indicate 8-bit linear. This way, the decode "just works" even for * readers that don't know about PixarLog, or how to set * the PIXARLOGDATFMT pseudo-tag. */ @@ -1202,26 +1256,26 @@ PixarLogCleanup(TIFF* tif) } static int -PixarLogVSetField(TIFF* tif, ttag_t tag, va_list ap) +PixarLogVSetField(TIFF* tif, uint32 tag, va_list ap) { + static const char module[] = "PixarLogVSetField"; PixarLogState *sp = (PixarLogState *)tif->tif_data; int result; - static const char module[] = "PixarLogVSetField"; switch (tag) { case TIFFTAG_PIXARLOGQUALITY: - sp->quality = va_arg(ap, int); + sp->quality = (int) va_arg(ap, int); if (tif->tif_mode != O_RDONLY && (sp->state&PLSTATE_INIT)) { if (deflateParams(&sp->stream, sp->quality, Z_DEFAULT_STRATEGY) != Z_OK) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: zlib error: %s", - tif->tif_name, sp->stream.msg); + TIFFErrorExt(tif->tif_clientdata, module, "ZLib error: %s", + sp->stream.msg); return (0); } } return (1); case TIFFTAG_PIXARLOGDATAFMT: - sp->user_datafmt = va_arg(ap, int); + sp->user_datafmt = (int) va_arg(ap, int); /* Tweak the TIFF header so that the rest of libtiff knows what * size of data will be passed between app and library, and * assume that the app knows what it is doing and is not @@ -1253,7 +1307,7 @@ PixarLogVSetField(TIFF* tif, ttag_t tag, va_list ap) /* * Must recalculate sizes should bits/sample change. */ - tif->tif_tilesize = isTiled(tif) ? TIFFTileSize(tif) : (tsize_t) -1; + tif->tif_tilesize = isTiled(tif) ? TIFFTileSize(tif) : (tmsize_t)(-1); tif->tif_scanlinesize = TIFFScanlineSize(tif); result = 1; /* NB: pseudo tag */ break; @@ -1264,7 +1318,7 @@ PixarLogVSetField(TIFF* tif, ttag_t tag, va_list ap) } static int -PixarLogVGetField(TIFF* tif, ttag_t tag, va_list ap) +PixarLogVGetField(TIFF* tif, uint32 tag, va_list ap) { PixarLogState *sp = (PixarLogState *)tif->tif_data; @@ -1281,9 +1335,9 @@ PixarLogVGetField(TIFF* tif, ttag_t tag, va_list ap) return (1); } -static const TIFFFieldInfo pixarlogFieldInfo[] = { - {TIFFTAG_PIXARLOGDATAFMT,0,0,TIFF_ANY, FIELD_PSEUDO,FALSE,FALSE,""}, - {TIFFTAG_PIXARLOGQUALITY,0,0,TIFF_ANY, FIELD_PSEUDO,FALSE,FALSE,""} +static const TIFFField pixarlogFields[] = { + {TIFFTAG_PIXARLOGDATAFMT, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, FALSE, FALSE, "", NULL}, + {TIFFTAG_PIXARLOGQUALITY, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, FALSE, FALSE, "", NULL} }; int @@ -1298,8 +1352,8 @@ TIFFInitPixarLog(TIFF* tif, int scheme) /* * Merge codec-specific tag information. */ - if (!_TIFFMergeFieldInfo(tif, pixarlogFieldInfo, - TIFFArrayCount(pixarlogFieldInfo))) { + if (!_TIFFMergeFields(tif, pixarlogFields, + TIFFArrayCount(pixarlogFields))) { TIFFErrorExt(tif->tif_clientdata, module, "Merging PixarLog codec-specific tags failed"); return 0; @@ -1308,7 +1362,7 @@ TIFFInitPixarLog(TIFF* tif, int scheme) /* * Allocate state block so tag methods have storage to record values. */ - tif->tif_data = (tidata_t) _TIFFmalloc(sizeof (PixarLogState)); + tif->tif_data = (uint8*) _TIFFmalloc(sizeof (PixarLogState)); if (tif->tif_data == NULL) goto bad; sp = (PixarLogState*) tif->tif_data; @@ -1319,17 +1373,18 @@ TIFFInitPixarLog(TIFF* tif, int scheme) /* * Install codec methods. */ + tif->tif_fixuptags = PixarLogFixupTags; tif->tif_setupdecode = PixarLogSetupDecode; tif->tif_predecode = PixarLogPreDecode; tif->tif_decoderow = PixarLogDecode; - tif->tif_decodestrip = PixarLogDecode; + tif->tif_decodestrip = PixarLogDecode; tif->tif_decodetile = PixarLogDecode; tif->tif_setupencode = PixarLogSetupEncode; tif->tif_preencode = PixarLogPreEncode; tif->tif_postencode = PixarLogPostEncode; - tif->tif_encoderow = PixarLogEncode; + tif->tif_encoderow = PixarLogEncode; tif->tif_encodestrip = PixarLogEncode; - tif->tif_encodetile = PixarLogEncode; + tif->tif_encodetile = PixarLogEncode; tif->tif_close = PixarLogClose; tif->tif_cleanup = PixarLogCleanup; diff --git a/dll/3rdparty/libtiff/tif_predict.c b/dll/3rdparty/libtiff/tif_predict.c index bbc221f27f9..f93c6645f0f 100644 --- a/dll/3rdparty/libtiff/tif_predict.c +++ b/dll/3rdparty/libtiff/tif_predict.c @@ -1,4 +1,4 @@ -/* $Id: tif_predict.c,v 1.11.2.4 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Id: tif_predict.c,v 1.32 2010-03-10 18:56:49 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -34,20 +34,20 @@ #define PredictorState(tif) ((TIFFPredictorState*) (tif)->tif_data) -static void horAcc8(TIFF*, tidata_t, tsize_t); -static void horAcc16(TIFF*, tidata_t, tsize_t); -static void horAcc32(TIFF*, tidata_t, tsize_t); -static void swabHorAcc16(TIFF*, tidata_t, tsize_t); -static void swabHorAcc32(TIFF*, tidata_t, tsize_t); -static void horDiff8(TIFF*, tidata_t, tsize_t); -static void horDiff16(TIFF*, tidata_t, tsize_t); -static void horDiff32(TIFF*, tidata_t, tsize_t); -static void fpAcc(TIFF*, tidata_t, tsize_t); -static void fpDiff(TIFF*, tidata_t, tsize_t); -static int PredictorDecodeRow(TIFF*, tidata_t, tsize_t, tsample_t); -static int PredictorDecodeTile(TIFF*, tidata_t, tsize_t, tsample_t); -static int PredictorEncodeRow(TIFF*, tidata_t, tsize_t, tsample_t); -static int PredictorEncodeTile(TIFF*, tidata_t, tsize_t, tsample_t); +static void horAcc8(TIFF* tif, uint8* cp0, tmsize_t cc); +static void horAcc16(TIFF* tif, uint8* cp0, tmsize_t cc); +static void horAcc32(TIFF* tif, uint8* cp0, tmsize_t cc); +static void swabHorAcc16(TIFF* tif, uint8* cp0, tmsize_t cc); +static void swabHorAcc32(TIFF* tif, uint8* cp0, tmsize_t cc); +static void horDiff8(TIFF* tif, uint8* cp0, tmsize_t cc); +static void horDiff16(TIFF* tif, uint8* cp0, tmsize_t cc); +static void horDiff32(TIFF* tif, uint8* cp0, tmsize_t cc); +static void fpAcc(TIFF* tif, uint8* cp0, tmsize_t cc); +static void fpDiff(TIFF* tif, uint8* cp0, tmsize_t cc); +static int PredictorDecodeRow(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s); +static int PredictorDecodeTile(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s); +static int PredictorEncodeRow(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s); +static int PredictorEncodeTile(TIFF* tif, uint8* bp0, tmsize_t cc0, uint16 s); static int PredictorSetup(TIFF* tif) @@ -66,23 +66,23 @@ PredictorSetup(TIFF* tif) && td->td_bitspersample != 16 && td->td_bitspersample != 32) { TIFFErrorExt(tif->tif_clientdata, module, - "Horizontal differencing \"Predictor\" not supported with %d-bit samples", - td->td_bitspersample); + "Horizontal differencing \"Predictor\" not supported with %d-bit samples", + td->td_bitspersample); return 0; } break; case PREDICTOR_FLOATINGPOINT: if (td->td_sampleformat != SAMPLEFORMAT_IEEEFP) { TIFFErrorExt(tif->tif_clientdata, module, - "Floating point \"Predictor\" not supported with %d data format", - td->td_sampleformat); + "Floating point \"Predictor\" not supported with %d data format", + td->td_sampleformat); return 0; } break; default: TIFFErrorExt(tif->tif_clientdata, module, - "\"Predictor\" value %d not supported", - sp->predictor); + "\"Predictor\" value %d not supported", + sp->predictor); return 0; } sp->stride = (td->td_planarconfig == PLANARCONFIG_CONTIG ? @@ -94,6 +94,8 @@ PredictorSetup(TIFF* tif) sp->rowsize = TIFFTileRowSize(tif); else sp->rowsize = TIFFScanlineSize(tif); + if (sp->rowsize == 0) + return 0; return 1; } @@ -126,6 +128,7 @@ PredictorSetupDecode(TIFF* tif) sp->decodetile = tif->tif_decodetile; tif->tif_decodetile = PredictorDecodeTile; } + /* * If the data is horizontally differenced 16-bit data that * requires byte-swapping, then it must be byte swapped before @@ -137,10 +140,10 @@ PredictorSetupDecode(TIFF* tif) if (sp->decodepfunc == horAcc16) { sp->decodepfunc = swabHorAcc16; tif->tif_postdecode = _TIFFNoPostDecode; - } else if (sp->decodepfunc == horAcc32) { + } else if (sp->decodepfunc == horAcc32) { sp->decodepfunc = swabHorAcc32; tif->tif_postdecode = _TIFFNoPostDecode; - } + } } } @@ -205,7 +208,7 @@ PredictorSetupEncode(TIFF* tif) tif->tif_encodetile = PredictorEncodeTile; } } - + else if (sp->predictor == 3) { sp->encodepfunc = fpDiff; /* @@ -228,7 +231,7 @@ PredictorSetupEncode(TIFF* tif) #define REPEAT4(n, op) \ switch (n) { \ - default: { int i; for (i = n-4; i > 0; i--) { op; } } \ + default: { tmsize_t i; for (i = n-4; i > 0; i--) { op; } } \ case 4: op; \ case 3: op; \ case 2: op; \ @@ -237,13 +240,13 @@ PredictorSetupEncode(TIFF* tif) } static void -horAcc8(TIFF* tif, tidata_t cp0, tsize_t cc) +horAcc8(TIFF* tif, uint8* cp0, tmsize_t cc) { - tsize_t stride = PredictorState(tif)->stride; + tmsize_t stride = PredictorState(tif)->stride; char* cp = (char*) cp0; + assert((cc%stride)==0); if (cc > stride) { - cc -= stride; /* * Pipeline the most common cases. */ @@ -251,40 +254,49 @@ horAcc8(TIFF* tif, tidata_t cp0, tsize_t cc) unsigned int cr = cp[0]; unsigned int cg = cp[1]; unsigned int cb = cp[2]; - do { - cc -= 3, cp += 3; + cc -= 3; + cp += 3; + while (cc>0) { cp[0] = (char) (cr += cp[0]); cp[1] = (char) (cg += cp[1]); cp[2] = (char) (cb += cp[2]); - } while ((int32) cc > 0); + cc -= 3; + cp += 3; + } } else if (stride == 4) { unsigned int cr = cp[0]; unsigned int cg = cp[1]; unsigned int cb = cp[2]; unsigned int ca = cp[3]; - do { - cc -= 4, cp += 4; + cc -= 4; + cp += 4; + while (cc>0) { cp[0] = (char) (cr += cp[0]); cp[1] = (char) (cg += cp[1]); cp[2] = (char) (cb += cp[2]); cp[3] = (char) (ca += cp[3]); - } while ((int32) cc > 0); + cc -= 4; + cp += 4; + } } else { + cc -= stride; do { REPEAT4(stride, cp[stride] = (char) (cp[stride] + *cp); cp++) cc -= stride; - } while ((int32) cc > 0); + } while (cc>0); } } } static void -swabHorAcc16(TIFF* tif, tidata_t cp0, tsize_t cc) +swabHorAcc16(TIFF* tif, uint8* cp0, tmsize_t cc) { - tsize_t stride = PredictorState(tif)->stride; + tmsize_t stride = PredictorState(tif)->stride; uint16* wp = (uint16*) cp0; - tsize_t wc = cc / 2; + tmsize_t wc = cc / 2; + + assert((cc%(2*stride))==0); if (wc > stride) { TIFFSwabArrayOfShort(wp, wc); @@ -292,32 +304,36 @@ swabHorAcc16(TIFF* tif, tidata_t cp0, tsize_t cc) do { REPEAT4(stride, wp[stride] += wp[0]; wp++) wc -= stride; - } while ((int32) wc > 0); + } while (wc > 0); } } static void -horAcc16(TIFF* tif, tidata_t cp0, tsize_t cc) +horAcc16(TIFF* tif, uint8* cp0, tmsize_t cc) { - tsize_t stride = PredictorState(tif)->stride; + tmsize_t stride = PredictorState(tif)->stride; uint16* wp = (uint16*) cp0; - tsize_t wc = cc / 2; + tmsize_t wc = cc / 2; + + assert((cc%(2*stride))==0); if (wc > stride) { wc -= stride; do { REPEAT4(stride, wp[stride] += wp[0]; wp++) wc -= stride; - } while ((int32) wc > 0); + } while (wc > 0); } } static void -swabHorAcc32(TIFF* tif, tidata_t cp0, tsize_t cc) +swabHorAcc32(TIFF* tif, uint8* cp0, tmsize_t cc) { - tsize_t stride = PredictorState(tif)->stride; + tmsize_t stride = PredictorState(tif)->stride; uint32* wp = (uint32*) cp0; - tsize_t wc = cc / 4; + tmsize_t wc = cc / 4; + + assert((cc%(4*stride))==0); if (wc > stride) { TIFFSwabArrayOfLong(wp, wc); @@ -325,23 +341,25 @@ swabHorAcc32(TIFF* tif, tidata_t cp0, tsize_t cc) do { REPEAT4(stride, wp[stride] += wp[0]; wp++) wc -= stride; - } while ((int32) wc > 0); + } while (wc > 0); } } static void -horAcc32(TIFF* tif, tidata_t cp0, tsize_t cc) +horAcc32(TIFF* tif, uint8* cp0, tmsize_t cc) { - tsize_t stride = PredictorState(tif)->stride; + tmsize_t stride = PredictorState(tif)->stride; uint32* wp = (uint32*) cp0; - tsize_t wc = cc / 4; + tmsize_t wc = cc / 4; + + assert((cc%(4*stride))==0); if (wc > stride) { wc -= stride; do { REPEAT4(stride, wp[stride] += wp[0]; wp++) wc -= stride; - } while ((int32) wc > 0); + } while (wc > 0); } } @@ -349,15 +367,17 @@ horAcc32(TIFF* tif, tidata_t cp0, tsize_t cc) * Floating point predictor accumulation routine. */ static void -fpAcc(TIFF* tif, tidata_t cp0, tsize_t cc) +fpAcc(TIFF* tif, uint8* cp0, tmsize_t cc) { - tsize_t stride = PredictorState(tif)->stride; + tmsize_t stride = PredictorState(tif)->stride; uint32 bps = tif->tif_dir.td_bitspersample / 8; - tsize_t wc = cc / bps; - tsize_t count = cc; + tmsize_t wc = cc / bps; + tmsize_t count = cc; uint8 *cp = (uint8 *) cp0; uint8 *tmp = (uint8 *)_TIFFmalloc(cc); + assert((cc%(bps*stride))==0); + if (!tmp) return; @@ -371,12 +391,12 @@ fpAcc(TIFF* tif, tidata_t cp0, tsize_t cc) for (count = 0; count < wc; count++) { uint32 byte; for (byte = 0; byte < bps; byte++) { -#if WORDS_BIGENDIAN + #if WORDS_BIGENDIAN cp[bps * count + byte] = tmp[byte * wc + count]; -#else + #else cp[bps * count + byte] = tmp[(bps - byte - 1) * wc + count]; -#endif + #endif } } _TIFFfree(tmp); @@ -386,13 +406,13 @@ fpAcc(TIFF* tif, tidata_t cp0, tsize_t cc) * Decode a scanline and apply the predictor routine. */ static int -PredictorDecodeRow(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) +PredictorDecodeRow(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s) { TIFFPredictorState *sp = PredictorState(tif); assert(sp != NULL); assert(sp->decoderow != NULL); - assert(sp->decodepfunc != NULL); + assert(sp->decodepfunc != NULL); if ((*sp->decoderow)(tif, op0, occ0, s)) { (*sp->decodepfunc)(tif, op0, occ0); @@ -409,7 +429,7 @@ PredictorDecodeRow(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) * strip/tile dimensions. */ static int -PredictorDecodeTile(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) +PredictorDecodeTile(TIFF* tif, uint8* op0, tmsize_t occ0, uint16 s) { TIFFPredictorState *sp = PredictorState(tif); @@ -417,11 +437,12 @@ PredictorDecodeTile(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) assert(sp->decodetile != NULL); if ((*sp->decodetile)(tif, op0, occ0, s)) { - tsize_t rowsize = sp->rowsize; + tmsize_t rowsize = sp->rowsize; assert(rowsize > 0); + assert((occ0%rowsize)==0); assert(sp->decodepfunc != NULL); - while ((long)occ0 > 0) { - (*sp->decodepfunc)(tif, op0, (tsize_t) rowsize); + while (occ0 > 0) { + (*sp->decodepfunc)(tif, op0, rowsize); occ0 -= rowsize; op0 += rowsize; } @@ -431,12 +452,14 @@ PredictorDecodeTile(TIFF* tif, tidata_t op0, tsize_t occ0, tsample_t s) } static void -horDiff8(TIFF* tif, tidata_t cp0, tsize_t cc) +horDiff8(TIFF* tif, uint8* cp0, tmsize_t cc) { TIFFPredictorState* sp = PredictorState(tif); - tsize_t stride = sp->stride; + tmsize_t stride = sp->stride; char* cp = (char*) cp0; + assert((cc%stride)==0); + if (cc > stride) { cc -= stride; /* @@ -452,7 +475,7 @@ horDiff8(TIFF* tif, tidata_t cp0, tsize_t cc) g1 = cp[4]; cp[4] = g1-g2; g2 = g1; b1 = cp[5]; cp[5] = b1-b2; b2 = b1; cp += 3; - } while ((int32)(cc -= 3) > 0); + } while ((cc -= 3) > 0); } else if (stride == 4) { int r1, g1, b1, a1; int r2 = cp[0]; @@ -465,23 +488,25 @@ horDiff8(TIFF* tif, tidata_t cp0, tsize_t cc) b1 = cp[6]; cp[6] = b1-b2; b2 = b1; a1 = cp[7]; cp[7] = a1-a2; a2 = a1; cp += 4; - } while ((int32)(cc -= 4) > 0); + } while ((cc -= 4) > 0); } else { cp += cc - 1; do { REPEAT4(stride, cp[stride] -= cp[0]; cp--) - } while ((int32)(cc -= stride) > 0); + } while ((cc -= stride) > 0); } } } static void -horDiff16(TIFF* tif, tidata_t cp0, tsize_t cc) +horDiff16(TIFF* tif, uint8* cp0, tmsize_t cc) { TIFFPredictorState* sp = PredictorState(tif); - tsize_t stride = sp->stride; + tmsize_t stride = sp->stride; int16 *wp = (int16*) cp0; - tsize_t wc = cc/2; + tmsize_t wc = cc/2; + + assert((cc%(2*stride))==0); if (wc > stride) { wc -= stride; @@ -489,17 +514,19 @@ horDiff16(TIFF* tif, tidata_t cp0, tsize_t cc) do { REPEAT4(stride, wp[stride] -= wp[0]; wp--) wc -= stride; - } while ((int32) wc > 0); + } while (wc > 0); } } static void -horDiff32(TIFF* tif, tidata_t cp0, tsize_t cc) +horDiff32(TIFF* tif, uint8* cp0, tmsize_t cc) { TIFFPredictorState* sp = PredictorState(tif); - tsize_t stride = sp->stride; + tmsize_t stride = sp->stride; int32 *wp = (int32*) cp0; - tsize_t wc = cc/4; + tmsize_t wc = cc/4; + + assert((cc%(4*stride))==0); if (wc > stride) { wc -= stride; @@ -507,7 +534,7 @@ horDiff32(TIFF* tif, tidata_t cp0, tsize_t cc) do { REPEAT4(stride, wp[stride] -= wp[0]; wp--) wc -= stride; - } while ((int32) wc > 0); + } while (wc > 0); } } @@ -515,15 +542,17 @@ horDiff32(TIFF* tif, tidata_t cp0, tsize_t cc) * Floating point predictor differencing routine. */ static void -fpDiff(TIFF* tif, tidata_t cp0, tsize_t cc) +fpDiff(TIFF* tif, uint8* cp0, tmsize_t cc) { - tsize_t stride = PredictorState(tif)->stride; + tmsize_t stride = PredictorState(tif)->stride; uint32 bps = tif->tif_dir.td_bitspersample / 8; - tsize_t wc = cc / bps; - tsize_t count; + tmsize_t wc = cc / bps; + tmsize_t count; uint8 *cp = (uint8 *) cp0; uint8 *tmp = (uint8 *)_TIFFmalloc(cc); + assert((cc%(bps*stride))==0); + if (!tmp) return; @@ -531,12 +560,12 @@ fpDiff(TIFF* tif, tidata_t cp0, tsize_t cc) for (count = 0; count < wc; count++) { uint32 byte; for (byte = 0; byte < bps; byte++) { -#if WORDS_BIGENDIAN - cp[byte * wc + count] = tmp[bps * count + byte]; -#else + #if WORDS_BIGENDIAN + cp[byte * wc + count] = tmp[bps * count + byte]; + #else cp[(bps - byte - 1) * wc + count] = tmp[bps * count + byte]; -#endif + #endif } } _TIFFfree(tmp); @@ -548,7 +577,7 @@ fpDiff(TIFF* tif, tidata_t cp0, tsize_t cc) } static int -PredictorEncodeRow(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +PredictorEncodeRow(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) { TIFFPredictorState *sp = PredictorState(tif); @@ -562,12 +591,12 @@ PredictorEncodeRow(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) } static int -PredictorEncodeTile(TIFF* tif, tidata_t bp0, tsize_t cc0, tsample_t s) +PredictorEncodeTile(TIFF* tif, uint8* bp0, tmsize_t cc0, uint16 s) { static const char module[] = "PredictorEncodeTile"; TIFFPredictorState *sp = PredictorState(tif); uint8 *working_copy; - tsize_t cc = cc0, rowsize; + tmsize_t cc = cc0, rowsize; unsigned char* bp; int result_code; @@ -583,7 +612,7 @@ PredictorEncodeTile(TIFF* tif, tidata_t bp0, tsize_t cc0, tsample_t s) if( working_copy == NULL ) { TIFFErrorExt(tif->tif_clientdata, module, - "Out of memory allocating %d byte temp buffer.", + "Out of memory allocating " TIFF_SSIZE_FORMAT " byte temp buffer.", cc0 ); return 0; } @@ -607,13 +636,12 @@ PredictorEncodeTile(TIFF* tif, tidata_t bp0, tsize_t cc0, tsample_t s) #define FIELD_PREDICTOR (FIELD_CODEC+0) /* XXX */ -static const TIFFFieldInfo predictFieldInfo[] = { - { TIFFTAG_PREDICTOR, 1, 1, TIFF_SHORT, FIELD_PREDICTOR, - FALSE, FALSE, "Predictor" }, +static const TIFFField predictFields[] = { + { TIFFTAG_PREDICTOR, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UINT16, FIELD_PREDICTOR, FALSE, FALSE, "Predictor", NULL }, }; static int -PredictorVSetField(TIFF* tif, ttag_t tag, va_list ap) +PredictorVSetField(TIFF* tif, uint32 tag, va_list ap) { TIFFPredictorState *sp = PredictorState(tif); @@ -622,7 +650,7 @@ PredictorVSetField(TIFF* tif, ttag_t tag, va_list ap) switch (tag) { case TIFFTAG_PREDICTOR: - sp->predictor = (uint16) va_arg(ap, int); + sp->predictor = (uint16) va_arg(ap, uint16_vap); TIFFSetFieldBit(tif, FIELD_PREDICTOR); break; default: @@ -633,7 +661,7 @@ PredictorVSetField(TIFF* tif, ttag_t tag, va_list ap) } static int -PredictorVGetField(TIFF* tif, ttag_t tag, va_list ap) +PredictorVGetField(TIFF* tif, uint32 tag, va_list ap) { TIFFPredictorState *sp = PredictorState(tif); @@ -659,9 +687,9 @@ PredictorPrintDir(TIFF* tif, FILE* fd, long flags) if (TIFFFieldSet(tif,FIELD_PREDICTOR)) { fprintf(fd, " Predictor: "); switch (sp->predictor) { - case 1: fprintf(fd, "none "); break; - case 2: fprintf(fd, "horizontal differencing "); break; - case 3: fprintf(fd, "floating point predictor "); break; + case 1: fprintf(fd, "none "); break; + case 2: fprintf(fd, "horizontal differencing "); break; + case 3: fprintf(fd, "floating point predictor "); break; } fprintf(fd, "%u (0x%x)\n", sp->predictor, sp->predictor); } @@ -679,10 +707,10 @@ TIFFPredictorInit(TIFF* tif) /* * Merge codec-specific tag information. */ - if (!_TIFFMergeFieldInfo(tif, predictFieldInfo, - TIFFArrayCount(predictFieldInfo))) { + if (!_TIFFMergeFields(tif, predictFields, + TIFFArrayCount(predictFields))) { TIFFErrorExt(tif->tif_clientdata, "TIFFPredictorInit", - "Merging Predictor codec-specific tags failed"); + "Merging Predictor codec-specific tags failed"); return 0; } @@ -694,7 +722,7 @@ TIFFPredictorInit(TIFF* tif) PredictorVGetField;/* hook for predictor tag */ sp->vsetparent = tif->tif_tagmethods.vsetfield; tif->tif_tagmethods.vsetfield = - PredictorVSetField;/* hook for predictor tag */ + PredictorVSetField;/* hook for predictor tag */ sp->printdir = tif->tif_tagmethods.printdir; tif->tif_tagmethods.printdir = PredictorPrintDir; /* hook for predictor tag */ diff --git a/dll/3rdparty/libtiff/tif_print.c b/dll/3rdparty/libtiff/tif_print.c index eb4b1e70c3e..402666d7f91 100644 --- a/dll/3rdparty/libtiff/tif_print.c +++ b/dll/3rdparty/libtiff/tif_print.c @@ -1,4 +1,4 @@ -/* $Id: tif_print.c,v 1.36.2.4 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Id: tif_print.c,v 1.60 2012-08-19 16:56:35 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -31,9 +31,12 @@ */ #include "tiffiop.h" #include -#include + #include +static void +_TIFFprintAsciiBounded(FILE* fd, const char* cp, int max_chars); + static const char *photoNames[] = { "min-is-white", /* PHOTOMETRIC_MINISWHITE */ "min-is-black", /* PHOTOMETRIC_MINISBLACK */ @@ -44,6 +47,8 @@ static const char *photoNames[] = { "YCbCr", /* PHOTOMETRIC_YCBCR */ "7 (0x7)", "CIE L*a*b*", /* PHOTOMETRIC_CIELAB */ + "ICC L*a*b*", /* PHOTOMETRIC_ICCLAB */ + "ITU L*a*b*" /* PHOTOMETRIC_ITULAB */ }; #define NPHOTONAMES (sizeof (photoNames) / sizeof (photoNames[0])) @@ -61,7 +66,7 @@ static const char *orientNames[] = { #define NORIENTNAMES (sizeof (orientNames) / sizeof (orientNames[0])) static void -_TIFFPrintField(FILE* fd, const TIFFFieldInfo *fip, +_TIFFPrintField(FILE* fd, const TIFFField *fip, uint32 value_count, void *raw_data) { uint32 j; @@ -73,7 +78,7 @@ _TIFFPrintField(FILE* fd, const TIFFFieldInfo *fip, fprintf(fd, "%u", ((uint8 *) raw_data)[j]); else if(fip->field_type == TIFF_UNDEFINED) fprintf(fd, "0x%x", - (unsigned int) ((unsigned char *) raw_data)[j]); + (unsigned int) ((unsigned char *) raw_data)[j]); else if(fip->field_type == TIFF_SBYTE) fprintf(fd, "%d", ((int8 *) raw_data)[j]); else if(fip->field_type == TIFF_SHORT) @@ -82,23 +87,46 @@ _TIFFPrintField(FILE* fd, const TIFFFieldInfo *fip, fprintf(fd, "%d", ((int16 *) raw_data)[j]); else if(fip->field_type == TIFF_LONG) fprintf(fd, "%lu", - (unsigned long)((uint32 *) raw_data)[j]); + (unsigned long)((uint32 *) raw_data)[j]); else if(fip->field_type == TIFF_SLONG) fprintf(fd, "%ld", (long)((int32 *) raw_data)[j]); + else if(fip->field_type == TIFF_IFD) + fprintf(fd, "0x%lx", + (unsigned long)((uint32 *) raw_data)[j]); else if(fip->field_type == TIFF_RATIONAL || fip->field_type == TIFF_SRATIONAL || fip->field_type == TIFF_FLOAT) fprintf(fd, "%f", ((float *) raw_data)[j]); - else if(fip->field_type == TIFF_IFD) - fprintf(fd, "0x%ulx", ((uint32 *) raw_data)[j]); + else if(fip->field_type == TIFF_LONG8) +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + fprintf(fd, "%I64u", + (unsigned __int64)((uint64 *) raw_data)[j]); +#else + fprintf(fd, "%llu", + (unsigned long long)((uint64 *) raw_data)[j]); +#endif + else if(fip->field_type == TIFF_SLONG8) +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + fprintf(fd, "%I64d", (__int64)((int64 *) raw_data)[j]); +#else + fprintf(fd, "%lld", (long long)((int64 *) raw_data)[j]); +#endif + else if(fip->field_type == TIFF_IFD8) +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + fprintf(fd, "0x%I64x", + (unsigned __int64)((uint64 *) raw_data)[j]); +#else + fprintf(fd, "0x%llx", + (unsigned long long)((uint64 *) raw_data)[j]); +#endif + else if(fip->field_type == TIFF_FLOAT) + fprintf(fd, "%f", ((float *)raw_data)[j]); + else if(fip->field_type == TIFF_DOUBLE) + fprintf(fd, "%f", ((double *) raw_data)[j]); else if(fip->field_type == TIFF_ASCII) { fprintf(fd, "%s", (char *) raw_data); break; } - else if(fip->field_type == TIFF_DOUBLE) - fprintf(fd, "%f", ((double *) raw_data)[j]); - else if(fip->field_type == TIFF_FLOAT) - fprintf(fd, "%f", ((float *)raw_data)[j]); else { fprintf(fd, ""); break; @@ -112,16 +140,22 @@ _TIFFPrintField(FILE* fd, const TIFFFieldInfo *fip, } static int -_TIFFPrettyPrintField(TIFF* tif, FILE* fd, ttag_t tag, +_TIFFPrettyPrintField(TIFF* tif, const TIFFField *fip, FILE* fd, uint32 tag, uint32 value_count, void *raw_data) { - TIFFDirectory *td = &tif->tif_dir; + (void) tif; + /* do not try to pretty print auto-defined fields */ + if (strncmp(fip->field_name,"Tag ", 4) == 0) { + return 0; + } + switch (tag) { case TIFFTAG_INKSET: - fprintf(fd, " Ink Set: "); - switch (*((uint16*)raw_data)) { + if (value_count == 2 && fip->field_type == TIFF_SHORT) { + fprintf(fd, " Ink Set: "); + switch (*((uint16*)raw_data)) { case INKSET_CMYK: fprintf(fd, "CMYK\n"); break; @@ -130,30 +164,31 @@ _TIFFPrettyPrintField(TIFF* tif, FILE* fd, ttag_t tag, *((uint16*)raw_data), *((uint16*)raw_data)); break; + } + return 1; } - return 1; - case TIFFTAG_DOTRANGE: - fprintf(fd, " Dot Range: %u-%u\n", - ((uint16*)raw_data)[0], ((uint16*)raw_data)[1]); - return 1; - case TIFFTAG_WHITEPOINT: - fprintf(fd, " White Point: %g-%g\n", - ((float *)raw_data)[0], ((float *)raw_data)[1]); return 1; - case TIFFTAG_REFERENCEBLACKWHITE: - { - uint16 i; + return 0; + + case TIFFTAG_DOTRANGE: + if (value_count == 2 && fip->field_type == TIFF_SHORT) { + fprintf(fd, " Dot Range: %u-%u\n", + ((uint16*)raw_data)[0], ((uint16*)raw_data)[1]); + return 1; + } + return 0; + + case TIFFTAG_WHITEPOINT: + if (value_count == 2 && fip->field_type == TIFF_RATIONAL) { + fprintf(fd, " White Point: %g-%g\n", + ((float *)raw_data)[0], ((float *)raw_data)[1]); + return 1; + } + return 0; - fprintf(fd, " Reference Black/White:\n"); - for (i = 0; i < 3; i++) - fprintf(fd, " %2d: %5g %5g\n", i, - ((float *)raw_data)[2*i+0], - ((float *)raw_data)[2*i+1]); - return 1; - } case TIFFTAG_XMLPACKET: { uint32 i; - + fprintf(fd, " XMLPacket (XMP Metadata):\n" ); for(i = 0; i < value_count; i++) fputc(((char *)raw_data)[i], fd); @@ -166,23 +201,29 @@ _TIFFPrettyPrintField(TIFF* tif, FILE* fd, ttag_t tag, * defined as array of LONG values. */ fprintf(fd, - " RichTIFFIPTC Data: , %lu bytes\n", - (unsigned long) value_count * 4); + " RichTIFFIPTC Data: , %lu bytes\n", + (unsigned long) value_count * 4); return 1; + case TIFFTAG_PHOTOSHOP: fprintf(fd, " Photoshop Data: , %lu bytes\n", - (unsigned long) value_count); + (unsigned long) value_count); return 1; + case TIFFTAG_ICCPROFILE: fprintf(fd, " ICC Profile: , %lu bytes\n", - (unsigned long) value_count); + (unsigned long) value_count); return 1; + case TIFFTAG_STONITS: - fprintf(fd, - " Sample to Nits conversion factor: %.4e\n", - *((double*)raw_data)); - return 1; - } + if (value_count == 1 && fip->field_type == TIFF_DOUBLE) { + fprintf(fd, + " Sample to Nits conversion factor: %.4e\n", + *((double*)raw_data)); + return 1; + } + return 0; + } return 0; } @@ -199,8 +240,15 @@ TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags) uint16 i; long l, n; - fprintf(fd, "TIFF Directory at offset 0x%lx (%lu)\n", - (unsigned long)tif->tif_diroff, (unsigned long)tif->tif_diroff); +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + fprintf(fd, "TIFF Directory at offset 0x%I64x (%I64u)\n", + (unsigned __int64) tif->tif_diroff, + (unsigned __int64) tif->tif_diroff); +#else + fprintf(fd, "TIFF Directory at offset 0x%llx (%llu)\n", + (unsigned long long) tif->tif_diroff, + (unsigned long long) tif->tif_diroff); +#endif if (TIFFFieldSet(tif,FIELD_SUBFILETYPE)) { fprintf(fd, " Subfile Type:"); sep = " "; @@ -344,9 +392,13 @@ TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags) fprintf(fd, " Ink Names: "); i = td->td_samplesperpixel; sep = ""; - for (cp = td->td_inknames; i > 0; cp = strchr(cp,'\0')+1, i--) { + for (cp = td->td_inknames; + i > 0 && cp < td->td_inknames + td->td_inknameslen; + cp = strchr(cp,'\0')+1, i--) { + int max_chars = + td->td_inknameslen - (cp - td->td_inknames); fputs(sep, fd); - _TIFFprintAscii(fd, cp); + _TIFFprintAsciiBounded(fd, cp, max_chars); sep = ", "; } fputs("\n", fd); @@ -386,18 +438,9 @@ TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags) } if (TIFFFieldSet(tif,FIELD_YCBCRSUBSAMPLING)) { - /* - * For hacky reasons (see tif_jpeg.c - JPEGFixupTestSubsampling), - * we need to fetch this rather than trust what is in our - * structures. - */ - uint16 subsampling[2]; - - TIFFGetField( tif, TIFFTAG_YCBCRSUBSAMPLING, - subsampling + 0, subsampling + 1 ); fprintf(fd, " YCbCr Subsampling: %u, %u\n", - subsampling[0], subsampling[1] ); - } + td->td_ycbcrsubsampling[0], td->td_ycbcrsubsampling[1] ); + } if (TIFFFieldSet(tif,FIELD_YCBCRPOSITIONING)) { fprintf(fd, " YCbCr Positioning: "); switch (td->td_ycbcrpositioning) { @@ -437,12 +480,20 @@ TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags) fprintf(fd, " Min Sample Value: %u\n", td->td_minsamplevalue); if (TIFFFieldSet(tif,FIELD_MAXSAMPLEVALUE)) fprintf(fd, " Max Sample Value: %u\n", td->td_maxsamplevalue); - if (TIFFFieldSet(tif,FIELD_SMINSAMPLEVALUE)) - fprintf(fd, " SMin Sample Value: %g\n", - td->td_sminsamplevalue); - if (TIFFFieldSet(tif,FIELD_SMAXSAMPLEVALUE)) - fprintf(fd, " SMax Sample Value: %g\n", - td->td_smaxsamplevalue); + if (TIFFFieldSet(tif,FIELD_SMINSAMPLEVALUE)) { + int count = (tif->tif_flags & TIFF_PERSAMPLE) ? td->td_samplesperpixel : 1; + fprintf(fd, " SMin Sample Value:"); + for (i = 0; i < count; ++i) + fprintf(fd, " %g", td->td_sminsamplevalue[i]); + fprintf(fd, "\n"); + } + if (TIFFFieldSet(tif,FIELD_SMAXSAMPLEVALUE)) { + int count = (tif->tif_flags & TIFF_PERSAMPLE) ? td->td_samplesperpixel : 1; + fprintf(fd, " SMax Sample Value:"); + for (i = 0; i < count; ++i) + fprintf(fd, " %g", td->td_smaxsamplevalue[i]); + fprintf(fd, "\n"); + } if (TIFFFieldSet(tif,FIELD_PLANARCONFIG)) { fprintf(fd, " Planar Configuration: "); switch (td->td_planarconfig) { @@ -475,6 +526,13 @@ TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags) } else fprintf(fd, "(present)\n"); } + if (TIFFFieldSet(tif,FIELD_REFBLACKWHITE)) { + fprintf(fd, " Reference Black/White:\n"); + for (i = 0; i < 3; i++) + fprintf(fd, " %2d: %5g %5g\n", i, + td->td_refblackwhite[2*i+0], + td->td_refblackwhite[2*i+1]); + } if (TIFFFieldSet(tif,FIELD_TRANSFERFUNCTION)) { fprintf(fd, " Transfer Function: "); if (flags & TIFFPRINT_CURVES) { @@ -494,124 +552,136 @@ TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags) if (TIFFFieldSet(tif, FIELD_SUBIFD) && (td->td_subifd)) { fprintf(fd, " SubIFD Offsets:"); for (i = 0; i < td->td_nsubifd; i++) - fprintf(fd, " %5lu", (long) td->td_subifd[i]); +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + fprintf(fd, " %5I64u", + (unsigned __int64) td->td_subifd[i]); +#else + fprintf(fd, " %5llu", + (unsigned long long) td->td_subifd[i]); +#endif fputc('\n', fd); } - /* - ** Custom tag support. - */ - { - int i; - short count; + /* + ** Custom tag support. + */ + { + int i; + short count; - count = (short) TIFFGetTagListCount(tif); - for(i = 0; i < count; i++) { - ttag_t tag = TIFFGetTagListEntry(tif, i); - const TIFFFieldInfo *fip; - uint32 value_count; - int mem_alloc = 0; - void *raw_data; + count = (short) TIFFGetTagListCount(tif); + for(i = 0; i < count; i++) { + uint32 tag = TIFFGetTagListEntry(tif, i); + const TIFFField *fip; + uint32 value_count; + int mem_alloc = 0; + void *raw_data; - fip = TIFFFieldWithTag(tif, tag); - if(fip == NULL) - continue; - - if(fip->field_passcount) { - if(TIFFGetField(tif, tag, &value_count, &raw_data) != 1) + fip = TIFFFieldWithTag(tif, tag); + if(fip == NULL) continue; - } else { - if (fip->field_readcount == TIFF_VARIABLE - || fip->field_readcount == TIFF_VARIABLE2) - value_count = 1; - else if (fip->field_readcount == TIFF_SPP) - value_count = td->td_samplesperpixel; - else - value_count = fip->field_readcount; - if ((fip->field_type == TIFF_ASCII - || fip->field_readcount == TIFF_VARIABLE - || fip->field_readcount == TIFF_VARIABLE2 - || fip->field_readcount == TIFF_SPP - || value_count > 1) - && fip->field_tag != TIFFTAG_PAGENUMBER - && fip->field_tag != TIFFTAG_HALFTONEHINTS - && fip->field_tag != TIFFTAG_YCBCRSUBSAMPLING - && fip->field_tag != TIFFTAG_DOTRANGE) { - if(TIFFGetField(tif, tag, &raw_data) != 1) + + if(fip->field_passcount) { + if (fip->field_readcount == TIFF_VARIABLE ) { + if(TIFFGetField(tif, tag, &value_count, &raw_data) != 1) + continue; + } else if (fip->field_readcount == TIFF_VARIABLE2 ) { + uint16 small_value_count; + if(TIFFGetField(tif, tag, &small_value_count, &raw_data) != 1) + continue; + value_count = small_value_count; + } else { + assert (fip->field_readcount == TIFF_VARIABLE + || fip->field_readcount == TIFF_VARIABLE2); continue; - } else if (fip->field_tag != TIFFTAG_PAGENUMBER - && fip->field_tag != TIFFTAG_HALFTONEHINTS - && fip->field_tag != TIFFTAG_YCBCRSUBSAMPLING - && fip->field_tag != TIFFTAG_DOTRANGE) { - raw_data = _TIFFmalloc( - _TIFFDataSize(fip->field_type) - * value_count); - mem_alloc = 1; - if(TIFFGetField(tif, tag, raw_data) != 1) { - _TIFFfree(raw_data); - continue; - } + } } else { - /* - * XXX: Should be fixed and removed, see the - * notes related to TIFFTAG_PAGENUMBER, - * TIFFTAG_HALFTONEHINTS, - * TIFFTAG_YCBCRSUBSAMPLING and - * TIFFTAG_DOTRANGE tags in tif_dir.c. */ - char *tmp; - raw_data = _TIFFmalloc( - _TIFFDataSize(fip->field_type) - * value_count); - tmp = raw_data; - mem_alloc = 1; - if(TIFFGetField(tif, tag, tmp, - tmp + _TIFFDataSize(fip->field_type)) != 1) { - _TIFFfree(raw_data); - continue; + if (fip->field_readcount == TIFF_VARIABLE + || fip->field_readcount == TIFF_VARIABLE2) + value_count = 1; + else if (fip->field_readcount == TIFF_SPP) + value_count = td->td_samplesperpixel; + else + value_count = fip->field_readcount; + if (fip->field_tag == TIFFTAG_DOTRANGE + && strcmp(fip->field_name,"DotRange") == 0) { + /* TODO: This is an evil exception and should not have been + handled this way ... likely best if we move it into + the directory structure with an explicit field in + libtiff 4.1 and assign it a FIELD_ value */ + static uint16 dotrange[2]; + raw_data = dotrange; + TIFFGetField(tif, tag, dotrange+0, dotrange+1); + } else if (fip->field_type == TIFF_ASCII + || fip->field_readcount == TIFF_VARIABLE + || fip->field_readcount == TIFF_VARIABLE2 + || fip->field_readcount == TIFF_SPP + || value_count > 1) { + if(TIFFGetField(tif, tag, &raw_data) != 1) + continue; + } else { + raw_data = _TIFFmalloc( + _TIFFDataSize(fip->field_type) + * value_count); + mem_alloc = 1; + if(TIFFGetField(tif, tag, raw_data) != 1) { + _TIFFfree(raw_data); + continue; + } } } - } - /* - * Catch the tags which needs to be specially handled and - * pretty print them. If tag not handled in - * _TIFFPrettyPrintField() fall down and print it as any other - * tag. - */ - if (_TIFFPrettyPrintField(tif, fd, tag, value_count, raw_data)) { + /* + * Catch the tags which needs to be specially handled + * and pretty print them. If tag not handled in + * _TIFFPrettyPrintField() fall down and print it as + * any other tag. + */ + if (!_TIFFPrettyPrintField(tif, fip, fd, tag, value_count, raw_data)) + _TIFFPrintField(fd, fip, value_count, raw_data); + if(mem_alloc) _TIFFfree(raw_data); - continue; } - else - _TIFFPrintField(fd, fip, value_count, raw_data); - - if(mem_alloc) - _TIFFfree(raw_data); - } - } + } if (tif->tif_tagmethods.printdir) (*tif->tif_tagmethods.printdir)(tif, fd, flags); + + _TIFFFillStriles( tif ); + if ((flags & TIFFPRINT_STRIPS) && TIFFFieldSet(tif,FIELD_STRIPOFFSETS)) { - tstrip_t s; + uint32 s; fprintf(fd, " %lu %s:\n", (long) td->td_nstrips, isTiled(tif) ? "Tiles" : "Strips"); for (s = 0; s < td->td_nstrips; s++) - fprintf(fd, " %3lu: [%8lu, %8lu]\n", +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + fprintf(fd, " %3lu: [%8I64u, %8I64u]\n", (unsigned long) s, - (unsigned long) td->td_stripoffset[s], - (unsigned long) td->td_stripbytecount[s]); + (unsigned __int64) td->td_stripoffset[s], + (unsigned __int64) td->td_stripbytecount[s]); +#else + fprintf(fd, " %3lu: [%8llu, %8llu]\n", + (unsigned long) s, + (unsigned long long) td->td_stripoffset[s], + (unsigned long long) td->td_stripbytecount[s]); +#endif } } void _TIFFprintAscii(FILE* fd, const char* cp) { - for (; *cp != '\0'; cp++) { + _TIFFprintAsciiBounded( fd, cp, strlen(cp)); +} + +static void +_TIFFprintAsciiBounded(FILE* fd, const char* cp, int max_chars) +{ + for (; max_chars > 0 && *cp != '\0'; cp++, max_chars--) { const char* tp; if (isprint((int)*cp)) { diff --git a/dll/3rdparty/libtiff/tif_read.c b/dll/3rdparty/libtiff/tif_read.c index 8ac0ae66cb9..fe36e683c7c 100644 --- a/dll/3rdparty/libtiff/tif_read.c +++ b/dll/3rdparty/libtiff/tif_read.c @@ -1,4 +1,4 @@ -/* $Id: tif_read.c,v 1.16.2.3 2010-06-09 14:32:47 bfriesen Exp $ */ +/* $Id: tif_read.c,v 1.41 2012-07-06 19:22:58 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -31,29 +31,161 @@ #include "tiffiop.h" #include - int TIFFFillStrip(TIFF*, tstrip_t); - int TIFFFillTile(TIFF*, ttile_t); -static int TIFFStartStrip(TIFF*, tstrip_t); -static int TIFFStartTile(TIFF*, ttile_t); -static int TIFFCheckRead(TIFF*, int); +int TIFFFillStrip(TIFF* tif, uint32 strip); +int TIFFFillTile(TIFF* tif, uint32 tile); +static int TIFFStartStrip(TIFF* tif, uint32 strip); +static int TIFFStartTile(TIFF* tif, uint32 tile); +static int TIFFCheckRead(TIFF*, int); +static tmsize_t +TIFFReadRawStrip1(TIFF* tif, uint32 strip, void* buf, tmsize_t size,const char* module); -#define NOSTRIP ((tstrip_t) -1) /* undefined state */ -#define NOTILE ((ttile_t) -1) /* undefined state */ +#define NOSTRIP ((uint32)(-1)) /* undefined state */ +#define NOTILE ((uint32)(-1)) /* undefined state */ + +static int +TIFFFillStripPartial( TIFF *tif, int strip, tmsize_t read_ahead, int restart ) +{ + static const char module[] = "TIFFFillStripPartial"; + register TIFFDirectory *td = &tif->tif_dir; + uint64 unused_data; + uint64 read_offset; + tmsize_t cc, to_read; + /* tmsize_t bytecountm; */ + + if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) + return 0; + + /* + * Expand raw data buffer, if needed, to hold data + * strip coming from file (perhaps should set upper + * bound on the size of a buffer we'll use?). + */ + + /* bytecountm=(tmsize_t) td->td_stripbytecount[strip]; */ + if (read_ahead*2 > tif->tif_rawdatasize) { + assert( restart ); + + tif->tif_curstrip = NOSTRIP; + if ((tif->tif_flags & TIFF_MYBUFFER) == 0) { + TIFFErrorExt(tif->tif_clientdata, module, + "Data buffer too small to hold part of strip %lu", + (unsigned long) strip); + return (0); + } + if (!TIFFReadBufferSetup(tif, 0, read_ahead*2)) + return (0); + } + + if( restart ) + { + tif->tif_rawdataloaded = 0; + tif->tif_rawdataoff = 0; + } + + /* + ** If we are reading more data, move any unused data to the + ** start of the buffer. + */ + if( tif->tif_rawdataloaded > 0 ) + unused_data = tif->tif_rawdataloaded - (tif->tif_rawcp - tif->tif_rawdata); + else + unused_data = 0; + + if( unused_data > 0 ) + { + assert((tif->tif_flags&TIFF_BUFFERMMAP)==0); + memmove( tif->tif_rawdata, tif->tif_rawcp, unused_data ); + } + + /* + ** Seek to the point in the file where more data should be read. + */ + read_offset = td->td_stripoffset[strip] + + tif->tif_rawdataoff + tif->tif_rawdataloaded; + + if (!SeekOK(tif, read_offset)) { + TIFFErrorExt(tif->tif_clientdata, module, + "Seek error at scanline %lu, strip %lu", + (unsigned long) tif->tif_row, (unsigned long) strip); + return 0; + } + + /* + ** How much do we want to read? + */ + to_read = tif->tif_rawdatasize - unused_data; + if( (uint64) to_read > td->td_stripbytecount[strip] + - tif->tif_rawdataoff - tif->tif_rawdataloaded ) + { + to_read = td->td_stripbytecount[strip] + - tif->tif_rawdataoff - tif->tif_rawdataloaded; + } + + assert((tif->tif_flags&TIFF_BUFFERMMAP)==0); + cc = TIFFReadFile(tif, tif->tif_rawdata + unused_data, to_read); + + if (cc != to_read) { +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + TIFFErrorExt(tif->tif_clientdata, module, + "Read error at scanline %lu; got %I64u bytes, expected %I64u", + (unsigned long) tif->tif_row, + (unsigned __int64) cc, + (unsigned __int64) to_read); +#else + TIFFErrorExt(tif->tif_clientdata, module, + "Read error at scanline %lu; got %llu bytes, expected %llu", + (unsigned long) tif->tif_row, + (unsigned long long) cc, + (unsigned long long) to_read); +#endif + return 0; + } + + tif->tif_rawdataoff = tif->tif_rawdataoff + tif->tif_rawdataloaded - unused_data ; + tif->tif_rawdataloaded = unused_data + to_read; + + tif->tif_rawcp = tif->tif_rawdata; + + if (!isFillOrder(tif, td->td_fillorder) && + (tif->tif_flags & TIFF_NOBITREV) == 0) { + assert((tif->tif_flags&TIFF_BUFFERMMAP)==0); + TIFFReverseBits(tif->tif_rawdata + unused_data, to_read ); + } + + /* + ** When starting a strip from the beginning we need to + ** restart the decoder. + */ + if( restart ) + return TIFFStartStrip(tif, strip); + else + return 1; +} /* * Seek to a random row+sample in a file. + * + * Only used by TIFFReadScanline, and is only used on + * strip organized files. We do some tricky stuff to try + * and avoid reading the whole compressed raw data for big + * strips. */ static int -TIFFSeek(TIFF* tif, uint32 row, tsample_t sample) +TIFFSeek(TIFF* tif, uint32 row, uint16 sample ) { register TIFFDirectory *td = &tif->tif_dir; - tstrip_t strip; + uint32 strip; + int whole_strip; + tmsize_t read_ahead = 0; + /* + ** Establish what strip we are working from. + */ if (row >= td->td_imagelength) { /* out of range */ TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "%lu: Row out of range, max %lu", - (unsigned long) row, - (unsigned long) td->td_imagelength); + "%lu: Row out of range, max %lu", + (unsigned long) row, + (unsigned long) td->td_imagelength); return (0); } if (td->td_planarconfig == PLANARCONFIG_SEPARATE) { @@ -63,13 +195,60 @@ TIFFSeek(TIFF* tif, uint32 row, tsample_t sample) (unsigned long) sample, (unsigned long) td->td_samplesperpixel); return (0); } - strip = sample*td->td_stripsperimage + row/td->td_rowsperstrip; + strip = (uint32)sample*td->td_stripsperimage + row/td->td_rowsperstrip; } else strip = row / td->td_rowsperstrip; + + /* + * Do we want to treat this strip as one whole chunk or + * read it a few lines at a time? + */ +#if defined(CHUNKY_STRIP_READ_SUPPORT) + if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) + return 0; + whole_strip = tif->tif_dir.td_stripbytecount[strip] < 10 + || isMapped(tif); +#else + whole_strip = 1; +#endif + + if( !whole_strip ) + { + read_ahead = tif->tif_scanlinesize * 16 + 5000; + } + + /* + * If we haven't loaded this strip, do so now, possibly + * only reading the first part. + */ if (strip != tif->tif_curstrip) { /* different strip, refill */ - if (!TIFFFillStrip(tif, strip)) - return (0); - } else if (row < tif->tif_row) { + + if( whole_strip ) + { + if (!TIFFFillStrip(tif, strip)) + return (0); + } + else + { + if( !TIFFFillStripPartial(tif,strip,read_ahead,1) ) + return 0; + } + } + + /* + ** If we already have some data loaded, do we need to read some more? + */ + else if( !whole_strip ) + { + if( ((tif->tif_rawdata + tif->tif_rawdataloaded) - tif->tif_rawcp) < read_ahead + && (uint64) tif->tif_rawdataoff+tif->tif_rawdataloaded < td->td_stripbytecount[strip] ) + { + if( !TIFFFillStripPartial(tif,strip,read_ahead,0) ) + return 0; + } + } + + if (row < tif->tif_row) { /* * Moving backwards within the same strip: backup * to the start and then decode forward (below). @@ -78,22 +257,36 @@ TIFFSeek(TIFF* tif, uint32 row, tsample_t sample) * strip, it's better to just read and decode the entire * strip, and then access the decoded data in a random fashion. */ - if (!TIFFStartStrip(tif, strip)) - return (0); + + if( tif->tif_rawdataoff != 0 ) + { + if( !TIFFFillStripPartial(tif,strip,read_ahead,1) ) + return 0; + } + else + { + if (!TIFFStartStrip(tif, strip)) + return (0); + } } + if (row != tif->tif_row) { /* * Seek forward to the desired row. */ + + /* TODO: Will this really work with partial buffers? */ + if (!(*tif->tif_seek)(tif, row - tif->tif_row)) return (0); tif->tif_row = row; } + return (1); } int -TIFFReadScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample) +TIFFReadScanline(TIFF* tif, void* buf, uint32 row, uint16 sample) { int e; @@ -104,14 +297,14 @@ TIFFReadScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample) * Decompress desired row into user buffer. */ e = (*tif->tif_decoderow) - (tif, (tidata_t) buf, tif->tif_scanlinesize, sample); + (tif, (uint8*) buf, tif->tif_scanlinesize, sample); /* we are now poised at the beginning of the next row */ tif->tif_row = row + 1; if (e) - (*tif->tif_postdecode)(tif, (tidata_t) buf, - tif->tif_scanlinesize); + (*tif->tif_postdecode)(tif, (uint8*) buf, + tif->tif_scanlinesize); } return (e > 0 ? 1 : -1); } @@ -120,93 +313,120 @@ TIFFReadScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample) * Read a strip of data and decompress the specified * amount into the user-supplied buffer. */ -tsize_t -TIFFReadEncodedStrip(TIFF* tif, tstrip_t strip, tdata_t buf, tsize_t size) +tmsize_t +TIFFReadEncodedStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size) { + static const char module[] = "TIFFReadEncodedStrip"; TIFFDirectory *td = &tif->tif_dir; - uint32 nrows; - tsize_t stripsize; - tstrip_t sep_strip, strips_per_sep; - - if (!TIFFCheckRead(tif, 0)) - return (-1); - if (strip >= td->td_nstrips) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "%ld: Strip out of range, max %ld", - (long) strip, (long) td->td_nstrips); - return (-1); + uint32 rowsperstrip; + uint32 stripsperplane; + uint32 stripinplane; + uint16 plane; + uint32 rows; + tmsize_t stripsize; + if (!TIFFCheckRead(tif,0)) + return((tmsize_t)(-1)); + if (strip>=td->td_nstrips) + { + TIFFErrorExt(tif->tif_clientdata,module, + "%lu: Strip out of range, max %lu",(unsigned long)strip, + (unsigned long)td->td_nstrips); + return((tmsize_t)(-1)); } /* * Calculate the strip size according to the number of * rows in the strip (check for truncated last strip on any * of the separations). */ - if( td->td_rowsperstrip >= td->td_imagelength ) - strips_per_sep = 1; - else - strips_per_sep = (td->td_imagelength+td->td_rowsperstrip-1) - / td->td_rowsperstrip; - - sep_strip = strip % strips_per_sep; - - if (sep_strip != strips_per_sep-1 || - (nrows = td->td_imagelength % td->td_rowsperstrip) == 0) - nrows = td->td_rowsperstrip; - - stripsize = TIFFVStripSize(tif, nrows); - if (size == (tsize_t) -1) - size = stripsize; - else if (size > stripsize) - size = stripsize; - if (TIFFFillStrip(tif, strip) - && (*tif->tif_decodestrip)(tif, (tidata_t) buf, size, - (tsample_t)(strip / td->td_stripsperimage)) > 0 ) { - (*tif->tif_postdecode)(tif, (tidata_t) buf, size); - return (size); - } else - return ((tsize_t) -1); + rowsperstrip=td->td_rowsperstrip; + if (rowsperstrip>td->td_imagelength) + rowsperstrip=td->td_imagelength; + stripsperplane=((td->td_imagelength+rowsperstrip-1)/rowsperstrip); + stripinplane=(strip%stripsperplane); + plane=(strip/stripsperplane); + rows=td->td_imagelength-stripinplane*rowsperstrip; + if (rows>rowsperstrip) + rows=rowsperstrip; + stripsize=TIFFVStripSize(tif,rows); + if (stripsize==0) + return((tmsize_t)(-1)); + if ((size!=(tmsize_t)(-1))&&(sizetif_decodestrip)(tif,buf,stripsize,plane)<=0) + return((tmsize_t)(-1)); + (*tif->tif_postdecode)(tif,buf,stripsize); + return(stripsize); } -static tsize_t -TIFFReadRawStrip1(TIFF* tif, - tstrip_t strip, tdata_t buf, tsize_t size, const char* module) +static tmsize_t +TIFFReadRawStrip1(TIFF* tif, uint32 strip, void* buf, tmsize_t size, + const char* module) { TIFFDirectory *td = &tif->tif_dir; + if (!_TIFFFillStriles( tif )) + return ((tmsize_t)(-1)); + assert((tif->tif_flags&TIFF_NOREADRAW)==0); if (!isMapped(tif)) { - tsize_t cc; + tmsize_t cc; if (!SeekOK(tif, td->td_stripoffset[strip])) { TIFFErrorExt(tif->tif_clientdata, module, - "%s: Seek error at scanline %lu, strip %lu", - tif->tif_name, + "Seek error at scanline %lu, strip %lu", (unsigned long) tif->tif_row, (unsigned long) strip); - return (-1); + return ((tmsize_t)(-1)); } cc = TIFFReadFile(tif, buf, size); if (cc != size) { +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) TIFFErrorExt(tif->tif_clientdata, module, - "%s: Read error at scanline %lu; got %lu bytes, expected %lu", - tif->tif_name, - (unsigned long) tif->tif_row, - (unsigned long) cc, - (unsigned long) size); - return (-1); + "Read error at scanline %lu; got %I64u bytes, expected %I64u", + (unsigned long) tif->tif_row, + (unsigned __int64) cc, + (unsigned __int64) size); +#else + TIFFErrorExt(tif->tif_clientdata, module, + "Read error at scanline %lu; got %llu bytes, expected %llu", + (unsigned long) tif->tif_row, + (unsigned long long) cc, + (unsigned long long) size); +#endif + return ((tmsize_t)(-1)); } } else { - if (td->td_stripoffset[strip] + size > tif->tif_size) { + tmsize_t ma,mb; + tmsize_t n; + ma=(tmsize_t)td->td_stripoffset[strip]; + mb=ma+size; + if (((uint64)ma!=td->td_stripoffset[strip])||(ma>tif->tif_size)) + n=0; + else if ((mbtif->tif_size)) + n=tif->tif_size-ma; + else + n=size; + if (n!=size) { +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) TIFFErrorExt(tif->tif_clientdata, module, - "%s: Read error at scanline %lu, strip %lu; got %lu bytes, expected %lu", - tif->tif_name, - (unsigned long) tif->tif_row, - (unsigned long) strip, - (unsigned long) tif->tif_size - td->td_stripoffset[strip], - (unsigned long) size); - return (-1); + "Read error at scanline %lu, strip %lu; got %I64u bytes, expected %I64u", + (unsigned long) tif->tif_row, + (unsigned long) strip, + (unsigned __int64) n, + (unsigned __int64) size); +#else + TIFFErrorExt(tif->tif_clientdata, module, + "Read error at scanline %lu, strip %lu; got %llu bytes, expected %llu", + (unsigned long) tif->tif_row, + (unsigned long) strip, + (unsigned long long) n, + (unsigned long long) size); +#endif + return ((tmsize_t)(-1)); } - _TIFFmemcpy(buf, tif->tif_base + td->td_stripoffset[strip], - size); + _TIFFmemcpy(buf, tif->tif_base + ma, + size); } return (size); } @@ -214,44 +434,52 @@ TIFFReadRawStrip1(TIFF* tif, /* * Read a strip of data from the file. */ -tsize_t -TIFFReadRawStrip(TIFF* tif, tstrip_t strip, tdata_t buf, tsize_t size) +tmsize_t +TIFFReadRawStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size) { static const char module[] = "TIFFReadRawStrip"; TIFFDirectory *td = &tif->tif_dir; - /* - * FIXME: butecount should have tsize_t type, but for now libtiff - * defines tsize_t as a signed 32-bit integer and we are losing - * ability to read arrays larger than 2^31 bytes. So we are using - * uint32 instead of tsize_t here. - */ - uint32 bytecount; + uint64 bytecount; + tmsize_t bytecountm; if (!TIFFCheckRead(tif, 0)) - return ((tsize_t) -1); + return ((tmsize_t)(-1)); if (strip >= td->td_nstrips) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "%lu: Strip out of range, max %lu", - (unsigned long) strip, - (unsigned long) td->td_nstrips); - return ((tsize_t) -1); + TIFFErrorExt(tif->tif_clientdata, module, + "%lu: Strip out of range, max %lu", + (unsigned long) strip, + (unsigned long) td->td_nstrips); + return ((tmsize_t)(-1)); } if (tif->tif_flags&TIFF_NOREADRAW) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Compression scheme does not support access to raw uncompressed data"); - return ((tsize_t) -1); + TIFFErrorExt(tif->tif_clientdata, module, + "Compression scheme does not support access to raw uncompressed data"); + return ((tmsize_t)(-1)); } bytecount = td->td_stripbytecount[strip]; if (bytecount <= 0) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "%lu: Invalid strip byte count, strip %lu", - (unsigned long) bytecount, (unsigned long) strip); - return ((tsize_t) -1); +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + TIFFErrorExt(tif->tif_clientdata, module, + "%I64u: Invalid strip byte count, strip %lu", + (unsigned __int64) bytecount, + (unsigned long) strip); +#else + TIFFErrorExt(tif->tif_clientdata, module, + "%llu: Invalid strip byte count, strip %lu", + (unsigned long long) bytecount, + (unsigned long) strip); +#endif + return ((tmsize_t)(-1)); } - if (size != (tsize_t)-1 && (uint32)size < bytecount) - bytecount = size; - return (TIFFReadRawStrip1(tif, strip, buf, bytecount, module)); + bytecountm = (tmsize_t)bytecount; + if ((uint64)bytecountm!=bytecount) { + TIFFErrorExt(tif->tif_clientdata, module, "Integer overflow"); + return ((tmsize_t)(-1)); + } + if (size != (tmsize_t)(-1) && size < bytecountm) + bytecountm = size; + return (TIFFReadRawStrip1(tif, strip, buf, bytecountm, module)); } /* @@ -259,25 +487,29 @@ TIFFReadRawStrip(TIFF* tif, tstrip_t strip, tdata_t buf, tsize_t size) * expanded, as necessary, to hold the strip's data. */ int -TIFFFillStrip(TIFF* tif, tstrip_t strip) +TIFFFillStrip(TIFF* tif, uint32 strip) { static const char module[] = "TIFFFillStrip"; TIFFDirectory *td = &tif->tif_dir; + if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) + return 0; + if ((tif->tif_flags&TIFF_NOREADRAW)==0) { - /* - * FIXME: butecount should have tsize_t type, but for now - * libtiff defines tsize_t as a signed 32-bit integer and we - * are losing ability to read arrays larger than 2^31 bytes. - * So we are using uint32 instead of tsize_t here. - */ - uint32 bytecount = td->td_stripbytecount[strip]; + uint64 bytecount = td->td_stripbytecount[strip]; if (bytecount <= 0) { +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) TIFFErrorExt(tif->tif_clientdata, module, - "%s: Invalid strip byte count %lu, strip %lu", - tif->tif_name, (unsigned long) bytecount, - (unsigned long) strip); + "Invalid strip byte count %I64u, strip %lu", + (unsigned __int64) bytecount, + (unsigned long) strip); +#else + TIFFErrorExt(tif->tif_clientdata, module, + "Invalid strip byte count %llu, strip %lu", + (unsigned long long) bytecount, + (unsigned long) strip); +#endif return (0); } if (isMapped(tif) && @@ -294,8 +526,11 @@ TIFFFillStrip(TIFF* tif, tstrip_t strip) * buffer (if they try to, the application will get a * fault since the file is mapped read-only). */ - if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata) + if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata) { _TIFFfree(tif->tif_rawdata); + tif->tif_rawdata = NULL; + tif->tif_rawdatasize = 0; + } tif->tif_flags &= ~TIFF_MYBUFFER; /* * We must check for overflow, potentially causing @@ -306,53 +541,85 @@ TIFFFillStrip(TIFF* tif, tstrip_t strip) * comparison (which can overflow) we do the following * two comparisons: */ - if (bytecount > tif->tif_size || - td->td_stripoffset[strip] > tif->tif_size - bytecount) { + if (bytecount > (uint64)tif->tif_size || + td->td_stripoffset[strip] > (uint64)tif->tif_size - bytecount) { /* * This error message might seem strange, but * it's what would happen if a read were done * instead. */ +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) TIFFErrorExt(tif->tif_clientdata, module, - "%s: Read error on strip %lu; " - "got %lu bytes, expected %lu", - tif->tif_name, (unsigned long) strip, - (unsigned long) tif->tif_size - td->td_stripoffset[strip], - (unsigned long) bytecount); + "Read error on strip %lu; " + "got %I64u bytes, expected %I64u", + (unsigned long) strip, + (unsigned __int64) tif->tif_size - td->td_stripoffset[strip], + (unsigned __int64) bytecount); +#else + TIFFErrorExt(tif->tif_clientdata, module, + + "Read error on strip %lu; " + "got %llu bytes, expected %llu", + (unsigned long) strip, + (unsigned long long) tif->tif_size - td->td_stripoffset[strip], + (unsigned long long) bytecount); +#endif tif->tif_curstrip = NOSTRIP; return (0); } - tif->tif_rawdatasize = bytecount; - tif->tif_rawdata = tif->tif_base + td->td_stripoffset[strip]; + tif->tif_rawdatasize = (tmsize_t)bytecount; + tif->tif_rawdata = tif->tif_base + (tmsize_t)td->td_stripoffset[strip]; + tif->tif_rawdataoff = 0; + tif->tif_rawdataloaded = (tmsize_t) bytecount; + + /* + * When we have tif_rawdata reference directly into the memory mapped file + * we need to be pretty careful about how we use the rawdata. It is not + * a general purpose working buffer as it normally otherwise is. So we + * keep track of this fact to avoid using it improperly. + */ + tif->tif_flags |= TIFF_BUFFERMMAP; } else { /* * Expand raw data buffer, if needed, to hold data * strip coming from file (perhaps should set upper * bound on the size of a buffer we'll use?). */ - if (bytecount > (uint32)tif->tif_rawdatasize) { + tmsize_t bytecountm; + bytecountm=(tmsize_t)bytecount; + if ((uint64)bytecountm!=bytecount) + { + TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow"); + return(0); + } + if (bytecountm > tif->tif_rawdatasize) { tif->tif_curstrip = NOSTRIP; if ((tif->tif_flags & TIFF_MYBUFFER) == 0) { - TIFFErrorExt(tif->tif_clientdata, - module, - "%s: Data buffer too small to hold strip %lu", - tif->tif_name, - (unsigned long) strip); + TIFFErrorExt(tif->tif_clientdata, module, + "Data buffer too small to hold strip %lu", + (unsigned long) strip); return (0); } - if (!TIFFReadBufferSetup(tif, 0, - TIFFroundup(bytecount, 1024))) + if (!TIFFReadBufferSetup(tif, 0, bytecountm)) return (0); } - if ((uint32)TIFFReadRawStrip1(tif, strip, - (unsigned char *)tif->tif_rawdata, - bytecount, module) != bytecount) + if (tif->tif_flags&TIFF_BUFFERMMAP) { + tif->tif_curstrip = NOSTRIP; + if (!TIFFReadBufferSetup(tif, 0, bytecountm)) + return (0); + } + if (TIFFReadRawStrip1(tif, strip, tif->tif_rawdata, + bytecountm, module) != bytecountm) return (0); + + tif->tif_rawdataoff = 0; + tif->tif_rawdataloaded = bytecountm; + if (!isFillOrder(tif, td->td_fillorder) && (tif->tif_flags & TIFF_NOBITREV) == 0) - TIFFReverseBits(tif->tif_rawdata, bytecount); - } + TIFFReverseBits(tif->tif_rawdata, bytecountm); + } } return (TIFFStartStrip(tif, strip)); } @@ -366,89 +633,117 @@ TIFFFillStrip(TIFF* tif, tstrip_t strip) * Read and decompress a tile of data. The * tile is selected by the (x,y,z,s) coordinates. */ -tsize_t -TIFFReadTile(TIFF* tif, - tdata_t buf, uint32 x, uint32 y, uint32 z, tsample_t s) +tmsize_t +TIFFReadTile(TIFF* tif, void* buf, uint32 x, uint32 y, uint32 z, uint16 s) { if (!TIFFCheckRead(tif, 1) || !TIFFCheckTile(tif, x, y, z, s)) - return (-1); + return ((tmsize_t)(-1)); return (TIFFReadEncodedTile(tif, - TIFFComputeTile(tif, x, y, z, s), buf, (tsize_t) -1)); + TIFFComputeTile(tif, x, y, z, s), buf, (tmsize_t)(-1))); } /* * Read a tile of data and decompress the specified * amount into the user-supplied buffer. */ -tsize_t -TIFFReadEncodedTile(TIFF* tif, ttile_t tile, tdata_t buf, tsize_t size) +tmsize_t +TIFFReadEncodedTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size) { + static const char module[] = "TIFFReadEncodedTile"; TIFFDirectory *td = &tif->tif_dir; - tsize_t tilesize = tif->tif_tilesize; + tmsize_t tilesize = tif->tif_tilesize; if (!TIFFCheckRead(tif, 1)) - return (-1); + return ((tmsize_t)(-1)); if (tile >= td->td_nstrips) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "%ld: Tile out of range, max %ld", - (long) tile, (unsigned long) td->td_nstrips); - return (-1); + TIFFErrorExt(tif->tif_clientdata, module, + "%lu: Tile out of range, max %lu", + (unsigned long) tile, (unsigned long) td->td_nstrips); + return ((tmsize_t)(-1)); } - if (size == (tsize_t) -1) + if (size == (tmsize_t)(-1)) size = tilesize; else if (size > tilesize) size = tilesize; if (TIFFFillTile(tif, tile) && (*tif->tif_decodetile)(tif, - (tidata_t) buf, size, (tsample_t)(tile/td->td_stripsperimage))) { - (*tif->tif_postdecode)(tif, (tidata_t) buf, size); + (uint8*) buf, size, (uint16)(tile/td->td_stripsperimage))) { + (*tif->tif_postdecode)(tif, (uint8*) buf, size); return (size); } else - return (-1); + return ((tmsize_t)(-1)); } -static tsize_t -TIFFReadRawTile1(TIFF* tif, - ttile_t tile, tdata_t buf, tsize_t size, const char* module) +static tmsize_t +TIFFReadRawTile1(TIFF* tif, uint32 tile, void* buf, tmsize_t size, const char* module) { TIFFDirectory *td = &tif->tif_dir; + if (!_TIFFFillStriles( tif )) + return ((tmsize_t)(-1)); + assert((tif->tif_flags&TIFF_NOREADRAW)==0); if (!isMapped(tif)) { - tsize_t cc; + tmsize_t cc; if (!SeekOK(tif, td->td_stripoffset[tile])) { TIFFErrorExt(tif->tif_clientdata, module, - "%s: Seek error at row %ld, col %ld, tile %ld", - tif->tif_name, - (long) tif->tif_row, - (long) tif->tif_col, - (long) tile); - return ((tsize_t) -1); + "Seek error at row %lu, col %lu, tile %lu", + (unsigned long) tif->tif_row, + (unsigned long) tif->tif_col, + (unsigned long) tile); + return ((tmsize_t)(-1)); } cc = TIFFReadFile(tif, buf, size); if (cc != size) { +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) TIFFErrorExt(tif->tif_clientdata, module, - "%s: Read error at row %ld, col %ld; got %lu bytes, expected %lu", - tif->tif_name, - (long) tif->tif_row, - (long) tif->tif_col, - (unsigned long) cc, - (unsigned long) size); - return ((tsize_t) -1); + "Read error at row %lu, col %lu; got %I64u bytes, expected %I64u", + (unsigned long) tif->tif_row, + (unsigned long) tif->tif_col, + (unsigned __int64) cc, + (unsigned __int64) size); +#else + TIFFErrorExt(tif->tif_clientdata, module, + "Read error at row %lu, col %lu; got %llu bytes, expected %llu", + (unsigned long) tif->tif_row, + (unsigned long) tif->tif_col, + (unsigned long long) cc, + (unsigned long long) size); +#endif + return ((tmsize_t)(-1)); } } else { - if (td->td_stripoffset[tile] + size > tif->tif_size) { + tmsize_t ma,mb; + tmsize_t n; + ma=(tmsize_t)td->td_stripoffset[tile]; + mb=ma+size; + if (((uint64)ma!=td->td_stripoffset[tile])||(ma>tif->tif_size)) + n=0; + else if ((mbtif->tif_size)) + n=tif->tif_size-ma; + else + n=size; + if (n!=size) { +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) TIFFErrorExt(tif->tif_clientdata, module, - "%s: Read error at row %ld, col %ld, tile %ld; got %lu bytes, expected %lu", - tif->tif_name, - (long) tif->tif_row, - (long) tif->tif_col, - (long) tile, - (unsigned long) tif->tif_size - td->td_stripoffset[tile], - (unsigned long) size); - return ((tsize_t) -1); +"Read error at row %lu, col %lu, tile %lu; got %I64u bytes, expected %I64u", + (unsigned long) tif->tif_row, + (unsigned long) tif->tif_col, + (unsigned long) tile, + (unsigned __int64) n, + (unsigned __int64) size); +#else + TIFFErrorExt(tif->tif_clientdata, module, +"Read error at row %lu, col %lu, tile %lu; got %llu bytes, expected %llu", + (unsigned long) tif->tif_row, + (unsigned long) tif->tif_col, + (unsigned long) tile, + (unsigned long long) n, + (unsigned long long) size); +#endif + return ((tmsize_t)(-1)); } - _TIFFmemcpy(buf, tif->tif_base + td->td_stripoffset[tile], size); + _TIFFmemcpy(buf, tif->tif_base + ma, size); } return (size); } @@ -456,37 +751,38 @@ TIFFReadRawTile1(TIFF* tif, /* * Read a tile of data from the file. */ -tsize_t -TIFFReadRawTile(TIFF* tif, ttile_t tile, tdata_t buf, tsize_t size) +tmsize_t +TIFFReadRawTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size) { static const char module[] = "TIFFReadRawTile"; TIFFDirectory *td = &tif->tif_dir; - /* - * FIXME: butecount should have tsize_t type, but for now libtiff - * defines tsize_t as a signed 32-bit integer and we are losing - * ability to read arrays larger than 2^31 bytes. So we are using - * uint32 instead of tsize_t here. - */ - uint32 bytecount; + uint64 bytecount64; + tmsize_t bytecountm; if (!TIFFCheckRead(tif, 1)) - return ((tsize_t) -1); + return ((tmsize_t)(-1)); if (tile >= td->td_nstrips) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "%lu: Tile out of range, max %lu", + TIFFErrorExt(tif->tif_clientdata, module, + "%lu: Tile out of range, max %lu", (unsigned long) tile, (unsigned long) td->td_nstrips); - return ((tsize_t) -1); + return ((tmsize_t)(-1)); } if (tif->tif_flags&TIFF_NOREADRAW) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Compression scheme does not support access to raw uncompressed data"); - return ((tsize_t) -1); + TIFFErrorExt(tif->tif_clientdata, module, + "Compression scheme does not support access to raw uncompressed data"); + return ((tmsize_t)(-1)); } - bytecount = td->td_stripbytecount[tile]; - if (size != (tsize_t) -1 && (uint32)size < bytecount) - bytecount = size; - return (TIFFReadRawTile1(tif, tile, buf, bytecount, module)); + bytecount64 = td->td_stripbytecount[tile]; + if (size != (tmsize_t)(-1) && (uint64)size < bytecount64) + bytecount64 = (uint64)size; + bytecountm = (tmsize_t)bytecount64; + if ((uint64)bytecountm!=bytecount64) + { + TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow"); + return ((tmsize_t)(-1)); + } + return (TIFFReadRawTile1(tif, tile, buf, bytecountm, module)); } /* @@ -494,24 +790,29 @@ TIFFReadRawTile(TIFF* tif, ttile_t tile, tdata_t buf, tsize_t size) * expanded, as necessary, to hold the tile's data. */ int -TIFFFillTile(TIFF* tif, ttile_t tile) +TIFFFillTile(TIFF* tif, uint32 tile) { static const char module[] = "TIFFFillTile"; TIFFDirectory *td = &tif->tif_dir; + if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) + return 0; + if ((tif->tif_flags&TIFF_NOREADRAW)==0) { - /* - * FIXME: butecount should have tsize_t type, but for now - * libtiff defines tsize_t as a signed 32-bit integer and we - * are losing ability to read arrays larger than 2^31 bytes. - * So we are using uint32 instead of tsize_t here. - */ - uint32 bytecount = td->td_stripbytecount[tile]; + uint64 bytecount = td->td_stripbytecount[tile]; if (bytecount <= 0) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "%lu: Invalid tile byte count, tile %lu", - (unsigned long) bytecount, (unsigned long) tile); +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + TIFFErrorExt(tif->tif_clientdata, module, + "%I64u: Invalid tile byte count, tile %lu", + (unsigned __int64) bytecount, + (unsigned long) tile); +#else + TIFFErrorExt(tif->tif_clientdata, module, + "%llu: Invalid tile byte count, tile %lu", + (unsigned long long) bytecount, + (unsigned long) tile); +#endif return (0); } if (isMapped(tif) && @@ -528,8 +829,11 @@ TIFFFillTile(TIFF* tif, ttile_t tile) * buffer (if they try to, the application will get a * fault since the file is mapped read-only). */ - if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata) + if ((tif->tif_flags & TIFF_MYBUFFER) && tif->tif_rawdata) { _TIFFfree(tif->tif_rawdata); + tif->tif_rawdata = NULL; + tif->tif_rawdatasize = 0; + } tif->tif_flags &= ~TIFF_MYBUFFER; /* * We must check for overflow, potentially causing @@ -540,41 +844,58 @@ TIFFFillTile(TIFF* tif, ttile_t tile) * comparison (which can overflow) we do the following * two comparisons: */ - if (bytecount > tif->tif_size || - td->td_stripoffset[tile] > tif->tif_size - bytecount) { + if (bytecount > (uint64)tif->tif_size || + td->td_stripoffset[tile] > (uint64)tif->tif_size - bytecount) { tif->tif_curtile = NOTILE; return (0); } - tif->tif_rawdatasize = bytecount; + tif->tif_rawdatasize = (tmsize_t)bytecount; tif->tif_rawdata = - tif->tif_base + td->td_stripoffset[tile]; + tif->tif_base + (tmsize_t)td->td_stripoffset[tile]; + tif->tif_rawdataoff = 0; + tif->tif_rawdataloaded = (tmsize_t) bytecount; + tif->tif_flags |= TIFF_BUFFERMMAP; } else { /* * Expand raw data buffer, if needed, to hold data * tile coming from file (perhaps should set upper * bound on the size of a buffer we'll use?). */ - if (bytecount > (uint32)tif->tif_rawdatasize) { + tmsize_t bytecountm; + bytecountm=(tmsize_t)bytecount; + if ((uint64)bytecountm!=bytecount) + { + TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow"); + return(0); + } + if (bytecountm > tif->tif_rawdatasize) { tif->tif_curtile = NOTILE; if ((tif->tif_flags & TIFF_MYBUFFER) == 0) { - TIFFErrorExt(tif->tif_clientdata, - module, - "%s: Data buffer too small to hold tile %ld", - tif->tif_name, - (long) tile); + TIFFErrorExt(tif->tif_clientdata, module, + "Data buffer too small to hold tile %lu", + (unsigned long) tile); return (0); } - if (!TIFFReadBufferSetup(tif, 0, - TIFFroundup(bytecount, 1024))) + if (!TIFFReadBufferSetup(tif, 0, bytecountm)) return (0); } - if ((uint32)TIFFReadRawTile1(tif, tile, - (unsigned char *)tif->tif_rawdata, - bytecount, module) != bytecount) + if (tif->tif_flags&TIFF_BUFFERMMAP) { + tif->tif_curtile = NOTILE; + if (!TIFFReadBufferSetup(tif, 0, bytecountm)) + return (0); + } + + if (TIFFReadRawTile1(tif, tile, tif->tif_rawdata, + bytecountm, module) != bytecountm) return (0); + + tif->tif_rawdataoff = 0; + tif->tif_rawdataloaded = bytecountm; + if (!isFillOrder(tif, td->td_fillorder) && (tif->tif_flags & TIFF_NOBITREV) == 0) - TIFFReverseBits(tif->tif_rawdata, bytecount); + TIFFReverseBits(tif->tif_rawdata, + tif->tif_rawdataloaded); } } return (TIFFStartTile(tif, tile)); @@ -590,31 +911,34 @@ TIFFFillTile(TIFF* tif, ttile_t tile) * raw data. */ int -TIFFReadBufferSetup(TIFF* tif, tdata_t bp, tsize_t size) +TIFFReadBufferSetup(TIFF* tif, void* bp, tmsize_t size) { static const char module[] = "TIFFReadBufferSetup"; assert((tif->tif_flags&TIFF_NOREADRAW)==0); + tif->tif_flags &= ~TIFF_BUFFERMMAP; + if (tif->tif_rawdata) { if (tif->tif_flags & TIFF_MYBUFFER) _TIFFfree(tif->tif_rawdata); tif->tif_rawdata = NULL; + tif->tif_rawdatasize = 0; } - if (bp) { tif->tif_rawdatasize = size; - tif->tif_rawdata = (tidata_t) bp; + tif->tif_rawdata = (uint8*) bp; tif->tif_flags &= ~TIFF_MYBUFFER; } else { - tif->tif_rawdatasize = TIFFroundup(size, 1024); - if (tif->tif_rawdatasize > 0) - tif->tif_rawdata = (tidata_t) _TIFFmalloc(tif->tif_rawdatasize); + tif->tif_rawdatasize = (tmsize_t)TIFFroundup_64((uint64)size, 1024); + if (tif->tif_rawdatasize==0) + tif->tif_rawdatasize=(tmsize_t)(-1); + tif->tif_rawdata = (uint8*) _TIFFmalloc(tif->tif_rawdatasize); tif->tif_flags |= TIFF_MYBUFFER; } - if ((tif->tif_rawdata == NULL) || (tif->tif_rawdatasize == 0)) { + if (tif->tif_rawdata == NULL) { TIFFErrorExt(tif->tif_clientdata, module, - "%s: No space for data buffer at scanline %ld", - tif->tif_name, (long) tif->tif_row); + "No space for data buffer at scanline %lu", + (unsigned long) tif->tif_row); tif->tif_rawdatasize = 0; return (0); } @@ -626,10 +950,13 @@ TIFFReadBufferSetup(TIFF* tif, tdata_t bp, tsize_t size) * strip has just been read in. */ static int -TIFFStartStrip(TIFF* tif, tstrip_t strip) +TIFFStartStrip(TIFF* tif, uint32 strip) { TIFFDirectory *td = &tif->tif_dir; + if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) + return 0; + if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { if (!(*tif->tif_setupdecode)(tif)) return (0); @@ -637,18 +964,20 @@ TIFFStartStrip(TIFF* tif, tstrip_t strip) } tif->tif_curstrip = strip; tif->tif_row = (strip % td->td_stripsperimage) * td->td_rowsperstrip; + tif->tif_flags &= ~TIFF_BUF4WRITE; + if (tif->tif_flags&TIFF_NOREADRAW) { tif->tif_rawcp = NULL; - tif->tif_rawcc = 0; + tif->tif_rawcc = 0; } else { tif->tif_rawcp = tif->tif_rawdata; - tif->tif_rawcc = td->td_stripbytecount[strip]; + tif->tif_rawcc = (tmsize_t)td->td_stripbytecount[strip]; } return ((*tif->tif_predecode)(tif, - (tsample_t)(strip / td->td_stripsperimage))); + (uint16)(strip / td->td_stripsperimage))); } /* @@ -656,10 +985,13 @@ TIFFStartStrip(TIFF* tif, tstrip_t strip) * tile has just been read in. */ static int -TIFFStartTile(TIFF* tif, ttile_t tile) +TIFFStartTile(TIFF* tif, uint32 tile) { TIFFDirectory *td = &tif->tif_dir; + if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) + return 0; + if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { if (!(*tif->tif_setupdecode)(tif)) return (0); @@ -667,11 +999,12 @@ TIFFStartTile(TIFF* tif, ttile_t tile) } tif->tif_curtile = tile; tif->tif_row = - (tile % TIFFhowmany(td->td_imagewidth, td->td_tilewidth)) * + (tile % TIFFhowmany_32(td->td_imagewidth, td->td_tilewidth)) * td->td_tilelength; tif->tif_col = - (tile % TIFFhowmany(td->td_imagelength, td->td_tilelength)) * + (tile % TIFFhowmany_32(td->td_imagelength, td->td_tilelength)) * td->td_tilewidth; + tif->tif_flags &= ~TIFF_BUF4WRITE; if (tif->tif_flags&TIFF_NOREADRAW) { tif->tif_rawcp = NULL; @@ -680,10 +1013,10 @@ TIFFStartTile(TIFF* tif, ttile_t tile) else { tif->tif_rawcp = tif->tif_rawdata; - tif->tif_rawcc = td->td_stripbytecount[tile]; + tif->tif_rawcc = (tmsize_t)td->td_stripbytecount[tile]; } return ((*tif->tif_predecode)(tif, - (tsample_t)(tile/td->td_stripsperimage))); + (uint16)(tile/td->td_stripsperimage))); } static int @@ -703,13 +1036,13 @@ TIFFCheckRead(TIFF* tif, int tiles) } void -_TIFFNoPostDecode(TIFF* tif, tidata_t buf, tsize_t cc) +_TIFFNoPostDecode(TIFF* tif, uint8* buf, tmsize_t cc) { (void) tif; (void) buf; (void) cc; } void -_TIFFSwab16BitData(TIFF* tif, tidata_t buf, tsize_t cc) +_TIFFSwab16BitData(TIFF* tif, uint8* buf, tmsize_t cc) { (void) tif; assert((cc & 1) == 0); @@ -717,7 +1050,7 @@ _TIFFSwab16BitData(TIFF* tif, tidata_t buf, tsize_t cc) } void -_TIFFSwab24BitData(TIFF* tif, tidata_t buf, tsize_t cc) +_TIFFSwab24BitData(TIFF* tif, uint8* buf, tmsize_t cc) { (void) tif; assert((cc % 3) == 0); @@ -725,7 +1058,7 @@ _TIFFSwab24BitData(TIFF* tif, tidata_t buf, tsize_t cc) } void -_TIFFSwab32BitData(TIFF* tif, tidata_t buf, tsize_t cc) +_TIFFSwab32BitData(TIFF* tif, uint8* buf, tmsize_t cc) { (void) tif; assert((cc & 3) == 0); @@ -733,7 +1066,7 @@ _TIFFSwab32BitData(TIFF* tif, tidata_t buf, tsize_t cc) } void -_TIFFSwab64BitData(TIFF* tif, tidata_t buf, tsize_t cc) +_TIFFSwab64BitData(TIFF* tif, uint8* buf, tmsize_t cc) { (void) tif; assert((cc & 7) == 0); diff --git a/dll/3rdparty/libtiff/tif_strip.c b/dll/3rdparty/libtiff/tif_strip.c index 63dec6bdace..568e4898d33 100644 --- a/dll/3rdparty/libtiff/tif_strip.c +++ b/dll/3rdparty/libtiff/tif_strip.c @@ -1,4 +1,4 @@ -/* $Id: tif_strip.c,v 1.19.2.1 2010-06-08 18:50:43 bfriesen Exp $ */ +/* $Id: tif_strip.c,v 1.35 2012-06-06 05:33:55 fwarmerdam Exp $ */ /* * Copyright (c) 1991-1997 Sam Leffler @@ -31,54 +31,25 @@ */ #include "tiffiop.h" -static uint32 -summarize(TIFF* tif, size_t summand1, size_t summand2, const char* where) -{ - /* - * XXX: We are using casting to uint32 here, bacause sizeof(size_t) - * may be larger than sizeof(uint32) on 64-bit architectures. - */ - uint32 bytes = summand1 + summand2; - - if (bytes - summand1 != summand2) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "Integer overflow in %s", where); - bytes = 0; - } - - return (bytes); -} - -static uint32 -multiply(TIFF* tif, size_t nmemb, size_t elem_size, const char* where) -{ - uint32 bytes = nmemb * elem_size; - - if (elem_size && bytes / elem_size != nmemb) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "Integer overflow in %s", where); - bytes = 0; - } - - return (bytes); -} - /* * Compute which strip a (row,sample) value is in. */ -tstrip_t -TIFFComputeStrip(TIFF* tif, uint32 row, tsample_t sample) +uint32 +TIFFComputeStrip(TIFF* tif, uint32 row, uint16 sample) { + static const char module[] = "TIFFComputeStrip"; TIFFDirectory *td = &tif->tif_dir; - tstrip_t strip; + uint32 strip; strip = row / td->td_rowsperstrip; if (td->td_planarconfig == PLANARCONFIG_SEPARATE) { if (sample >= td->td_samplesperpixel) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, + TIFFErrorExt(tif->tif_clientdata, module, "%lu: Sample out of range, max %lu", (unsigned long) sample, (unsigned long) td->td_samplesperpixel); - return ((tstrip_t) 0); + return (0); } - strip += sample*td->td_stripsperimage; + strip += (uint32)sample*td->td_stripsperimage; } return (strip); } @@ -86,33 +57,34 @@ TIFFComputeStrip(TIFF* tif, uint32 row, tsample_t sample) /* * Compute how many strips are in an image. */ -tstrip_t +uint32 TIFFNumberOfStrips(TIFF* tif) { TIFFDirectory *td = &tif->tif_dir; - tstrip_t nstrips; + uint32 nstrips; nstrips = (td->td_rowsperstrip == (uint32) -1 ? 1 : - TIFFhowmany(td->td_imagelength, td->td_rowsperstrip)); + TIFFhowmany_32(td->td_imagelength, td->td_rowsperstrip)); if (td->td_planarconfig == PLANARCONFIG_SEPARATE) - nstrips = multiply(tif, nstrips, td->td_samplesperpixel, - "TIFFNumberOfStrips"); + nstrips = _TIFFMultiply32(tif, nstrips, (uint32)td->td_samplesperpixel, + "TIFFNumberOfStrips"); return (nstrips); } /* * Compute the # bytes in a variable height, row-aligned strip. */ -tsize_t -TIFFVStripSize(TIFF* tif, uint32 nrows) +uint64 +TIFFVStripSize64(TIFF* tif, uint32 nrows) { + static const char module[] = "TIFFVStripSize64"; TIFFDirectory *td = &tif->tif_dir; - - if (nrows == (uint32) -1) - nrows = td->td_imagelength; - if (td->td_planarconfig == PLANARCONFIG_CONTIG && - td->td_photometric == PHOTOMETRIC_YCBCR && - !isUpSampled(tif)) { + if (nrows==(uint32)(-1)) + nrows=td->td_imagelength; + if ((td->td_planarconfig==PLANARCONFIG_CONTIG)&& + (td->td_photometric == PHOTOMETRIC_YCBCR)&& + (!isUpSampled(tif))) + { /* * Packed YCbCr data contain one Cb+Cr for every * HorizontalSampling*VerticalSampling Y values. @@ -122,53 +94,102 @@ TIFFVStripSize(TIFF* tif, uint32 nrows) * YCbCr data for the extended image. */ uint16 ycbcrsubsampling[2]; - tsize_t w, scanline, samplingarea; - - TIFFGetField( tif, TIFFTAG_YCBCRSUBSAMPLING, - ycbcrsubsampling + 0, - ycbcrsubsampling + 1 ); - - samplingarea = ycbcrsubsampling[0]*ycbcrsubsampling[1]; - if (samplingarea == 0) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Invalid YCbCr subsampling"); + uint16 samplingblock_samples; + uint32 samplingblocks_hor; + uint32 samplingblocks_ver; + uint64 samplingrow_samples; + uint64 samplingrow_size; + if(td->td_samplesperpixel!=3) + { + TIFFErrorExt(tif->tif_clientdata,module, + "Invalid td_samplesperpixel value"); return 0; } - - w = TIFFroundup(td->td_imagewidth, ycbcrsubsampling[0]); - scanline = TIFFhowmany8(multiply(tif, w, td->td_bitspersample, - "TIFFVStripSize")); - nrows = TIFFroundup(nrows, ycbcrsubsampling[1]); - /* NB: don't need TIFFhowmany here 'cuz everything is rounded */ - scanline = multiply(tif, nrows, scanline, "TIFFVStripSize"); - return ((tsize_t) - summarize(tif, scanline, - multiply(tif, 2, scanline / samplingarea, - "TIFFVStripSize"), "TIFFVStripSize")); - } else - return ((tsize_t) multiply(tif, nrows, TIFFScanlineSize(tif), - "TIFFVStripSize")); + TIFFGetFieldDefaulted(tif,TIFFTAG_YCBCRSUBSAMPLING,ycbcrsubsampling+0, + ycbcrsubsampling+1); + if ((ycbcrsubsampling[0] != 1 && ycbcrsubsampling[0] != 2 && ycbcrsubsampling[0] != 4) + ||(ycbcrsubsampling[1] != 1 && ycbcrsubsampling[1] != 2 && ycbcrsubsampling[1] != 4)) + { + TIFFErrorExt(tif->tif_clientdata,module, + "Invalid YCbCr subsampling (%dx%d)", + ycbcrsubsampling[0], + ycbcrsubsampling[1] ); + return 0; + } + samplingblock_samples=ycbcrsubsampling[0]*ycbcrsubsampling[1]+2; + samplingblocks_hor=TIFFhowmany_32(td->td_imagewidth,ycbcrsubsampling[0]); + samplingblocks_ver=TIFFhowmany_32(nrows,ycbcrsubsampling[1]); + samplingrow_samples=_TIFFMultiply64(tif,samplingblocks_hor,samplingblock_samples,module); + samplingrow_size=TIFFhowmany8_64(_TIFFMultiply64(tif,samplingrow_samples,td->td_bitspersample,module)); + return(_TIFFMultiply64(tif,samplingrow_size,samplingblocks_ver,module)); + } + else + return(_TIFFMultiply64(tif,nrows,TIFFScanlineSize64(tif),module)); +} +tmsize_t +TIFFVStripSize(TIFF* tif, uint32 nrows) +{ + static const char module[] = "TIFFVStripSize"; + uint64 m; + tmsize_t n; + m=TIFFVStripSize64(tif,nrows); + n=(tmsize_t)m; + if ((uint64)n!=m) + { + TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow"); + n=0; + } + return(n); } - /* * Compute the # bytes in a raw strip. */ -tsize_t -TIFFRawStripSize(TIFF* tif, tstrip_t strip) +uint64 +TIFFRawStripSize64(TIFF* tif, uint32 strip) { + static const char module[] = "TIFFRawStripSize64"; TIFFDirectory* td = &tif->tif_dir; - tsize_t bytecount = td->td_stripbytecount[strip]; + uint64 bytecount = td->td_stripbytecount[strip]; - if (bytecount <= 0) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "%lu: Invalid strip byte count, strip %lu", - (unsigned long) bytecount, (unsigned long) strip); - bytecount = (tsize_t) -1; + if (bytecount == 0) + { +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + TIFFErrorExt(tif->tif_clientdata, module, + "%I64u: Invalid strip byte count, strip %lu", + (unsigned __int64) bytecount, + (unsigned long) strip); +#else + TIFFErrorExt(tif->tif_clientdata, module, + "%llu: Invalid strip byte count, strip %lu", + (unsigned long long) bytecount, + (unsigned long) strip); +#endif + bytecount = (uint64) -1; } return bytecount; } +tmsize_t +TIFFRawStripSize(TIFF* tif, uint32 strip) +{ + static const char module[] = "TIFFRawStripSize"; + uint64 m; + tmsize_t n; + m=TIFFRawStripSize64(tif,strip); + if (m==(uint64)(-1)) + n=(tmsize_t)(-1); + else + { + n=(tmsize_t)m; + if ((uint64)n!=m) + { + TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow"); + n=0; + } + } + return(n); +} /* * Compute the # bytes in a (row-aligned) strip. @@ -178,14 +199,29 @@ TIFFRawStripSize(TIFF* tif, tstrip_t strip) * truncated to reflect the actual space required * to hold the strip. */ -tsize_t -TIFFStripSize(TIFF* tif) +uint64 +TIFFStripSize64(TIFF* tif) { TIFFDirectory* td = &tif->tif_dir; uint32 rps = td->td_rowsperstrip; if (rps > td->td_imagelength) rps = td->td_imagelength; - return (TIFFVStripSize(tif, rps)); + return (TIFFVStripSize64(tif, rps)); +} +tmsize_t +TIFFStripSize(TIFF* tif) +{ + static const char module[] = "TIFFStripSize"; + uint64 m; + tmsize_t n; + m=TIFFStripSize64(tif); + n=(tmsize_t)m; + if ((uint64)n!=m) + { + TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow"); + n=0; + } + return(n); } /* @@ -209,82 +245,21 @@ _TIFFDefaultStripSize(TIFF* tif, uint32 s) * image up into strips that are approximately * STRIP_SIZE_DEFAULT bytes long. */ - tsize_t scanline = TIFFScanlineSize(tif); - s = (uint32)STRIP_SIZE_DEFAULT / (scanline == 0 ? 1 : scanline); - if (s == 0) /* very wide images */ - s = 1; + uint64 scanlinesize; + uint64 rows; + scanlinesize=TIFFScanlineSize64(tif); + if (scanlinesize==0) + scanlinesize=1; + rows=(uint64)STRIP_SIZE_DEFAULT/scanlinesize; + if (rows==0) + rows=1; + else if (rows>0xFFFFFFFF) + rows=0xFFFFFFFF; + s=(uint32)rows; } return (s); } -/* - * Return the number of bytes to read/write in a call to - * one of the scanline-oriented i/o routines. Note that - * this number may be 1/samples-per-pixel if data is - * stored as separate planes. - */ -tsize_t -TIFFScanlineSize(TIFF* tif) -{ - TIFFDirectory *td = &tif->tif_dir; - tsize_t scanline; - - if (td->td_planarconfig == PLANARCONFIG_CONTIG) { - if (td->td_photometric == PHOTOMETRIC_YCBCR - && !isUpSampled(tif)) { - uint16 ycbcrsubsampling[2]; - - TIFFGetField(tif, TIFFTAG_YCBCRSUBSAMPLING, - ycbcrsubsampling + 0, - ycbcrsubsampling + 1); - - if (ycbcrsubsampling[0] == 0) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Invalid YCbCr subsampling"); - return 0; - } - - scanline = TIFFroundup(td->td_imagewidth, - ycbcrsubsampling[0]); - scanline = TIFFhowmany8(multiply(tif, scanline, - td->td_bitspersample, - "TIFFScanlineSize")); - return ((tsize_t) - summarize(tif, scanline, - multiply(tif, 2, - scanline / ycbcrsubsampling[0], - "TIFFVStripSize"), - "TIFFVStripSize")); - } else { - scanline = multiply(tif, td->td_imagewidth, - td->td_samplesperpixel, - "TIFFScanlineSize"); - } - } else - scanline = td->td_imagewidth; - return ((tsize_t) TIFFhowmany8(multiply(tif, scanline, - td->td_bitspersample, - "TIFFScanlineSize"))); -} - -/* - * Some stuff depends on this older version of TIFFScanlineSize - * TODO: resolve this - */ -tsize_t -TIFFOldScanlineSize(TIFF* tif) -{ - TIFFDirectory *td = &tif->tif_dir; - tsize_t scanline; - - scanline = multiply (tif, td->td_bitspersample, td->td_imagewidth, - "TIFFScanlineSize"); - if (td->td_planarconfig == PLANARCONFIG_CONTIG) - scanline = multiply (tif, scanline, td->td_samplesperpixel, - "TIFFScanlineSize"); - return ((tsize_t) TIFFhowmany8(scanline)); -} - /* * Return the number of bytes to read/write in a call to * one of the scanline-oriented i/o routines. Note that @@ -294,46 +269,71 @@ TIFFOldScanlineSize(TIFF* tif) * strip size divided by the strip height, i.e. the size of a pack of vertical * subsampling lines divided by vertical subsampling. It should thus make * sense when multiplied by a multiple of vertical subsampling. - * Some stuff depends on this newer version of TIFFScanlineSize - * TODO: resolve this */ -tsize_t -TIFFNewScanlineSize(TIFF* tif) +uint64 +TIFFScanlineSize64(TIFF* tif) { + static const char module[] = "TIFFScanlineSize64"; TIFFDirectory *td = &tif->tif_dir; - tsize_t scanline; - - if (td->td_planarconfig == PLANARCONFIG_CONTIG) { - if (td->td_photometric == PHOTOMETRIC_YCBCR - && !isUpSampled(tif)) { + uint64 scanline_size; + if (td->td_planarconfig==PLANARCONFIG_CONTIG) + { + if ((td->td_photometric==PHOTOMETRIC_YCBCR)&& + (td->td_samplesperpixel==3)&& + (!isUpSampled(tif))) + { uint16 ycbcrsubsampling[2]; - - TIFFGetField(tif, TIFFTAG_YCBCRSUBSAMPLING, - ycbcrsubsampling + 0, - ycbcrsubsampling + 1); - - if (ycbcrsubsampling[0]*ycbcrsubsampling[1] == 0) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Invalid YCbCr subsampling"); - return 0; + uint16 samplingblock_samples; + uint32 samplingblocks_hor; + uint64 samplingrow_samples; + uint64 samplingrow_size; + if(td->td_samplesperpixel!=3) + { + TIFFErrorExt(tif->tif_clientdata,module, + "Invalid td_samplesperpixel value"); + return 0; } - - return((tsize_t) ((((td->td_imagewidth+ycbcrsubsampling[0]-1) - /ycbcrsubsampling[0]) - *(ycbcrsubsampling[0]*ycbcrsubsampling[1]+2) - *td->td_bitspersample+7) - /8)/ycbcrsubsampling[1]); - - } else { - scanline = multiply(tif, td->td_imagewidth, - td->td_samplesperpixel, - "TIFFScanlineSize"); + TIFFGetFieldDefaulted(tif,TIFFTAG_YCBCRSUBSAMPLING, + ycbcrsubsampling+0, + ycbcrsubsampling+1); + if (((ycbcrsubsampling[0]!=1)&&(ycbcrsubsampling[0]!=2)&&(ycbcrsubsampling[0]!=4)) || + ((ycbcrsubsampling[1]!=1)&&(ycbcrsubsampling[1]!=2)&&(ycbcrsubsampling[1]!=4))) + { + TIFFErrorExt(tif->tif_clientdata,module, + "Invalid YCbCr subsampling"); + return 0; + } + samplingblock_samples = ycbcrsubsampling[0]*ycbcrsubsampling[1]+2; + samplingblocks_hor = TIFFhowmany_32(td->td_imagewidth,ycbcrsubsampling[0]); + samplingrow_samples = _TIFFMultiply64(tif,samplingblocks_hor,samplingblock_samples,module); + samplingrow_size = TIFFhowmany_64(_TIFFMultiply64(tif,samplingrow_samples,td->td_bitspersample,module),8); + scanline_size = (samplingrow_size/ycbcrsubsampling[1]); } - } else - scanline = td->td_imagewidth; - return ((tsize_t) TIFFhowmany8(multiply(tif, scanline, - td->td_bitspersample, - "TIFFScanlineSize"))); + else + { + uint64 scanline_samples; + scanline_samples=_TIFFMultiply64(tif,td->td_imagewidth,td->td_samplesperpixel,module); + scanline_size=TIFFhowmany_64(_TIFFMultiply64(tif,scanline_samples,td->td_bitspersample,module),8); + } + } + else + scanline_size=TIFFhowmany_64(_TIFFMultiply64(tif,td->td_imagewidth,td->td_bitspersample,module),8); + return(scanline_size); +} +tmsize_t +TIFFScanlineSize(TIFF* tif) +{ + static const char module[] = "TIFFScanlineSize"; + uint64 m; + tmsize_t n; + m=TIFFScanlineSize64(tif); + n=(tmsize_t)m; + if ((uint64)n!=m) + { + TIFFErrorExt(tif->tif_clientdata,module,"Integer arithmetic overflow"); + n=0; + } + return(n); } /* @@ -342,22 +342,35 @@ TIFFNewScanlineSize(TIFF* tif) * I/O size returned by TIFFScanlineSize which may be less * if data is store as separate planes). */ -tsize_t +uint64 +TIFFRasterScanlineSize64(TIFF* tif) +{ + static const char module[] = "TIFFRasterScanlineSize64"; + TIFFDirectory *td = &tif->tif_dir; + uint64 scanline; + + scanline = _TIFFMultiply64(tif, td->td_bitspersample, td->td_imagewidth, module); + if (td->td_planarconfig == PLANARCONFIG_CONTIG) { + scanline = _TIFFMultiply64(tif, scanline, td->td_samplesperpixel, module); + return (TIFFhowmany8_64(scanline)); + } else + return (_TIFFMultiply64(tif, TIFFhowmany8_64(scanline), + td->td_samplesperpixel, module)); +} +tmsize_t TIFFRasterScanlineSize(TIFF* tif) { - TIFFDirectory *td = &tif->tif_dir; - tsize_t scanline; - - scanline = multiply (tif, td->td_bitspersample, td->td_imagewidth, - "TIFFRasterScanlineSize"); - if (td->td_planarconfig == PLANARCONFIG_CONTIG) { - scanline = multiply (tif, scanline, td->td_samplesperpixel, - "TIFFRasterScanlineSize"); - return ((tsize_t) TIFFhowmany8(scanline)); - } else - return ((tsize_t) multiply (tif, TIFFhowmany8(scanline), - td->td_samplesperpixel, - "TIFFRasterScanlineSize")); + static const char module[] = "TIFFRasterScanlineSize"; + uint64 m; + tmsize_t n; + m=TIFFRasterScanlineSize64(tif); + n=(tmsize_t)m; + if ((uint64)n!=m) + { + TIFFErrorExt(tif->tif_clientdata,module,"Integer arithmetic overflow"); + n=0; + } + return(n); } /* vim: set ts=8 sts=8 sw=8 noet: */ diff --git a/dll/3rdparty/libtiff/tif_swab.c b/dll/3rdparty/libtiff/tif_swab.c index e4f1a6d1e23..f37e33f1c99 100644 --- a/dll/3rdparty/libtiff/tif_swab.c +++ b/dll/3rdparty/libtiff/tif_swab.c @@ -1,4 +1,4 @@ -/* $Id: tif_swab.c,v 1.4.2.1 2010-06-08 18:50:43 bfriesen Exp $ */ +/* $Id: tif_swab.c,v 1.13 2010-03-10 18:56:49 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -37,7 +37,7 @@ TIFFSwabShort(uint16* wp) { register unsigned char* cp = (unsigned char*) wp; unsigned char t; - + assert(sizeof(uint16)==2); t = cp[1]; cp[1] = cp[0]; cp[0] = t; } #endif @@ -48,19 +48,33 @@ TIFFSwabLong(uint32* lp) { register unsigned char* cp = (unsigned char*) lp; unsigned char t; - + assert(sizeof(uint32)==4); t = cp[3]; cp[3] = cp[0]; cp[0] = t; t = cp[2]; cp[2] = cp[1]; cp[1] = t; } #endif +#ifndef TIFFSwabLong8 +void +TIFFSwabLong8(uint64* lp) +{ + register unsigned char* cp = (unsigned char*) lp; + unsigned char t; + assert(sizeof(uint64)==8); + t = cp[7]; cp[7] = cp[0]; cp[0] = t; + t = cp[6]; cp[6] = cp[1]; cp[1] = t; + t = cp[5]; cp[5] = cp[2]; cp[2] = t; + t = cp[4]; cp[4] = cp[3]; cp[3] = t; +} +#endif + #ifndef TIFFSwabArrayOfShort void -TIFFSwabArrayOfShort(uint16* wp, register unsigned long n) +TIFFSwabArrayOfShort(register uint16* wp, tmsize_t n) { register unsigned char* cp; register unsigned char t; - + assert(sizeof(uint16)==2); /* XXX unroll loop some */ while (n-- > 0) { cp = (unsigned char*) wp; @@ -72,7 +86,7 @@ TIFFSwabArrayOfShort(uint16* wp, register unsigned long n) #ifndef TIFFSwabArrayOfTriples void -TIFFSwabArrayOfTriples(uint8* tp, unsigned long n) +TIFFSwabArrayOfTriples(register uint8* tp, tmsize_t n) { unsigned char* cp; unsigned char t; @@ -88,11 +102,11 @@ TIFFSwabArrayOfTriples(uint8* tp, unsigned long n) #ifndef TIFFSwabArrayOfLong void -TIFFSwabArrayOfLong(register uint32* lp, register unsigned long n) +TIFFSwabArrayOfLong(register uint32* lp, tmsize_t n) { register unsigned char *cp; register unsigned char t; - + assert(sizeof(uint32)==4); /* XXX unroll loop some */ while (n-- > 0) { cp = (unsigned char *)lp; @@ -103,30 +117,84 @@ TIFFSwabArrayOfLong(register uint32* lp, register unsigned long n) } #endif +#ifndef TIFFSwabArrayOfLong8 +void +TIFFSwabArrayOfLong8(register uint64* lp, tmsize_t n) +{ + register unsigned char *cp; + register unsigned char t; + assert(sizeof(uint64)==8); + /* XXX unroll loop some */ + while (n-- > 0) { + cp = (unsigned char *)lp; + t = cp[7]; cp[7] = cp[0]; cp[0] = t; + t = cp[6]; cp[6] = cp[1]; cp[1] = t; + t = cp[5]; cp[5] = cp[2]; cp[2] = t; + t = cp[4]; cp[4] = cp[3]; cp[3] = t; + lp++; + } +} +#endif + +#ifndef TIFFSwabFloat +void +TIFFSwabFloat(float* fp) +{ + register unsigned char* cp = (unsigned char*) fp; + unsigned char t; + assert(sizeof(float)==4); + t = cp[3]; cp[3] = cp[0]; cp[0] = t; + t = cp[2]; cp[2] = cp[1]; cp[1] = t; +} +#endif + +#ifndef TIFFSwabArrayOfFloat +void +TIFFSwabArrayOfFloat(register float* fp, tmsize_t n) +{ + register unsigned char *cp; + register unsigned char t; + assert(sizeof(float)==4); + /* XXX unroll loop some */ + while (n-- > 0) { + cp = (unsigned char *)fp; + t = cp[3]; cp[3] = cp[0]; cp[0] = t; + t = cp[2]; cp[2] = cp[1]; cp[1] = t; + fp++; + } +} +#endif + #ifndef TIFFSwabDouble void TIFFSwabDouble(double *dp) { - register uint32* lp = (uint32*) dp; - uint32 t; - - TIFFSwabArrayOfLong(lp, 2); - t = lp[0]; lp[0] = lp[1]; lp[1] = t; + register unsigned char* cp = (unsigned char*) dp; + unsigned char t; + assert(sizeof(double)==8); + t = cp[7]; cp[7] = cp[0]; cp[0] = t; + t = cp[6]; cp[6] = cp[1]; cp[1] = t; + t = cp[5]; cp[5] = cp[2]; cp[2] = t; + t = cp[4]; cp[4] = cp[3]; cp[3] = t; } #endif #ifndef TIFFSwabArrayOfDouble void -TIFFSwabArrayOfDouble(double* dp, register unsigned long n) +TIFFSwabArrayOfDouble(double* dp, tmsize_t n) { - register uint32* lp = (uint32*) dp; - register uint32 t; - - TIFFSwabArrayOfLong(lp, n + n); - while (n-- > 0) { - t = lp[0]; lp[0] = lp[1]; lp[1] = t; - lp += 2; - } + register unsigned char *cp; + register unsigned char t; + assert(sizeof(double)==8); + /* XXX unroll loop some */ + while (n-- > 0) { + cp = (unsigned char *)dp; + t = cp[7]; cp[7] = cp[0]; cp[0] = t; + t = cp[6]; cp[6] = cp[1]; cp[1] = t; + t = cp[5]; cp[5] = cp[2]; cp[2] = t; + t = cp[4]; cp[4] = cp[3]; cp[3] = t; + dp++; + } } #endif @@ -215,7 +283,7 @@ TIFFGetBitRevTable(int reversed) } void -TIFFReverseBits(register unsigned char* cp, register unsigned long n) +TIFFReverseBits(uint8* cp, tmsize_t n) { for (; n > 8; n -= 8) { cp[0] = TIFFBitRevTable[cp[0]]; diff --git a/dll/3rdparty/libtiff/tif_thunder.c b/dll/3rdparty/libtiff/tif_thunder.c index 8e7a1258415..390891c98bd 100644 --- a/dll/3rdparty/libtiff/tif_thunder.c +++ b/dll/3rdparty/libtiff/tif_thunder.c @@ -1,4 +1,4 @@ -/* $Id: tif_thunder.c,v 1.5.2.1 2010-06-08 18:50:43 bfriesen Exp $ */ +/* $Id: tif_thunder.c,v 1.12 2011-04-02 20:54:09 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -25,6 +25,7 @@ */ #include "tiffiop.h" +#include #ifdef THUNDER_SUPPORT /* * TIFF Library. @@ -55,21 +56,42 @@ static const int twobitdeltas[4] = { 0, 1, 0, -1 }; static const int threebitdeltas[8] = { 0, 1, 2, 3, 0, -3, -2, -1 }; -#define SETPIXEL(op, v) { \ - lastpixel = (v) & 0xf; \ - if (npixels++ & 1) \ - *op++ |= lastpixel; \ - else \ - op[0] = (tidataval_t) (lastpixel << 4); \ +#define SETPIXEL(op, v) { \ + lastpixel = (v) & 0xf; \ + if ( npixels < maxpixels ) \ + { \ + if (npixels++ & 1) \ + *op++ |= lastpixel; \ + else \ + op[0] = (uint8) (lastpixel << 4); \ + } \ } static int -ThunderDecode(TIFF* tif, tidata_t op, tsize_t maxpixels) +ThunderSetupDecode(TIFF* tif) { + static const char module[] = "ThunderSetupDecode"; + + if( tif->tif_dir.td_bitspersample != 4 ) + { + TIFFErrorExt(tif->tif_clientdata, module, + "Wrong bitspersample value (%d), Thunder decoder only supports 4bits per sample.", + (int) tif->tif_dir.td_bitspersample ); + return 0; + } + + + return (1); +} + +static int +ThunderDecode(TIFF* tif, uint8* op, tmsize_t maxpixels) +{ + static const char module[] = "ThunderDecode"; register unsigned char *bp; - register tsize_t cc; + register tmsize_t cc; unsigned int lastpixel; - tsize_t npixels; + tmsize_t npixels; bp = (unsigned char *)tif->tif_rawcp; cc = tif->tif_rawcc; @@ -93,7 +115,7 @@ ThunderDecode(TIFF* tif, tidata_t op, tsize_t maxpixels) npixels += n; if (npixels < maxpixels) { for (; n > 0; n -= 2) - *op++ = (tidataval_t) lastpixel; + *op++ = (uint8) lastpixel; } if (n == -1) *--op &= 0xf0; @@ -118,25 +140,43 @@ ThunderDecode(TIFF* tif, tidata_t op, tsize_t maxpixels) break; } } - tif->tif_rawcp = (tidata_t) bp; + tif->tif_rawcp = (uint8*) bp; tif->tif_rawcc = cc; if (npixels != maxpixels) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "ThunderDecode: %s data at scanline %ld (%lu != %lu)", - npixels < maxpixels ? "Not enough" : "Too much", - (long) tif->tif_row, (long) npixels, (long) maxpixels); +#if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + TIFFErrorExt(tif->tif_clientdata, module, + "%s data at scanline %lu (%I64u != %I64u)", + npixels < maxpixels ? "Not enough" : "Too much", + (unsigned long) tif->tif_row, + (unsigned __int64) npixels, + (unsigned __int64) maxpixels); +#else + TIFFErrorExt(tif->tif_clientdata, module, + "%s data at scanline %lu (%llu != %llu)", + npixels < maxpixels ? "Not enough" : "Too much", + (unsigned long) tif->tif_row, + (unsigned long long) npixels, + (unsigned long long) maxpixels); +#endif return (0); } - return (1); + + return (1); } static int -ThunderDecodeRow(TIFF* tif, tidata_t buf, tsize_t occ, tsample_t s) +ThunderDecodeRow(TIFF* tif, uint8* buf, tmsize_t occ, uint16 s) { - tidata_t row = buf; + static const char module[] = "ThunderDecodeRow"; + uint8* row = buf; (void) s; - while ((long)occ > 0) { + if (occ % tif->tif_scanlinesize) + { + TIFFErrorExt(tif->tif_clientdata, module, "Fractional scanlines cannot be read"); + return (0); + } + while (occ > 0) { if (!ThunderDecode(tif, row, tif->tif_dir.td_imagewidth)) return (0); occ -= tif->tif_scanlinesize; @@ -149,8 +189,10 @@ int TIFFInitThunderScan(TIFF* tif, int scheme) { (void) scheme; + + tif->tif_setupdecode = ThunderSetupDecode; tif->tif_decoderow = ThunderDecodeRow; - tif->tif_decodestrip = ThunderDecodeRow; + tif->tif_decodestrip = ThunderDecodeRow; return (1); } #endif /* THUNDER_SUPPORT */ diff --git a/dll/3rdparty/libtiff/tif_tile.c b/dll/3rdparty/libtiff/tif_tile.c index d8379e61b30..0ff7e85352d 100644 --- a/dll/3rdparty/libtiff/tif_tile.c +++ b/dll/3rdparty/libtiff/tif_tile.c @@ -1,4 +1,4 @@ -/* $Id: tif_tile.c,v 1.12.2.1 2010-06-08 18:50:43 bfriesen Exp $ */ +/* $Id: tif_tile.c,v 1.23 2012-06-06 05:33:55 fwarmerdam Exp $ */ /* * Copyright (c) 1991-1997 Sam Leffler @@ -31,47 +31,17 @@ */ #include "tiffiop.h" -static uint32 -summarize(TIFF* tif, size_t summand1, size_t summand2, const char* where) -{ - /* - * XXX: We are using casting to uint32 here, because sizeof(size_t) - * may be larger than sizeof(uint32) on 64-bit architectures. - */ - uint32 bytes = summand1 + summand2; - - if (bytes - summand1 != summand2) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "Integer overflow in %s", where); - bytes = 0; - } - - return (bytes); -} - -static uint32 -multiply(TIFF* tif, size_t nmemb, size_t elem_size, const char* where) -{ - uint32 bytes = nmemb * elem_size; - - if (elem_size && bytes / elem_size != nmemb) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "Integer overflow in %s", where); - bytes = 0; - } - - return (bytes); -} - /* * Compute which tile an (x,y,z,s) value is in. */ -ttile_t -TIFFComputeTile(TIFF* tif, uint32 x, uint32 y, uint32 z, tsample_t s) +uint32 +TIFFComputeTile(TIFF* tif, uint32 x, uint32 y, uint32 z, uint16 s) { TIFFDirectory *td = &tif->tif_dir; uint32 dx = td->td_tilewidth; uint32 dy = td->td_tilelength; uint32 dz = td->td_tiledepth; - ttile_t tile = 1; + uint32 tile = 1; if (td->td_imagedepth == 1) z = 0; @@ -82,9 +52,9 @@ TIFFComputeTile(TIFF* tif, uint32 x, uint32 y, uint32 z, tsample_t s) if (dz == (uint32) -1) dz = td->td_imagedepth; if (dx != 0 && dy != 0 && dz != 0) { - uint32 xpt = TIFFhowmany(td->td_imagewidth, dx); - uint32 ypt = TIFFhowmany(td->td_imagelength, dy); - uint32 zpt = TIFFhowmany(td->td_imagedepth, dz); + uint32 xpt = TIFFhowmany_32(td->td_imagewidth, dx); + uint32 ypt = TIFFhowmany_32(td->td_imagelength, dy); + uint32 zpt = TIFFhowmany_32(td->td_imagedepth, dz); if (td->td_planarconfig == PLANARCONFIG_SEPARATE) tile = (xpt*ypt*zpt)*s + @@ -102,7 +72,7 @@ TIFFComputeTile(TIFF* tif, uint32 x, uint32 y, uint32 z, tsample_t s) * against the image bounds. */ int -TIFFCheckTile(TIFF* tif, uint32 x, uint32 y, uint32 z, tsample_t s) +TIFFCheckTile(TIFF* tif, uint32 x, uint32 y, uint32 z, uint16 s) { TIFFDirectory *td = &tif->tif_dir; @@ -141,14 +111,14 @@ TIFFCheckTile(TIFF* tif, uint32 x, uint32 y, uint32 z, tsample_t s) /* * Compute how many tiles are in an image. */ -ttile_t +uint32 TIFFNumberOfTiles(TIFF* tif) { TIFFDirectory *td = &tif->tif_dir; uint32 dx = td->td_tilewidth; uint32 dy = td->td_tilelength; uint32 dz = td->td_tiledepth; - ttile_t ntiles; + uint32 ntiles; if (dx == (uint32) -1) dx = td->td_imagewidth; @@ -157,50 +127,66 @@ TIFFNumberOfTiles(TIFF* tif) if (dz == (uint32) -1) dz = td->td_imagedepth; ntiles = (dx == 0 || dy == 0 || dz == 0) ? 0 : - multiply(tif, multiply(tif, TIFFhowmany(td->td_imagewidth, dx), - TIFFhowmany(td->td_imagelength, dy), - "TIFFNumberOfTiles"), - TIFFhowmany(td->td_imagedepth, dz), "TIFFNumberOfTiles"); + _TIFFMultiply32(tif, _TIFFMultiply32(tif, TIFFhowmany_32(td->td_imagewidth, dx), + TIFFhowmany_32(td->td_imagelength, dy), + "TIFFNumberOfTiles"), + TIFFhowmany_32(td->td_imagedepth, dz), "TIFFNumberOfTiles"); if (td->td_planarconfig == PLANARCONFIG_SEPARATE) - ntiles = multiply(tif, ntiles, td->td_samplesperpixel, - "TIFFNumberOfTiles"); + ntiles = _TIFFMultiply32(tif, ntiles, td->td_samplesperpixel, + "TIFFNumberOfTiles"); return (ntiles); } /* * Compute the # bytes in each row of a tile. */ -tsize_t -TIFFTileRowSize(TIFF* tif) +uint64 +TIFFTileRowSize64(TIFF* tif) { TIFFDirectory *td = &tif->tif_dir; - tsize_t rowsize; - + uint64 rowsize; + if (td->td_tilelength == 0 || td->td_tilewidth == 0) - return ((tsize_t) 0); - rowsize = multiply(tif, td->td_bitspersample, td->td_tilewidth, - "TIFFTileRowSize"); + return (0); + rowsize = _TIFFMultiply64(tif, td->td_bitspersample, td->td_tilewidth, + "TIFFTileRowSize"); if (td->td_planarconfig == PLANARCONFIG_CONTIG) - rowsize = multiply(tif, rowsize, td->td_samplesperpixel, - "TIFFTileRowSize"); - return ((tsize_t) TIFFhowmany8(rowsize)); + rowsize = _TIFFMultiply64(tif, rowsize, td->td_samplesperpixel, + "TIFFTileRowSize"); + return (TIFFhowmany8_64(rowsize)); +} +tmsize_t +TIFFTileRowSize(TIFF* tif) +{ + static const char module[] = "TIFFTileRowSize"; + uint64 m; + tmsize_t n; + m=TIFFTileRowSize64(tif); + n=(tmsize_t)m; + if ((uint64)n!=m) + { + TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow"); + n=0; + } + return(n); } /* * Compute the # bytes in a variable length, row-aligned tile. */ -tsize_t -TIFFVTileSize(TIFF* tif, uint32 nrows) +uint64 +TIFFVTileSize64(TIFF* tif, uint32 nrows) { + static const char module[] = "TIFFVTileSize64"; TIFFDirectory *td = &tif->tif_dir; - tsize_t tilesize; - if (td->td_tilelength == 0 || td->td_tilewidth == 0 || td->td_tiledepth == 0) - return ((tsize_t) 0); - if (td->td_planarconfig == PLANARCONFIG_CONTIG && - td->td_photometric == PHOTOMETRIC_YCBCR && - !isUpSampled(tif)) { + return (0); + if ((td->td_planarconfig==PLANARCONFIG_CONTIG)&& + (td->td_photometric==PHOTOMETRIC_YCBCR)&& + (td->td_samplesperpixel==3)&& + (!isUpSampled(tif))) + { /* * Packed YCbCr data contain one Cb+Cr for every * HorizontalSampling*VerticalSampling Y values. @@ -209,38 +195,71 @@ TIFFVTileSize(TIFF* tif, uint32 nrows) * horizontal/vertical subsampling area include * YCbCr data for the extended image. */ - tsize_t w = - TIFFroundup(td->td_tilewidth, td->td_ycbcrsubsampling[0]); - tsize_t rowsize = - TIFFhowmany8(multiply(tif, w, td->td_bitspersample, - "TIFFVTileSize")); - tsize_t samplingarea = - td->td_ycbcrsubsampling[0]*td->td_ycbcrsubsampling[1]; - if (samplingarea == 0) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, "Invalid YCbCr subsampling"); + uint16 ycbcrsubsampling[2]; + uint16 samplingblock_samples; + uint32 samplingblocks_hor; + uint32 samplingblocks_ver; + uint64 samplingrow_samples; + uint64 samplingrow_size; + TIFFGetFieldDefaulted(tif,TIFFTAG_YCBCRSUBSAMPLING,ycbcrsubsampling+0, + ycbcrsubsampling+1); + if ((ycbcrsubsampling[0] != 1 && ycbcrsubsampling[0] != 2 && ycbcrsubsampling[0] != 4) + ||(ycbcrsubsampling[1] != 1 && ycbcrsubsampling[1] != 2 && ycbcrsubsampling[1] != 4)) + { + TIFFErrorExt(tif->tif_clientdata,module, + "Invalid YCbCr subsampling (%dx%d)", + ycbcrsubsampling[0], + ycbcrsubsampling[1] ); return 0; } - nrows = TIFFroundup(nrows, td->td_ycbcrsubsampling[1]); - /* NB: don't need TIFFhowmany here 'cuz everything is rounded */ - tilesize = multiply(tif, nrows, rowsize, "TIFFVTileSize"); - tilesize = summarize(tif, tilesize, - multiply(tif, 2, tilesize / samplingarea, - "TIFFVTileSize"), - "TIFFVTileSize"); - } else - tilesize = multiply(tif, nrows, TIFFTileRowSize(tif), - "TIFFVTileSize"); - return ((tsize_t) - multiply(tif, tilesize, td->td_tiledepth, "TIFFVTileSize")); + samplingblock_samples=ycbcrsubsampling[0]*ycbcrsubsampling[1]+2; + samplingblocks_hor=TIFFhowmany_32(td->td_tilewidth,ycbcrsubsampling[0]); + samplingblocks_ver=TIFFhowmany_32(nrows,ycbcrsubsampling[1]); + samplingrow_samples=_TIFFMultiply64(tif,samplingblocks_hor,samplingblock_samples,module); + samplingrow_size=TIFFhowmany8_64(_TIFFMultiply64(tif,samplingrow_samples,td->td_bitspersample,module)); + return(_TIFFMultiply64(tif,samplingrow_size,samplingblocks_ver,module)); + } + else + return(_TIFFMultiply64(tif,nrows,TIFFTileRowSize64(tif),module)); +} +tmsize_t +TIFFVTileSize(TIFF* tif, uint32 nrows) +{ + static const char module[] = "TIFFVTileSize"; + uint64 m; + tmsize_t n; + m=TIFFVTileSize64(tif,nrows); + n=(tmsize_t)m; + if ((uint64)n!=m) + { + TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow"); + n=0; + } + return(n); } /* * Compute the # bytes in a row-aligned tile. */ -tsize_t +uint64 +TIFFTileSize64(TIFF* tif) +{ + return (TIFFVTileSize64(tif, tif->tif_dir.td_tilelength)); +} +tmsize_t TIFFTileSize(TIFF* tif) { - return (TIFFVTileSize(tif, tif->tif_dir.td_tilelength)); + static const char module[] = "TIFFTileSize"; + uint64 m; + tmsize_t n; + m=TIFFTileSize64(tif); + n=(tmsize_t)m; + if ((uint64)n!=m) + { + TIFFErrorExt(tif->tif_clientdata,module,"Integer overflow"); + n=0; + } + return(n); } /* @@ -265,9 +284,9 @@ _TIFFDefaultTileSize(TIFF* tif, uint32* tw, uint32* th) *th = 256; /* roundup to a multiple of 16 per the spec */ if (*tw & 0xf) - *tw = TIFFroundup(*tw, 16); + *tw = TIFFroundup_32(*tw, 16); if (*th & 0xf) - *th = TIFFroundup(*th, 16); + *th = TIFFroundup_32(*th, 16); } /* vim: set ts=8 sts=8 sw=8 noet: */ diff --git a/dll/3rdparty/libtiff/tif_unix.c b/dll/3rdparty/libtiff/tif_unix.c new file mode 100644 index 00000000000..1387558fbab --- /dev/null +++ b/dll/3rdparty/libtiff/tif_unix.c @@ -0,0 +1,322 @@ +/* $Id: tif_unix.c,v 1.23 2012-06-01 21:40:59 fwarmerdam Exp $ */ + +/* + * Copyright (c) 1988-1997 Sam Leffler + * Copyright (c) 1991-1997 Silicon Graphics, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that (i) the above copyright notices and this permission notice appear in + * all copies of the software and related documentation, and (ii) the names of + * Sam Leffler and Silicon Graphics may not be used in any advertising or + * publicity relating to the software without the specific, prior written + * permission of Sam Leffler and Silicon Graphics. + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR + * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +/* + * TIFF Library UNIX-specific Routines. These are should also work with the + * Windows Common RunTime Library. + */ + +#include "tif_config.h" + +#ifdef HAVE_SYS_TYPES_H +# include +#endif + +#include + +#include +#include +#include + +#ifdef HAVE_UNISTD_H +# include +#endif + +#ifdef HAVE_FCNTL_H +# include +#endif + +#ifdef HAVE_IO_H +# include +#endif + +#include "tiffiop.h" + +static tmsize_t +_tiffReadProc(thandle_t fd, void* buf, tmsize_t size) +{ + size_t size_io = (size_t) size; + if ((tmsize_t) size_io != size) + { + errno=EINVAL; + return (tmsize_t) -1; + } + return ((tmsize_t) read((int) fd, buf, size_io)); +} + +static tmsize_t +_tiffWriteProc(thandle_t fd, void* buf, tmsize_t size) +{ + size_t size_io = (size_t) size; + if ((tmsize_t) size_io != size) + { + errno=EINVAL; + return (tmsize_t) -1; + } + return ((tmsize_t) write((int) fd, buf, size_io)); +} + +static uint64 +_tiffSeekProc(thandle_t fd, uint64 off, int whence) +{ + off_t off_io = (off_t) off; + if ((uint64) off_io != off) + { + errno=EINVAL; + return (uint64) -1; /* this is really gross */ + } + return((uint64)lseek((int)fd,off_io,whence)); +} + +static int +_tiffCloseProc(thandle_t fd) +{ + return(close((int)fd)); +} + +static uint64 +_tiffSizeProc(thandle_t fd) +{ + struct stat sb; + if (fstat((int)fd,&sb)<0) + return(0); + else + return((uint64)sb.st_size); +} + +#ifdef HAVE_MMAP +#include + +static int +_tiffMapProc(thandle_t fd, void** pbase, toff_t* psize) +{ + uint64 size64 = _tiffSizeProc(fd); + tmsize_t sizem = (tmsize_t)size64; + if ((uint64)sizem==size64) { + *pbase = (void*) + mmap(0, (size_t)sizem, PROT_READ, MAP_SHARED, (int) fd, 0); + if (*pbase != (void*) -1) { + *psize = (tmsize_t)sizem; + return (1); + } + } + return (0); +} + +static void +_tiffUnmapProc(thandle_t fd, void* base, toff_t size) +{ + (void) fd; + (void) munmap(base, (off_t) size); +} +#else /* !HAVE_MMAP */ +static int +_tiffMapProc(thandle_t fd, void** pbase, toff_t* psize) +{ + (void) fd; (void) pbase; (void) psize; + return (0); +} + +static void +_tiffUnmapProc(thandle_t fd, void* base, toff_t size) +{ + (void) fd; (void) base; (void) size; +} +#endif /* !HAVE_MMAP */ + +/* + * Open a TIFF file descriptor for read/writing. + */ +TIFF* +TIFFFdOpen(int fd, const char* name, const char* mode) +{ + TIFF* tif; + + tif = TIFFClientOpen(name, mode, + (thandle_t) fd, + _tiffReadProc, _tiffWriteProc, + _tiffSeekProc, _tiffCloseProc, _tiffSizeProc, + _tiffMapProc, _tiffUnmapProc); + if (tif) + tif->tif_fd = fd; + return (tif); +} + +/* + * Open a TIFF file for read/writing. + */ +TIFF* +TIFFOpen(const char* name, const char* mode) +{ + static const char module[] = "TIFFOpen"; + int m, fd; + TIFF* tif; + + m = _TIFFgetMode(mode, module); + if (m == -1) + return ((TIFF*)0); + +/* for cygwin and mingw */ +#ifdef O_BINARY + m |= O_BINARY; +#endif + + fd = open(name, m, 0666); + if (fd < 0) { + if (errno > 0 && strerror(errno) != NULL ) { + TIFFErrorExt(0, module, "%s: %s", name, strerror(errno) ); + } else { + TIFFErrorExt(0, module, "%s: Cannot open", name); + } + return ((TIFF *)0); + } + + tif = TIFFFdOpen((int)fd, name, mode); + if(!tif) + close(fd); + return tif; +} + +#ifdef __WIN32__ +#include +/* + * Open a TIFF file with a Unicode filename, for read/writing. + */ +TIFF* +TIFFOpenW(const wchar_t* name, const char* mode) +{ + static const char module[] = "TIFFOpenW"; + int m, fd; + int mbsize; + char *mbname; + TIFF* tif; + + m = _TIFFgetMode(mode, module); + if (m == -1) + return ((TIFF*)0); + +/* for cygwin and mingw */ +#ifdef O_BINARY + m |= O_BINARY; +#endif + + fd = _wopen(name, m, 0666); + if (fd < 0) { + TIFFErrorExt(0, module, "%s: Cannot open", name); + return ((TIFF *)0); + } + + mbname = NULL; + mbsize = WideCharToMultiByte(CP_ACP, 0, name, -1, NULL, 0, NULL, NULL); + if (mbsize > 0) { + mbname = _TIFFmalloc(mbsize); + if (!mbname) { + TIFFErrorExt(0, module, + "Can't allocate space for filename conversion buffer"); + return ((TIFF*)0); + } + + WideCharToMultiByte(CP_ACP, 0, name, -1, mbname, mbsize, + NULL, NULL); + } + + tif = TIFFFdOpen((int)fd, (mbname != NULL) ? mbname : "", + mode); + + _TIFFfree(mbname); + + if(!tif) + close(fd); + return tif; +} +#endif + +void* +_TIFFmalloc(tmsize_t s) +{ + return (malloc((size_t) s)); +} + +void +_TIFFfree(void* p) +{ + free(p); +} + +void* +_TIFFrealloc(void* p, tmsize_t s) +{ + return (realloc(p, (size_t) s)); +} + +void +_TIFFmemset(void* p, int v, tmsize_t c) +{ + memset(p, v, (size_t) c); +} + +void +_TIFFmemcpy(void* d, const void* s, tmsize_t c) +{ + memcpy(d, s, (size_t) c); +} + +int +_TIFFmemcmp(const void* p1, const void* p2, tmsize_t c) +{ + return (memcmp(p1, p2, (size_t) c)); +} + +static void +unixWarningHandler(const char* module, const char* fmt, va_list ap) +{ + if (module != NULL) + fprintf(stderr, "%s: ", module); + fprintf(stderr, "Warning, "); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ".\n"); +} +TIFFErrorHandler _TIFFwarningHandler = unixWarningHandler; + +static void +unixErrorHandler(const char* module, const char* fmt, va_list ap) +{ + if (module != NULL) + fprintf(stderr, "%s: ", module); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ".\n"); +} +TIFFErrorHandler _TIFFerrorHandler = unixErrorHandler; + +/* vim: set ts=8 sts=8 sw=8 noet: */ + +/* + * Local Variables: + * mode: c + * c-basic-offset: 8 + * fill-column: 78 + * End: + */ diff --git a/dll/3rdparty/libtiff/tif_version.c b/dll/3rdparty/libtiff/tif_version.c index 218dab566e7..f92c843d88d 100644 --- a/dll/3rdparty/libtiff/tif_version.c +++ b/dll/3rdparty/libtiff/tif_version.c @@ -1,4 +1,4 @@ -/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_version.c,v 1.2.2.1 2010-06-08 18:50:43 bfriesen Exp $ */ +/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_version.c,v 1.3 2010-03-10 18:56:49 bfriesen Exp $ */ /* * Copyright (c) 1992-1997 Sam Leffler * Copyright (c) 1992-1997 Silicon Graphics, Inc. diff --git a/dll/3rdparty/libtiff/tif_warning.c b/dll/3rdparty/libtiff/tif_warning.c index fe974d909ff..423b636e6e3 100644 --- a/dll/3rdparty/libtiff/tif_warning.c +++ b/dll/3rdparty/libtiff/tif_warning.c @@ -1,4 +1,4 @@ -/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_warning.c,v 1.2.2.1 2010-06-08 18:50:43 bfriesen Exp $ */ +/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_warning.c,v 1.3 2010-03-10 18:56:49 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler diff --git a/dll/3rdparty/libtiff/tif_win32.c b/dll/3rdparty/libtiff/tif_win32.c index 2ab944b12cf..2cf1de93f2b 100644 --- a/dll/3rdparty/libtiff/tif_win32.c +++ b/dll/3rdparty/libtiff/tif_win32.c @@ -1,4 +1,4 @@ -/* $Id: tif_win32.c,v 1.21.2.1 2010-06-08 18:50:43 bfriesen Exp $ */ +/* $Id: tif_win32.c,v 1.39 2011-12-22 17:07:57 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -32,49 +32,91 @@ #include -static tsize_t -_tiffReadProc(thandle_t fd, tdata_t buf, tsize_t size) +static tmsize_t +_tiffReadProc(thandle_t fd, void* buf, tmsize_t size) { - DWORD dwSizeRead; - if (!ReadFile(fd, buf, size, &dwSizeRead, NULL)) - return(0); - return ((tsize_t) dwSizeRead); + /* tmsize_t is 64bit on 64bit systems, but the WinAPI ReadFile takes + * 32bit sizes, so we loop through the data in suitable 32bit sized + * chunks */ + uint8* ma; + uint64 mb; + DWORD n; + DWORD o; + tmsize_t p; + ma=(uint8*)buf; + mb=size; + p=0; + while (mb>0) + { + n=0x80000000UL; + if ((uint64)n>mb) + n=(DWORD)mb; + if (!ReadFile(fd,(LPVOID)ma,n,&o,NULL)) + return(0); + ma+=o; + mb-=o; + p+=o; + if (o!=n) + break; + } + return(p); } -static tsize_t -_tiffWriteProc(thandle_t fd, tdata_t buf, tsize_t size) +static tmsize_t +_tiffWriteProc(thandle_t fd, void* buf, tmsize_t size) { - DWORD dwSizeWritten; - if (!WriteFile(fd, buf, size, &dwSizeWritten, NULL)) - return(0); - return ((tsize_t) dwSizeWritten); + /* tmsize_t is 64bit on 64bit systems, but the WinAPI WriteFile takes + * 32bit sizes, so we loop through the data in suitable 32bit sized + * chunks */ + uint8* ma; + uint64 mb; + DWORD n; + DWORD o; + tmsize_t p; + ma=(uint8*)buf; + mb=size; + p=0; + while (mb>0) + { + n=0x80000000UL; + if ((uint64)n>mb) + n=(DWORD)mb; + if (!WriteFile(fd,(LPVOID)ma,n,&o,NULL)) + return(0); + ma+=o; + mb-=o; + p+=o; + if (o!=n) + break; + } + return(p); } -static toff_t -_tiffSeekProc(thandle_t fd, toff_t off, int whence) +static uint64 +_tiffSeekProc(thandle_t fd, uint64 off, int whence) { - ULARGE_INTEGER li; + LARGE_INTEGER offli; DWORD dwMoveMethod; - - li.QuadPart = off; - + offli.QuadPart = off; switch(whence) { - case SEEK_SET: - dwMoveMethod = FILE_BEGIN; - break; - case SEEK_CUR: - dwMoveMethod = FILE_CURRENT; - break; - case SEEK_END: - dwMoveMethod = FILE_END; - break; - default: - dwMoveMethod = FILE_BEGIN; - break; + case SEEK_SET: + dwMoveMethod = FILE_BEGIN; + break; + case SEEK_CUR: + dwMoveMethod = FILE_CURRENT; + break; + case SEEK_END: + dwMoveMethod = FILE_END; + break; + default: + dwMoveMethod = FILE_BEGIN; + break; } - return ((toff_t)SetFilePointer(fd, (LONG) li.LowPart, - (PLONG)&li.HighPart, dwMoveMethod)); + offli.LowPart=SetFilePointer(fd,offli.LowPart,&offli.HighPart,dwMoveMethod); + if ((offli.LowPart==INVALID_SET_FILE_POINTER)&&(GetLastError()!=NO_ERROR)) + offli.QuadPart=0; + return(offli.QuadPart); } static int @@ -83,14 +125,16 @@ _tiffCloseProc(thandle_t fd) return (CloseHandle(fd) ? 0 : -1); } -static toff_t +static uint64 _tiffSizeProc(thandle_t fd) { - return ((toff_t)GetFileSize(fd, NULL)); + ULARGE_INTEGER m; + m.LowPart=GetFileSize(fd,&m.HighPart); + return(m.QuadPart); } static int -_tiffDummyMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) +_tiffDummyMapProc(thandle_t fd, void** pbase, toff_t* psize) { (void) fd; (void) pbase; @@ -110,14 +154,20 @@ _tiffDummyMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) * with Visual C++ 5.0 */ static int -_tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) +_tiffMapProc(thandle_t fd, void** pbase, toff_t* psize) { - toff_t size; + uint64 size; + tmsize_t sizem; HANDLE hMapFile; - if ((size = _tiffSizeProc(fd)) == 0xFFFFFFFF) + size = _tiffSizeProc(fd); + sizem = (tmsize_t)size; + if ((uint64)sizem!=size) return (0); - hMapFile = CreateFileMapping(fd, NULL, PAGE_READONLY, 0, size, NULL); + + /* By passing in 0 for the maximum file size, it specifies that we + create a file mapping object for the full file size. */ + hMapFile = CreateFileMapping(fd, NULL, PAGE_READONLY, 0, 0, NULL); if (hMapFile == NULL) return (0); *pbase = MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 0); @@ -129,7 +179,7 @@ _tiffMapProc(thandle_t fd, tdata_t* pbase, toff_t* psize) } static void -_tiffDummyUnmapProc(thandle_t fd, tdata_t base, toff_t size) +_tiffDummyUnmapProc(thandle_t fd, void* base, toff_t size) { (void) fd; (void) base; @@ -137,8 +187,10 @@ _tiffDummyUnmapProc(thandle_t fd, tdata_t base, toff_t size) } static void -_tiffUnmapProc(thandle_t fd, tdata_t base, toff_t size) +_tiffUnmapProc(thandle_t fd, void* base, toff_t size) { + (void) fd; + (void) size; UnmapViewOfFile(base); } @@ -151,8 +203,17 @@ TIFF* TIFFFdOpen(int ifd, const char* name, const char* mode) { TIFF* tif; - BOOL fSuppressMap = (mode[1] == 'u' || (mode[1]!=0 && mode[2] == 'u')); - + int fSuppressMap; + int m; + fSuppressMap=0; + for (m=0; mode[m]!=0; m++) + { + if (mode[m]=='u') + { + fSuppressMap=1; + break; + } + } tif = TIFFClientOpen(name, mode, (thandle_t)ifd, _tiffReadProc, _tiffWriteProc, _tiffSeekProc, _tiffCloseProc, _tiffSizeProc, @@ -179,26 +240,15 @@ TIFFOpen(const char* name, const char* mode) m = _TIFFgetMode(mode, module); - switch(m) - { - case O_RDONLY: - dwMode = OPEN_EXISTING; - break; - case O_RDWR: - dwMode = OPEN_ALWAYS; - break; - case O_RDWR|O_CREAT: - dwMode = OPEN_ALWAYS; - break; - case O_RDWR|O_TRUNC: - dwMode = CREATE_ALWAYS; - break; - case O_RDWR|O_CREAT|O_TRUNC: - dwMode = CREATE_ALWAYS; - break; - default: - return ((TIFF*)0); + switch(m) { + case O_RDONLY: dwMode = OPEN_EXISTING; break; + case O_RDWR: dwMode = OPEN_ALWAYS; break; + case O_RDWR|O_CREAT: dwMode = OPEN_ALWAYS; break; + case O_RDWR|O_TRUNC: dwMode = CREATE_ALWAYS; break; + case O_RDWR|O_CREAT|O_TRUNC: dwMode = CREATE_ALWAYS; break; + default: return ((TIFF*)0); } + fd = (thandle_t)CreateFileA(name, (m == O_RDONLY)?GENERIC_READ:(GENERIC_READ | GENERIC_WRITE), FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, dwMode, @@ -242,7 +292,7 @@ TIFFOpenW(const wchar_t* name, const char* mode) fd = (thandle_t)CreateFileW(name, (m == O_RDONLY)?GENERIC_READ:(GENERIC_READ|GENERIC_WRITE), - FILE_SHARE_READ, NULL, dwMode, + FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, dwMode, (m == O_RDONLY)?FILE_ATTRIBUTE_READONLY:FILE_ATTRIBUTE_NORMAL, NULL); if (fd == INVALID_HANDLE_VALUE) { @@ -276,71 +326,48 @@ TIFFOpenW(const wchar_t* name, const char* mode) #endif /* ndef _WIN32_WCE */ - -tdata_t -_TIFFmalloc(tsize_t s) +void* +_TIFFmalloc(tmsize_t s) { - return ((tdata_t)GlobalAlloc(GMEM_FIXED, s)); + return (malloc((size_t) s)); } void -_TIFFfree(tdata_t p) +_TIFFfree(void* p) { - GlobalFree(p); - return; + free(p); } -tdata_t -_TIFFrealloc(tdata_t p, tsize_t s) +void* +_TIFFrealloc(void* p, tmsize_t s) { - void* pvTmp; - tsize_t old; - - if(p == NULL) - return ((tdata_t)GlobalAlloc(GMEM_FIXED, s)); - - old = GlobalSize(p); - - if (old>=s) { - if ((pvTmp = GlobalAlloc(GMEM_FIXED, s)) != NULL) { - CopyMemory(pvTmp, p, s); - GlobalFree(p); - } - } else { - if ((pvTmp = GlobalAlloc(GMEM_FIXED, s)) != NULL) { - CopyMemory(pvTmp, p, old); - GlobalFree(p); - } - } - return ((tdata_t)pvTmp); + return (realloc(p, (size_t) s)); } void -_TIFFmemset(void* p, int v, tsize_t c) +_TIFFmemset(void* p, int v, tmsize_t c) { - FillMemory(p, c, (BYTE)v); + memset(p, v, (size_t) c); } void -_TIFFmemcpy(void* d, const tdata_t s, tsize_t c) +_TIFFmemcpy(void* d, const void* s, tmsize_t c) { - CopyMemory(d, s, c); + memcpy(d, s, (size_t) c); } int -_TIFFmemcmp(const tdata_t p1, const tdata_t p2, tsize_t c) +_TIFFmemcmp(const void* p1, const void* p2, tmsize_t c) { - register const BYTE *pb1 = (const BYTE *) p1; - register const BYTE *pb2 = (const BYTE *) p2; - register DWORD dwTmp = c; - register int iTmp; - for (iTmp = 0; dwTmp-- && !iTmp; iTmp = (int)*pb1++ - (int)*pb2++) - ; - return (iTmp); + return (memcmp(p1, p2, (size_t) c)); } #ifndef _WIN32_WCE +#if (_MSC_VER < 1500) +# define vsnprintf _vsnprintf +#endif + static void Win32WarningHandler(const char* module, const char* fmt, va_list ap) { @@ -350,14 +377,17 @@ Win32WarningHandler(const char* module, const char* fmt, va_list ap) LPCTSTR szTitleText = "%s Warning"; LPCTSTR szDefaultModule = "LIBTIFF"; LPCTSTR szTmpModule = (module == NULL) ? szDefaultModule : module; - if ((szTitle = (LPTSTR)LocalAlloc(LMEM_FIXED, (strlen(szTmpModule) + - strlen(szTitleText) + strlen(fmt) + 128)*sizeof(char))) == NULL) + SIZE_T nBufSize = (strlen(szTmpModule) + + strlen(szTitleText) + strlen(fmt) + 256)*sizeof(char); + + if ((szTitle = (LPTSTR)LocalAlloc(LMEM_FIXED, nBufSize)) == NULL) return; sprintf(szTitle, szTitleText, szTmpModule); szTmp = szTitle + (strlen(szTitle)+2)*sizeof(char); - vsprintf(szTmp, fmt, ap); + vsnprintf(szTmp, nBufSize-(strlen(szTitle)+2)*sizeof(char), fmt, ap); MessageBoxA(GetFocus(), szTmp, szTitle, MB_OK | MB_ICONINFORMATION); LocalFree(szTitle); + return; #else if (module != NULL) @@ -378,12 +408,14 @@ Win32ErrorHandler(const char* module, const char* fmt, va_list ap) LPCTSTR szTitleText = "%s Error"; LPCTSTR szDefaultModule = "LIBTIFF"; LPCTSTR szTmpModule = (module == NULL) ? szDefaultModule : module; - if ((szTitle = (LPTSTR)LocalAlloc(LMEM_FIXED, (strlen(szTmpModule) + - strlen(szTitleText) + strlen(fmt) + 128)*sizeof(char))) == NULL) + SIZE_T nBufSize = (strlen(szTmpModule) + + strlen(szTitleText) + strlen(fmt) + 256)*sizeof(char); + + if ((szTitle = (LPTSTR)LocalAlloc(LMEM_FIXED, nBufSize)) == NULL) return; sprintf(szTitle, szTitleText, szTmpModule); szTmp = szTitle + (strlen(szTitle)+2)*sizeof(char); - vsprintf(szTmp, fmt, ap); + vsnprintf(szTmp, nBufSize-(strlen(szTitle)+2)*sizeof(char), fmt, ap); MessageBoxA(GetFocus(), szTmp, szTitle, MB_OK | MB_ICONEXCLAMATION); LocalFree(szTitle); return; diff --git a/dll/3rdparty/libtiff/tif_write.c b/dll/3rdparty/libtiff/tif_write.c index bd084181d0a..8792123ca06 100644 --- a/dll/3rdparty/libtiff/tif_write.c +++ b/dll/3rdparty/libtiff/tif_write.c @@ -1,26 +1,26 @@ -/* $Id: tif_write.c,v 1.22.2.5 2010-06-08 18:50:43 bfriesen Exp $ */ +/* $Id: tif_write.c,v 1.37 2012-08-13 22:10:17 fwarmerdam Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. * - * Permission to use, copy, modify, distribute, and sell this software and + * Permission to use, copy, modify, distribute, and sell this software and * its documentation for any purpose is hereby granted without fee, provided * that (i) the above copyright notices and this permission notice appear in * all copies of the software and related documentation, and (ii) the names of * Sam Leffler and Silicon Graphics may not be used in any advertising or * publicity relating to the software without the specific, prior written * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. */ @@ -32,26 +32,26 @@ #include "tiffiop.h" #include -#define STRIPINCR 20 /* expansion factor on strip array */ +#define STRIPINCR 20 /* expansion factor on strip array */ -#define WRITECHECKSTRIPS(tif, module) \ +#define WRITECHECKSTRIPS(tif, module) \ (((tif)->tif_flags&TIFF_BEENWRITING) || TIFFWriteCheck((tif),0,module)) -#define WRITECHECKTILES(tif, module) \ +#define WRITECHECKTILES(tif, module) \ (((tif)->tif_flags&TIFF_BEENWRITING) || TIFFWriteCheck((tif),1,module)) -#define BUFFERCHECK(tif) \ +#define BUFFERCHECK(tif) \ ((((tif)->tif_flags & TIFF_BUFFERSETUP) && tif->tif_rawdata) || \ - TIFFWriteBufferSetup((tif), NULL, (tsize_t) -1)) + TIFFWriteBufferSetup((tif), NULL, (tmsize_t) -1)) -static int TIFFGrowStrips(TIFF*, int, const char*); -static int TIFFAppendToStrip(TIFF*, tstrip_t, tidata_t, tsize_t); +static int TIFFGrowStrips(TIFF* tif, uint32 delta, const char* module); +static int TIFFAppendToStrip(TIFF* tif, uint32 strip, uint8* data, tmsize_t cc); int -TIFFWriteScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample) +TIFFWriteScanline(TIFF* tif, void* buf, uint32 row, uint16 sample) { static const char module[] = "TIFFWriteScanline"; register TIFFDirectory *td; int status, imagegrew = 0; - tstrip_t strip; + uint32 strip; if (!WRITECHECKSTRIPS(tif, module)) return (-1); @@ -62,6 +62,8 @@ TIFFWriteScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample) */ if (!BUFFERCHECK(tif)) return (-1); + tif->tif_flags |= TIFF_BUF4WRITE; /* not strictly sure this is right*/ + td = &tif->tif_dir; /* * Extend image length if needed @@ -69,8 +71,8 @@ TIFFWriteScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample) */ if (row >= td->td_imagelength) { /* extend image */ if (td->td_planarconfig == PLANARCONFIG_SEPARATE) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Can not change \"ImageLength\" when using separate planes"); + TIFFErrorExt(tif->tif_clientdata, module, + "Can not change \"ImageLength\" when using separate planes"); return (-1); } td->td_imagelength = row+1; @@ -81,9 +83,9 @@ TIFFWriteScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample) */ if (td->td_planarconfig == PLANARCONFIG_SEPARATE) { if (sample >= td->td_samplesperpixel) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "%d: Sample out of range, max %d", - sample, td->td_samplesperpixel); + TIFFErrorExt(tif->tif_clientdata, module, + "%lu: Sample out of range, max %lu", + (unsigned long) sample, (unsigned long) td->td_samplesperpixel); return (-1); } strip = sample*td->td_stripsperimage + row/td->td_rowsperstrip; @@ -112,7 +114,7 @@ TIFFWriteScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample) */ if (strip >= td->td_stripsperimage && imagegrew) td->td_stripsperimage = - TIFFhowmany(td->td_imagelength,td->td_rowsperstrip); + TIFFhowmany_32(td->td_imagelength,td->td_rowsperstrip); tif->tif_row = (strip % td->td_stripsperimage) * td->td_rowsperstrip; if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { @@ -161,10 +163,10 @@ TIFFWriteScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample) tif->tif_row = row; } - /* swab if needed - note that source buffer will be altered */ - tif->tif_postdecode( tif, (tidata_t) buf, tif->tif_scanlinesize ); + /* swab if needed - note that source buffer will be altered */ + tif->tif_postdecode( tif, (uint8*) buf, tif->tif_scanlinesize ); - status = (*tif->tif_encoderow)(tif, (tidata_t) buf, + status = (*tif->tif_encoderow)(tif, (uint8*) buf, tif->tif_scanlinesize, sample); /* we are now poised at the beginning of the next row */ @@ -178,15 +180,15 @@ TIFFWriteScanline(TIFF* tif, tdata_t buf, uint32 row, tsample_t sample) * * NB: Image length must be setup before writing. */ -tsize_t -TIFFWriteEncodedStrip(TIFF* tif, tstrip_t strip, tdata_t data, tsize_t cc) +tmsize_t +TIFFWriteEncodedStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc) { static const char module[] = "TIFFWriteEncodedStrip"; TIFFDirectory *td = &tif->tif_dir; - tsample_t sample; + uint16 sample; if (!WRITECHECKSTRIPS(tif, module)) - return ((tsize_t) -1); + return ((tmsize_t) -1); /* * Check strip array to make sure there's space. * We don't support dynamically growing files that @@ -198,14 +200,14 @@ TIFFWriteEncodedStrip(TIFF* tif, tstrip_t strip, tdata_t data, tsize_t cc) */ if (strip >= td->td_nstrips) { if (td->td_planarconfig == PLANARCONFIG_SEPARATE) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Can not grow image by strips when using separate planes"); - return ((tsize_t) -1); + TIFFErrorExt(tif->tif_clientdata, module, + "Can not grow image by strips when using separate planes"); + return ((tmsize_t) -1); } if (!TIFFGrowStrips(tif, 1, module)) - return ((tsize_t) -1); + return ((tmsize_t) -1); td->td_stripsperimage = - TIFFhowmany(td->td_imagelength, td->td_rowsperstrip); + TIFFhowmany_32(td->td_imagelength, td->td_rowsperstrip); } /* * Handle delayed allocation of data buffer. This @@ -213,43 +215,57 @@ TIFFWriteEncodedStrip(TIFF* tif, tstrip_t strip, tdata_t data, tsize_t cc) * info. */ if (!BUFFERCHECK(tif)) - return ((tsize_t) -1); + return ((tmsize_t) -1); + + tif->tif_flags |= TIFF_BUF4WRITE; tif->tif_curstrip = strip; + tif->tif_row = (strip % td->td_stripsperimage) * td->td_rowsperstrip; if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { if (!(*tif->tif_setupencode)(tif)) - return ((tsize_t) -1); + return ((tmsize_t) -1); tif->tif_flags |= TIFF_CODERSETUP; } - - tif->tif_rawcc = 0; - tif->tif_rawcp = tif->tif_rawdata; - if( td->td_stripbytecount[strip] > 0 ) + if( td->td_stripbytecount[strip] > 0 ) { + /* Make sure that at the first attempt of rewriting the tile, we will have */ + /* more bytes available in the output buffer than the previous byte count, */ + /* so that TIFFAppendToStrip() will detect the overflow when it is called the first */ + /* time if the new compressed tile is bigger than the older one. (GDAL #4771) */ + if( tif->tif_rawdatasize <= td->td_stripbytecount[strip] ) + { + if( !(TIFFWriteBufferSetup(tif, NULL, + (tmsize_t)TIFFroundup_64((uint64)(td->td_stripbytecount[strip] + 1), 1024))) ) + return ((tmsize_t)(-1)); + } + /* Force TIFFAppendToStrip() to consider placing data at end of file. */ tif->tif_curoff = 0; } - + + tif->tif_rawcc = 0; + tif->tif_rawcp = tif->tif_rawdata; + tif->tif_flags &= ~TIFF_POSTENCODE; - sample = (tsample_t)(strip / td->td_stripsperimage); + sample = (uint16)(strip / td->td_stripsperimage); if (!(*tif->tif_preencode)(tif, sample)) - return ((tsize_t) -1); + return ((tmsize_t) -1); /* swab if needed - note that source buffer will be altered */ - tif->tif_postdecode( tif, (tidata_t) data, cc ); + tif->tif_postdecode( tif, (uint8*) data, cc ); - if (!(*tif->tif_encodestrip)(tif, (tidata_t) data, cc, sample)) - return ((tsize_t) 0); + if (!(*tif->tif_encodestrip)(tif, (uint8*) data, cc, sample)) + return (0); if (!(*tif->tif_postencode)(tif)) - return ((tsize_t) -1); + return ((tmsize_t) -1); if (!isFillOrder(tif, td->td_fillorder) && (tif->tif_flags & TIFF_NOBITREV) == 0) TIFFReverseBits(tif->tif_rawdata, tif->tif_rawcc); if (tif->tif_rawcc > 0 && !TIFFAppendToStrip(tif, strip, tif->tif_rawdata, tif->tif_rawcc)) - return ((tsize_t) -1); + return ((tmsize_t) -1); tif->tif_rawcc = 0; tif->tif_rawcp = tif->tif_rawdata; return (cc); @@ -260,14 +276,14 @@ TIFFWriteEncodedStrip(TIFF* tif, tstrip_t strip, tdata_t data, tsize_t cc) * * NB: Image length must be setup before writing. */ -tsize_t -TIFFWriteRawStrip(TIFF* tif, tstrip_t strip, tdata_t data, tsize_t cc) +tmsize_t +TIFFWriteRawStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc) { static const char module[] = "TIFFWriteRawStrip"; TIFFDirectory *td = &tif->tif_dir; if (!WRITECHECKSTRIPS(tif, module)) - return ((tsize_t) -1); + return ((tmsize_t) -1); /* * Check strip array to make sure there's space. * We don't support dynamically growing files that @@ -279,9 +295,9 @@ TIFFWriteRawStrip(TIFF* tif, tstrip_t strip, tdata_t data, tsize_t cc) */ if (strip >= td->td_nstrips) { if (td->td_planarconfig == PLANARCONFIG_SEPARATE) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, - "Can not grow image by strips when using separate planes"); - return ((tsize_t) -1); + TIFFErrorExt(tif->tif_clientdata, module, + "Can not grow image by strips when using separate planes"); + return ((tmsize_t) -1); } /* * Watch out for a growing image. The value of @@ -290,26 +306,25 @@ TIFFWriteRawStrip(TIFF* tif, tstrip_t strip, tdata_t data, tsize_t cc) */ if (strip >= td->td_stripsperimage) td->td_stripsperimage = - TIFFhowmany(td->td_imagelength,td->td_rowsperstrip); + TIFFhowmany_32(td->td_imagelength,td->td_rowsperstrip); if (!TIFFGrowStrips(tif, 1, module)) - return ((tsize_t) -1); + return ((tmsize_t) -1); } tif->tif_curstrip = strip; tif->tif_row = (strip % td->td_stripsperimage) * td->td_rowsperstrip; - return (TIFFAppendToStrip(tif, strip, (tidata_t) data, cc) ? - cc : (tsize_t) -1); + return (TIFFAppendToStrip(tif, strip, (uint8*) data, cc) ? + cc : (tmsize_t) -1); } /* * Write and compress a tile of data. The * tile is selected by the (x,y,z,s) coordinates. */ -tsize_t -TIFFWriteTile(TIFF* tif, - tdata_t buf, uint32 x, uint32 y, uint32 z, tsample_t s) +tmsize_t +TIFFWriteTile(TIFF* tif, void* buf, uint32 x, uint32 y, uint32 z, uint16 s) { if (!TIFFCheckTile(tif, x, y, z, s)) - return (-1); + return ((tmsize_t)(-1)); /* * NB: A tile size of -1 is used instead of tif_tilesize knowing * that TIFFWriteEncodedTile will clamp this to the tile size. @@ -317,7 +332,7 @@ TIFFWriteTile(TIFF* tif, * after the output buffer is setup in TIFFWriteBufferSetup. */ return (TIFFWriteEncodedTile(tif, - TIFFComputeTile(tif, x, y, z, s), buf, (tsize_t) -1)); + TIFFComputeTile(tif, x, y, z, s), buf, (tmsize_t)(-1))); } /* @@ -332,20 +347,20 @@ TIFFWriteTile(TIFF* tif, * interface does not support automatically growing * the image on each write (as TIFFWriteScanline does). */ -tsize_t -TIFFWriteEncodedTile(TIFF* tif, ttile_t tile, tdata_t data, tsize_t cc) +tmsize_t +TIFFWriteEncodedTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc) { static const char module[] = "TIFFWriteEncodedTile"; TIFFDirectory *td; - tsample_t sample; + uint16 sample; if (!WRITECHECKTILES(tif, module)) - return ((tsize_t) -1); + return ((tmsize_t)(-1)); td = &tif->tif_dir; if (tile >= td->td_nstrips) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: Tile %lu out of range, max %lu", - tif->tif_name, (unsigned long) tile, (unsigned long) td->td_nstrips); - return ((tsize_t) -1); + TIFFErrorExt(tif->tif_clientdata, module, "Tile %lu out of range, max %lu", + (unsigned long) tile, (unsigned long) td->td_nstrips); + return ((tmsize_t)(-1)); } /* * Handle delayed allocation of data buffer. This @@ -353,37 +368,50 @@ TIFFWriteEncodedTile(TIFF* tif, ttile_t tile, tdata_t data, tsize_t cc) * directory information). */ if (!BUFFERCHECK(tif)) - return ((tsize_t) -1); + return ((tmsize_t)(-1)); + + tif->tif_flags |= TIFF_BUF4WRITE; tif->tif_curtile = tile; - tif->tif_rawcc = 0; - tif->tif_rawcp = tif->tif_rawdata; - - if( td->td_stripbytecount[tile] > 0 ) + if( td->td_stripbytecount[tile] > 0 ) { + /* Make sure that at the first attempt of rewriting the tile, we will have */ + /* more bytes available in the output buffer than the previous byte count, */ + /* so that TIFFAppendToStrip() will detect the overflow when it is called the first */ + /* time if the new compressed tile is bigger than the older one. (GDAL #4771) */ + if( tif->tif_rawdatasize <= td->td_stripbytecount[tile] ) + { + if( !(TIFFWriteBufferSetup(tif, NULL, + (tmsize_t)TIFFroundup_64((uint64)(td->td_stripbytecount[tile] + 1), 1024))) ) + return ((tmsize_t)(-1)); + } + /* Force TIFFAppendToStrip() to consider placing data at end of file. */ tif->tif_curoff = 0; } - + + tif->tif_rawcc = 0; + tif->tif_rawcp = tif->tif_rawdata; + /* * Compute tiles per row & per column to compute * current row and column */ - tif->tif_row = (tile % TIFFhowmany(td->td_imagelength, td->td_tilelength)) + tif->tif_row = (tile % TIFFhowmany_32(td->td_imagelength, td->td_tilelength)) * td->td_tilelength; - tif->tif_col = (tile % TIFFhowmany(td->td_imagewidth, td->td_tilewidth)) + tif->tif_col = (tile % TIFFhowmany_32(td->td_imagewidth, td->td_tilewidth)) * td->td_tilewidth; if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { if (!(*tif->tif_setupencode)(tif)) - return ((tsize_t) -1); + return ((tmsize_t)(-1)); tif->tif_flags |= TIFF_CODERSETUP; } tif->tif_flags &= ~TIFF_POSTENCODE; - sample = (tsample_t)(tile/td->td_stripsperimage); + sample = (uint16)(tile/td->td_stripsperimage); if (!(*tif->tif_preencode)(tif, sample)) - return ((tsize_t) -1); + return ((tmsize_t)(-1)); /* * Clamp write amount to the tile size. This is mostly * done so that callers can pass in some large number @@ -393,18 +421,18 @@ TIFFWriteEncodedTile(TIFF* tif, ttile_t tile, tdata_t data, tsize_t cc) cc = tif->tif_tilesize; /* swab if needed - note that source buffer will be altered */ - tif->tif_postdecode( tif, (tidata_t) data, cc ); + tif->tif_postdecode( tif, (uint8*) data, cc ); - if (!(*tif->tif_encodetile)(tif, (tidata_t) data, cc, sample)) - return ((tsize_t) 0); + if (!(*tif->tif_encodetile)(tif, (uint8*) data, cc, sample)) + return (0); if (!(*tif->tif_postencode)(tif)) - return ((tsize_t) -1); + return ((tmsize_t)(-1)); if (!isFillOrder(tif, td->td_fillorder) && (tif->tif_flags & TIFF_NOBITREV) == 0) - TIFFReverseBits((unsigned char *)tif->tif_rawdata, tif->tif_rawcc); + TIFFReverseBits((uint8*)tif->tif_rawdata, tif->tif_rawcc); if (tif->tif_rawcc > 0 && !TIFFAppendToStrip(tif, tile, tif->tif_rawdata, tif->tif_rawcc)) - return ((tsize_t) -1); + return ((tmsize_t)(-1)); tif->tif_rawcc = 0; tif->tif_rawcp = tif->tif_rawdata; return (cc); @@ -419,21 +447,21 @@ TIFFWriteEncodedTile(TIFF* tif, ttile_t tile, tdata_t data, tsize_t cc) * interface does not support automatically growing * the image on each write (as TIFFWriteScanline does). */ -tsize_t -TIFFWriteRawTile(TIFF* tif, ttile_t tile, tdata_t data, tsize_t cc) +tmsize_t +TIFFWriteRawTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc) { static const char module[] = "TIFFWriteRawTile"; if (!WRITECHECKTILES(tif, module)) - return ((tsize_t) -1); + return ((tmsize_t)(-1)); if (tile >= tif->tif_dir.td_nstrips) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: Tile %lu out of range, max %lu", - tif->tif_name, (unsigned long) tile, + TIFFErrorExt(tif->tif_clientdata, module, "Tile %lu out of range, max %lu", + (unsigned long) tile, (unsigned long) tif->tif_dir.td_nstrips); - return ((tsize_t) -1); + return ((tmsize_t)(-1)); } - return (TIFFAppendToStrip(tif, tile, (tidata_t) data, cc) ? - cc : (tsize_t) -1); + return (TIFFAppendToStrip(tif, tile, (uint8*) data, cc) ? + cc : (tmsize_t)(-1)); } #define isUnspecified(tif, f) \ @@ -455,18 +483,18 @@ TIFFSetupStrips(TIFF* tif) td->td_nstrips = td->td_stripsperimage; if (td->td_planarconfig == PLANARCONFIG_SEPARATE) td->td_stripsperimage /= td->td_samplesperpixel; - td->td_stripoffset = (uint32 *) - _TIFFmalloc(td->td_nstrips * sizeof (uint32)); - td->td_stripbytecount = (uint32 *) - _TIFFmalloc(td->td_nstrips * sizeof (uint32)); + td->td_stripoffset = (uint64 *) + _TIFFmalloc(td->td_nstrips * sizeof (uint64)); + td->td_stripbytecount = (uint64 *) + _TIFFmalloc(td->td_nstrips * sizeof (uint64)); if (td->td_stripoffset == NULL || td->td_stripbytecount == NULL) return (0); /* * Place data at the end-of-file * (by setting offsets to zero). */ - _TIFFmemset(td->td_stripoffset, 0, td->td_nstrips*sizeof (uint32)); - _TIFFmemset(td->td_stripbytecount, 0, td->td_nstrips*sizeof (uint32)); + _TIFFmemset(td->td_stripoffset, 0, td->td_nstrips*sizeof (uint64)); + _TIFFmemset(td->td_stripbytecount, 0, td->td_nstrips*sizeof (uint64)); TIFFSetFieldBit(tif, FIELD_STRIPOFFSETS); TIFFSetFieldBit(tif, FIELD_STRIPBYTECOUNTS); return (1); @@ -483,16 +511,17 @@ int TIFFWriteCheck(TIFF* tif, int tiles, const char* module) { if (tif->tif_mode == O_RDONLY) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: File not open for writing", - tif->tif_name); + TIFFErrorExt(tif->tif_clientdata, module, "File not open for writing"); return (0); } if (tiles ^ isTiled(tif)) { - TIFFErrorExt(tif->tif_clientdata, tif->tif_name, tiles ? + TIFFErrorExt(tif->tif_clientdata, module, tiles ? "Can not write tiles to a stripped image" : "Can not write scanlines to a tiled image"); return (0); } + + _TIFFFillStriles( tif ); /* * On the first write verify all the required information @@ -506,8 +535,7 @@ TIFFWriteCheck(TIFF* tif, int tiles, const char* module) */ if (!TIFFFieldSet(tif, FIELD_IMAGEDIMENSIONS)) { TIFFErrorExt(tif->tif_clientdata, module, - "%s: Must set \"ImageWidth\" before writing data", - tif->tif_name); + "Must set \"ImageWidth\" before writing data"); return (0); } if (tif->tif_dir.td_samplesperpixel == 1) { @@ -522,19 +550,27 @@ TIFFWriteCheck(TIFF* tif, int tiles, const char* module) } else { if (!TIFFFieldSet(tif, FIELD_PLANARCONFIG)) { TIFFErrorExt(tif->tif_clientdata, module, - "%s: Must set \"PlanarConfiguration\" before writing data", - tif->tif_name); + "Must set \"PlanarConfiguration\" before writing data"); return (0); } } if (tif->tif_dir.td_stripoffset == NULL && !TIFFSetupStrips(tif)) { tif->tif_dir.td_nstrips = 0; - TIFFErrorExt(tif->tif_clientdata, module, "%s: No space for %s arrays", - tif->tif_name, isTiled(tif) ? "tile" : "strip"); + TIFFErrorExt(tif->tif_clientdata, module, "No space for %s arrays", + isTiled(tif) ? "tile" : "strip"); return (0); } - tif->tif_tilesize = isTiled(tif) ? TIFFTileSize(tif) : (tsize_t) -1; + if (isTiled(tif)) + { + tif->tif_tilesize = TIFFTileSize(tif); + if (tif->tif_tilesize == 0) + return (0); + } + else + tif->tif_tilesize = (tmsize_t)(-1); tif->tif_scanlinesize = TIFFScanlineSize(tif); + if (tif->tif_scanlinesize == 0) + return (0); tif->tif_flags |= TIFF_BEENWRITING; return (1); } @@ -543,7 +579,7 @@ TIFFWriteCheck(TIFF* tif, int tiles, const char* module) * Setup the raw data buffer used for encoding. */ int -TIFFWriteBufferSetup(TIFF* tif, tdata_t bp, tsize_t size) +TIFFWriteBufferSetup(TIFF* tif, void* bp, tmsize_t size) { static const char module[] = "TIFFWriteBufferSetup"; @@ -554,7 +590,7 @@ TIFFWriteBufferSetup(TIFF* tif, tdata_t bp, tsize_t size) } tif->tif_rawdata = NULL; } - if (size == (tsize_t) -1) { + if (size == (tmsize_t)(-1)) { size = (isTiled(tif) ? tif->tif_tilesize : TIFFStripSize(tif)); /* @@ -567,14 +603,13 @@ TIFFWriteBufferSetup(TIFF* tif, tdata_t bp, tsize_t size) if (bp == NULL) { bp = _TIFFmalloc(size); if (bp == NULL) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: No space for output buffer", - tif->tif_name); + TIFFErrorExt(tif->tif_clientdata, module, "No space for output buffer"); return (0); } tif->tif_flags |= TIFF_MYBUFFER; } else tif->tif_flags &= ~TIFF_MYBUFFER; - tif->tif_rawdata = (tidata_t) bp; + tif->tif_rawdata = (uint8*) bp; tif->tif_rawdatasize = size; tif->tif_rawcc = 0; tif->tif_rawcp = tif->tif_rawdata; @@ -586,33 +621,35 @@ TIFFWriteBufferSetup(TIFF* tif, tdata_t bp, tsize_t size) * Grow the strip data structures by delta strips. */ static int -TIFFGrowStrips(TIFF* tif, int delta, const char* module) +TIFFGrowStrips(TIFF* tif, uint32 delta, const char* module) { - TIFFDirectory *td = &tif->tif_dir; - uint32 *new_stripoffset, *new_stripbytecount; + TIFFDirectory *td = &tif->tif_dir; + uint64* new_stripoffset; + uint64* new_stripbytecount; assert(td->td_planarconfig == PLANARCONFIG_CONTIG); - new_stripoffset = (uint32*)_TIFFrealloc(td->td_stripoffset, - (td->td_nstrips + delta) * sizeof (uint32)); - new_stripbytecount = (uint32*)_TIFFrealloc(td->td_stripbytecount, - (td->td_nstrips + delta) * sizeof (uint32)); + new_stripoffset = (uint64*)_TIFFrealloc(td->td_stripoffset, + (td->td_nstrips + delta) * sizeof (uint64)); + new_stripbytecount = (uint64*)_TIFFrealloc(td->td_stripbytecount, + (td->td_nstrips + delta) * sizeof (uint64)); if (new_stripoffset == NULL || new_stripbytecount == NULL) { if (new_stripoffset) _TIFFfree(new_stripoffset); if (new_stripbytecount) _TIFFfree(new_stripbytecount); td->td_nstrips = 0; - TIFFErrorExt(tif->tif_clientdata, module, "%s: No space to expand strip arrays", - tif->tif_name); + TIFFErrorExt(tif->tif_clientdata, module, "No space to expand strip arrays"); return (0); } td->td_stripoffset = new_stripoffset; td->td_stripbytecount = new_stripbytecount; _TIFFmemset(td->td_stripoffset + td->td_nstrips, - 0, delta*sizeof (uint32)); + 0, delta*sizeof (uint64)); _TIFFmemset(td->td_stripbytecount + td->td_nstrips, - 0, delta*sizeof (uint32)); + 0, delta*sizeof (uint64)); td->td_nstrips += delta; + tif->tif_flags |= TIFF_DIRTYDIRECT; + return (1); } @@ -620,21 +657,23 @@ TIFFGrowStrips(TIFF* tif, int delta, const char* module) * Append the data to the specified strip. */ static int -TIFFAppendToStrip(TIFF* tif, tstrip_t strip, tidata_t data, tsize_t cc) +TIFFAppendToStrip(TIFF* tif, uint32 strip, uint8* data, tmsize_t cc) { static const char module[] = "TIFFAppendToStrip"; TIFFDirectory *td = &tif->tif_dir; + uint64 m; + int64 old_byte_count = -1; if (td->td_stripoffset[strip] == 0 || tif->tif_curoff == 0) { assert(td->td_nstrips > 0); if( td->td_stripbytecount[strip] != 0 && td->td_stripoffset[strip] != 0 - && td->td_stripbytecount[strip] >= cc ) + && td->td_stripbytecount[strip] >= (uint64) cc ) { /* * There is already tile data on disk, and the new tile - * data we have to will fit in the same space. The only + * data we have will fit in the same space. The only * aspect of this that is risky is that there could be * more data to append to this strip before we are done * depending on how we are getting called. @@ -653,6 +692,7 @@ TIFFAppendToStrip(TIFF* tif, tstrip_t strip, tidata_t data, tsize_t cc) * write this strip. */ td->td_stripoffset[strip] = TIFFSeekFile(tif, 0, SEEK_END); + tif->tif_flags |= TIFF_DIRTYSTRIP; } tif->tif_curoff = td->td_stripoffset[strip]; @@ -660,16 +700,29 @@ TIFFAppendToStrip(TIFF* tif, tstrip_t strip, tidata_t data, tsize_t cc) /* * We are starting a fresh strip/tile, so set the size to zero. */ + old_byte_count = td->td_stripbytecount[strip]; td->td_stripbytecount[strip] = 0; } + m = tif->tif_curoff+cc; + if (!(tif->tif_flags&TIFF_BIGTIFF)) + m = (uint32)m; + if ((mtif_curoff)||(m<(uint64)cc)) + { + TIFFErrorExt(tif->tif_clientdata, module, "Maximum TIFF file size exceeded"); + return (0); + } if (!WriteOK(tif, data, cc)) { TIFFErrorExt(tif->tif_clientdata, module, "Write error at scanline %lu", (unsigned long) tif->tif_row); return (0); } - tif->tif_curoff = tif->tif_curoff+cc; + tif->tif_curoff = m; td->td_stripbytecount[strip] += cc; + + if( (int64) td->td_stripbytecount[strip] != old_byte_count ) + tif->tif_flags |= TIFF_DIRTYSTRIP; + return (1); } @@ -681,10 +734,10 @@ TIFFAppendToStrip(TIFF* tif, tstrip_t strip, tidata_t data, tsize_t cc) int TIFFFlushData1(TIFF* tif) { - if (tif->tif_rawcc > 0) { + if (tif->tif_rawcc > 0 && tif->tif_flags & TIFF_BUF4WRITE ) { if (!isFillOrder(tif, tif->tif_dir.td_fillorder) && (tif->tif_flags & TIFF_NOBITREV) == 0) - TIFFReverseBits((unsigned char *)tif->tif_rawdata, + TIFFReverseBits((uint8*)tif->tif_rawdata, tif->tif_rawcc); if (!TIFFAppendToStrip(tif, isTiled(tif) ? tif->tif_curtile : tif->tif_curstrip, diff --git a/dll/3rdparty/libtiff/tif_zip.c b/dll/3rdparty/libtiff/tif_zip.c index 15091f8daaf..f5aa2a9647a 100644 --- a/dll/3rdparty/libtiff/tif_zip.c +++ b/dll/3rdparty/libtiff/tif_zip.c @@ -1,4 +1,4 @@ -/* $Id: tif_zip.c,v 1.11.2.4 2010-06-08 18:50:43 bfriesen Exp $ */ +/* $Id: tif_zip.c,v 1.31 2011-01-06 16:00:23 fwarmerdam Exp $ */ /* * Copyright (c) 1995-1997 Sam Leffler @@ -65,41 +65,48 @@ * State block for each open TIFF * file using ZIP compression/decompression. */ -typedef struct { +typedef struct { TIFFPredictorState predict; - z_stream stream; - int zipquality; /* compression level */ - int state; /* state flags */ + z_stream stream; + int zipquality; /* compression level */ + int state; /* state flags */ #define ZSTATE_INIT_DECODE 0x01 #define ZSTATE_INIT_ENCODE 0x02 - TIFFVGetMethod vgetparent; /* super-class method */ - TIFFVSetMethod vsetparent; /* super-class method */ + TIFFVGetMethod vgetparent; /* super-class method */ + TIFFVSetMethod vsetparent; /* super-class method */ } ZIPState; -#define ZState(tif) ((ZIPState*) (tif)->tif_data) -#define DecoderState(tif) ZState(tif) -#define EncoderState(tif) ZState(tif) +#define ZState(tif) ((ZIPState*) (tif)->tif_data) +#define DecoderState(tif) ZState(tif) +#define EncoderState(tif) ZState(tif) -static int ZIPEncode(TIFF*, tidata_t, tsize_t, tsample_t); -static int ZIPDecode(TIFF*, tidata_t, tsize_t, tsample_t); +static int ZIPEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s); +static int ZIPDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s); + +static int +ZIPFixupTags(TIFF* tif) +{ + (void) tif; + return (1); +} static int ZIPSetupDecode(TIFF* tif) { - ZIPState* sp = DecoderState(tif); static const char module[] = "ZIPSetupDecode"; + ZIPState* sp = DecoderState(tif); assert(sp != NULL); /* if we were last encoding, terminate this mode */ if (sp->state & ZSTATE_INIT_ENCODE) { - deflateEnd(&sp->stream); - sp->state = 0; - } + deflateEnd(&sp->stream); + sp->state = 0; + } if (inflateInit(&sp->stream) != Z_OK) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: %s", tif->tif_name, sp->stream.msg); + TIFFErrorExt(tif->tif_clientdata, module, "%s", sp->stream.msg); return (0); } else { sp->state |= ZSTATE_INIT_DECODE; @@ -111,74 +118,100 @@ ZIPSetupDecode(TIFF* tif) * Setup state for decoding a strip. */ static int -ZIPPreDecode(TIFF* tif, tsample_t s) +ZIPPreDecode(TIFF* tif, uint16 s) { + static const char module[] = "ZIPPreDecode"; ZIPState* sp = DecoderState(tif); (void) s; assert(sp != NULL); - if( (sp->state & ZSTATE_INIT_DECODE) == 0 ) + if( (sp->state & ZSTATE_INIT_DECODE) == 0 ) tif->tif_setupdecode( tif ); sp->stream.next_in = tif->tif_rawdata; - sp->stream.avail_in = tif->tif_rawcc; + assert(sizeof(sp->stream.avail_in)==4); /* if this assert gets raised, + we need to simplify this code to reflect a ZLib that is likely updated + to deal with 8byte memory sizes, though this code will respond + apropriately even before we simplify it */ + sp->stream.avail_in = (uInt) tif->tif_rawcc; + if ((tmsize_t)sp->stream.avail_in != tif->tif_rawcc) + { + TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size"); + return (0); + } return (inflateReset(&sp->stream) == Z_OK); } static int -ZIPDecode(TIFF* tif, tidata_t op, tsize_t occ, tsample_t s) +ZIPDecode(TIFF* tif, uint8* op, tmsize_t occ, uint16 s) { - ZIPState* sp = DecoderState(tif); static const char module[] = "ZIPDecode"; + ZIPState* sp = DecoderState(tif); (void) s; assert(sp != NULL); - assert(sp->state == ZSTATE_INIT_DECODE); + assert(sp->state == ZSTATE_INIT_DECODE); + sp->stream.next_in = tif->tif_rawcp; + sp->stream.avail_in = (uInt) tif->tif_rawcc; + sp->stream.next_out = op; - sp->stream.avail_out = occ; + assert(sizeof(sp->stream.avail_out)==4); /* if this assert gets raised, + we need to simplify this code to reflect a ZLib that is likely updated + to deal with 8byte memory sizes, though this code will respond + apropriately even before we simplify it */ + sp->stream.avail_out = (uInt) occ; + if ((tmsize_t)sp->stream.avail_out != occ) + { + TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size"); + return (0); + } do { int state = inflate(&sp->stream, Z_PARTIAL_FLUSH); if (state == Z_STREAM_END) break; if (state == Z_DATA_ERROR) { TIFFErrorExt(tif->tif_clientdata, module, - "%s: Decoding error at scanline %d, %s", - tif->tif_name, tif->tif_row, sp->stream.msg); + "Decoding error at scanline %lu, %s", + (unsigned long) tif->tif_row, sp->stream.msg); if (inflateSync(&sp->stream) != Z_OK) return (0); continue; } if (state != Z_OK) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: zlib error: %s", - tif->tif_name, sp->stream.msg); + TIFFErrorExt(tif->tif_clientdata, module, "ZLib error: %s", + sp->stream.msg); return (0); } } while (sp->stream.avail_out > 0); if (sp->stream.avail_out != 0) { TIFFErrorExt(tif->tif_clientdata, module, - "%s: Not enough data at scanline %d (short %d bytes)", - tif->tif_name, tif->tif_row, sp->stream.avail_out); + "Not enough data at scanline %lu (short " TIFF_UINT64_FORMAT " bytes)", + (unsigned long) tif->tif_row, (TIFF_UINT64_T) sp->stream.avail_out); return (0); } + + tif->tif_rawcp = sp->stream.next_in; + tif->tif_rawcc = sp->stream.avail_in; + return (1); } static int ZIPSetupEncode(TIFF* tif) { - ZIPState* sp = EncoderState(tif); static const char module[] = "ZIPSetupEncode"; + ZIPState* sp = EncoderState(tif); assert(sp != NULL); if (sp->state & ZSTATE_INIT_DECODE) { - inflateEnd(&sp->stream); - sp->state = 0; - } + inflateEnd(&sp->stream); + sp->state = 0; + } if (deflateInit(&sp->stream, sp->zipquality) != Z_OK) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: %s", tif->tif_name, sp->stream.msg); + TIFFErrorExt(tif->tif_clientdata, module, "%s", sp->stream.msg); return (0); } else { sp->state |= ZSTATE_INIT_ENCODE; @@ -190,17 +223,27 @@ ZIPSetupEncode(TIFF* tif) * Reset encoding state at the start of a strip. */ static int -ZIPPreEncode(TIFF* tif, tsample_t s) +ZIPPreEncode(TIFF* tif, uint16 s) { + static const char module[] = "ZIPPreEncode"; ZIPState *sp = EncoderState(tif); (void) s; assert(sp != NULL); - if( sp->state != ZSTATE_INIT_ENCODE ) + if( sp->state != ZSTATE_INIT_ENCODE ) tif->tif_setupencode( tif ); sp->stream.next_out = tif->tif_rawdata; + assert(sizeof(sp->stream.avail_out)==4); /* if this assert gets raised, + we need to simplify this code to reflect a ZLib that is likely updated + to deal with 8byte memory sizes, though this code will respond + apropriately even before we simplify it */ sp->stream.avail_out = tif->tif_rawdatasize; + if ((tmsize_t)sp->stream.avail_out != tif->tif_rawdatasize) + { + TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size"); + return (0); + } return (deflateReset(&sp->stream) == Z_OK); } @@ -208,28 +251,37 @@ ZIPPreEncode(TIFF* tif, tsample_t s) * Encode a chunk of pixels. */ static int -ZIPEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) +ZIPEncode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) { - ZIPState *sp = EncoderState(tif); static const char module[] = "ZIPEncode"; + ZIPState *sp = EncoderState(tif); - assert(sp != NULL); - assert(sp->state == ZSTATE_INIT_ENCODE); + assert(sp != NULL); + assert(sp->state == ZSTATE_INIT_ENCODE); (void) s; sp->stream.next_in = bp; - sp->stream.avail_in = cc; + assert(sizeof(sp->stream.avail_in)==4); /* if this assert gets raised, + we need to simplify this code to reflect a ZLib that is likely updated + to deal with 8byte memory sizes, though this code will respond + apropriately even before we simplify it */ + sp->stream.avail_in = (uInt) cc; + if ((tmsize_t)sp->stream.avail_in != cc) + { + TIFFErrorExt(tif->tif_clientdata, module, "ZLib cannot deal with buffers this size"); + return (0); + } do { if (deflate(&sp->stream, Z_NO_FLUSH) != Z_OK) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: Encoder error: %s", - tif->tif_name, sp->stream.msg); + TIFFErrorExt(tif->tif_clientdata, module, "Encoder error: %s", + sp->stream.msg); return (0); } if (sp->stream.avail_out == 0) { tif->tif_rawcc = tif->tif_rawdatasize; TIFFFlushData1(tif); sp->stream.next_out = tif->tif_rawdata; - sp->stream.avail_out = tif->tif_rawdatasize; + sp->stream.avail_out = (uInt) tif->tif_rawdatasize; /* this is a safe typecast, as check is made already in ZIPPreEncode */ } } while (sp->stream.avail_in > 0); return (1); @@ -242,8 +294,8 @@ ZIPEncode(TIFF* tif, tidata_t bp, tsize_t cc, tsample_t s) static int ZIPPostEncode(TIFF* tif) { - ZIPState *sp = EncoderState(tif); static const char module[] = "ZIPPostEncode"; + ZIPState *sp = EncoderState(tif); int state; sp->stream.avail_in = 0; @@ -252,19 +304,18 @@ ZIPPostEncode(TIFF* tif) switch (state) { case Z_STREAM_END: case Z_OK: - if ((int)sp->stream.avail_out != (int)tif->tif_rawdatasize) - { - tif->tif_rawcc = - tif->tif_rawdatasize - sp->stream.avail_out; - TIFFFlushData1(tif); - sp->stream.next_out = tif->tif_rawdata; - sp->stream.avail_out = tif->tif_rawdatasize; - } - break; + if ((tmsize_t)sp->stream.avail_out != tif->tif_rawdatasize) + { + tif->tif_rawcc = tif->tif_rawdatasize - sp->stream.avail_out; + TIFFFlushData1(tif); + sp->stream.next_out = tif->tif_rawdata; + sp->stream.avail_out = (uInt) tif->tif_rawdatasize; /* this is a safe typecast, as check is made already in ZIPPreEncode */ + } + break; default: - TIFFErrorExt(tif->tif_clientdata, module, "%s: zlib error: %s", - tif->tif_name, sp->stream.msg); - return (0); + TIFFErrorExt(tif->tif_clientdata, module, "ZLib error: %s", + sp->stream.msg); + return (0); } } while (state != Z_STREAM_END); return (1); @@ -283,11 +334,11 @@ ZIPCleanup(TIFF* tif) tif->tif_tagmethods.vsetfield = sp->vsetparent; if (sp->state & ZSTATE_INIT_ENCODE) { - deflateEnd(&sp->stream); - sp->state = 0; - } else if( sp->state & ZSTATE_INIT_DECODE) { - inflateEnd(&sp->stream); - sp->state = 0; + deflateEnd(&sp->stream); + sp->state = 0; + } else if( sp->state & ZSTATE_INIT_DECODE) { + inflateEnd(&sp->stream); + sp->state = 0; } _TIFFfree(sp); tif->tif_data = NULL; @@ -296,19 +347,19 @@ ZIPCleanup(TIFF* tif) } static int -ZIPVSetField(TIFF* tif, ttag_t tag, va_list ap) +ZIPVSetField(TIFF* tif, uint32 tag, va_list ap) { - ZIPState* sp = ZState(tif); static const char module[] = "ZIPVSetField"; + ZIPState* sp = ZState(tif); switch (tag) { case TIFFTAG_ZIPQUALITY: - sp->zipquality = va_arg(ap, int); + sp->zipquality = (int) va_arg(ap, int); if ( sp->state&ZSTATE_INIT_ENCODE ) { if (deflateParams(&sp->stream, sp->zipquality, Z_DEFAULT_STRATEGY) != Z_OK) { - TIFFErrorExt(tif->tif_clientdata, module, "%s: zlib error: %s", - tif->tif_name, sp->stream.msg); + TIFFErrorExt(tif->tif_clientdata, module, "ZLib error: %s", + sp->stream.msg); return (0); } } @@ -320,7 +371,7 @@ ZIPVSetField(TIFF* tif, ttag_t tag, va_list ap) } static int -ZIPVGetField(TIFF* tif, ttag_t tag, va_list ap) +ZIPVGetField(TIFF* tif, uint32 tag, va_list ap) { ZIPState* sp = ZState(tif); @@ -334,9 +385,8 @@ ZIPVGetField(TIFF* tif, ttag_t tag, va_list ap) return (1); } -static const TIFFFieldInfo zipFieldInfo[] = { - { TIFFTAG_ZIPQUALITY, 0, 0, TIFF_ANY, FIELD_PSEUDO, - TRUE, FALSE, "" }, +static const TIFFField zipFields[] = { + { TIFFTAG_ZIPQUALITY, 0, 0, TIFF_ANY, 0, TIFF_SETGET_INT, TIFF_SETGET_UNDEFINED, FIELD_PSEUDO, TRUE, FALSE, "", NULL }, }; int @@ -351,8 +401,7 @@ TIFFInitZIP(TIFF* tif, int scheme) /* * Merge codec-specific tag information. */ - if (!_TIFFMergeFieldInfo(tif, zipFieldInfo, - TIFFArrayCount(zipFieldInfo))) { + if (!_TIFFMergeFields(tif, zipFields, TIFFArrayCount(zipFields))) { TIFFErrorExt(tif->tif_clientdata, module, "Merging Deflate codec-specific tags failed"); return 0; @@ -361,7 +410,7 @@ TIFFInitZIP(TIFF* tif, int scheme) /* * Allocate state block so tag methods have storage to record values. */ - tif->tif_data = (tidata_t) _TIFFmalloc(sizeof (ZIPState)); + tif->tif_data = (uint8*) _TIFFmalloc(sizeof (ZIPState)); if (tif->tif_data == NULL) goto bad; sp = ZState(tif); @@ -385,11 +434,12 @@ TIFFInitZIP(TIFF* tif, int scheme) /* * Install codec methods. */ + tif->tif_fixuptags = ZIPFixupTags; tif->tif_setupdecode = ZIPSetupDecode; tif->tif_predecode = ZIPPreDecode; tif->tif_decoderow = ZIPDecode; tif->tif_decodestrip = ZIPDecode; - tif->tif_decodetile = ZIPDecode; + tif->tif_decodetile = ZIPDecode; tif->tif_setupencode = ZIPSetupEncode; tif->tif_preencode = ZIPPreEncode; tif->tif_postencode = ZIPPostEncode; diff --git a/dll/3rdparty/libxslt/AUTHORS b/dll/3rdparty/libxslt/AUTHORS index 094ebbc91f8..0379b6d6b65 100644 --- a/dll/3rdparty/libxslt/AUTHORS +++ b/dll/3rdparty/libxslt/AUTHORS @@ -5,7 +5,7 @@ Daniel Veillard: Used to work at W3C, now Red Hat co-chair of W3C XML Linking WG invited expert on the W3C XML Core WG - Author of libxml upon which this library is based. + Author of libxml2 upon which this library is based. Bjorn Reese: breese@users.sourceforge.net @@ -18,3 +18,46 @@ William Brack Thomas Broyer Igor Zlatkovic for the Windows port + +Patches gently provided by a multitude of people : + +Abhishek Arya +Ben Walton +Bjorn Reese +C. M. Sperberg-McQueen +Colin Walters +Daniel Mustieles +Daniel Richard G +Darin Adler +ÉRDI Gergo +Fatih Demir +Federico Mena Quintero +Frederic Crozat +Hao Hu +Havoc Pennington +IlyaS +jacob berkman +Jason Viers +Jérôme Carretero +Joachim Breitner +Johan Dahlin +John Fleck +Jose Maria Celorio +Julio M. Merino Vidal +Kasimier T. Buchcik +Kjartan Maraas +Laurence Rowe +Malcolm Purvis +Martin +Michael Bonfils +Mike Hommey +money_seshu Dronamraju +Nick Wellnhofer +Nix +Pedro F. Giffuni +Peter Williams +Rob Richards +Roumen Petrov +Stefan Kost +Tomasz Kłoczko +Chris Evans diff --git a/dll/3rdparty/libxslt/CMakeLists.txt b/dll/3rdparty/libxslt/CMakeLists.txt index 2ddadd2a382..cb32e009943 100644 --- a/dll/3rdparty/libxslt/CMakeLists.txt +++ b/dll/3rdparty/libxslt/CMakeLists.txt @@ -1,5 +1,6 @@ -include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +include_directories(${CMAKE_CURRENT_SOURCE_DIR} + ${REACTOS_SOURCE_DIR}/include/reactos/libs/libxslt) add_definitions( -DHAVE_CONFIG_H diff --git a/dll/3rdparty/libxslt/Makefile.am b/dll/3rdparty/libxslt/Makefile.am index bead72ce44e..d4619d222b3 100644 --- a/dll/3rdparty/libxslt/Makefile.am +++ b/dll/3rdparty/libxslt/Makefile.am @@ -1,4 +1,6 @@ -INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/libxslt $(LIBXML_CFLAGS) +AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/libxslt + +AM_CFLAGS = $(LIBXML_CFLAGS) lib_LTLIBRARIES = libxslt.la @@ -58,11 +60,11 @@ else LIBXSLT_VERSION_SCRIPT = endif -libxslt_la_LIBADD = $(EXTRA_LIBS) +libxslt_la_LIBADD = $(LIBXML_LIBS) $(EXTRA_LIBS) libxslt_la_LDFLAGS = \ $(WIN32_EXTRA_LDFLAGS) \ $(LIBXSLT_VERSION_SCRIPT) \ - -version-info @LIBXSLT_VERSION_INFO@ + -version-info $(LIBXSLT_VERSION_INFO) man_MANS = libxslt.3 @@ -72,4 +74,4 @@ xsltproc: all @(cd ../xsltproc ; $(MAKE)) install-exec-hook: - $(mkinstalldirs) "$(DESTDIR)$(libdir)/libxslt-plugins" + $(MKDIR_P) "$(DESTDIR)$(libdir)/libxslt-plugins" diff --git a/dll/3rdparty/libxslt/Makefile.in b/dll/3rdparty/libxslt/Makefile.in index 8cba338c42e..e0a998bb1b8 100644 --- a/dll/3rdparty/libxslt/Makefile.in +++ b/dll/3rdparty/libxslt/Makefile.in @@ -1,9 +1,9 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. +# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -17,6 +17,23 @@ VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ @@ -68,17 +85,26 @@ am__nobase_list = $(am__nobase_strip_setup); \ am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man3dir)" \ "$(DESTDIR)$(xsltincdir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = -libxslt_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +libxslt_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_libxslt_la_OBJECTS = attrvt.lo xslt.lo xsltlocale.lo xsltutils.lo \ pattern.lo templates.lo variables.lo keys.lo numbers.lo \ extensions.lo extra.lo functions.lo namespaces.lo imports.lo \ attributes.lo documents.lo preproc.lo transform.lo security.lo libxslt_la_OBJECTS = $(am_libxslt_la_OBJECTS) -libxslt_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +libxslt_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libxslt_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) @@ -87,15 +113,33 @@ am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libxslt_la_SOURCES) DIST_SOURCES = $(libxslt_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac man3dir = $(mandir)/man3 NROFF = nroff MANS = $(man_MANS) @@ -105,6 +149,7 @@ CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ @@ -171,6 +216,7 @@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MV = @MV@ M_LIBS = @M_LIBS@ @@ -185,12 +231,14 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PYTHON = @PYTHON@ PYTHONSODV = @PYTHONSODV@ PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LIBS = @PYTHON_LIBS@ PYTHON_SITE_PACKAGES = @PYTHON_SITE_PACKAGES@ PYTHON_SUBDIR = @PYTHON_SUBDIR@ PYTHON_VERSION = @PYTHON_VERSION@ @@ -200,7 +248,6 @@ RM = @RM@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ -STATIC_BINARIES = @STATIC_BINARIES@ STRIP = @STRIP@ TAR = @TAR@ THREAD_LIBS = @THREAD_LIBS@ @@ -227,6 +274,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ @@ -259,7 +307,6 @@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ @@ -276,7 +323,8 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/libxslt $(LIBXML_CFLAGS) +AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/libxslt +AM_CFLAGS = $(LIBXML_CFLAGS) lib_LTLIBRARIES = libxslt.la xsltincdir = $(includedir)/libxslt xsltinc_HEADERS = \ @@ -329,11 +377,11 @@ libxslt_la_SOURCES = \ @USE_VERSION_SCRIPT_FALSE@LIBXSLT_VERSION_SCRIPT = @USE_VERSION_SCRIPT_TRUE@LIBXSLT_VERSION_SCRIPT = $(VERSION_SCRIPT_FLAGS)$(srcdir)/libxslt.syms -libxslt_la_LIBADD = $(EXTRA_LIBS) +libxslt_la_LIBADD = $(LIBXML_LIBS) $(EXTRA_LIBS) libxslt_la_LDFLAGS = \ $(WIN32_EXTRA_LDFLAGS) \ $(LIBXSLT_VERSION_SCRIPT) \ - -version-info @LIBXSLT_VERSION_INFO@ + -version-info $(LIBXSLT_VERSION_INFO) man_MANS = libxslt.3 EXTRA_DIST = $(man_MANS) trio.h triodef.h libxslt.syms @@ -377,7 +425,6 @@ xsltwin32config.h: $(top_builddir)/config.status $(srcdir)/xsltwin32config.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ @@ -385,6 +432,8 @@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) else :; fi; \ done; \ test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } @@ -406,8 +455,8 @@ clean-libLTLIBRARIES: echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done -libxslt.la: $(libxslt_la_OBJECTS) $(libxslt_la_DEPENDENCIES) - $(libxslt_la_LINK) -rpath $(libdir) $(libxslt_la_OBJECTS) $(libxslt_la_LIBADD) $(LIBS) +libxslt.la: $(libxslt_la_OBJECTS) $(libxslt_la_DEPENDENCIES) $(EXTRA_libxslt_la_DEPENDENCIES) + $(AM_V_CCLD)$(libxslt_la_LINK) -rpath $(libdir) $(libxslt_la_OBJECTS) $(libxslt_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -436,25 +485,25 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsltutils.Plo@am__quote@ .c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo @@ -463,11 +512,18 @@ clean-libtool: -rm -rf .libs _libs install-man3: $(man_MANS) @$(NORMAL_INSTALL) - test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)" - @list=''; test -n "$(man3dir)" || exit 0; \ - { for i in $$list; do echo "$$i"; done; \ - l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ - sed -n '/\.3[a-z]*$$/p'; \ + @list1=''; \ + list2='$(man_MANS)'; \ + test -n "$(man3dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.3[a-z]*$$/p'; \ + fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ @@ -496,13 +552,14 @@ uninstall-man3: sed -n '/\.3[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - test -z "$$files" || { \ - echo " ( cd '$(DESTDIR)$(man3dir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(man3dir)" && rm -f $$files; } + dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir) install-xsltincHEADERS: $(xsltinc_HEADERS) @$(NORMAL_INSTALL) - test -z "$(xsltincdir)" || $(MKDIR_P) "$(DESTDIR)$(xsltincdir)" @list='$(xsltinc_HEADERS)'; test -n "$(xsltincdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(xsltincdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(xsltincdir)" || exit 1; \ + fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ @@ -516,9 +573,7 @@ uninstall-xsltincHEADERS: @$(NORMAL_UNINSTALL) @list='$(xsltinc_HEADERS)'; test -n "$(xsltincdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(xsltincdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(xsltincdir)" && rm -f $$files + dir='$(DESTDIR)$(xsltincdir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ @@ -632,10 +687,15 @@ install-am: all-am installcheck: installcheck-am install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi mostlyclean-generic: clean-generic: @@ -745,7 +805,7 @@ xsltproc: all @(cd ../xsltproc ; $(MAKE)) install-exec-hook: - $(mkinstalldirs) "$(DESTDIR)$(libdir)/libxslt-plugins" + $(MKDIR_P) "$(DESTDIR)$(libdir)/libxslt-plugins" # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/dll/3rdparty/libxslt/NEWS b/dll/3rdparty/libxslt/NEWS index de868e57bfd..cbc1c5ed973 100644 --- a/dll/3rdparty/libxslt/NEWS +++ b/dll/3rdparty/libxslt/NEWS @@ -4,13 +4,165 @@ Note that this is automatically generated from the news webpage at: http://xmlsoft.org/XSLT/news.html -The change log at -ChangeLog.html - describes the recents commits -to the SVN at -http://svn.gnome.org/viewcvs/libxslt/trunk/ - code base.Those are the public releases made: -1.1.24: May 13 20088: +See the git page at +http://git.gnome.org/browse/libxslt/ + +to get a description of the recent commits.Those are the public releases made: +1.1.27: Sep 12 2012: + - Portability: + xincludestyle wasn't protected with LIBXML_XINCLUDE_ENABLED (Michael Bonfils), + Portability fix for testThreads.c (IlyaS), + FreeBSD portability fixes (Pedro F. Giffuni), + check for gmtime - on mingw* hosts will enable date-time function (Roumen Petrov), + use only native crypto-API for mingw* hosts (Roumen Petrov), + autogen: Only check for libtoolize (Colin Walters), + minimal mingw support (Roumen Petrov), + configure: acconfig.h is deprecated since autoconf-2.50 (Stefan Kost), + Fix a small out of tree compilation issue (Hao Hu), + Fix python generator to not use deprecated xmllib (Daniel Veillard), + link python module with python library (Frederic Crozat) + + - Documentation: + Tiny doc improvement (Daniel Veillard), + Various documentation fixes for docs on internals (C. M. Sperberg-McQueen) + + - Bug fixes: + Report errors on variable use in key (Daniel Veillard), + The XSLT namespace string is a constant one (Daniel Veillard), + Fix handling of names in xsl:attribute (Nick Wellnhofer), + Reserved namespaces in xsl:element and xsl:attribute (Nick Wellnhofer), + Null-terminate result string of cry:rc4_decrypt (Nick Wellnhofer), + EXSLT date normalization fix (James Muscat), + Exit after compilation of invalid func:result (Nick Wellnhofer), + Fix for EXSLT func:function (Nick Wellnhofer), + Rewrite EXSLT string:replace to be conformant (Nick Wellnhofer), + Avoid a heap use after free error (Chris Evans), + Fix a dictionary string usage (Chris Evans), + Output should not include extraneous newlines when indent is off (Laurence Rowe), + document('') fails to return stylesheets parsed from memory (Jason Viers), + xsltproc should return an error code if xinclude fails (Malcolm Purvis), + Forwards-compatible processing of unknown top level elements (Nick Wellnhofer), + Fix system-property with unknown namespace (Nick Wellnhofer), + Hardening of code checking node types in EXSLT (Daniel Veillard), + Hardening of code checking node types in various entry point (Daniel Veillard), + Cleanup of the pattern compilation code (Daniel Veillard), + Fix default template processing on namespace nodes (Daniel Veillard), + Fix a bug in selecting XSLT elements (Daniel Veillard), + Fixed bug #616839 (Daniel Mustieles), + Fix some case of pattern parsing errors (Abhishek Arya), + preproc: fix the build (Stefan Kost), + Fix a memory leak with xsl:number (Daniel Veillard), + Fix a problem with ESXLT date:add() with January (money_seshu Dronamraju), + Fix a memory leak if compiled with Windows locale support (Daniel Veillard), + Fix generate-id() to not expose object addresses (Daniel Veillard), + Fix curlies support in literals for non-compiled AVTs (Nick Wellnhofer), + Allow whitespace in xsl:variable with select (Nick Wellnhofer), + Small fixes to locale code (Nick Wellnhofer), + Fix bug 602515 (Nick Wellnhofer), + Fix popping of vars in xsltCompilerNodePop (Nick Wellnhofer), + Fix direct pattern matching bug (Nick Wellnhofer) + + - Improvements: + Add the saxon:systemId extension (Mike Hommey), + Add an append mode to document output (Daniel Veillard), + Add new tests to EXTRA_DIST (Nick Wellnhofer), + Test for bug #680920 (Nick Wellnhofer), + fix regresson in Various "make distcheck" and other fixes (Roumen Petrov), + Various "make distcheck" and other fixes (Daniel Richard G), + Fix portability to upcoming libxml2-2.9.0 (Daniel Veillard), + Adding --system flag support to autogen.sh (Daniel Veillard), + Allow per-context override of xsltMaxDepth, introduce xsltMaxVars (Jrme Carretero), + autogen.sh: Honor NOCONFIGURE environment variable (Colin Walters), + configure: support silent automake rules if possible (Stefan Kost), + Precompile patterns in xsl:number (Nick Wellnhofer), + Fix some warnings in the refactored code (Nick Wellnhofer), + Adding new generated files (Daniel Veillard), + profiling: add callgraph report (Stefan Kost) + + - Cleanups: + Big space and tabs cleanup (Daniel Veillard), + Fix authors list (Daniel Veillard), + Cleanups some of the test makefiles (Daniel Richard), + Remove .cvsignore files which are not needed anymore (Daniel Veillard), + Cleanup some misplaced spaces and tabs (Daniel Veillard), + Augment list of ignored files (Daniel Veillard), + configure: remove checks for isinf and isnan as those are not used anyway (Stefan Kost), + Point to GIT for source code and a bit of cleanup (Daniel Veillard), + Get rid of specific build setup and STATIC_BINARIES (Daniel Veillard) + + + +1.1.26: Sep 24 2009: + - Improvement: + Add xsltProcessOneNode to exported symbols for lxml (Daniel Veillard) + + - Bug fixes: + Fix an idness generation problem (Daniel Veillard), + 595612 Try to fix some locking problems (Daniel Veillard), + Fix a crash on misformed imported stylesheets (Daniel Veillard) + + + +1.1.25: Sep 17 2009: + - Features: + Add API versioning and various cleanups (Daniel Veillard), + xsl:sort lang support using the locale (Nick Wellnhofer and Roumen Petrov) + + - Documentation: + Fix the download links for Solaris (Daniel Veillard), + Fix makefile and spec file to include doc in rpm (Daniel Veillard) + + - Portability: + Make sure testThreads is linked with pthreads (Daniel Veillard), + Fix potential crash on debug of extensions Solaris (Ben Walton), + applied patch from Roumen Petrov for mingw cross compilation problems (Roumen Petrov), + patch from Richard Jones to build shared libs with MinGW cross-compiler (Richard Jones), + fix include path when compiling with MinGW (Roumen Petrov), + portability fixes ( Nick Wellnhofer and Roumen Petrov) + + - Bug fixes: + Big fixes of pattern compilations (Nick Wellnhofer), + Fix uses of xmlAddChild for error handling (Daniel Veillard), + Detect deep recusion on function calls (Daniel Veillard), + Avoid an error in namespace generation (Martin), + Fix importing of encoding from included stylesheets (Nick Wellnhofer), + Fix problems with embedded stylesheets and namespaces (Martin), + QName parsing fix for patterns (Martin), + Crash compiling stylesheet with DTD (Martin), + Fix xsl:strip-space with namespace and wildcard (Nick Wellnhofer), + Fix a mutex deadlock on unregistered extensions (Nix), + 567192 xsltproc --output option ignore --xinclude (Joachim Breitner), + Fix redundant headers in list (Daniel Veillard), + 134754 Configure's --with-html-dir related fixes (Julio M. Merino Vidal), + 305913 a serious problem in extensions reentrancy (Daniel Veillard), + Fix an idness issue when building the tree (Daniel Veillard), + Fixed indexing error reported by Ron Burk on the mailing list. (William M. Brack), + prevent some unchecked pointer accesses (Jake Goulding), + fix for CVE-2008-2935 libexslt RC4 encryption/decryption functions Daniel (Daniel Veillard), + avoid a quadratic behaviour when hitting duplicates (Daniel Veillard), + 544829 fixed option --with-debugger (Arun Ragnavan), + 541965 fixed incorrect argument popping in exsltMathAtan2Function (William M. Brack), + fix problem with string check for element-available (Ron Burk), + 539741 added code to handle literal within an AVT (William M. Brack) + + - Improvements: + Allow use of EXSLT outside XSLT (Martin), + Support Esperanto locale (Nick Wellnhofer), + Change how attributes are copied for id and speed (Daniel Veillard), + Add API versioning and various cleanups (Daniel Veillard), + Adding a test program to check thread reentrancy (Daniel Veillard), + big patch from finishing xsl:sort lang support (Roumen Petrov), + add xsl:sort lang support using the locale (Nick Wellnhofer) + + - Cleanups: + Label xsltProcessOneNode as static (Daniel Veillard), + git setup (Daniel Veillard), + fixed typo detected by new libxml2 code (William M. Brack), + xsltExtFunctionLookup was defined but never implemented (Ralf Junker) + + + +1.1.24: May 13 2008: - Documentation: man page fix (Vincent Lefevre). - Bug fixes: pattern bug fix, key initialization problems, exclusion of unknown namespaced element on top of stylesheets, python generator diff --git a/dll/3rdparty/libxslt/README b/dll/3rdparty/libxslt/README index f1e64556708..85bf80e5a44 100644 --- a/dll/3rdparty/libxslt/README +++ b/dll/3rdparty/libxslt/README @@ -21,4 +21,4 @@ required and justified. Daniel Veillard -$Id: README,v 1.7 2003/02/04 17:20:01 veillard Exp $ +$Id$ diff --git a/dll/3rdparty/libxslt/attributes.c b/dll/3rdparty/libxslt/attributes.c index ce47df775c6..2fa86e3c963 100644 --- a/dll/3rdparty/libxslt/attributes.c +++ b/dll/3rdparty/libxslt/attributes.c @@ -140,7 +140,7 @@ xsltFreeAttrElem(xsltAttrElemPtr attr) { static void xsltFreeAttrElemList(xsltAttrElemPtr list) { xsltAttrElemPtr next; - + while (list != NULL) { next = list->next; xsltFreeAttrElem(list); @@ -171,7 +171,7 @@ xsltAddAttrElemList(xsltAttrElemPtr list, xmlNodePtr attr) { if (list == NULL) return(xsltNewAttrElem(attr)); cur = list; - while (cur != NULL) { + while (cur != NULL) { next = cur->next; if (cur->attr == attr) return(cur); @@ -293,7 +293,7 @@ xsltParseStylesheetAttributeSet(xsltStylesheetPtr style, xmlNodePtr cur) { xmlNodePtr child; xsltAttrElemPtr attrItems; - if ((cur == NULL) || (style == NULL)) + if ((cur == NULL) || (style == NULL) || (cur->type != XML_ELEMENT_NODE)) return; value = xmlGetNsProp(cur, (const xmlChar *)"name", NULL); @@ -375,7 +375,7 @@ xsltParseStylesheetAttributeSet(xsltStylesheetPtr style, xmlNodePtr cur) { attrItems = curAttr; goto next_child; } - if (curAttr->next == NULL) + if (curAttr->next == NULL) curAttr->next = xsltNewAttrElem(child); curAttr = nextAttr; } @@ -405,7 +405,7 @@ next_child: /* * Process attribue "use-attribute-sets". */ - /* TODO check recursion */ + /* TODO check recursion */ value = xmlGetNsProp(cur, (const xmlChar *)"use-attribute-sets", NULL); if (value != NULL) { @@ -422,7 +422,7 @@ next_child: const xmlChar *ncname2 = NULL; const xmlChar *prefix2 = NULL; xsltAttrElemPtr refAttrItems; - + #ifdef WITH_XSLT_DEBUG_ATTRIBUTES xsltGenericDebug(xsltGenericDebugContext, "xsl:attribute-set : %s adds use %s\n", ncname, curval); @@ -605,7 +605,7 @@ xsltResolveStylesheetAttributeSet(xsltStylesheetPtr style) { #endif style->attributeSets = xmlHashCreate(10); } - xmlHashScanFull(cur->attributeSets, + xmlHashScanFull(cur->attributeSets, (xmlHashScannerFull) xsltMergeSASCallback, style); /* * the attribute lists have either been migrated to style @@ -621,7 +621,7 @@ xsltResolveStylesheetAttributeSet(xsltStylesheetPtr style) { * Then resolve all the references and computes the resulting sets */ if (style->attributeSets != NULL) { - xmlHashScanFull(style->attributeSets, + xmlHashScanFull(style->attributeSets, (xmlHashScannerFull) xsltResolveSASCallback, style); } } @@ -645,21 +645,22 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, { #ifdef XSLT_REFACTORED xsltStyleItemAttributePtr comp = - (xsltStyleItemAttributePtr) castedComp; + (xsltStyleItemAttributePtr) castedComp; #else xsltStylePreCompPtr comp = castedComp; #endif xmlNodePtr targetElem; - xmlChar *prop = NULL; + xmlChar *prop = NULL; const xmlChar *name = NULL, *prefix = NULL, *nsName = NULL; xmlChar *value = NULL; xmlNsPtr ns = NULL; - xmlAttrPtr attr; + xmlAttrPtr attr; - if ((ctxt == NULL) || (contextNode == NULL) || (inst == NULL)) + if ((ctxt == NULL) || (contextNode == NULL) || (inst == NULL) || + (inst->type != XML_ELEMENT_NODE) ) return; - /* + /* * A comp->has_name == 0 indicates that we need to skip this instruction, * since it was evaluated to be invalid already during compilation. */ @@ -689,7 +690,7 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, * So report an internal error? */ if (ctxt->insert == NULL) - return; + return; /* * SPEC XSLT 1.0: * "Adding an attribute to a node that is not an element; @@ -701,7 +702,7 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, targetElem = ctxt->insert; if (targetElem->type != XML_ELEMENT_NODE) return; - + /* * SPEC XSLT 1.0: * "Adding an attribute to an element after children have been added @@ -727,7 +728,7 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, /* * Process the name * ---------------- - */ + */ #ifdef WITH_DEBUGGER if (ctxt->debugStatus != XSLT_DEBUG_NONE) @@ -749,31 +750,19 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, "valid QName.\n", prop); /* we fall through to catch any further errors, if possible */ } - name = xsltSplitQName(ctxt->dict, prop, &prefix); - xmlFree(prop); /* - * Reject a prefix of "xmlns". + * Reject a name of "xmlns". */ - if ((prefix != NULL) && - (!xmlStrncasecmp(prefix, (xmlChar *) "xmlns", 5))) - { -#ifdef WITH_XSLT_DEBUG_PARSING - xsltGenericDebug(xsltGenericDebugContext, - "xsltAttribute: xmlns prefix forbidden\n"); -#endif - /* - * SPEC XSLT 1.0: - * "It is an error if the string that results from instantiating - * the attribute value template is not a QName or is the string - * xmlns. An XSLT processor may signal the error; if it does not - * signal the error, it must recover by not adding the attribute - * to the result tree." - * TODO: Decide which way to go here. - */ + if (xmlStrEqual(prop, BAD_CAST "xmlns")) { + xsltTransformError(ctxt, NULL, inst, + "xsl:attribute: The effective name 'xmlns' is not allowed.\n"); + xmlFree(prop); goto error; } + name = xsltSplitQName(ctxt->dict, prop, &prefix); + xmlFree(prop); } else { /* * The "name" value was static. @@ -785,7 +774,7 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, name = xsltSplitQName(ctxt->dict, comp->name, &prefix); #endif } - + /* * Process namespace semantics * --------------------------- @@ -809,9 +798,9 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, */ /* TODO: check attr acquisition wrt to the XSLT namespace */ tmpNsName = xsltEvalAttrValueTemplate(ctxt, inst, - (const xmlChar *) "namespace", XSLT_NAMESPACE); + (const xmlChar *) "namespace", XSLT_NAMESPACE); /* - * This fixes bug #302020: The AVT might also evaluate to the + * This fixes bug #302020: The AVT might also evaluate to the * empty string; this means that the empty string also indicates * "no namespace". * SPEC XSLT 1.0: @@ -820,8 +809,20 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, */ if ((tmpNsName != NULL) && (tmpNsName[0] != 0)) nsName = xmlDictLookup(ctxt->dict, BAD_CAST tmpNsName, -1); - xmlFree(tmpNsName); - }; + xmlFree(tmpNsName); + } + + if (xmlStrEqual(nsName, BAD_CAST "http://www.w3.org/2000/xmlns/")) { + xsltTransformError(ctxt, NULL, inst, + "xsl:attribute: Namespace http://www.w3.org/2000/xmlns/ " + "forbidden.\n"); + goto error; + } + if (xmlStrEqual(nsName, XML_XML_NAMESPACE)) { + prefix = BAD_CAST "xml"; + } else if (xmlStrEqual(prefix, BAD_CAST "xml")) { + prefix = NULL; + } } else if (prefix != NULL) { /* * SPEC XSLT 1.0: @@ -829,7 +830,7 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, * expanded into an expanded-name using the namespace declarations * in effect for the xsl:attribute element, *not* including any * default namespace declaration." - */ + */ ns = xmlSearchNs(inst->doc, inst, prefix); if (ns == NULL) { /* @@ -842,7 +843,7 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, "this is an error, since the namespace was not " "specified by the instruction itself.\n", prefix, name); } else - nsName = ns->href; + nsName = ns->href; } if (fromAttributeSet) { @@ -862,9 +863,9 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, * Find/create a matching ns-decl in the result tree. */ ns = NULL; - + #if 0 - if (0) { + if (0) { /* * OPTIMIZE TODO: How do we know if we are adding to a * fragment or to the result tree? @@ -883,7 +884,7 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, } #endif - if (nsName != NULL) { + if (nsName != NULL) { /* * Something about ns-prefixes: * SPEC XSLT 1.0: @@ -896,11 +897,10 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, * xsl:attribute can produce a scenario where the prefix is NULL, * so generate a prefix. */ - if (prefix == NULL) { + if ((prefix == NULL) || xmlStrEqual(prefix, BAD_CAST "xmlns")) { xmlChar *pref = xmlStrdup(BAD_CAST "ns_1"); - ns = xsltGetSpecialNamespace(ctxt, inst, nsName, BAD_CAST pref, - targetElem); + ns = xsltGetSpecialNamespace(ctxt, inst, nsName, pref, targetElem); xmlFree(pref); } else { @@ -925,12 +925,12 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, * TODO: Do we need to put the empty string in ? */ attr = xmlSetNsProp(ctxt->insert, ns, name, (const xmlChar *) ""); - } else if ((inst->children->next == NULL) && + } else if ((inst->children->next == NULL) && ((inst->children->type == XML_TEXT_NODE) || (inst->children->type == XML_CDATA_SECTION_NODE))) { xmlNodePtr copyTxt; - + /* * xmlSetNsProp() will take care of duplicates. */ @@ -965,7 +965,7 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, */ copyTxt = xmlNewText(inst->children->content); if (copyTxt == NULL) /* TODO: report error */ - goto error; + goto error; } attr->children = attr->last = copyTxt; copyTxt->parent = (xmlNodePtr) attr; @@ -976,7 +976,7 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, * anyway? */ if (inst->children->name == xmlStringTextNoenc) - copyTxt->name = xmlStringTextNoenc; + copyTxt->name = xmlStringTextNoenc; /* * since we create the attribute without content IDness must be @@ -1005,7 +1005,7 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, } error: - return; + return; } /** @@ -1041,10 +1041,10 @@ xsltApplyAttributeSet(xsltTransformContextPtr ctxt, xmlNodePtr node, const xmlChar *attrSets) { const xmlChar *ncname = NULL; - const xmlChar *prefix = NULL; + const xmlChar *prefix = NULL; const xmlChar *curstr, *endstr; xsltAttrElemPtr attrs; - xsltStylesheetPtr style; + xsltStylesheetPtr style; if (attrSets == NULL) { if (inst == NULL) @@ -1056,7 +1056,7 @@ xsltApplyAttributeSet(xsltTransformContextPtr ctxt, xmlNodePtr node, if (inst->type == XML_ATTRIBUTE_NODE) { if ( ((xmlAttrPtr) inst)->children != NULL) attrSets = ((xmlAttrPtr) inst)->children->content; - + } if (attrSets == NULL) { /* diff --git a/dll/3rdparty/libxslt/attributes.h b/dll/3rdparty/libxslt/attributes.h index d61ebb0d652..05b8a6e938e 100644 --- a/dll/3rdparty/libxslt/attributes.h +++ b/dll/3rdparty/libxslt/attributes.h @@ -21,14 +21,14 @@ extern "C" { XSLTPUBFUN void XSLTCALL xsltParseStylesheetAttributeSet (xsltStylesheetPtr style, xmlNodePtr cur); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltFreeAttributeSetsHashes (xsltStylesheetPtr style); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltApplyAttributeSet (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, const xmlChar *attributes); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltResolveStylesheetAttributeSet(xsltStylesheetPtr style); #ifdef __cplusplus } diff --git a/dll/3rdparty/libxslt/attrvt.c b/dll/3rdparty/libxslt/attrvt.c index bda0910e0e6..125159cedf3 100644 --- a/dll/3rdparty/libxslt/attrvt.c +++ b/dll/3rdparty/libxslt/attrvt.c @@ -147,7 +147,7 @@ static xsltAttrVTPtr xsltSetAttrVTsegment(xsltAttrVTPtr avt, void *val) { if (avt->nb_seg >= avt->max_seg) { avt = (xsltAttrVTPtr) xmlRealloc(avt, sizeof(xsltAttrVT) + - avt->max_seg * sizeof(void *)); + avt->max_seg * sizeof(void *)); if (avt == NULL) { return NULL; } @@ -178,7 +178,7 @@ xsltCompileAttr(xsltStylesheetPtr style, xmlAttrPtr attr) { if ((style == NULL) || (attr == NULL) || (attr->children == NULL)) return; - if ((attr->children->type != XML_TEXT_NODE) || + if ((attr->children->type != XML_TEXT_NODE) || (attr->children->next != NULL)) { xsltTransformError(NULL, style, attr->parent, "Attribute '%s': The content is expected to be a single text " @@ -248,7 +248,7 @@ xsltCompileAttr(xsltStylesheetPtr style, xmlAttrPtr attr) { /* Need to check for literal (bug539741) */ if ((*cur == '\'') || (*cur == '"')) { char delim = *(cur++); - while ((*cur != 0) && (*cur != delim)) + while ((*cur != 0) && (*cur != delim)) cur++; if (*cur != 0) cur++; /* skip the ending delimiter */ diff --git a/dll/3rdparty/libxslt/documents.c b/dll/3rdparty/libxslt/documents.c index 128cefeae42..3f3a7312ca8 100644 --- a/dll/3rdparty/libxslt/documents.c +++ b/dll/3rdparty/libxslt/documents.c @@ -36,9 +36,9 @@ #endif /************************************************************************ - * * - * Hooks for the document loader * - * * + * * + * Hooks for the document loader * + * * ************************************************************************/ /** @@ -116,7 +116,7 @@ xsltDocLoaderFunc xsltDocDefaultLoader = xsltDocDefaultLoaderFunc; * Set the new function to load document, if NULL it resets it to the * default function. */ - + void xsltSetLoaderFunc(xsltDocLoaderFunc f) { if (f == NULL) @@ -140,7 +140,7 @@ xsltSetLoaderFunc(xsltDocLoaderFunc f) { * * Returns a handler to the document */ -xsltDocumentPtr +xsltDocumentPtr xsltNewDocument(xsltTransformContextPtr ctxt, xmlDocPtr doc) { xsltDocumentPtr cur; @@ -179,7 +179,7 @@ xsltNewDocument(xsltTransformContextPtr ctxt, xmlDocPtr doc) { * * Returns a handler to the document */ -xsltDocumentPtr +xsltDocumentPtr xsltNewStyleDocument(xsltStylesheetPtr style, xmlDocPtr doc) { xsltDocumentPtr cur; @@ -204,15 +204,15 @@ xsltNewStyleDocument(xsltStylesheetPtr style, xmlDocPtr doc) { * * Frees the node-trees (and xsltDocument structures) of all * stylesheet-modules of the stylesheet-level represented by - * the given @style. + * the given @style. */ -void +void xsltFreeStyleDocuments(xsltStylesheetPtr style) { xsltDocumentPtr doc, cur; #ifdef XSLT_REFACTORED_XSLT_NSCOMP xsltNsMapPtr nsMap; #endif - + if (style == NULL) return; @@ -220,8 +220,8 @@ xsltFreeStyleDocuments(xsltStylesheetPtr style) { if (XSLT_HAS_INTERNAL_NSMAP(style)) nsMap = XSLT_GET_INTERNAL_NSMAP(style); else - nsMap = NULL; -#endif + nsMap = NULL; +#endif cur = style->docList; while (cur != NULL) { @@ -247,7 +247,7 @@ xsltFreeStyleDocuments(xsltStylesheetPtr style) { * * Free up all the space used by the loaded documents */ -void +void xsltFreeDocuments(xsltTransformContextPtr ctxt) { xsltDocumentPtr doc, cur; @@ -281,7 +281,7 @@ xsltFreeDocuments(xsltTransformContextPtr ctxt) { * * Returns the new xsltDocumentPtr or NULL in case of error */ -xsltDocumentPtr +xsltDocumentPtr xsltLoadDocument(xsltTransformContextPtr ctxt, const xmlChar *URI) { xsltDocumentPtr ret; xmlDocPtr doc; @@ -294,7 +294,7 @@ xsltLoadDocument(xsltTransformContextPtr ctxt, const xmlChar *URI) { */ if (ctxt->sec != NULL) { int res; - + res = xsltCheckRead(ctxt->sec, ctxt, URI); if (res == 0) { xsltTransformError(ctxt, NULL, NULL, @@ -355,7 +355,7 @@ xsltLoadDocument(xsltTransformContextPtr ctxt, const xmlChar *URI) { * * Returns the new xsltDocumentPtr or NULL in case of error */ -xsltDocumentPtr +xsltDocumentPtr xsltLoadStyleDocument(xsltStylesheetPtr style, const xmlChar *URI) { xsltDocumentPtr ret; xmlDocPtr doc; diff --git a/dll/3rdparty/libxslt/documents.h b/dll/3rdparty/libxslt/documents.h index 2eb1f2a27e7..ae7c0ca24b9 100644 --- a/dll/3rdparty/libxslt/documents.h +++ b/dll/3rdparty/libxslt/documents.h @@ -20,26 +20,26 @@ extern "C" { #endif -XSLTPUBFUN xsltDocumentPtr XSLTCALL +XSLTPUBFUN xsltDocumentPtr XSLTCALL xsltNewDocument (xsltTransformContextPtr ctxt, xmlDocPtr doc); -XSLTPUBFUN xsltDocumentPtr XSLTCALL - xsltLoadDocument (xsltTransformContextPtr ctxt, +XSLTPUBFUN xsltDocumentPtr XSLTCALL + xsltLoadDocument (xsltTransformContextPtr ctxt, const xmlChar *URI); -XSLTPUBFUN xsltDocumentPtr XSLTCALL - xsltFindDocument (xsltTransformContextPtr ctxt, +XSLTPUBFUN xsltDocumentPtr XSLTCALL + xsltFindDocument (xsltTransformContextPtr ctxt, xmlDocPtr doc); -XSLTPUBFUN void XSLTCALL - xsltFreeDocuments (xsltTransformContextPtr ctxt); +XSLTPUBFUN void XSLTCALL + xsltFreeDocuments (xsltTransformContextPtr ctxt); -XSLTPUBFUN xsltDocumentPtr XSLTCALL - xsltLoadStyleDocument (xsltStylesheetPtr style, +XSLTPUBFUN xsltDocumentPtr XSLTCALL + xsltLoadStyleDocument (xsltStylesheetPtr style, const xmlChar *URI); -XSLTPUBFUN xsltDocumentPtr XSLTCALL - xsltNewStyleDocument (xsltStylesheetPtr style, +XSLTPUBFUN xsltDocumentPtr XSLTCALL + xsltNewStyleDocument (xsltStylesheetPtr style, xmlDocPtr doc); -XSLTPUBFUN void XSLTCALL - xsltFreeStyleDocuments (xsltStylesheetPtr style); +XSLTPUBFUN void XSLTCALL + xsltFreeStyleDocuments (xsltStylesheetPtr style); /* * Hooks for document loading diff --git a/dll/3rdparty/libxslt/extensions.c b/dll/3rdparty/libxslt/extensions.c index 6187b7afc47..30c3368def2 100644 --- a/dll/3rdparty/libxslt/extensions.c +++ b/dll/3rdparty/libxslt/extensions.c @@ -44,9 +44,9 @@ #endif /************************************************************************ - * * - * Private Types and Globals * - * * + * * + * Private Types and Globals * + * * ************************************************************************/ typedef struct _xsltExtDef xsltExtDef; @@ -89,9 +89,9 @@ static xmlHashTablePtr xsltModuleHash = NULL; static xmlMutexPtr xsltExtMutex = NULL; /************************************************************************ - * * - * Type functions * - * * + * * + * Type functions * + * * ************************************************************************/ /** @@ -302,18 +302,18 @@ typedef void (*exsltRegisterFunction) (void); * @URI: the function or element namespace URI * * Dynamically loads an extension plugin when available. - * - * The plugin name is derived from the URI by removing the + * + * The plugin name is derived from the URI by removing the * initial protocol designation, e.g. "http://", then converting * the characters ".", "-", "/", and "\" into "_", the removing * any trailing "/", then concatenating LIBXML_MODULE_EXTENSION. - * - * Plugins are loaded from the directory specified by the - * environment variable LIBXSLT_PLUGINS_PATH, or if NULL, + * + * Plugins are loaded from the directory specified by the + * environment variable LIBXSLT_PLUGINS_PATH, or if NULL, * by LIBXSLT_DEFAULT_PLUGINS_PATH() which is determined at * compile time. * - * Returns 0 if successful, -1 in case of error. + * Returns 0 if successful, -1 in case of error. */ static int @@ -391,7 +391,7 @@ xsltExtModuleRegisterDynamic(const xmlChar * URI) #ifdef WITH_XSLT_DEBUG_EXTENSIONS xsltGenericDebug(xsltGenericDebugContext, - "Attempting to load plugin: %s for URI: %s\n", + "Attempting to load plugin: %s for URI: %s\n", module_filename, URI); #endif @@ -442,7 +442,7 @@ xsltExtModuleRegisterDynamic(const xmlChar * URI) #ifdef WITH_XSLT_DEBUG_EXTENSIONS xsltGenericDebug(xsltGenericDebugContext, - "xmlModuleSymbol failed for plugin: %s, regfunc: %s\n", + "xmlModuleSymbol failed for plugin: %s, regfunc: %s\n", module_filename, regfunc_name); #endif @@ -463,9 +463,9 @@ xsltExtModuleRegisterDynamic(const xmlChar * URI ATTRIBUTE_UNUSED) #endif /************************************************************************ - * * - * The stylesheet extension prefixes handling * - * * + * * + * The stylesheet extension prefixes handling * + * * ************************************************************************/ @@ -487,7 +487,7 @@ xsltFreeExts(xsltStylesheetPtr style) * @style: an XSLT stylesheet * @prefix: the prefix used (optional) * @URI: the URI associated to the extension - * + * * Registers an extension namespace * This is called from xslt.c during compile-time. * The given prefix is not needed. @@ -567,9 +567,9 @@ xsltRegisterExtPrefix(xsltStylesheetPtr style, } /************************************************************************ - * * - * The extensions modules interfaces * - * * + * * + * The extensions modules interfaces * + * * ************************************************************************/ /** @@ -577,7 +577,7 @@ xsltRegisterExtPrefix(xsltStylesheetPtr style, * @ctxt: an XSLT transformation context * @name: the name of the element * @URI: the URI associated to the element - * @function: the actual implementation which should be called + * @function: the actual implementation which should be called * * Registers an extension function * @@ -611,7 +611,7 @@ xsltRegisterExtFunction(xsltTransformContextPtr ctxt, const xmlChar * name, * @ctxt: an XSLT transformation context * @name: the name of the element * @URI: the URI associated to the element - * @function: the actual implementation which should be called + * @function: the actual implementation which should be called * * Registers an extension element * @@ -666,8 +666,8 @@ xsltStyleInitializeStylesheetModule(xsltStylesheetPtr style, xsltExtDataPtr dataContainer; void *userData = NULL; xsltExtModulePtr module; - - if ((style == NULL) || (URI == NULL)) + + if ((style == NULL) || (URI == NULL)) return(NULL); if (xsltExtensionsHash == NULL) { @@ -716,7 +716,7 @@ xsltStyleInitializeStylesheetModule(xsltStylesheetPtr style, * Fire the initialization callback. */ userData = module->styleInitFunc(style, URI); - } + } /* * Store the user-data in the context of the given stylesheet. */ @@ -727,7 +727,7 @@ xsltStyleInitializeStylesheetModule(xsltStylesheetPtr style, if (xmlHashAddEntry(style->extInfos, URI, (void *) dataContainer) < 0) { - xsltTransformError(NULL, style, NULL, + xsltTransformError(NULL, style, NULL, "Failed to register module '%s'.\n", URI); style->errors++; if (module->styleShutdownFunc) @@ -762,7 +762,7 @@ xsltStyleGetExtData(xsltStylesheetPtr style, const xmlChar * URI) (xsltExtensionsHash == NULL)) return (NULL); - + #ifdef XSLT_REFACTORED /* * This is intended for global storage, so only the main @@ -838,7 +838,7 @@ xsltStyleStylesheetLevelGetExtData(xsltStylesheetPtr style, */ if (dataContainer) return(dataContainer->extData); - } + } dataContainer = xsltStyleInitializeStylesheetModule(style, URI); @@ -1120,7 +1120,7 @@ xsltShutdownExt(xsltExtDataPtr data, xsltStylesheetPtr style, * * xmlHashRemoveEntry(style->extInfos, URI, * (xmlHashDeallocator) xsltFreeExtData); - */ + */ } /** @@ -1156,12 +1156,12 @@ xsltShutdownExts(xsltStylesheetPtr style) */ int xsltCheckExtPrefix(xsltStylesheetPtr style, const xmlChar * URI) -{ +{ #ifdef XSLT_REFACTORED if ((style == NULL) || (style->compCtxt == NULL) || (XSLT_CCTXT(style)->inode == NULL) || (XSLT_CCTXT(style)->inode->extElemNs == NULL)) - return (0); + return (0); /* * Lookup the extension namespaces registered * at the current node in the stylesheet's tree. @@ -1175,7 +1175,7 @@ xsltCheckExtPrefix(xsltStylesheetPtr style, const xmlChar * URI) URI)) { return(1); - } + } } } #else @@ -1950,15 +1950,15 @@ xsltGetExtInfo(xsltStylesheetPtr style, const xmlChar * URI) } /************************************************************************ - * * - * Test module http://xmlsoft.org/XSLT/ * - * * + * * + * Test module http://xmlsoft.org/XSLT/ * + * * ************************************************************************/ /************************************************************************ - * * - * Test of the extension module API * - * * + * * + * Test of the extension module API * + * * ************************************************************************/ static xmlChar *testData = NULL; @@ -2289,6 +2289,7 @@ xsltCleanupGlobals(void) xmlFreeMutex(xsltExtMutex); xsltExtMutex = NULL; + xsltFreeLocales(); xsltUninit(); } diff --git a/dll/3rdparty/libxslt/extensions.h b/dll/3rdparty/libxslt/extensions.h deleted file mode 100644 index 900779c34c0..00000000000 --- a/dll/3rdparty/libxslt/extensions.h +++ /dev/null @@ -1,262 +0,0 @@ -/* - * Summary: interface for the extension support - * Description: This provide the API needed for simple and module - * extension support. - * - * Copy: See Copyright for the status of this software. - * - * Author: Daniel Veillard - */ - -#ifndef __XML_XSLT_EXTENSION_H__ -#define __XML_XSLT_EXTENSION_H__ - -#include -#include "xsltexports.h" -#include "xsltInternals.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Extension Modules API. - */ - -/** - * xsltInitGlobals: - * - * Initialize the global variables for extensions - * - */ - -XSLTPUBFUN void XSLTCALL - xsltInitGlobals (void); - -/** - * xsltStyleExtInitFunction: - * @ctxt: an XSLT stylesheet - * @URI: the namespace URI for the extension - * - * A function called at initialization time of an XSLT extension module. - * - * Returns a pointer to the module specific data for this transformation. - */ -typedef void * (*xsltStyleExtInitFunction) (xsltStylesheetPtr style, - const xmlChar *URI); - -/** - * xsltStyleExtShutdownFunction: - * @ctxt: an XSLT stylesheet - * @URI: the namespace URI for the extension - * @data: the data associated to this module - * - * A function called at shutdown time of an XSLT extension module. - */ -typedef void (*xsltStyleExtShutdownFunction) (xsltStylesheetPtr style, - const xmlChar *URI, - void *data); - -/** - * xsltExtInitFunction: - * @ctxt: an XSLT transformation context - * @URI: the namespace URI for the extension - * - * A function called at initialization time of an XSLT extension module. - * - * Returns a pointer to the module specific data for this transformation. - */ -typedef void * (*xsltExtInitFunction) (xsltTransformContextPtr ctxt, - const xmlChar *URI); - -/** - * xsltExtShutdownFunction: - * @ctxt: an XSLT transformation context - * @URI: the namespace URI for the extension - * @data: the data associated to this module - * - * A function called at shutdown time of an XSLT extension module. - */ -typedef void (*xsltExtShutdownFunction) (xsltTransformContextPtr ctxt, - const xmlChar *URI, - void *data); - -XSLTPUBFUN int XSLTCALL - xsltRegisterExtModule (const xmlChar *URI, - xsltExtInitFunction initFunc, - xsltExtShutdownFunction shutdownFunc); -XSLTPUBFUN int XSLTCALL - xsltRegisterExtModuleFull - (const xmlChar * URI, - xsltExtInitFunction initFunc, - xsltExtShutdownFunction shutdownFunc, - xsltStyleExtInitFunction styleInitFunc, - xsltStyleExtShutdownFunction styleShutdownFunc); - -XSLTPUBFUN int XSLTCALL - xsltUnregisterExtModule (const xmlChar * URI); - -XSLTPUBFUN void * XSLTCALL - xsltGetExtData (xsltTransformContextPtr ctxt, - const xmlChar *URI); - -XSLTPUBFUN void * XSLTCALL - xsltStyleGetExtData (xsltStylesheetPtr style, - const xmlChar *URI); -#ifdef XSLT_REFACTORED -XSLTPUBFUN void * XSLTCALL - xsltStyleStylesheetLevelGetExtData( - xsltStylesheetPtr style, - const xmlChar * URI); -#endif -XSLTPUBFUN void XSLTCALL - xsltShutdownCtxtExts (xsltTransformContextPtr ctxt); - -XSLTPUBFUN void XSLTCALL - xsltShutdownExts (xsltStylesheetPtr style); - -XSLTPUBFUN xsltTransformContextPtr XSLTCALL - xsltXPathGetTransformContext - (xmlXPathParserContextPtr ctxt); - -/* - * extension functions -*/ -XSLTPUBFUN int XSLTCALL - xsltRegisterExtModuleFunction - (const xmlChar *name, - const xmlChar *URI, - xmlXPathFunction function); -XSLTPUBFUN xmlXPathFunction XSLTCALL - xsltExtModuleFunctionLookup (const xmlChar *name, - const xmlChar *URI); -XSLTPUBFUN int XSLTCALL - xsltUnregisterExtModuleFunction - (const xmlChar *name, - const xmlChar *URI); - -/* - * extension elements - */ -typedef xsltElemPreCompPtr (*xsltPreComputeFunction) - (xsltStylesheetPtr style, - xmlNodePtr inst, - xsltTransformFunction function); - -XSLTPUBFUN xsltElemPreCompPtr XSLTCALL - xsltNewElemPreComp (xsltStylesheetPtr style, - xmlNodePtr inst, - xsltTransformFunction function); -XSLTPUBFUN void XSLTCALL - xsltInitElemPreComp (xsltElemPreCompPtr comp, - xsltStylesheetPtr style, - xmlNodePtr inst, - xsltTransformFunction function, - xsltElemPreCompDeallocator freeFunc); - -XSLTPUBFUN int XSLTCALL - xsltRegisterExtModuleElement - (const xmlChar *name, - const xmlChar *URI, - xsltPreComputeFunction precomp, - xsltTransformFunction transform); -XSLTPUBFUN xsltTransformFunction XSLTCALL - xsltExtElementLookup (xsltTransformContextPtr ctxt, - const xmlChar *name, - const xmlChar *URI); -XSLTPUBFUN xsltTransformFunction XSLTCALL - xsltExtModuleElementLookup - (const xmlChar *name, - const xmlChar *URI); -XSLTPUBFUN xsltPreComputeFunction XSLTCALL - xsltExtModuleElementPreComputeLookup - (const xmlChar *name, - const xmlChar *URI); -XSLTPUBFUN int XSLTCALL - xsltUnregisterExtModuleElement - (const xmlChar *name, - const xmlChar *URI); - -/* - * top-level elements - */ -typedef void (*xsltTopLevelFunction) (xsltStylesheetPtr style, - xmlNodePtr inst); - -XSLTPUBFUN int XSLTCALL - xsltRegisterExtModuleTopLevel - (const xmlChar *name, - const xmlChar *URI, - xsltTopLevelFunction function); -XSLTPUBFUN xsltTopLevelFunction XSLTCALL - xsltExtModuleTopLevelLookup - (const xmlChar *name, - const xmlChar *URI); -XSLTPUBFUN int XSLTCALL - xsltUnregisterExtModuleTopLevel - (const xmlChar *name, - const xmlChar *URI); - - -/* These 2 functions are deprecated for use within modules. */ -XSLTPUBFUN int XSLTCALL - xsltRegisterExtFunction (xsltTransformContextPtr ctxt, - const xmlChar *name, - const xmlChar *URI, - xmlXPathFunction function); -XSLTPUBFUN int XSLTCALL - xsltRegisterExtElement (xsltTransformContextPtr ctxt, - const xmlChar *name, - const xmlChar *URI, - xsltTransformFunction function); - -/* - * Extension Prefix handling API. - * Those are used by the XSLT (pre)processor. - */ - -XSLTPUBFUN int XSLTCALL - xsltRegisterExtPrefix (xsltStylesheetPtr style, - const xmlChar *prefix, - const xmlChar *URI); -XSLTPUBFUN int XSLTCALL - xsltCheckExtPrefix (xsltStylesheetPtr style, - const xmlChar *URI); -XSLTPUBFUN int XSLTCALL - xsltCheckExtURI (xsltStylesheetPtr style, - const xmlChar *URI); -XSLTPUBFUN int XSLTCALL - xsltInitCtxtExts (xsltTransformContextPtr ctxt); -XSLTPUBFUN void XSLTCALL - xsltFreeCtxtExts (xsltTransformContextPtr ctxt); -XSLTPUBFUN void XSLTCALL - xsltFreeExts (xsltStylesheetPtr style); - -XSLTPUBFUN xsltElemPreCompPtr XSLTCALL - xsltPreComputeExtModuleElement - (xsltStylesheetPtr style, - xmlNodePtr inst); -/* - * Extension Infos access. - * Used by exslt initialisation - */ - -XSLTPUBFUN xmlHashTablePtr XSLTCALL - xsltGetExtInfo (xsltStylesheetPtr style, - const xmlChar *URI); - -/** - * Test module http://xmlsoft.org/XSLT/ - */ -XSLTPUBFUN void XSLTCALL - xsltRegisterTestModule (void); -XSLTPUBFUN void XSLTCALL - xsltDebugDumpExtensions (FILE * output); - - -#ifdef __cplusplus -} -#endif - -#endif /* __XML_XSLT_EXTENSION_H__ */ - diff --git a/dll/3rdparty/libxslt/extra.c b/dll/3rdparty/libxslt/extra.c index 3a0f547c05d..17df4baef77 100644 --- a/dll/3rdparty/libxslt/extra.c +++ b/dll/3rdparty/libxslt/extra.c @@ -40,9 +40,9 @@ #endif /************************************************************************ - * * - * Handling of XSLT debugging * - * * + * * + * Handling of XSLT debugging * + * * ************************************************************************/ /** @@ -112,9 +112,9 @@ xsltDebug(xsltTransformContextPtr ctxt, xmlNodePtr node ATTRIBUTE_UNUSED, } /************************************************************************ - * * - * Classic extensions as described by M. Kay * - * * + * * + * Classic extensions as described by M. Kay * + * * ************************************************************************/ /** @@ -178,14 +178,14 @@ xsltFunctionLocalTime(xmlXPathParserContextPtr ctxt, int nargs) { time_t gmt, lmt; struct tm gmt_tm; struct tm *local_tm; - + if (nargs != 1) { xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "localTime() : invalid number of args %d\n", nargs); ctxt->error = XPATH_INVALID_ARITY; return; } - + obj = valuePop(ctxt); if (obj->type != XPATH_STRING) { @@ -195,7 +195,7 @@ xsltFunctionLocalTime(xmlXPathParserContextPtr ctxt, int nargs) { valuePush(ctxt, xmlXPathNewString((const xmlChar *)"")); return; } - + str = (char *) obj->stringval; /* str = "$Date$" */ @@ -243,8 +243,11 @@ xsltFunctionLocalTime(xmlXPathParserContextPtr ctxt, int nargs) { * Calling localtime() has the side-effect of setting timezone. * After we know the timezone, we can adjust for it */ +#if !defined(__FreeBSD__) lmt = gmt - timezone; - +#else /* FreeBSD DOESN'T have such side-ffect */ + lmt = gmt - local_tm->tm_gmtoff; +#endif /* * FIXME: it's been too long since I did manual memory management. * (I swore never to do it again.) Does this introduce a memory leak? diff --git a/dll/3rdparty/libxslt/extra.h b/dll/3rdparty/libxslt/extra.h index 59e932bec5e..6929e3c6408 100644 --- a/dll/3rdparty/libxslt/extra.h +++ b/dll/3rdparty/libxslt/extra.h @@ -60,16 +60,16 @@ extern "C" { XSLTPUBFUN void XSLTCALL xsltFunctionNodeSet (xmlXPathParserContextPtr ctxt, int nargs); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltDebug (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltRegisterExtras (xsltTransformContextPtr ctxt); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltRegisterAllExtras (void); #ifdef __cplusplus diff --git a/dll/3rdparty/libxslt/functions.c b/dll/3rdparty/libxslt/functions.c index 4720c7a34b2..dc61994572e 100644 --- a/dll/3rdparty/libxslt/functions.c +++ b/dll/3rdparty/libxslt/functions.c @@ -118,16 +118,16 @@ xsltDocumentFunctionLoadDocument(xmlXPathParserContextPtr ctxt, xmlChar* URI) "document() : internal error tctxt == NULL\n"); valuePush(ctxt, xmlXPathNewNodeSet(NULL)); return; - } - + } + uri = xmlParseURI((const char *) URI); if (uri == NULL) { xsltTransformError(tctxt, NULL, NULL, "document() : failed to parse URI\n"); valuePush(ctxt, xmlXPathNewNodeSet(NULL)); return; - } - + } + /* * check for and remove fragment identifier */ @@ -141,12 +141,12 @@ xsltDocumentFunctionLoadDocument(xmlXPathParserContextPtr ctxt, xmlChar* URI) } else idoc = xsltLoadDocument(tctxt, URI); xmlFreeURI(uri); - + if (idoc == NULL) { if ((URI == NULL) || (URI[0] == '#') || ((tctxt->style->doc != NULL) && - (xmlStrEqual(tctxt->style->doc->URL, URI)))) + (xmlStrEqual(tctxt->style->doc->URL, URI)))) { /* * This selects the stylesheet's doc itself. @@ -167,7 +167,7 @@ xsltDocumentFunctionLoadDocument(xmlXPathParserContextPtr ctxt, xmlChar* URI) valuePush(ctxt, xmlXPathNewNodeSet((xmlNodePtr) doc)); return; } - + /* use XPointer of HTML location for fragment ID */ #ifdef LIBXML_XPTR_ENABLED xptrctxt = xmlXPtrNewContext(doc, NULL, NULL); @@ -180,11 +180,11 @@ xsltDocumentFunctionLoadDocument(xmlXPathParserContextPtr ctxt, xmlChar* URI) resObj = xmlXPtrEval(fragment, xptrctxt); xmlXPathFreeContext(xptrctxt); #endif - xmlFree(fragment); + xmlFree(fragment); if (resObj == NULL) goto out_fragment; - + switch (resObj->type) { case XPATH_NODESET: break; @@ -198,11 +198,11 @@ xsltDocumentFunctionLoadDocument(xmlXPathParserContextPtr ctxt, xmlChar* URI) case XPATH_RANGE: case XPATH_LOCATIONSET: xsltTransformError(tctxt, NULL, NULL, - "document() : XPointer does not select a node set: #%s\n", + "document() : XPointer does not select a node set: #%s\n", fragment); goto out_object; } - + valuePush(ctxt, resObj); return; @@ -260,7 +260,7 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs) obj = valuePop(ctxt); ret = xmlXPathNewNodeSet(NULL); - if (obj->nodesetval) { + if ((obj != NULL) && obj->nodesetval) { for (i = 0; i < obj->nodesetval->nodeNr; i++) { valuePush(ctxt, xmlXPathNewNodeSet(obj->nodesetval->nodeTab[i])); @@ -280,7 +280,8 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs) } } - xmlXPathFreeObject(obj); + if (obj != NULL) + xmlXPathFreeObject(obj); if (obj2 != NULL) xmlXPathFreeObject(obj2); valuePush(ctxt, ret); @@ -302,6 +303,8 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs) if (obj->stringval == NULL) { valuePush(ctxt, xmlXPathNewNodeSet(NULL)); } else { + xsltTransformContextPtr tctxt; + tctxt = xsltXPathGetTransformContext(ctxt); if ((obj2 != NULL) && (obj2->nodesetval != NULL) && (obj2->nodesetval->nodeNr > 0) && IS_XSLT_REAL_NODE(obj2->nodesetval->nodeTab[0])) { @@ -314,9 +317,6 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs) } base = xmlNodeGetBase(target->doc, target); } else { - xsltTransformContextPtr tctxt; - - tctxt = xsltXPathGetTransformContext(ctxt); if ((tctxt != NULL) && (tctxt->inst != NULL)) { base = xmlNodeGetBase(tctxt->inst->doc, tctxt->inst); } else if ((tctxt != NULL) && (tctxt->style != NULL) && @@ -329,7 +329,14 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs) if (base != NULL) xmlFree(base); if (URI == NULL) { - valuePush(ctxt, xmlXPathNewNodeSet(NULL)); + if ((tctxt != NULL) && (tctxt->style != NULL) && + (tctxt->style->doc != NULL) && + (xmlStrEqual(URI, tctxt->style->doc->URL))) { + /* This selects the stylesheet's doc itself. */ + valuePush(ctxt, xmlXPathNewNodeSet((xmlNodePtr) tctxt->style->doc)); + } else { + valuePush(ctxt, xmlXPathNewNodeSet(NULL)); + } } else { xsltDocumentFunctionLoadDocument( ctxt, URI ); xmlFree(URI); @@ -349,15 +356,15 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs) * node-set key(string, object) */ void -xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){ - xmlXPathObjectPtr obj1, obj2; - +xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){ + xmlXPathObjectPtr obj1, obj2; + if (nargs != 2) { xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "key() : expects two arguments\n"); ctxt->error = XPATH_INVALID_ARITY; return; - } + } /* * Get the key's value. @@ -376,7 +383,7 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){ /* * Get the key's name. */ - obj1 = valuePop(ctxt); + obj1 = valuePop(ctxt); if ((obj2->type == XPATH_NODESET) || (obj2->type == XPATH_XSLT_TREE)) { int i; @@ -402,7 +409,7 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){ xmlNodeSetPtr nodelist = NULL; xmlChar *key = NULL, *value; const xmlChar *keyURI; - xsltTransformContextPtr tctxt; + xsltTransformContextPtr tctxt; xmlChar *qname, *prefix; xmlXPathContextPtr xpctxt = ctxt->context; xmlNodePtr tmpNode = NULL; @@ -418,7 +425,7 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){ "The context node is not set on the XPath context.\n"); tctxt->state = XSLT_STATE_STOPPED; goto error; - } + } /* * Get the associated namespace URI if qualified name */ @@ -458,7 +465,7 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){ } obj2 = valuePop(ctxt); value = obj2->stringval; - + /* * We need to ensure that ctxt->document is available for * xsltGetKey(). @@ -468,7 +475,7 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){ * or the doc might be a Result Tree Fragment. * FUTURE INFO: In XSLT 2.0 the key() function takes an additional * argument indicating the doc to use. - */ + */ if (xpctxt->node->type == XML_NAMESPACE_DECL) { /* * REVISIT: This is a libxml hack! Check xpath.c for details. @@ -492,7 +499,7 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){ if ((tctxt->document == NULL) || (tctxt->document->doc != tmpNode->doc)) - { + { if (tmpNode->doc->name && (tmpNode->doc->name[0] == ' ')) { /* * This is a Result Tree Fragment. @@ -502,7 +509,7 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){ if (tmpNode->doc->_private == NULL) goto error; } - tctxt->document = (xsltDocumentPtr) tmpNode->doc->_private; + tctxt->document = (xsltDocumentPtr) tmpNode->doc->_private; } else { /* * May be the initial source doc or a doc acquired via the @@ -523,18 +530,18 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){ */ nodelist = xsltGetKey(tctxt, key, keyURI, value); -error: +error: tctxt->document = oldDocInfo; valuePush(ctxt, xmlXPathWrapNodeSet( xmlXPathNodeSetMerge(NULL, nodelist))); if (key != NULL) xmlFree(key); - } + } if (obj1 != NULL) xmlXPathFreeObject(obj1); if (obj2 != NULL) - xmlXPathFreeObject(obj2); + xmlXPathFreeObject(obj2); } /** @@ -606,7 +613,7 @@ xsltFormatNumberFunction(xmlXPathParserContextPtr ctxt, int nargs) if (sheet == NULL) return; formatValues = sheet->decimalFormat; - + switch (nargs) { case 3: CAST_TO_STRING; @@ -614,7 +621,7 @@ xsltFormatNumberFunction(xmlXPathParserContextPtr ctxt, int nargs) formatValues = xsltDecimalFormatGetByName(sheet, decimalObj->stringval); if (formatValues == NULL) { xsltTransformError(tctxt, NULL, NULL, - "format-number() : undeclared decimal format '%s'\n", + "format-number() : undeclared decimal format '%s'\n", decimalObj->stringval); } /* Intentional fall-through */ @@ -653,14 +660,16 @@ xsltFormatNumberFunction(xmlXPathParserContextPtr ctxt, int nargs) */ void xsltGenerateIdFunction(xmlXPathParserContextPtr ctxt, int nargs){ + static char base_address; xmlNodePtr cur = NULL; - unsigned long val; - xmlChar str[20]; + xmlXPathObjectPtr obj = NULL; + long val; + xmlChar str[30]; + xmlDocPtr doc; if (nargs == 0) { cur = ctxt->context->node; } else if (nargs == 1) { - xmlXPathObjectPtr obj; xmlNodeSetPtr nodelist; int i, ret; @@ -683,7 +692,6 @@ xsltGenerateIdFunction(xmlXPathParserContextPtr ctxt, int nargs){ if (ret == -1) cur = nodelist->nodeTab[i]; } - xmlXPathFreeObject(obj); } else { xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL, "generate-id() : invalid number of args %d\n", nargs); @@ -694,9 +702,27 @@ xsltGenerateIdFunction(xmlXPathParserContextPtr ctxt, int nargs){ * Okay this is ugly but should work, use the NodePtr address * to forge the ID */ - val = (unsigned long)((char *)cur - (char *)0); - val /= sizeof(xmlNode); - sprintf((char *)str, "id%ld", val); + if (cur->type != XML_NAMESPACE_DECL) + doc = cur->doc; + else { + xmlNsPtr ns = (xmlNsPtr) cur; + + if (ns->context != NULL) + doc = ns->context; + else + doc = ctxt->context->doc; + + } + + if (obj) + xmlXPathFreeObject(obj); + + val = (long)((char *)cur - (char *)&base_address); + if (val >= 0) { + sprintf((char *)str, "idp%ld", val); + } else { + sprintf((char *)str, "idm%ld", -val); + } valuePush(ctxt, xmlXPathNewString(str)); } @@ -783,7 +809,9 @@ xsltSystemPropertyFunction(xmlXPathParserContextPtr ctxt, int nargs){ } else { valuePush(ctxt, xmlXPathNewString((const xmlChar *)"")); } - } + } else { + valuePush(ctxt, xmlXPathNewString((const xmlChar *)"")); + } if (name != NULL) xmlFree(name); if (prefix != NULL) @@ -941,9 +969,9 @@ xsltCurrentFunction(xmlXPathParserContextPtr ctxt, int nargs){ } /************************************************************************ - * * - * Registration of XSLT and libxslt functions * - * * + * * + * Registration of XSLT and libxslt functions * + * * ************************************************************************/ /** diff --git a/dll/3rdparty/libxslt/functions.h b/dll/3rdparty/libxslt/functions.h index caa4941c5d2..e0e0bf90618 100644 --- a/dll/3rdparty/libxslt/functions.h +++ b/dll/3rdparty/libxslt/functions.h @@ -38,28 +38,28 @@ XSLTPUBFUN xmlXPathFunction XSLTCALL * Interfaces for the functions implementations. */ -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltDocumentFunction (xmlXPathParserContextPtr ctxt, int nargs); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltKeyFunction (xmlXPathParserContextPtr ctxt, int nargs); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltUnparsedEntityURIFunction (xmlXPathParserContextPtr ctxt, int nargs); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltFormatNumberFunction (xmlXPathParserContextPtr ctxt, int nargs); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltGenerateIdFunction (xmlXPathParserContextPtr ctxt, int nargs); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltSystemPropertyFunction (xmlXPathParserContextPtr ctxt, int nargs); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltElementAvailableFunction (xmlXPathParserContextPtr ctxt, int nargs); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltFunctionAvailableFunction (xmlXPathParserContextPtr ctxt, int nargs); @@ -67,7 +67,7 @@ XSLTPUBFUN void XSLTCALL * And the registration */ -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltRegisterAllFunctions (xmlXPathContextPtr ctxt); #ifdef __cplusplus diff --git a/dll/3rdparty/libxslt/imports.c b/dll/3rdparty/libxslt/imports.c index 23538abf51a..9277b4f64fd 100644 --- a/dll/3rdparty/libxslt/imports.c +++ b/dll/3rdparty/libxslt/imports.c @@ -59,10 +59,10 @@ * @style: the stylesheet being imported by the master * * normalize the comp steps for the stylesheet being imported - * by the master, together with any imports within that. + * by the master, together with any imports within that. * */ -static void xsltFixImportedCompSteps(xsltStylesheetPtr master, +static void xsltFixImportedCompSteps(xsltStylesheetPtr master, xsltStylesheetPtr style) { xsltStylesheetPtr res; xmlHashScan(style->templatesHash, @@ -230,7 +230,7 @@ xsltParseStylesheetInclude(xsltStylesheetPtr style, xmlNodePtr cur) { "xsl:include : unable to load %s\n", URI); goto error; } -#ifdef XSLT_REFACTORED +#ifdef XSLT_REFACTORED if (IS_XSLT_ELEM_FAST(cur) && (cur->psvi != NULL)) { ((xsltStyleItemIncludePtr) cur->psvi)->include = include; } else { diff --git a/dll/3rdparty/libxslt/imports.h b/dll/3rdparty/libxslt/imports.h index 38656f11ddb..95e44e51da1 100644 --- a/dll/3rdparty/libxslt/imports.h +++ b/dll/3rdparty/libxslt/imports.h @@ -48,21 +48,21 @@ extern "C" { /* * Module interfaces */ -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltParseStylesheetImport(xsltStylesheetPtr style, xmlNodePtr cur); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltParseStylesheetInclude (xsltStylesheetPtr style, xmlNodePtr cur); -XSLTPUBFUN xsltStylesheetPtr XSLTCALL +XSLTPUBFUN xsltStylesheetPtr XSLTCALL xsltNextImport (xsltStylesheetPtr style); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltNeedElemSpaceHandling(xsltTransformContextPtr ctxt); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltFindElemSpaceHandling(xsltTransformContextPtr ctxt, xmlNodePtr node); -XSLTPUBFUN xsltTemplatePtr XSLTCALL +XSLTPUBFUN xsltTemplatePtr XSLTCALL xsltFindTemplate (xsltTransformContextPtr ctxt, const xmlChar *name, const xmlChar *nameURI); diff --git a/dll/3rdparty/libxslt/keys.c b/dll/3rdparty/libxslt/keys.c index d28aea67999..b8f14556c4a 100644 --- a/dll/3rdparty/libxslt/keys.c +++ b/dll/3rdparty/libxslt/keys.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "xslt.h" #include "xsltInternals.h" #include "xsltutils.h" @@ -37,9 +38,9 @@ xsltInitDocKeyTable(xsltTransformContextPtr ctxt, const xmlChar *name, const xmlChar *nameURI); /************************************************************************ - * * - * Type functions * - * * + * * + * Type functions * + * * ************************************************************************/ /** @@ -158,7 +159,7 @@ xsltFreeKeyTable(xsltKeyTablePtr keyt) { if (keyt->nameURI != NULL) xmlFree(keyt->nameURI); if (keyt->keys != NULL) - xmlHashFree(keyt->keys, + xmlHashFree(keyt->keys, (xmlHashDeallocator) xmlXPathFreeNodeSet); memset(keyt, -1, sizeof(xsltKeyTable)); xmlFree(keyt); @@ -182,9 +183,9 @@ xsltFreeKeyTableList(xsltKeyTablePtr keyt) { } /************************************************************************ - * * - * The interpreter for the precompiled patterns * - * * + * * + * The interpreter for the precompiled patterns * + * * ************************************************************************/ @@ -311,8 +312,8 @@ xsltAddKey(xsltStylesheetPtr style, const xmlChar *name, end = skipPredicate(match, end); if (end <= 0) { xsltTransformError(NULL, style, inst, - "key pattern is malformed: %s", - key->match); + "xsl:key : 'match' pattern is malformed: %s", + key->match); if (style != NULL) style->errors++; goto error; } @@ -321,7 +322,7 @@ xsltAddKey(xsltStylesheetPtr style, const xmlChar *name, } if (current == end) { xsltTransformError(NULL, style, inst, - "key pattern is empty\n"); + "xsl:key : 'match' pattern is empty\n"); if (style != NULL) style->errors++; goto error; } @@ -344,6 +345,12 @@ xsltAddKey(xsltStylesheetPtr style, const xmlChar *name, } current = end; } + if (pattern == NULL) { + xsltTransformError(NULL, style, inst, + "xsl:key : 'match' pattern is empty\n"); + if (style != NULL) style->errors++; + goto error; + } #ifdef WITH_XSLT_DEBUG_KEYS xsltGenericDebug(xsltGenericDebugContext, " resulting pattern %s\n", pattern); @@ -356,17 +363,25 @@ xsltAddKey(xsltStylesheetPtr style, const xmlChar *name, * Maybe a search for "$", if it occurs outside of quotation * marks, could be sufficient. */ +#ifdef XML_XPATH_NOVAR + key->comp = xsltXPathCompileFlags(style, pattern, XML_XPATH_NOVAR); +#else key->comp = xsltXPathCompile(style, pattern); +#endif if (key->comp == NULL) { xsltTransformError(NULL, style, inst, - "xsl:key : XPath pattern compilation failed '%s'\n", + "xsl:key : 'match' pattern compilation failed '%s'\n", pattern); if (style != NULL) style->errors++; } +#ifdef XML_XPATH_NOVAR + key->usecomp = xsltXPathCompileFlags(style, use, XML_XPATH_NOVAR); +#else key->usecomp = xsltXPathCompile(style, use); +#endif if (key->usecomp == NULL) { xsltTransformError(NULL, style, inst, - "xsl:key : XPath pattern compilation failed '%s'\n", + "xsl:key : 'use' expression compilation failed '%s'\n", use); if (style != NULL) style->errors++; } diff --git a/dll/3rdparty/libxslt/keys.h b/dll/3rdparty/libxslt/keys.h index 9182baaf8a6..757d122463a 100644 --- a/dll/3rdparty/libxslt/keys.h +++ b/dll/3rdparty/libxslt/keys.h @@ -32,17 +32,17 @@ XSLTPUBFUN int XSLTCALL const xmlChar *match, const xmlChar *use, xmlNodePtr inst); -XSLTPUBFUN xmlNodeSetPtr XSLTCALL +XSLTPUBFUN xmlNodeSetPtr XSLTCALL xsltGetKey (xsltTransformContextPtr ctxt, const xmlChar *name, const xmlChar *nameURI, const xmlChar *value); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltInitCtxtKeys (xsltTransformContextPtr ctxt, xsltDocumentPtr doc); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltFreeKeys (xsltStylesheetPtr style); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltFreeDocumentKeys (xsltDocumentPtr doc); #ifdef __cplusplus diff --git a/dll/3rdparty/libxslt/libxslt.h b/dll/3rdparty/libxslt/libxslt.h deleted file mode 100644 index 2b9f52a9fd5..00000000000 --- a/dll/3rdparty/libxslt/libxslt.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Summary: internal header only used during the compilation of libxslt - * Description: internal header only used during the compilation of libxslt - * - * Copy: See Copyright for the status of this software. - * - * Author: Daniel Veillard - */ - -#ifndef __XSLT_LIBXSLT_H__ -#define __XSLT_LIBXSLT_H__ - -#if defined(WIN32) && !defined (__CYGWIN__) && !defined (__MINGW32__) -#include -#else -#include "config.h" -#endif - -#include -#include - -#if !defined LIBXSLT_PUBLIC -#if (defined (__CYGWIN__) || defined _MSC_VER) && !defined IN_LIBXSLT && !defined LIBXSLT_STATIC -#define LIBXSLT_PUBLIC __declspec(dllimport) -#else -#define LIBXSLT_PUBLIC -#endif -#endif - -#endif /* ! __XSLT_LIBXSLT_H__ */ diff --git a/dll/3rdparty/libxslt/namespaces.c b/dll/3rdparty/libxslt/namespaces.c index 3e3891fb2a2..b3c9972c312 100644 --- a/dll/3rdparty/libxslt/namespaces.c +++ b/dll/3rdparty/libxslt/namespaces.c @@ -55,7 +55,7 @@ * * ************************************************************************/ -#ifdef XSLT_REFACTORED +#ifdef XSLT_REFACTORED static xsltNsAliasPtr xsltNewNsAlias(xsltCompilerCtxtPtr cctxt) { @@ -71,12 +71,12 @@ xsltNewNsAlias(xsltCompilerCtxtPtr cctxt) cctxt->style->errors++; return(NULL); } - memset(ret, 0, sizeof(xsltNsAlias)); + memset(ret, 0, sizeof(xsltNsAlias)); /* * TODO: Store the item at current stylesheet-level. */ ret->next = cctxt->nsAliases; - cctxt->nsAliases = ret; + cctxt->nsAliases = ret; return(ret); } @@ -96,8 +96,8 @@ xsltNamespaceAlias(xsltStylesheetPtr style, xmlNodePtr node) xmlChar *stylePrefix = NULL; xmlNsPtr literalNs = NULL; xmlNsPtr targetNs = NULL; - -#ifdef XSLT_REFACTORED + +#ifdef XSLT_REFACTORED xsltNsAliasPtr alias; if ((style == NULL) || (node == NULL)) @@ -118,9 +118,9 @@ xsltNamespaceAlias(xsltStylesheetPtr style, xmlNodePtr node) /* * NOTE that the XSLT 2.0 also *does* use the NULL namespace if * "#default" is used and there's no default namespace is scope. - * I.e., this is *not* an error. + * I.e., this is *not* an error. * Most XSLT 1.0 implementations work this way. - * The XSLT 1.0 spec has nothing to say on the subject. + * The XSLT 1.0 spec has nothing to say on the subject. */ /* * Attribute "stylesheet-prefix". @@ -132,7 +132,7 @@ xsltNamespaceAlias(xsltStylesheetPtr style, xmlNodePtr node) return; } if (xmlStrEqual(stylePrefix, (const xmlChar *)"#default")) - literalNs = xmlSearchNs(node->doc, node, NULL); + literalNs = xmlSearchNs(node->doc, node, NULL); else { literalNs = xmlSearchNs(node->doc, node, stylePrefix); if (literalNs == NULL) { @@ -151,7 +151,7 @@ xsltNamespaceAlias(xsltStylesheetPtr style, xmlNodePtr node) xsltTransformError(NULL, style, node, "The attribute 'result-prefix' is missing.\n"); goto error; - } + } if (xmlStrEqual(resultPrefix, (const xmlChar *)"#default")) targetNs = xmlSearchNs(node->doc, node, NULL); else { @@ -197,8 +197,8 @@ xsltNamespaceAlias(xsltStylesheetPtr style, xmlNodePtr node) * result-prefix="foo"/> * From no namespace to namespace. */ - - + + /* * Store the ns-node in the alias-object. */ @@ -213,7 +213,7 @@ xsltNamespaceAlias(xsltStylesheetPtr style, xmlNodePtr node) #else /* XSLT_REFACTORED */ const xmlChar *literalNsName; const xmlChar *targetNsName; - + if ((style == NULL) || (node == NULL)) return; @@ -230,7 +230,7 @@ xsltNamespaceAlias(xsltStylesheetPtr style, xmlNodePtr node) "namespace-alias: result-prefix attribute missing\n"); goto error; } - + if (xmlStrEqual(stylePrefix, (const xmlChar *)"#default")) { literalNs = xmlSearchNs(node->doc, node, NULL); if (literalNs == NULL) { @@ -239,7 +239,7 @@ xsltNamespaceAlias(xsltStylesheetPtr style, xmlNodePtr node) literalNsName = literalNs->href; /* Yes - set for nsAlias table */ } else { literalNs = xmlSearchNs(node->doc, node, stylePrefix); - + if ((literalNs == NULL) || (literalNs->href == NULL)) { xsltTransformError(NULL, style, node, "namespace-alias: prefix %s not bound to any namespace\n", @@ -275,13 +275,13 @@ xsltNamespaceAlias(xsltStylesheetPtr style, xmlNodePtr node) * Special case: if #default is used for * the stylesheet-prefix (literal namespace) and there's no default * namespace in scope, we'll use style->defaultAlias for this. - */ + */ if (literalNsName == NULL) { if (targetNs != NULL) { /* * BUG TODO: Is it not sufficient to have only 1 field for * this, since subsequently alias declarations will - * overwrite this. + * overwrite this. * Example: * @@ -358,7 +358,7 @@ xsltGetSpecialNamespace(xsltTransformContextPtr ctxt, xmlNodePtr invocNode, /* * OPTIMIZE TODO: This all could be optimized by keeping track of * the ns-decls currently in-scope via a specialized context. - */ + */ if ((nsPrefix == NULL) && ((nsName == NULL) || (nsName[0] == 0))) { /* * NOTE: the "undeclaration" of the default namespace was @@ -398,7 +398,7 @@ xsltGetSpecialNamespace(xsltTransformContextPtr ctxt, xmlNodePtr invocNode, } ns = ns->next; } while (ns != NULL); - } + } if ((target->parent != NULL) && (target->parent->type == XML_ELEMENT_NODE)) { @@ -408,7 +408,7 @@ xsltGetSpecialNamespace(xsltTransformContextPtr ctxt, xmlNodePtr invocNode, */ if (target->parent->ns == NULL) return(NULL); - + ns = xmlSearchNs(target->doc, target->parent, NULL); /* @@ -417,12 +417,12 @@ xsltGetSpecialNamespace(xsltTransformContextPtr ctxt, xmlNodePtr invocNode, */ if ((ns == NULL) || (ns->href == NULL) || (ns->href[0] == 0)) return(NULL); - + /* * Undeclare the default namespace. */ xmlNewNs(target, BAD_CAST "", NULL); - /* TODO: Check result */ + /* TODO: Check result */ return(NULL); } return(NULL); @@ -464,7 +464,7 @@ xsltGetSpecialNamespace(xsltTransformContextPtr ctxt, xmlNodePtr invocNode, * If the ns-prefix is occupied by an other ns-decl on the * result element, then this means: * 1) The desired prefix is shadowed - * 2) There's no way around changing the prefix + * 2) There's no way around changing the prefix * * Try a desperate search for an in-scope ns-decl * with a matching ns-name before we use the last option, @@ -476,7 +476,7 @@ xsltGetSpecialNamespace(xsltTransformContextPtr ctxt, xmlNodePtr invocNode, /* * Fallback to changing the prefix. - */ + */ } else if ((target->parent != NULL) && (target->parent->type == XML_ELEMENT_NODE)) { @@ -485,12 +485,12 @@ xsltGetSpecialNamespace(xsltTransformContextPtr ctxt, xmlNodePtr invocNode, * * Check the common case: The parent element of the current * result element is in the same namespace (with an equal ns-prefix). - */ + */ if ((target->parent->ns != NULL) && ((target->parent->ns->prefix != NULL) == (nsPrefix != NULL))) { ns = target->parent->ns; - + if (nsPrefix == NULL) { if (xmlStrEqual(ns->href, nsName)) return(ns); @@ -502,11 +502,11 @@ xsltGetSpecialNamespace(xsltTransformContextPtr ctxt, xmlNodePtr invocNode, } /* * Lookup the remaining in-scope namespaces. - */ + */ ns = xmlSearchNs(target->doc, target->parent, nsPrefix); if (ns != NULL) { if (xmlStrEqual(ns->href, nsName)) - return(ns); + return(ns); /* * Now check for a nasty case: We need to ensure that the new * ns-decl won't shadow a prefix in-use by an existing attribute. @@ -585,7 +585,7 @@ declare_new_prefix: int counter = 1; if (nsPrefix == NULL) { - nsPrefix = "ns"; + nsPrefix = BAD_CAST "ns"; } do { @@ -633,8 +633,8 @@ declare_new_prefix: xmlNsPtr xsltGetNamespace(xsltTransformContextPtr ctxt, xmlNodePtr cur, xmlNsPtr ns, xmlNodePtr out) -{ - +{ + if (ns == NULL) return(NULL); @@ -657,15 +657,15 @@ xsltGetNamespace(xsltTransformContextPtr ctxt, xmlNodePtr cur, xmlNsPtr ns, style = ctxt->style; while (style != NULL) { if (style->nsAliases != NULL) - URI = (const xmlChar *) + URI = (const xmlChar *) xmlHashLookup(style->nsAliases, ns->href); if (URI != NULL) break; - + style = xsltNextImport(style); } - - + + if (URI == UNDEFINED_DEFAULT_NS) { return(xsltGetSpecialNamespace(ctxt, cur, NULL, NULL, out)); #if 0 @@ -674,7 +674,7 @@ xsltGetNamespace(xsltTransformContextPtr ctxt, xmlNodePtr cur, xmlNsPtr ns, * namespace in the stylesheet then this must resolve to * the NULL namespace. */ - xmlNsPtr dflt; + xmlNsPtr dflt; dflt = xmlSearchNs(cur->doc, cur, NULL); if (dflt != NULL) URI = dflt->href; @@ -696,9 +696,9 @@ xsltGetNamespace(xsltTransformContextPtr ctxt, xmlNodePtr cur, xmlNsPtr ns, * @ns: the namespace * @out: the result element * - * Obsolete. + * Obsolete. * *Not* called by any Libxslt/Libexslt function. - * Exaclty the same as xsltGetNamespace(). + * Exaclty the same as xsltGetNamespace(). * * Returns a namespace declaration or NULL in case of * namespace fixup failures or API or internal errors. @@ -706,7 +706,7 @@ xsltGetNamespace(xsltTransformContextPtr ctxt, xmlNodePtr cur, xmlNsPtr ns, xmlNsPtr xsltGetPlainNamespace(xsltTransformContextPtr ctxt, xmlNodePtr cur, xmlNsPtr ns, xmlNodePtr out) -{ +{ return(xsltGetNamespace(ctxt, cur, ns, out)); } @@ -722,7 +722,7 @@ xsltGetPlainNamespace(xsltTransformContextPtr ctxt, xmlNodePtr cur, * This function is intended only for *internal* use at * transformation-time for copying ns-declarations of Literal * Result Elements. - * + * * Called by: * xsltCopyTreeInternal() (transform.c) * xsltShallowCopyElem() (transform.c) @@ -735,7 +735,7 @@ xmlNsPtr xsltCopyNamespaceList(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNsPtr cur) { xmlNsPtr ret = NULL, tmp; - xmlNsPtr p = NULL,q; + xmlNsPtr p = NULL,q; if (cur == NULL) return(NULL); @@ -759,7 +759,7 @@ xsltCopyNamespaceList(xsltTransformContextPtr ctxt, xmlNodePtr node, if (node != NULL) { if ((node->ns != NULL) && (xmlStrEqual(node->ns->prefix, cur->prefix)) && - (xmlStrEqual(node->ns->href, cur->href))) { + (xmlStrEqual(node->ns->href, cur->href))) { cur = cur->next; continue; } @@ -824,7 +824,7 @@ xsltCopyNamespaceList(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNsPtr xsltCopyNamespace(xsltTransformContextPtr ctxt ATTRIBUTE_UNUSED, xmlNodePtr elem, xmlNsPtr ns) -{ +{ if ((ns == NULL) || (ns->type != XML_NAMESPACE_DECL)) return(NULL); /* diff --git a/dll/3rdparty/libxslt/namespaces.h b/dll/3rdparty/libxslt/namespaces.h index 0bda5962e69..fa2d3b4ce75 100644 --- a/dll/3rdparty/libxslt/namespaces.h +++ b/dll/3rdparty/libxslt/namespaces.h @@ -32,31 +32,31 @@ extern "C" { XSLTPUBFUN void XSLTCALL xsltNamespaceAlias (xsltStylesheetPtr style, xmlNodePtr node); -XSLTPUBFUN xmlNsPtr XSLTCALL +XSLTPUBFUN xmlNsPtr XSLTCALL xsltGetNamespace (xsltTransformContextPtr ctxt, xmlNodePtr cur, xmlNsPtr ns, xmlNodePtr out); -XSLTPUBFUN xmlNsPtr XSLTCALL +XSLTPUBFUN xmlNsPtr XSLTCALL xsltGetPlainNamespace (xsltTransformContextPtr ctxt, xmlNodePtr cur, xmlNsPtr ns, xmlNodePtr out); -XSLTPUBFUN xmlNsPtr XSLTCALL +XSLTPUBFUN xmlNsPtr XSLTCALL xsltGetSpecialNamespace (xsltTransformContextPtr ctxt, xmlNodePtr cur, const xmlChar *URI, const xmlChar *prefix, xmlNodePtr out); -XSLTPUBFUN xmlNsPtr XSLTCALL +XSLTPUBFUN xmlNsPtr XSLTCALL xsltCopyNamespace (xsltTransformContextPtr ctxt, xmlNodePtr elem, xmlNsPtr ns); -XSLTPUBFUN xmlNsPtr XSLTCALL +XSLTPUBFUN xmlNsPtr XSLTCALL xsltCopyNamespaceList (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNsPtr cur); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltFreeNamespaceAliasHashes (xsltStylesheetPtr style); diff --git a/dll/3rdparty/libxslt/numbers.c b/dll/3rdparty/libxslt/numbers.c index 8683ca8b2d7..9cd1cf30591 100644 --- a/dll/3rdparty/libxslt/numbers.c +++ b/dll/3rdparty/libxslt/numbers.c @@ -193,7 +193,7 @@ xsltNumberFormatDecimal(xmlBufferPtr buffer, pointer -= groupingCharacterLen; xmlCopyCharMultiByte(pointer, groupingCharacter); } - + val = digit_zero + (int)fmod(number, 10.0); if (val < 0x80) { /* shortcut if ASCII */ if (pointer <= temp_string) { /* Check enough room */ @@ -203,7 +203,7 @@ xsltNumberFormatDecimal(xmlBufferPtr buffer, *(--pointer) = val; } else { - /* + /* * Here we have a multibyte character. It's a little messy, * because until we generate the char we don't know how long * it is. So, we generate it into the buffer temp_char, then @@ -241,7 +241,7 @@ xsltNumberFormatAlpha(xmlBufferPtr buffer, pointer = &temp_string[sizeof(temp_string)]; *(--pointer) = 0; alpha_list = (is_upper) ? alpha_upper_list : alpha_lower_list; - + for (i = 1; i < (int)sizeof(temp_string); i++) { number--; *(--pointer) = alpha_list[((int)fmod(number, alpha_size))]; @@ -337,7 +337,7 @@ xsltNumberFormatTokenize(const xmlChar *format, * There is always such a token in the list, even if NULL */ while (! (IS_LETTER(val=xmlStringCurrentChar(NULL, format+ix, &len)) || - IS_DIGIT(val)) ) { + IS_DIGIT(val)) ) { if (format[ix] == 0) /* if end of format string */ break; /* while */ ix += len; @@ -534,8 +534,8 @@ xsltNumberFormatInsertNumbers(xsltNumberDataPtr data, static int xsltNumberFormatGetAnyLevel(xsltTransformContextPtr context, xmlNodePtr node, - const xmlChar *count, - const xmlChar *from, + xsltCompMatchPtr countPat, + xsltCompMatchPtr fromPat, double *array, xmlDocPtr doc, xmlNodePtr elem) @@ -543,14 +543,7 @@ xsltNumberFormatGetAnyLevel(xsltTransformContextPtr context, int amount = 0; int cnt = 0; xmlNodePtr cur; - xsltCompMatchPtr countPat = NULL; - xsltCompMatchPtr fromPat = NULL; - if (count != NULL) - countPat = xsltCompilePattern(count, doc, elem, NULL, context); - if (from != NULL) - fromPat = xsltCompilePattern(from, doc, elem, NULL, context); - /* select the starting node */ switch (node->type) { case XML_ELEMENT_NODE: @@ -571,7 +564,7 @@ xsltNumberFormatGetAnyLevel(xsltTransformContextPtr context, while (cur != NULL) { /* process current node */ - if (count == NULL) { + if (countPat == NULL) { if ((node->type == cur->type) && /* FIXME: must use expanded-name instead of local name */ xmlStrEqual(node->name, cur->name)) { @@ -586,7 +579,7 @@ xsltNumberFormatGetAnyLevel(xsltTransformContextPtr context, if (xsltTestCompMatchList(context, cur, countPat)) cnt++; } - if ((from != NULL) && + if ((fromPat != NULL) && xsltTestCompMatchList(context, cur, fromPat)) { break; /* while */ } @@ -613,18 +606,14 @@ xsltNumberFormatGetAnyLevel(xsltTransformContextPtr context, array[amount++] = (double) cnt; - if (countPat != NULL) - xsltFreeCompMatchList(countPat); - if (fromPat != NULL) - xsltFreeCompMatchList(fromPat); return(amount); } static int xsltNumberFormatGetMultipleLevel(xsltTransformContextPtr context, xmlNodePtr node, - const xmlChar *count, - const xmlChar *from, + xsltCompMatchPtr countPat, + xsltCompMatchPtr fromPat, double *array, int max, xmlDocPtr doc, @@ -635,17 +624,7 @@ xsltNumberFormatGetMultipleLevel(xsltTransformContextPtr context, xmlNodePtr ancestor; xmlNodePtr preceding; xmlXPathParserContextPtr parser; - xsltCompMatchPtr countPat; - xsltCompMatchPtr fromPat; - if (count != NULL) - countPat = xsltCompilePattern(count, doc, elem, NULL, context); - else - countPat = NULL; - if (from != NULL) - fromPat = xsltCompilePattern(from, doc, elem, NULL, context); - else - fromPat = NULL; context->xpathCtxt->node = node; parser = xmlXPathNewParserContext(NULL, context->xpathCtxt); if (parser) { @@ -653,21 +632,21 @@ xsltNumberFormatGetMultipleLevel(xsltTransformContextPtr context, for (ancestor = node; (ancestor != NULL) && (ancestor->type != XML_DOCUMENT_NODE); ancestor = xmlXPathNextAncestor(parser, ancestor)) { - - if ((from != NULL) && + + if ((fromPat != NULL) && xsltTestCompMatchList(context, ancestor, fromPat)) break; /* for */ - - if ((count == NULL && node->type == ancestor->type && + + if ((countPat == NULL && node->type == ancestor->type && xmlStrEqual(node->name, ancestor->name)) || xsltTestCompMatchList(context, ancestor, countPat)) { /* count(preceding-sibling::*) */ cnt = 0; for (preceding = ancestor; preceding != NULL; - preceding = + preceding = xmlXPathNextPrecedingSibling(parser, preceding)) { - if (count == NULL) { + if (countPat == NULL) { if ((preceding->type == ancestor->type) && xmlStrEqual(preceding->name, ancestor->name)){ if ((preceding->ns == ancestor->ns) || @@ -690,8 +669,6 @@ xsltNumberFormatGetMultipleLevel(xsltTransformContextPtr context, } xmlXPathFreeParserContext(parser); } - xsltFreeCompMatchList(countPat); - xsltFreeCompMatchList(fromPat); return amount; } @@ -704,7 +681,7 @@ xsltNumberFormatGetValue(xmlXPathContextPtr context, int amount = 0; xmlBufferPtr pattern; xmlXPathObjectPtr obj; - + pattern = xmlBufferCreate(); if (pattern != NULL) { xmlBufferCCat(pattern, "number("); @@ -773,14 +750,14 @@ xsltNumberFormat(xsltTransformContextPtr ctxt, &tokens, output); } - + } else if (data->level) { - + if (xmlStrEqual(data->level, (const xmlChar *) "single")) { amount = xsltNumberFormatGetMultipleLevel(ctxt, node, - data->count, - data->from, + data->countPat, + data->fromPat, &number, 1, data->doc, @@ -797,8 +774,8 @@ xsltNumberFormat(xsltTransformContextPtr ctxt, int max = sizeof(numarray)/sizeof(numarray[0]); amount = xsltNumberFormatGetMultipleLevel(ctxt, node, - data->count, - data->from, + data->countPat, + data->fromPat, numarray, max, data->doc, @@ -813,9 +790,9 @@ xsltNumberFormat(xsltTransformContextPtr ctxt, } else if (xmlStrEqual(data->level, (const xmlChar *) "any")) { amount = xsltNumberFormatGetAnyLevel(ctxt, node, - data->count, - data->from, - &number, + data->countPat, + data->fromPat, + &number, data->doc, data->node); if (amount > 0) { @@ -838,7 +815,7 @@ xsltNumberFormat(xsltTransformContextPtr ctxt, if (tokens.tokens[i].separator != NULL) xmlFree(tokens.tokens[i].separator); } - + XSLT_NUMBER_FORMAT_END: if (tempformat == 1) { /* The format need to be recomputed each time */ @@ -855,9 +832,9 @@ xsltFormatNumberPreSuffix(xsltDecimalFormatPtr self, xmlChar **format, xsltForma int len; while (1) { - /* - * prefix / suffix ends at end of string or at - * first 'special' character + /* + * prefix / suffix ends at end of string or at + * first 'special' character */ if (**format == 0) return count; @@ -870,12 +847,12 @@ xsltFormatNumberPreSuffix(xsltDecimalFormatPtr self, xmlChar **format, xsltForma return count; /* * else treat percent/per-mille as special cases, - * depending on whether +ve or -ve + * depending on whether +ve or -ve */ else { /* - * for +ve prefix/suffix, allow only a - * single occurence of either + * for +ve prefix/suffix, allow only a + * single occurence of either */ if (xsltUTF8Charcmp(*format, self->percent) == 0) { if (info->is_multiplier_set) @@ -889,14 +866,14 @@ xsltFormatNumberPreSuffix(xsltDecimalFormatPtr self, xmlChar **format, xsltForma info->is_multiplier_set = TRUE; } } - + if ((len=xsltUTF8Size(*format)) < 1) return -1; count += len; *format += len; } } - + /** * xsltFormatNumberConversion: * @self: the decimal format @@ -955,9 +932,9 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, int j, len; int self_grouping_len; xsltFormatNumberInfo format_info; - /* + /* * delayed_multiplier allows a 'trailing' percent or - * permille to be treated as suffix + * permille to be treated as suffix */ int delayed_multiplier = 0; /* flag to show no -ve format present for -ve number */ @@ -1013,7 +990,7 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, /* * First we process the +ve pattern to get percent / permille, - * as well as main format + * as well as main format */ prefix = the_format; prefix_length = xsltFormatNumberPreSuffix(self, &the_format, &format_info); @@ -1022,18 +999,18 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, goto OUTPUT_NUMBER; } - /* - * Here we process the "number" part of the format. It gets + /* + * Here we process the "number" part of the format. It gets * a little messy because of the percent/per-mille - if that - * appears at the end, it may be part of the suffix instead - * of part of the number, so the variable delayed_multiplier - * is used to handle it + * appears at the end, it may be part of the suffix instead + * of part of the number, so the variable delayed_multiplier + * is used to handle it */ self_grouping_len = xmlStrlen(self->grouping); while ((*the_format != 0) && (xsltUTF8Charcmp(the_format, self->decimalPoint) != 0) && (xsltUTF8Charcmp(the_format, self->patternSeparator) != 0)) { - + if (delayed_multiplier != 0) { format_info.multiplier = delayed_multiplier; format_info.is_multiplier_set = TRUE; @@ -1071,7 +1048,7 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, delayed_multiplier = 1000; } else break; /* while */ - + if ((len=xsltUTF8Size(the_format)) < 1) { found_error = 1; goto OUTPUT_NUMBER; @@ -1085,9 +1062,9 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, format_info.add_decimal = TRUE; the_format += xsltUTF8Size(the_format); /* Skip over the decimal */ } - + while (*the_format != 0) { - + if (xsltUTF8Charcmp(the_format, self->zeroDigit) == 0) { if (format_info.frac_hash != 0) { found_error = 1; @@ -1135,9 +1112,9 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, } } - /* - * If delayed_multiplier is set after processing the - * "number" part, should be in suffix + /* + * If delayed_multiplier is set after processing the + * "number" part, should be in suffix */ if (delayed_multiplier != 0) { the_format -= len; @@ -1147,7 +1124,7 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, suffix = the_format; suffix_length = xsltFormatNumberPreSuffix(self, &the_format, &format_info); if ( (suffix_length < 0) || - ((*the_format != 0) && + ((*the_format != 0) && (xsltUTF8Charcmp(the_format, self->patternSeparator) != 0)) ) { found_error = 1; goto OUTPUT_NUMBER; @@ -1170,17 +1147,17 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, else { /* Skip over pattern separator (accounting for UTF8) */ the_format = (xmlChar *)xmlUTF8Strpos(format, j + 1); - /* - * Flag changes interpretation of percent/permille - * in -ve pattern + /* + * Flag changes interpretation of percent/permille + * in -ve pattern */ format_info.is_negative_pattern = TRUE; format_info.is_multiplier_set = FALSE; /* First do the -ve prefix */ nprefix = the_format; - nprefix_length = xsltFormatNumberPreSuffix(self, - &the_format, &format_info); + nprefix_length = xsltFormatNumberPreSuffix(self, + &the_format, &format_info); if (nprefix_length<0) { found_error = 1; goto OUTPUT_NUMBER; @@ -1214,7 +1191,7 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, /* Finally do the -ve suffix */ if (*the_format != 0) { nsuffix = the_format; - nsuffix_length = xsltFormatNumberPreSuffix(self, + nsuffix_length = xsltFormatNumberPreSuffix(self, &the_format, &format_info); if (nsuffix_length < 0) { found_error = 1; @@ -1232,12 +1209,12 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self, * if -ve prefix/suffix == +ve ones, discard & use default */ if ((nprefix_length != prefix_length) || - (nsuffix_length != suffix_length) || - ((nprefix_length > 0) && + (nsuffix_length != suffix_length) || + ((nprefix_length > 0) && (xmlStrncmp(nprefix, prefix, prefix_length) !=0 )) || - ((nsuffix_length > 0) && + ((nsuffix_length > 0) && (xmlStrncmp(nsuffix, suffix, suffix_length) !=0 ))) { - prefix = nprefix; + prefix = nprefix; prefix_length = nprefix_length; suffix = nsuffix; suffix_length = nsuffix_length; @@ -1283,9 +1260,9 @@ OUTPUT_NUMBER: number = fabs(number) * (double)format_info.multiplier; scale = pow(10.0, (double)(format_info.frac_digits + format_info.frac_hash)); number = floor((scale * number + 0.5)) / scale; - if ((self->grouping != NULL) && + if ((self->grouping != NULL) && (self->grouping[0] != 0)) { - + len = xmlStrlen(self->grouping); pchar = xsltGetUTF8Char(self->grouping, &len); xsltNumberFormatDecimal(buffer, floor(number), self->zeroDigit[0], @@ -1314,14 +1291,14 @@ OUTPUT_NUMBER: /* Next the fractional part, if required */ if (format_info.frac_digits + format_info.frac_hash == 0) { if (format_info.add_decimal) - xmlBufferAdd(buffer, self->decimalPoint, - xsltUTF8Size(self->decimalPoint)); + xmlBufferAdd(buffer, self->decimalPoint, + xsltUTF8Size(self->decimalPoint)); } else { number -= floor(number); if ((number != 0) || (format_info.frac_digits != 0)) { xmlBufferAdd(buffer, self->decimalPoint, - xsltUTF8Size(self->decimalPoint)); + xsltUTF8Size(self->decimalPoint)); number = floor(scale * number + 0.5); for (j = format_info.frac_hash; j > 0; j--) { if (fmod(number, 10.0) >= 1.0) diff --git a/dll/3rdparty/libxslt/numbersInternals.h b/dll/3rdparty/libxslt/numbersInternals.h deleted file mode 100644 index 7b3cb17bf7b..00000000000 --- a/dll/3rdparty/libxslt/numbersInternals.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Summary: Implementation of the XSLT number functions - * Description: Implementation of the XSLT number functions - * - * Copy: See Copyright for the status of this software. - * - * Author: Bjorn Reese and Daniel Veillard - */ - -#ifndef __XML_XSLT_NUMBERSINTERNALS_H__ -#define __XML_XSLT_NUMBERSINTERNALS_H__ - -#include -#include "xsltexports.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * xsltNumberData: - * - * This data structure is just a wrapper to pass xsl:number data in. - */ -typedef struct _xsltNumberData xsltNumberData; -typedef xsltNumberData *xsltNumberDataPtr; - -struct _xsltNumberData { - const xmlChar *level; - const xmlChar *count; - const xmlChar *from; - const xmlChar *value; - const xmlChar *format; - int has_format; - int digitsPerGroup; - int groupingCharacter; - int groupingCharacterLen; - xmlDocPtr doc; - xmlNodePtr node; - - /* - * accelerators - */ -}; - -/** - * xsltFormatNumberInfo,: - * - * This data structure lists the various parameters needed to format numbers. - */ -typedef struct _xsltFormatNumberInfo xsltFormatNumberInfo; -typedef xsltFormatNumberInfo *xsltFormatNumberInfoPtr; - -struct _xsltFormatNumberInfo { - int integer_hash; /* Number of '#' in integer part */ - int integer_digits; /* Number of '0' in integer part */ - int frac_digits; /* Number of '0' in fractional part */ - int frac_hash; /* Number of '#' in fractional part */ - int group; /* Number of chars per display 'group' */ - int multiplier; /* Scaling for percent or permille */ - char add_decimal; /* Flag for whether decimal point appears in pattern */ - char is_multiplier_set; /* Flag to catch multiple occurences of percent/permille */ - char is_negative_pattern;/* Flag for processing -ve prefix/suffix */ -}; - -#ifdef __cplusplus -} -#endif -#endif /* __XML_XSLT_NUMBERSINTERNALS_H__ */ diff --git a/dll/3rdparty/libxslt/pattern.c b/dll/3rdparty/libxslt/pattern.c index 8ce74e33cdb..63ec25a31b7 100644 --- a/dll/3rdparty/libxslt/pattern.c +++ b/dll/3rdparty/libxslt/pattern.c @@ -25,6 +25,7 @@ #include #include #include +#include #include "xslt.h" #include "xsltInternals.h" #include "xsltutils.h" @@ -127,9 +128,9 @@ struct _xsltParserContext { }; /************************************************************************ - * * - * Type functions * - * * + * * + * Type functions * + * * ************************************************************************/ /** @@ -303,6 +304,10 @@ xsltCompMatchAdd(xsltParserContextPtr ctxt, xsltCompMatchPtr comp, "xsltCompMatchAdd: memory re-allocation failure.\n"); if (ctxt->style != NULL) ctxt->style->errors++; + if (value) + xmlFree(value); + if (value2) + xmlFree(value2); return (-1); } comp->maxStep *= 2; @@ -368,7 +373,7 @@ xsltSwapTopCompMatch(xsltCompMatchPtr comp) { if (j > 0) { register xmlChar *tmp; register xsltOp op; - register xmlXPathCompExprPtr expr; + register xmlXPathCompExprPtr expr; register int t; i = j - 1; tmp = comp->steps[i].value; @@ -469,9 +474,9 @@ xsltReverseCompMatch(xsltParserContextPtr ctxt, xsltCompMatchPtr comp) { } /************************************************************************ - * * - * The interpreter for the precompiled patterns * - * * + * * + * The interpreter for the precompiled patterns * + * * ************************************************************************/ static int @@ -540,19 +545,21 @@ xsltTestCompMatchDirect(xsltTransformContextPtr ctxt, xsltCompMatchPtr comp, ix = XSLT_RUNTIME_EXTRA(ctxt, sel->indexExtra, ival); list = (xmlXPathObjectPtr) XSLT_RUNTIME_EXTRA_LST(ctxt, sel->lenExtra); - + if ((list == NULL) || (prevdoc != doc)) { xmlXPathObjectPtr newlist; xmlNodePtr parent = node->parent; xmlDocPtr olddoc; xmlNodePtr oldnode; - int oldNsNr; + int oldNsNr, oldContextSize, oldProximityPosition; xmlNsPtr *oldNamespaces; oldnode = ctxt->xpathCtxt->node; olddoc = ctxt->xpathCtxt->doc; oldNsNr = ctxt->xpathCtxt->nsNr; oldNamespaces = ctxt->xpathCtxt->namespaces; + oldContextSize = ctxt->xpathCtxt->contextSize; + oldProximityPosition = ctxt->xpathCtxt->proximityPosition; ctxt->xpathCtxt->node = node; ctxt->xpathCtxt->doc = doc; ctxt->xpathCtxt->namespaces = nsList; @@ -562,6 +569,8 @@ xsltTestCompMatchDirect(xsltTransformContextPtr ctxt, xsltCompMatchPtr comp, ctxt->xpathCtxt->doc = olddoc; ctxt->xpathCtxt->namespaces = oldNamespaces; ctxt->xpathCtxt->nsNr = oldNsNr; + ctxt->xpathCtxt->contextSize = oldContextSize; + ctxt->xpathCtxt->proximityPosition = oldProximityPosition; if (newlist == NULL) return(-1); if (newlist->type != XPATH_NODESET) { @@ -572,7 +581,7 @@ xsltTestCompMatchDirect(xsltTransformContextPtr ctxt, xsltCompMatchPtr comp, if ((parent == NULL) || (node->doc == NULL) || isRVT) nocache = 1; - + if (nocache == 0) { if (list != NULL) xmlXPathFreeObject(list); @@ -754,8 +763,8 @@ restart: if (step->op == XSLT_OP_ROOT) goto found; /* added NS, ID and KEY as a result of bug 168208 */ - if ((step->op != XSLT_OP_ELEM) && - (step->op != XSLT_OP_ALL) && + if ((step->op != XSLT_OP_ELEM) && + (step->op != XSLT_OP_ALL) && (step->op != XSLT_OP_NS) && (step->op != XSLT_OP_ID) && (step->op != XSLT_OP_KEY)) @@ -863,7 +872,7 @@ restart: xmlFree(states.states); } return(xsltTestCompMatchDirect(ctxt, comp, node, - comp->nsList, comp->nsNr)); + comp->nsList, comp->nsNr)); } doc = node->doc; @@ -884,11 +893,10 @@ restart: (node->type == XML_ELEMENT_NODE) && (node->parent != NULL)) { xmlNodePtr previous; - int ix, nocache = 0; + int nocache = 0; previous = (xmlNodePtr) XSLT_RUNTIME_EXTRA(ctxt, sel->previousExtra, ptr); - ix = XSLT_RUNTIME_EXTRA(ctxt, sel->indexExtra, ival); if ((previous != NULL) && (previous->parent == node->parent)) { /* @@ -900,7 +908,7 @@ restart: while (sibling != NULL) { if (sibling == previous) break; - if ((previous->type == XML_ELEMENT_NODE) && + if ((sibling->type == XML_ELEMENT_NODE) && (previous->name != NULL) && (sibling->name != NULL) && (previous->name[0] == sibling->name[0]) && @@ -921,7 +929,7 @@ restart: while (sibling != NULL) { if (sibling == previous) break; - if ((previous->type == XML_ELEMENT_NODE) && + if ((sibling->type == XML_ELEMENT_NODE) && (previous->name != NULL) && (sibling->name != NULL) && (previous->name[0] == sibling->name[0]) && @@ -939,7 +947,8 @@ restart: } } if (sibling != NULL) { - pos = ix + indx; + pos = XSLT_RUNTIME_EXTRA(ctxt, + sel->indexExtra, ival) + indx; /* * If the node is in a Value Tree we need to * save len, but cannot cache the node! @@ -955,7 +964,6 @@ restart: sel->indexExtra, ival) = pos; } } - ix = pos; } else pos = 0; } else { @@ -1016,11 +1024,10 @@ restart: } else if ((sel != NULL) && (sel->op == XSLT_OP_ALL) && (node->type == XML_ELEMENT_NODE)) { xmlNodePtr previous; - int ix, nocache = 0; + int nocache = 0; previous = (xmlNodePtr) XSLT_RUNTIME_EXTRA(ctxt, sel->previousExtra, ptr); - ix = XSLT_RUNTIME_EXTRA(ctxt, sel->indexExtra, ival); if ((previous != NULL) && (previous->parent == node->parent)) { /* @@ -1049,7 +1056,8 @@ restart: } } if (sibling != NULL) { - pos = ix + indx; + pos = XSLT_RUNTIME_EXTRA(ctxt, + sel->indexExtra, ival) + indx; /* * If the node is in a Value Tree we cannot * cache it ! @@ -1227,17 +1235,17 @@ xsltTestCompMatchList(xsltTransformContextPtr ctxt, xmlNodePtr node, #define NXT(val) ctxt->cur[(val)] #define CUR_PTR ctxt->cur -#define SKIP_BLANKS \ +#define SKIP_BLANKS \ while (IS_BLANK_CH(CUR)) NEXT #define CURRENT (*ctxt->cur) #define NEXT ((*ctxt->cur) ? ctxt->cur++: ctxt->cur) -#define PUSH(op, val, val2, novar) \ +#define PUSH(op, val, val2, novar) \ if (xsltCompMatchAdd(ctxt, ctxt->comp, (op), (val), (val2), (novar))) goto error; -#define SWAP() \ +#define SWAP() \ xsltSwapTopCompMatch(ctxt->comp); #define XSLT_ERROR(X) \ @@ -1381,17 +1389,22 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, NEXT; SKIP_BLANKS; lit = xsltScanLiteral(ctxt); - if (ctxt->error) + if (ctxt->error) { + xsltTransformError(NULL, NULL, NULL, + "xsltCompileIdKeyPattern : Literal expected\n"); return; + } SKIP_BLANKS; if (CUR != ')') { xsltTransformError(NULL, NULL, NULL, "xsltCompileIdKeyPattern : ) expected\n"); + xmlFree(lit); ctxt->error = 1; return; } NEXT; PUSH(XSLT_OP_ID, lit, NULL, novar); + lit = NULL; } else if ((aid) && (xmlStrEqual(name, (const xmlChar *)"key"))) { if (axis != 0) { xsltTransformError(NULL, NULL, NULL, @@ -1402,8 +1415,11 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, NEXT; SKIP_BLANKS; lit = xsltScanLiteral(ctxt); - if (ctxt->error) + if (ctxt->error) { + xsltTransformError(NULL, NULL, NULL, + "xsltCompileIdKeyPattern : Literal expected\n"); return; + } SKIP_BLANKS; if (CUR != ',') { xsltTransformError(NULL, NULL, NULL, @@ -1414,25 +1430,36 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, NEXT; SKIP_BLANKS; lit2 = xsltScanLiteral(ctxt); - if (ctxt->error) + if (ctxt->error) { + xsltTransformError(NULL, NULL, NULL, + "xsltCompileIdKeyPattern : Literal expected\n"); + xmlFree(lit); return; + } SKIP_BLANKS; if (CUR != ')') { xsltTransformError(NULL, NULL, NULL, "xsltCompileIdKeyPattern : ) expected\n"); + xmlFree(lit); + xmlFree(lit2); ctxt->error = 1; return; } NEXT; /* URGENT TODO: support namespace in keys */ PUSH(XSLT_OP_KEY, lit, lit2, novar); + lit = NULL; + lit2 = NULL; } else if (xmlStrEqual(name, (const xmlChar *)"processing-instruction")) { NEXT; SKIP_BLANKS; if (CUR != ')') { lit = xsltScanLiteral(ctxt); - if (ctxt->error) + if (ctxt->error) { + xsltTransformError(NULL, NULL, NULL, + "xsltCompileIdKeyPattern : Literal expected\n"); return; + } SKIP_BLANKS; if (CUR != ')') { xsltTransformError(NULL, NULL, NULL, @@ -1443,6 +1470,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, } NEXT; PUSH(XSLT_OP_PI, lit, NULL, novar); + lit = NULL; } else if (xmlStrEqual(name, (const xmlChar *)"text")) { NEXT; SKIP_BLANKS; @@ -1493,8 +1521,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, return; } error: - if (name != NULL) - xmlFree(name); + return; } /** @@ -1506,7 +1533,7 @@ error: * Compile the XSLT StepPattern and generates a precompiled * form suitable for fast matching. * - * [5] StepPattern ::= ChildOrAttributeAxisSpecifier NodeTest Predicate* + * [5] StepPattern ::= ChildOrAttributeAxisSpecifier NodeTest Predicate* * [6] ChildOrAttributeAxisSpecifier ::= AbbreviatedAxisSpecifier * | ('child' | 'attribute') '::' * from XPath @@ -1557,6 +1584,8 @@ parse_node_test: SKIP_BLANKS; if (CUR == '(') { xsltCompileIdKeyPattern(ctxt, token, 0, novar, axis); + xmlFree(token); + token = NULL; if (ctxt->error) goto error; } else if (CUR == ':') { @@ -1575,20 +1604,24 @@ parse_node_test: "xsltCompileStepPattern : no namespace bound to prefix %s\n", prefix); xmlFree(prefix); + prefix=NULL; ctxt->error = 1; goto error; } else { URL = xmlStrdup(ns->href); } xmlFree(prefix); + prefix=NULL; if (token == NULL) { if (CUR == '*') { NEXT; if (axis == AXIS_ATTRIBUTE) { PUSH(XSLT_OP_ATTR, NULL, URL, novar); + URL = NULL; } else { PUSH(XSLT_OP_NS, URL, NULL, novar); + URL = NULL; } } else { xsltTransformError(NULL, NULL, NULL, @@ -1599,9 +1632,13 @@ parse_node_test: } else { if (axis == AXIS_ATTRIBUTE) { PUSH(XSLT_OP_ATTR, token, URL, novar); + token = NULL; + URL = NULL; } else { PUSH(XSLT_OP_ELEM, token, URL, novar); + token = NULL; + URL = NULL; } } } else { @@ -1623,6 +1660,7 @@ parse_node_test: goto error; } xmlFree(token); + token = NULL; SKIP_BLANKS; token = xsltScanNCName(ctxt); goto parse_node_test; @@ -1637,9 +1675,13 @@ parse_node_test: URL = xmlStrdup(URI); if (axis == AXIS_ATTRIBUTE) { PUSH(XSLT_OP_ATTR, token, URL, novar); + token = NULL; + URL = NULL; } else { PUSH(XSLT_OP_ELEM, token, URL, novar); + token = NULL; + URL = NULL; } } parse_predicate: @@ -1679,6 +1721,7 @@ parse_predicate: } ret = xmlStrndup(q, CUR_PTR - q); PUSH(XSLT_OP_PREDICATE, ret, NULL, novar); + ret = NULL; /* push the predicate lower than local test */ SWAP(); NEXT; @@ -1787,6 +1830,8 @@ xsltCompileLocationPathPattern(xsltParserContextPtr ctxt, int novar) { SKIP_BLANKS; if ((CUR == '(') && !xmlXPathIsNodeType(name)) { xsltCompileIdKeyPattern(ctxt, name, 1, novar, 0); + xmlFree(name); + name = NULL; if ((CUR == '/') && (NXT(1) == '/')) { PUSH(XSLT_OP_ANCESTOR, NULL, NULL, novar); NEXT; @@ -1864,6 +1909,8 @@ xsltCompilePatternInternal(const xmlChar *pattern, xmlDocPtr doc, while ((pattern[end] != 0) && (pattern[end] != '"')) end++; } + if (pattern[end] == 0) + break; end++; } if (current == end) { @@ -2040,12 +2087,12 @@ xsltAddTemplate(xsltStylesheetPtr style, xsltTemplatePtr cur, pat = xsltCompilePatternInternal(cur->match, style->doc, cur->elem, style, NULL, 1); if (pat == NULL) - return(-1); + return(-1); while (pat) { next = pat->next; pat->next = NULL; name = NULL; - + pat->template = cur; if (mode != NULL) pat->mode = xmlDictLookup(style->dict, mode, -1); @@ -2432,7 +2479,7 @@ keyed_match: goto error; switch (node->type) { - case XML_ELEMENT_NODE: + case XML_ELEMENT_NODE: if (node->psvi != NULL) keyed = 1; break; case XML_ATTRIBUTE_NODE: @@ -2441,13 +2488,13 @@ keyed_match: case XML_TEXT_NODE: case XML_CDATA_SECTION_NODE: case XML_COMMENT_NODE: - case XML_PI_NODE: + case XML_PI_NODE: if (node->psvi != NULL) keyed = 1; break; case XML_DOCUMENT_NODE: case XML_HTML_DOCUMENT_NODE: if (((xmlDocPtr) node)->psvi != NULL) keyed = 1; - break; + break; default: break; } diff --git a/dll/3rdparty/libxslt/pattern.h b/dll/3rdparty/libxslt/pattern.h deleted file mode 100644 index eb21be32937..00000000000 --- a/dll/3rdparty/libxslt/pattern.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Summary: interface for the pattern matching used in template matches. - * Description: the implementation of the lookup of the right template - * for a given node must be really fast in order to keep - * decent performances. - * - * Copy: See Copyright for the status of this software. - * - * Author: Daniel Veillard - */ - -#ifndef __XML_XSLT_PATTERN_H__ -#define __XML_XSLT_PATTERN_H__ - -#include "xsltInternals.h" -#include "xsltexports.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * xsltCompMatch: - * - * Data structure used for the implementation of patterns. - * It is kept private (in pattern.c). - */ -typedef struct _xsltCompMatch xsltCompMatch; -typedef xsltCompMatch *xsltCompMatchPtr; - -/* - * Pattern related interfaces. - */ - -XSLTPUBFUN xsltCompMatchPtr XSLTCALL - xsltCompilePattern (const xmlChar *pattern, - xmlDocPtr doc, - xmlNodePtr node, - xsltStylesheetPtr style, - xsltTransformContextPtr runtime); -XSLTPUBFUN void XSLTCALL - xsltFreeCompMatchList (xsltCompMatchPtr comp); -XSLTPUBFUN int XSLTCALL - xsltTestCompMatchList (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xsltCompMatchPtr comp); -XSLTPUBFUN void XSLTCALL - xsltNormalizeCompSteps (void *payload, - void *data, - const xmlChar *name); - -/* - * Template related interfaces. - */ -XSLTPUBFUN int XSLTCALL - xsltAddTemplate (xsltStylesheetPtr style, - xsltTemplatePtr cur, - const xmlChar *mode, - const xmlChar *modeURI); -XSLTPUBFUN xsltTemplatePtr XSLTCALL - xsltGetTemplate (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xsltStylesheetPtr style); -XSLTPUBFUN void XSLTCALL - xsltFreeTemplateHashes (xsltStylesheetPtr style); -XSLTPUBFUN void XSLTCALL - xsltCleanupTemplates (xsltStylesheetPtr style); - -#if 0 -int xsltMatchPattern (xsltTransformContextPtr ctxt, - xmlNodePtr node, - const xmlChar *pattern, - xmlDocPtr ctxtdoc, - xmlNodePtr ctxtnode); -#endif -#ifdef __cplusplus -} -#endif - -#endif /* __XML_XSLT_PATTERN_H__ */ - diff --git a/dll/3rdparty/libxslt/preproc.c b/dll/3rdparty/libxslt/preproc.c index b47d8099005..4ef3f631d98 100644 --- a/dll/3rdparty/libxslt/preproc.c +++ b/dll/3rdparty/libxslt/preproc.c @@ -39,6 +39,7 @@ #include "extra.h" #include "imports.h" #include "extensions.h" +#include "pattern.h" #ifdef WITH_XSLT_DEBUG #define WITH_XSLT_DEBUG_PREPROC @@ -72,7 +73,7 @@ xsltCheckTopLevelElement(xsltStylesheetPtr style, xmlNodePtr inst, int err) { xmlNodePtr parent; if ((style == NULL) || (inst == NULL) || (inst->ns == NULL)) return(-1); - + parent = inst->parent; if (parent == NULL) { if (err) { @@ -115,7 +116,7 @@ xsltCheckInstructionElement(xsltStylesheetPtr style, xmlNodePtr inst) { return; has_ext = (style->extInfos != NULL); - + parent = inst->parent; if (parent == NULL) { xsltTransformError(NULL, style, inst, @@ -141,7 +142,7 @@ xsltCheckInstructionElement(xsltStylesheetPtr style, xmlNodePtr inst) { if ((has_ext) && (parent->ns != NULL) && (xmlHashLookup(style->extInfos, parent->ns->href) != NULL)) return; - + parent = parent->parent; } xsltTransformError(NULL, style, inst, @@ -193,7 +194,7 @@ xsltCheckParentElement(xsltStylesheetPtr style, xmlNodePtr inst, if ((parent->ns != NULL) && (xmlHashLookup(style->extInfos, parent->ns->href) != NULL)) return; - + parent = parent->parent; } } @@ -229,7 +230,7 @@ xsltNewStylePreComp(xsltStylesheetPtr style, xsltStyleType type) { if (style == NULL) return(NULL); - + #ifdef XSLT_REFACTORED /* * URGENT TODO: Use specialized factory functions in order @@ -280,7 +281,7 @@ xsltNewStylePreComp(xsltStylesheetPtr style, xsltStyleType type) { size = sizeof(xsltStyleItemWhen); break; case XSLT_FUNC_OTHERWISE: size = sizeof(xsltStyleItemOtherwise); break; - default: + default: xsltTransformError(NULL, style, NULL, "xsltNewStylePreComp : invalid type %d\n", type); style->errors++; @@ -353,8 +354,8 @@ xsltNewStylePreComp(xsltStylesheetPtr style, xsltStyleType type) { case XSLT_FUNC_DOCUMENT: cur->func = (xsltTransformFunction) xsltDocumentElem;break; case XSLT_FUNC_WITHPARAM: - case XSLT_FUNC_PARAM: - case XSLT_FUNC_VARIABLE: + case XSLT_FUNC_PARAM: + case XSLT_FUNC_VARIABLE: case XSLT_FUNC_WHEN: break; default: @@ -419,7 +420,13 @@ xsltFreeStylePreComp(xsltStylePreCompPtr comp) { xmlXPathFreeCompExpr(item->comp); } break; - case XSLT_FUNC_NUMBER: + case XSLT_FUNC_NUMBER: { + xsltStyleItemNumberPtr item = (xsltStyleItemNumberPtr) comp; + if (item->numdata.countPat != NULL) + xsltFreeCompMatchList(item->numdata.countPat); + if (item->numdata.fromPat != NULL) + xsltFreeCompMatchList(item->numdata.fromPat); + } break; case XSLT_FUNC_APPLYIMPORTS: break; @@ -477,22 +484,26 @@ xsltFreeStylePreComp(xsltStylePreCompPtr comp) { xmlXPathFreeCompExpr(item->comp); } break; - case XSLT_FUNC_OTHERWISE: + case XSLT_FUNC_OTHERWISE: case XSLT_FUNC_FALLBACK: case XSLT_FUNC_MESSAGE: case XSLT_FUNC_INCLUDE: case XSLT_FUNC_ATTRSET: - + break; default: /* TODO: Raise error. */ break; } -#else +#else if (comp->locale != (xsltLocale)0) xsltFreeLocale(comp->locale); if (comp->comp != NULL) xmlXPathFreeCompExpr(comp->comp); + if (comp->numdata.countPat != NULL) + xsltFreeCompMatchList(comp->numdata.countPat); + if (comp->numdata.fromPat != NULL) + xsltFreeCompMatchList(comp->numdata.fromPat); if (comp->nsList != NULL) xmlFree(comp->nsList); #endif @@ -545,7 +556,7 @@ xsltDocumentComp(xsltStylesheetPtr style, xmlNodePtr inst, #else comp = xsltNewStylePreComp(style, XSLT_FUNC_DOCUMENT); #endif - + if (comp == NULL) return (NULL); comp->inst = inst; @@ -592,8 +603,8 @@ xsltDocumentComp(xsltStylesheetPtr style, xmlNodePtr inst, #ifdef WITH_XSLT_DEBUG_EXTRA xsltGenericDebug(xsltGenericDebugContext, "Found xslt11:document construct\n"); -#endif - } else { +#endif + } else { if (xmlStrEqual(inst->ns->href, (const xmlChar *)"http://exslt.org/common")) { /* EXSLT. */ @@ -634,12 +645,12 @@ xsltDocumentComp(xsltStylesheetPtr style, xmlNodePtr inst, * 3) XSLT_XT_NAMESPACE (http://www.jclark.com/xt) * Example: * TODO: is @href is an AVT? - * + * * In all cases @href is in no namespace. */ filename = xsltEvalStaticAttrValueTemplate(style, inst, (const xmlChar *)"href", NULL, &comp->has_filename); - } + } if (!comp->has_filename) { goto error; } @@ -669,7 +680,7 @@ xsltSortComp(xsltStylesheetPtr style, xmlNodePtr inst) { #else xsltStylePreCompPtr comp; #endif - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -677,7 +688,7 @@ xsltSortComp(xsltStylesheetPtr style, xmlNodePtr inst) { #else comp = xsltNewStylePreComp(style, XSLT_FUNC_SORT); #endif - + if (comp == NULL) return; inst->psvi = comp; @@ -777,14 +788,14 @@ xsltCopyComp(xsltStylesheetPtr style, xmlNodePtr inst) { xsltStylePreCompPtr comp; #endif - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED comp = (xsltStyleItemCopyPtr) xsltNewStylePreComp(style, XSLT_FUNC_COPY); #else comp = xsltNewStylePreComp(style, XSLT_FUNC_COPY); #endif - + if (comp == NULL) return; inst->psvi = comp; @@ -821,14 +832,14 @@ xsltTextComp(xsltStylesheetPtr style, xmlNodePtr inst) { #endif const xmlChar *prop; - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED comp = (xsltStyleItemTextPtr) xsltNewStylePreComp(style, XSLT_FUNC_TEXT); #else comp = xsltNewStylePreComp(style, XSLT_FUNC_TEXT); -#endif +#endif if (comp == NULL) return; inst->psvi = comp; @@ -874,7 +885,7 @@ xsltElementComp(xsltStylesheetPtr style, xmlNodePtr inst) { * * */ - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -910,8 +921,8 @@ xsltElementComp(xsltStylesheetPtr style, xmlNodePtr inst) { */ comp->ns = xsltEvalStaticAttrValueTemplate(style, inst, (const xmlChar *)"namespace", NULL, &comp->has_ns); - - if (comp->name != NULL) { + + if (comp->name != NULL) { if (xmlValidateQName(comp->name, 0)) { xsltTransformError(NULL, style, inst, "xsl:element: The value '%s' of the attribute 'name' is " @@ -921,7 +932,7 @@ xsltElementComp(xsltStylesheetPtr style, xmlNodePtr inst) { const xmlChar *prefix = NULL, *name; name = xsltSplitQName(style->dict, comp->name, &prefix); - if (comp->has_ns == 0) { + if (comp->has_ns == 0) { xmlNsPtr ns; /* @@ -930,7 +941,7 @@ xsltElementComp(xsltStylesheetPtr style, xmlNodePtr inst) { * expanded into an expanded-name using the namespace declarations * in effect for the xsl:element element, including any default * namespace declaration. - */ + */ ns = xmlSearchNs(inst->doc, inst, prefix); if (ns != NULL) { comp->ns = xmlDictLookup(style->dict, ns->href, -1); @@ -947,17 +958,17 @@ xsltElementComp(xsltStylesheetPtr style, xmlNodePtr inst) { "not specified by the instruction itself.\n", comp->name); style->errors++; } - } + } if ((prefix != NULL) && (!xmlStrncasecmp(prefix, (xmlChar *)"xml", 3))) { /* * Mark is to be skipped. */ - comp->has_name = 0; + comp->has_name = 0; } } - } + } /* * Attribute "use-attribute-sets", */ @@ -965,7 +976,7 @@ xsltElementComp(xsltStylesheetPtr style, xmlNodePtr inst) { (const xmlChar *)"use-attribute-sets", NULL, &comp->has_use); -error: +error: return; } @@ -991,7 +1002,7 @@ xsltAttributeComp(xsltStylesheetPtr style, xmlNodePtr inst) { * * */ - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -1000,7 +1011,7 @@ xsltAttributeComp(xsltStylesheetPtr style, xmlNodePtr inst) { #else comp = xsltNewStylePreComp(style, XSLT_FUNC_ATTRIBUTE); #endif - + if (comp == NULL) return; inst->psvi = comp; @@ -1020,7 +1031,7 @@ xsltAttributeComp(xsltStylesheetPtr style, xmlNodePtr inst) { "XSLT-attribute: The attribute 'name' is missing.\n"); style->errors++; return; - } + } /* * Attribute "namespace". */ @@ -1037,6 +1048,10 @@ xsltAttributeComp(xsltStylesheetPtr style, xmlNodePtr inst) { "xsl:attribute: The value '%s' of the attribute 'name' is " "not a valid QName.\n", comp->name); style->errors++; + } else if (xmlStrEqual(comp->name, BAD_CAST "xmlns")) { + xsltTransformError(NULL, style, inst, + "xsl:attribute: The attribute name 'xmlns' is not allowed.\n"); + style->errors++; } else { const xmlChar *prefix = NULL, *name; @@ -1051,7 +1066,7 @@ xsltAttributeComp(xsltStylesheetPtr style, xmlNodePtr inst) { * QName is expanded into an expanded-name using the * namespace declarations in effect for the xsl:element * element, including any default namespace declaration. - */ + */ ns = xmlSearchNs(inst->doc, inst, prefix); if (ns != NULL) { comp->ns = xmlDictLookup(style->dict, ns->href, -1); @@ -1070,29 +1085,8 @@ xsltAttributeComp(xsltStylesheetPtr style, xmlNodePtr inst) { style->errors++; } } - if (!xmlStrncasecmp(prefix, (xmlChar *) "xmlns", 5)) { - /* - * SPEC XSLT 1.0: - * "It is an error if the string that results from - * instantiating the attribute value template is not a - * QName or is the string xmlns. An XSLT processor may - * signal the error; if it does not signal the error, - * it must recover by not adding the attribute to the - * result tree." - * - * Reject a prefix of "xmlns". Mark to be skipped. - */ - comp->has_name = 0; - -#ifdef WITH_XSLT_DEBUG_PARSING - xsltGenericDebug(xsltGenericDebugContext, - "xsltAttribute: xmlns prefix forbidden\n"); -#endif - return; - } - } - } + } } } @@ -1111,7 +1105,7 @@ xsltCommentComp(xsltStylesheetPtr style, xmlNodePtr inst) { xsltStylePreCompPtr comp; #endif - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -1141,7 +1135,7 @@ xsltProcessingInstructionComp(xsltStylesheetPtr style, xmlNodePtr inst) { xsltStylePreCompPtr comp; #endif - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -1175,7 +1169,7 @@ xsltCopyOfComp(xsltStylesheetPtr style, xmlNodePtr inst) { xsltStylePreCompPtr comp; #endif - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -1222,7 +1216,7 @@ xsltValueOfComp(xsltStylesheetPtr style, xmlNodePtr inst) { #endif const xmlChar *prop; - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -1347,7 +1341,7 @@ xsltWithParamComp(xsltStylesheetPtr style, xmlNodePtr inst) { xsltStylePreCompPtr comp; #endif - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -1406,7 +1400,7 @@ xsltNumberComp(xsltStylesheetPtr style, xmlNodePtr cur) { #endif const xmlChar *prop; - if ((style == NULL) || (cur == NULL)) + if ((style == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -1426,7 +1420,7 @@ xsltNumberComp(xsltStylesheetPtr style, xmlNodePtr cur) { comp->numdata.node = cur; comp->numdata.value = xsltGetCNsProp(style, cur, (const xmlChar *)"value", XSLT_NAMESPACE); - + prop = xsltEvalStaticAttrValueTemplate(style, cur, (const xmlChar *)"format", XSLT_NAMESPACE, &comp->numdata.has_format); @@ -1437,10 +1431,22 @@ xsltNumberComp(xsltStylesheetPtr style, xmlNodePtr cur) { } comp->numdata.count = xsltGetCNsProp(style, cur, (const xmlChar *)"count", - XSLT_NAMESPACE); + XSLT_NAMESPACE); comp->numdata.from = xsltGetCNsProp(style, cur, (const xmlChar *)"from", - XSLT_NAMESPACE); - + XSLT_NAMESPACE); + + prop = xsltGetCNsProp(style, cur, (const xmlChar *)"count", XSLT_NAMESPACE); + if (prop != NULL) { + comp->numdata.countPat = xsltCompilePattern(prop, cur->doc, cur, style, + NULL); + } + + prop = xsltGetCNsProp(style, cur, (const xmlChar *)"from", XSLT_NAMESPACE); + if (prop != NULL) { + comp->numdata.fromPat = xsltCompilePattern(prop, cur->doc, cur, style, + NULL); + } + prop = xsltGetCNsProp(style, cur, (const xmlChar *)"level", XSLT_NAMESPACE); if (prop != NULL) { if (xmlStrEqual(prop, BAD_CAST("single")) || @@ -1453,14 +1459,14 @@ xsltNumberComp(xsltStylesheetPtr style, xmlNodePtr cur) { if (style != NULL) style->warnings++; } } - + prop = xsltGetCNsProp(style, cur, (const xmlChar *)"lang", XSLT_NAMESPACE); if (prop != NULL) { xsltTransformError(NULL, style, cur, "xsl:number : lang attribute not implemented\n"); XSLT_TODO; /* xsl:number lang attribute */ } - + prop = xsltGetCNsProp(style, cur, (const xmlChar *)"letter-value", XSLT_NAMESPACE); if (prop != NULL) { if (xmlStrEqual(prop, BAD_CAST("alphabetic"))) { @@ -1479,7 +1485,7 @@ xsltNumberComp(xsltStylesheetPtr style, xmlNodePtr cur) { if (style != NULL) style->warnings++; } } - + prop = xsltGetCNsProp(style, cur, (const xmlChar *)"grouping-separator", XSLT_NAMESPACE); if (prop != NULL) { @@ -1487,7 +1493,7 @@ xsltNumberComp(xsltStylesheetPtr style, xmlNodePtr cur) { comp->numdata.groupingCharacter = xsltGetUTF8Char(prop, &(comp->numdata.groupingCharacterLen)); } - + prop = xsltGetCNsProp(style, cur, (const xmlChar *)"grouping-size", XSLT_NAMESPACE); if (prop != NULL) { sscanf((char *)prop, "%d", &comp->numdata.digitsPerGroup); @@ -1502,7 +1508,7 @@ xsltNumberComp(xsltStylesheetPtr style, xmlNodePtr cur) { BAD_CAST"single", 6); } } - + } /** @@ -1520,7 +1526,7 @@ xsltApplyImportsComp(xsltStylesheetPtr style, xmlNodePtr inst) { xsltStylePreCompPtr comp; #endif - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -1550,7 +1556,7 @@ xsltCallTemplateComp(xsltStylesheetPtr style, xmlNodePtr inst) { xsltStylePreCompPtr comp; #endif - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -1589,7 +1595,7 @@ xsltApplyTemplatesComp(xsltStylesheetPtr style, xmlNodePtr inst) { xsltStylePreCompPtr comp; #endif - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -1641,7 +1647,7 @@ xsltChooseComp(xsltStylesheetPtr style, xmlNodePtr inst) { xsltStylePreCompPtr comp; #endif - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -1672,7 +1678,7 @@ xsltIfComp(xsltStylesheetPtr style, xmlNodePtr inst) { xsltStylePreCompPtr comp; #endif - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -1718,7 +1724,7 @@ xsltWhenComp(xsltStylesheetPtr style, xmlNodePtr inst) { xsltStylePreCompPtr comp; #endif - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -1764,7 +1770,7 @@ xsltForEachComp(xsltStylesheetPtr style, xmlNodePtr inst) { xsltStylePreCompPtr comp; #endif - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -1812,7 +1818,7 @@ xsltVariableComp(xsltStylesheetPtr style, xmlNodePtr inst) { xsltStylePreCompPtr comp; #endif - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -1837,13 +1843,16 @@ xsltVariableComp(xsltStylesheetPtr style, xmlNodePtr inst) { xsltGetQNameProperty(style, inst, BAD_CAST "name", 1, &(comp->has_name), &(comp->ns), &(comp->name)); if (comp->ns) - comp->has_ns = 1; + comp->has_ns = 1; /* * Attribute "select". */ comp->select = xsltGetCNsProp(style, inst, (const xmlChar *)"select", XSLT_NAMESPACE); if (comp->select != NULL) { +#ifndef XSLT_REFACTORED + xmlNodePtr cur; +#endif comp->comp = xsltXPathCompile(style, comp->select); if (comp->comp == NULL) { xsltTransformError(NULL, style, inst, @@ -1851,12 +1860,25 @@ xsltVariableComp(xsltStylesheetPtr style, xmlNodePtr inst) { comp->select); style->errors++; } +#ifdef XSLT_REFACTORED if (inst->children != NULL) { xsltTransformError(NULL, style, inst, - "XSLT-variable: The must be no child nodes, since the " + "XSLT-variable: There must be no child nodes, since the " "attribute 'select' was specified.\n"); style->errors++; } +#else + for (cur = inst->children; cur != NULL; cur = cur->next) { + if (cur->type != XML_COMMENT_NODE && + (cur->type != XML_TEXT_NODE || !xsltIsBlank(cur->content))) + { + xsltTransformError(NULL, style, inst, + "XSLT-variable: There must be no child nodes, since the " + "attribute 'select' was specified.\n"); + style->errors++; + } + } +#endif } } @@ -1875,7 +1897,7 @@ xsltParamComp(xsltStylesheetPtr style, xmlNodePtr inst) { xsltStylePreCompPtr comp; #endif - if ((style == NULL) || (inst == NULL)) + if ((style == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return; #ifdef XSLT_REFACTORED @@ -1936,11 +1958,11 @@ xsltFreeStylePreComps(xsltStylesheetPtr style) { xsltElemPreCompPtr cur, next; if (style == NULL) - return; - + return; + cur = style->preComps; while (cur != NULL) { - next = cur->next; + next = cur->next; if (cur->type == XSLT_FUNC_EXTENSION) cur->free(cur); else @@ -1962,12 +1984,12 @@ xsltFreeStylePreComps(xsltStylesheetPtr style) { */ void xsltStylePreCompute(xsltStylesheetPtr style, xmlNodePtr node) { - /* + /* * The xsltXSLTElemMarker marker was set beforehand by * the parsing mechanism for all elements in the XSLT namespace. */ if (style == NULL) { - if (node != NULL) + if ((node != NULL) && (node->type == XML_ELEMENT_NODE)) node->psvi = NULL; return; } @@ -1982,67 +2004,67 @@ xsltStylePreCompute(xsltStylesheetPtr style, xmlNodePtr node) { case XSLT_FUNC_APPLYTEMPLATES: xsltApplyTemplatesComp(style, node); break; - case XSLT_FUNC_WITHPARAM: + case XSLT_FUNC_WITHPARAM: xsltWithParamComp(style, node); break; - case XSLT_FUNC_VALUEOF: + case XSLT_FUNC_VALUEOF: xsltValueOfComp(style, node); break; - case XSLT_FUNC_COPY: + case XSLT_FUNC_COPY: xsltCopyComp(style, node); break; case XSLT_FUNC_COPYOF: xsltCopyOfComp(style, node); break; - case XSLT_FUNC_IF: + case XSLT_FUNC_IF: xsltIfComp(style, node); break; - case XSLT_FUNC_CHOOSE: + case XSLT_FUNC_CHOOSE: xsltChooseComp(style, node); break; - case XSLT_FUNC_WHEN: + case XSLT_FUNC_WHEN: xsltWhenComp(style, node); break; - case XSLT_FUNC_OTHERWISE: + case XSLT_FUNC_OTHERWISE: /* NOP yet */ return; - case XSLT_FUNC_FOREACH: + case XSLT_FUNC_FOREACH: xsltForEachComp(style, node); break; - case XSLT_FUNC_APPLYIMPORTS: + case XSLT_FUNC_APPLYIMPORTS: xsltApplyImportsComp(style, node); break; - case XSLT_FUNC_ATTRIBUTE: + case XSLT_FUNC_ATTRIBUTE: xsltAttributeComp(style, node); break; - case XSLT_FUNC_ELEMENT: + case XSLT_FUNC_ELEMENT: xsltElementComp(style, node); break; - case XSLT_FUNC_SORT: + case XSLT_FUNC_SORT: xsltSortComp(style, node); break; - case XSLT_FUNC_COMMENT: + case XSLT_FUNC_COMMENT: xsltCommentComp(style, node); break; - case XSLT_FUNC_NUMBER: + case XSLT_FUNC_NUMBER: xsltNumberComp(style, node); break; - case XSLT_FUNC_PI: + case XSLT_FUNC_PI: xsltProcessingInstructionComp(style, node); break; - case XSLT_FUNC_CALLTEMPLATE: + case XSLT_FUNC_CALLTEMPLATE: xsltCallTemplateComp(style, node); break; - case XSLT_FUNC_PARAM: + case XSLT_FUNC_PARAM: xsltParamComp(style, node); break; - case XSLT_FUNC_VARIABLE: + case XSLT_FUNC_VARIABLE: xsltVariableComp(style, node); break; - case XSLT_FUNC_FALLBACK: + case XSLT_FUNC_FALLBACK: /* NOP yet */ return; - case XSLT_FUNC_DOCUMENT: + case XSLT_FUNC_DOCUMENT: /* The extra one */ node->psvi = (void *) xsltDocumentComp(style, node, (xsltTransformFunction) xsltDocumentElem); @@ -2065,7 +2087,7 @@ xsltStylePreCompute(xsltStylesheetPtr style, xmlNodePtr node) { } else { /* * Fallback to string comparison. - */ + */ if (IS_XSLT_NAME(node, "apply-templates")) { xsltApplyTemplatesComp(style, node); } else if (IS_XSLT_NAME(node, "with-param")) { @@ -2081,7 +2103,7 @@ xsltStylePreCompute(xsltStylesheetPtr style, xmlNodePtr node) { } else if (IS_XSLT_NAME(node, "choose")) { xsltChooseComp(style, node); } else if (IS_XSLT_NAME(node, "when")) { - xsltWhenComp(style, node); + xsltWhenComp(style, node); } else if (IS_XSLT_NAME(node, "otherwise")) { /* NOP yet */ return; @@ -2113,7 +2135,7 @@ xsltStylePreCompute(xsltStylesheetPtr style, xmlNodePtr node) { } else if (IS_XSLT_NAME(node, "document")) { /* The extra one */ node->psvi = (void *) xsltDocumentComp(style, node, - (xsltTransformFunction) xsltDocumentElem); + (xsltTransformFunction) xsltDocumentElem); } else if (IS_XSLT_NAME(node, "output")) { /* Top-level */ return; @@ -2122,7 +2144,7 @@ xsltStylePreCompute(xsltStylesheetPtr style, xmlNodePtr node) { return; } else if (IS_XSLT_NAME(node, "strip-space")) { /* Top-level */ - return; + return; } else if (IS_XSLT_NAME(node, "key")) { /* Top-level */ return; @@ -2138,7 +2160,7 @@ xsltStylePreCompute(xsltStylesheetPtr style, xmlNodePtr node) { /* Top-level */ return; } else if (IS_XSLT_NAME(node, "include")) { - /* Top-level */ + /* Top-level */ } else { /* * NOTE that xsl:text, xsl:template, xsl:stylesheet, @@ -2150,7 +2172,7 @@ xsltStylePreCompute(xsltStylesheetPtr style, xmlNodePtr node) { "the XSLT element '%s'.\n", node->name); style->errors++; return; - } + } } /* * Assign the current list of in-scope namespaces to the @@ -2182,7 +2204,8 @@ xsltStylePreCompute(xsltStylesheetPtr style, xmlNodePtr inst) { * namespace- and local-name of the node, but can evaluate this * using cctxt->style->inode->category; */ - if (inst->psvi != NULL) + if ((inst == NULL) || (inst->type != XML_ELEMENT_NODE) || + (inst->psvi != NULL)) return; if (IS_XSLT_ELEM(inst)) { @@ -2251,7 +2274,7 @@ xsltStylePreCompute(xsltStylesheetPtr style, xmlNodePtr inst) { } else if (IS_XSLT_NAME(inst, "call-template")) { xsltCheckInstructionElement(style, inst); xsltCallTemplateComp(style, inst); - } else if (IS_XSLT_NAME(inst, "param")) { + } else if (IS_XSLT_NAME(inst, "param")) { if (xsltCheckTopLevelElement(style, inst, 0) == 0) xsltCheckInstructionElement(style, inst); xsltParamComp(style, inst); @@ -2319,7 +2342,7 @@ xsltStylePreCompute(xsltStylesheetPtr style, xmlNodePtr inst) { "xsltStylePreCompute: unknown xsl:%s\n", inst->name); if (style != NULL) style->warnings++; } - + cur = (xsltStylePreCompPtr) inst->psvi; /* * A ns-list is build for every XSLT item in the diff --git a/dll/3rdparty/libxslt/preproc.h b/dll/3rdparty/libxslt/preproc.h index f67b3890b54..caf464ad10f 100644 --- a/dll/3rdparty/libxslt/preproc.h +++ b/dll/3rdparty/libxslt/preproc.h @@ -24,15 +24,15 @@ extern "C" { */ extern const xmlChar *xsltExtMarker; -XSLTPUBFUN xsltElemPreCompPtr XSLTCALL +XSLTPUBFUN xsltElemPreCompPtr XSLTCALL xsltDocumentComp (xsltStylesheetPtr style, xmlNodePtr inst, xsltTransformFunction function); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltStylePreCompute (xsltStylesheetPtr style, xmlNodePtr inst); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltFreeStylePreComps (xsltStylesheetPtr style); #ifdef __cplusplus diff --git a/dll/3rdparty/libxslt/security.c b/dll/3rdparty/libxslt/security.c index 0a300d5e443..12c1b6f4dac 100644 --- a/dll/3rdparty/libxslt/security.c +++ b/dll/3rdparty/libxslt/security.c @@ -181,7 +181,7 @@ xsltGetSecurityPrefs(xsltSecurityPrefsPtr sec, xsltSecurityOption option) { */ void xsltSetDefaultSecurityPrefs(xsltSecurityPrefsPtr sec) { - + xsltDefaultSecurityPrefs = sec; } @@ -206,7 +206,7 @@ xsltGetDefaultSecurityPrefs(void) { * * Returns -1 in case of error, 0 otherwise */ -int +int xsltSetCtxtSecurityPrefs(xsltSecurityPrefsPtr sec, xsltTransformContextPtr ctxt) { if (ctxt == NULL) @@ -265,7 +265,7 @@ xsltSecurityForbid(xsltSecurityPrefsPtr sec ATTRIBUTE_UNUSED, * * TODO: remove at some point !!! * Local copy of xmlCheckFilename to avoid a hard dependency on - * a new version of libxml2 + * a new version of libxml2 * * if stat is not available on the target machine, * returns 1. if stat fails, returns 0 (if calling @@ -282,7 +282,7 @@ xsltCheckFilename (const char *path) #if defined(WIN32) && !defined(__CYGWIN__) DWORD dwAttrs; - dwAttrs = GetFileAttributes(path); + dwAttrs = GetFileAttributes(path); if (dwAttrs != INVALID_FILE_ATTRIBUTES) { if (dwAttrs & FILE_ATTRIBUTE_DIRECTORY) { return 2; diff --git a/dll/3rdparty/libxslt/security.h b/dll/3rdparty/libxslt/security.h index d52c0ae5896..bab5c8c6b21 100644 --- a/dll/3rdparty/libxslt/security.h +++ b/dll/3rdparty/libxslt/security.h @@ -55,43 +55,43 @@ typedef int (*xsltSecurityCheck) (xsltSecurityPrefsPtr sec, /* * Module interfaces */ -XSLTPUBFUN xsltSecurityPrefsPtr XSLTCALL +XSLTPUBFUN xsltSecurityPrefsPtr XSLTCALL xsltNewSecurityPrefs (void); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltFreeSecurityPrefs (xsltSecurityPrefsPtr sec); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltSetSecurityPrefs (xsltSecurityPrefsPtr sec, xsltSecurityOption option, xsltSecurityCheck func); -XSLTPUBFUN xsltSecurityCheck XSLTCALL +XSLTPUBFUN xsltSecurityCheck XSLTCALL xsltGetSecurityPrefs (xsltSecurityPrefsPtr sec, xsltSecurityOption option); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltSetDefaultSecurityPrefs (xsltSecurityPrefsPtr sec); -XSLTPUBFUN xsltSecurityPrefsPtr XSLTCALL +XSLTPUBFUN xsltSecurityPrefsPtr XSLTCALL xsltGetDefaultSecurityPrefs (void); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltSetCtxtSecurityPrefs (xsltSecurityPrefsPtr sec, xsltTransformContextPtr ctxt); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltSecurityAllow (xsltSecurityPrefsPtr sec, xsltTransformContextPtr ctxt, const char *value); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltSecurityForbid (xsltSecurityPrefsPtr sec, xsltTransformContextPtr ctxt, const char *value); /* * internal interfaces */ -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltCheckWrite (xsltSecurityPrefsPtr sec, xsltTransformContextPtr ctxt, const xmlChar *URL); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltCheckRead (xsltSecurityPrefsPtr sec, xsltTransformContextPtr ctxt, const xmlChar *URL); diff --git a/dll/3rdparty/libxslt/templates.c b/dll/3rdparty/libxslt/templates.c index c6250dc4e1f..02193f7eef7 100644 --- a/dll/3rdparty/libxslt/templates.c +++ b/dll/3rdparty/libxslt/templates.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include "xslt.h" @@ -39,7 +40,7 @@ * Module interfaces * * * ************************************************************************/ - + /** * xsltEvalXPathPredicate: * @ctxt: the XSLT transformation context @@ -198,7 +199,8 @@ xsltEvalTemplateString(xsltTransformContextPtr ctxt, xmlNodePtr oldInsert, insert = NULL; xmlChar *ret; - if ((ctxt == NULL) || (contextNode == NULL) || (inst == NULL)) + if ((ctxt == NULL) || (contextNode == NULL) || (inst == NULL) || + (inst->type != XML_ELEMENT_NODE)) return(NULL); if (inst->children == NULL) @@ -279,7 +281,17 @@ xsltAttrTemplateValueProcessNode(xsltTransformContextPtr ctxt, ret = xmlStrncat(ret, str, cur - str); str = cur; cur++; - while ((*cur != 0) && (*cur != '}')) cur++; + while ((*cur != 0) && (*cur != '}')) { + /* Need to check for literal (bug539741) */ + if ((*cur == '\'') || (*cur == '"')) { + char delim = *(cur++); + while ((*cur != 0) && (*cur != delim)) + cur++; + if (*cur != 0) + cur++; /* skip the ending delimiter */ + } else + cur++; + } if (*cur == 0) { xsltTransformError(ctxt, NULL, inst, "xsltAttrTemplateValueProcessNode: unmatched '{'\n"); @@ -380,7 +392,8 @@ xsltEvalAttrValueTemplate(xsltTransformContextPtr ctxt, xmlNodePtr inst, xmlChar *ret; xmlChar *expr; - if ((ctxt == NULL) || (inst == NULL) || (name == NULL)) + if ((ctxt == NULL) || (inst == NULL) || (name == NULL) || + (inst->type != XML_ELEMENT_NODE)) return(NULL); expr = xsltGetNsProp(inst, name, ns); @@ -424,7 +437,8 @@ xsltEvalStaticAttrValueTemplate(xsltStylesheetPtr style, xmlNodePtr inst, const xmlChar *ret; xmlChar *expr; - if ((style == NULL) || (inst == NULL) || (name == NULL)) + if ((style == NULL) || (inst == NULL) || (name == NULL) || + (inst->type != XML_ELEMENT_NODE)) return(NULL); expr = xsltGetNsProp(inst, name, ns); @@ -454,7 +468,7 @@ xsltEvalStaticAttrValueTemplate(xsltStylesheetPtr style, xmlNodePtr inst, * Evaluates Attribute Value Templates and copies the attribute over to * the result element. * This does *not* process attribute sets (xsl:use-attribute-set). - * + * * * Returns the generated attribute node. */ @@ -465,16 +479,17 @@ xsltAttrTemplateProcess(xsltTransformContextPtr ctxt, xmlNodePtr target, const xmlChar *value; xmlAttrPtr ret; - if ((ctxt == NULL) || (attr == NULL) || (target == NULL)) + if ((ctxt == NULL) || (attr == NULL) || (target == NULL) || + (target->type != XML_ELEMENT_NODE)) return(NULL); - + if (attr->type != XML_ATTRIBUTE_NODE) return(NULL); /* * Skip all XSLT attributes. */ -#ifdef XSLT_REFACTORED +#ifdef XSLT_REFACTORED if (attr->psvi == xsltXSLTAttrMarker) return(NULL); #else @@ -511,7 +526,7 @@ xsltAttrTemplateProcess(xsltTransformContextPtr ctxt, xmlNodePtr target, } ret = ret->next; } - if (ret != NULL) { + if (ret != NULL) { /* free the existing value */ xmlFreeNodeList(ret->children); ret->children = ret->last = NULL; @@ -530,7 +545,7 @@ xsltAttrTemplateProcess(xsltTransformContextPtr ctxt, xmlNodePtr target, xsltGetNamespace(ctxt, attr->parent, attr->ns, target), attr->name, NULL); else - ret = xmlNewNsProp(target, NULL, attr->name, NULL); + ret = xmlNewNsProp(target, NULL, attr->name, NULL); } /* * Set the value. @@ -572,7 +587,8 @@ xsltAttrTemplateProcess(xsltTransformContextPtr ctxt, xmlNodePtr target, } } else if ((ctxt->internalized) && (target != NULL) && (target->doc != NULL) && - (target->doc->dict == ctxt->dict)) { + (target->doc->dict == ctxt->dict) && + xmlDictOwns(ctxt->dict, value)) { text->content = (xmlChar *) value; } else { text->content = xmlStrdup(value); @@ -581,11 +597,11 @@ xsltAttrTemplateProcess(xsltTransformContextPtr ctxt, xmlNodePtr target, } else { if (attr->ns) { xsltTransformError(ctxt, NULL, attr->parent, - "Internal error: Failed to create attribute '{%s}%s'.\n", + "Internal error: Failed to create attribute '{%s}%s'.\n", attr->ns->href, attr->name); } else { xsltTransformError(ctxt, NULL, attr->parent, - "Internal error: Failed to create attribute '%s'.\n", + "Internal error: Failed to create attribute '%s'.\n", attr->name); } } @@ -613,7 +629,7 @@ xsltAttrTemplateProcess(xsltTransformContextPtr ctxt, xmlNodePtr target, * attributes will be disattached.) */ xmlAttrPtr -xsltAttrListTemplateProcess(xsltTransformContextPtr ctxt, +xsltAttrListTemplateProcess(xsltTransformContextPtr ctxt, xmlNodePtr target, xmlAttrPtr attrs) { xmlAttrPtr attr, copy, last; @@ -622,11 +638,12 @@ xsltAttrListTemplateProcess(xsltTransformContextPtr ctxt, const xmlChar *value; xmlChar *valueAVT; - if ((ctxt == NULL) || (target == NULL) || (attrs == NULL)) + if ((ctxt == NULL) || (target == NULL) || (attrs == NULL) || + (target->type != XML_ELEMENT_NODE)) return(NULL); oldInsert = ctxt->insert; - ctxt->insert = target; + ctxt->insert = target; /* * Instantiate LRE-attributes. @@ -757,7 +774,8 @@ xsltAttrListTemplateProcess(xsltTransformContextPtr ctxt, } } else if ((ctxt->internalized) && (target->doc != NULL) && - (target->doc->dict == ctxt->dict)) + (target->doc->dict == ctxt->dict) && + xmlDictOwns(ctxt->dict, value)) { text->content = (xmlChar *) value; } else { @@ -818,7 +836,7 @@ xmlNodePtr * xsltTemplateProcess(xsltTransformContextPtr ctxt ATTRIBUTE_UNUSED, xmlNodePtr node) { if (node == NULL) return(NULL); - + return(0); } diff --git a/dll/3rdparty/libxslt/templates.h b/dll/3rdparty/libxslt/templates.h index 18adfdb9736..84a9de4d359 100644 --- a/dll/3rdparty/libxslt/templates.h +++ b/dll/3rdparty/libxslt/templates.h @@ -20,21 +20,21 @@ extern "C" { #endif -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltEvalXPathPredicate (xsltTransformContextPtr ctxt, xmlXPathCompExprPtr comp, xmlNsPtr *nsList, int nsNr); -XSLTPUBFUN xmlChar * XSLTCALL +XSLTPUBFUN xmlChar * XSLTCALL xsltEvalTemplateString (xsltTransformContextPtr ctxt, xmlNodePtr contextNode, xmlNodePtr inst); -XSLTPUBFUN xmlChar * XSLTCALL +XSLTPUBFUN xmlChar * XSLTCALL xsltEvalAttrValueTemplate (xsltTransformContextPtr ctxt, xmlNodePtr node, const xmlChar *name, const xmlChar *ns); -XSLTPUBFUN const xmlChar * XSLTCALL +XSLTPUBFUN const xmlChar * XSLTCALL xsltEvalStaticAttrValueTemplate (xsltStylesheetPtr style, xmlNodePtr node, const xmlChar *name, @@ -42,30 +42,30 @@ XSLTPUBFUN const xmlChar * XSLTCALL int *found); /* TODO: this is obviously broken ... the namespaces should be passed too ! */ -XSLTPUBFUN xmlChar * XSLTCALL +XSLTPUBFUN xmlChar * XSLTCALL xsltEvalXPathString (xsltTransformContextPtr ctxt, xmlXPathCompExprPtr comp); -XSLTPUBFUN xmlChar * XSLTCALL +XSLTPUBFUN xmlChar * XSLTCALL xsltEvalXPathStringNs (xsltTransformContextPtr ctxt, xmlXPathCompExprPtr comp, int nsNr, xmlNsPtr *nsList); -XSLTPUBFUN xmlNodePtr * XSLTCALL +XSLTPUBFUN xmlNodePtr * XSLTCALL xsltTemplateProcess (xsltTransformContextPtr ctxt, xmlNodePtr node); -XSLTPUBFUN xmlAttrPtr XSLTCALL +XSLTPUBFUN xmlAttrPtr XSLTCALL xsltAttrListTemplateProcess (xsltTransformContextPtr ctxt, xmlNodePtr target, xmlAttrPtr cur); -XSLTPUBFUN xmlAttrPtr XSLTCALL +XSLTPUBFUN xmlAttrPtr XSLTCALL xsltAttrTemplateProcess (xsltTransformContextPtr ctxt, xmlNodePtr target, xmlAttrPtr attr); -XSLTPUBFUN xmlChar * XSLTCALL +XSLTPUBFUN xmlChar * XSLTCALL xsltAttrTemplateValueProcess (xsltTransformContextPtr ctxt, const xmlChar* attr); -XSLTPUBFUN xmlChar * XSLTCALL +XSLTPUBFUN xmlChar * XSLTCALL xsltAttrTemplateValueProcessNode(xsltTransformContextPtr ctxt, const xmlChar* str, xmlNodePtr node); diff --git a/dll/3rdparty/libxslt/transform.c b/dll/3rdparty/libxslt/transform.c index a4ca41df380..35701deabb6 100644 --- a/dll/3rdparty/libxslt/transform.c +++ b/dll/3rdparty/libxslt/transform.c @@ -20,6 +20,7 @@ #include "libxslt.h" #include +#include #include #include @@ -64,6 +65,7 @@ static int xsltGetHTMLIDs(const xmlChar *version, const xmlChar **publicID, #endif int xsltMaxDepth = 3000; +int xsltMaxVars = 15000; /* * Useful macros @@ -125,7 +127,7 @@ templPush(xsltTransformContextPtr ctxt, xsltTemplatePtr value) return (0); } } - if (ctxt->templNr >= ctxt->templMax) { + else if (ctxt->templNr >= ctxt->templMax) { ctxt->templMax *= 2; ctxt->templTab = (xsltTemplatePtr *) xmlRealloc(ctxt->templTab, @@ -249,7 +251,7 @@ profPush(xsltTransformContextPtr ctxt, long value) return (0); } } - if (ctxt->profNr >= ctxt->profMax) { + else if (ctxt->profNr >= ctxt->profMax) { ctxt->profMax *= 2; ctxt->profTab = (long *) xmlRealloc(ctxt->profTab, @@ -288,6 +290,54 @@ profPop(xsltTransformContextPtr ctxt) return (ret); } +static void +profCallgraphAdd(xsltTemplatePtr templ, xsltTemplatePtr parent) +{ + int i; + + if (templ->templMax == 0) { + templ->templMax = 4; + templ->templCalledTab = + (xsltTemplatePtr *) xmlMalloc(templ->templMax * + sizeof(templ->templCalledTab[0])); + templ->templCountTab = + (int *) xmlMalloc(templ->templMax * + sizeof(templ->templCountTab[0])); + if (templ->templCalledTab == NULL || templ->templCountTab == NULL) { + xmlGenericError(xmlGenericErrorContext, "malloc failed !\n"); + return; + } + } + else if (templ->templNr >= templ->templMax) { + templ->templMax *= 2; + templ->templCalledTab = + (xsltTemplatePtr *) xmlRealloc(templ->templCalledTab, + templ->templMax * + sizeof(templ->templCalledTab[0])); + templ->templCountTab = + (int *) xmlRealloc(templ->templCountTab, + templ->templMax * + sizeof(templ->templCountTab[0])); + if (templ->templCalledTab == NULL || templ->templCountTab == NULL) { + xmlGenericError(xmlGenericErrorContext, "realloc failed !\n"); + return; + } + } + + for (i = 0; i < templ->templNr; i++) { + if (templ->templCalledTab[i] == parent) { + templ->templCountTab[i]++; + break; + } + } + if (i == templ->templNr) { + /* not found, add new one */ + templ->templCalledTab[templ->templNr] = parent; + templ->templCountTab[templ->templNr] = 1; + templ->templNr++; + } +} + /************************************************************************ * * * XInclude default settings * @@ -456,6 +506,7 @@ xsltNewTransformContext(xsltStylesheetPtr style, xmlDocPtr doc) { cur->templNr = 0; cur->templMax = 5; cur->templ = NULL; + cur->maxTemplateDepth = xsltMaxDepth; /* * initialize the variables stack @@ -471,6 +522,7 @@ xsltNewTransformContext(xsltStylesheetPtr style, xmlDocPtr doc) { cur->varsMax = 10; cur->vars = NULL; cur->varsBase = 0; + cur->maxTemplateVars = xsltMaxVars; /* * the profiling stack is not initialized by default @@ -726,7 +778,7 @@ xsltCopyTextString(xsltTransformContextPtr ctxt, xmlNodePtr target, #endif /* - * Play save and reset the merging mechanism for every new + * Play safe and reset the merging mechanism for every new * target node. */ if ((target == NULL) || (target->children == NULL)) { @@ -2935,8 +2987,7 @@ xsltApplyXSLTTemplate(xsltTransformContextPtr ctxt, * Check for infinite recursion: stop if the maximum of nested templates * is excceeded. Adjust xsltMaxDepth if you need more. */ - if (((ctxt->templNr >= xsltMaxDepth) || - (ctxt->varsNr >= 5 * xsltMaxDepth))) + if (ctxt->templNr >= ctxt->maxTemplateDepth) { xsltTransformError(ctxt, NULL, list, "xsltApplyXSLTTemplate: A potential infinite template recursion " @@ -2944,11 +2995,23 @@ xsltApplyXSLTTemplate(xsltTransformContextPtr ctxt, "You can adjust xsltMaxDepth (--maxdepth) in order to " "raise the maximum number of nested template calls and " "variables/params (currently set to %d).\n", - xsltMaxDepth); + ctxt->maxTemplateDepth); xsltDebug(ctxt, contextNode, list, NULL); return; } + if (ctxt->varsNr >= ctxt->maxTemplateVars) + { + xsltTransformError(ctxt, NULL, list, + "xsltApplyXSLTTemplate: A potential infinite template recursion " + "was detected.\n" + "You can adjust maxTemplateVars (--maxvars) in order to " + "raise the maximum number of variables/params (currently set to %d).\n", + ctxt->maxTemplateVars); + xsltDebug(ctxt, contextNode, list, NULL); + return; + } + oldUserFragmentTop = ctxt->tmpRVT; ctxt->tmpRVT = NULL; oldLocalFragmentTop = ctxt->localRVT; @@ -2964,6 +3027,7 @@ xsltApplyXSLTTemplate(xsltTransformContextPtr ctxt, templ->nbCalls++; start = xsltTimestamp(); profPush(ctxt, 0); + profCallgraphAdd(templ, ctxt->templ); } /* * Push the xsl:template declaration onto the stack. @@ -3230,6 +3294,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node, const xmlChar *doctypeSystem; const xmlChar *version; const xmlChar *encoding; + int redirect_write_append = 0; if ((ctxt == NULL) || (node == NULL) || (inst == NULL) || (comp == NULL)) return; @@ -3645,10 +3710,38 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node, } /* - * Save the result + * Calls to redirect:write also take an optional attribute append. + * Attribute append="true|yes" which will attempt to simply append + * to an existing file instead of always opening a new file. The + * default behavior of always overwriting the file still happens + * if we do not specify append. + * Note that append use will forbid use of remote URI target. */ - ret = xsltSaveResultToFilename((const char *) filename, - res, style, 0); + prop = xsltEvalAttrValueTemplate(ctxt, inst, (const xmlChar *)"append", + NULL); + if (prop != NULL) { + if (xmlStrEqual(prop, (const xmlChar *) "true") || + xmlStrEqual(prop, (const xmlChar *) "yes")) { + style->omitXmlDeclaration = 1; + redirect_write_append = 1; + } else + style->omitXmlDeclaration = 0; + xmlFree(prop); + } + + if (redirect_write_append) { + FILE *f; + + f = fopen((const char *) filename, "ab"); + if (f == NULL) { + ret = -1; + } else { + ret = xsltSaveResultToFile(f, res, style); + fclose(f); + } + } else { + ret = xsltSaveResultToFilename((const char *) filename, res, style, 0); + } if (ret < 0) { xsltTransformError(ctxt, NULL, inst, "xsltDocumentElem: unable to save to %s\n", @@ -3915,14 +4008,6 @@ xsltElement(xsltTransformContextPtr ctxt, xmlNodePtr node, } name = xsltSplitQName(ctxt->dict, prop, &prefix); xmlFree(prop); - if ((prefix != NULL) && - (!xmlStrncasecmp(prefix, (xmlChar *)"xml", 3))) - { - /* - * TODO: Should we really disallow an "xml" prefix? - */ - goto error; - } } else { /* * The "name" value was static. @@ -3977,7 +4062,19 @@ xsltElement(xsltTransformContextPtr ctxt, xmlNodePtr node, if ((tmpNsName != NULL) && (tmpNsName[0] != 0)) nsName = xmlDictLookup(ctxt->dict, BAD_CAST tmpNsName, -1); xmlFree(tmpNsName); - }; + } + + if (xmlStrEqual(nsName, BAD_CAST "http://www.w3.org/2000/xmlns/")) { + xsltTransformError(ctxt, NULL, inst, + "xsl:attribute: Namespace http://www.w3.org/2000/xmlns/ " + "forbidden.\n"); + goto error; + } + if (xmlStrEqual(nsName, XML_XML_NAMESPACE)) { + prefix = BAD_CAST "xml"; + } else if (xmlStrEqual(prefix, BAD_CAST "xml")) { + prefix = NULL; + } } else { xmlNsPtr ns; /* @@ -3993,13 +4090,13 @@ xsltElement(xsltTransformContextPtr ctxt, xmlNodePtr node, * TODO: Check this in the compilation layer in case it's a * static value. */ - if (prefix != NULL) { - xsltTransformError(ctxt, NULL, inst, - "xsl:element: The QName '%s:%s' has no " - "namespace binding in scope in the stylesheet; " - "this is an error, since the namespace was not " - "specified by the instruction itself.\n", prefix, name); - } + if (prefix != NULL) { + xsltTransformError(ctxt, NULL, inst, + "xsl:element: The QName '%s:%s' has no " + "namespace binding in scope in the stylesheet; " + "this is an error, since the namespace was not " + "specified by the instruction itself.\n", prefix, name); + } } else nsName = ns->href; } @@ -4007,7 +4104,17 @@ xsltElement(xsltTransformContextPtr ctxt, xmlNodePtr node, * Find/create a matching ns-decl in the result tree. */ if (nsName != NULL) { - copy->ns = xsltGetSpecialNamespace(ctxt, inst, nsName, prefix, copy); + if (xmlStrEqual(prefix, BAD_CAST "xmlns")) { + /* Don't use a prefix of "xmlns" */ + xmlChar *pref = xmlStrdup(BAD_CAST "ns_1"); + + copy->ns = xsltGetSpecialNamespace(ctxt, inst, nsName, pref, copy); + + xmlFree(pref); + } else { + copy->ns = xsltGetSpecialNamespace(ctxt, inst, nsName, prefix, + copy); + } } else if ((copy->parent != NULL) && (copy->parent->type == XML_ELEMENT_NODE) && (copy->parent->ns != NULL)) @@ -4364,7 +4471,6 @@ xsltValueOf(xsltTransformContextPtr ctxt, xmlNodePtr node, xsltStylePreCompPtr comp = castedComp; #endif xmlXPathObjectPtr res = NULL; - xmlNodePtr copy = NULL; xmlChar *value = NULL; xmlDocPtr oldXPContextDoc; xmlNsPtr *oldXPNamespaces; @@ -4437,8 +4543,7 @@ xsltValueOf(xsltTransformContextPtr ctxt, xmlNodePtr node, goto error; } if (value[0] != 0) { - copy = xsltCopyTextString(ctxt, - ctxt->insert, value, comp->noescape); + xsltCopyTextString(ctxt, ctxt->insert, value, comp->noescape); } } else { xsltTransformError(ctxt, NULL, inst, @@ -4832,7 +4937,10 @@ xsltApplyTemplates(xsltTransformContextPtr ctxt, xmlNodePtr node, list = xmlXPathNodeSetCreate(NULL); if (list == NULL) goto error; - cur = node->children; + if (node->type != XML_NAMESPACE_DECL) + cur = node->children; + else + cur = NULL; while (cur != NULL) { switch (cur->type) { case XML_TEXT_NODE: @@ -4881,6 +4989,8 @@ xsltApplyTemplates(xsltTransformContextPtr ctxt, xmlNodePtr node, if (cur->prev != NULL) cur->prev->next = cur->next; break; + case XML_NAMESPACE_DECL: + break; default: #ifdef WITH_XSLT_DEBUG_PROCESS XSLT_TRACE(ctxt,XSLT_TRACE_APPLY_TEMPLATES,xsltGenericDebug(xsltGenericDebugContext, diff --git a/dll/3rdparty/libxslt/transform.h b/dll/3rdparty/libxslt/transform.h deleted file mode 100644 index 2cfbec2e3da..00000000000 --- a/dll/3rdparty/libxslt/transform.h +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Summary: the XSLT engine transformation part. - * Description: This module implements the bulk of the actual - * transformation processing. Most of the xsl: element - * constructs are implemented in this module. - * - * Copy: See Copyright for the status of this software. - * - * Author: Daniel Veillard - */ - -#ifndef __XML_XSLT_TRANSFORM_H__ -#define __XML_XSLT_TRANSFORM_H__ - -#include -#include -#include "xsltexports.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * XInclude default processing. - */ -XSLTPUBFUN void XSLTCALL - xsltSetXIncludeDefault (int xinclude); -XSLTPUBFUN int XSLTCALL - xsltGetXIncludeDefault (void); - -/** - * Export context to users. - */ -XSLTPUBFUN xsltTransformContextPtr XSLTCALL - xsltNewTransformContext (xsltStylesheetPtr style, - xmlDocPtr doc); - -XSLTPUBFUN void XSLTCALL - xsltFreeTransformContext(xsltTransformContextPtr ctxt); - -XSLTPUBFUN xmlDocPtr XSLTCALL - xsltApplyStylesheetUser (xsltStylesheetPtr style, - xmlDocPtr doc, - const char **params, - const char *output, - FILE * profile, - xsltTransformContextPtr userCtxt); -XSLTPUBFUN void XSLTCALL - xsltProcessOneNode (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xsltStackElemPtr params); -/** - * Private Interfaces. - */ -XSLTPUBFUN void XSLTCALL - xsltApplyStripSpaces (xsltTransformContextPtr ctxt, - xmlNodePtr node); -XSLTPUBFUN xmlDocPtr XSLTCALL - xsltApplyStylesheet (xsltStylesheetPtr style, - xmlDocPtr doc, - const char **params); -XSLTPUBFUN xmlDocPtr XSLTCALL - xsltProfileStylesheet (xsltStylesheetPtr style, - xmlDocPtr doc, - const char **params, - FILE * output); -XSLTPUBFUN int XSLTCALL - xsltRunStylesheet (xsltStylesheetPtr style, - xmlDocPtr doc, - const char **params, - const char *output, - xmlSAXHandlerPtr SAX, - xmlOutputBufferPtr IObuf); -XSLTPUBFUN int XSLTCALL - xsltRunStylesheetUser (xsltStylesheetPtr style, - xmlDocPtr doc, - const char **params, - const char *output, - xmlSAXHandlerPtr SAX, - xmlOutputBufferPtr IObuf, - FILE * profile, - xsltTransformContextPtr userCtxt); -XSLTPUBFUN void XSLTCALL - xsltApplyOneTemplate (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr list, - xsltTemplatePtr templ, - xsltStackElemPtr params); -XSLTPUBFUN void XSLTCALL - xsltDocumentElem (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL - xsltSort (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL - xsltCopy (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL - xsltText (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL - xsltElement (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL - xsltComment (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL - xsltAttribute (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL - xsltProcessingInstruction(xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL - xsltCopyOf (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL - xsltValueOf (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL - xsltNumber (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL - xsltApplyImports (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL - xsltCallTemplate (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL - xsltApplyTemplates (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL - xsltChoose (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL - xsltIf (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL - xsltForEach (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL - xsltRegisterAllElement (xsltTransformContextPtr ctxt); - -XSLTPUBFUN xmlNodePtr XSLTCALL - xsltCopyTextString (xsltTransformContextPtr ctxt, - xmlNodePtr target, - const xmlChar *string, - int noescape); - -/* Following 2 functions needed for libexslt/functions.c */ -XSLTPUBFUN void XSLTCALL - xsltLocalVariablePop (xsltTransformContextPtr ctxt, - int limitNr, - int level); -XSLTPUBFUN int XSLTCALL - xsltLocalVariablePush (xsltTransformContextPtr ctxt, - xsltStackElemPtr variable, - int level); -/* - * Hook for the debugger if activated. - */ -XSLTPUBFUN void XSLTCALL - xslHandleDebugger (xmlNodePtr cur, - xmlNodePtr node, - xsltTemplatePtr templ, - xsltTransformContextPtr ctxt); - -#ifdef __cplusplus -} -#endif - -#endif /* __XML_XSLT_TRANSFORM_H__ */ - diff --git a/dll/3rdparty/libxslt/variables.c b/dll/3rdparty/libxslt/variables.c index 43a61561e03..3224116a137 100644 --- a/dll/3rdparty/libxslt/variables.c +++ b/dll/3rdparty/libxslt/variables.c @@ -57,7 +57,7 @@ const xmlChar *xsltComputingGlobalVarMarker = * @ctxt: an XSLT transformation context * * Creates a Result Value Tree - * (the XSLT 1.0 term for this is "Result Tree Fragment") + * (the XSLT 1.0 term for this is "Result Tree Fragment") * * Returns the result value tree or NULL in case of API or internal errors. */ @@ -69,7 +69,7 @@ xsltCreateRVT(xsltTransformContextPtr ctxt) /* * Question: Why is this function public? * Answer: It is called by the EXSLT module. - */ + */ if (ctxt == NULL) return(NULL); @@ -158,7 +158,7 @@ xsltRegisterLocalRVT(xsltTransformContextPtr ctxt, { if ((ctxt == NULL) || (RVT == NULL)) return(-1); - + /* * When evaluating "select" expressions of xsl:variable * and xsl:param, we need to bind newly created tree fragments @@ -272,7 +272,7 @@ xsltExtensionInstructionResultRegister(xsltTransformContextPtr ctxt, (((xmlNsPtr) cur)->next->type == XML_ELEMENT_NODE)) { cur = (xmlNodePtr) ((xmlNsPtr) cur)->next; - doc = cur->doc; + doc = cur->doc; } else { xsltTransformError(ctxt, NULL, ctxt->inst, "Internal error in " @@ -333,7 +333,7 @@ xsltReleaseRVT(xsltTransformContextPtr ctxt, xmlDocPtr RVT) } /* * Clear the document tree. - * REVISIT TODO: Do we expect ID/IDREF tables to be existent? + * REVISIT TODO: Do we expect ID/IDREF tables to be existent? */ if (RVT->children != NULL) { xmlFreeNodeList(RVT->children); @@ -522,7 +522,7 @@ xsltCopyStackElem(xsltStackElemPtr elem) { cur->nameURI = elem->nameURI; cur->select = elem->select; cur->tree = elem->tree; - cur->comp = elem->comp; + cur->comp = elem->comp; return(cur); } @@ -563,13 +563,13 @@ xsltFreeStackElem(xsltStackElemPtr elem) { * * * - * + * */ xsltRegisterLocalRVT(elem->context, cur); } else { xsltReleaseRVT((xsltTransformContextPtr) elem->context, cur); - } + } } } /* @@ -583,7 +583,7 @@ xsltFreeStackElem(xsltStackElemPtr elem) { memset(elem, 0, sizeof(xsltStackElem)); elem->context = ctxt; elem->next = ctxt->cache->stackItems; - ctxt->cache->stackItems = elem; + ctxt->cache->stackItems = elem; ctxt->cache->nbStackItems++; #ifdef XSLT_DEBUG_PROFILE_CACHE ctxt->cache->dbgCachedVars++; @@ -602,7 +602,7 @@ xsltFreeStackElem(xsltStackElemPtr elem) { void xsltFreeStackElemList(xsltStackElemPtr elem) { xsltStackElemPtr next; - + while (elem != NULL) { next = elem->next; xsltFreeStackElem(elem); @@ -675,6 +675,9 @@ xsltStackLookup(xsltTransformContextPtr ctxt, const xmlChar *name, return(NULL); } +#ifdef XSLT_REFACTORED +#else + /** * xsltCheckStackElem: * @ctxt: xn XSLT transformation context @@ -706,10 +709,12 @@ xsltCheckStackElem(xsltTransformContextPtr ctxt, const xmlChar *name, else if (cur->comp->type == XSLT_FUNC_PARAM) return(2); } - + return(1); } +#endif /* XSLT_REFACTORED */ + /** * xsltAddStackElem: * @ctxt: xn XSLT transformation context @@ -752,10 +757,10 @@ xsltAddStackElem(xsltTransformContextPtr ctxt, xsltStackElemPtr elem) } ctxt->varsTab[ctxt->varsNr++] = elem; ctxt->vars = elem; - + elem = elem->next; } while (elem != NULL); - + return(0); } @@ -799,7 +804,7 @@ xsltEvalVariable(xsltTransformContextPtr ctxt, xsltStackElemPtr variable, (xsltStyleItemVariablePtr) castedComp; #else xsltStylePreCompPtr comp = castedComp; -#endif +#endif xmlXPathObjectPtr result = NULL; xmlNodePtr oldInst; @@ -842,7 +847,7 @@ xsltEvalVariable(xsltTransformContextPtr ctxt, xsltStackElemPtr variable, oldXPContextSize = xpctxt->contextSize; oldXPNamespaces = xpctxt->namespaces; oldXPNsNr = xpctxt->nsNr; - + xpctxt->node = ctxt->node; /* * OPTIMIZE TODO: Lame try to set the context doc. @@ -854,7 +859,7 @@ xsltEvalVariable(xsltTransformContextPtr ctxt, xsltStackElemPtr variable, /* * BUG TODO: The proximity position and the context size will * potentially be wrong. - * Example: + * Example: * * * @@ -865,9 +870,9 @@ xsltEvalVariable(xsltTransformContextPtr ctxt, xsltStackElemPtr variable, * to the context of , but * the variable needs to be evaluated in the context of * . - */ + */ if (comp != NULL) { - + #ifdef XSLT_REFACTORED if (comp->inScopeNs != NULL) { xpctxt->namespaces = comp->inScopeNs->list; @@ -892,9 +897,9 @@ xsltEvalVariable(xsltTransformContextPtr ctxt, xsltStackElemPtr variable, * we'll eventually free still referenced fragments, before * we leave the scope of the variable. */ - ctxt->contextVariable = variable; - variable->flags |= XSLT_VAR_IN_SELECT; - + ctxt->contextVariable = variable; + variable->flags |= XSLT_VAR_IN_SELECT; + result = xmlXPathCompiledEval(xpExpr, xpctxt); variable->flags ^= XSLT_VAR_IN_SELECT; @@ -932,7 +937,7 @@ xsltEvalVariable(xsltTransformContextPtr ctxt, xsltStackElemPtr variable, } else { if (variable->tree == NULL) { result = xmlXPathNewCString(""); - } else { + } else { if (variable->tree) { xmlDocPtr container; xmlNodePtr oldInsert; @@ -954,14 +959,14 @@ xsltEvalVariable(xsltTransformContextPtr ctxt, xsltStackElemPtr variable, */ /* * Attach the Result Tree Fragment to the variable; - * when the variable is freed, it will also free + * when the variable is freed, it will also free * the Result Tree Fragment. */ variable->fragment = container; - + oldOutput = ctxt->output; - oldInsert = ctxt->insert; - + oldInsert = ctxt->insert; + ctxt->output = container; ctxt->insert = (xmlNodePtr) container; ctxt->contextVariable = variable; @@ -972,10 +977,10 @@ xsltEvalVariable(xsltTransformContextPtr ctxt, xsltStackElemPtr variable, xsltApplyOneTemplate(ctxt, ctxt->node, variable->tree, NULL, NULL); - ctxt->contextVariable = oldVar; + ctxt->contextVariable = oldVar; ctxt->insert = oldInsert; ctxt->output = oldOutput; - + result = xmlXPathNewValueTree((xmlNodePtr) container); } if (result == NULL) { @@ -985,7 +990,7 @@ xsltEvalVariable(xsltTransformContextPtr ctxt, xsltStackElemPtr variable, * Freeing is not handled there anymore. * QUESTION TODO: What does the above comment mean? */ - result->boolval = 0; + result->boolval = 0; } #ifdef WITH_XSLT_DEBUG_VARIABLE #ifdef LIBXML_DEBUG_ENABLED @@ -1045,7 +1050,11 @@ xsltEvalGlobalVariable(xsltStackElemPtr elem, xsltTransformContextPtr ctxt) #endif oldInst = ctxt->inst; +#ifdef XSLT_REFACTORED + comp = (xsltStyleBasicItemVariablePtr) elem->comp; +#else comp = elem->comp; +#endif oldVarName = elem->name; elem->name = xsltComputingGlobalVarMarker; /* @@ -1054,7 +1063,7 @@ xsltEvalGlobalVariable(xsltStackElemPtr elem, xsltTransformContextPtr ctxt) * called; and in the case of global params, if values for such params * are provided by the user. */ - if (elem->select != NULL) { + if (elem->select != NULL) { xmlXPathCompExprPtr xpExpr = NULL; xmlDocPtr oldXPDoc; xmlNodePtr oldXPContextNode; @@ -1069,8 +1078,8 @@ xsltEvalGlobalVariable(xsltStackElemPtr elem, xsltTransformContextPtr ctxt) } if (xpExpr == NULL) goto error; - - + + if (comp != NULL) ctxt->inst = comp->inst; else @@ -1082,7 +1091,7 @@ xsltEvalGlobalVariable(xsltStackElemPtr elem, xsltTransformContextPtr ctxt) * to process the root node of the source document: the current * node is the root node of the source document and the current * node list is a list containing just the root node of the source - * document." + * document." */ /* * Save context states. @@ -1093,14 +1102,14 @@ xsltEvalGlobalVariable(xsltStackElemPtr elem, xsltTransformContextPtr ctxt) oldXPContextSize = xpctxt->contextSize; oldXPNamespaces = xpctxt->namespaces; oldXPNsNr = xpctxt->nsNr; - + xpctxt->node = ctxt->initialContextNode; xpctxt->doc = ctxt->initialContextDoc; xpctxt->contextSize = 1; xpctxt->proximityPosition = 1; - + if (comp != NULL) { - + #ifdef XSLT_REFACTORED if (comp->inScopeNs != NULL) { xpctxt->namespaces = comp->inScopeNs->list; @@ -1117,7 +1126,7 @@ xsltEvalGlobalVariable(xsltStackElemPtr elem, xsltTransformContextPtr ctxt) xpctxt->namespaces = NULL; xpctxt->nsNr = 0; } - + result = xmlXPathCompiledEval(xpExpr, xpctxt); /* @@ -1156,7 +1165,7 @@ xsltEvalGlobalVariable(xsltStackElemPtr elem, xsltTransformContextPtr ctxt) } else { xmlDocPtr container; xmlNodePtr oldInsert; - xmlDocPtr oldOutput, oldXPDoc; + xmlDocPtr oldOutput, oldXPDoc; /* * Generate a result tree fragment. */ @@ -1167,14 +1176,14 @@ xsltEvalGlobalVariable(xsltStackElemPtr elem, xsltTransformContextPtr ctxt) * Let the lifetime of the tree fragment be handled by * the Libxslt's garbage collector. */ - xsltRegisterPersistRVT(ctxt, container); + xsltRegisterPersistRVT(ctxt, container); oldOutput = ctxt->output; oldInsert = ctxt->insert; oldXPDoc = ctxt->xpathCtxt->doc; - - ctxt->output = container; + + ctxt->output = container; ctxt->insert = (xmlNodePtr) container; ctxt->xpathCtxt->doc = ctxt->initialContextDoc; @@ -1187,7 +1196,7 @@ xsltEvalGlobalVariable(xsltStackElemPtr elem, xsltTransformContextPtr ctxt) ctxt->insert = oldInsert; ctxt->output = oldOutput; - + result = xmlXPathNewValueTree((xmlNodePtr) container); if (result == NULL) { result = xmlXPathNewCString(""); @@ -1227,11 +1236,11 @@ error: int xsltEvalGlobalVariables(xsltTransformContextPtr ctxt) { xsltStackElemPtr elem; - xsltStylesheetPtr style; + xsltStylesheetPtr style; if ((ctxt == NULL) || (ctxt->document == NULL)) return(-1); - + #ifdef WITH_XSLT_DEBUG_VARIABLE XSLT_TRACE(ctxt,XSLT_TRACE_VARIABLES,xsltGenericDebug(xsltGenericDebugContext, "Registering global variables\n")); @@ -1242,7 +1251,7 @@ xsltEvalGlobalVariables(xsltTransformContextPtr ctxt) { style = ctxt->style; while (style != NULL) { elem = style->variables; - + #ifdef WITH_XSLT_DEBUG_VARIABLE if ((style->doc != NULL) && (style->doc->URL != NULL)) { XSLT_TRACE(ctxt,XSLT_TRACE_VARIABLES,xsltGenericDebug(xsltGenericDebugContext, @@ -1257,7 +1266,7 @@ xsltEvalGlobalVariables(xsltTransformContextPtr ctxt) { /* * Global variables are stored in the variables pool. */ - def = (xsltStackElemPtr) + def = (xsltStackElemPtr) xmlHashLookup2(ctxt->globalVars, elem->name, elem->nameURI); if (def == NULL) { @@ -1288,7 +1297,7 @@ xsltEvalGlobalVariables(xsltTransformContextPtr ctxt) { /* * This part does the actual evaluation - */ + */ xmlHashScan(ctxt->globalVars, (xmlHashScanner) xsltEvalGlobalVariable, ctxt); @@ -1414,7 +1423,7 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt, const xmlChar *href; xmlXPathCompExprPtr xpExpr; xmlXPathObjectPtr result; - + xsltStackElemPtr elem; int res; void *res_ptr; @@ -1496,7 +1505,7 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt, int oldXPProximityPosition, oldXPContextSize, oldXPNsNr; xmlNsPtr *oldXPNamespaces; xmlXPathContextPtr xpctxt = ctxt->xpathCtxt; - + /* * Save context states. */ @@ -1516,19 +1525,19 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt, * node list is a list containing just the root node of the source * document." */ - xpctxt->doc = ctxt->initialContextDoc; - xpctxt->node = ctxt->initialContextNode; + xpctxt->doc = ctxt->initialContextDoc; + xpctxt->node = ctxt->initialContextNode; xpctxt->contextSize = 1; xpctxt->proximityPosition = 1; - /* + /* * There is really no in scope namespace for parameters on the * command line. */ xpctxt->namespaces = NULL; - xpctxt->nsNr = 0; - + xpctxt->nsNr = 0; + result = xmlXPathCompiledEval(xpExpr, xpctxt); - + /* * Restore Context states. */ @@ -1538,7 +1547,7 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt, xpctxt->proximityPosition = oldXPProximityPosition; xpctxt->namespaces = oldXPNamespaces; xpctxt->nsNr = oldXPNsNr; - + xmlXPathFreeCompExpr(xpExpr); } if (result == NULL) { @@ -1549,9 +1558,9 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt, } } - /* + /* * If @eval is 0 then @value is to be taken literally and result is NULL - * + * * If @eval is not 0, then @value is an XPath expression and has been * successfully evaluated and result contains the resulting value and * is not NULL. @@ -1579,7 +1588,7 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt, elem->computed = 1; if (eval == 0) { elem->value = xmlXPathNewString(value); - } + } else { elem->value = result; } @@ -1612,7 +1621,7 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt, * * Returns 0 in case of success, -1 in case of error */ - + int xsltEvalUserParams(xsltTransformContextPtr ctxt, const char **params) { int indx = 0; @@ -1624,7 +1633,7 @@ xsltEvalUserParams(xsltTransformContextPtr ctxt, const char **params) { while (params[indx] != NULL) { name = (const xmlChar *) params[indx++]; value = (const xmlChar *) params[indx++]; - if (xsltEvalOneUserParam(ctxt, name, value) != 0) + if (xsltEvalOneUserParam(ctxt, name, value) != 0) return(-1); } return 0; @@ -1642,7 +1651,7 @@ xsltEvalUserParams(xsltTransformContextPtr ctxt, const char **params) { * * Returns 0 in case of success, -1 in case of error. */ - + int xsltQuoteUserParams(xsltTransformContextPtr ctxt, const char **params) { int indx = 0; @@ -1654,7 +1663,7 @@ xsltQuoteUserParams(xsltTransformContextPtr ctxt, const char **params) { while (params[indx] != NULL) { name = (const xmlChar *) params[indx++]; value = (const xmlChar *) params[indx++]; - if (xsltQuoteOneUserParam(ctxt, name, value) != 0) + if (xsltQuoteOneUserParam(ctxt, name, value) != 0) return(-1); } return 0; @@ -1680,7 +1689,7 @@ xsltQuoteUserParams(xsltTransformContextPtr ctxt, const char **params) { int xsltEvalOneUserParam(xsltTransformContextPtr ctxt, - const xmlChar * name, + const xmlChar * name, const xmlChar * value) { return xsltProcessUserParamInternal(ctxt, name, value, 1 /* xpath eval ? */); @@ -1727,7 +1736,7 @@ xsltBuildVariable(xsltTransformContextPtr ctxt, (xsltStyleBasicItemVariablePtr) castedComp; #else xsltStylePreCompPtr comp = castedComp; -#endif +#endif xsltStackElemPtr elem; #ifdef WITH_XSLT_DEBUG_VARIABLE @@ -1777,8 +1786,8 @@ xsltRegisterVariable(xsltTransformContextPtr ctxt, xsltStylePreCompPtr comp = castedComp; int present; #endif - xsltStackElemPtr variable; - + xsltStackElemPtr variable; + #ifdef XSLT_REFACTORED /* * REFACTORED NOTE: Redefinitions of vars/params are checked @@ -1787,7 +1796,7 @@ xsltRegisterVariable(xsltTransformContextPtr ctxt, */ #else present = xsltCheckStackElem(ctxt, comp->name, comp->ns); - if (isParam == 0) { + if (isParam == 0) { if ((present != 0) && (present != 3)) { /* TODO: report QName. */ xsltTransformError(ctxt, NULL, comp->inst, @@ -1903,13 +1912,13 @@ xsltVariableLookup(xsltTransformContextPtr ctxt, const xmlChar *name, /** * xsltParseStylesheetCallerParam: - * @ctxt: the XSLT transformation context + * @ctxt: the XSLT transformation context * @inst: the xsl:with-param instruction element * * Processes an xsl:with-param instruction at transformation time. * The value is compute, but not recorded. * NOTE that this is also called with an *xsl:param* element - * from exsltFuncFunctionFunction(). + * from exsltFuncFunctionFunction(). * * Returns the new xsltStackElemPtr or NULL */ @@ -1925,8 +1934,8 @@ xsltParseStylesheetCallerParam(xsltTransformContextPtr ctxt, xmlNodePtr inst) xmlNodePtr tree = NULL; /* The first child node of the instruction or the instruction itself. */ xsltStackElemPtr param = NULL; - - if ((ctxt == NULL) || (inst == NULL)) + + if ((ctxt == NULL) || (inst == NULL) || (inst->type != XML_ELEMENT_NODE)) return(NULL); #ifdef XSLT_REFACTORED @@ -1934,7 +1943,7 @@ xsltParseStylesheetCallerParam(xsltTransformContextPtr ctxt, xmlNodePtr inst) #else comp = (xsltStylePreCompPtr) inst->psvi; #endif - + if (comp == NULL) { xsltTransformError(ctxt, NULL, inst, "Internal error in xsltParseStylesheetCallerParam(): " @@ -1985,9 +1994,9 @@ xsltParseGlobalVariable(xsltStylesheetPtr style, xmlNodePtr cur) xsltStylePreCompPtr comp; #endif - if ((cur == NULL) || (style == NULL)) + if ((cur == NULL) || (style == NULL) || (cur->type != XML_ELEMENT_NODE)) return; - + #ifdef XSLT_REFACTORED /* * Note that xsltStylePreCompute() will be called from @@ -2014,7 +2023,7 @@ xsltParseGlobalVariable(xsltStylesheetPtr style, xmlNodePtr cur) * Parse the content (a sequence constructor) of xsl:variable. */ if (cur->children != NULL) { -#ifdef XSLT_REFACTORED +#ifdef XSLT_REFACTORED xsltParseSequenceConstructor(XSLT_CCTXT(style), cur->children); #else xsltParseTemplateContent(style, cur); @@ -2047,9 +2056,9 @@ xsltParseGlobalParam(xsltStylesheetPtr style, xmlNodePtr cur) { xsltStylePreCompPtr comp; #endif - if ((cur == NULL) || (style == NULL)) + if ((cur == NULL) || (style == NULL) || (cur->type != XML_ELEMENT_NODE)) return; - + #ifdef XSLT_REFACTORED /* * Note that xsltStylePreCompute() will be called from @@ -2059,7 +2068,7 @@ xsltParseGlobalParam(xsltStylesheetPtr style, xmlNodePtr cur) { #else xsltStylePreCompute(style, cur); comp = (xsltStylePreCompPtr) cur->psvi; -#endif +#endif if (comp == NULL) { xsltTransformError(NULL, style, cur, "xsl:param : compilation failed\n"); @@ -2076,7 +2085,7 @@ xsltParseGlobalParam(xsltStylesheetPtr style, xmlNodePtr cur) { * Parse the content (a sequence constructor) of xsl:param. */ if (cur->children != NULL) { -#ifdef XSLT_REFACTORED +#ifdef XSLT_REFACTORED xsltParseSequenceConstructor(XSLT_CCTXT(style), cur->children); #else xsltParseTemplateContent(style, cur); @@ -2110,7 +2119,7 @@ xsltParseStylesheetVariable(xsltTransformContextPtr ctxt, xmlNodePtr inst) xsltStylePreCompPtr comp; #endif - if ((inst == NULL) || (ctxt == NULL)) + if ((inst == NULL) || (ctxt == NULL) || (inst->type != XML_ELEMENT_NODE)) return; comp = inst->psvi; @@ -2152,7 +2161,7 @@ xsltParseStylesheetParam(xsltTransformContextPtr ctxt, xmlNodePtr cur) xsltStylePreCompPtr comp; #endif - if ((cur == NULL) || (ctxt == NULL)) + if ((cur == NULL) || (ctxt == NULL) || (cur->type != XML_ELEMENT_NODE)) return; comp = cur->psvi; @@ -2208,7 +2217,7 @@ xsltXPathVariableLookup(void *ctxt, const xmlChar *name, XSLT_TRACE(((xsltTransformContextPtr)ctxt),XSLT_TRACE_VARIABLES,xsltGenericDebug(xsltGenericDebugContext, "Lookup variable '%s'\n", name)); #endif - + tctxt = (xsltTransformContextPtr) ctxt; /* * Local variables/params --------------------------------------------- @@ -2232,7 +2241,7 @@ xsltXPathVariableLookup(void *ctxt, const xmlChar *name, goto local_variable_found; } cur = cur->next; - } + } /* * Redo the lookup with interned strings to avoid string comparison. * @@ -2245,7 +2254,7 @@ xsltXPathVariableLookup(void *ctxt, const xmlChar *name, name = xmlDictLookup(tctxt->dict, name, -1); if (ns_uri) ns_uri = xmlDictLookup(tctxt->dict, ns_uri, -1); - if ((tmpName != name) || (tmpNsName != ns_uri)) { + if ((tmpName != name) || (tmpNsName != ns_uri)) { for (i = tctxt->varsNr; i > tctxt->varsBase; i--) { cur = tctxt->varsTab[i-1]; if ((cur->name == name) && (cur->nameURI == ns_uri)) { @@ -2263,7 +2272,7 @@ local_variable_found: if (variable) { if (variable->computed == 0) { - + #ifdef WITH_XSLT_DEBUG_VARIABLE XSLT_TRACE(tctxt,XSLT_TRACE_VARIABLES,xsltGenericDebug(xsltGenericDebugContext, "uncomputed variable '%s'\n", name)); @@ -2272,14 +2281,14 @@ local_variable_found: variable->computed = 1; } if (variable->value != NULL) { - valueObj = xmlXPathObjectCopy(variable->value); + valueObj = xmlXPathObjectCopy(variable->value); } return(valueObj); } } /* * Global variables/params -------------------------------------------- - */ + */ if (tctxt->globalVars) { valueObj = xsltGlobalVariableLookup(tctxt, name, ns_uri); } diff --git a/dll/3rdparty/libxslt/variables.h b/dll/3rdparty/libxslt/variables.h index 85055e41026..17b4c6f6f1f 100644 --- a/dll/3rdparty/libxslt/variables.h +++ b/dll/3rdparty/libxslt/variables.h @@ -38,48 +38,48 @@ extern "C" { * Interfaces for the variable module. */ -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltEvalGlobalVariables (xsltTransformContextPtr ctxt); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltEvalUserParams (xsltTransformContextPtr ctxt, const char **params); -XSLTPUBFUN int XSLTCALL - xsltQuoteUserParams (xsltTransformContextPtr ctxt, +XSLTPUBFUN int XSLTCALL + xsltQuoteUserParams (xsltTransformContextPtr ctxt, const char **params); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltEvalOneUserParam (xsltTransformContextPtr ctxt, - const xmlChar * name, + const xmlChar * name, const xmlChar * value); -XSLTPUBFUN int XSLTCALL - xsltQuoteOneUserParam (xsltTransformContextPtr ctxt, - const xmlChar * name, +XSLTPUBFUN int XSLTCALL + xsltQuoteOneUserParam (xsltTransformContextPtr ctxt, + const xmlChar * name, const xmlChar * value); -XSLTPUBFUN void XSLTCALL - xsltParseGlobalVariable (xsltStylesheetPtr style, +XSLTPUBFUN void XSLTCALL + xsltParseGlobalVariable (xsltStylesheetPtr style, xmlNodePtr cur); -XSLTPUBFUN void XSLTCALL - xsltParseGlobalParam (xsltStylesheetPtr style, +XSLTPUBFUN void XSLTCALL + xsltParseGlobalParam (xsltStylesheetPtr style, xmlNodePtr cur); -XSLTPUBFUN void XSLTCALL - xsltParseStylesheetVariable (xsltTransformContextPtr ctxt, +XSLTPUBFUN void XSLTCALL + xsltParseStylesheetVariable (xsltTransformContextPtr ctxt, xmlNodePtr cur); -XSLTPUBFUN void XSLTCALL - xsltParseStylesheetParam (xsltTransformContextPtr ctxt, +XSLTPUBFUN void XSLTCALL + xsltParseStylesheetParam (xsltTransformContextPtr ctxt, xmlNodePtr cur); -XSLTPUBFUN xsltStackElemPtr XSLTCALL +XSLTPUBFUN xsltStackElemPtr XSLTCALL xsltParseStylesheetCallerParam (xsltTransformContextPtr ctxt, xmlNodePtr cur); -XSLTPUBFUN int XSLTCALL - xsltAddStackElemList (xsltTransformContextPtr ctxt, +XSLTPUBFUN int XSLTCALL + xsltAddStackElemList (xsltTransformContextPtr ctxt, xsltStackElemPtr elems); -XSLTPUBFUN void XSLTCALL - xsltFreeGlobalVariables (xsltTransformContextPtr ctxt); -XSLTPUBFUN xmlXPathObjectPtr XSLTCALL +XSLTPUBFUN void XSLTCALL + xsltFreeGlobalVariables (xsltTransformContextPtr ctxt); +XSLTPUBFUN xmlXPathObjectPtr XSLTCALL xsltVariableLookup (xsltTransformContextPtr ctxt, const xmlChar *name, const xmlChar *ns_uri); -XSLTPUBFUN xmlXPathObjectPtr XSLTCALL +XSLTPUBFUN xmlXPathObjectPtr XSLTCALL xsltXPathVariableLookup (void *ctxt, const xmlChar *name, const xmlChar *ns_uri); diff --git a/dll/3rdparty/libxslt/win32config.h b/dll/3rdparty/libxslt/win32config.h index 169b03d18e9..ddd1d3804e4 100644 --- a/dll/3rdparty/libxslt/win32config.h +++ b/dll/3rdparty/libxslt/win32config.h @@ -28,12 +28,12 @@ #include #if defined _MSC_VER || defined __MINGW32__ /* MS C-runtime has functions which can be used in order to determine if - a given floating-point variable contains NaN, (+-)INF. These are + a given floating-point variable contains NaN, (+-)INF. These are preferred, because floating-point technology is considered propriatary - by MS and we can assume that their functions know more about their + by MS and we can assume that their functions know more about their oddities than we do. */ #include -/* Bjorn Reese figured a quite nice construct for isinf() using the +/* Bjorn Reese figured a quite nice construct for isinf() using the _fpclass() function. */ #ifndef isinf #define isinf(d) ((_fpclass(d) == _FPCLASS_PINF) ? 1 \ @@ -95,5 +95,9 @@ static int isnan (double d) { #define ATTRIBUTE_UNUSED #endif +#ifndef __REACTOS__ +#define _WINSOCKAPI_ +#endif + #endif /* __LIBXSLT_WIN32_CONFIG__ */ diff --git a/dll/3rdparty/libxslt/xslt.c b/dll/3rdparty/libxslt/xslt.c index 55f505b4768..58d138674e5 100644 --- a/dll/3rdparty/libxslt/xslt.c +++ b/dll/3rdparty/libxslt/xslt.c @@ -243,6 +243,10 @@ xsltInit (void) { */ void xsltUninit (void) { +#ifdef XSLT_LOCALE_WINAPI + xmlFreeRMutex(xsltLocaleMutex); + xsltLocaleMutex = NULL; +#endif initialized = 0; } @@ -281,7 +285,7 @@ xsltNewDecimalFormat(xmlChar *name) if (self != NULL) { self->next = NULL; self->name = name; - + /* Default values */ self->digit = xmlStrdup(BAD_CAST("#")); self->patternSeparator = xmlStrdup(BAD_CAST(";")); @@ -335,7 +339,7 @@ xsltFreeDecimalFormatList(xsltStylesheetPtr self) if (self == NULL) return; - + iter = self->decimalFormat; while (iter != NULL) { tmp = iter->next; @@ -417,6 +421,11 @@ xsltFreeTemplate(xsltTemplatePtr template) { if (template->modeURI) xmlFree(template->modeURI); */ if (template->inheritedNs) xmlFree(template->inheritedNs); + + /* free profiling data */ + if (template->templCalledTab) xmlFree(template->templCalledTab); + if (template->templCountTab) xmlFree(template->templCountTab); + memset(template, -1, sizeof(xsltTemplate)); xmlFree(template); } @@ -444,12 +453,12 @@ static void xsltFreeNsAliasList(xsltNsAliasPtr item) { xsltNsAliasPtr tmp; - + while (item) { tmp = item; item = item->next; xmlFree(tmp); - } + } return; } @@ -458,12 +467,12 @@ static void xsltFreeNamespaceMap(xsltNsMapPtr item) { xsltNsMapPtr tmp; - + while (item) { tmp = item; item = item->next; xmlFree(tmp); - } + } return; } @@ -501,15 +510,15 @@ xsltNewNamespaceMapItem(xsltCompilerCtxtPtr cctxt, #endif /* XSLT_REFACTORED_XSLT_NSCOMP */ /** - * xsltCompilerVarInfoFree: + * xsltCompilerVarInfoFree: * @cctxt: the compilation context - * + * * Frees the list of information for vars/params. */ static void xsltCompilerVarInfoFree(xsltCompilerCtxtPtr cctxt) { - xsltVarInfoPtr ivar = cctxt->ivars, ivartmp; + xsltVarInfoPtr ivar = cctxt->ivars, ivartmp; while (ivar) { ivartmp = ivar; @@ -521,11 +530,11 @@ xsltCompilerVarInfoFree(xsltCompilerCtxtPtr cctxt) /** * xsltCompilerCtxtFree: * - * Free an XSLT compiler context. + * Free an XSLT compiler context. */ static void xsltCompilationCtxtFree(xsltCompilerCtxtPtr cctxt) -{ +{ if (cctxt == NULL) return; #ifdef WITH_XSLT_DEBUG_PARSING @@ -597,7 +606,7 @@ xsltCompilationCtxtCreate(xsltStylesheetPtr style) { if (ret->xpathCtxt == NULL) goto internal_err; #endif - + return(ret); internal_err: @@ -645,11 +654,11 @@ xsltFreePrincipalStylesheetData(xsltPrincipalStylesheetDataPtr data) if (data->exclResultNamespaces != NULL) { int i; xsltPointerListPtr list = (xsltPointerListPtr) - data->exclResultNamespaces; - + data->exclResultNamespaces; + for (i = 0; i < list->number; i++) xsltPointerListFree((xsltPointerListPtr) list->items[i]); - + xsltPointerListFree(list); data->exclResultNamespaces = NULL; } @@ -688,10 +697,10 @@ xsltNewPrincipalStylesheetData(void) return(NULL); } memset(ret, 0, sizeof(xsltPrincipalStylesheetData)); - + /* * Global list of in-scope namespaces. - */ + */ ret->inScopeNamespaces = xsltPointerListCreate(-1); if (ret->inScopeNamespaces == NULL) goto internal_err; @@ -703,7 +712,7 @@ xsltNewPrincipalStylesheetData(void) goto internal_err; /* * Global list of extension instruction namespace names. - */ + */ ret->extElemNamespaces = xsltPointerListCreate(-1); if (ret->extElemNamespaces == NULL) goto internal_err; @@ -726,7 +735,7 @@ internal_err: */ xsltStylesheetPtr xsltNewStylesheet(void) { - xsltStylesheetPtr ret = NULL; + xsltStylesheetPtr ret = NULL; ret = (xsltStylesheetPtr) xmlMalloc(sizeof(xsltStylesheet)); if (ret == NULL) { @@ -749,6 +758,7 @@ xsltNewStylesheet(void) { ret->extrasNr = 0; ret->internalized = 1; ret->literal_result = 0; + ret->forwards_compatible = 0; ret->dict = xmlDictCreate(); #ifdef WITH_XSLT_DEBUG xsltGenericDebug(xsltGenericDebugContext, @@ -865,7 +875,7 @@ xsltFreeStylesheetList(xsltStylesheetPtr style) { static int xsltCleanupStylesheetTree(xmlDocPtr doc ATTRIBUTE_UNUSED, xmlNodePtr rootElem ATTRIBUTE_UNUSED) -{ +{ #if 0 /* TODO: Currently disabled, since probably not needed. */ xmlNodePtr cur; @@ -922,7 +932,7 @@ xsltFreeStylesheet(xsltStylesheetPtr style) { if (style == NULL) return; - + #ifdef XSLT_REFACTORED /* * Start with a cleanup of the main stylesheet's doc. @@ -938,7 +948,7 @@ xsltFreeStylesheet(xsltStylesheetPtr style) XSLT_HAS_INTERNAL_NSMAP(style)) { xsltRestoreDocumentNamespaces(XSLT_GET_INTERNAL_NSMAP(style), - style->doc); + style->doc); } #endif /* XSLT_REFACTORED_XSLT_NSCOMP */ #else @@ -967,7 +977,7 @@ xsltFreeStylesheet(xsltStylesheetPtr style) * TODO: Best time to shutdown extension stuff? */ xsltShutdownExts(style); - + if (style->variables != NULL) xsltFreeStackElemList(style->variables); if (style->cdataSection != NULL) @@ -1007,13 +1017,13 @@ xsltFreeStylesheet(xsltStylesheetPtr style) xsltFreePrincipalStylesheetData(style->principalData); style->principalData = NULL; } - } + } #endif /* * Better to free the main document of this stylesheet level * at the end - so here. */ - if (style->doc != NULL) { + if (style->doc != NULL) { xmlFreeDoc(style->doc); } @@ -1044,7 +1054,7 @@ xsltFreeStylesheet(xsltStylesheetPtr style) * @template: the template * @node: the current node * - * Search all the namespace applying to a given element except the ones + * Search all the namespace applying to a given element except the ones * from excluded output prefixes currently in scope. Initialize the * template inheritedNs list with it. * @@ -1059,7 +1069,7 @@ xsltGetInheritedNsList(xsltStylesheetPtr style, xmlNsPtr *ret = NULL; int nbns = 0; int maxns = 10; - int i; + int i; if ((style == NULL) || (template == NULL) || (node == NULL) || (template->inheritedNsNr != 0) || (template->inheritedNs != NULL)) @@ -1153,9 +1163,9 @@ xsltParseStylesheetOutput(xsltStylesheetPtr style, xmlNodePtr cur) xmlChar *element, *end; - if ((cur == NULL) || (style == NULL)) + if ((cur == NULL) || (style == NULL) || (cur->type != XML_ELEMENT_NODE)) return; - + prop = xmlGetNsProp(cur, (const xmlChar *) "version", NULL); if (prop != NULL) { if (style->version != NULL) @@ -1281,7 +1291,7 @@ xsltParseStylesheetOutput(xsltStylesheetPtr style, xmlNodePtr cur) while ((*end != 0) && (!IS_BLANK(*end))) end++; element = xmlStrndup(element, end - element); - if (element) { + if (element) { #ifdef WITH_XSLT_DEBUG_PARSING xsltGenericDebug(xsltGenericDebugContext, "add cdata section output element %s\n", @@ -1303,7 +1313,7 @@ xsltParseStylesheetOutput(xsltStylesheetPtr style, xmlNodePtr cur) if (element == NULL) { /* * TODO: We'll report additionally an error - * via the stylesheet's error handling. + * via the stylesheet's error handling. */ xsltTransformError(NULL, style, cur, "Attribute 'cdata-section-elements': The value " @@ -1311,7 +1321,7 @@ xsltParseStylesheetOutput(xsltStylesheetPtr style, xmlNodePtr cur) style->errors++; } else { xmlNsPtr ns; - + /* * XSLT-1.0 "Each QName is expanded into an * expanded-name using the namespace declarations in @@ -1324,7 +1334,7 @@ xsltParseStylesheetOutput(xsltStylesheetPtr style, xmlNodePtr cur) ns = xmlSearchNs(style->doc, cur, NULL); if (ns != NULL) URI = ns->href; - } + } xmlHashAddEntry2(style->cdataSection, element, URI, (void *) "cdata"); xmlFree(element); @@ -1368,12 +1378,12 @@ xsltParseStylesheetDecimalFormat(xsltStylesheetPtr style, xmlNodePtr cur) xmlChar *prop; xsltDecimalFormatPtr format; xsltDecimalFormatPtr iter; - - if ((cur == NULL) || (style == NULL)) + + if ((cur == NULL) || (style == NULL) || (cur->type != XML_ELEMENT_NODE)) return; format = style->decimalFormat; - + prop = xmlGetNsProp(cur, BAD_CAST("name"), NULL); if (prop != NULL) { format = xsltDecimalFormatGetByName(style, prop); @@ -1402,7 +1412,7 @@ xsltParseStylesheetDecimalFormat(xsltStylesheetPtr style, xmlNodePtr cur) if (format->decimalPoint != NULL) xmlFree(format->decimalPoint); format->decimalPoint = prop; } - + prop = xmlGetNsProp(cur, (const xmlChar *)"grouping-separator", NULL); if (prop != NULL) { if (format->grouping != NULL) xmlFree(format->grouping); @@ -1414,43 +1424,43 @@ xsltParseStylesheetDecimalFormat(xsltStylesheetPtr style, xmlNodePtr cur) if (format->infinity != NULL) xmlFree(format->infinity); format->infinity = prop; } - + prop = xmlGetNsProp(cur, (const xmlChar *)"minus-sign", NULL); if (prop != NULL) { if (format->minusSign != NULL) xmlFree(format->minusSign); format->minusSign = prop; } - + prop = xmlGetNsProp(cur, (const xmlChar *)"NaN", NULL); if (prop != NULL) { if (format->noNumber != NULL) xmlFree(format->noNumber); format->noNumber = prop; } - + prop = xmlGetNsProp(cur, (const xmlChar *)"percent", NULL); if (prop != NULL) { if (format->percent != NULL) xmlFree(format->percent); format->percent = prop; } - + prop = xmlGetNsProp(cur, (const xmlChar *)"per-mille", NULL); if (prop != NULL) { if (format->permille != NULL) xmlFree(format->permille); format->permille = prop; } - + prop = xmlGetNsProp(cur, (const xmlChar *)"zero-digit", NULL); if (prop != NULL) { if (format->zeroDigit != NULL) xmlFree(format->zeroDigit); format->zeroDigit = prop; } - + prop = xmlGetNsProp(cur, (const xmlChar *)"digit", NULL); if (prop != NULL) { if (format->digit != NULL) xmlFree(format->digit); format->digit = prop; } - + prop = xmlGetNsProp(cur, (const xmlChar *)"pattern-separator", NULL); if (prop != NULL) { if (format->patternSeparator != NULL) xmlFree(format->patternSeparator); @@ -1475,7 +1485,7 @@ xsltParseStylesheetPreserveSpace(xsltStylesheetPtr style, xmlNodePtr cur) { xmlChar *elements; xmlChar *element, *end; - if ((cur == NULL) || (style == NULL)) + if ((cur == NULL) || (style == NULL) || (cur->type != XML_ELEMENT_NODE)) return; elements = xmlGetNsProp(cur, (const xmlChar *)"elements", NULL); @@ -1540,7 +1550,7 @@ xsltParseStylesheetPreserveSpace(xsltStylesheetPtr style, xmlNodePtr cur) { * an extension-element-prefixes attribute on: * 1) an xsl:stylesheet element * 2) an xsl:extension-element-prefixes attribute on a - * literal result element + * literal result element * 3) an extension instruction." */ static void @@ -1549,7 +1559,7 @@ xsltParseStylesheetExtPrefix(xsltStylesheetPtr style, xmlNodePtr cur, xmlChar *prefixes; xmlChar *prefix, *end; - if ((cur == NULL) || (style == NULL)) + if ((cur == NULL) || (style == NULL) || (cur->type != XML_ELEMENT_NODE)) return; if (isXsltElem) { @@ -1614,7 +1624,7 @@ xsltParseStylesheetStripSpace(xsltStylesheetPtr style, xmlNodePtr cur) { xmlChar *elements; xmlChar *element, *end; - if ((cur == NULL) || (style == NULL)) + if ((cur == NULL) || (style == NULL) || (cur->type != XML_ELEMENT_NODE)) return; elements = xmlGetNsProp(cur, (const xmlChar *)"elements", NULL); @@ -1687,7 +1697,7 @@ xsltParseStylesheetExcludePrefix(xsltStylesheetPtr style, xmlNodePtr cur, xmlChar *prefixes; xmlChar *prefix, *end; - if ((cur == NULL) || (style == NULL)) + if ((cur == NULL) || (style == NULL) || (cur->type != XML_ELEMENT_NODE)) return(0); if (isXsltElem) @@ -1744,11 +1754,11 @@ xsltParseStylesheetExcludePrefix(xsltStylesheetPtr style, xmlNodePtr cur, /* * xsltTreeEnsureXMLDecl: * @doc: the doc -* +* * BIG NOTE: * This was copy&pasted from Libxml2's xmlTreeEnsureXMLDecl() in "tree.c". * Ensures that there is an XML namespace declaration on the doc. -* +* * Returns the XML ns-struct or NULL on API and internal errors. */ static xmlNsPtr @@ -1764,7 +1774,7 @@ xsltTreeEnsureXMLDecl(xmlDocPtr doc) if (ns == NULL) { xmlGenericError(xmlGenericErrorContext, "xsltTreeEnsureXMLDecl: Failed to allocate " - "the XML namespace.\n"); + "the XML namespace.\n"); return (NULL); } memset(ns, 0, sizeof(xmlNs)); @@ -1778,7 +1788,7 @@ xsltTreeEnsureXMLDecl(xmlDocPtr doc) else ns->href = xmlStrdup(XML_XML_NAMESPACE); #else - ns->href = xmlStrdup(XML_XML_NAMESPACE); + ns->href = xmlStrdup(XML_XML_NAMESPACE); #endif ns->prefix = xmlStrdup((const xmlChar *)"xml"); doc->oldNs = ns; @@ -1791,12 +1801,12 @@ xsltTreeEnsureXMLDecl(xmlDocPtr doc) * @doc: the doc * @nsName: the namespace name * @prefix: the prefix -* +* * BIG NOTE: * This was copy&pasted from Libxml2's xmlDOMWrapStoreNs() in "tree.c". * Creates or reuses an xmlNs struct on doc->oldNs with * the given prefix and namespace name. -* +* * Returns the aquired ns struct or NULL in case of an API * or internal error. */ @@ -1829,7 +1839,7 @@ xsltTreeAcquireStoredNs(xmlDocPtr doc, xmlStrEqual(ns->prefix, prefix) && xmlStrEqual(ns->href, nsName)) return (ns); - + } if (ns->next == NULL) break; @@ -1859,7 +1869,7 @@ xsltLREBuildEffectiveNs(xsltCompilerCtxtPtr cctxt, if ((cctxt->nsAliases == NULL) || (! cctxt->hasNsAliases)) return(0); - alias = cctxt->nsAliases; + alias = cctxt->nsAliases; while (alias != NULL) { if ( /* If both namespaces are NULL... */ ( (elem->ns == NULL) && @@ -1892,7 +1902,7 @@ xsltLREBuildEffectiveNs(xsltCompilerCtxtPtr cctxt, * OPTIMIZE TODO: Use the compiler-node-info inScopeNs. */ ns = xmlSearchNs(elem->doc, elem, - alias->targetNs->prefix); + alias->targetNs->prefix); /* * If no matching ns-decl found, then assign a * ns-decl stored in xmlDoc. @@ -1914,7 +1924,7 @@ xsltLREBuildEffectiveNs(xsltCompilerCtxtPtr cctxt, ns = xsltTreeAcquireStoredNs(elem->doc, alias->targetNs->href, alias->targetNs->prefix); - + if (ns == NULL) { xsltTransformError(NULL, cctxt->style, elem, "Internal error in " @@ -1923,11 +1933,11 @@ xsltLREBuildEffectiveNs(xsltCompilerCtxtPtr cctxt, "ns-declaration.\n"); cctxt->style->errors++; return(-1); - + } } elem->ns = ns; - } + } } else { /* * Move into or leave in the NULL namespace. @@ -1943,7 +1953,7 @@ xsltLREBuildEffectiveNs(xsltCompilerCtxtPtr cctxt, */ if (elem->properties != NULL) { xmlAttrPtr attr = elem->properties; - + while (attr != NULL) { if (attr->ns == NULL) { attr = attr->next; @@ -1962,7 +1972,7 @@ xsltLREBuildEffectiveNs(xsltCompilerCtxtPtr cctxt, { if ((alias->targetNs != NULL) && (alias->targetNs->href != NULL)) - { + { if (elem->doc == alias->docOfTargetNs) { elem->ns = alias->targetNs; } else { @@ -1974,7 +1984,7 @@ xsltLREBuildEffectiveNs(xsltCompilerCtxtPtr cctxt, ns = xsltTreeAcquireStoredNs(elem->doc, alias->targetNs->href, alias->targetNs->prefix); - + if (ns == NULL) { xsltTransformError(NULL, cctxt->style, elem, "Internal error in " @@ -1983,7 +1993,7 @@ xsltLREBuildEffectiveNs(xsltCompilerCtxtPtr cctxt, "ns-declaration.\n"); cctxt->style->errors++; return(-1); - + } } elem->ns = ns; @@ -1998,7 +2008,7 @@ xsltLREBuildEffectiveNs(xsltCompilerCtxtPtr cctxt, } alias = alias->next; } - + attr = attr->next; } } @@ -2034,7 +2044,7 @@ xsltLREBuildEffectiveNsNodes(xsltCompilerCtxtPtr cctxt, (item == NULL) || (item->effectiveNs != NULL)) return(-1); - if (item->inScopeNs == NULL) + if (item->inScopeNs == NULL) return(0); extElemNs = cctxt->inode->extElemNs; @@ -2065,7 +2075,7 @@ xsltLREBuildEffectiveNsNodes(xsltCompilerCtxtPtr cctxt, * - A namespace node whose string value is a target namespace URI * is copied to the result tree, whether or not the URI * identifies an excluded namespace." - * + * * NOTE: The ns-aliasing machanism is non-cascading. * (checked with Saxon, Xalan and MSXML .NET). * URGENT TODO: is style->nsAliases the effective list of @@ -2111,7 +2121,7 @@ xsltLREBuildEffectiveNsNodes(xsltCompilerCtxtPtr cctxt, alias = alias->next; } while (alias != NULL); } - + /* * Exclude excluded result namespaces. */ @@ -2142,11 +2152,11 @@ add_effective_ns: break; } tmpns = tmpns->next; - } while (tmpns != NULL); + } while (tmpns != NULL); } else holdByElem = 0; - - + + /* * Add the effective namespace declaration. */ @@ -2160,7 +2170,7 @@ add_effective_ns: } if (cctxt->psData->effectiveNs == NULL) { cctxt->psData->effectiveNs = effNs; - effNs->nextInStore = NULL; + effNs->nextInStore = NULL; } else { effNs->nextInStore = cctxt->psData->effectiveNs; cctxt->psData->effectiveNs = effNs; @@ -2170,13 +2180,13 @@ add_effective_ns: effNs->prefix = ns->prefix; effNs->nsName = ns->href; effNs->holdByElem = holdByElem; - + if (lastEffNs == NULL) item->effectiveNs = effNs; else lastEffNs->next = effNs; lastEffNs = effNs; - + skip_ns: {} } @@ -2222,7 +2232,7 @@ xsltLREInfoCreate(xsltCompilerCtxtPtr cctxt, * in AVTs. */ item->inScopeNs = cctxt->inode->inScopeNs; - + if (elem) xsltLREBuildEffectiveNsNodes(cctxt, item, elem, isLRE); @@ -2233,13 +2243,13 @@ xsltLREInfoCreate(xsltCompilerCtxtPtr cctxt, } /** - * xsltCompilerVarInfoPush: + * xsltCompilerVarInfoPush: * @cctxt: the compilation context - * + * * Pushes a new var/param info onto the stack. * * Returns the acquired variable info. - */ + */ static xsltVarInfoPtr xsltCompilerVarInfoPush(xsltCompilerCtxtPtr cctxt, xmlNodePtr inst, @@ -2278,12 +2288,12 @@ xsltCompilerVarInfoPush(xsltCompilerCtxtPtr cctxt, } /** - * xsltCompilerVarInfoPop: + * xsltCompilerVarInfoPop: * @cctxt: the compilation context - * + * * Pops all var/param infos from the stack, which * have the current depth. - */ + */ static void xsltCompilerVarInfoPop(xsltCompilerCtxtPtr cctxt) { @@ -2301,20 +2311,20 @@ xsltCompilerVarInfoPop(xsltCompilerCtxtPtr cctxt) * @cctxt: the compilation context * @node: the node to be pushed (this can also be the doc-node) * -* +* * * Returns the current node info structure or * NULL in case of an internal error. */ static xsltCompilerNodeInfoPtr xsltCompilerNodePush(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) -{ +{ xsltCompilerNodeInfoPtr inode, iprev; - if ((cctxt->inode != NULL) && (cctxt->inode->next != NULL)) { + if ((cctxt->inode != NULL) && (cctxt->inode->next != NULL)) { inode = cctxt->inode->next; } else if ((cctxt->inode == NULL) && (cctxt->inodeList != NULL)) { - inode = cctxt->inodeList; + inode = cctxt->inodeList; } else { /* * Create a new node-info. @@ -2334,7 +2344,7 @@ xsltCompilerNodePush(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) inode->prev = cctxt->inodeLast; } cctxt->inodeLast = inode; - cctxt->maxNodeInfos++; + cctxt->maxNodeInfos++; if (cctxt->inode == NULL) { cctxt->inode = inode; /* @@ -2342,12 +2352,12 @@ xsltCompilerNodePush(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) * the root of the stylesheet. */ xsltLREInfoCreate(cctxt, NULL, 0); - } - } + } + } cctxt->depth++; cctxt->inode = inode; /* - * REVISIT TODO: Keep the reset always complete. + * REVISIT TODO: Keep the reset always complete. * NOTE: Be carefull with the @node, since it might be * a doc-node. */ @@ -2360,7 +2370,7 @@ xsltCompilerNodePush(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) inode->curChildType = 0; inode->extContentHandled = 0; inode->isRoot = 0; - + if (inode->prev != NULL) { iprev = inode->prev; /* @@ -2390,7 +2400,7 @@ xsltCompilerNodePush(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) /* * Forwards-compatible mode */ - inode->forwardsCompat = iprev->forwardsCompat; + inode->forwardsCompat = iprev->forwardsCompat; } else { inode->inScopeNs = NULL; inode->exclResultNs = NULL; @@ -2398,7 +2408,7 @@ xsltCompilerNodePush(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) inode->preserveWhitespace = 0; inode->forwardsCompat = 0; } - + return(inode); } @@ -2412,7 +2422,7 @@ xsltCompilerNodePush(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) */ static void xsltCompilerNodePop(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) -{ +{ if (cctxt->inode == NULL) { xmlGenericError(xmlGenericErrorContext, "xsltCompilerNodePop: Top-node mismatch.\n"); @@ -2432,13 +2442,13 @@ xsltCompilerNodePop(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) "xsltCompilerNodePop: Depth mismatch.\n"); goto mismatch; } + cctxt->depth--; /* * Pop information of variables. */ if ((cctxt->ivar) && (cctxt->ivar->depth > cctxt->depth)) xsltCompilerVarInfoPop(cctxt); - cctxt->depth--; cctxt->inode = cctxt->inode->prev; if (cctxt->inode != NULL) cctxt->inode->curChildType = 0; @@ -2448,7 +2458,7 @@ mismatch: { const xmlChar *nsName = NULL, *name = NULL; const xmlChar *infnsName = NULL, *infname = NULL; - + if (node) { if (node->type == XML_ELEMENT_NODE) { name = node->name; @@ -2477,7 +2487,7 @@ mismatch: } else infname = BAD_CAST "Not given"; - + xmlGenericError(xmlGenericErrorContext, "xsltCompilerNodePop: Given : '%s' URI '%s'\n", name, nsName); @@ -2585,7 +2595,7 @@ xsltCompilerBuildInScopeNsList(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) if (xsltPointerListAddSize( (xsltPointerListPtr)cctxt->psData->inScopeNamespaces, (void *) nsi, 5) == -1) - { + { xmlFree(nsi); nsi = NULL; xsltTransformError(NULL, cctxt->style, NULL, @@ -2602,7 +2612,7 @@ xsltCompilerBuildInScopeNsList(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) internal_err: if (list != NULL) - xmlFree(list); + xmlFree(list); cctxt->style->errors++; return(NULL); } @@ -2615,7 +2625,7 @@ xsltParseNsPrefixList(xsltCompilerCtxtPtr cctxt, { xmlChar *cur, *end; xmlNsPtr ns; - + if ((cctxt == NULL) || (value == NULL) || (list == NULL)) return(-1); @@ -2632,7 +2642,7 @@ xsltParseNsPrefixList(xsltCompilerCtxtPtr cctxt, if (cur == NULL) { cur = end; continue; - } + } /* * TODO: Export and use xmlSearchNsByPrefixStrict() * in Libxml2, tree.c, since xmlSearchNs() is in most @@ -2644,7 +2654,7 @@ xsltParseNsPrefixList(xsltCompilerCtxtPtr cctxt, xmlStrEqual(cur, (const xmlChar *)"#default")) ns = xmlSearchNs(cctxt->style->doc, node, NULL); else - ns = xmlSearchNs(cctxt->style->doc, node, cur); + ns = xmlSearchNs(cctxt->style->doc, node, cur); if (ns == NULL) { /* @@ -2677,7 +2687,7 @@ xsltParseNsPrefixList(xsltCompilerCtxtPtr cctxt, } } xmlFree(cur); - + cur = end; } return(0); @@ -2710,7 +2720,7 @@ xsltCompilerUtilsCreateMergedList(xsltPointerListPtr first, else num = 0; if (second) - num += second->number; + num += second->number; if (num == 0) return(NULL); ret = xsltPointerListCreate(num); @@ -2746,7 +2756,7 @@ static xsltPointerListPtr xsltParseExclResultPrefixes(xsltCompilerCtxtPtr cctxt, xmlNodePtr node, xsltPointerListPtr def, int instrCategory) -{ +{ xsltPointerListPtr list = NULL; xmlChar *value; xmlAttrPtr attr; @@ -2759,7 +2769,7 @@ xsltParseExclResultPrefixes(xsltCompilerCtxtPtr cctxt, xmlNodePtr node, else attr = xmlHasNsProp(node, BAD_CAST "exclude-result-prefixes", XSLT_NAMESPACE); - if (attr == NULL) + if (attr == NULL) return(def); if (attr && (instrCategory == XSLT_ELEMENT_CATEGORY_LRE)) { @@ -2769,7 +2779,7 @@ xsltParseExclResultPrefixes(xsltCompilerCtxtPtr cctxt, xmlNodePtr node, attr->psvi = (void *) xsltXSLTAttrMarker; } - if ((attr->children != NULL) && + if ((attr->children != NULL) && (attr->children->content != NULL)) value = attr->children->content; else { @@ -2777,19 +2787,19 @@ xsltParseExclResultPrefixes(xsltCompilerCtxtPtr cctxt, xmlNodePtr node, "Attribute 'exclude-result-prefixes': Invalid value.\n"); cctxt->style->errors++; return(def); - } + } if (xsltParseNsPrefixList(cctxt, cctxt->tmpList, node, BAD_CAST value) != 0) goto exit; - if (cctxt->tmpList->number == 0) - goto exit; + if (cctxt->tmpList->number == 0) + goto exit; /* * Merge the list with the inherited list. */ list = xsltCompilerUtilsCreateMergedList(def, cctxt->tmpList); if (list == NULL) - goto exit; + goto exit; /* * Store the list in the stylesheet/compiler context. */ @@ -2806,7 +2816,7 @@ xsltParseExclResultPrefixes(xsltCompilerCtxtPtr cctxt, xmlNodePtr node, if (cctxt->inode != NULL) cctxt->inode->nsChanged = 1; -exit: +exit: if (list != NULL) return(list); else @@ -2827,7 +2837,7 @@ static xsltPointerListPtr xsltParseExtElemPrefixes(xsltCompilerCtxtPtr cctxt, xmlNodePtr node, xsltPointerListPtr def, int instrCategory) -{ +{ xsltPointerListPtr list = NULL; xmlAttrPtr attr; xmlChar *value; @@ -2841,7 +2851,7 @@ xsltParseExtElemPrefixes(xsltCompilerCtxtPtr cctxt, xmlNodePtr node, else attr = xmlHasNsProp(node, BAD_CAST "extension-element-prefixes", XSLT_NAMESPACE); - if (attr == NULL) + if (attr == NULL) return(def); if (attr && (instrCategory == XSLT_ELEMENT_CATEGORY_LRE)) { @@ -2851,7 +2861,7 @@ xsltParseExtElemPrefixes(xsltCompilerCtxtPtr cctxt, xmlNodePtr node, attr->psvi = (void *) xsltXSLTAttrMarker; } - if ((attr->children != NULL) && + if ((attr->children != NULL) && (attr->children->content != NULL)) value = attr->children->content; else { @@ -2867,7 +2877,7 @@ xsltParseExtElemPrefixes(xsltCompilerCtxtPtr cctxt, xmlNodePtr node, goto exit; if (cctxt->tmpList->number == 0) - goto exit; + goto exit; /* * REVISIT: Register the extension namespaces. */ @@ -2896,7 +2906,7 @@ xsltParseExtElemPrefixes(xsltCompilerCtxtPtr cctxt, xmlNodePtr node, if (cctxt->inode != NULL) cctxt->inode->nsChanged = 1; -exit: +exit: if (list != NULL) return(list); else @@ -2916,7 +2926,7 @@ exit: * -1 if an internal or API error occured. */ static int -xsltParseAttrXSLTVersion(xsltCompilerCtxtPtr cctxt, xmlNodePtr node, +xsltParseAttrXSLTVersion(xsltCompilerCtxtPtr cctxt, xmlNodePtr node, int instrCategory) { xmlChar *value; @@ -2930,12 +2940,12 @@ xsltParseAttrXSLTVersion(xsltCompilerCtxtPtr cctxt, xmlNodePtr node, else attr = xmlHasNsProp(node, BAD_CAST "version", XSLT_NAMESPACE); - if (attr == NULL) + if (attr == NULL) return(0); attr->psvi = (void *) xsltXSLTAttrMarker; - if ((attr->children != NULL) && + if ((attr->children != NULL) && (attr->children->content != NULL)) value = attr->children->content; else { @@ -2944,7 +2954,7 @@ xsltParseAttrXSLTVersion(xsltCompilerCtxtPtr cctxt, xmlNodePtr node, cctxt->style->errors++; return(1); } - + if (! xmlStrEqual(value, (const xmlChar *)"1.0")) { cctxt->inode->forwardsCompat = 1; /* @@ -2964,7 +2974,7 @@ xsltParseAttrXSLTVersion(xsltCompilerCtxtPtr cctxt, xmlNodePtr node, "processor.\n"); cctxt->style->warnings++; cctxt->errSeverity = XSLT_ERROR_SEVERITY_ERROR; - } + } } else { cctxt->inode->forwardsCompat = 0; } @@ -3022,8 +3032,8 @@ xsltParsePreprocessStylesheetTree(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) if (xmlNodeGetSpacePreserve(node) != 1) cctxt->inode->preserveWhitespace = 0; else - cctxt->inode->preserveWhitespace = 1; - + cctxt->inode->preserveWhitespace = 1; + /* * Eval if we should keep the old incorrect behaviour. */ @@ -3045,7 +3055,7 @@ xsltParsePreprocessStylesheetTree(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) deleteNode = NULL; } if (cur->type == XML_ELEMENT_NODE) { - + /* * Clear the PSVI field. */ @@ -3054,8 +3064,8 @@ xsltParsePreprocessStylesheetTree(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) xsltCompilerNodePush(cctxt, cur); inXSLText = 0; - textNode = NULL; - findSpaceAttr = 1; + textNode = NULL; + findSpaceAttr = 1; cctxt->inode->stripWhitespace = 0; /* * TODO: I'd love to use a string pointer comparison here :-/ @@ -3086,18 +3096,18 @@ xsltParsePreprocessStylesheetTree(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) * XSLT 2.0: "Any whitespace text node whose parent is * one of the following elements is removed from the " * tree, regardless of any xml:space attributes:..." - * xsl:apply-imports, + * xsl:apply-imports, * xsl:apply-templates, * xsl:attribute-set, - * xsl:call-template, + * xsl:call-template, * xsl:choose, * xsl:stylesheet, xsl:transform. * XSLT 2.0: xsl:analyze-string, * xsl:character-map, - * xsl:next-match + * xsl:next-match * * TODO: I'd love to use a string pointer comparison here :-/ - */ + */ name = cur->name; switch (*name) { case 't': @@ -3119,7 +3129,7 @@ xsltParsePreprocessStylesheetTree(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) findSpaceAttr = 0; cctxt->inode->preserveWhitespace = 1; inXSLText = 1; - } + } break; case 'c': if (xmlStrEqual(name, BAD_CAST "choose") || @@ -3168,7 +3178,7 @@ xsltParsePreprocessStylesheetTree(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) */ break; } - } while (cur->prev); + } while (cur->prev); } } break; @@ -3188,13 +3198,13 @@ process_attributes: #ifdef XSLT_REFACTORED_XSLT_NSCOMP if ((attr->ns) && (attr->ns->href != nsNameXSLT) && xmlStrEqual(attr->ns->href, nsNameXSLT)) - { + { nsMapItem = xsltNewNamespaceMapItem(cctxt, doc, attr->ns, cur); if (nsMapItem == NULL) goto internal_err; attr->ns->href = nsNameXSLT; - } + } #endif if (internalize) { /* @@ -3223,7 +3233,7 @@ process_attributes: if ((findSpaceAttr != 0) && (attr->ns != NULL) && (attr->name != NULL) && - (attr->name[0] == 's') && + (attr->name[0] == 's') && (attr->ns->prefix != NULL) && (attr->ns->prefix[0] == 'x') && (attr->ns->prefix[1] == 'm') && @@ -3234,7 +3244,7 @@ process_attributes: XML_XML_NAMESPACE); if (value != NULL) { if (xmlStrEqual(value, BAD_CAST "preserve")) { - cctxt->inode->preserveWhitespace = 1; + cctxt->inode->preserveWhitespace = 1; } else if (xmlStrEqual(value, BAD_CAST "default")) { cctxt->inode->preserveWhitespace = 0; } else { @@ -3246,7 +3256,7 @@ process_attributes: findSpaceAttr = 0; xmlFree(value); } - + } attr = attr->next; } while (attr != NULL); @@ -3263,17 +3273,17 @@ process_attributes: { /* * Merge adjacent text/CDATA-section-nodes - * --------------------------------------- + * --------------------------------------- * In order to avoid breaking of existing stylesheets, * if the old behaviour is wanted (strictWhitespace == 0), * then we *won't* merge adjacent text-nodes * (except in xsl:text); this will ensure that whitespace-only * text nodes are (incorrectly) not stripped in some cases. - * + * * Example: : zoo * Corrent (strict) result: zoo * Incorrect (old) result : zoo - * + * * NOTE that we *will* merge adjacent text-nodes if * they are in xsl:text. * Example, the following: @@ -3305,10 +3315,10 @@ process_attributes: if (textNode == NULL) textNode = cur; goto end_of_text; - } + } } else if ((cur->type == XML_COMMENT_NODE) || (cur->type == XML_PI_NODE)) - { + { /* * Remove processing instructions and comments. */ @@ -3344,7 +3354,7 @@ end_of_text: (! cctxt->inode->preserveWhitespace)) && IS_BLANK(*value) && xsltIsBlank(value))) - { + { if (textNode != cur) { xmlUnlinkNode(textNode); xmlFreeNode(textNode); @@ -3494,7 +3504,7 @@ xsltPrecomputeStylesheet(xsltStylesheetPtr style, xmlNodePtr cur) } else { exclPrefixes = xsltParseStylesheetExcludePrefix(style, cur, 0); } - + if ((cur->nsDef != NULL) && (style->exclPrefixNr > 0)) { xmlNsPtr ns = cur->nsDef, prev = NULL, next; xmlNodePtr root = NULL; @@ -3506,7 +3516,7 @@ xsltPrecomputeStylesheet(xsltStylesheetPtr style, xmlNodePtr cur) moved = 0; next = ns->next; for (i = 0;i < style->exclPrefixNr;i++) { - if ((ns->prefix != NULL) && + if ((ns->prefix != NULL) && (xmlStrEqual(ns->href, style->exclPrefixTab[i]))) { /* @@ -3630,7 +3640,7 @@ xsltGatherNamespaces(xsltStylesheetPtr style) { if (style == NULL) return; - /* + /* * TODO: basically if the stylesheet uses the same prefix for different * patterns, well they may be in problem, hopefully they will get * a warning first. @@ -3640,7 +3650,7 @@ xsltGatherNamespaces(xsltStylesheetPtr style) { * An expression should be evaluated in the context of the in-scope * namespaces; eliminate the restriction of an XML document to contain * no duplicate prefixes for different namespace names. - * + * */ cur = xmlDocGetRootElement(style->doc); while (cur != NULL) { @@ -3689,7 +3699,7 @@ xsltGatherNamespaces(xsltStylesheetPtr style) { cur = cur->next; continue; } - + do { cur = cur->parent; if (cur == NULL) @@ -3831,7 +3841,7 @@ xsltGetXSLTElementTypeByNode(xsltCompilerCtxtPtr cctxt, * * Returns 0 if everything's fine; * -1 on API or internal errors. - */ + */ int xsltParseAnyXSLTElem(xsltCompilerCtxtPtr cctxt, xmlNodePtr elem) { @@ -3849,7 +3859,7 @@ xsltParseAnyXSLTElem(xsltCompilerCtxtPtr cctxt, xmlNodePtr elem) if (cctxt->inode->category == XSLT_ELEMENT_CATEGORY_EXTENSION) { cctxt->inode->extContentHandled = 1; } - + xsltCompilerNodePush(cctxt, elem); /* * URGENT TODO: Find a way to speed up this annoying redundant @@ -3858,7 +3868,7 @@ xsltParseAnyXSLTElem(xsltCompilerCtxtPtr cctxt, xmlNodePtr elem) if (cctxt->inode->prev->curChildType != 0) cctxt->inode->type = cctxt->inode->prev->curChildType; else - cctxt->inode->type = xsltGetXSLTElementTypeByNode(cctxt, elem); + cctxt->inode->type = xsltGetXSLTElementTypeByNode(cctxt, elem); /* * Update the in-scope namespaces if needed. */ @@ -3879,31 +3889,31 @@ xsltParseAnyXSLTElem(xsltCompilerCtxtPtr cctxt, xmlNodePtr elem) /* * Validate the content model of the XSLT-element. */ - switch (cctxt->inode->type) { + switch (cctxt->inode->type) { case XSLT_FUNC_APPLYIMPORTS: /* EMPTY */ goto empty_content; case XSLT_FUNC_APPLYTEMPLATES: /* */ - goto apply_templates; - case XSLT_FUNC_ATTRIBUTE: + goto apply_templates; + case XSLT_FUNC_ATTRIBUTE: /* */ goto sequence_constructor; case XSLT_FUNC_CALLTEMPLATE: /* */ goto call_template; - case XSLT_FUNC_CHOOSE: + case XSLT_FUNC_CHOOSE: /* */ goto choose; case XSLT_FUNC_COMMENT: /* */ - goto sequence_constructor; + goto sequence_constructor; case XSLT_FUNC_COPY: /* */ - goto sequence_constructor; + goto sequence_constructor; case XSLT_FUNC_COPYOF: /* EMPTY */ - goto empty_content; + goto empty_content; case XSLT_FUNC_DOCUMENT: /* Extra one */ /* ?? template ?? */ goto sequence_constructor; @@ -3970,7 +3980,7 @@ xsltParseAnyXSLTElem(xsltCompilerCtxtPtr cctxt, xmlNodePtr elem) * Check for redefinition. */ if ((elem->psvi != NULL) && (cctxt->ivar != NULL)) { - xsltVarInfoPtr ivar = cctxt->ivar; + xsltVarInfoPtr ivar = cctxt->ivar; do { if ((ivar->name == @@ -4000,7 +4010,7 @@ xsltParseAnyXSLTElem(xsltCompilerCtxtPtr cctxt, xmlNodePtr elem) #ifdef WITH_XSLT_DEBUG_PARSING xsltGenericDebug(xsltGenericDebugContext, "xsltParseXSLTNode: Unhandled XSLT element '%s'.\n", - elem->name); + elem->name); #endif xsltTransformError(NULL, cctxt->style, elem, "xsltParseXSLTNode: Internal error; " @@ -4029,7 +4039,7 @@ apply_templates: } child = child->next; } while (child != NULL); - } + } goto exit; call_template: @@ -4053,7 +4063,7 @@ call_template: } child = child->next; } while (child != NULL); - } + } goto exit; text: @@ -4089,7 +4099,7 @@ empty_content: break; } child = child->next; - } while (child != NULL); + } while (child != NULL); } goto exit; @@ -4108,7 +4118,7 @@ choose: if (child->type == XML_ELEMENT_NODE) { if (IS_XSLT_ELEM_FAST(child)) { xsltStyleType type; - + type = xsltGetXSLTElementTypeByNode(cctxt, child); if (type == XSLT_FUNC_WHEN) { nbWhen++; @@ -4124,7 +4134,7 @@ choose: xsltParseContentError(cctxt->style, child); err = 1; break; - } + } if (nbOtherwise) { xsltTransformError(NULL, cctxt->style, elem, "The XSLT 'choose' element must not contain " @@ -4140,7 +4150,7 @@ choose: xsltParseContentError(cctxt->style, child); } else xsltParseContentError(cctxt->style, child); - } + } /* else xsltParseContentError(cctxt, child); @@ -4152,8 +4162,8 @@ choose: "The XSLT element 'choose' must contain at least one " "XSLT element 'when'.\n"); cctxt->style->errors++; - } - } + } + } goto exit; for_each: @@ -4170,13 +4180,13 @@ for_each: /* * Parse xsl:sort first. */ - do { + do { if ((child->type == XML_ELEMENT_NODE) && IS_XSLT_ELEM_FAST(child)) - { + { if (xsltGetXSLTElementTypeByNode(cctxt, child) == XSLT_FUNC_SORT) - { + { cctxt->inode->curChildType = XSLT_FUNC_SORT; xsltParseAnyXSLTElem(cctxt, child); } else @@ -4190,7 +4200,7 @@ for_each: */ if (child != NULL) xsltParseSequenceConstructor(cctxt, child); - } + } goto exit; sequence_constructor: @@ -4207,10 +4217,10 @@ sequence_constructor: if ((elem->next != NULL) && ((cctxt->inode->type == XSLT_FUNC_VARIABLE) || (cctxt->inode->type == XSLT_FUNC_PARAM))) - { + { if ((elem->psvi != NULL) && (((xsltStyleBasicItemVariablePtr) elem->psvi)->name)) - { + { xsltCompilerVarInfoPush(cctxt, elem, ((xsltStyleBasicItemVariablePtr) elem->psvi)->name, ((xsltStyleBasicItemVariablePtr) elem->psvi)->ns); @@ -4230,13 +4240,13 @@ internal_err: /** * xsltForwardsCompatUnkownItemCreate: * - * @cctxt: the compilation context + * @cctxt: the compilation context * * Creates a compiled representation of the unknown * XSLT instruction. * * Returns the compiled representation. - */ + */ static xsltStyleItemUknownPtr xsltForwardsCompatUnkownItemCreate(xsltCompilerCtxtPtr cctxt) { @@ -4273,12 +4283,12 @@ xsltForwardsCompatUnkownItemCreate(xsltCompilerCtxtPtr cctxt) * Returns 1 in the unknown XSLT instruction is rejected, * 0 if everything's fine and * -1 on API or internal errors. - */ + */ static int xsltParseUnknownXSLTElem(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) { - if ((cctxt == NULL) || (node == NULL)) + if ((cctxt == NULL) || (node == NULL) || (node->type != XML_ELEMENT_NODE)) return(-1); /* @@ -4286,8 +4296,8 @@ xsltParseUnknownXSLTElem(xsltCompilerCtxtPtr cctxt, */ if (cctxt->inode->category == XSLT_ELEMENT_CATEGORY_EXTENSION) { cctxt->inode->extContentHandled = 1; - } - if (cctxt->inode->forwardsCompat == 0) { + } + if (cctxt->inode->forwardsCompat == 0) { /* * We are not in forwards-compatible mode, so raise an error. */ @@ -4299,7 +4309,7 @@ xsltParseUnknownXSLTElem(xsltCompilerCtxtPtr cctxt, /* * Forwards-compatible mode. * ------------------------ - * + * * Parse/compile xsl:fallback elements. * * QUESTION: Do we have to raise an error if there's no xsl:fallback? @@ -4342,7 +4352,7 @@ xsltParseUnknownXSLTElem(xsltCompilerCtxtPtr cctxt, } child = child->next; } while (child != NULL); - + xsltCompilerNodePop(cctxt, node); } return(0); @@ -4356,7 +4366,7 @@ xsltParseUnknownXSLTElem(xsltCompilerCtxtPtr cctxt, * * Parses a "template" content (or "sequence constructor" in XSLT 2.0 terms). * This will additionally remove xsl:text elements from the tree. - */ + */ void xsltParseSequenceConstructor(xsltCompilerCtxtPtr cctxt, xmlNodePtr cur) { @@ -4375,7 +4385,7 @@ xsltParseSequenceConstructor(xsltCompilerCtxtPtr cctxt, xmlNodePtr cur) if (cctxt->inode->category == XSLT_ELEMENT_CATEGORY_EXTENSION) { cctxt->inode->extContentHandled = 1; } - if (cur == NULL) + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) return; /* * This is the content reffered to as a "template". @@ -4396,14 +4406,14 @@ xsltParseSequenceConstructor(xsltCompilerCtxtPtr cctxt, xmlNodePtr cur) * xsl:choose, xsl:if, xsl:text, xsl:copy, xsl:variable, * xsl:message, xsl:fallback, * xsl:processing-instruction, xsl:comment, xsl:element - * xsl:attribute. + * xsl:attribute. * Additional allowed content: * 1) extension instructions * 2) literal result elements * 3) PCDATA * * NOTE that this content model does *not* allow xsl:param. - */ + */ while (cur != NULL) { if (deleteNode != NULL) { #ifdef WITH_XSLT_DEBUG_BLANKS @@ -4414,8 +4424,8 @@ xsltParseSequenceConstructor(xsltCompilerCtxtPtr cctxt, xmlNodePtr cur) xmlFreeNode(deleteNode); deleteNode = NULL; } - if (cur->type == XML_ELEMENT_NODE) { - + if (cur->type == XML_ELEMENT_NODE) { + if (cur->psvi == xsltXSLTTextMarker) { /* * xsl:text elements @@ -4452,7 +4462,7 @@ xsltParseSequenceConstructor(xsltCompilerCtxtPtr cctxt, xmlNodePtr cur) "Element 'xsl:text': Invalid type " "of node found in content.\n"); cctxt->style->errors++; - } + } } if (cur->properties) { xmlAttrPtr attr; @@ -4503,7 +4513,7 @@ xsltParseSequenceConstructor(xsltCompilerCtxtPtr cctxt, xmlNodePtr cur) /* * TODO: Using the XSLT-marker is still not stable yet. */ - /* if (cur->psvi == xsltXSLTElemMarker) { */ + /* if (cur->psvi == xsltXSLTElemMarker) { */ /* * XSLT instructions * -------------------------------------------------------- @@ -4537,7 +4547,7 @@ xsltParseSequenceConstructor(xsltCompilerCtxtPtr cctxt, xmlNodePtr cur) xsltParseAnyXSLTElem(cctxt, cur); break; default: - xsltParseUnknownXSLTElem(cctxt, cur); + xsltParseUnknownXSLTElem(cctxt, cur); cur = cur->next; continue; } @@ -4613,7 +4623,7 @@ xsltParseSequenceConstructor(xsltCompilerCtxtPtr cctxt, xmlNodePtr cur) } cur->psvi = (void *) xsltPreComputeExtModuleElement(cctxt->style, cur); - + if (cur->psvi == NULL) { /* * OLD COMMENT: "Unknown element, maybe registered @@ -4685,7 +4695,7 @@ xsltParseSequenceConstructor(xsltCompilerCtxtPtr cctxt, xmlNodePtr cur) xsltParseAttrXSLTVersion(cctxt, cur, XSLT_ELEMENT_CATEGORY_LRE); /* - * Report invalid XSLT attributes. + * Report invalid XSLT attributes. * For XSLT 1.0 only xsl:use-attribute-sets is allowed * next to xsl:version, xsl:exclude-result-prefixes and * xsl:extension-element-prefixes. @@ -4696,10 +4706,10 @@ xsltParseSequenceConstructor(xsltCompilerCtxtPtr cctxt, xmlNodePtr cur) do { if ((attr->psvi != xsltXSLTAttrMarker) && IS_XSLT_ATTR_FAST(attr)) - { + { if (! xmlStrEqual(attr->name, BAD_CAST "use-attribute-sets")) - { + { xsltTransformError(NULL, cctxt->style, cur, "Unknown XSLT attribute '%s'.\n", @@ -4731,7 +4741,7 @@ xsltParseSequenceConstructor(xsltCompilerCtxtPtr cctxt, xmlNodePtr cur) */ if (cur->properties) { xmlAttrPtr attr = cur->properties; - + while (attr != NULL) { xsltCompileAttr(cctxt->style, attr); attr = attr->next; @@ -4774,13 +4784,14 @@ xsltParseSequenceConstructor(xsltCompilerCtxtPtr cctxt, xmlNodePtr cur) * constructor" in XSLT 2.0); it it allows addional xsl:param * elements as immediate children of @templ. * - * Called by: + * Called by: * exsltFuncFunctionComp() (EXSLT, functions.c) * So this is intended to be called from extension functions. */ void xsltParseTemplateContent(xsltStylesheetPtr style, xmlNodePtr templ) { - if ((style == NULL) || (templ == NULL)) + if ((style == NULL) || (templ == NULL) || + (templ->type == XML_NAMESPACE_DECL)) return; /* @@ -4790,13 +4801,13 @@ xsltParseTemplateContent(xsltStylesheetPtr style, xmlNodePtr templ) { XSLT_CCTXT(style)->inode->extContentHandled = 1; } - if (templ->children != NULL) { + if (templ->children != NULL) { xmlNodePtr child = templ->children; /* * Process xsl:param elements, which can only occur as the * immediate children of xsl:template (well, and of any * user-defined extension instruction if needed). - */ + */ do { if ((child->type == XML_ELEMENT_NODE) && IS_XSLT_ELEM_FAST(child) && @@ -4829,6 +4840,10 @@ xsltParseTemplateContent(xsltStylesheetPtr style, xmlNodePtr templ) { void xsltParseTemplateContent(xsltStylesheetPtr style, xmlNodePtr templ) { xmlNodePtr cur, delete; + + if ((style == NULL) || (templ == NULL) || + (templ->type == XML_NAMESPACE_DECL)) return; + /* * This content comes from the stylesheet * For stylesheets, the set of whitespace-preserving @@ -4859,7 +4874,7 @@ xsltParseTemplateContent(xsltStylesheetPtr style, xmlNodePtr templ) { xmlChar *prop; xmlNodePtr text = cur->children, next; int noesc = 0; - + prop = xmlGetNsProp(cur, (const xmlChar *)"disable-output-escaping", NULL); @@ -4912,7 +4927,7 @@ xsltParseTemplateContent(xsltStylesheetPtr style, xmlNodePtr templ) { */ if (text->doc->dict != NULL) { const xmlChar *tmp; - + tmp = xmlDictLookup(text->doc->dict, text->content, -1); if (tmp != text->content) { @@ -4974,7 +4989,7 @@ skip_children: cur = cur->next; continue; } - + do { cur = cur->parent; if (cur == NULL) @@ -5048,7 +5063,7 @@ xsltParseStylesheetKey(xsltStylesheetPtr style, xmlNodePtr key) { xmlChar *name = NULL; xmlChar *nameURI = NULL; - if ((style == NULL) || (key == NULL)) + if ((style == NULL) || (key == NULL) || (key->type != XML_ELEMENT_NODE)) return; /* @@ -5135,10 +5150,11 @@ error: static void xsltParseXSLTTemplate(xsltCompilerCtxtPtr cctxt, xmlNodePtr templNode) { xsltTemplatePtr templ; - xmlChar *prop; - double priority; + xmlChar *prop; + double priority; - if ((cctxt == NULL) || (templNode == NULL)) + if ((cctxt == NULL) || (templNode == NULL) || + (templNode->type != XML_ELEMENT_NODE)) return; /* @@ -5155,19 +5171,19 @@ xsltParseXSLTTemplate(xsltCompilerCtxtPtr cctxt, xmlNodePtr templNode) { templ->next = cctxt->style->templates; cctxt->style->templates = templ; - templ->style = cctxt->style; + templ->style = cctxt->style; /* * Attribute "mode". */ prop = xmlGetNsProp(templNode, (const xmlChar *)"mode", NULL); - if (prop != NULL) { + if (prop != NULL) { const xmlChar *modeURI; /* * TODO: We need a standardized function for extraction * of namespace names and local names from QNames. - * Don't use xsltGetQNameURI() as it cannot channe + * Don't use xsltGetQNameURI() as it cannot channe� * reports through the context. */ modeURI = xsltGetQNameURI(templNode, &prop); @@ -5217,7 +5233,7 @@ xsltParseXSLTTemplate(xsltCompilerCtxtPtr cctxt, xmlNodePtr templNode) { if (prop != NULL) { const xmlChar *nameURI; xsltTemplatePtr curTempl; - + /* * TODO: Don't use xsltGetQNameURI(). */ @@ -5235,7 +5251,7 @@ xsltParseXSLTTemplate(xsltCompilerCtxtPtr cctxt, xmlNodePtr templNode) { "the value is not a valid NCName.\n", templ->name); cctxt->style->errors++; goto error; - } + } if (nameURI != NULL) templ->nameURI = xmlDictLookup(cctxt->style->dict, nameURI, -1); curTempl = templ->next; @@ -5254,7 +5270,7 @@ xsltParseXSLTTemplate(xsltCompilerCtxtPtr cctxt, xmlNodePtr templNode) { } } if (templNode->children != NULL) { - xsltParseTemplateContent(cctxt->style, templNode); + xsltParseTemplateContent(cctxt->style, templNode); /* * MAYBE TODO: Custom behaviour: In order to stay compatible with * Xalan and MSXML(.NET), we could allow whitespace @@ -5269,9 +5285,9 @@ xsltParseXSLTTemplate(xsltCompilerCtxtPtr cctxt, xmlNodePtr templNode) { * * ... the whitespace between every xsl:param would be * added to the result tree. - */ - } - + */ + } + templ->elem = templNode; templ->content = templNode->children; xsltAddTemplate(cctxt->style, templ, templ->mode, templ->modeURI); @@ -5299,7 +5315,8 @@ xsltParseStylesheetTemplate(xsltStylesheetPtr style, xmlNodePtr template) { xmlChar *modeURI = NULL; double priority; - if (template == NULL) + if ((style == NULL) || (template == NULL) || + (template->type != XML_ELEMENT_NODE)) return; /* @@ -5311,7 +5328,7 @@ xsltParseStylesheetTemplate(xsltStylesheetPtr style, xmlNodePtr template) { ret->next = style->templates; style->templates = ret; ret->style = style; - + /* * Get inherited namespaces */ @@ -5366,7 +5383,7 @@ xsltParseStylesheetTemplate(xsltStylesheetPtr style, xmlNodePtr template) { if (prop != NULL) { const xmlChar *URI; xsltTemplatePtr cur; - + /* * TODO: Don't use xsltGetQNameURI(). */ @@ -5431,7 +5448,7 @@ static xsltStyleItemIncludePtr xsltCompileXSLTIncludeElem(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) { xsltStyleItemIncludePtr item; - if ((cctxt == NULL) || (node == NULL)) + if ((cctxt == NULL) || (node == NULL) || (node->type != XML_ELEMENT_NODE)) return(NULL); node->psvi = NULL; @@ -5462,7 +5479,7 @@ xsltParseFindTopLevelElem(xsltCompilerCtxtPtr cctxt, xmlNodePtr cur, const xmlChar *name, const xmlChar *namespaceURI, - int breakOnOtherElem, + int breakOnOtherElem, xmlNodePtr *resultNode) { if (name == NULL) @@ -5474,7 +5491,7 @@ xsltParseFindTopLevelElem(xsltCompilerCtxtPtr cctxt, if ((cur->ns != NULL) && (cur->name != NULL)) { if ((*(cur->name) == *name) && xmlStrEqual(cur->name, name) && - xmlStrEqual(cur->ns->href, namespaceURI)) + xmlStrEqual(cur->ns->href, namespaceURI)) { *resultNode = cur; return(1); @@ -5517,13 +5534,13 @@ xsltParseTopLevelXSLTElem(xsltCompilerCtxtPtr cctxt, int oldIsInclude; if (xsltCompileXSLTIncludeElem(cctxt, node) == NULL) - goto exit; + goto exit; /* * Mark this stylesheet tree as being currently included. */ oldIsInclude = cctxt->isInclude; cctxt->isInclude = 1; - + if (xsltParseStylesheetInclude(cctxt->style, node) != 0) { cctxt->style->errors++; } @@ -5573,7 +5590,7 @@ xsltParseRemoveWhitespace(xmlNodePtr node) if (((child->type == XML_TEXT_NODE) || (child->type == XML_CDATA_SECTION_NODE)) && (IS_BLANK_NODE(child))) - delNode = child; + delNode = child; child = child->next; } while (child != NULL); if (delNode) { @@ -5597,9 +5614,9 @@ xsltParseXSLTStylesheetElemCore(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) if ((cctxt == NULL) || (node == NULL) || (node->type != XML_ELEMENT_NODE)) - return(-1); + return(-1); - style = cctxt->style; + style = cctxt->style; /* * At this stage all import declarations of all stylesheet modules * with the same stylesheet level have been processed. @@ -5630,13 +5647,13 @@ xsltParseXSLTStylesheetElemCore(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) if (node == NULL) { return(-1); } - } - + } + if (node->children == NULL) return(0); /* * Push the xsl:stylesheet/xsl:transform element. - */ + */ xsltCompilerNodePush(cctxt, node); cctxt->inode->isRoot = 1; cctxt->inode->nsChanged = 0; @@ -5651,7 +5668,7 @@ xsltParseXSLTStylesheetElemCore(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) * stylesheet is rooted at, regardless if it's an XSLT * instruction or a literal result instruction (or if * this is an embedded stylesheet). - */ + */ cctxt->inode->inScopeNs = xsltCompilerBuildInScopeNsList(cctxt, node); @@ -5662,11 +5679,11 @@ xsltParseXSLTStylesheetElemCore(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) * id = id * extension-element-prefixes = tokens * exclude-result-prefixes = tokens - * version = number (mandatory) + * version = number (mandatory) */ if (xsltParseAttrXSLTVersion(cctxt, node, XSLT_ELEMENT_CATEGORY_XSLT) == 0) - { + { /* * Attribute "version". * XSLT 1.0: "An xsl:stylesheet element *must* have a version @@ -5679,21 +5696,21 @@ xsltParseXSLTStylesheetElemCore(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) if (isXsltElem) xsltTransformError(NULL, cctxt->style, node, "The attribute 'version' is missing.\n"); - cctxt->style->errors++; + cctxt->style->errors++; #else /* OLD behaviour. */ xsltTransformError(NULL, cctxt->style, node, "xsl:version is missing: document may not be a stylesheet\n"); cctxt->style->warnings++; #endif - } + } /* * The namespaces declared by the attributes * "extension-element-prefixes" and * "exclude-result-prefixes" are local to *this* * stylesheet tree; i.e., they are *not* visible to * other stylesheet-modules, whether imported or included. - * + * * Attribute "extension-element-prefixes". */ cctxt->inode->extElemNs = @@ -5764,9 +5781,9 @@ xsltParseXSLTStylesheetElemCore(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) xsltParseFindTopLevelElem(cctxt, cur, BAD_CAST "param", XSLT_NAMESPACE, 0, &cur) == 1) { - xsltParseTopLevelXSLTElem(cctxt, cur, XSLT_FUNC_PARAM); + xsltParseTopLevelXSLTElem(cctxt, cur, XSLT_FUNC_PARAM); cur = cur->next; - } + } /* * Process all top-level xsl:variable elements. */ @@ -5777,16 +5794,16 @@ xsltParseXSLTStylesheetElemCore(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) { xsltParseTopLevelXSLTElem(cctxt, cur, XSLT_FUNC_VARIABLE); cur = cur->next; - } + } /* * Process all the rest of top-level elements. */ cur = start; - while (cur != NULL) { + while (cur != NULL) { /* * Process element nodes. */ - if (cur->type == XML_ELEMENT_NODE) { + if (cur->type == XML_ELEMENT_NODE) { if (cur->ns == NULL) { xsltTransformError(NULL, style, cur, "Unexpected top-level element in no namespace.\n"); @@ -5808,7 +5825,7 @@ xsltParseXSLTStylesheetElemCore(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) cur = cur->next; continue; } - /* + /* * TODO: Change the return type of the parsing functions * to int. */ @@ -5826,8 +5843,8 @@ xsltParseXSLTStylesheetElemCore(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) /* NOP; done already */ } else if (IS_XSLT_NAME(cur, "param")) { /* NOP; done already */ - } else if (IS_XSLT_NAME(cur, "include")) { - if (cur->psvi != NULL) + } else if (IS_XSLT_NAME(cur, "include")) { + if (cur->psvi != NULL) xsltParseXSLTStylesheetElemCore(cctxt, cur); else { xsltTransformError(NULL, style, cur, @@ -5849,13 +5866,13 @@ xsltParseXSLTStylesheetElemCore(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) /* TODO: node-info needed for expressions ? */ xsltParseStylesheetKey(style, cur); } else if (IS_XSLT_NAME(cur, "decimal-format")) { - /* No node-info needed. */ + /* No node-info needed. */ xsltParseStylesheetDecimalFormat(style, cur); - } else if (IS_XSLT_NAME(cur, "attribute-set")) { + } else if (IS_XSLT_NAME(cur, "attribute-set")) { xsltParseTopLevelXSLTElem(cctxt, cur, - XSLT_FUNC_ATTRSET); + XSLT_FUNC_ATTRSET); } else if (IS_XSLT_NAME(cur, "namespace-alias")) { - /* NOP; done already */ + /* NOP; done already */ } else { if (cctxt->inode->forwardsCompat) { /* @@ -5929,7 +5946,7 @@ exit: * @cctxt: the compiler context * @node: the xsl:stylesheet/xsl:transform element-node * - * Parses the xsl:stylesheet and xsl:transform element. + * Parses the xsl:stylesheet and xsl:transform element. * * * * BIG TODO: The xsl:include stuff. - * + * * Called by xsltParseStylesheetTree() * * Returns 0 on success, a positive result on errors and @@ -5951,9 +5968,9 @@ xsltParseXSLTStylesheetElem(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) { xmlNodePtr cur, start; - if ((cctxt == NULL) || (node == NULL)) + if ((cctxt == NULL) || (node == NULL) || (node->type != XML_ELEMENT_NODE)) return(-1); - + if (node->children == NULL) goto exit; @@ -5968,7 +5985,7 @@ xsltParseXSLTStylesheetElem(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) * XSLT 1.0: "The xsl:import element children must precede all * other element children of an xsl:stylesheet element, * including any xsl:include element children." - */ + */ while ((cur != NULL) && xsltParseFindTopLevelElem(cctxt, cur, BAD_CAST "import", XSLT_NAMESPACE, 1, &cur) == 1) @@ -6009,14 +6026,14 @@ xsltParseXSLTStylesheetElem(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) if (cctxt->isInclude) { /* * If this stylesheet is intended for inclusion, then - * we will process only imports and includes. + * we will process only imports and includes. */ goto exit; - } + } /* * Now parse the rest of the top-level elements. */ - xsltParseXSLTStylesheetElemCore(cctxt, node); + xsltParseXSLTStylesheetElemCore(cctxt, node); exit: return(0); @@ -6039,7 +6056,7 @@ xsltParseStylesheetTop(xsltStylesheetPtr style, xmlNodePtr top) { int templates = 0; #endif - if (top == NULL) + if ((top == NULL) || (top->type != XML_ELEMENT_NODE)) return; prop = xmlGetNsProp(top, (const xmlChar *)"version", NULL); @@ -6052,8 +6069,10 @@ xsltParseStylesheetTop(xsltStylesheetPtr style, xmlNodePtr top) { (!xmlStrEqual(prop, (const xmlChar *)"1.1"))) { xsltTransformError(NULL, style, top, "xsl:version: only 1.0 features are supported\n"); - /* TODO set up compatibility when not XSLT 1.0 */ - if (style != NULL) style->warnings++; + if (style != NULL) { + style->forwards_compatible = 1; + style->warnings++; + } } xmlFree(prop); } @@ -6147,12 +6166,7 @@ xsltParseStylesheetTop(xsltStylesheetPtr style, xmlNodePtr top) { } else if (IS_XSLT_NAME(cur, "namespace-alias")) { xsltNamespaceAlias(style, cur); } else { - /* - * BUG TODO: The version of the *doc* is irrelevant for - * the forwards-compatible mode. - */ - if ((style != NULL) && (style->doc->version != NULL) && - (!strncmp((const char *) style->doc->version, "1.0", 3))) { + if ((style != NULL) && (style->forwards_compatible == 0)) { xsltTransformError(NULL, style, cur, "xsltParseStylesheetTop: unknown %s element\n", cur->name); @@ -6193,7 +6207,7 @@ xsltParseSimplifiedStylesheetTree(xsltCompilerCtxtPtr cctxt, xmlNodePtr node) { xsltTemplatePtr templ; - + if ((cctxt == NULL) || (node == NULL)) return(-1); @@ -6209,12 +6223,12 @@ xsltParseSimplifiedStylesheetTree(xsltCompilerCtxtPtr cctxt, cctxt->style->errors++; return(1); } - + #ifdef WITH_XSLT_DEBUG_PARSING xsltGenericDebug(xsltGenericDebugContext, "xsltParseSimplifiedStylesheetTree: document is stylesheet\n"); -#endif - +#endif + /* * Create and link the template */ @@ -6270,12 +6284,12 @@ xsltRestoreDocumentNamespaces(xsltNsMapPtr ns, xmlDocPtr doc) /* * Revert the changes we have applied to the namespace-URIs of * ns-decls. - */ + */ while (ns != NULL) { if ((ns->doc == doc) && (ns->ns != NULL)) { ns->ns->href = ns->origNsName; ns->origNsName = NULL; - ns->ns = NULL; + ns->ns = NULL; } ns = ns->next; } @@ -6318,9 +6332,9 @@ xsltParseStylesheetProcess(xsltStylesheetPtr style, xmlDocPtr doc) } oldIsSimplifiedStylesheet = cctxt->simplified; - if ((IS_XSLT_ELEM(cur)) && + if ((IS_XSLT_ELEM(cur)) && ((IS_XSLT_NAME(cur, "stylesheet")) || - (IS_XSLT_NAME(cur, "transform")))) { + (IS_XSLT_NAME(cur, "transform")))) { #ifdef WITH_XSLT_DEBUG_PARSING xsltGenericDebug(xsltGenericDebugContext, "xsltParseStylesheetProcess : found stylesheet\n"); @@ -6347,7 +6361,7 @@ xsltParseStylesheetProcess(xsltStylesheetPtr style, xmlDocPtr doc) } else { if (xsltParseSimplifiedStylesheetTree(cctxt, doc, cur) != 0) return(NULL); - } + } cctxt->simplified = oldIsSimplifiedStylesheet; @@ -6379,7 +6393,7 @@ xsltParseStylesheetProcess(xsltStylesheetPtr ret, xmlDocPtr doc) { return(NULL); if (ret == NULL) return(ret); - + /* * First steps, remove blank nodes, * locate the xsl:stylesheet element and the @@ -6392,9 +6406,9 @@ xsltParseStylesheetProcess(xsltStylesheetPtr ret, xmlDocPtr doc) { return(NULL); } - if ((IS_XSLT_ELEM(cur)) && + if ((IS_XSLT_ELEM(cur)) && ((IS_XSLT_NAME(cur, "stylesheet")) || - (IS_XSLT_NAME(cur, "transform")))) { + (IS_XSLT_NAME(cur, "transform")))) { #ifdef WITH_XSLT_DEBUG_PARSING xsltGenericDebug(xsltGenericDebugContext, "xsltParseStylesheetProcess : found stylesheet\n"); @@ -6430,7 +6444,7 @@ xsltParseStylesheetProcess(xsltStylesheetPtr ret, xmlDocPtr doc) { xsltGenericDebug(xsltGenericDebugContext, "xsltParseStylesheetProcess : document is stylesheet\n"); #endif - + if (!xmlStrEqual(prop, (const xmlChar *)"1.0")) { xsltTransformError(NULL, ret, cur, "xsl:version: only 1.0 features are supported\n"); @@ -6457,7 +6471,7 @@ xsltParseStylesheetProcess(xsltStylesheetPtr ret, xmlDocPtr doc) { template->elem = (xmlNodePtr) doc; template->content = doc->children; xsltAddTemplate(ret, template, NULL, NULL); - ret->literal_result = 1; + ret->literal_result = 1; } return(ret); @@ -6503,8 +6517,8 @@ xsltParseStylesheetImportedDoc(xmlDocPtr doc, doc->URL); #endif xmlDictReference(retStyle->dict); - } - + } + /* * TODO: Eliminate xsltGatherNamespaces(); we must not restrict * the stylesheet to containt distinct namespace prefixes. @@ -6515,7 +6529,7 @@ xsltParseStylesheetImportedDoc(xmlDocPtr doc, { xsltCompilerCtxtPtr cctxt; xsltStylesheetPtr oldCurSheet; - + if (parentStyle == NULL) { xsltPrincipalStylesheetDataPtr principalData; /* @@ -6543,7 +6557,7 @@ xsltParseStylesheetImportedDoc(xmlDocPtr doc, if (cctxt == NULL) { xsltFreeStylesheet(retStyle); return(NULL); - } + } retStyle->compCtxt = (void *) cctxt; cctxt->style = retStyle; cctxt->dict = retStyle->dict; @@ -6567,10 +6581,10 @@ xsltParseStylesheetImportedDoc(xmlDocPtr doc, */ oldCurSheet = cctxt->style; cctxt->style = retStyle; - + retStyle->doc = doc; xsltParseStylesheetProcess(retStyle, doc); - + cctxt->style = oldCurSheet; if (parentStyle == NULL) { /* @@ -6594,7 +6608,7 @@ xsltParseStylesheetImportedDoc(xmlDocPtr doc, /* * Restore all changes made to namespace URIs of ns-decls. */ - if (cctxt->psData->nsMap) + if (cctxt->psData->nsMap) xsltRestoreDocumentNamespaces(cctxt->psData->nsMap, doc); #endif /* @@ -6607,7 +6621,7 @@ xsltParseStylesheetImportedDoc(xmlDocPtr doc, */ if (parentStyle == NULL) { xsltCleanupStylesheetTree(doc, xmlDocGetRootElement(doc)); - if (retStyle->compCtxt != NULL) { + if (retStyle->compCtxt != NULL) { xsltCompilationCtxtFree(retStyle->compCtxt); retStyle->compCtxt = NULL; } @@ -6618,7 +6632,7 @@ xsltParseStylesheetImportedDoc(xmlDocPtr doc, } } } - + #else /* XSLT_REFACTORED */ /* * Old behaviour. @@ -6640,7 +6654,7 @@ xsltParseStylesheetImportedDoc(xmlDocPtr doc, } } #endif /* else of XSLT_REFACTORED */ - + return(retStyle); } @@ -6696,7 +6710,7 @@ xsltParseStylesheetFile(const xmlChar* filename) { xsltSecurityPrefsPtr sec; xsltStylesheetPtr ret; xmlDocPtr doc; - + xsltInitGlobals(); if (filename == NULL) @@ -6795,7 +6809,7 @@ xsltParseStylesheetPI(const xmlChar *value) { continue; val = xmlStrndup(start, cur - start); NEXT; - if (val == NULL) + if (val == NULL) return(NULL); if ((xmlStrcasecmp(val, BAD_CAST "text/xml")) && (xmlStrcasecmp(val, BAD_CAST "text/xsl"))) { @@ -6827,7 +6841,7 @@ xsltParseStylesheetPI(const xmlChar *value) { while ((CUR != 0) && (!IS_BLANK(CUR))) NEXT; } - + } if (!isXml) { @@ -6843,7 +6857,7 @@ xsltParseStylesheetPI(const xmlChar *value) { * @doc: a document to process * * This function tries to locate the stylesheet PI in the given document - * If found, and if contained within the document, it will extract + * If found, and if contained within the document, it will extract * that subtree to build the stylesheet to process @doc (doc itself will * be modified). If found but referencing an external document it will * attempt to load it and generate a stylesheet from it. In both cases, diff --git a/dll/3rdparty/libxslt/xslt.h b/dll/3rdparty/libxslt/xslt.h deleted file mode 100644 index 849b03c4cbd..00000000000 --- a/dll/3rdparty/libxslt/xslt.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Summary: Interfaces, constants and types related to the XSLT engine - * Description: Interfaces, constants and types related to the XSLT engine - * - * Copy: See Copyright for the status of this software. - * - * Author: Daniel Veillard - */ - -#ifndef __XML_XSLT_H__ -#define __XML_XSLT_H__ - -#include -#include "xsltexports.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * XSLT_DEFAULT_VERSION: - * - * The default version of XSLT supported. - */ -#define XSLT_DEFAULT_VERSION "1.0" - -/** - * XSLT_DEFAULT_VENDOR: - * - * The XSLT "vendor" string for this processor. - */ -#define XSLT_DEFAULT_VENDOR "libxslt" - -/** - * XSLT_DEFAULT_URL: - * - * The XSLT "vendor" URL for this processor. - */ -#define XSLT_DEFAULT_URL "http://xmlsoft.org/XSLT/" - -/** - * XSLT_NAMESPACE: - * - * The XSLT specification namespace. - */ -#define XSLT_NAMESPACE ((xmlChar *) "http://www.w3.org/1999/XSL/Transform") - -/** - * XSLT_PARSE_OPTIONS: - * - * The set of options to pass to an xmlReadxxx when loading files for - * XSLT consumption. - */ -#define XSLT_PARSE_OPTIONS \ - XML_PARSE_NOENT | XML_PARSE_DTDLOAD | XML_PARSE_DTDATTR | XML_PARSE_NOCDATA - -/** - * xsltMaxDepth: - * - * This value is used to detect templates loops. - */ -XSLTPUBVAR int xsltMaxDepth; - -/** - * xsltEngineVersion: - * - * The version string for libxslt. - */ -XSLTPUBVAR const char *xsltEngineVersion; - -/** - * xsltLibxsltVersion: - * - * The version of libxslt compiled. - */ -XSLTPUBVAR const int xsltLibxsltVersion; - -/** - * xsltLibxmlVersion: - * - * The version of libxml libxslt was compiled against. - */ -XSLTPUBVAR const int xsltLibxmlVersion; - -/* - * Global initialization function. - */ - -XSLTPUBFUN void XSLTCALL - xsltInit (void); - -/* - * Global cleanup function. - */ -XSLTPUBFUN void XSLTCALL - xsltCleanupGlobals (void); - -#ifdef __cplusplus -} -#endif - -#endif /* __XML_XSLT_H__ */ - diff --git a/dll/3rdparty/libxslt/xsltInternals.h b/dll/3rdparty/libxslt/xsltInternals.h deleted file mode 100644 index e991a93c901..00000000000 --- a/dll/3rdparty/libxslt/xsltInternals.h +++ /dev/null @@ -1,1967 +0,0 @@ -/* - * Summary: internal data structures, constants and functions - * Description: Internal data structures, constants and functions used - * by the XSLT engine. - * They are not part of the API or ABI, i.e. they can change - * without prior notice, use carefully. - * - * Copy: See Copyright for the status of this software. - * - * Author: Daniel Veillard - */ - -#ifndef __XML_XSLT_INTERNALS_H__ -#define __XML_XSLT_INTERNALS_H__ - -#include -#include -#include -#include -#include -#include -#include -#include "xsltexports.h" -#include "xsltlocale.h" -#include "numbersInternals.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* #define XSLT_DEBUG_PROFILE_CACHE */ - -/** - * XSLT_IS_TEXT_NODE: - * - * check if the argument is a text node - */ -#define XSLT_IS_TEXT_NODE(n) ((n != NULL) && \ - (((n)->type == XML_TEXT_NODE) || \ - ((n)->type == XML_CDATA_SECTION_NODE))) - - -/** - * XSLT_MARK_RES_TREE_FRAG: - * - * internal macro to set up tree fragments - */ -#define XSLT_MARK_RES_TREE_FRAG(n) \ - (n)->name = (char *) xmlStrdup(BAD_CAST " fake node libxslt"); - -/** - * XSLT_IS_RES_TREE_FRAG: - * - * internal macro to test tree fragments - */ -#define XSLT_IS_RES_TREE_FRAG(n) \ - ((n != NULL) && ((n)->type == XML_DOCUMENT_NODE) && \ - ((n)->name != NULL) && ((n)->name[0] == ' ')) - -/** - * XSLT_REFACTORED_KEYCOMP: - * - * Internal define to enable on-demand xsl:key computation. - * That's the only mode now but the define is kept for compatibility - */ -#define XSLT_REFACTORED_KEYCOMP - -/** - * XSLT_FAST_IF: - * - * Internal define to enable usage of xmlXPathCompiledEvalToBoolean() - * for XSLT "tests"; e.g. in - */ -#define XSLT_FAST_IF - -/** - * XSLT_REFACTORED: - * - * Internal define to enable the refactored parts of Libxslt. - */ -/* #define XSLT_REFACTORED */ -/* ==================================================================== */ - -/** - * XSLT_REFACTORED_VARS: - * - * Internal define to enable the refactored variable part of libxslt - */ -#define XSLT_REFACTORED_VARS - -#ifdef XSLT_REFACTORED - -extern const xmlChar *xsltXSLTAttrMarker; - - -/* TODO: REMOVE: #define XSLT_REFACTORED_EXCLRESNS */ - -/* TODO: REMOVE: #define XSLT_REFACTORED_NSALIAS */ - -/** - * XSLT_REFACTORED_XSLT_NSCOMP - * - * Internal define to enable the pointer-comparison of - * namespaces of XSLT elements. - */ -/* #define XSLT_REFACTORED_XSLT_NSCOMP */ - -/** - * XSLT_REFACTORED_XPATHCOMP: - * - * Internal define to enable the optimization of the - * compilation of XPath expressions. - */ -#define XSLT_REFACTORED_XPATHCOMP - -#ifdef XSLT_REFACTORED_XSLT_NSCOMP - -extern const xmlChar *xsltConstNamespaceNameXSLT; - -/** - * IS_XSLT_ELEM_FAST: - * - * quick test to detect XSLT elements - */ -#define IS_XSLT_ELEM_FAST(n) \ - (((n) != NULL) && ((n)->ns != NULL) && \ - ((n)->ns->href == xsltConstNamespaceNameXSLT)) - -/** - * IS_XSLT_ATTR_FAST: - * - * quick test to detect XSLT attributes - */ -#define IS_XSLT_ATTR_FAST(a) \ - (((a) != NULL) && ((a)->ns != NULL) && \ - ((a)->ns->href == xsltConstNamespaceNameXSLT)) - -/** - * XSLT_HAS_INTERNAL_NSMAP: - * - * check for namespace mapping - */ -#define XSLT_HAS_INTERNAL_NSMAP(s) \ - (((s) != NULL) && ((s)->principal) && \ - ((s)->principal->principalData) && \ - ((s)->principal->principalData->nsMap)) - -/** - * XSLT_GET_INTERNAL_NSMAP: - * - * get pointer to namespace map - */ -#define XSLT_GET_INTERNAL_NSMAP(s) ((s)->principal->principalData->nsMap) - -#else /* XSLT_REFACTORED_XSLT_NSCOMP */ - -/** - * IS_XSLT_ELEM_FAST: - * - * quick check whether this is an xslt element - */ -#define IS_XSLT_ELEM_FAST(n) \ - (((n) != NULL) && ((n)->ns != NULL) && \ - (xmlStrEqual((n)->ns->href, XSLT_NAMESPACE))) - -/** - * IS_XSLT_ATTR_FAST: - * - * quick check for xslt namespace attribute - */ -#define IS_XSLT_ATTR_FAST(a) \ - (((a) != NULL) && ((a)->ns != NULL) && \ - (xmlStrEqual((a)->ns->href, XSLT_NAMESPACE))) - - -#endif /* XSLT_REFACTORED_XSLT_NSCOMP */ - - -/** - * XSLT_REFACTORED_MANDATORY_VERSION: - * - * TODO: Currently disabled to surpress regression test failures, since - * the old behaviour was that a missing version attribute - * produced a only a warning and not an error, which was incerrect. - * So the regression tests need to be fixed if this is enabled. - */ -/* #define XSLT_REFACTORED_MANDATORY_VERSION */ - -/** - * xsltPointerList: - * - * Pointer-list for various purposes. - */ -typedef struct _xsltPointerList xsltPointerList; -typedef xsltPointerList *xsltPointerListPtr; -struct _xsltPointerList { - void **items; - int number; - int size; -}; - -#endif - -/** - * XSLT_REFACTORED_PARSING: - * - * Internal define to enable the refactored parts of Libxslt - * related to parsing. - */ -/* #define XSLT_REFACTORED_PARSING */ - -/** - * XSLT_MAX_SORT: - * - * Max number of specified xsl:sort on an element. - */ -#define XSLT_MAX_SORT 15 - -/** - * XSLT_PAT_NO_PRIORITY: - * - * Specific value for pattern without priority expressed. - */ -#define XSLT_PAT_NO_PRIORITY -12345789 - -/** - * xsltRuntimeExtra: - * - * Extra information added to the transformation context. - */ -typedef struct _xsltRuntimeExtra xsltRuntimeExtra; -typedef xsltRuntimeExtra *xsltRuntimeExtraPtr; -struct _xsltRuntimeExtra { - void *info; /* pointer to the extra data */ - xmlFreeFunc deallocate; /* pointer to the deallocation routine */ - union { /* dual-purpose field */ - void *ptr; /* data not needing deallocation */ - int ival; /* integer value storage */ - } val; -}; - -/** - * XSLT_RUNTIME_EXTRA_LST: - * @ctxt: the transformation context - * @nr: the index - * - * Macro used to access extra information stored in the context - */ -#define XSLT_RUNTIME_EXTRA_LST(ctxt, nr) (ctxt)->extras[(nr)].info -/** - * XSLT_RUNTIME_EXTRA_FREE: - * @ctxt: the transformation context - * @nr: the index - * - * Macro used to free extra information stored in the context - */ -#define XSLT_RUNTIME_EXTRA_FREE(ctxt, nr) (ctxt)->extras[(nr)].deallocate -/** - * XSLT_RUNTIME_EXTRA: - * @ctxt: the transformation context - * @nr: the index - * - * Macro used to define extra information stored in the context - */ -#define XSLT_RUNTIME_EXTRA(ctxt, nr, typ) (ctxt)->extras[(nr)].val.typ - -/** - * xsltTemplate: - * - * The in-memory structure corresponding to an XSLT Template. - */ -typedef struct _xsltTemplate xsltTemplate; -typedef xsltTemplate *xsltTemplatePtr; -struct _xsltTemplate { - struct _xsltTemplate *next;/* chained list sorted by priority */ - struct _xsltStylesheet *style;/* the containing stylesheet */ - xmlChar *match; /* the matching string */ - float priority; /* as given from the stylesheet, not computed */ - const xmlChar *name; /* the local part of the name QName */ - const xmlChar *nameURI; /* the URI part of the name QName */ - const xmlChar *mode;/* the local part of the mode QName */ - const xmlChar *modeURI;/* the URI part of the mode QName */ - xmlNodePtr content; /* the template replacement value */ - xmlNodePtr elem; /* the source element */ - - /* - * TODO: @inheritedNsNr and @inheritedNs won't be used in the - * refactored code. - */ - int inheritedNsNr; /* number of inherited namespaces */ - xmlNsPtr *inheritedNs;/* inherited non-excluded namespaces */ - - /* Profiling informations */ - int nbCalls; /* the number of time the template was called */ - unsigned long time; /* the time spent in this template */ - void *params; /* xsl:param instructions */ -}; - -/** - * xsltDecimalFormat: - * - * Data structure of decimal-format. - */ -typedef struct _xsltDecimalFormat xsltDecimalFormat; -typedef xsltDecimalFormat *xsltDecimalFormatPtr; -struct _xsltDecimalFormat { - struct _xsltDecimalFormat *next; /* chained list */ - xmlChar *name; - /* Used for interpretation of pattern */ - xmlChar *digit; - xmlChar *patternSeparator; - /* May appear in result */ - xmlChar *minusSign; - xmlChar *infinity; - xmlChar *noNumber; /* Not-a-number */ - /* Used for interpretation of pattern and may appear in result */ - xmlChar *decimalPoint; - xmlChar *grouping; - xmlChar *percent; - xmlChar *permille; - xmlChar *zeroDigit; -}; - -/** - * xsltDocument: - * - * Data structure associated to a parsed document. - */ -typedef struct _xsltDocument xsltDocument; -typedef xsltDocument *xsltDocumentPtr; -struct _xsltDocument { - struct _xsltDocument *next; /* documents are kept in a chained list */ - int main; /* is this the main document */ - xmlDocPtr doc; /* the parsed document */ - void *keys; /* key tables storage */ - struct _xsltDocument *includes; /* subsidiary includes */ - int preproc; /* pre-processing already done */ - int nbKeysComputed; -}; - -/** - * xsltKeyDef: - * - * Representation of an xsl:key. - */ -typedef struct _xsltKeyDef xsltKeyDef; -typedef xsltKeyDef *xsltKeyDefPtr; -struct _xsltKeyDef { - struct _xsltKeyDef *next; - xmlNodePtr inst; - xmlChar *name; - xmlChar *nameURI; - xmlChar *match; - xmlChar *use; - xmlXPathCompExprPtr comp; - xmlXPathCompExprPtr usecomp; - xmlNsPtr *nsList; /* the namespaces in scope */ - int nsNr; /* the number of namespaces in scope */ -}; - -/** - * xsltKeyTable: - * - * Holds the computed keys for key definitions of the same QName. - * Is owned by an xsltDocument. - */ -typedef struct _xsltKeyTable xsltKeyTable; -typedef xsltKeyTable *xsltKeyTablePtr; -struct _xsltKeyTable { - struct _xsltKeyTable *next; - xmlChar *name; - xmlChar *nameURI; - xmlHashTablePtr keys; -}; - -/* - * The in-memory structure corresponding to an XSLT Stylesheet. - * NOTE: most of the content is simply linked from the doc tree - * structure, no specific allocation is made. - */ -typedef struct _xsltStylesheet xsltStylesheet; -typedef xsltStylesheet *xsltStylesheetPtr; - -typedef struct _xsltTransformContext xsltTransformContext; -typedef xsltTransformContext *xsltTransformContextPtr; - -/** - * xsltElemPreComp: - * - * The in-memory structure corresponding to element precomputed data, - * designed to be extended by extension implementors. - */ -typedef struct _xsltElemPreComp xsltElemPreComp; -typedef xsltElemPreComp *xsltElemPreCompPtr; - -/** - * xsltTransformFunction: - * @ctxt: the XSLT transformation context - * @node: the input node - * @inst: the stylesheet node - * @comp: the compiled information from the stylesheet - * - * Signature of the function associated to elements part of the - * stylesheet language like xsl:if or xsl:apply-templates. - */ -typedef void (*xsltTransformFunction) (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst, - xsltElemPreCompPtr comp); - -/** - * xsltSortFunc: - * @ctxt: a transformation context - * @sorts: the node-set to sort - * @nbsorts: the number of sorts - * - * Signature of the function to use during sorting - */ -typedef void (*xsltSortFunc) (xsltTransformContextPtr ctxt, xmlNodePtr *sorts, - int nbsorts); - -typedef enum { - XSLT_FUNC_COPY=1, - XSLT_FUNC_SORT, - XSLT_FUNC_TEXT, - XSLT_FUNC_ELEMENT, - XSLT_FUNC_ATTRIBUTE, - XSLT_FUNC_COMMENT, - XSLT_FUNC_PI, - XSLT_FUNC_COPYOF, - XSLT_FUNC_VALUEOF, - XSLT_FUNC_NUMBER, - XSLT_FUNC_APPLYIMPORTS, - XSLT_FUNC_CALLTEMPLATE, - XSLT_FUNC_APPLYTEMPLATES, - XSLT_FUNC_CHOOSE, - XSLT_FUNC_IF, - XSLT_FUNC_FOREACH, - XSLT_FUNC_DOCUMENT, - XSLT_FUNC_WITHPARAM, - XSLT_FUNC_PARAM, - XSLT_FUNC_VARIABLE, - XSLT_FUNC_WHEN, - XSLT_FUNC_EXTENSION -#ifdef XSLT_REFACTORED - , - XSLT_FUNC_OTHERWISE, - XSLT_FUNC_FALLBACK, - XSLT_FUNC_MESSAGE, - XSLT_FUNC_INCLUDE, - XSLT_FUNC_ATTRSET, - XSLT_FUNC_LITERAL_RESULT_ELEMENT, - XSLT_FUNC_UNKOWN_FORWARDS_COMPAT -#endif -} xsltStyleType; - -/** - * xsltElemPreCompDeallocator: - * @comp: the #xsltElemPreComp to free up - * - * Deallocates an #xsltElemPreComp structure. - */ -typedef void (*xsltElemPreCompDeallocator) (xsltElemPreCompPtr comp); - -/** - * xsltElemPreComp: - * - * The basic structure for compiled items of the AST of the XSLT processor. - * This structure is also intended to be extended by extension implementors. - * TODO: This is somehow not nice, since it has a "free" field, which - * derived stylesheet-structs do not have. - */ -struct _xsltElemPreComp { - xsltElemPreCompPtr next; /* next item in the global chained - list hold by xsltStylesheet. */ - xsltStyleType type; /* type of the element */ - xsltTransformFunction func; /* handling function */ - xmlNodePtr inst; /* the node in the stylesheet's tree - corresponding to this item */ - - /* end of common part */ - xsltElemPreCompDeallocator free; /* the deallocator */ -}; - -/** - * xsltStylePreComp: - * - * The abstract basic structure for items of the XSLT processor. - * This includes: - * 1) compiled forms of XSLT instructions (xsl:if, xsl:attribute, etc.) - * 2) compiled forms of literal result elements - * 3) compiled forms of extension elements - */ -typedef struct _xsltStylePreComp xsltStylePreComp; -typedef xsltStylePreComp *xsltStylePreCompPtr; - -#ifdef XSLT_REFACTORED - -/* -* Some pointer-list utility functions. -*/ -XSLTPUBFUN xsltPointerListPtr XSLTCALL - xsltPointerListCreate (int initialSize); -XSLTPUBFUN void XSLTCALL - xsltPointerListFree (xsltPointerListPtr list); -XSLTPUBFUN void XSLTCALL - xsltPointerListClear (xsltPointerListPtr list); -XSLTPUBFUN int XSLTCALL - xsltPointerListAddSize (xsltPointerListPtr list, - void *item, - int initialSize); - -/************************************************************************ - * * - * Refactored structures * - * * - ************************************************************************/ - -typedef struct _xsltNsListContainer xsltNsListContainer; -typedef xsltNsListContainer *xsltNsListContainerPtr; -struct _xsltNsListContainer { - xmlNsPtr *list; - int totalNumber; - int xpathNumber; -}; - -/** - * XSLT_ITEM_COMPATIBILITY_FIELDS: - * - * Fields for API compatibility to the structure - * _xsltElemPreComp which is used for extension functions. - * Note that @next is used for storage; it does not reflect a next - * sibling in the tree. - * TODO: Evaluate if we really need such a compatibility. - */ -#define XSLT_ITEM_COMPATIBILITY_FIELDS \ - xsltElemPreCompPtr next;\ - xsltStyleType type;\ - xsltTransformFunction func;\ - xmlNodePtr inst; - -/** - * XSLT_ITEM_NAVIGATION_FIELDS: - * - * Currently empty. - * TODO: It is intended to hold navigational fields in the future. - */ -#define XSLT_ITEM_NAVIGATION_FIELDS -/* - xsltStylePreCompPtr parent;\ - xsltStylePreCompPtr children;\ - xsltStylePreCompPtr nextItem; -*/ - -/** - * XSLT_ITEM_NSINSCOPE_FIELDS: - * - * The in-scope namespaces. - */ -#define XSLT_ITEM_NSINSCOPE_FIELDS xsltNsListContainerPtr inScopeNs; - -/** - * XSLT_ITEM_COMMON_FIELDS: - * - * Common fields used for all items. - */ -#define XSLT_ITEM_COMMON_FIELDS \ - XSLT_ITEM_COMPATIBILITY_FIELDS \ - XSLT_ITEM_NAVIGATION_FIELDS \ - XSLT_ITEM_NSINSCOPE_FIELDS - -/** - * _xsltStylePreComp: - * - * The abstract basic structure for items of the XSLT processor. - * This includes: - * 1) compiled forms of XSLT instructions (e.g. xsl:if, xsl:attribute, etc.) - * 2) compiled forms of literal result elements - * 3) various properties for XSLT instructions (e.g. xsl:when, - * xsl:with-param) - * - * REVISIT TODO: Keep this structure equal to the fields - * defined by XSLT_ITEM_COMMON_FIELDS - */ -struct _xsltStylePreComp { - xsltElemPreCompPtr next; /* next item in the global chained - list hold by xsltStylesheet */ - xsltStyleType type; /* type of the item */ - xsltTransformFunction func; /* handling function */ - xmlNodePtr inst; /* the node in the stylesheet's tree - corresponding to this item. */ - /* Currently no navigational fields. */ - xsltNsListContainerPtr inScopeNs; -}; - -/** - * xsltStyleBasicEmptyItem: - * - * Abstract structure only used as a short-cut for - * XSLT items with no extra fields. - * NOTE that it is intended that this structure looks the same as - * _xsltStylePreComp. - */ -typedef struct _xsltStyleBasicEmptyItem xsltStyleBasicEmptyItem; -typedef xsltStyleBasicEmptyItem *xsltStyleBasicEmptyItemPtr; - -struct _xsltStyleBasicEmptyItem { - XSLT_ITEM_COMMON_FIELDS -}; - -/** - * xsltStyleBasicExpressionItem: - * - * Abstract structure only used as a short-cut for - * XSLT items with just an expression. - */ -typedef struct _xsltStyleBasicExpressionItem xsltStyleBasicExpressionItem; -typedef xsltStyleBasicExpressionItem *xsltStyleBasicExpressionItemPtr; - -struct _xsltStyleBasicExpressionItem { - XSLT_ITEM_COMMON_FIELDS - - const xmlChar *select; /* TODO: Change this to "expression". */ - xmlXPathCompExprPtr comp; /* TODO: Change this to compExpr. */ -}; - -/************************************************************************ - * * - * XSLT-instructions/declarations * - * * - ************************************************************************/ - -/** - * xsltStyleItemElement: - * - * - * - * - * - */ -typedef struct _xsltStyleItemElement xsltStyleItemElement; -typedef xsltStyleItemElement *xsltStyleItemElementPtr; - -struct _xsltStyleItemElement { - XSLT_ITEM_COMMON_FIELDS - - const xmlChar *use; - int has_use; - const xmlChar *name; - int has_name; - const xmlChar *ns; - const xmlChar *nsPrefix; - int has_ns; -}; - -/** - * xsltStyleItemAttribute: - * - * - * - * - * - */ -typedef struct _xsltStyleItemAttribute xsltStyleItemAttribute; -typedef xsltStyleItemAttribute *xsltStyleItemAttributePtr; - -struct _xsltStyleItemAttribute { - XSLT_ITEM_COMMON_FIELDS - const xmlChar *name; - int has_name; - const xmlChar *ns; - const xmlChar *nsPrefix; - int has_ns; -}; - -/** - * xsltStyleItemText: - * - * - * - * - * - */ -typedef struct _xsltStyleItemText xsltStyleItemText; -typedef xsltStyleItemText *xsltStyleItemTextPtr; - -struct _xsltStyleItemText { - XSLT_ITEM_COMMON_FIELDS - int noescape; /* text */ -}; - -/** - * xsltStyleItemComment: - * - * - * - * - * - */ -typedef xsltStyleBasicEmptyItem xsltStyleItemComment; -typedef xsltStyleItemComment *xsltStyleItemCommentPtr; - -/** - * xsltStyleItemPI: - * - * - * - * - * - */ -typedef struct _xsltStyleItemPI xsltStyleItemPI; -typedef xsltStyleItemPI *xsltStyleItemPIPtr; - -struct _xsltStyleItemPI { - XSLT_ITEM_COMMON_FIELDS - const xmlChar *name; - int has_name; -}; - -/** - * xsltStyleItemApplyImports: - * - * - * - */ -typedef xsltStyleBasicEmptyItem xsltStyleItemApplyImports; -typedef xsltStyleItemApplyImports *xsltStyleItemApplyImportsPtr; - -/** - * xsltStyleItemApplyTemplates: - * - * - * - * - * - */ -typedef struct _xsltStyleItemApplyTemplates xsltStyleItemApplyTemplates; -typedef xsltStyleItemApplyTemplates *xsltStyleItemApplyTemplatesPtr; - -struct _xsltStyleItemApplyTemplates { - XSLT_ITEM_COMMON_FIELDS - - const xmlChar *mode; /* apply-templates */ - const xmlChar *modeURI; /* apply-templates */ - const xmlChar *select; /* sort, copy-of, value-of, apply-templates */ - xmlXPathCompExprPtr comp; /* a precompiled XPath expression */ - /* TODO: with-params */ -}; - -/** - * xsltStyleItemCallTemplate: - * - * - * - * - * - */ -typedef struct _xsltStyleItemCallTemplate xsltStyleItemCallTemplate; -typedef xsltStyleItemCallTemplate *xsltStyleItemCallTemplatePtr; - -struct _xsltStyleItemCallTemplate { - XSLT_ITEM_COMMON_FIELDS - - xsltTemplatePtr templ; /* call-template */ - const xmlChar *name; /* element, attribute, pi */ - int has_name; /* element, attribute, pi */ - const xmlChar *ns; /* element */ - int has_ns; /* element */ - /* TODO: with-params */ -}; - -/** - * xsltStyleItemCopy: - * - * - * - * - * - */ -typedef struct _xsltStyleItemCopy xsltStyleItemCopy; -typedef xsltStyleItemCopy *xsltStyleItemCopyPtr; - -struct _xsltStyleItemCopy { - XSLT_ITEM_COMMON_FIELDS - const xmlChar *use; /* copy, element */ - int has_use; /* copy, element */ -}; - -/** - * xsltStyleItemIf: - * - * - * - * - * - */ -typedef struct _xsltStyleItemIf xsltStyleItemIf; -typedef xsltStyleItemIf *xsltStyleItemIfPtr; - -struct _xsltStyleItemIf { - XSLT_ITEM_COMMON_FIELDS - - const xmlChar *test; /* if */ - xmlXPathCompExprPtr comp; /* a precompiled XPath expression */ -}; - - -/** - * xsltStyleItemCopyOf: - * - * - * - */ -typedef xsltStyleBasicExpressionItem xsltStyleItemCopyOf; -typedef xsltStyleItemCopyOf *xsltStyleItemCopyOfPtr; - -/** - * xsltStyleItemValueOf: - * - * - * - */ -typedef struct _xsltStyleItemValueOf xsltStyleItemValueOf; -typedef xsltStyleItemValueOf *xsltStyleItemValueOfPtr; - -struct _xsltStyleItemValueOf { - XSLT_ITEM_COMMON_FIELDS - - const xmlChar *select; - xmlXPathCompExprPtr comp; /* a precompiled XPath expression */ - int noescape; -}; - -/** - * xsltStyleItemNumber: - * - * - * - */ -typedef struct _xsltStyleItemNumber xsltStyleItemNumber; -typedef xsltStyleItemNumber *xsltStyleItemNumberPtr; - -struct _xsltStyleItemNumber { - XSLT_ITEM_COMMON_FIELDS - xsltNumberData numdata; /* number */ -}; - -/** - * xsltStyleItemChoose: - * - * - * - * - * - */ -typedef xsltStyleBasicEmptyItem xsltStyleItemChoose; -typedef xsltStyleItemChoose *xsltStyleItemChoosePtr; - -/** - * xsltStyleItemFallback: - * - * - * - * - * - */ -typedef xsltStyleBasicEmptyItem xsltStyleItemFallback; -typedef xsltStyleItemFallback *xsltStyleItemFallbackPtr; - -/** - * xsltStyleItemForEach: - * - * - * - * - * - */ -typedef xsltStyleBasicExpressionItem xsltStyleItemForEach; -typedef xsltStyleItemForEach *xsltStyleItemForEachPtr; - -/** - * xsltStyleItemMessage: - * - * - * - * - * - */ -typedef struct _xsltStyleItemMessage xsltStyleItemMessage; -typedef xsltStyleItemMessage *xsltStyleItemMessagePtr; - -struct _xsltStyleItemMessage { - XSLT_ITEM_COMMON_FIELDS - int terminate; -}; - -/** - * xsltStyleItemDocument: - * - * NOTE: This is not an instruction of XSLT 1.0. - */ -typedef struct _xsltStyleItemDocument xsltStyleItemDocument; -typedef xsltStyleItemDocument *xsltStyleItemDocumentPtr; - -struct _xsltStyleItemDocument { - XSLT_ITEM_COMMON_FIELDS - int ver11; /* assigned: in xsltDocumentComp; - read: nowhere; - TODO: Check if we need. */ - const xmlChar *filename; /* document URL */ - int has_filename; -}; - -/************************************************************************ - * * - * Non-instructions (actually properties of instructions/declarations) * - * * - ************************************************************************/ - -/** - * xsltStyleBasicItemVariable: - * - * Basic struct for xsl:variable, xsl:param and xsl:with-param. - * It's currently important to have equal fields, since - * xsltParseStylesheetCallerParam() is used with xsl:with-param from - * the xslt side and with xsl:param from the exslt side (in - * exsltFuncFunctionFunction()). - * - * FUTURE NOTE: In XSLT 2.0 xsl:param, xsl:variable and xsl:with-param - * have additional different fields. - */ -typedef struct _xsltStyleBasicItemVariable xsltStyleBasicItemVariable; -typedef xsltStyleBasicItemVariable *xsltStyleBasicItemVariablePtr; - -struct _xsltStyleBasicItemVariable { - XSLT_ITEM_COMMON_FIELDS - - const xmlChar *select; - xmlXPathCompExprPtr comp; - - const xmlChar *name; - int has_name; - const xmlChar *ns; - int has_ns; -}; - -/** - * xsltStyleItemVariable: - * - * - * - * - * - */ -typedef xsltStyleBasicItemVariable xsltStyleItemVariable; -typedef xsltStyleItemVariable *xsltStyleItemVariablePtr; - -/** - * xsltStyleItemParam: - * - * - * - * - * - */ -typedef struct _xsltStyleItemParam xsltStyleItemParam; -typedef xsltStyleItemParam *xsltStyleItemParamPtr; - -struct _xsltStyleItemParam { - XSLT_ITEM_COMMON_FIELDS - - const xmlChar *select; - xmlXPathCompExprPtr comp; - - const xmlChar *name; - int has_name; - const xmlChar *ns; - int has_ns; -}; - -/** - * xsltStyleItemWithParam: - * - * - * - * - */ -typedef xsltStyleBasicItemVariable xsltStyleItemWithParam; -typedef xsltStyleItemWithParam *xsltStyleItemWithParamPtr; - -/** - * xsltStyleItemSort: - * - * Reflects the XSLT xsl:sort item. - * Allowed parents: xsl:apply-templates, xsl:for-each - * - */ -typedef struct _xsltStyleItemSort xsltStyleItemSort; -typedef xsltStyleItemSort *xsltStyleItemSortPtr; - -struct _xsltStyleItemSort { - XSLT_ITEM_COMMON_FIELDS - - const xmlChar *stype; /* sort */ - int has_stype; /* sort */ - int number; /* sort */ - const xmlChar *order; /* sort */ - int has_order; /* sort */ - int descending; /* sort */ - const xmlChar *lang; /* sort */ - int has_lang; /* sort */ - xsltLocale locale; /* sort */ - const xmlChar *case_order; /* sort */ - int lower_first; /* sort */ - - const xmlChar *use; - int has_use; - - const xmlChar *select; /* sort, copy-of, value-of, apply-templates */ - - xmlXPathCompExprPtr comp; /* a precompiled XPath expression */ -}; - - -/** - * xsltStyleItemWhen: - * - * - * - * - * Allowed parent: xsl:choose - */ -typedef struct _xsltStyleItemWhen xsltStyleItemWhen; -typedef xsltStyleItemWhen *xsltStyleItemWhenPtr; - -struct _xsltStyleItemWhen { - XSLT_ITEM_COMMON_FIELDS - - const xmlChar *test; - xmlXPathCompExprPtr comp; -}; - -/** - * xsltStyleItemOtherwise: - * - * Allowed parent: xsl:choose - * - * - * - */ -typedef struct _xsltStyleItemOtherwise xsltStyleItemOtherwise; -typedef xsltStyleItemOtherwise *xsltStyleItemOtherwisePtr; - -struct _xsltStyleItemOtherwise { - XSLT_ITEM_COMMON_FIELDS -}; - -typedef struct _xsltStyleItemInclude xsltStyleItemInclude; -typedef xsltStyleItemInclude *xsltStyleItemIncludePtr; - -struct _xsltStyleItemInclude { - XSLT_ITEM_COMMON_FIELDS - xsltDocumentPtr include; -}; - -/************************************************************************ - * * - * XSLT elements in forwards-compatible mode * - * * - ************************************************************************/ - -typedef struct _xsltStyleItemUknown xsltStyleItemUknown; -typedef xsltStyleItemUknown *xsltStyleItemUknownPtr; -struct _xsltStyleItemUknown { - XSLT_ITEM_COMMON_FIELDS -}; - - -/************************************************************************ - * * - * Extension elements * - * * - ************************************************************************/ - -/* - * xsltStyleItemExtElement: - * - * Reflects extension elements. - * - * NOTE: Due to the fact that the structure xsltElemPreComp is most - * probably already heavily in use out there by users, so we cannot - * easily change it, we'll create an intermediate structure which will - * hold an xsltElemPreCompPtr. - * BIG NOTE: The only problem I see here is that the user processes the - * content of the stylesheet tree, possibly he'll lookup the node->psvi - * fields in order to find subsequent extension functions. - * In this case, the user's code will break, since the node->psvi - * field will hold now the xsltStyleItemExtElementPtr and not - * the xsltElemPreCompPtr. - * However the place where the structure is anchored in the node-tree, - * namely node->psvi, has beed already once been moved from node->_private - * to node->psvi, so we have a precedent here, which, I think, should allow - * us to change such semantics without headaches. - */ -typedef struct _xsltStyleItemExtElement xsltStyleItemExtElement; -typedef xsltStyleItemExtElement *xsltStyleItemExtElementPtr; -struct _xsltStyleItemExtElement { - XSLT_ITEM_COMMON_FIELDS - xsltElemPreCompPtr item; -}; - -/************************************************************************ - * * - * Literal result elements * - * * - ************************************************************************/ - -typedef struct _xsltEffectiveNs xsltEffectiveNs; -typedef xsltEffectiveNs *xsltEffectiveNsPtr; -struct _xsltEffectiveNs { - xsltEffectiveNsPtr nextInStore; /* storage next */ - xsltEffectiveNsPtr next; /* next item in the list */ - const xmlChar *prefix; - const xmlChar *nsName; - /* - * Indicates if eclared on the literal result element; dunno if really - * needed. - */ - int holdByElem; -}; - -/* - * Info for literal result elements. - * This will be set on the elem->psvi field and will be - * shared by literal result elements, which have the same - * excluded result namespaces; i.e., this *won't* be created uniquely - * for every literal result element. - */ -typedef struct _xsltStyleItemLRElementInfo xsltStyleItemLRElementInfo; -typedef xsltStyleItemLRElementInfo *xsltStyleItemLRElementInfoPtr; -struct _xsltStyleItemLRElementInfo { - XSLT_ITEM_COMMON_FIELDS - /* - * @effectiveNs is the set of effective ns-nodes - * on the literal result element, which will be added to the result - * element if not already existing in the result tree. - * This means that excluded namespaces (via exclude-result-prefixes, - * extension-element-prefixes and the XSLT namespace) not added - * to the set. - * Namespace-aliasing was applied on the @effectiveNs. - */ - xsltEffectiveNsPtr effectiveNs; - -}; - -#ifdef XSLT_REFACTORED - -typedef struct _xsltNsAlias xsltNsAlias; -typedef xsltNsAlias *xsltNsAliasPtr; -struct _xsltNsAlias { - xsltNsAliasPtr next; /* next in the list */ - xmlNsPtr literalNs; - xmlNsPtr targetNs; - xmlDocPtr docOfTargetNs; -}; -#endif - -#ifdef XSLT_REFACTORED_XSLT_NSCOMP - -typedef struct _xsltNsMap xsltNsMap; -typedef xsltNsMap *xsltNsMapPtr; -struct _xsltNsMap { - xsltNsMapPtr next; /* next in the list */ - xmlDocPtr doc; - xmlNodePtr elem; /* the element holding the ns-decl */ - xmlNsPtr ns; /* the xmlNs structure holding the XML namespace name */ - const xmlChar *origNsName; /* the original XML namespace name */ - const xmlChar *newNsName; /* the mapped XML namespace name */ -}; -#endif - -/************************************************************************ - * * - * Compile-time structures for *internal* use only * - * * - ************************************************************************/ - -typedef struct _xsltPrincipalStylesheetData xsltPrincipalStylesheetData; -typedef xsltPrincipalStylesheetData *xsltPrincipalStylesheetDataPtr; - -typedef struct _xsltNsList xsltNsList; -typedef xsltNsList *xsltNsListPtr; -struct _xsltNsList { - xsltNsListPtr next; /* next in the list */ - xmlNsPtr ns; -}; - -/* -* xsltVarInfo: -* -* Used at compilation time for parameters and variables. -*/ -typedef struct _xsltVarInfo xsltVarInfo; -typedef xsltVarInfo *xsltVarInfoPtr; -struct _xsltVarInfo { - xsltVarInfoPtr next; /* next in the list */ - xsltVarInfoPtr prev; - int depth; /* the depth in the tree */ - const xmlChar *name; - const xmlChar *nsName; -}; - -/** - * xsltCompilerNodeInfo: - * - * Per-node information during compile-time. - */ -typedef struct _xsltCompilerNodeInfo xsltCompilerNodeInfo; -typedef xsltCompilerNodeInfo *xsltCompilerNodeInfoPtr; -struct _xsltCompilerNodeInfo { - xsltCompilerNodeInfoPtr next; - xsltCompilerNodeInfoPtr prev; - xmlNodePtr node; - int depth; - xsltTemplatePtr templ; /* The owning template */ - int category; /* XSLT element, LR-element or - extension element */ - xsltStyleType type; - xsltElemPreCompPtr item; /* The compiled information */ - /* The current in-scope namespaces */ - xsltNsListContainerPtr inScopeNs; - /* The current excluded result namespaces */ - xsltPointerListPtr exclResultNs; - /* The current extension instruction namespaces */ - xsltPointerListPtr extElemNs; - - /* The current info for literal result elements. */ - xsltStyleItemLRElementInfoPtr litResElemInfo; - /* - * Set to 1 if in-scope namespaces changed, - * or excluded result namespaces changed, - * or extension element namespaces changed. - * This will trigger creation of new infos - * for literal result elements. - */ - int nsChanged; - int preserveWhitespace; - int stripWhitespace; - int isRoot; /* whether this is the stylesheet's root node */ - int forwardsCompat; /* whether forwards-compatible mode is enabled */ - /* whether the content of an extension element was processed */ - int extContentHandled; - /* the type of the current child */ - xsltStyleType curChildType; -}; - -/** - * XSLT_CCTXT: - * - * get pointer to compiler context - */ -#define XSLT_CCTXT(style) ((xsltCompilerCtxtPtr) style->compCtxt) - -typedef enum { - XSLT_ERROR_SEVERITY_ERROR = 0, - XSLT_ERROR_SEVERITY_WARNING -} xsltErrorSeverityType; - -typedef struct _xsltCompilerCtxt xsltCompilerCtxt; -typedef xsltCompilerCtxt *xsltCompilerCtxtPtr; -struct _xsltCompilerCtxt { - void *errorCtxt; /* user specific error context */ - /* - * used for error/warning reports; e.g. XSLT_ERROR_SEVERITY_WARNING */ - xsltErrorSeverityType errSeverity; - int warnings; /* TODO: number of warnings found at - compilation */ - int errors; /* TODO: number of errors found at - compilation */ - xmlDictPtr dict; - xsltStylesheetPtr style; - int simplified; /* whether this is a simplified stylesheet */ - /* TODO: structured/unstructured error contexts. */ - int depth; /* Current depth of processing */ - - xsltCompilerNodeInfoPtr inode; - xsltCompilerNodeInfoPtr inodeList; - xsltCompilerNodeInfoPtr inodeLast; - xsltPointerListPtr tmpList; /* Used for various purposes */ - /* - * The XSLT version as specified by the stylesheet's root element. - */ - int isInclude; - int hasForwardsCompat; /* whether forwards-compatible mode was used - in a parsing episode */ - int maxNodeInfos; /* TEMP TODO: just for the interest */ - int maxLREs; /* TEMP TODO: just for the interest */ - /* - * In order to keep the old behaviour, applying strict rules of - * the spec can be turned off. This has effect only on special - * mechanisms like whitespace-stripping in the stylesheet. - */ - int strict; - xsltPrincipalStylesheetDataPtr psData; -#ifdef XSLT_REFACTORED_XPATHCOMP - xmlXPathContextPtr xpathCtxt; -#endif - xsltStyleItemUknownPtr unknownItem; - int hasNsAliases; /* Indicator if there was an xsl:namespace-alias. */ - xsltNsAliasPtr nsAliases; - xsltVarInfoPtr ivars; /* Storage of local in-scope variables/params. */ - xsltVarInfoPtr ivar; /* topmost local variable/param. */ -}; - -#else /* XSLT_REFACTORED */ -/* -* The old structures before refactoring. -*/ - -/** - * _xsltStylePreComp: - * - * The in-memory structure corresponding to XSLT stylesheet constructs - * precomputed data. - */ -struct _xsltStylePreComp { - xsltElemPreCompPtr next; /* chained list */ - xsltStyleType type; /* type of the element */ - xsltTransformFunction func; /* handling function */ - xmlNodePtr inst; /* the instruction */ - - /* - * Pre computed values. - */ - - const xmlChar *stype; /* sort */ - int has_stype; /* sort */ - int number; /* sort */ - const xmlChar *order; /* sort */ - int has_order; /* sort */ - int descending; /* sort */ - const xmlChar *lang; /* sort */ - int has_lang; /* sort */ - xsltLocale locale; /* sort */ - const xmlChar *case_order; /* sort */ - int lower_first; /* sort */ - - const xmlChar *use; /* copy, element */ - int has_use; /* copy, element */ - - int noescape; /* text */ - - const xmlChar *name; /* element, attribute, pi */ - int has_name; /* element, attribute, pi */ - const xmlChar *ns; /* element */ - int has_ns; /* element */ - - const xmlChar *mode; /* apply-templates */ - const xmlChar *modeURI; /* apply-templates */ - - const xmlChar *test; /* if */ - - xsltTemplatePtr templ; /* call-template */ - - const xmlChar *select; /* sort, copy-of, value-of, apply-templates */ - - int ver11; /* document */ - const xmlChar *filename; /* document URL */ - int has_filename; /* document */ - - xsltNumberData numdata; /* number */ - - xmlXPathCompExprPtr comp; /* a precompiled XPath expression */ - xmlNsPtr *nsList; /* the namespaces in scope */ - int nsNr; /* the number of namespaces in scope */ -}; - -#endif /* XSLT_REFACTORED */ - - -/* - * The in-memory structure corresponding to an XSLT Variable - * or Param. - */ -typedef struct _xsltStackElem xsltStackElem; -typedef xsltStackElem *xsltStackElemPtr; -struct _xsltStackElem { - struct _xsltStackElem *next;/* chained list */ - xsltStylePreCompPtr comp; /* the compiled form */ - int computed; /* was the evaluation done */ - const xmlChar *name; /* the local part of the name QName */ - const xmlChar *nameURI; /* the URI part of the name QName */ - const xmlChar *select; /* the eval string */ - xmlNodePtr tree; /* the sequence constructor if no eval - string or the location */ - xmlXPathObjectPtr value; /* The value if computed */ - xmlDocPtr fragment; /* The Result Tree Fragments (needed for XSLT 1.0) - which are bound to the variable's lifetime. */ - int level; /* the depth in the tree; - -1 if persistent (e.g. a given xsl:with-param) */ - xsltTransformContextPtr context; /* The transformation context; needed to cache - the variables */ - int flags; -}; - -#ifdef XSLT_REFACTORED - -struct _xsltPrincipalStylesheetData { - /* - * Namespace dictionary for ns-prefixes and ns-names: - * TODO: Shared between stylesheets, and XPath mechanisms. - * Not used yet. - */ - xmlDictPtr namespaceDict; - /* - * Global list of in-scope namespaces. - */ - xsltPointerListPtr inScopeNamespaces; - /* - * Global list of information for [xsl:]excluded-result-prefixes. - */ - xsltPointerListPtr exclResultNamespaces; - /* - * Global list of information for [xsl:]extension-element-prefixes. - */ - xsltPointerListPtr extElemNamespaces; - xsltEffectiveNsPtr effectiveNs; -#ifdef XSLT_REFACTORED_XSLT_NSCOMP - /* - * Namespace name map to get rid of string comparison of namespace names. - */ - xsltNsMapPtr nsMap; -#endif -}; - - -#endif -/* - * Note that we added a @compCtxt field to anchor an stylesheet compilation - * context, since, due to historical reasons, various compile-time function - * take only the stylesheet as argument and not a compilation context. - */ -struct _xsltStylesheet { - /* - * The stylesheet import relation is kept as a tree. - */ - struct _xsltStylesheet *parent; - struct _xsltStylesheet *next; - struct _xsltStylesheet *imports; - - xsltDocumentPtr docList; /* the include document list */ - - /* - * General data on the style sheet document. - */ - xmlDocPtr doc; /* the parsed XML stylesheet */ - xmlHashTablePtr stripSpaces;/* the hash table of the strip-space and - preserve space elements */ - int stripAll; /* strip-space * (1) preserve-space * (-1) */ - xmlHashTablePtr cdataSection;/* the hash table of the cdata-section */ - - /* - * Global variable or parameters. - */ - xsltStackElemPtr variables; /* linked list of param and variables */ - - /* - * Template descriptions. - */ - xsltTemplatePtr templates; /* the ordered list of templates */ - void *templatesHash; /* hash table or wherever compiled templates - informations are stored */ - void *rootMatch; /* template based on / */ - void *keyMatch; /* template based on key() */ - void *elemMatch; /* template based on * */ - void *attrMatch; /* template based on @* */ - void *parentMatch; /* template based on .. */ - void *textMatch; /* template based on text() */ - void *piMatch; /* template based on processing-instruction() */ - void *commentMatch; /* template based on comment() */ - - /* - * Namespace aliases. - * NOTE: Not used in the refactored code. - */ - xmlHashTablePtr nsAliases; /* the namespace alias hash tables */ - - /* - * Attribute sets. - */ - xmlHashTablePtr attributeSets;/* the attribute sets hash tables */ - - /* - * Namespaces. - * TODO: Eliminate this. - */ - xmlHashTablePtr nsHash; /* the set of namespaces in use: - ATTENTION: This is used for - execution of XPath expressions; unfortunately - it restricts the stylesheet to have distinct - prefixes. - TODO: We need to get rid of this. - */ - void *nsDefs; /* ATTENTION TODO: This is currently used to store - xsltExtDefPtr (in extensions.c) and - *not* xmlNsPtr. - */ - - /* - * Key definitions. - */ - void *keys; /* key definitions */ - - /* - * Output related stuff. - */ - xmlChar *method; /* the output method */ - xmlChar *methodURI; /* associated namespace if any */ - xmlChar *version; /* version string */ - xmlChar *encoding; /* encoding string */ - int omitXmlDeclaration; /* omit-xml-declaration = "yes" | "no" */ - - /* - * Number formatting. - */ - xsltDecimalFormatPtr decimalFormat; - int standalone; /* standalone = "yes" | "no" */ - xmlChar *doctypePublic; /* doctype-public string */ - xmlChar *doctypeSystem; /* doctype-system string */ - int indent; /* should output being indented */ - xmlChar *mediaType; /* media-type string */ - - /* - * Precomputed blocks. - */ - xsltElemPreCompPtr preComps;/* list of precomputed blocks */ - int warnings; /* number of warnings found at compilation */ - int errors; /* number of errors found at compilation */ - - xmlChar *exclPrefix; /* last excluded prefixes */ - xmlChar **exclPrefixTab; /* array of excluded prefixes */ - int exclPrefixNr; /* number of excluded prefixes in scope */ - int exclPrefixMax; /* size of the array */ - - void *_private; /* user defined data */ - - /* - * Extensions. - */ - xmlHashTablePtr extInfos; /* the extension data */ - int extrasNr; /* the number of extras required */ - - /* - * For keeping track of nested includes - */ - xsltDocumentPtr includes; /* points to last nested include */ - - /* - * dictionary: shared between stylesheet, context and documents. - */ - xmlDictPtr dict; - /* - * precompiled attribute value templates. - */ - void *attVTs; - /* - * if namespace-alias has an alias for the default stylesheet prefix - * NOTE: Not used in the refactored code. - */ - const xmlChar *defaultAlias; - /* - * bypass pre-processing (already done) (used in imports) - */ - int nopreproc; - /* - * all document text strings were internalized - */ - int internalized; - /* - * Literal Result Element as Stylesheet c.f. section 2.3 - */ - int literal_result; - /* - * The principal stylesheet - */ - xsltStylesheetPtr principal; -#ifdef XSLT_REFACTORED - /* - * Compilation context used during compile-time. - */ - xsltCompilerCtxtPtr compCtxt; /* TODO: Change this to (void *). */ - - xsltPrincipalStylesheetDataPtr principalData; -#endif -}; - -typedef struct _xsltTransformCache xsltTransformCache; -typedef xsltTransformCache *xsltTransformCachePtr; -struct _xsltTransformCache { - xmlDocPtr RVT; - int nbRVT; - xsltStackElemPtr stackItems; - int nbStackItems; -#ifdef XSLT_DEBUG_PROFILE_CACHE - int dbgCachedRVTs; - int dbgReusedRVTs; - int dbgCachedVars; - int dbgReusedVars; -#endif -}; - -/* - * The in-memory structure corresponding to an XSLT Transformation. - */ -typedef enum { - XSLT_OUTPUT_XML = 0, - XSLT_OUTPUT_HTML, - XSLT_OUTPUT_TEXT -} xsltOutputType; - -typedef enum { - XSLT_STATE_OK = 0, - XSLT_STATE_ERROR, - XSLT_STATE_STOPPED -} xsltTransformState; - -struct _xsltTransformContext { - xsltStylesheetPtr style; /* the stylesheet used */ - xsltOutputType type; /* the type of output */ - - xsltTemplatePtr templ; /* the current template */ - int templNr; /* Nb of templates in the stack */ - int templMax; /* Size of the templtes stack */ - xsltTemplatePtr *templTab; /* the template stack */ - - xsltStackElemPtr vars; /* the current variable list */ - int varsNr; /* Nb of variable list in the stack */ - int varsMax; /* Size of the variable list stack */ - xsltStackElemPtr *varsTab; /* the variable list stack */ - int varsBase; /* the var base for current templ */ - - /* - * Extensions - */ - xmlHashTablePtr extFunctions; /* the extension functions */ - xmlHashTablePtr extElements; /* the extension elements */ - xmlHashTablePtr extInfos; /* the extension data */ - - const xmlChar *mode; /* the current mode */ - const xmlChar *modeURI; /* the current mode URI */ - - xsltDocumentPtr docList; /* the document list */ - - xsltDocumentPtr document; /* the current source document; can be NULL if an RTF */ - xmlNodePtr node; /* the current node being processed */ - xmlNodeSetPtr nodeList; /* the current node list */ - /* xmlNodePtr current; the node */ - - xmlDocPtr output; /* the resulting document */ - xmlNodePtr insert; /* the insertion node */ - - xmlXPathContextPtr xpathCtxt; /* the XPath context */ - xsltTransformState state; /* the current state */ - - /* - * Global variables - */ - xmlHashTablePtr globalVars; /* the global variables and params */ - - xmlNodePtr inst; /* the instruction in the stylesheet */ - - int xinclude; /* should XInclude be processed */ - - const char * outputFile; /* the output URI if known */ - - int profile; /* is this run profiled */ - long prof; /* the current profiled value */ - int profNr; /* Nb of templates in the stack */ - int profMax; /* Size of the templtaes stack */ - long *profTab; /* the profile template stack */ - - void *_private; /* user defined data */ - - int extrasNr; /* the number of extras used */ - int extrasMax; /* the number of extras allocated */ - xsltRuntimeExtraPtr extras; /* extra per runtime informations */ - - xsltDocumentPtr styleList; /* the stylesheet docs list */ - void * sec; /* the security preferences if any */ - - xmlGenericErrorFunc error; /* a specific error handler */ - void * errctx; /* context for the error handler */ - - xsltSortFunc sortfunc; /* a ctxt specific sort routine */ - - /* - * handling of temporary Result Value Tree - * (XSLT 1.0 term: "Result Tree Fragment") - */ - xmlDocPtr tmpRVT; /* list of RVT without persistance */ - xmlDocPtr persistRVT; /* list of persistant RVTs */ - int ctxtflags; /* context processing flags */ - - /* - * Speed optimization when coalescing text nodes - */ - const xmlChar *lasttext; /* last text node content */ - unsigned int lasttsize; /* last text node size */ - unsigned int lasttuse; /* last text node use */ - /* - * Per Context Debugging - */ - int debugStatus; /* the context level debug status */ - unsigned long* traceCode; /* pointer to the variable holding the mask */ - - int parserOptions; /* parser options xmlParserOption */ - - /* - * dictionary: shared between stylesheet, context and documents. - */ - xmlDictPtr dict; - xmlDocPtr tmpDoc; /* Obsolete; not used in the library. */ - /* - * all document text strings are internalized - */ - int internalized; - int nbKeys; - int hasTemplKeyPatterns; - xsltTemplatePtr currentTemplateRule; /* the Current Template Rule */ - xmlNodePtr initialContextNode; - xmlDocPtr initialContextDoc; - xsltTransformCachePtr cache; - void *contextVariable; /* the current variable item */ - xmlDocPtr localRVT; /* list of local tree fragments; will be freed when - the instruction which created the fragment - exits */ - xmlDocPtr localRVTBase; - int keyInitLevel; /* Needed to catch recursive keys issues */ - int funcLevel; /* Needed to catch recursive functions issues */ -}; - -/** - * CHECK_STOPPED: - * - * Macro to check if the XSLT processing should be stopped. - * Will return from the function. - */ -#define CHECK_STOPPED if (ctxt->state == XSLT_STATE_STOPPED) return; - -/** - * CHECK_STOPPEDE: - * - * Macro to check if the XSLT processing should be stopped. - * Will goto the error: label. - */ -#define CHECK_STOPPEDE if (ctxt->state == XSLT_STATE_STOPPED) goto error; - -/** - * CHECK_STOPPED0: - * - * Macro to check if the XSLT processing should be stopped. - * Will return from the function with a 0 value. - */ -#define CHECK_STOPPED0 if (ctxt->state == XSLT_STATE_STOPPED) return(0); - -/* - * The macro XML_CAST_FPTR is a hack to avoid a gcc warning about - * possible incompatibilities between function pointers and object - * pointers. It is defined in libxml/hash.h within recent versions - * of libxml2, but is put here for compatibility. - */ -#ifndef XML_CAST_FPTR -/** - * XML_CAST_FPTR: - * @fptr: pointer to a function - * - * Macro to do a casting from an object pointer to a - * function pointer without encountering a warning from - * gcc - * - * #define XML_CAST_FPTR(fptr) (*(void **)(&fptr)) - * This macro violated ISO C aliasing rules (gcc4 on s390 broke) - * so it is disabled now - */ - -#define XML_CAST_FPTR(fptr) fptr -#endif -/* - * Functions associated to the internal types -xsltDecimalFormatPtr xsltDecimalFormatGetByName(xsltStylesheetPtr sheet, - xmlChar *name); - */ -XSLTPUBFUN xsltStylesheetPtr XSLTCALL - xsltNewStylesheet (void); -XSLTPUBFUN xsltStylesheetPtr XSLTCALL - xsltParseStylesheetFile (const xmlChar* filename); -XSLTPUBFUN void XSLTCALL - xsltFreeStylesheet (xsltStylesheetPtr style); -XSLTPUBFUN int XSLTCALL - xsltIsBlank (xmlChar *str); -XSLTPUBFUN void XSLTCALL - xsltFreeStackElemList (xsltStackElemPtr elem); -XSLTPUBFUN xsltDecimalFormatPtr XSLTCALL - xsltDecimalFormatGetByName(xsltStylesheetPtr style, - xmlChar *name); - -XSLTPUBFUN xsltStylesheetPtr XSLTCALL - xsltParseStylesheetProcess(xsltStylesheetPtr ret, - xmlDocPtr doc); -XSLTPUBFUN void XSLTCALL - xsltParseStylesheetOutput(xsltStylesheetPtr style, - xmlNodePtr cur); -XSLTPUBFUN xsltStylesheetPtr XSLTCALL - xsltParseStylesheetDoc (xmlDocPtr doc); -XSLTPUBFUN xsltStylesheetPtr XSLTCALL - xsltParseStylesheetImportedDoc(xmlDocPtr doc, - xsltStylesheetPtr style); -XSLTPUBFUN xsltStylesheetPtr XSLTCALL - xsltLoadStylesheetPI (xmlDocPtr doc); -XSLTPUBFUN void XSLTCALL - xsltNumberFormat (xsltTransformContextPtr ctxt, - xsltNumberDataPtr data, - xmlNodePtr node); -XSLTPUBFUN xmlXPathError XSLTCALL - xsltFormatNumberConversion(xsltDecimalFormatPtr self, - xmlChar *format, - double number, - xmlChar **result); - -XSLTPUBFUN void XSLTCALL - xsltParseTemplateContent(xsltStylesheetPtr style, - xmlNodePtr templ); -XSLTPUBFUN int XSLTCALL - xsltAllocateExtra (xsltStylesheetPtr style); -XSLTPUBFUN int XSLTCALL - xsltAllocateExtraCtxt (xsltTransformContextPtr ctxt); -/* - * Extra functions for Result Value Trees - */ -XSLTPUBFUN xmlDocPtr XSLTCALL - xsltCreateRVT (xsltTransformContextPtr ctxt); -XSLTPUBFUN int XSLTCALL - xsltRegisterTmpRVT (xsltTransformContextPtr ctxt, - xmlDocPtr RVT); -XSLTPUBFUN int XSLTCALL - xsltRegisterLocalRVT (xsltTransformContextPtr ctxt, - xmlDocPtr RVT); -XSLTPUBFUN int XSLTCALL - xsltRegisterPersistRVT (xsltTransformContextPtr ctxt, - xmlDocPtr RVT); -XSLTPUBFUN int XSLTCALL - xsltExtensionInstructionResultRegister( - xsltTransformContextPtr ctxt, - xmlXPathObjectPtr obj); -XSLTPUBFUN int XSLTCALL - xsltExtensionInstructionResultFinalize( - xsltTransformContextPtr ctxt); -XSLTPUBFUN void XSLTCALL - xsltFreeRVTs (xsltTransformContextPtr ctxt); -XSLTPUBFUN void XSLTCALL - xsltReleaseRVT (xsltTransformContextPtr ctxt, - xmlDocPtr RVT); -XSLTPUBFUN int XSLTCALL - xsltTransStorageAdd (xsltTransformContextPtr ctxt, - void *id, - void *data); -XSLTPUBFUN void * XSLTCALL - xsltTransStorageRemove (xsltTransformContextPtr ctxt, - void *id); - -/* - * Extra functions for Attribute Value Templates - */ -XSLTPUBFUN void XSLTCALL - xsltCompileAttr (xsltStylesheetPtr style, - xmlAttrPtr attr); -XSLTPUBFUN xmlChar * XSLTCALL - xsltEvalAVT (xsltTransformContextPtr ctxt, - void *avt, - xmlNodePtr node); -XSLTPUBFUN void XSLTCALL - xsltFreeAVTList (void *avt); - -/* - * Extra function for successful xsltCleanupGlobals / xsltInit sequence. - */ - -XSLTPUBFUN void XSLTCALL - xsltUninit (void); - -/************************************************************************ - * * - * Compile-time functions for *internal* use only * - * * - ************************************************************************/ - -#ifdef XSLT_REFACTORED -XSLTPUBFUN void XSLTCALL - xsltParseSequenceConstructor( - xsltCompilerCtxtPtr cctxt, - xmlNodePtr start); -XSLTPUBFUN int XSLTCALL - xsltParseAnyXSLTElem (xsltCompilerCtxtPtr cctxt, - xmlNodePtr elem); -#ifdef XSLT_REFACTORED_XSLT_NSCOMP -XSLTPUBFUN int XSLTCALL - xsltRestoreDocumentNamespaces( - xsltNsMapPtr ns, - xmlDocPtr doc); -#endif -#endif /* XSLT_REFACTORED */ - -/************************************************************************ - * * - * Transformation-time functions for *internal* use only * - * * - ************************************************************************/ -XSLTPUBFUN int XSLTCALL - xsltInitCtxtKey (xsltTransformContextPtr ctxt, - xsltDocumentPtr doc, - xsltKeyDefPtr keyd); -XSLTPUBFUN int XSLTCALL - xsltInitAllDocKeys (xsltTransformContextPtr ctxt); -#ifdef __cplusplus -} -#endif - -#endif /* __XML_XSLT_H__ */ - diff --git a/dll/3rdparty/libxslt/xsltconfig.h b/dll/3rdparty/libxslt/xsltconfig.h deleted file mode 100644 index d93865c0177..00000000000 --- a/dll/3rdparty/libxslt/xsltconfig.h +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Summary: compile-time version informations for the XSLT engine - * Description: compile-time version informations for the XSLT engine - * this module is autogenerated. - * - * Copy: See Copyright for the status of this software. - * - * Author: Daniel Veillard - */ - -#ifndef __XML_XSLTCONFIG_H__ -#define __XML_XSLTCONFIG_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * LIBXSLT_DOTTED_VERSION: - * - * the version string like "1.2.3" - */ -#define LIBXSLT_DOTTED_VERSION "1.1.26" - -/** - * LIBXSLT_VERSION: - * - * the version number: 1.2.3 value is 10203 - */ -#define LIBXSLT_VERSION 10126 - -/** - * LIBXSLT_VERSION_STRING: - * - * the version number string, 1.2.3 value is "10203" - */ -#define LIBXSLT_VERSION_STRING "10126" - -/** - * LIBXSLT_VERSION_EXTRA: - * - * extra version information, used to show a CVS compilation - */ -#define LIBXSLT_VERSION_EXTRA "-GITv1.1.26" - -/** - * WITH_XSLT_DEBUG: - * - * Activate the compilation of the debug reporting. Speed penalty - * is insignifiant and being able to run xsltpoc -v is useful. On - * by default unless --without-debug is passed to configure - */ -#if 1 -#define WITH_XSLT_DEBUG -#endif - -#if 1 -/** - * DEBUG_MEMORY: - * - * should be activated only when debugging libxslt. It replaces the - * allocator with a collect and debug shell to the libc allocator. - * Use configure --with-mem-debug to activate it on both library - */ -#define DEBUG_MEMORY - -/** - * DEBUG_MEMORY_LOCATION: - * - * should be activated only when debugging libxslt. - * DEBUG_MEMORY_LOCATION should be activated only when libxml has - * been configured with --with-debug-mem too - */ -#define DEBUG_MEMORY_LOCATION -#endif - -/** - * XSLT_NEED_TRIO: - * - * should be activated if the existing libc library lacks some of the - * string formatting function, in that case reuse the Trio ones already - * compiled in the libxml2 library. - */ - -#if 0 -#define XSLT_NEED_TRIO -#endif -#ifdef __VMS -#define HAVE_MATH_H 1 -#define HAVE_SYS_STAT_H 1 -#ifndef XSLT_NEED_TRIO -#define XSLT_NEED_TRIO -#endif -#endif - -#ifdef XSLT_NEED_TRIO -#define TRIO_REPLACE_STDIO -#endif - -/** - * WITH_XSLT_DEBUGGER: - * - * Activate the compilation of the debugger support. Speed penalty - * is insignifiant. - * On by default unless --without-debugger is passed to configure - */ -#if 1 -#ifndef WITH_DEBUGGER -#define WITH_DEBUGGER -#endif -#endif - -/** - * WITH_MODULES: - * - * Whether module support is configured into libxslt - * Note: no default module path for win32 platforms - */ -#if 0 -#ifndef WITH_MODULES -#define WITH_MODULES -#endif -#define LIBXSLT_DEFAULT_PLUGINS_PATH() "/usr/lib/libxslt-plugins" -#endif - -/** - * Locale support - */ -#if 0 -#ifndef XSLT_LOCALE_XLOCALE -#define XSLT_LOCALE_XLOCALE -#endif -#elif 1 -#ifndef XSLT_LOCALE_WINAPI -#define XSLT_LOCALE_WINAPI -#endif -#endif - -/** - * ATTRIBUTE_UNUSED: - * - * This macro is used to flag unused function parameters to GCC - */ -#ifdef __GNUC__ -#ifdef HAVE_ANSIDECL_H -#include -#endif -#ifndef ATTRIBUTE_UNUSED -#define ATTRIBUTE_UNUSED __attribute__((unused)) -#endif -#else -#define ATTRIBUTE_UNUSED -#endif - -/** - * LIBXSLT_PUBLIC: - * - * This macro is used to declare PUBLIC variables for Cygwin and for MSC on Windows - */ -#if !defined LIBXSLT_PUBLIC -#if (defined(__CYGWIN__) || defined _MSC_VER) && !defined IN_LIBXSLT && !defined LIBXSLT_STATIC -#define LIBXSLT_PUBLIC __declspec(dllimport) -#else -#define LIBXSLT_PUBLIC -#endif -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* __XML_XSLTCONFIG_H__ */ diff --git a/dll/3rdparty/libxslt/xsltexports.h b/dll/3rdparty/libxslt/xsltexports.h deleted file mode 100644 index 825c122e191..00000000000 --- a/dll/3rdparty/libxslt/xsltexports.h +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Summary: macros for marking symbols as exportable/importable. - * Description: macros for marking symbols as exportable/importable. - * - * Copy: See Copyright for the status of this software. - * - * Author: Igor Zlatkovic - */ - -#ifndef __XSLT_EXPORTS_H__ -#define __XSLT_EXPORTS_H__ - -/** - * XSLTPUBFUN: - * XSLTPUBFUN, XSLTPUBVAR, XSLTCALL - * - * Macros which declare an exportable function, an exportable variable and - * the calling convention used for functions. - * - * Please use an extra block for every platform/compiler combination when - * modifying this, rather than overlong #ifdef lines. This helps - * readability as well as the fact that different compilers on the same - * platform might need different definitions. - */ - -/** - * XSLTPUBFUN: - * - * Macros which declare an exportable function - */ -#define XSLTPUBFUN -/** - * XSLTPUBVAR: - * - * Macros which declare an exportable variable - */ -#define XSLTPUBVAR extern -/** - * XSLTCALL: - * - * Macros which declare the called convention for exported functions - */ -#define XSLTCALL - -/** DOC_DISABLE */ - -/* Windows platform with MS compiler */ -#if defined(_WIN32) && defined(_MSC_VER) - #undef XSLTPUBFUN - #undef XSLTPUBVAR - #undef XSLTCALL - #if defined(IN_LIBXSLT) && !defined(LIBXSLT_STATIC) - #define XSLTPUBFUN __declspec(dllexport) - #define XSLTPUBVAR __declspec(dllexport) - #else - #define XSLTPUBFUN - #if !defined(LIBXSLT_STATIC) - #define XSLTPUBVAR __declspec(dllimport) extern - #else - #define XSLTPUBVAR extern - #endif - #endif - #define XSLTCALL __cdecl - #if !defined _REENTRANT - #define _REENTRANT - #endif -#endif - -/* Windows platform with Borland compiler */ -#if defined(_WIN32) && defined(__BORLANDC__) - #undef XSLTPUBFUN - #undef XSLTPUBVAR - #undef XSLTCALL - #if defined(IN_LIBXSLT) && !defined(LIBXSLT_STATIC) - #define XSLTPUBFUN __declspec(dllexport) - #define XSLTPUBVAR __declspec(dllexport) extern - #else - #define XSLTPUBFUN - #if !defined(LIBXSLT_STATIC) - #define XSLTPUBVAR __declspec(dllimport) extern - #else - #define XSLTPUBVAR extern - #endif - #endif - #define XSLTCALL __cdecl - #if !defined _REENTRANT - #define _REENTRANT - #endif -#endif - -/* Windows platform with GNU compiler (Mingw) */ -#if defined(_WIN32) && defined(__MINGW32__) - #undef XSLTPUBFUN - #undef XSLTPUBVAR - #undef XSLTCALL -/* - #if defined(IN_LIBXSLT) && !defined(LIBXSLT_STATIC) -*/ - #if !defined(LIBXSLT_STATIC) - #define XSLTPUBFUN __declspec(dllexport) - #define XSLTPUBVAR __declspec(dllexport) extern - #else - #define XSLTPUBFUN - #if !defined(LIBXSLT_STATIC) - #define XSLTPUBVAR __declspec(dllimport) extern - #else - #define XSLTPUBVAR extern - #endif - #endif - #define XSLTCALL __cdecl - #if !defined _REENTRANT - #define _REENTRANT - #endif -#endif - -/* Cygwin platform, GNU compiler */ -#if defined(_WIN32) && defined(__CYGWIN__) - #undef XSLTPUBFUN - #undef XSLTPUBVAR - #undef XSLTCALL - #if defined(IN_LIBXSLT) && !defined(LIBXSLT_STATIC) - #define XSLTPUBFUN __declspec(dllexport) - #define XSLTPUBVAR __declspec(dllexport) - #else - #define XSLTPUBFUN - #if !defined(LIBXSLT_STATIC) - #define XSLTPUBVAR __declspec(dllimport) extern - #else - #define XSLTPUBVAR - #endif - #endif - #define XSLTCALL __cdecl -#endif - -/* Compatibility */ -#if !defined(LIBXSLT_PUBLIC) -#define LIBXSLT_PUBLIC XSLTPUBVAR -#endif - -#endif /* __XSLT_EXPORTS_H__ */ - - diff --git a/dll/3rdparty/libxslt/xsltlocale.c b/dll/3rdparty/libxslt/xsltlocale.c index ec03cde0f5d..b5fe98632ba 100644 --- a/dll/3rdparty/libxslt/xsltlocale.c +++ b/dll/3rdparty/libxslt/xsltlocale.c @@ -26,9 +26,9 @@ #define LC_COLLATE_MASK (1 << LC_COLLATE) #endif -#define ISALPHA(c) ((c & 0xc0) == 0x40 && (unsigned)((c & 0x1f) - 1) < 26) #define TOUPPER(c) (c & ~0x20) #define TOLOWER(c) (c | 0x20) +#define ISALPHA(c) ((unsigned)(TOUPPER(c) - 'A') < 26) /*without terminating null character*/ #define XSLTMAX_ISO639LANGLEN 8 @@ -66,6 +66,21 @@ xslt_locale_WINAPI(const xmlChar *languageTag) { static void xsltEnumSupportedLocales(void); #endif +/** + * xsltFreeLocales: + * + * Cleanup function for the locale support on shutdown + */ +void +xsltFreeLocales(void) { +#ifdef XSLT_LOCALE_WINAPI + xmlRMutexLock(xsltLocaleMutex); + xmlFree(xsltLocaleList); + xsltLocaleList = NULL; + xmlRMutexUnlock(xsltLocaleMutex); +#endif +} + /** * xsltNewLocale: * @languageTag: RFC 3066 language tag @@ -84,41 +99,41 @@ xsltNewLocale(const xmlChar *languageTag) { const char *region = NULL; char *q = localeName; int i, llen; - + /* Convert something like "pt-br" to "pt_BR.utf8" */ - + if (languageTag == NULL) - return(NULL); - + return(NULL); + for (i=0; i - -#ifdef XSLT_LOCALE_XLOCALE - -#include -#include - -#ifdef __GLIBC__ -/*locale_t is defined only if _GNU_SOURCE is defined*/ -typedef __locale_t xsltLocale; -#else -typedef locale_t xsltLocale; -#endif -typedef xmlChar xsltLocaleChar; - -#elif defined(XSLT_LOCALE_WINAPI) - -//#include - -#define WIN32_NO_STATUS -#include -#include -#include - -typedef LCID xsltLocale; -typedef wchar_t xsltLocaleChar; - -#else - -/* - * XSLT_LOCALE_NONE: - * Macro indicating that locale are not supported - */ -#ifndef XSLT_LOCALE_NONE -#define XSLT_LOCALE_NONE -#endif - -typedef void *xsltLocale; -typedef xmlChar xsltLocaleChar; - -#endif - -xsltLocale xsltNewLocale(const xmlChar *langName); -void xsltFreeLocale(xsltLocale locale); -xsltLocaleChar *xsltStrxfrm(xsltLocale locale, const xmlChar *string); -int xsltLocaleStrcmp(xsltLocale locale, const xsltLocaleChar *str1, const xsltLocaleChar *str2); - -#endif /* __XML_XSLTLOCALE_H__ */ diff --git a/dll/3rdparty/libxslt/xsltutils.c b/dll/3rdparty/libxslt/xsltutils.c index 9565e152fbf..ab981a42372 100644 --- a/dll/3rdparty/libxslt/xsltutils.c +++ b/dll/3rdparty/libxslt/xsltutils.c @@ -19,6 +19,7 @@ #endif #include +#include #ifdef HAVE_SYS_TIME_H #include #endif @@ -53,9 +54,9 @@ #endif /* WIN32 */ /************************************************************************ - * * - * Convenience function * - * * + * * + * Convenience function * + * * ************************************************************************/ /** @@ -90,10 +91,15 @@ xsltGetCNsProp(xsltStylesheetPtr style, xmlNodePtr node, if ((node == NULL) || (style == NULL) || (style->dict == NULL)) return(NULL); - prop = node->properties; - if (nameSpace == NULL) { + if (nameSpace == NULL) return xmlGetProp(node, name); - } + + if (node->type == XML_NAMESPACE_DECL) + return(NULL); + if (node->type == XML_ELEMENT_NODE) + prop = node->properties; + else + prop = NULL; while (prop != NULL) { /* * One need to have @@ -130,7 +136,7 @@ xsltGetCNsProp(xsltStylesheetPtr style, xmlNodePtr node, attrDecl = xmlGetDtdAttrDesc(doc->intSubset, node->name, name); if ((attrDecl == NULL) && (doc->extSubset != NULL)) attrDecl = xmlGetDtdAttrDesc(doc->extSubset, node->name, name); - + if ((attrDecl != NULL) && (attrDecl->prefix != NULL)) { /* * The DTD declaration only allows a prefix search @@ -172,7 +178,15 @@ xsltGetNsProp(xmlNodePtr node, const xmlChar *name, const xmlChar *nameSpace) { if (node == NULL) return(NULL); - prop = node->properties; + if (nameSpace == NULL) + return xmlGetProp(node, name); + + if (node->type == XML_NAMESPACE_DECL) + return(NULL); + if (node->type == XML_ELEMENT_NODE) + prop = node->properties; + else + prop = NULL; /* * TODO: Substitute xmlGetProp() for xmlGetNsProp(), since the former * is not namespace-aware and will return an attribute with equal @@ -182,8 +196,6 @@ xsltGetNsProp(xmlNodePtr node, const xmlChar *name, const xmlChar *nameSpace) { * So this would return "myName" even if an attribute @name * in the XSLT was requested. */ - if (nameSpace == NULL) - return(xmlGetProp(node, name)); while (prop != NULL) { /* * One need to have @@ -216,7 +228,7 @@ xsltGetNsProp(xmlNodePtr node, const xmlChar *name, const xmlChar *nameSpace) { attrDecl = xmlGetDtdAttrDesc(doc->intSubset, node->name, name); if ((attrDecl == NULL) && (doc->extSubset != NULL)) attrDecl = xmlGetDtdAttrDesc(doc->extSubset, node->name, name); - + if ((attrDecl != NULL) && (attrDecl->prefix != NULL)) { /* * The DTD declaration only allows a prefix search @@ -314,7 +326,7 @@ error: * -1 in case of an error. */ int -xsltPointerListAddSize(xsltPointerListPtr list, +xsltPointerListAddSize(xsltPointerListPtr list, void *item, int initialSize) { @@ -410,9 +422,9 @@ xsltPointerListClear(xsltPointerListPtr list) #endif /* XSLT_REFACTORED */ /************************************************************************ - * * - * Handling of XSLT stylesheets messages * - * * + * * + * Handling of XSLT stylesheets messages * + * * ************************************************************************/ /** @@ -465,9 +477,9 @@ xsltMessage(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst) { } /************************************************************************ - * * - * Handling of out of context errors * - * * + * * + * Handling of out of context errors * + * * ************************************************************************/ #define XSLT_GET_VAR_STR(msg, str) { \ @@ -477,14 +489,14 @@ xsltMessage(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst) { va_list ap; \ \ str = (char *) xmlMalloc(150); \ - if (str == NULL) \ + if (str == NULL) \ return; \ \ size = 150; \ \ while (size < 64000) { \ va_start(ap, msg); \ - chars = vsnprintf(str, size, msg, ap); \ + chars = vsnprintf(str, size, msg, ap); \ va_end(ap); \ if ((chars > -1) && (chars < size)) \ break; \ @@ -504,7 +516,7 @@ xsltMessage(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst) { * @ctx: an error context * @msg: the message to display/transmit * @...: extra parameters for the message display - * + * * Default handler for out of context error messages. */ static void @@ -550,7 +562,7 @@ xsltSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler) { * @ctx: an error context * @msg: the message to display/transmit * @...: extra parameters for the message display - * + * * Default handler for out of context error messages. */ static void @@ -632,8 +644,8 @@ xsltPrintErrorContext(xsltTransformContextPtr ctxt, if (node->name != NULL) name = node->name; } - } - + } + if (ctxt != NULL) type = "runtime error"; else if (style != NULL) { @@ -719,9 +731,9 @@ xsltTransformError(xsltTransformContextPtr ctxt, } /************************************************************************ - * * - * QNames * - * * + * * + * QNames * + * * ************************************************************************/ /** @@ -796,9 +808,9 @@ xsltGetQNameURI(xmlNodePtr node, xmlChar ** name) * we are not trying to validate but just to cut, and yes it will * work even if this is a set of UTF-8 encoded chars */ - while ((qname[len] != 0) && (qname[len] != ':')) + while ((qname[len] != 0) && (qname[len] != ':')) len++; - + if (qname[len] == 0) return(NULL); @@ -903,11 +915,11 @@ xsltGetQNameURI2(xsltStylesheetPtr style, xmlNodePtr node, xmlFree(qname); return(ns->href); } - + /************************************************************************ - * * - * Sorting * - * * + * * + * Sorting * + * * ************************************************************************/ /** @@ -962,7 +974,7 @@ xsltComputeSortResult(xsltTransformContextPtr ctxt, xmlNodePtr sort) { xmlNodeSetPtr list = NULL; xmlXPathObjectPtr res; int len = 0; - int i; + int i; xmlNodePtr oldNode; xmlNodePtr oldInst; int oldPos, oldSize ; @@ -1078,7 +1090,7 @@ xsltComputeSortResult(xsltTransformContextPtr ctxt, xmlNodePtr sort) { * reorder the current node list accordingly to the set of sorting * requirement provided by the arry of nodes. */ -void +void xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts, int nbsorts) { #ifdef XSLT_REFACTORED @@ -1095,7 +1107,7 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts, int tst; int depth; xmlNodePtr node; - xmlXPathObjectPtr tmp; + xmlXPathObjectPtr tmp; int tempstype[XSLT_MAX_SORT], temporder[XSLT_MAX_SORT]; if ((ctxt == NULL) || (sorts == NULL) || (nbsorts <= 0) || @@ -1175,7 +1187,7 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts, j = i - incr; if (results[i] == NULL) continue; - + while (j >= 0) { if (results[j] == NULL) tst = 1; @@ -1193,7 +1205,7 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts, else if (results[j]->floatval == results[j + incr]->floatval) tst = 0; - else if (results[j]->floatval > + else if (results[j]->floatval > results[j + incr]->floatval) tst = 1; else tst = -1; @@ -1201,10 +1213,10 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts, tst = xsltLocaleStrcmp( comp->locale, (xsltLocaleChar *) results[j]->stringval, - (xsltLocaleChar *) results[j + incr]->stringval); + (xsltLocaleChar *) results[j + incr]->stringval); } else { tst = xmlStrcmp(results[j]->stringval, - results[j + incr]->stringval); + results[j + incr]->stringval); } if (descending) tst = -tst; @@ -1227,11 +1239,11 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts, * Compute the result of the next level for the * full set, this might be optimized ... or not */ - if (resultsTab[depth] == NULL) + if (resultsTab[depth] == NULL) resultsTab[depth] = xsltComputeSortResult(ctxt, sorts[depth]); res = resultsTab[depth]; - if (res == NULL) + if (res == NULL) break; if (res[j] == NULL) { if (res[j+incr] != NULL) @@ -1242,7 +1254,7 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts, accordance with XSLT spec */ if (xmlXPathIsNaN(res[j]->floatval)) { if (xmlXPathIsNaN(res[j + - incr]->floatval)) + incr]->floatval)) tst = 0; else tst = -1; @@ -1252,7 +1264,7 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts, else if (res[j]->floatval == res[j + incr]-> floatval) tst = 0; - else if (res[j]->floatval > + else if (res[j]->floatval > res[j + incr]->floatval) tst = 1; else tst = -1; @@ -1260,10 +1272,10 @@ xsltDefaultSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts, tst = xsltLocaleStrcmp( comp->locale, (xsltLocaleChar *) res[j]->stringval, - (xsltLocaleChar *) res[j + incr]->stringval); + (xsltLocaleChar *) res[j + incr]->stringval); } else { tst = xmlStrcmp(res[j]->stringval, - res[j + incr]->stringval); + res[j + incr]->stringval); } if (desc) tst = -tst; @@ -1375,32 +1387,32 @@ xsltSetSortFunc(xsltSortFunc handler) { * @handler: the new handler function * * Function to set the handler for XSLT sorting - * for the specified context. + * for the specified context. * If the handler is NULL, then the global * sort function will be called */ -void +void xsltSetCtxtSortFunc(xsltTransformContextPtr ctxt, xsltSortFunc handler) { ctxt->sortfunc = handler; } /************************************************************************ - * * - * Parsing options * - * * + * * + * Parsing options * + * * ************************************************************************/ /** * xsltSetCtxtParseOptions: * @ctxt: a XSLT process context * @options: a combination of libxml2 xmlParserOption - * - * Change the default parser option passed by the XSLT engine to the + * + * Change the default parser option passed by the XSLT engine to the * parser when using document() loading. * * Returns the previous options or -1 in case of error */ -int +int xsltSetCtxtParseOptions(xsltTransformContextPtr ctxt, int options) { int oldopts; @@ -1419,9 +1431,9 @@ xsltSetCtxtParseOptions(xsltTransformContextPtr ctxt, int options) } /************************************************************************ - * * - * Output * - * * + * * + * Output * + * * ************************************************************************/ /** @@ -1512,7 +1524,7 @@ xsltSaveResultTo(xmlOutputBufferPtr buf, xmlDocPtr result, cur = cur->next; continue; } - + do { cur = cur->parent; if (cur == NULL) @@ -1537,9 +1549,11 @@ xsltSaveResultTo(xmlOutputBufferPtr buf, xmlDocPtr result, if (omitXmlDecl != 1) { xmlOutputBufferWriteString(buf, "version != NULL) - xmlBufferWriteQuotedString(buf->buffer, result->version); - else + if (result->version != NULL) { + xmlOutputBufferWriteString(buf, "\""); + xmlOutputBufferWriteString(buf, (const char *)result->version); + xmlOutputBufferWriteString(buf, "\""); + } else xmlOutputBufferWriteString(buf, "\"1.0\""); if (encoding == NULL) { if (result->encoding != NULL) @@ -1551,7 +1565,9 @@ xsltSaveResultTo(xmlOutputBufferPtr buf, xmlDocPtr result, } if (encoding != NULL) { xmlOutputBufferWriteString(buf, " encoding="); - xmlBufferWriteQuotedString(buf->buffer, (xmlChar *) encoding); + xmlOutputBufferWriteString(buf, "\""); + xmlOutputBufferWriteString(buf, (const char *) encoding); + xmlOutputBufferWriteString(buf, "\""); } switch (standalone) { case 0: @@ -1571,13 +1587,14 @@ xsltSaveResultTo(xmlOutputBufferPtr buf, xmlDocPtr result, while (child != NULL) { xmlNodeDumpOutput(buf, result, child, 0, (indent == 1), (const char *) encoding); - if ((child->type == XML_DTD_NODE) || + if (indent && ((child->type == XML_DTD_NODE) || ((child->type == XML_COMMENT_NODE) && - (child->next != NULL))) + (child->next != NULL)))) xmlOutputBufferWriteString(buf, "\n"); child = child->next; } - xmlOutputBufferWriteString(buf, "\n"); + if (indent) + xmlOutputBufferWriteString(buf, "\n"); } xmlOutputBufferFlush(buf); } @@ -1728,7 +1745,7 @@ xsltSaveResultToFd(int fd, xmlDocPtr result, xsltStylesheetPtr style) { * Returns 0 in case of success and -1 in case of error */ int -xsltSaveResultToString(xmlChar **doc_txt_ptr, int * doc_txt_len, +xsltSaveResultToString(xmlChar **doc_txt_ptr, int * doc_txt_len, xmlDocPtr result, xsltStylesheetPtr style) { xmlOutputBufferPtr buf; const xmlChar *encoding; @@ -1754,6 +1771,15 @@ xsltSaveResultToString(xmlChar **doc_txt_ptr, int * doc_txt_len, if (buf == NULL) return(-1); xsltSaveResultTo(buf, result, style); +#ifdef LIBXML2_NEW_BUFFER + if (buf->conv != NULL) { + *doc_txt_len = xmlBufUse(buf->conv); + *doc_txt_ptr = xmlStrndup(xmlBufContent(buf->conv), *doc_txt_len); + } else { + *doc_txt_len = xmlBufUse(buf->buffer); + *doc_txt_ptr = xmlStrndup(xmlBufContent(buf->buffer), *doc_txt_len); + } +#else if (buf->conv != NULL) { *doc_txt_len = buf->conv->use; *doc_txt_ptr = xmlStrndup(buf->conv->content, *doc_txt_len); @@ -1761,14 +1787,15 @@ xsltSaveResultToString(xmlChar **doc_txt_ptr, int * doc_txt_len, *doc_txt_len = buf->buffer->use; *doc_txt_ptr = xmlStrndup(buf->buffer->content, *doc_txt_len); } +#endif (void)xmlOutputBufferClose(buf); return 0; } /************************************************************************ - * * - * Generating profiling informations * - * * + * * + * Generating profiling informations * + * * ************************************************************************/ static long calibration = -1; @@ -1840,7 +1867,35 @@ xsltTimestamp(void) return (long) (seconds * XSLT_TIMESTAMP_TICS_PER_SEC); #else /* XSLT_WIN32_PERFORMANCE_COUNTER */ -#ifdef HAVE_GETTIMEOFDAY +#ifdef HAVE_CLOCK_GETTIME +# if defined(CLOCK_MONOTONIC) +# define XSLT_CLOCK CLOCK_MONOTONIC +# elif defined(CLOCK_HIGHRES) +# define XSLT_CLOCK CLOCK_HIGHRES +# else +# define XSLT_CLOCK CLOCK_REALTIME +# endif + static struct timespec startup; + struct timespec cur; + long tics; + + if (calibration < 0) { + clock_gettime(XSLT_CLOCK, &startup); + calibration = 0; + calibration = xsltCalibrateTimestamps(); + clock_gettime(XSLT_CLOCK, &startup); + return (0); + } + + clock_gettime(XSLT_CLOCK, &cur); + tics = (cur.tv_sec - startup.tv_sec) * XSLT_TIMESTAMP_TICS_PER_SEC; + tics += (cur.tv_nsec - startup.tv_nsec) / + (1000000000l / XSLT_TIMESTAMP_TICS_PER_SEC); + + tics -= calibration; + return(tics); + +#elif HAVE_GETTIMEOFDAY static struct timeval startup; struct timeval cur; long tics; @@ -1857,7 +1912,7 @@ xsltTimestamp(void) tics = (cur.tv_sec - startup.tv_sec) * XSLT_TIMESTAMP_TICS_PER_SEC; tics += (cur.tv_usec - startup.tv_usec) / (1000000l / XSLT_TIMESTAMP_TICS_PER_SEC); - + tics -= calibration; return(tics); #else @@ -1870,6 +1925,30 @@ xsltTimestamp(void) #endif /* XSLT_WIN32_PERFORMANCE_COUNTER */ } +static char * +pretty_templ_match(xsltTemplatePtr templ) { + static char dst[1001]; + char *src = (char *)templ->match; + int i=0,j; + + /* strip white spaces */ + for (j=0; i<1000 && src[j]; i++,j++) { + for(;src[j]==' ';j++); + dst[i]=src[j]; + } + if(i<998 && templ->mode) { + /* append [mode] */ + dst[i++]='['; + src=(char *)templ->mode; + for (j=0; i<999 && src[j]; i++,j++) { + dst[i]=src[j]; + } + dst[i++]=']'; + } + dst[i]='\0'; + return dst; +} + #define MAX_TEMPLATES 10000 /** @@ -1881,13 +1960,14 @@ xsltTimestamp(void) */ void xsltSaveProfiling(xsltTransformContextPtr ctxt, FILE *output) { - int nb, i,j; + int nb, i,j,k,l; int max; int total; long totalt; xsltTemplatePtr *templates; xsltStylesheetPtr style; - xsltTemplatePtr template; + xsltTemplatePtr templ1,templ2; + int *childt; if ((output == NULL) || (ctxt == NULL)) return; @@ -1902,14 +1982,14 @@ xsltSaveProfiling(xsltTransformContextPtr ctxt, FILE *output) { style = ctxt->style; while (style != NULL) { - template = style->templates; - while (template != NULL) { + templ1 = style->templates; + while (templ1 != NULL) { if (nb >= max) break; - if (template->nbCalls > 0) - templates[nb++] = template; - template = template->next; + if (templ1->nbCalls > 0) + templates[nb++] = templ1; + templ1 = templ1->next; } style = xsltNextImport(style); @@ -1920,58 +2000,161 @@ xsltSaveProfiling(xsltTransformContextPtr ctxt, FILE *output) { if ((templates[i]->time <= templates[j]->time) || ((templates[i]->time == templates[j]->time) && (templates[i]->nbCalls <= templates[j]->nbCalls))) { - template = templates[j]; + templ1 = templates[j]; templates[j] = templates[i]; - templates[i] = template; + templates[i] = templ1; } } } + + /* print flat profile */ + fprintf(output, "%6s%20s%20s%10s Calls Tot 100us Avg\n\n", "number", "match", "name", "mode"); total = 0; totalt = 0; for (i = 0;i < nb;i++) { + templ1 = templates[i]; fprintf(output, "%5d ", i); - if (templates[i]->match != NULL) { - if (xmlStrlen(templates[i]->match) > 20) - fprintf(output, "%s\n%26s", templates[i]->match, ""); + if (templ1->match != NULL) { + if (xmlStrlen(templ1->match) > 20) + fprintf(output, "%s\n%26s", templ1->match, ""); else - fprintf(output, "%20s", templates[i]->match); + fprintf(output, "%20s", templ1->match); } else { fprintf(output, "%20s", ""); } - if (templates[i]->name != NULL) { - if (xmlStrlen(templates[i]->name) > 20) - fprintf(output, "%s\n%46s", templates[i]->name, ""); + if (templ1->name != NULL) { + if (xmlStrlen(templ1->name) > 20) + fprintf(output, "%s\n%46s", templ1->name, ""); else - fprintf(output, "%20s", templates[i]->name); + fprintf(output, "%20s", templ1->name); } else { fprintf(output, "%20s", ""); } - if (templates[i]->mode != NULL) { - if (xmlStrlen(templates[i]->mode) > 10) - fprintf(output, "%s\n%56s", templates[i]->mode, ""); + if (templ1->mode != NULL) { + if (xmlStrlen(templ1->mode) > 10) + fprintf(output, "%s\n%56s", templ1->mode, ""); else - fprintf(output, "%10s", templates[i]->mode); + fprintf(output, "%10s", templ1->mode); } else { fprintf(output, "%10s", ""); } - fprintf(output, " %6d", templates[i]->nbCalls); - fprintf(output, " %6ld %6ld\n", templates[i]->time, - templates[i]->time / templates[i]->nbCalls); - total += templates[i]->nbCalls; - totalt += templates[i]->time; + fprintf(output, " %6d", templ1->nbCalls); + fprintf(output, " %6ld %6ld\n", templ1->time, + templ1->time / templ1->nbCalls); + total += templ1->nbCalls; + totalt += templ1->time; } fprintf(output, "\n%30s%26s %6d %6ld\n", "Total", "", total, totalt); + + /* print call graph */ + + childt = xmlMalloc((nb + 1) * sizeof(int)); + if (childt == NULL) + return; + + /* precalculate children times */ + for (i = 0; i < nb; i++) { + templ1 = templates[i]; + + childt[i] = 0; + for (k = 0; k < nb; k++) { + templ2 = templates[k]; + for (l = 0; l < templ2->templNr; l++) { + if (templ2->templCalledTab[l] == templ1) { + childt[i] +=templ2->time; + } + } + } + } + childt[i] = 0; + + fprintf(output, "\nindex %% time self children called name\n"); + + for (i = 0; i < nb; i++) { + char ix_str[20], timep_str[20], times_str[20], timec_str[20], called_str[20]; + int t; + + templ1 = templates[i]; + /* callers */ + for (j = 0; j < templ1->templNr; j++) { + templ2 = templ1->templCalledTab[j]; + for (k = 0; k < nb; k++) { + if (templates[k] == templ2) + break; + } + t=templ2?templ2->time:totalt; + sprintf(times_str,"%8.3f",(float)t/XSLT_TIMESTAMP_TICS_PER_SEC); + sprintf(timec_str,"%8.3f",(float)childt[k]/XSLT_TIMESTAMP_TICS_PER_SEC); + sprintf(called_str,"%6d/%d", + templ1->templCountTab[j], /* number of times caller calls 'this' */ + templ1->nbCalls); /* total number of calls to 'this' */ + + fprintf(output, " %-8s %-8s %-12s %s [%d]\n", + times_str,timec_str,called_str, + (templ2?(templ2->name?(char *)templ2->name:pretty_templ_match(templ2)):"-"),k); + } + /* this */ + sprintf(ix_str,"[%d]",i); + sprintf(timep_str,"%6.2f",(float)templ1->time*100.0/totalt); + sprintf(times_str,"%8.3f",(float)templ1->time/XSLT_TIMESTAMP_TICS_PER_SEC); + sprintf(timec_str,"%8.3f",(float)childt[i]/XSLT_TIMESTAMP_TICS_PER_SEC); + fprintf(output, "%-5s %-6s %-8s %-8s %6d %s [%d]\n", + ix_str, timep_str,times_str,timec_str, + templ1->nbCalls, + templ1->name?(char *)templ1->name:pretty_templ_match(templ1),i); + /* callees + * - go over templates[0..nb] and their templCalledTab[] + * - print those where we in the the call-stack + */ + total = 0; + for (k = 0; k < nb; k++) { + templ2 = templates[k]; + for (l = 0; l < templ2->templNr; l++) { + if (templ2->templCalledTab[l] == templ1) { + total+=templ2->templCountTab[l]; + } + } + } + for (k = 0; k < nb; k++) { + templ2 = templates[k]; + for (l = 0; l < templ2->templNr; l++) { + if (templ2->templCalledTab[l] == templ1) { + sprintf(times_str,"%8.3f",(float)templ2->time/XSLT_TIMESTAMP_TICS_PER_SEC); + sprintf(timec_str,"%8.3f",(float)childt[k]/XSLT_TIMESTAMP_TICS_PER_SEC); + sprintf(called_str,"%6d/%d", + templ2->templCountTab[l], /* number of times 'this' calls callee */ + total); /* total number of calls from 'this' */ + fprintf(output, " %-8s %-8s %-12s %s [%d]\n", + times_str,timec_str,called_str, + templ2->name?(char *)templ2->name:pretty_templ_match(templ2),k); + } + } + } + fprintf(output, "-----------------------------------------------\n"); + } + + fprintf(output, "\f\nIndex by function name\n"); + for (i = 0; i < nb; i++) { + templ1 = templates[i]; + fprintf(output, "[%d] %s (%s:%d)\n", + i, templ1->name?(char *)templ1->name:pretty_templ_match(templ1), + templ1->style->doc->URL,templ1->elem->line); + } + + fprintf(output, "\f\n"); + xmlFree(childt); + xmlFree(templates); } /************************************************************************ - * * - * Fetching profiling informations * - * * + * * + * Fetching profiling informations * + * * ************************************************************************/ /** @@ -2084,15 +2267,16 @@ xsltGetProfileInformation(xsltTransformContextPtr ctxt) } /************************************************************************ - * * - * Hooks for libxml2 XPath * - * * + * * + * Hooks for libxml2 XPath * + * * ************************************************************************/ /** - * xsltXPathCompile: + * xsltXPathCompileFlags: * @style: the stylesheet * @str: the XPath expression + * @flags: extra compilation flags to pass down to libxml2 XPath * * Compile an XPath expression * @@ -2100,7 +2284,7 @@ xsltGetProfileInformation(xsltTransformContextPtr ctxt) * the caller has to free the object. */ xmlXPathCompExprPtr -xsltXPathCompile(xsltStylesheetPtr style, const xmlChar *str) { +xsltXPathCompileFlags(xsltStylesheetPtr style, const xmlChar *str, int flags) { xmlXPathContextPtr xpathCtxt; xmlXPathCompExprPtr ret; @@ -2132,6 +2316,8 @@ xsltXPathCompile(xsltStylesheetPtr style, const xmlChar *str) { if (xpathCtxt == NULL) return NULL; } + xpathCtxt->flags = flags; + /* * Compile the expression. */ @@ -2152,10 +2338,25 @@ xsltXPathCompile(xsltStylesheetPtr style, const xmlChar *str) { return(ret); } +/** + * xsltXPathCompile: + * @style: the stylesheet + * @str: the XPath expression + * + * Compile an XPath expression + * + * Returns the xmlXPathCompExprPtr resulting from the compilation or NULL. + * the caller has to free the object. + */ +xmlXPathCompExprPtr +xsltXPathCompile(xsltStylesheetPtr style, const xmlChar *str) { + return(xsltXPathCompileFlags(style, str, 0)); +} + /************************************************************************ - * * - * Hooks for the debugger * - * * + * * + * Hooks for the debugger * + * * ************************************************************************/ /* @@ -2183,18 +2384,18 @@ int xslDebugStatus; /** * xsltSetDebuggerStatus: * @value : the value to be set - * + * * This function sets the value of xslDebugStatus. */ void xsltSetDebuggerStatus(int value) { - xslDebugStatus = value; + xslDebugStatus = value; } /** - * xsltGetDebuggerStatus: - * + * xsltGetDebuggerStatus: + * * Get xslDebugStatus. * * Returns the value of xslDebugStatus. @@ -2202,16 +2403,16 @@ xsltSetDebuggerStatus(int value) int xsltGetDebuggerStatus(void) { - return(xslDebugStatus); + return(xslDebugStatus); } /** * xsltSetDebuggerCallbacks: * @no : number of callbacks * @block : the block of callbacks - * + * * This function allow to plug a debugger into the XSLT library - * @block points to a block of memory containing the address of @no + * @block points to a block of memory containing the address of @no * callback routines. * * Returns 0 in case of success and -1 in case of error @@ -2236,9 +2437,9 @@ xsltSetDebuggerCallbacks(int no, void *block) * @cur : source node being executed * @node : data node being processed * @templ : temlate that applies to node - * @ctxt : the xslt transform context - * - * If either cur or node are a breakpoint, or xslDebugStatus in state + * @ctxt : the xslt transform context + * + * If either cur or node are a breakpoint, or xslDebugStatus in state * where debugging must occcur at this time then transfer control * to the xslDebugBreak function */ @@ -2256,7 +2457,7 @@ xslHandleDebugger(xmlNodePtr cur, xmlNodePtr node, xsltTemplatePtr templ, * @source : the source node being processed * * Add template "call" to call stack - * Returns : 1 on sucess 0 otherwise an error may be printed if + * Returns : 1 on sucess 0 otherwise an error may be printed if * WITH_XSLT_DEBUG_BREAKPOINTS is defined */ int diff --git a/dll/3rdparty/libxslt/xsltutils.h b/dll/3rdparty/libxslt/xsltutils.h deleted file mode 100644 index 3886be3448e..00000000000 --- a/dll/3rdparty/libxslt/xsltutils.h +++ /dev/null @@ -1,309 +0,0 @@ -/* - * Summary: set of utilities for the XSLT engine - * Description: interfaces for the utilities module of the XSLT engine. - * things like message handling, profiling, and other - * generally useful routines. - * - * Copy: See Copyright for the status of this software. - * - * Author: Daniel Veillard - */ - -#ifndef __XML_XSLTUTILS_H__ -#define __XML_XSLTUTILS_H__ - -#include -#ifdef HAVE_STDARG_H -#include -#endif -#include -#include -#include -#include "xsltexports.h" -#include "xsltInternals.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * XSLT_TODO: - * - * Macro to flag unimplemented blocks. - */ -#define XSLT_TODO \ - xsltGenericError(xsltGenericErrorContext, \ - "Unimplemented block at %s:%d\n", \ - __FILE__, __LINE__); - -/** - * XSLT_STRANGE: - * - * Macro to flag that a problem was detected internally. - */ -#define XSLT_STRANGE \ - xsltGenericError(xsltGenericErrorContext, \ - "Internal error at %s:%d\n", \ - __FILE__, __LINE__); - -/** - * IS_XSLT_ELEM: - * - * Checks that the element pertains to XSLT namespace. - */ -#define IS_XSLT_ELEM(n) \ - (((n) != NULL) && ((n)->ns != NULL) && \ - (xmlStrEqual((n)->ns->href, XSLT_NAMESPACE))) - -/** - * IS_XSLT_NAME: - * - * Checks the value of an element in XSLT namespace. - */ -#define IS_XSLT_NAME(n, val) \ - (xmlStrEqual((n)->name, (const xmlChar *) (val))) - -/** - * IS_XSLT_REAL_NODE: - * - * Check that a node is a 'real' one: document, element, text or attribute. - */ -#define IS_XSLT_REAL_NODE(n) \ - (((n) != NULL) && \ - (((n)->type == XML_ELEMENT_NODE) || \ - ((n)->type == XML_TEXT_NODE) || \ - ((n)->type == XML_CDATA_SECTION_NODE) || \ - ((n)->type == XML_ATTRIBUTE_NODE) || \ - ((n)->type == XML_DOCUMENT_NODE) || \ - ((n)->type == XML_HTML_DOCUMENT_NODE) || \ - ((n)->type == XML_COMMENT_NODE) || \ - ((n)->type == XML_PI_NODE))) - -/* - * Our own version of namespaced atributes lookup. - */ -XSLTPUBFUN xmlChar * XSLTCALL - xsltGetNsProp (xmlNodePtr node, - const xmlChar *name, - const xmlChar *nameSpace); -XSLTPUBFUN const xmlChar * XSLTCALL - xsltGetCNsProp (xsltStylesheetPtr style, - xmlNodePtr node, - const xmlChar *name, - const xmlChar *nameSpace); -XSLTPUBFUN int XSLTCALL - xsltGetUTF8Char (const unsigned char *utf, - int *len); - -/* - * XSLT Debug Tracing Tracing Types - */ -typedef enum { - XSLT_TRACE_ALL = -1, - XSLT_TRACE_NONE = 0, - XSLT_TRACE_COPY_TEXT = 1<<0, - XSLT_TRACE_PROCESS_NODE = 1<<1, - XSLT_TRACE_APPLY_TEMPLATE = 1<<2, - XSLT_TRACE_COPY = 1<<3, - XSLT_TRACE_COMMENT = 1<<4, - XSLT_TRACE_PI = 1<<5, - XSLT_TRACE_COPY_OF = 1<<6, - XSLT_TRACE_VALUE_OF = 1<<7, - XSLT_TRACE_CALL_TEMPLATE = 1<<8, - XSLT_TRACE_APPLY_TEMPLATES = 1<<9, - XSLT_TRACE_CHOOSE = 1<<10, - XSLT_TRACE_IF = 1<<11, - XSLT_TRACE_FOR_EACH = 1<<12, - XSLT_TRACE_STRIP_SPACES = 1<<13, - XSLT_TRACE_TEMPLATES = 1<<14, - XSLT_TRACE_KEYS = 1<<15, - XSLT_TRACE_VARIABLES = 1<<16 -} xsltDebugTraceCodes; - -/** - * XSLT_TRACE: - * - * Control the type of xsl debugtrace messages emitted. - */ -#define XSLT_TRACE(ctxt,code,call) \ - if (ctxt->traceCode && (*(ctxt->traceCode) & code)) \ - call - -XSLTPUBFUN void XSLTCALL - xsltDebugSetDefaultTrace(xsltDebugTraceCodes val); -XSLTPUBFUN xsltDebugTraceCodes XSLTCALL - xsltDebugGetDefaultTrace(void); - -/* - * XSLT specific error and debug reporting functions. - */ -XSLTPUBVAR xmlGenericErrorFunc xsltGenericError; -XSLTPUBVAR void *xsltGenericErrorContext; -XSLTPUBVAR xmlGenericErrorFunc xsltGenericDebug; -XSLTPUBVAR void *xsltGenericDebugContext; - -XSLTPUBFUN void XSLTCALL - xsltPrintErrorContext (xsltTransformContextPtr ctxt, - xsltStylesheetPtr style, - xmlNodePtr node); -XSLTPUBFUN void XSLTCALL - xsltMessage (xsltTransformContextPtr ctxt, - xmlNodePtr node, - xmlNodePtr inst); -XSLTPUBFUN void XSLTCALL - xsltSetGenericErrorFunc (void *ctx, - xmlGenericErrorFunc handler); -XSLTPUBFUN void XSLTCALL - xsltSetGenericDebugFunc (void *ctx, - xmlGenericErrorFunc handler); -XSLTPUBFUN void XSLTCALL - xsltSetTransformErrorFunc (xsltTransformContextPtr ctxt, - void *ctx, - xmlGenericErrorFunc handler); -XSLTPUBFUN void XSLTCALL - xsltTransformError (xsltTransformContextPtr ctxt, - xsltStylesheetPtr style, - xmlNodePtr node, - const char *msg, - ...); - -XSLTPUBFUN int XSLTCALL - xsltSetCtxtParseOptions (xsltTransformContextPtr ctxt, - int options); -/* - * Sorting. - */ - -XSLTPUBFUN void XSLTCALL - xsltDocumentSortFunction (xmlNodeSetPtr list); -XSLTPUBFUN void XSLTCALL - xsltSetSortFunc (xsltSortFunc handler); -XSLTPUBFUN void XSLTCALL - xsltSetCtxtSortFunc (xsltTransformContextPtr ctxt, - xsltSortFunc handler); -XSLTPUBFUN void XSLTCALL - xsltDefaultSortFunction (xsltTransformContextPtr ctxt, - xmlNodePtr *sorts, - int nbsorts); -XSLTPUBFUN void XSLTCALL - xsltDoSortFunction (xsltTransformContextPtr ctxt, - xmlNodePtr * sorts, - int nbsorts); -XSLTPUBFUN xmlXPathObjectPtr * XSLTCALL - xsltComputeSortResult (xsltTransformContextPtr ctxt, - xmlNodePtr sort); - -/* - * QNames handling. - */ - -XSLTPUBFUN const xmlChar * XSLTCALL - xsltSplitQName (xmlDictPtr dict, - const xmlChar *name, - const xmlChar **prefix); -XSLTPUBFUN const xmlChar * XSLTCALL - xsltGetQNameURI (xmlNodePtr node, - xmlChar **name); - -XSLTPUBFUN const xmlChar * XSLTCALL - xsltGetQNameURI2 (xsltStylesheetPtr style, - xmlNodePtr node, - const xmlChar **name); - -/* - * Output, reuse libxml I/O buffers. - */ -XSLTPUBFUN int XSLTCALL - xsltSaveResultTo (xmlOutputBufferPtr buf, - xmlDocPtr result, - xsltStylesheetPtr style); -XSLTPUBFUN int XSLTCALL - xsltSaveResultToFilename (const char *URI, - xmlDocPtr result, - xsltStylesheetPtr style, - int compression); -XSLTPUBFUN int XSLTCALL - xsltSaveResultToFile (FILE *file, - xmlDocPtr result, - xsltStylesheetPtr style); -XSLTPUBFUN int XSLTCALL - xsltSaveResultToFd (int fd, - xmlDocPtr result, - xsltStylesheetPtr style); -XSLTPUBFUN int XSLTCALL - xsltSaveResultToString (xmlChar **doc_txt_ptr, - int * doc_txt_len, - xmlDocPtr result, - xsltStylesheetPtr style); - -/* - * XPath interface - */ -XSLTPUBFUN xmlXPathCompExprPtr XSLTCALL - xsltXPathCompile (xsltStylesheetPtr style, - const xmlChar *str); - -/* - * Profiling. - */ -XSLTPUBFUN void XSLTCALL - xsltSaveProfiling (xsltTransformContextPtr ctxt, - FILE *output); -XSLTPUBFUN xmlDocPtr XSLTCALL - xsltGetProfileInformation (xsltTransformContextPtr ctxt); - -XSLTPUBFUN long XSLTCALL - xsltTimestamp (void); -XSLTPUBFUN void XSLTCALL - xsltCalibrateAdjust (long delta); - -/** - * XSLT_TIMESTAMP_TICS_PER_SEC: - * - * Sampling precision for profiling - */ -#define XSLT_TIMESTAMP_TICS_PER_SEC 100000l - -/* - * Hooks for the debugger. - */ - -typedef enum { - XSLT_DEBUG_NONE = 0, /* no debugging allowed */ - XSLT_DEBUG_INIT, - XSLT_DEBUG_STEP, - XSLT_DEBUG_STEPOUT, - XSLT_DEBUG_NEXT, - XSLT_DEBUG_STOP, - XSLT_DEBUG_CONT, - XSLT_DEBUG_RUN, - XSLT_DEBUG_RUN_RESTART, - XSLT_DEBUG_QUIT -} xsltDebugStatusCodes; - -XSLTPUBVAR int xslDebugStatus; - -typedef void (*xsltHandleDebuggerCallback) (xmlNodePtr cur, xmlNodePtr node, - xsltTemplatePtr templ, xsltTransformContextPtr ctxt); -typedef int (*xsltAddCallCallback) (xsltTemplatePtr templ, xmlNodePtr source); -typedef void (*xsltDropCallCallback) (void); - -XSLTPUBFUN void XSLTCALL - xsltSetDebuggerStatus (int value); -XSLTPUBFUN int XSLTCALL - xsltGetDebuggerStatus (void); -XSLTPUBFUN int XSLTCALL - xsltSetDebuggerCallbacks (int no, void *block); -XSLTPUBFUN int XSLTCALL - xslAddCall (xsltTemplatePtr templ, - xmlNodePtr source); -XSLTPUBFUN void XSLTCALL - xslDropCall (void); - -#ifdef __cplusplus -} -#endif - -#endif /* __XML_XSLTUTILS_H__ */ - - diff --git a/dll/3rdparty/libxslt/xsltwin32config.h b/dll/3rdparty/libxslt/xsltwin32config.h index a2dfb0882de..70bb756adc8 100644 --- a/dll/3rdparty/libxslt/xsltwin32config.h +++ b/dll/3rdparty/libxslt/xsltwin32config.h @@ -23,21 +23,21 @@ extern "C" { * * the version string like "1.2.3" */ -#define LIBXSLT_DOTTED_VERSION "1.1.26" +#define LIBXSLT_DOTTED_VERSION "1.1.28" /** * LIBXSLT_VERSION: * * the version number: 1.2.3 value is 1002003 */ -#define LIBXSLT_VERSION 10126 +#define LIBXSLT_VERSION 10128 /** * LIBXSLT_VERSION_STRING: * * the version number string, 1.2.3 value is "1002003" */ -#define LIBXSLT_VERSION_STRING "10126" +#define LIBXSLT_VERSION_STRING "10128" /** * LIBXSLT_VERSION_EXTRA: diff --git a/dll/cpl/console/lang/he-IL.rc b/dll/cpl/console/lang/he-IL.rc index e7d8c8984d1..1fb0a216315 100644 --- a/dll/cpl/console/lang/he-IL.rc +++ b/dll/cpl/console/lang/he-IL.rc @@ -46,7 +46,7 @@ BEGIN CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 LISTBOX IDC_LBOX_FONTS, 181, 20, 55, 80, LBS_DISABLENOSCROLL | WS_VSCROLL LTEXT "גופן:", -1, 10, 105, 33, 10 - CHECKBOX "גופנים מודגשים", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 + CHECKBOX "גופנים מודגשים", IDC_CHECK_BOLD_FONTS, 41, 105, 33, 10 LISTBOX IDC_LBOX_TYPE, 10, 120, 110, 40, LBS_DISABLENOSCROLL | WS_VSCROLL GROUPBOX "", IDC_GROUPBOX_FONT_NAME, 6, 156, 241, 50 CONTROL "", IDC_STATIC_SELECT_FONT_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 16, 165, 95, 35 @@ -133,7 +133,7 @@ STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "החלת מאפיינים" FONT 8, "MS Shell Dlg" BEGIN - CONTROL "החל מאפיינים לחון הנוכחי בלבד", IDC_RADIO_APPLY_CURRENT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 12, 207, 10 + CONTROL "החל מאפיינים לחלון הנוכחי בלבד", IDC_RADIO_APPLY_CURRENT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 12, 207, 10 CONTROL "שמור שינויים לחלונות עם אותה כותרת", IDC_RADIO_APPLY_ALL, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 31, 207, 10 PUSHBUTTON "אישור", IDOK, 58, 58, 50, 14, WS_VISIBLE PUSHBUTTON "ביטול", IDCANCEL, 114, 58, 50, 14, WS_VISIBLE @@ -144,5 +144,5 @@ BEGIN IDS_CPLNAME "שורת הפקודה" IDS_CPLDESCRIPTION "Configures console properties." IDS_APPLY_SHORTCUT_ALL "Modify &shortcut that started this window" - IDS_RASTERFONTS "Raster Fonts" + IDS_RASTERFONTS "גופני מפת סיביות" END diff --git a/dll/cpl/desk/lang/he-IL.rc b/dll/cpl/desk/lang/he-IL.rc index 9e22c93c2cd..eca3f2e4c18 100644 --- a/dll/cpl/desk/lang/he-IL.rc +++ b/dll/cpl/desk/lang/he-IL.rc @@ -161,32 +161,32 @@ END IDR_PREVIEW_MENU MENU BEGIN - MENUITEM "Normal", ID_MENU_NORMAL - MENUITEM "Disabled", ID_MENU_DISABLED - MENUITEM "Selected", ID_MENU_SELECTED + MENUITEM "רגיל", ID_MENU_NORMAL + MENUITEM "מופסק", ID_MENU_DISABLED + MENUITEM "נבחר", ID_MENU_SELECTED END IDM_MONITOR_MENU MENU BEGIN POPUP "" BEGIN - MENUITEM "&Attached", ID_MENU_ATTACHED - MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM "מחובר", ID_MENU_ATTACHED + MENUITEM "ראשי", ID_MENU_PRIMARY MENUITEM SEPARATOR - MENUITEM "&Identify", ID_MENU_IDENTIFY - MENUITEM "P&roperties", ID_MENU_PROPERTIES + MENUITEM "זהה", ID_MENU_IDENTIFY + MENUITEM "מאפיינים", ID_MENU_PROPERTIES END END STRINGTABLE DISCARDABLE BEGIN - IDS_SLIDEEFFECT "Slide effect" - IDS_FADEEFFECT "Fade effect" + IDS_SLIDEEFFECT "אפקט גלילה" + IDS_FADEEFFECT "אפקט עמעום" END STRINGTABLE DISCARDABLE BEGIN - IDS_STANDARDEFFECT "Standard" + IDS_STANDARDEFFECT "רגיל" IDS_CLEARTYPEEFFECT "ClearType" END @@ -211,9 +211,9 @@ STRINGTABLE DISCARDABLE BEGIN IDS_COLOR_4BIT "16 צבעים" IDS_COLOR_8BIT "256 צבעים" - IDS_COLOR_16BIT "רמת צבעים גבוהה (16 Bit)" - IDS_COLOR_24BIT "צבע אמיתי (24 Bit)" - IDS_COLOR_32BIT "צבע אמיתי (32 Bit)" + IDS_COLOR_16BIT "רמת צבעים גבוהה (16 סיביות)" + IDS_COLOR_24BIT "צבע אמיתי (24 סיביות)" + IDS_COLOR_32BIT "צבע אמיתי (32 סיביות)" IDS_PIXEL "%lux%lu פיקסל" END diff --git a/dll/cpl/desk/screensaver.c b/dll/cpl/desk/screensaver.c index 9420e008b52..dfd63614e91 100644 --- a/dll/cpl/desk/screensaver.c +++ b/dll/cpl/desk/screensaver.c @@ -473,7 +473,7 @@ SetScreenSaver(HWND hwndDlg, PDATA pData) { INT Time; BOOL bRet; - TCHAR szTime[256], Sec; + TCHAR Sec; UINT Ret; /* Set the screensaver */ @@ -485,36 +485,18 @@ SetScreenSaver(HWND hwndDlg, PDATA pData) REG_SZ, (PBYTE)pData->ScreenSaverItems[pData->Selection].szFilename, _tcslen(pData->ScreenSaverItems[pData->Selection].szFilename) * sizeof(TCHAR)); + + SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, TRUE, 0, SPIF_UPDATEINIFILE); } else { /* Windows deletes the value if no screensaver is set */ RegDeleteValue(regKey, _T("SCRNSAVE.EXE")); DeleteMode = TRUE; + + SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE, 0, SPIF_UPDATEINIFILE); } - /* set the screensaver time delay */ - Time = GetDlgItemInt(hwndDlg, - IDC_SCREENS_TIMEDELAY, - &bRet, - FALSE); - if (Time == 0) - Time = 60; - else - Time *= 60; - - _itot(Time, szTime, 10); - RegSetValueEx(regKey, - _T("ScreenSaveTimeOut"), - 0, - REG_SZ, - (PBYTE)szTime, - _tcslen(szTime) * sizeof(TCHAR)); - - if (DeleteMode) Time = 0; - - SystemParametersInfoW(SPI_SETSCREENSAVETIMEOUT, Time, 0, SPIF_SENDCHANGE); - /* Set the secure value */ Ret = SendDlgItemMessage(hwndDlg, IDC_SCREENS_USEPASSCHK, @@ -529,6 +511,18 @@ SetScreenSaver(HWND hwndDlg, PDATA pData) (PBYTE)&Sec, sizeof(TCHAR)); + /* Set the screensaver time delay */ + Time = GetDlgItemInt(hwndDlg, + IDC_SCREENS_TIMEDELAY, + &bRet, + FALSE); + if (Time == 0) + Time = 60; + else + Time *= 60; + + SystemParametersInfoW(SPI_SETSCREENSAVETIMEOUT, Time, 0, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE); + RegCloseKey(regKey); } } @@ -735,7 +729,6 @@ ScreenSaverPageProc(HWND hwndDlg, { if (command == BN_CLICKED) { - MessageBox(NULL, TEXT("Feature not yet implemented"), TEXT("Sorry"), MB_OK); PropSheet_Changed(GetParent(hwndDlg), hwndDlg); } break; @@ -758,16 +751,14 @@ ScreenSaverPageProc(HWND hwndDlg, case PSN_SETACTIVE: { - /* Activate screen saver support */ - SystemParametersInfoW(SPI_SETSCREENSAVEACTIVE, TRUE, 0, SPIF_SENDCHANGE); + /* Enable screensaver preview support */ SetScreenSaverPreviewBox(hwndDlg, pData); break; } case PSN_KILLACTIVE: { - /* Disable screensaver support */ - SystemParametersInfoW(SPI_SETSCREENSAVEACTIVE, FALSE, 0, SPIF_SENDCHANGE); + /* Kill running preview screensaver */ if (pData->PrevWindowPi.hProcess) { TerminateProcess(pData->PrevWindowPi.hProcess, 0); diff --git a/dll/cpl/hotplug/CMakeLists.txt b/dll/cpl/hotplug/CMakeLists.txt new file mode 100644 index 00000000000..c117ef72802 --- /dev/null +++ b/dll/cpl/hotplug/CMakeLists.txt @@ -0,0 +1,26 @@ + + +spec2def(hotplug.dll hotplug.spec) + +list(APPEND SOURCE + hotplug.c + enum.c + hotplug.rc + ${CMAKE_CURRENT_BINARY_DIR}/hotplug.def) + +add_library(hotplug SHARED ${SOURCE}) + +set_module_type(hotplug win32dll UNICODE) + +add_importlibs(hotplug + msvcrt + user32 + gdi32 + advapi32 + ntdll + setupapi + comctl32 + kernel32) + +add_pch(hotplug hotplug.h) +add_cd_file(TARGET hotplug DESTINATION reactos/system32 FOR all) diff --git a/dll/cpl/hotplug/enum.c b/dll/cpl/hotplug/enum.c new file mode 100644 index 00000000000..f63d8746b7b --- /dev/null +++ b/dll/cpl/hotplug/enum.c @@ -0,0 +1,7 @@ +/* + * PROJECT: Safely Remove Hardware Applet + * LICENSE: GPL - See COPYING in the top level directory + * FILE: dll/cpl/hotplug/hotplug.c + * PURPOSE: device enumeration + * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org) + */ diff --git a/dll/cpl/hotplug/hotplug.c b/dll/cpl/hotplug/hotplug.c new file mode 100644 index 00000000000..733e16c0de6 --- /dev/null +++ b/dll/cpl/hotplug/hotplug.c @@ -0,0 +1,87 @@ +/* +* PROJECT: Safely Remove Hardware Applet +* LICENSE: GPL - See COPYING in the top level directory +* FILE: dll/cpl/hotplug/hotplug.c +* PURPOSE: applet initialization +* PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org) +*/ + +#include "hotplug.h" + +// globals +HINSTANCE hApplet = 0; + +/* Applets */ +APPLET Applets[NUM_APPLETS] = +{ + {IDC_CPLICON, IDS_CPLNAME, IDS_CPLDESCRIPTION, InitApplet} +}; + + +LONG +APIENTRY +InitApplet( + HWND hwnd, + UINT uMsg, + LPARAM wParam, + LPARAM lParam) +{ + // TODO + return FALSE; +} + + +LONG +CALLBACK +CPlApplet( + HWND hwndCPl, + UINT uMsg, + LPARAM lParam1, + LPARAM lParam2) +{ + switch(uMsg) + { + case CPL_INIT: + { + return TRUE; + } + case CPL_GETCOUNT: + { + return NUM_APPLETS; + } + case CPL_INQUIRE: + { + CPLINFO *CPlInfo = (CPLINFO*)lParam2; + CPlInfo->idIcon = Applets[0].idIcon; + CPlInfo->idName = Applets[0].idName; + CPlInfo->idInfo = Applets[0].idDescription; + break; + } + case CPL_DBLCLK: + { + InitApplet(hwndCPl, uMsg, lParam1, lParam2); + break; + } + } + return FALSE; +} + + +INT +WINAPI +DllMain( + HINSTANCE hinstDLL, + DWORD dwReason, + LPVOID lpvReserved) +{ + UNREFERENCED_PARAMETER(lpvReserved); + + switch(dwReason) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + hApplet = hinstDLL; + break; + } + return TRUE; +} diff --git a/dll/cpl/hotplug/hotplug.h b/dll/cpl/hotplug/hotplug.h new file mode 100644 index 00000000000..b21d59a0235 --- /dev/null +++ b/dll/cpl/hotplug/hotplug.h @@ -0,0 +1,41 @@ +#pragma once + +#define WIN32_NO_STATUS +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "resource.h" + +// Globals +extern HINSTANCE hApplet; + +// defines +#define NUM_APPLETS (1) + +// global structures +typedef struct +{ + int idIcon; + int idName; + int idDescription; + APPLET_PROC AppletProc; +}APPLET, *PAPPLET; + + + +// hotplug.c +LONG +APIENTRY +InitApplet( + HWND hwnd, + UINT uMsg, + LPARAM wParam, + LPARAM lParam); diff --git a/dll/cpl/hotplug/hotplug.rc b/dll/cpl/hotplug/hotplug.rc new file mode 100644 index 00000000000..bdbe51a06fb --- /dev/null +++ b/dll/cpl/hotplug/hotplug.rc @@ -0,0 +1,20 @@ +/* + * PROJECT: ReactOS Safely Remove Hardware Applet + * LICENSE: GPL - See COPYING in the top level directory + * FILE: dll/cpl/hotplug/hotplug.rc + * PURPOSE: main resource file + * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org) + */ + +#include +#include + +#include "resource.h" + +#define REACTOS_VERSION_DLL +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Hardware Safe Removal Support\0" +#define REACTOS_STR_INTERNAL_NAME "hotplug\0" +#define REACTOS_STR_ORIGINAL_FILENAME "hotplug.dll\0" +#include + +#include "rsrc.rc" diff --git a/dll/cpl/hotplug/hotplug.spec b/dll/cpl/hotplug/hotplug.spec new file mode 100644 index 00000000000..8ec310bac27 --- /dev/null +++ b/dll/cpl/hotplug/hotplug.spec @@ -0,0 +1,12 @@ +@ stdcall CPlApplet(ptr long ptr ptr) +;@ stub HotPlugChildWithInvalidIdW +;@ stub HotPlugDriverBlockedW +;@ stub HotPlugEjectDevice +;@ stub HotPlugEjectDeviceEx +;@ stub HotPlugEjectVetoedW +;@ stub HotPlugHibernateVetoedW +;@ stub HotPlugRemovealVetoedW +;@ stub HotPlugSafeRemovalDriveNotificationW +;@ stub HotPlugSafeRemovalNotificationW +;@ stub HotPlugStandyVetoedW +;@ stub HotPlugWarmEjectVetoedW diff --git a/dll/cpl/hotplug/resource.h b/dll/cpl/hotplug/resource.h new file mode 100644 index 00000000000..1480b134cce --- /dev/null +++ b/dll/cpl/hotplug/resource.h @@ -0,0 +1,11 @@ + +// dialog ids +#define IDD_SAFE_REMOVE_HARDWARE_DIALOG 100 +#define IDD_CONFIRM_STOP_HARDWARE_DIALOG 101 + +// resource strings ids +#define IDS_CPLNAME 1000 +#define IDS_CPLDESCRIPTION 1001 + +// control ids +#define IDC_CPLICON 10000 diff --git a/dll/cpl/hotplug/rsrc.rc b/dll/cpl/hotplug/rsrc.rc new file mode 100644 index 00000000000..14b2a29a79f --- /dev/null +++ b/dll/cpl/hotplug/rsrc.rc @@ -0,0 +1,8 @@ +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL + +#ifdef LANGUAGE_DE_DE + #include "lang/de-DE.rc" +#endif +#ifdef LANGUAGE_EN_US + #include "lang/en-US.rc" +#endif diff --git a/dll/cpl/joy/rsrc.rc b/dll/cpl/joy/rsrc.rc index 9a8ed658b43..adbea9eda08 100644 --- a/dll/cpl/joy/rsrc.rc +++ b/dll/cpl/joy/rsrc.rc @@ -19,9 +19,6 @@ #ifdef LANGUAGE_FR_FR #include "lang/fr-FR.rc" #endif -#ifdef LANGUAGE_HE_IL - #include "lang/he-IL.rc" -#endif #ifdef LANGUAGE_IT_IT #include "lang/it-IT.rc" #endif @@ -37,6 +34,9 @@ // UTF-8 #pragma code_page(65001) +#ifdef LANGUAGE_HE_IL + #include "lang/he-IL.rc" +#endif #ifdef LANGUAGE_PL_PL #include "lang/pl-PL.rc" #endif diff --git a/dll/cpl/main/rsrc.rc b/dll/cpl/main/rsrc.rc index 9c6c8a3a3f7..1fecf8ad7d6 100644 --- a/dll/cpl/main/rsrc.rc +++ b/dll/cpl/main/rsrc.rc @@ -19,9 +19,6 @@ #ifdef LANGUAGE_FR_FR #include "lang/fr-FR.rc" #endif -#ifdef LANGUAGE_HE_IL - #include "lang/he-IL.rc" -#endif #ifdef LANGUAGE_HU_HU #include "lang/hu-HU.rc" #endif @@ -49,6 +46,9 @@ // UTF-8 #pragma code_page(65001) +#ifdef LANGUAGE_HE_IL + #include "lang/he-IL.rc" +#endif #ifdef LANGUAGE_PL_PL #include "lang/pl-PL.rc" #endif diff --git a/dll/cpl/powercfg/rsrc.rc b/dll/cpl/powercfg/rsrc.rc index 6e9f8715e0f..8cc4a1c3422 100644 --- a/dll/cpl/powercfg/rsrc.rc +++ b/dll/cpl/powercfg/rsrc.rc @@ -19,9 +19,6 @@ #ifdef LANGUAGE_FR_FR #include "lang/fr-FR.rc" #endif -#ifdef LANGUAGE_HE_IL - #include "lang/he-IL.rc" -#endif #ifdef LANGUAGE_ID_ID #include "lang/id-ID.rc" #endif @@ -49,6 +46,9 @@ // UTF-8 #pragma code_page(65001) +#ifdef LANGUAGE_HE_IL + #include "lang/he-IL.rc" +#endif #ifdef LANGUAGE_PL_PL #include "lang/pl-PL.rc" #endif diff --git a/dll/cpl/usrmgr/rsrc.rc b/dll/cpl/usrmgr/rsrc.rc index cd588eaa568..42491a2434d 100644 --- a/dll/cpl/usrmgr/rsrc.rc +++ b/dll/cpl/usrmgr/rsrc.rc @@ -13,9 +13,6 @@ // UTF-8 #pragma code_page(65001) -#ifdef LANGUAGE_HE_IL - #include "lang/he-IL.rc" -#endif #ifdef LANGUAGE_PL_PL #include "lang/pl-PL.rc" #endif diff --git a/dll/directx/dinput8/CMakeLists.txt b/dll/directx/dinput8/CMakeLists.txt index 52a55fbdcf0..2586837c218 100644 --- a/dll/directx/dinput8/CMakeLists.txt +++ b/dll/directx/dinput8/CMakeLists.txt @@ -13,7 +13,7 @@ add_library(dinput8 SHARED version.rc ${CMAKE_CURRENT_BINARY_DIR}/dinput8.def) -set_module_type(dinput8 win32dll UNICODE ENTRYPOINT 0) +set_module_type(dinput8 win32dll UNICODE) target_link_libraries(dinput8 dxguid @@ -21,6 +21,7 @@ target_link_libraries(dinput8 wine) add_importlibs(dinput8 + msvcrt user32 advapi32 ole32 diff --git a/dll/directx/dmusic/CMakeLists.txt b/dll/directx/dmusic/CMakeLists.txt index e8fbbaa703d..21928a85db0 100644 --- a/dll/directx/dmusic/CMakeLists.txt +++ b/dll/directx/dmusic/CMakeLists.txt @@ -23,7 +23,7 @@ add_library(dmusic SHARED version.rc ${CMAKE_CURRENT_BINARY_DIR}/dmusic.def) -set_module_type(dmusic win32dll UNICODE ENTRYPOINT 0) +set_module_type(dmusic win32dll UNICODE) target_link_libraries(dmusic dxguid @@ -31,6 +31,7 @@ target_link_libraries(dmusic wine) add_importlibs(dmusic + msvcrt user32 advapi32 ole32 diff --git a/dll/directx/dplay/CMakeLists.txt b/dll/directx/dplay/CMakeLists.txt index 6f0b9da9500..86dee460725 100644 --- a/dll/directx/dplay/CMakeLists.txt +++ b/dll/directx/dplay/CMakeLists.txt @@ -9,19 +9,21 @@ add_library(dplay SHARED version.rc ${CMAKE_CURRENT_BINARY_DIR}/dplay.def) -set_module_type(dplay win32dll UNICODE ENTRYPOINT 0) +set_module_type(dplay win32dll UNICODE) target_link_libraries(dplay uuid wine) add_importlibs(dplay + msvcrt user32 advapi32 ole32 winmm dinput dplayx + kernel32 ntdll) add_dependencies(dplay psdk) diff --git a/dll/directx/ksproxy/CMakeLists.txt b/dll/directx/ksproxy/CMakeLists.txt index 8a4b7777997..65d5ca90163 100644 --- a/dll/directx/ksproxy/CMakeLists.txt +++ b/dll/directx/ksproxy/CMakeLists.txt @@ -27,7 +27,7 @@ add_library(ksproxy SHARED ${SOURCE} ksproxy.rc) -set_module_type(ksproxy win32dll ENTRYPOINT 0) +set_module_type(ksproxy win32dll) set_target_properties(ksproxy PROPERTIES SUFFIX ".ax") if(MSVC) diff --git a/dll/directx/msdmo/CMakeLists.txt b/dll/directx/msdmo/CMakeLists.txt index 3958363bed4..346b5df10b8 100644 --- a/dll/directx/msdmo/CMakeLists.txt +++ b/dll/directx/msdmo/CMakeLists.txt @@ -12,11 +12,12 @@ add_library(msdmo SHARED rsrc.rc ${CMAKE_CURRENT_BINARY_DIR}/msdmo.def) -set_module_type(msdmo win32dll ENTRYPOINT 0 UNICODE) +set_module_type(msdmo win32dll UNICODE) target_link_libraries(msdmo uuid wine mediaobj_guid) add_importlibs(msdmo + msvcrt user32 advapi32 ole32 diff --git a/dll/directx/wine/d3d8/buffer.c b/dll/directx/wine/d3d8/buffer.c index 2a54efbc5bf..311f60e769f 100644 --- a/dll/directx/wine/d3d8/buffer.c +++ b/dll/directx/wine/d3d8/buffer.c @@ -34,7 +34,7 @@ static HRESULT WINAPI d3d8_vertexbuffer_QueryInterface(IDirect3DVertexBuffer8 *i || IsEqualGUID(riid, &IID_IDirect3DResource8) || IsEqualGUID(riid, &IID_IUnknown)) { - IUnknown_AddRef(iface); + IDirect3DVertexBuffer8_AddRef(iface); *object = iface; return S_OK; } @@ -302,7 +302,7 @@ HRESULT vertexbuffer_init(struct d3d8_vertexbuffer *buffer, struct d3d8_device * } buffer->parent_device = &device->IDirect3DDevice8_iface; - IUnknown_AddRef(buffer->parent_device); + IDirect3DDevice8_AddRef(buffer->parent_device); return D3D_OK; } @@ -329,7 +329,7 @@ static HRESULT WINAPI d3d8_indexbuffer_QueryInterface(IDirect3DIndexBuffer8 *ifa || IsEqualGUID(riid, &IID_IDirect3DResource8) || IsEqualGUID(riid, &IID_IUnknown)) { - IUnknown_AddRef(iface); + IDirect3DIndexBuffer8_AddRef(iface); *object = iface; return S_OK; } @@ -596,7 +596,7 @@ HRESULT indexbuffer_init(struct d3d8_indexbuffer *buffer, struct d3d8_device *de } buffer->parent_device = &device->IDirect3DDevice8_iface; - IUnknown_AddRef(buffer->parent_device); + IDirect3DDevice8_AddRef(buffer->parent_device); return D3D_OK; } diff --git a/dll/directx/wine/d3d8/d3d8_main.c b/dll/directx/wine/d3d8/d3d8_main.c index f3b162565f5..fcfef735825 100644 --- a/dll/directx/wine/d3d8/d3d8_main.c +++ b/dll/directx/wine/d3d8/d3d8_main.c @@ -42,10 +42,7 @@ IDirect3D8 * WINAPI DECLSPEC_HOTPATCH Direct3DCreate8(UINT sdk_version) TRACE("sdk_version %#x.\n", sdk_version); if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)))) - { - ERR("Failed to allocate d3d8 object memory.\n"); return NULL; - } if (!d3d8_init(object)) { diff --git a/dll/directx/wine/d3d8/d3d8_private.h b/dll/directx/wine/d3d8/d3d8_private.h index 2f16b0f3af1..94482cc8720 100644 --- a/dll/directx/wine/d3d8/d3d8_private.h +++ b/dll/directx/wine/d3d8/d3d8_private.h @@ -162,6 +162,14 @@ struct d3d8_device struct FvfToDecl *decls; UINT numConvertedDecls, declArraySize; + /* User data draws */ + struct wined3d_buffer *vertex_buffer; + UINT vertex_buffer_size; + UINT vertex_buffer_pos; + struct wined3d_buffer *index_buffer; + UINT index_buffer_size; + UINT index_buffer_pos; + /* Avoids recursion with nested ReleaseRef to 0 */ BOOL inDestruction; BOOL lost; @@ -207,9 +215,9 @@ struct d3d8_surface IUnknown *forwardReference; }; -HRESULT surface_init(struct d3d8_surface *surface, struct d3d8_device *device, - UINT width, UINT height, D3DFORMAT format, BOOL lockable, BOOL discard, UINT level, - DWORD usage, D3DPOOL pool, D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality) DECLSPEC_HIDDEN; +HRESULT surface_init(struct d3d8_surface *surface, struct d3d8_device *device, UINT width, UINT height, + D3DFORMAT format, BOOL lockable, BOOL discard, DWORD usage, D3DPOOL pool, + D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality) DECLSPEC_HIDDEN; struct d3d8_surface *unsafe_impl_from_IDirect3DSurface8(IDirect3DSurface8 *iface) DECLSPEC_HIDDEN; struct d3d8_vertexbuffer diff --git a/dll/directx/wine/d3d8/device.c b/dll/directx/wine/d3d8/device.c index 4b5956f8a8c..2996b5aa349 100644 --- a/dll/directx/wine/d3d8/device.c +++ b/dll/directx/wine/d3d8/device.c @@ -307,7 +307,7 @@ static HRESULT WINAPI d3d8_device_QueryInterface(IDirect3DDevice8 *iface, REFIID if (IsEqualGUID(riid, &IID_IDirect3DDevice8) || IsEqualGUID(riid, &IID_IUnknown)) { - IUnknown_AddRef(iface); + IDirect3DDevice8_AddRef(iface); *out = iface; return S_OK; } @@ -357,6 +357,11 @@ static ULONG WINAPI d3d8_device_Release(IDirect3DDevice8 *iface) } HeapFree(GetProcessHeap(), 0, device->decls); + if (device->vertex_buffer) + wined3d_buffer_decref(device->vertex_buffer); + if (device->index_buffer) + wined3d_buffer_decref(device->index_buffer); + wined3d_device_uninit_3d(device->wined3d_device); wined3d_device_release_focus_window(device->wined3d_device); wined3d_device_decref(device->wined3d_device); @@ -479,16 +484,15 @@ static HRESULT WINAPI d3d8_device_GetCreationParameters(IDirect3DDevice8 *iface, D3DDEVICE_CREATION_PARAMETERS *parameters) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - HRESULT hr; TRACE("iface %p, parameters %p.\n", iface, parameters); wined3d_mutex_lock(); - hr = wined3d_device_get_creation_parameters(device->wined3d_device, + wined3d_device_get_creation_parameters(device->wined3d_device, (struct wined3d_device_creation_parameters *)parameters); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_SetCursorProperties(IDirect3DDevice8 *iface, @@ -546,13 +550,12 @@ static HRESULT WINAPI d3d8_device_CreateAdditionalSwapChain(IDirect3DDevice8 *if struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); struct wined3d_swapchain_desc desc; struct d3d8_swapchain *object; - HRESULT hr; TRACE("iface %p, present_parameters %p, swapchain %p.\n", iface, present_parameters, swapchain); wined3d_swapchain_desc_from_present_parameters(&desc, present_parameters); - if (SUCCEEDED(hr = d3d8_swapchain_create(device, &desc, &object))) + if (SUCCEEDED(d3d8_swapchain_create(device, &desc, &object))) *swapchain = &object->IDirect3DSwapChain8_iface; present_parameters_from_wined3d_swapchain_desc(present_parameters, &desc); @@ -597,10 +600,25 @@ static HRESULT WINAPI d3d8_device_Reset(IDirect3DDevice8 *iface, TRACE("iface %p, present_parameters %p.\n", iface, present_parameters); wined3d_mutex_lock(); - wined3d_swapchain_desc_from_present_parameters(&swapchain_desc, present_parameters); - if (SUCCEEDED(hr = wined3d_device_reset(device->wined3d_device, &swapchain_desc, NULL, reset_enum_callback))) + + if (device->vertex_buffer) { - hr = wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_POINTSIZE_MIN, 0); + wined3d_buffer_decref(device->vertex_buffer); + device->vertex_buffer = NULL; + device->vertex_buffer_size = 0; + } + if (device->index_buffer) + { + wined3d_buffer_decref(device->index_buffer); + device->index_buffer = NULL; + device->index_buffer_size = 0; + } + + wined3d_swapchain_desc_from_present_parameters(&swapchain_desc, present_parameters); + if (SUCCEEDED(hr = wined3d_device_reset(device->wined3d_device, &swapchain_desc, + NULL, reset_enum_callback, TRUE))) + { + wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_POINTSIZE_MIN, 0); device->lost = FALSE; } else @@ -648,7 +666,6 @@ static HRESULT WINAPI d3d8_device_GetBackBuffer(IDirect3DDevice8 *iface, surface_impl = wined3d_surface_get_parent(wined3d_surface); *backbuffer = &surface_impl->IDirect3DSurface8_iface; IDirect3DSurface8_AddRef(*backbuffer); - wined3d_surface_decref(wined3d_surface); } wined3d_mutex_unlock(); @@ -706,10 +723,7 @@ static HRESULT WINAPI d3d8_device_CreateTexture(IDirect3DDevice8 *iface, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate texture memory.\n"); return D3DERR_OUTOFVIDEOMEMORY; - } hr = texture_init(object, device, width, height, levels, usage, format, pool); if (FAILED(hr)) @@ -738,10 +752,7 @@ static HRESULT WINAPI d3d8_device_CreateVolumeTexture(IDirect3DDevice8 *iface, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate volume texture memory.\n"); return D3DERR_OUTOFVIDEOMEMORY; - } hr = volumetexture_init(object, device, width, height, depth, levels, usage, format, pool); if (FAILED(hr)) @@ -769,10 +780,7 @@ static HRESULT WINAPI d3d8_device_CreateCubeTexture(IDirect3DDevice8 *iface, UIN object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate cube texture memory.\n"); return D3DERR_OUTOFVIDEOMEMORY; - } hr = cubetexture_init(object, device, edge_length, levels, usage, format, pool); if (FAILED(hr)) @@ -800,10 +808,7 @@ static HRESULT WINAPI d3d8_device_CreateVertexBuffer(IDirect3DDevice8 *iface, UI object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate buffer memory.\n"); return D3DERR_OUTOFVIDEOMEMORY; - } hr = vertexbuffer_init(object, device, size, usage, fvf, pool); if (FAILED(hr)) @@ -831,10 +836,7 @@ static HRESULT WINAPI d3d8_device_CreateIndexBuffer(IDirect3DDevice8 *iface, UIN object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate buffer memory.\n"); return D3DERR_OUTOFVIDEOMEMORY; - } hr = indexbuffer_init(object, device, size, usage, format, pool); if (FAILED(hr)) @@ -850,17 +852,16 @@ static HRESULT WINAPI d3d8_device_CreateIndexBuffer(IDirect3DDevice8 *iface, UIN return D3D_OK; } -static HRESULT d3d8_device_CreateSurface(struct d3d8_device *device, UINT width, - UINT height, D3DFORMAT format, BOOL lockable, BOOL discard, UINT level, - IDirect3DSurface8 **surface, UINT usage, D3DPOOL pool, D3DMULTISAMPLE_TYPE multisample_type, - DWORD multisample_quality) +static HRESULT d3d8_device_create_surface(struct d3d8_device *device, UINT width, UINT height, + D3DFORMAT format, BOOL lockable, BOOL discard, IDirect3DSurface8 **surface, UINT usage, + D3DPOOL pool, D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality) { struct d3d8_surface *object; HRESULT hr; - TRACE("device %p, width %u, height %u, format %#x, lockable %#x, discard %#x, level %u, surface %p,\n" + TRACE("device %p, width %u, height %u, format %#x, lockable %#x, discard %#x, surface %p,\n" "\tusage %#x, pool %#x, multisample_type %#x, multisample_quality %u.\n", - device, width, height, format, lockable, discard, level, surface, + device, width, height, format, lockable, discard, surface, usage, pool, multisample_type, multisample_quality); if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)))) @@ -869,9 +870,8 @@ static HRESULT d3d8_device_CreateSurface(struct d3d8_device *device, UINT width, return D3DERR_OUTOFVIDEOMEMORY; } - hr = surface_init(object, device, width, height, format, lockable, discard, level, usage, - pool, multisample_type, multisample_quality); - if (FAILED(hr)) + if (FAILED(hr = surface_init(object, device, width, height, format, lockable, + discard, usage, pool, multisample_type, multisample_quality))) { WARN("Failed to initialize surface, hr %#x.\n", hr); HeapFree(GetProcessHeap(), 0, object); @@ -889,16 +889,12 @@ static HRESULT WINAPI d3d8_device_CreateRenderTarget(IDirect3DDevice8 *iface, UI IDirect3DSurface8 **surface) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - HRESULT hr; TRACE("iface %p, width %u, height %u, format %#x, multisample_type %#x, lockable %#x, surface %p.\n", iface, width, height, format, multisample_type, lockable, surface); - hr = d3d8_device_CreateSurface(device, width, height, format, lockable, - FALSE, 0, surface, D3DUSAGE_RENDERTARGET, D3DPOOL_DEFAULT, - multisample_type, 0); - - return hr; + return d3d8_device_create_surface(device, width, height, format, lockable, FALSE, + surface, D3DUSAGE_RENDERTARGET, D3DPOOL_DEFAULT, multisample_type, 0); } static HRESULT WINAPI d3d8_device_CreateDepthStencilSurface(IDirect3DDevice8 *iface, @@ -906,16 +902,13 @@ static HRESULT WINAPI d3d8_device_CreateDepthStencilSurface(IDirect3DDevice8 *if IDirect3DSurface8 **surface) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - HRESULT hr; TRACE("iface %p, width %u, height %u, format %#x, multisample_type %#x, surface %p.\n", iface, width, height, format, multisample_type, surface); /* TODO: Verify that Discard is false */ - hr = d3d8_device_CreateSurface(device, width, height, format, TRUE, FALSE, - 0, surface, D3DUSAGE_DEPTHSTENCIL, D3DPOOL_DEFAULT, multisample_type, 0); - - return hr; + return d3d8_device_create_surface(device, width, height, format, TRUE, FALSE, + surface, D3DUSAGE_DEPTHSTENCIL, D3DPOOL_DEFAULT, multisample_type, 0); } /* IDirect3DDevice8Impl::CreateImageSurface returns surface with pool type SYSTEMMEM */ @@ -923,15 +916,12 @@ static HRESULT WINAPI d3d8_device_CreateImageSurface(IDirect3DDevice8 *iface, UI UINT height, D3DFORMAT format, IDirect3DSurface8 **surface) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - HRESULT hr; TRACE("iface %p, width %u, height %u, format %#x, surface %p.\n", iface, width, height, format, surface); - hr = d3d8_device_CreateSurface(device, width, height, format, TRUE, FALSE, - 0, surface, 0, D3DPOOL_SYSTEMMEM, D3DMULTISAMPLE_NONE, 0); - - return hr; + return d3d8_device_create_surface(device, width, height, format, TRUE, FALSE, + surface, 0, D3DPOOL_SYSTEMMEM, D3DMULTISAMPLE_NONE, 0); } static HRESULT WINAPI d3d8_device_CopyRects(IDirect3DDevice8 *iface, @@ -1085,7 +1075,7 @@ static HRESULT WINAPI d3d8_device_SetRenderTarget(IDirect3DDevice8 *iface, struct d3d8_surface *rt_impl = unsafe_impl_from_IDirect3DSurface8(render_target); struct d3d8_surface *ds_impl = unsafe_impl_from_IDirect3DSurface8(depth_stencil); struct wined3d_surface *original_ds = NULL; - HRESULT hr; + HRESULT hr = D3D_OK; TRACE("iface %p, render_target %p, depth_stencil %p.\n", iface, render_target, depth_stencil); @@ -1100,14 +1090,12 @@ static HRESULT WINAPI d3d8_device_SetRenderTarget(IDirect3DDevice8 *iface, /* If no render target is passed in check the size against the current RT */ if (!render_target) { - hr = wined3d_device_get_render_target(device->wined3d_device, 0, &original_rt); - if (FAILED(hr) || !original_rt) + if (!(original_rt = wined3d_device_get_render_target(device->wined3d_device, 0))) { wined3d_mutex_unlock(); - return hr; + return D3DERR_NOTFOUND; } wined3d_resource = wined3d_surface_get_resource(original_rt); - wined3d_surface_decref(original_rt); } else wined3d_resource = wined3d_surface_get_resource(rt_impl->wined3d_surface); @@ -1124,19 +1112,14 @@ static HRESULT WINAPI d3d8_device_SetRenderTarget(IDirect3DDevice8 *iface, } } - hr = wined3d_device_get_depth_stencil(device->wined3d_device, &original_ds); - if (hr == WINED3D_OK || hr == WINED3DERR_NOTFOUND) + original_ds = wined3d_device_get_depth_stencil(device->wined3d_device); + wined3d_device_set_depth_stencil(device->wined3d_device, ds_impl ? ds_impl->wined3d_surface : NULL); + if (render_target) { - hr = wined3d_device_set_depth_stencil(device->wined3d_device, ds_impl ? ds_impl->wined3d_surface : NULL); - if (SUCCEEDED(hr) && render_target) - { - hr = wined3d_device_set_render_target(device->wined3d_device, 0, rt_impl->wined3d_surface, TRUE); - if (FAILED(hr)) - wined3d_device_set_depth_stencil(device->wined3d_device, original_ds); - } + hr = wined3d_device_set_render_target(device->wined3d_device, 0, rt_impl->wined3d_surface, TRUE); + if (FAILED(hr)) + wined3d_device_set_depth_stencil(device->wined3d_device, original_ds); } - if (original_ds) - wined3d_surface_decref(original_ds); wined3d_mutex_unlock(); @@ -1156,18 +1139,18 @@ static HRESULT WINAPI d3d8_device_GetRenderTarget(IDirect3DDevice8 *iface, IDire return D3DERR_INVALIDCALL; wined3d_mutex_lock(); - hr = wined3d_device_get_render_target(device->wined3d_device, 0, &wined3d_surface); - if (SUCCEEDED(hr) && wined3d_surface) + if ((wined3d_surface = wined3d_device_get_render_target(device->wined3d_device, 0))) { surface_impl = wined3d_surface_get_parent(wined3d_surface); *render_target = &surface_impl->IDirect3DSurface8_iface; IDirect3DSurface8_AddRef(*render_target); - wined3d_surface_decref(wined3d_surface); + hr = D3D_OK; } else { - ERR("Failed to get wined3d render target, hr %#x.\n", hr); + ERR("Failed to get wined3d render target.\n"); *render_target = NULL; + hr = D3DERR_NOTFOUND; } wined3d_mutex_unlock(); @@ -1179,7 +1162,7 @@ static HRESULT WINAPI d3d8_device_GetDepthStencilSurface(IDirect3DDevice8 *iface struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); struct wined3d_surface *wined3d_surface; struct d3d8_surface *surface_impl; - HRESULT hr; + HRESULT hr = D3D_OK; TRACE("iface %p, depth_stencil %p.\n", iface, depth_stencil); @@ -1187,18 +1170,15 @@ static HRESULT WINAPI d3d8_device_GetDepthStencilSurface(IDirect3DDevice8 *iface return D3DERR_INVALIDCALL; wined3d_mutex_lock(); - hr = wined3d_device_get_depth_stencil(device->wined3d_device, &wined3d_surface); - if (SUCCEEDED(hr)) + if ((wined3d_surface = wined3d_device_get_depth_stencil(device->wined3d_device))) { surface_impl = wined3d_surface_get_parent(wined3d_surface); *depth_stencil = &surface_impl->IDirect3DSurface8_iface; IDirect3DSurface8_AddRef(*depth_stencil); - wined3d_surface_decref(wined3d_surface); } else { - if (hr != WINED3DERR_NOTFOUND) - ERR("Failed to get wined3d depth stencil, hr %#x.\n", hr); + hr = WINED3DERR_NOTFOUND; *depth_stencil = NULL; } wined3d_mutex_unlock(); @@ -1261,108 +1241,101 @@ static HRESULT WINAPI d3d8_device_SetTransform(IDirect3DDevice8 *iface, D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - HRESULT hr; TRACE("iface %p, state %#x, matrix %p.\n", iface, state, matrix); /* Note: D3DMATRIX is compatible with struct wined3d_matrix. */ wined3d_mutex_lock(); - hr = wined3d_device_set_transform(device->wined3d_device, state, (const struct wined3d_matrix *)matrix); + wined3d_device_set_transform(device->wined3d_device, state, (const struct wined3d_matrix *)matrix); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_GetTransform(IDirect3DDevice8 *iface, D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - HRESULT hr; TRACE("iface %p, state %#x, matrix %p.\n", iface, state, matrix); /* Note: D3DMATRIX is compatible with struct wined3d_matrix. */ wined3d_mutex_lock(); - hr = wined3d_device_get_transform(device->wined3d_device, state, (struct wined3d_matrix *)matrix); + wined3d_device_get_transform(device->wined3d_device, state, (struct wined3d_matrix *)matrix); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_MultiplyTransform(IDirect3DDevice8 *iface, D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - HRESULT hr; TRACE("iface %p, state %#x, matrix %p.\n", iface, state, matrix); /* Note: D3DMATRIX is compatible with struct wined3d_matrix. */ wined3d_mutex_lock(); - hr = wined3d_device_multiply_transform(device->wined3d_device, state, (const struct wined3d_matrix *)matrix); + wined3d_device_multiply_transform(device->wined3d_device, state, (const struct wined3d_matrix *)matrix); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_SetViewport(IDirect3DDevice8 *iface, const D3DVIEWPORT8 *viewport) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - HRESULT hr; TRACE("iface %p, viewport %p.\n", iface, viewport); /* Note: D3DVIEWPORT8 is compatible with struct wined3d_viewport. */ wined3d_mutex_lock(); - hr = wined3d_device_set_viewport(device->wined3d_device, (const struct wined3d_viewport *)viewport); + wined3d_device_set_viewport(device->wined3d_device, (const struct wined3d_viewport *)viewport); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_GetViewport(IDirect3DDevice8 *iface, D3DVIEWPORT8 *viewport) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - HRESULT hr; TRACE("iface %p, viewport %p.\n", iface, viewport); /* Note: D3DVIEWPORT8 is compatible with struct wined3d_viewport. */ wined3d_mutex_lock(); - hr = wined3d_device_get_viewport(device->wined3d_device, (struct wined3d_viewport *)viewport); + wined3d_device_get_viewport(device->wined3d_device, (struct wined3d_viewport *)viewport); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_SetMaterial(IDirect3DDevice8 *iface, const D3DMATERIAL8 *material) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - HRESULT hr; TRACE("iface %p, material %p.\n", iface, material); /* Note: D3DMATERIAL8 is compatible with struct wined3d_material. */ wined3d_mutex_lock(); - hr = wined3d_device_set_material(device->wined3d_device, (const struct wined3d_material *)material); + wined3d_device_set_material(device->wined3d_device, (const struct wined3d_material *)material); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_GetMaterial(IDirect3DDevice8 *iface, D3DMATERIAL8 *material) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - HRESULT hr; TRACE("iface %p, material %p.\n", iface, material); /* Note: D3DMATERIAL8 is compatible with struct wined3d_material. */ wined3d_mutex_lock(); - hr = wined3d_device_get_material(device->wined3d_device, (struct wined3d_material *)material); + wined3d_device_get_material(device->wined3d_device, (struct wined3d_material *)material); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_SetLight(IDirect3DDevice8 *iface, DWORD index, const D3DLIGHT8 *light) @@ -1455,7 +1428,6 @@ static HRESULT WINAPI d3d8_device_SetRenderState(IDirect3DDevice8 *iface, D3DRENDERSTATETYPE state, DWORD value) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - HRESULT hr; TRACE("iface %p, state %#x, value %#x.\n", iface, state, value); @@ -1463,22 +1435,21 @@ static HRESULT WINAPI d3d8_device_SetRenderState(IDirect3DDevice8 *iface, switch (state) { case D3DRS_ZBIAS: - hr = wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_DEPTHBIAS, value); + wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_DEPTHBIAS, value); break; default: - hr = wined3d_device_set_render_state(device->wined3d_device, state, value); + wined3d_device_set_render_state(device->wined3d_device, state, value); } wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_GetRenderState(IDirect3DDevice8 *iface, D3DRENDERSTATETYPE state, DWORD *value) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - HRESULT hr; TRACE("iface %p, state %#x, value %p.\n", iface, state, value); @@ -1486,15 +1457,15 @@ static HRESULT WINAPI d3d8_device_GetRenderState(IDirect3DDevice8 *iface, switch (state) { case D3DRS_ZBIAS: - hr = wined3d_device_get_render_state(device->wined3d_device, WINED3D_RS_DEPTHBIAS, value); + *value = wined3d_device_get_render_state(device->wined3d_device, WINED3D_RS_DEPTHBIAS); break; default: - hr = wined3d_device_get_render_state(device->wined3d_device, state, value); + *value = wined3d_device_get_render_state(device->wined3d_device, state); } wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_BeginStateBlock(IDirect3DDevice8 *iface) @@ -1553,7 +1524,6 @@ static HRESULT WINAPI d3d8_device_ApplyStateBlock(IDirect3DDevice8 *iface, DWORD { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); struct wined3d_stateblock *stateblock; - HRESULT hr; TRACE("iface %p, token %#x.\n", iface, token); @@ -1568,17 +1538,16 @@ static HRESULT WINAPI d3d8_device_ApplyStateBlock(IDirect3DDevice8 *iface, DWORD wined3d_mutex_unlock(); return D3DERR_INVALIDCALL; } - hr = wined3d_stateblock_apply(stateblock); + wined3d_stateblock_apply(stateblock); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_CaptureStateBlock(IDirect3DDevice8 *iface, DWORD token) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); struct wined3d_stateblock *stateblock; - HRESULT hr; TRACE("iface %p, token %#x.\n", iface, token); @@ -1590,10 +1559,10 @@ static HRESULT WINAPI d3d8_device_CaptureStateBlock(IDirect3DDevice8 *iface, DWO wined3d_mutex_unlock(); return D3DERR_INVALIDCALL; } - hr = wined3d_stateblock_capture(stateblock); + wined3d_stateblock_capture(stateblock); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_DeleteStateBlock(IDirect3DDevice8 *iface, DWORD token) @@ -1700,7 +1669,6 @@ static HRESULT WINAPI d3d8_device_GetTexture(IDirect3DDevice8 *iface, DWORD stag struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); struct wined3d_texture *wined3d_texture; struct d3d8_texture *texture_impl; - HRESULT hr; TRACE("iface %p, stage %u, texture %p.\n", iface, stage, texture); @@ -1708,21 +1676,11 @@ static HRESULT WINAPI d3d8_device_GetTexture(IDirect3DDevice8 *iface, DWORD stag return D3DERR_INVALIDCALL; wined3d_mutex_lock(); - hr = wined3d_device_get_texture(device->wined3d_device, stage, &wined3d_texture); - if (FAILED(hr)) - { - WARN("Failed to get texture for stage %u, hr %#x.\n", stage, hr); - wined3d_mutex_unlock(); - *texture = NULL; - return hr; - } - - if (wined3d_texture) + if ((wined3d_texture = wined3d_device_get_texture(device->wined3d_device, stage))) { texture_impl = wined3d_texture_get_parent(wined3d_texture); *texture = &texture_impl->IDirect3DBaseTexture8_iface; IDirect3DBaseTexture8_AddRef(*texture); - wined3d_texture_decref(wined3d_texture); } else { @@ -1794,7 +1752,6 @@ static HRESULT WINAPI d3d8_device_GetTextureStageState(IDirect3DDevice8 *iface, { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); const struct tss_lookup *l; - HRESULT hr; TRACE("iface %p, stage %u, state %#x, value %p.\n", iface, stage, Type, value); @@ -1808,12 +1765,12 @@ static HRESULT WINAPI d3d8_device_GetTextureStageState(IDirect3DDevice8 *iface, wined3d_mutex_lock(); if (l->sampler_state) - hr = wined3d_device_get_sampler_state(device->wined3d_device, stage, l->state, value); + *value = wined3d_device_get_sampler_state(device->wined3d_device, stage, l->state); else - hr = wined3d_device_get_texture_stage_state(device->wined3d_device, stage, l->state, value); + *value = wined3d_device_get_texture_stage_state(device->wined3d_device, stage, l->state); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_SetTextureStageState(IDirect3DDevice8 *iface, @@ -1821,7 +1778,6 @@ static HRESULT WINAPI d3d8_device_SetTextureStageState(IDirect3DDevice8 *iface, { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); const struct tss_lookup *l; - HRESULT hr; TRACE("iface %p, stage %u, state %#x, value %#x.\n", iface, stage, type, value); @@ -1835,12 +1791,12 @@ static HRESULT WINAPI d3d8_device_SetTextureStageState(IDirect3DDevice8 *iface, wined3d_mutex_lock(); if (l->sampler_state) - hr = wined3d_device_set_sampler_state(device->wined3d_device, stage, l->state, value); + wined3d_device_set_sampler_state(device->wined3d_device, stage, l->state, value); else - hr = wined3d_device_set_texture_stage_state(device->wined3d_device, stage, l->state, value); + wined3d_device_set_texture_stage_state(device->wined3d_device, stage, l->state, value); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_ValidateDevice(IDirect3DDevice8 *iface, DWORD *pass_count) @@ -1868,12 +1824,12 @@ static HRESULT WINAPI d3d8_device_GetInfo(IDirect3DDevice8 *iface, static HRESULT WINAPI d3d8_device_SetPaletteEntries(IDirect3DDevice8 *iface, UINT palette_idx, const PALETTEENTRY *entries) { - FIXME("iface %p, palette_idx %u, entries %p unimplemented\n", iface, palette_idx, entries); + WARN("iface %p, palette_idx %u, entries %p unimplemented\n", iface, palette_idx, entries); /* GPUs stopped supporting palettized textures with the Shader Model 1 generation. Wined3d * does not have a d3d8/9-style palette API */ - return D3DERR_INVALIDCALL; + return D3D_OK; } static HRESULT WINAPI d3d8_device_GetPaletteEntries(IDirect3DDevice8 *iface, @@ -1886,9 +1842,9 @@ static HRESULT WINAPI d3d8_device_GetPaletteEntries(IDirect3DDevice8 *iface, static HRESULT WINAPI d3d8_device_SetCurrentTexturePalette(IDirect3DDevice8 *iface, UINT palette_idx) { - FIXME("iface %p, palette_idx %u unimplemented.\n", iface, palette_idx); + WARN("iface %p, palette_idx %u unimplemented.\n", iface, palette_idx); - return D3DERR_INVALIDCALL; + return D3D_OK; } static HRESULT WINAPI d3d8_device_GetCurrentTexturePalette(IDirect3DDevice8 *iface, UINT *palette_idx) @@ -1935,46 +1891,214 @@ static HRESULT WINAPI d3d8_device_DrawIndexedPrimitive(IDirect3DDevice8 *iface, return hr; } +static void STDMETHODCALLTYPE d3d8_null_wined3d_object_destroyed(void *parent) {} + +static const struct wined3d_parent_ops d3d8_null_wined3d_parent_ops = +{ + d3d8_null_wined3d_object_destroyed, +}; + +/* The caller is responsible for wined3d locking */ +static HRESULT d3d8_device_prepare_vertex_buffer(struct d3d8_device *device, UINT min_size) +{ + HRESULT hr; + + if (device->vertex_buffer_size < min_size || !device->vertex_buffer) + { + UINT size = max(device->vertex_buffer_size * 2, min_size); + struct wined3d_buffer *buffer; + + TRACE("Growing vertex buffer to %u bytes\n", size); + + hr = wined3d_buffer_create_vb(device->wined3d_device, size, WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY, + WINED3D_POOL_DEFAULT, NULL, &d3d8_null_wined3d_parent_ops, &buffer); + if (FAILED(hr)) + { + ERR("(%p) wined3d_buffer_create_vb failed with hr = %08x\n", device, hr); + return hr; + } + + if (device->vertex_buffer) + wined3d_buffer_decref(device->vertex_buffer); + + device->vertex_buffer = buffer; + device->vertex_buffer_size = size; + device->vertex_buffer_pos = 0; + } + return D3D_OK; +} + static HRESULT WINAPI d3d8_device_DrawPrimitiveUP(IDirect3DDevice8 *iface, D3DPRIMITIVETYPE primitive_type, UINT primitive_count, const void *data, UINT stride) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); HRESULT hr; + UINT vtx_count = vertex_count_from_primitive_count(primitive_type, primitive_count); + UINT size = vtx_count * stride; + UINT vb_pos, align; + BYTE *buffer_data; TRACE("iface %p, primitive_type %#x, primitive_count %u, data %p, stride %u.\n", iface, primitive_type, primitive_count, data, stride); - wined3d_mutex_lock(); - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type); - hr = wined3d_device_draw_primitive_up(device->wined3d_device, - vertex_count_from_primitive_count(primitive_type, primitive_count), - data, stride); - wined3d_mutex_unlock(); + if (!primitive_count) + { + WARN("primitive_count is 0, returning D3D_OK\n"); + return D3D_OK; + } + wined3d_mutex_lock(); + hr = d3d8_device_prepare_vertex_buffer(device, size); + if (FAILED(hr)) + goto done; + + vb_pos = device->vertex_buffer_pos; + align = vb_pos % stride; + if (align) align = stride - align; + if (vb_pos + size + align > device->vertex_buffer_size) + vb_pos = 0; + else + vb_pos += align; + + hr = wined3d_buffer_map(device->vertex_buffer, vb_pos, size, &buffer_data, + vb_pos ? WINED3D_MAP_NOOVERWRITE : WINED3D_MAP_DISCARD); + if (FAILED(hr)) + goto done; + memcpy(buffer_data, data, size); + wined3d_buffer_unmap(device->vertex_buffer); + device->vertex_buffer_pos = vb_pos + size; + + hr = wined3d_device_set_stream_source(device->wined3d_device, 0, device->vertex_buffer, 0, stride); + if (FAILED(hr)) + goto done; + + wined3d_device_set_primitive_type(device->wined3d_device, primitive_type); + hr = wined3d_device_draw_primitive(device->wined3d_device, vb_pos / stride, vtx_count); + wined3d_device_set_stream_source(device->wined3d_device, 0, NULL, 0, 0); + +done: + wined3d_mutex_unlock(); return hr; } +/* The caller is responsible for wined3d locking */ +static HRESULT d3d8_device_prepare_index_buffer(struct d3d8_device *device, UINT min_size) +{ + HRESULT hr; + + if (device->index_buffer_size < min_size || !device->index_buffer) + { + UINT size = max(device->index_buffer_size * 2, min_size); + struct wined3d_buffer *buffer; + + TRACE("Growing index buffer to %u bytes\n", size); + + hr = wined3d_buffer_create_ib(device->wined3d_device, size, WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY, + WINED3D_POOL_DEFAULT, NULL, &d3d8_null_wined3d_parent_ops, &buffer); + if (FAILED(hr)) + { + ERR("(%p) wined3d_buffer_create_ib failed with hr = %08x\n", device, hr); + return hr; + } + + if (device->index_buffer) + wined3d_buffer_decref(device->index_buffer); + + device->index_buffer = buffer; + device->index_buffer_size = size; + device->index_buffer_pos = 0; + } + return D3D_OK; +} + static HRESULT WINAPI d3d8_device_DrawIndexedPrimitiveUP(IDirect3DDevice8 *iface, - D3DPRIMITIVETYPE primitive_type, UINT min_vertex_idx, UINT index_count, + D3DPRIMITIVETYPE primitive_type, UINT min_vertex_idx, UINT vertex_count, UINT primitive_count, const void *index_data, D3DFORMAT index_format, const void *vertex_data, UINT vertex_stride) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); HRESULT hr; + BYTE *buffer_data; - TRACE("iface %p, primitive_type %#x, min_vertex_idx %u, index_count %u, primitive_count %u,\n" + UINT idx_count = vertex_count_from_primitive_count(primitive_type, primitive_count); + UINT idx_fmt_size = index_format == D3DFMT_INDEX16 ? 2 : 4; + UINT idx_size = idx_count * idx_fmt_size; + UINT ib_pos; + + UINT vtx_size = vertex_count * vertex_stride; + UINT vb_pos, align; + + TRACE("iface %p, primitive_type %#x, min_vertex_idx %u, vertex_count %u, primitive_count %u,\n" "index_data %p, index_format %#x, vertex_data %p, vertex_stride %u.\n", - iface, primitive_type, min_vertex_idx, index_count, primitive_count, + iface, primitive_type, min_vertex_idx, vertex_count, primitive_count, index_data, index_format, vertex_data, vertex_stride); - wined3d_mutex_lock(); - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type); - hr = wined3d_device_draw_indexed_primitive_up(device->wined3d_device, - vertex_count_from_primitive_count(primitive_type, primitive_count), index_data, - wined3dformat_from_d3dformat(index_format), vertex_data, vertex_stride); - wined3d_mutex_unlock(); + if (!primitive_count) + { + WARN("primitive_count is 0, returning D3D_OK\n"); + return D3D_OK; + } + wined3d_mutex_lock(); + + hr = d3d8_device_prepare_vertex_buffer(device, vtx_size); + if (FAILED(hr)) + goto done; + + vb_pos = device->vertex_buffer_pos; + align = vb_pos % vertex_stride; + if (align) align = vertex_stride - align; + if (vb_pos + vtx_size + align > device->vertex_buffer_size) + vb_pos = 0; + else + vb_pos += align; + + hr = wined3d_buffer_map(device->vertex_buffer, vb_pos, vtx_size, &buffer_data, + vb_pos ? WINED3D_MAP_NOOVERWRITE : WINED3D_MAP_DISCARD); + if (FAILED(hr)) + goto done; + memcpy(buffer_data, vertex_data, vtx_size); + wined3d_buffer_unmap(device->vertex_buffer); + device->vertex_buffer_pos = vb_pos + vtx_size; + + hr = d3d8_device_prepare_index_buffer(device, idx_size); + if (FAILED(hr)) + goto done; + + ib_pos = device->index_buffer_pos; + align = ib_pos % idx_fmt_size; + if (align) align = idx_fmt_size - align; + if (ib_pos + idx_size + align > device->index_buffer_size) + ib_pos = 0; + else + ib_pos += align; + + hr = wined3d_buffer_map(device->index_buffer, ib_pos, idx_size, &buffer_data, + ib_pos ? WINED3D_MAP_NOOVERWRITE : WINED3D_MAP_DISCARD); + if (FAILED(hr)) + goto done; + memcpy(buffer_data, index_data, idx_size); + wined3d_buffer_unmap(device->index_buffer); + device->index_buffer_pos = ib_pos + idx_size; + + hr = wined3d_device_set_stream_source(device->wined3d_device, 0, device->vertex_buffer, 0, vertex_stride); + if (FAILED(hr)) + goto done; + + wined3d_device_set_index_buffer(device->wined3d_device, device->index_buffer, + wined3dformat_from_d3dformat(index_format)); + wined3d_device_set_base_vertex_index(device->wined3d_device, vb_pos / vertex_stride); + + wined3d_device_set_primitive_type(device->wined3d_device, primitive_type); + hr = wined3d_device_draw_indexed_primitive(device->wined3d_device, ib_pos / idx_fmt_size, idx_count); + + wined3d_device_set_stream_source(device->wined3d_device, 0, NULL, 0, 0); + wined3d_device_set_index_buffer(device->wined3d_device, NULL, WINED3DFMT_UNKNOWN); + wined3d_device_set_base_vertex_index(device->wined3d_device, 0); + +done: + wined3d_mutex_unlock(); return hr; } @@ -2011,7 +2135,6 @@ static HRESULT WINAPI d3d8_device_CreateVertexShader(IDirect3DDevice8 *iface, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) { - ERR("Failed to allocate vertex shader memory.\n"); *shader = 0; return E_OUTOFMEMORY; } @@ -2077,10 +2200,7 @@ static struct d3d8_vertex_declaration *d3d8_device_get_fvf_declaration(struct d3 TRACE("not found. Creating and inserting at position %d.\n", low); if (!(d3d8_declaration = HeapAlloc(GetProcessHeap(), 0, sizeof(*d3d8_declaration)))) - { - ERR("Memory allocation failed.\n"); return NULL; - } if (FAILED(hr = d3d8_vertex_declaration_init_fvf(d3d8_declaration, device, fvf))) { @@ -2119,7 +2239,6 @@ static HRESULT WINAPI d3d8_device_SetVertexShader(IDirect3DDevice8 *iface, DWORD { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); struct d3d8_vertex_shader *shader_impl; - HRESULT hr; TRACE("iface %p, shader %#x.\n", iface, shader); @@ -2147,15 +2266,12 @@ static HRESULT WINAPI d3d8_device_SetVertexShader(IDirect3DDevice8 *iface, DWORD return D3DERR_INVALIDCALL; } - hr = wined3d_device_set_vertex_declaration(device->wined3d_device, + wined3d_device_set_vertex_declaration(device->wined3d_device, shader_impl->vertex_declaration->wined3d_vertex_declaration); - if (SUCCEEDED(hr)) - hr = wined3d_device_set_vertex_shader(device->wined3d_device, shader_impl->wined3d_shader); + wined3d_device_set_vertex_shader(device->wined3d_device, shader_impl->wined3d_shader); wined3d_mutex_unlock(); - TRACE("Returning hr %#x\n", hr); - - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_GetVertexShader(IDirect3DDevice8 *iface, DWORD *shader) @@ -2163,40 +2279,30 @@ static HRESULT WINAPI d3d8_device_GetVertexShader(IDirect3DDevice8 *iface, DWORD struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); struct wined3d_vertex_declaration *wined3d_declaration; struct d3d8_vertex_declaration *d3d8_declaration; - HRESULT hr; TRACE("iface %p, shader %p.\n", iface, shader); wined3d_mutex_lock(); - if (FAILED(hr = wined3d_device_get_vertex_declaration(device->wined3d_device, &wined3d_declaration))) + if ((wined3d_declaration = wined3d_device_get_vertex_declaration(device->wined3d_device))) { - wined3d_mutex_unlock(); - WARN("Failed to get wined3d vertex declaration, hr %#x.\n", hr); - return hr; + d3d8_declaration = wined3d_vertex_declaration_get_parent(wined3d_declaration); + *shader = d3d8_declaration->shader_handle; } - - if (!wined3d_declaration) + else { - wined3d_mutex_unlock(); *shader = 0; - return D3D_OK; } - - d3d8_declaration = wined3d_vertex_declaration_get_parent(wined3d_declaration); - wined3d_vertex_declaration_decref(wined3d_declaration); wined3d_mutex_unlock(); - *shader = d3d8_declaration->shader_handle; TRACE("Returning %#x.\n", *shader); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_DeleteVertexShader(IDirect3DDevice8 *iface, DWORD shader) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); struct d3d8_vertex_shader *shader_impl; - struct wined3d_shader *cur; TRACE("iface %p, shader %#x.\n", iface, shader); @@ -2209,12 +2315,9 @@ static HRESULT WINAPI d3d8_device_DeleteVertexShader(IDirect3DDevice8 *iface, DW return D3DERR_INVALIDCALL; } - if ((cur = wined3d_device_get_vertex_shader(device->wined3d_device))) - { - if (cur == shader_impl->wined3d_shader) - IDirect3DDevice8_SetVertexShader(iface, 0); - wined3d_shader_decref(cur); - } + if (shader_impl->wined3d_shader + && wined3d_device_get_vertex_shader(device->wined3d_device) == shader_impl->wined3d_shader) + IDirect3DDevice8_SetVertexShader(iface, 0); wined3d_mutex_unlock(); @@ -2344,7 +2447,6 @@ static HRESULT WINAPI d3d8_device_SetIndices(IDirect3DDevice8 *iface, { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); struct d3d8_indexbuffer *ib = unsafe_impl_from_IDirect3DIndexBuffer8(buffer); - HRESULT hr; TRACE("iface %p, buffer %p, base_vertex_idx %u.\n", iface, buffer, base_vertex_idx); @@ -2356,21 +2458,21 @@ static HRESULT WINAPI d3d8_device_SetIndices(IDirect3DDevice8 *iface, */ wined3d_mutex_lock(); wined3d_device_set_base_vertex_index(device->wined3d_device, base_vertex_idx); - hr = wined3d_device_set_index_buffer(device->wined3d_device, + wined3d_device_set_index_buffer(device->wined3d_device, ib ? ib->wined3d_buffer : NULL, ib ? ib->format : WINED3DFMT_UNKNOWN); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_GetIndices(IDirect3DDevice8 *iface, IDirect3DIndexBuffer8 **buffer, UINT *base_vertex_index) { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - struct wined3d_buffer *wined3d_buffer = NULL; + enum wined3d_format_id wined3d_format; + struct wined3d_buffer *wined3d_buffer; struct d3d8_indexbuffer *buffer_impl; - HRESULT hr; TRACE("iface %p, buffer %p, base_vertex_index %p.\n", iface, buffer, base_vertex_index); @@ -2380,23 +2482,19 @@ static HRESULT WINAPI d3d8_device_GetIndices(IDirect3DDevice8 *iface, /* The case from UINT to INT is safe because d3d8 will never set negative values */ wined3d_mutex_lock(); *base_vertex_index = wined3d_device_get_base_vertex_index(device->wined3d_device); - hr = wined3d_device_get_index_buffer(device->wined3d_device, &wined3d_buffer); - if (SUCCEEDED(hr) && wined3d_buffer) + if ((wined3d_buffer = wined3d_device_get_index_buffer(device->wined3d_device, &wined3d_format))) { buffer_impl = wined3d_buffer_get_parent(wined3d_buffer); *buffer = &buffer_impl->IDirect3DIndexBuffer8_iface; IDirect3DIndexBuffer8_AddRef(*buffer); - wined3d_buffer_decref(wined3d_buffer); } else { - if (FAILED(hr)) - ERR("Failed to get wined3d index buffer, hr %#x.\n", hr); *buffer = NULL; } wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_CreatePixelShader(IDirect3DDevice8 *iface, @@ -2415,10 +2513,7 @@ static HRESULT WINAPI d3d8_device_CreatePixelShader(IDirect3DDevice8 *iface, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate pixel shader memmory.\n"); return E_OUTOFMEMORY; - } wined3d_mutex_lock(); handle = d3d8_allocate_handle(&device->handle_table, object, D3D8_HANDLE_PS); @@ -2454,7 +2549,6 @@ static HRESULT WINAPI d3d8_device_SetPixelShader(IDirect3DDevice8 *iface, DWORD { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); struct d3d8_pixel_shader *shader_impl; - HRESULT hr; TRACE("iface %p, shader %#x.\n", iface, shader); @@ -2462,9 +2556,9 @@ static HRESULT WINAPI d3d8_device_SetPixelShader(IDirect3DDevice8 *iface, DWORD if (!shader) { - hr = wined3d_device_set_pixel_shader(device->wined3d_device, NULL); + wined3d_device_set_pixel_shader(device->wined3d_device, NULL); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } if (!(shader_impl = d3d8_get_object(&device->handle_table, shader - (VS_HIGHESTFIXEDFXF + 1), D3D8_HANDLE_PS))) @@ -2475,10 +2569,10 @@ static HRESULT WINAPI d3d8_device_SetPixelShader(IDirect3DDevice8 *iface, DWORD } TRACE("Setting shader %p.\n", shader_impl); - hr = wined3d_device_set_pixel_shader(device->wined3d_device, shader_impl->wined3d_shader); + wined3d_device_set_pixel_shader(device->wined3d_device, shader_impl->wined3d_shader); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_GetPixelShader(IDirect3DDevice8 *iface, DWORD *shader) @@ -2496,7 +2590,6 @@ static HRESULT WINAPI d3d8_device_GetPixelShader(IDirect3DDevice8 *iface, DWORD { struct d3d8_pixel_shader *d3d8_shader; d3d8_shader = wined3d_shader_get_parent(object); - wined3d_shader_decref(object); *shader = d3d8_shader->handle; } else @@ -2514,7 +2607,6 @@ static HRESULT WINAPI d3d8_device_DeletePixelShader(IDirect3DDevice8 *iface, DWO { struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); struct d3d8_pixel_shader *shader_impl; - struct wined3d_shader *cur; TRACE("iface %p, shader %#x.\n", iface, shader); @@ -2527,12 +2619,8 @@ static HRESULT WINAPI d3d8_device_DeletePixelShader(IDirect3DDevice8 *iface, DWO return D3DERR_INVALIDCALL; } - if ((cur = wined3d_device_get_pixel_shader(device->wined3d_device))) - { - if (cur == shader_impl->wined3d_shader) - IDirect3DDevice8_SetPixelShader(iface, 0); - wined3d_shader_decref(cur); - } + if (wined3d_device_get_pixel_shader(device->wined3d_device) == shader_impl->wined3d_shader) + IDirect3DDevice8_SetPixelShader(iface, 0); wined3d_mutex_unlock(); @@ -2601,49 +2689,23 @@ static HRESULT WINAPI d3d8_device_GetPixelShaderFunction(IDirect3DDevice8 *iface static HRESULT WINAPI d3d8_device_DrawRectPatch(IDirect3DDevice8 *iface, UINT handle, const float *segment_count, const D3DRECTPATCH_INFO *patch_info) { - struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - HRESULT hr; - - TRACE("iface %p, handle %#x, segment_count %p, patch_info %p.\n", + FIXME("iface %p, handle %#x, segment_count %p, patch_info %p unimplemented.\n", iface, handle, segment_count, patch_info); - - wined3d_mutex_lock(); - hr = wined3d_device_draw_rect_patch(device->wined3d_device, handle, - segment_count, (const struct wined3d_rect_patch_info *)patch_info); - wined3d_mutex_unlock(); - - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_DrawTriPatch(IDirect3DDevice8 *iface, UINT handle, const float *segment_count, const D3DTRIPATCH_INFO *patch_info) { - struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - HRESULT hr; - - TRACE("iface %p, handle %#x, segment_count %p, patch_info %p.\n", + FIXME("iface %p, handle %#x, segment_count %p, patch_info %p unimplemented.\n", iface, handle, segment_count, patch_info); - - wined3d_mutex_lock(); - hr = wined3d_device_draw_tri_patch(device->wined3d_device, handle, - segment_count, (const struct wined3d_tri_patch_info *)patch_info); - wined3d_mutex_unlock(); - - return hr; + return D3D_OK; } static HRESULT WINAPI d3d8_device_DeletePatch(IDirect3DDevice8 *iface, UINT handle) { - struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); - HRESULT hr; - - TRACE("iface %p, handle %#x.\n", iface, handle); - - wined3d_mutex_lock(); - hr = wined3d_device_delete_patch(device->wined3d_device, handle); - wined3d_mutex_unlock(); - - return hr; + FIXME("iface %p, handle %#x unimplemented.\n", iface, handle); + return D3DERR_INVALIDCALL; } static HRESULT WINAPI d3d8_device_SetStreamSource(IDirect3DDevice8 *iface, @@ -2817,7 +2879,7 @@ static void CDECL device_parent_mode_changed(struct wined3d_device_parent *devic static HRESULT CDECL device_parent_create_texture_surface(struct wined3d_device_parent *device_parent, void *container_parent, UINT width, UINT height, enum wined3d_format_id format, DWORD usage, - enum wined3d_pool pool, UINT level, enum wined3d_cubemap_face face, struct wined3d_surface **surface) + enum wined3d_pool pool, UINT sub_resource_idx, struct wined3d_surface **surface) { struct d3d8_device *device = device_from_device_parent(device_parent); struct d3d8_surface *d3d_surface; @@ -2825,17 +2887,15 @@ static HRESULT CDECL device_parent_create_texture_surface(struct wined3d_device_ HRESULT hr; TRACE("device_parent %p, container_parent %p, width %u, height %u, format %#x, usage %#x,\n" - "\tpool %#x, level %u, face %u, surface %p.\n", - device_parent, container_parent, width, height, format, usage, pool, level, face, surface); + "\tpool %#x, sub_resource_idx %u, surface %p.\n", + device_parent, container_parent, width, height, format, usage, pool, sub_resource_idx, surface); if (pool == WINED3D_POOL_DEFAULT && !(usage & WINED3DUSAGE_DYNAMIC)) lockable = FALSE; - hr = d3d8_device_CreateSurface(device, width, height, - d3dformat_from_wined3dformat(format), lockable, FALSE /* Discard */, level, - (IDirect3DSurface8 **)&d3d_surface, usage, pool, D3DMULTISAMPLE_NONE, 0 /* MultisampleQuality */); - if (FAILED(hr)) + if (FAILED(hr = d3d8_device_create_surface(device, width, height, d3dformat_from_wined3dformat(format), + lockable, FALSE, (IDirect3DSurface8 **)&d3d_surface, usage, pool, D3DMULTISAMPLE_NONE, 0))) { WARN("Failed to create surface, hr %#x.\n", hr); return hr; @@ -2845,7 +2905,7 @@ static HRESULT CDECL device_parent_create_texture_surface(struct wined3d_device_ wined3d_surface_incref(*surface); d3d_surface->container = container_parent; - IUnknown_Release(d3d_surface->parent_device); + IDirect3DDevice8_Release(d3d_surface->parent_device); d3d_surface->parent_device = NULL; IDirect3DSurface8_Release(&d3d_surface->IDirect3DSurface8_iface); @@ -2867,8 +2927,8 @@ static HRESULT CDECL device_parent_create_swapchain_surface(struct wined3d_devic device_parent, container_parent, width, height, format_id, usage, multisample_type, multisample_quality, surface); - if (FAILED(hr = d3d8_device_CreateSurface(device, width, height, d3dformat_from_wined3dformat(format_id), - TRUE, FALSE, 0, (IDirect3DSurface8 **)&d3d_surface, usage, D3DPOOL_DEFAULT, multisample_type, + if (FAILED(hr = d3d8_device_create_surface(device, width, height, d3dformat_from_wined3dformat(format_id), + TRUE, FALSE, (IDirect3DSurface8 **)&d3d_surface, usage, D3DPOOL_DEFAULT, multisample_type, multisample_quality))) { WARN("Failed to create surface, hr %#x.\n", hr); @@ -3046,13 +3106,8 @@ HRESULT device_init(struct d3d8_device *device, struct d3d8 *parent, struct wine return hr; } - hr = wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_POINTSIZE_MIN, 0); + wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_POINTSIZE_MIN, 0); wined3d_mutex_unlock(); - if (FAILED(hr)) - { - ERR("Failed to set minimum pointsize, hr %#x.\n", hr); - goto err; - } present_parameters_from_wined3d_swapchain_desc(parameters, &swapchain_desc); diff --git a/dll/directx/wine/d3d8/directx.c b/dll/directx/wine/d3d8/directx.c index afe52330e26..e5b3a801f9d 100644 --- a/dll/directx/wine/d3d8/directx.c +++ b/dll/directx/wine/d3d8/directx.c @@ -49,7 +49,7 @@ static HRESULT WINAPI d3d8_QueryInterface(IDirect3D8 *iface, REFIID riid, void * if (IsEqualGUID(riid, &IID_IDirect3D8) || IsEqualGUID(riid, &IID_IUnknown)) { - IUnknown_AddRef(iface); + IDirect3D8_AddRef(iface); *out = iface; return S_OK; } @@ -254,7 +254,7 @@ static HRESULT WINAPI d3d8_CheckDeviceFormat(IDirect3D8 *iface, UINT adapter, D3 wined3d_mutex_lock(); hr = wined3d_check_device_format(d3d8->wined3d, adapter, device_type, wined3dformat_from_d3dformat(adapter_format), - usage, wined3d_rtype, wined3dformat_from_d3dformat(format), WINED3D_SURFACE_TYPE_OPENGL); + usage, wined3d_rtype, wined3dformat_from_d3dformat(format)); wined3d_mutex_unlock(); return hr; @@ -364,10 +364,7 @@ static HRESULT WINAPI d3d8_CreateDevice(IDirect3D8 *iface, UINT adapter, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate device memory.\n"); return E_OUTOFMEMORY; - } hr = device_init(object, d3d8, d3d8->wined3d, adapter, device_type, focus_window, flags, parameters); if (FAILED(hr)) diff --git a/dll/directx/wine/d3d8/shader.c b/dll/directx/wine/d3d8/shader.c index b82655ba4cb..e0388cb75e9 100644 --- a/dll/directx/wine/d3d8/shader.c +++ b/dll/directx/wine/d3d8/shader.c @@ -61,10 +61,7 @@ static HRESULT d3d8_vertexshader_create_vertexdeclaration(struct d3d8_device *de object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Memory allocation failed.\n"); return E_OUTOFMEMORY; - } hr = d3d8_vertex_declaration_init(object, device, declaration, shader_handle); if (FAILED(hr)) diff --git a/dll/directx/wine/d3d8/surface.c b/dll/directx/wine/d3d8/surface.c index ba78426b00f..ba56944d083 100644 --- a/dll/directx/wine/d3d8/surface.c +++ b/dll/directx/wine/d3d8/surface.c @@ -36,7 +36,7 @@ static HRESULT WINAPI d3d8_surface_QueryInterface(IDirect3DSurface8 *iface, REFI || IsEqualGUID(riid, &IID_IDirect3DResource8) || IsEqualGUID(riid, &IID_IUnknown)) { - IUnknown_AddRef(iface); + IDirect3DSurface8_AddRef(iface); *out = iface; return S_OK; } @@ -69,7 +69,7 @@ static ULONG WINAPI d3d8_surface_AddRef(IDirect3DSurface8 *iface) if (ref == 1) { if (surface->parent_device) - IUnknown_AddRef(surface->parent_device); + IDirect3DDevice8_AddRef(surface->parent_device); wined3d_mutex_lock(); wined3d_surface_incref(surface->wined3d_surface); wined3d_mutex_unlock(); @@ -325,9 +325,9 @@ static const struct wined3d_parent_ops d3d8_surface_wined3d_parent_ops = surface_wined3d_object_destroyed, }; -HRESULT surface_init(struct d3d8_surface *surface, struct d3d8_device *device, - UINT width, UINT height, D3DFORMAT format, BOOL lockable, BOOL discard, UINT level, - DWORD usage, D3DPOOL pool, D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality) +HRESULT surface_init(struct d3d8_surface *surface, struct d3d8_device *device, UINT width, UINT height, + D3DFORMAT format, BOOL lockable, BOOL discard, DWORD usage, D3DPOOL pool, + D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality) { DWORD flags = 0; HRESULT hr; @@ -349,8 +349,8 @@ HRESULT surface_init(struct d3d8_surface *surface, struct d3d8_device *device, wined3d_mutex_lock(); hr = wined3d_surface_create(device->wined3d_device, width, height, wined3dformat_from_d3dformat(format), - level, usage & WINED3DUSAGE_MASK, (enum wined3d_pool)pool, multisample_type, multisample_quality, - WINED3D_SURFACE_TYPE_OPENGL, flags, surface, &d3d8_surface_wined3d_parent_ops, &surface->wined3d_surface); + usage & WINED3DUSAGE_MASK, (enum wined3d_pool)pool, multisample_type, multisample_quality, + flags, surface, &d3d8_surface_wined3d_parent_ops, &surface->wined3d_surface); wined3d_mutex_unlock(); if (FAILED(hr)) { @@ -359,7 +359,7 @@ HRESULT surface_init(struct d3d8_surface *surface, struct d3d8_device *device, } surface->parent_device = &device->IDirect3DDevice8_iface; - IUnknown_AddRef(surface->parent_device); + IDirect3DDevice8_AddRef(surface->parent_device); return D3D_OK; } diff --git a/dll/directx/wine/d3d8/swapchain.c b/dll/directx/wine/d3d8/swapchain.c index 40565f01bd2..bf12b47b958 100644 --- a/dll/directx/wine/d3d8/swapchain.c +++ b/dll/directx/wine/d3d8/swapchain.c @@ -35,7 +35,7 @@ static HRESULT WINAPI d3d8_swapchain_QueryInterface(IDirect3DSwapChain8 *iface, if (IsEqualGUID(riid, &IID_IDirect3DSwapChain8) || IsEqualGUID(riid, &IID_IUnknown)) { - IUnknown_AddRef(iface); + IDirect3DSwapChain8_AddRef(iface); *out = iface; return S_OK; } @@ -110,20 +110,22 @@ static HRESULT WINAPI d3d8_swapchain_GetBackBuffer(IDirect3DSwapChain8 *iface, struct d3d8_swapchain *swapchain = impl_from_IDirect3DSwapChain8(iface); struct wined3d_surface *wined3d_surface = NULL; struct d3d8_surface *surface_impl; - HRESULT hr; + HRESULT hr = D3D_OK; TRACE("iface %p, backbuffer_idx %u, backbuffer_type %#x, backbuffer %p.\n", iface, backbuffer_idx, backbuffer_type, backbuffer); wined3d_mutex_lock(); - hr = wined3d_swapchain_get_back_buffer(swapchain->wined3d_swapchain, - backbuffer_idx, (enum wined3d_backbuffer_type)backbuffer_type, &wined3d_surface); - if (SUCCEEDED(hr) && wined3d_surface) + if ((wined3d_surface = wined3d_swapchain_get_back_buffer(swapchain->wined3d_swapchain, + backbuffer_idx, (enum wined3d_backbuffer_type)backbuffer_type))) { surface_impl = wined3d_surface_get_parent(wined3d_surface); *backbuffer = &surface_impl->IDirect3DSurface8_iface; IDirect3DSurface8_AddRef(*backbuffer); - wined3d_surface_decref(wined3d_surface); + } + else + { + hr = D3DERR_INVALIDCALL; } wined3d_mutex_unlock(); @@ -158,9 +160,8 @@ static HRESULT swapchain_init(struct d3d8_swapchain *swapchain, struct d3d8_devi swapchain->IDirect3DSwapChain8_iface.lpVtbl = &d3d8_swapchain_vtbl; wined3d_mutex_lock(); - hr = wined3d_swapchain_create(device->wined3d_device, desc, - WINED3D_SURFACE_TYPE_OPENGL, swapchain, &d3d8_swapchain_wined3d_parent_ops, - &swapchain->wined3d_swapchain); + hr = wined3d_swapchain_create(device->wined3d_device, desc, swapchain, + &d3d8_swapchain_wined3d_parent_ops, &swapchain->wined3d_swapchain); wined3d_mutex_unlock(); if (FAILED(hr)) @@ -182,10 +183,7 @@ HRESULT d3d8_swapchain_create(struct d3d8_device *device, struct wined3d_swapcha HRESULT hr; if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)))) - { - ERR("Failed to allocate swapchain memory.\n"); return E_OUTOFMEMORY; - } if (FAILED(hr = swapchain_init(object, device, desc))) { diff --git a/dll/directx/wine/d3d8/texture.c b/dll/directx/wine/d3d8/texture.c index 22e03909c53..c041ea729fc 100644 --- a/dll/directx/wine/d3d8/texture.c +++ b/dll/directx/wine/d3d8/texture.c @@ -45,7 +45,7 @@ static HRESULT WINAPI d3d8_texture_2d_QueryInterface(IDirect3DTexture8 *iface, R || IsEqualGUID(riid, &IID_IDirect3DResource8) || IsEqualGUID(riid, &IID_IUnknown)) { - IUnknown_AddRef(iface); + IDirect3DTexture8_AddRef(iface); *out = iface; return S_OK; } @@ -413,7 +413,7 @@ static HRESULT WINAPI d3d8_texture_cube_QueryInterface(IDirect3DCubeTexture8 *if || IsEqualGUID(riid, &IID_IDirect3DResource8) || IsEqualGUID(riid, &IID_IUnknown)) { - IUnknown_AddRef(iface); + IDirect3DCubeTexture8_AddRef(iface); *out = iface; return S_OK; } @@ -433,7 +433,7 @@ static ULONG WINAPI d3d8_texture_cube_AddRef(IDirect3DCubeTexture8 *iface) if (ref == 1) { - IUnknown_AddRef(texture->parent_device); + IDirect3DDevice8_AddRef(texture->parent_device); wined3d_mutex_lock(); wined3d_texture_incref(texture->wined3d_texture); wined3d_mutex_unlock(); @@ -806,7 +806,7 @@ static HRESULT WINAPI d3d8_texture_3d_QueryInterface(IDirect3DVolumeTexture8 *if || IsEqualGUID(riid, &IID_IDirect3DResource8) || IsEqualGUID(riid, &IID_IUnknown)) { - IUnknown_AddRef(iface); + IDirect3DVolumeTexture8_AddRef(iface); *out = iface; return S_OK; } diff --git a/dll/directx/wine/d3d8/volume.c b/dll/directx/wine/d3d8/volume.c index c63c0895ed4..4e8e88f5c9a 100644 --- a/dll/directx/wine/d3d8/volume.c +++ b/dll/directx/wine/d3d8/volume.c @@ -35,7 +35,7 @@ static HRESULT WINAPI d3d8_volume_QueryInterface(IDirect3DVolume8 *iface, REFIID if (IsEqualGUID(riid, &IID_IDirect3DVolume8) || IsEqualGUID(riid, &IID_IUnknown)) { - IUnknown_AddRef(iface); + IDirect3DVolume8_AddRef(iface); *out = iface; return S_OK; } diff --git a/dll/directx/wine/d3d9/d3d9_main.c b/dll/directx/wine/d3d9/d3d9_main.c index e6b0ed07071..d407e4961b8 100644 --- a/dll/directx/wine/d3d9/d3d9_main.c +++ b/dll/directx/wine/d3d9/d3d9_main.c @@ -40,10 +40,7 @@ IDirect3D9 * WINAPI DECLSPEC_HOTPATCH Direct3DCreate9(UINT sdk_version) TRACE("sdk_version %#x.\n", sdk_version); if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)))) - { - ERR("Failed to allocate d3d9 object memory.\n"); return NULL; - } if (!d3d9_init(object, FALSE)) { @@ -64,10 +61,7 @@ HRESULT WINAPI DECLSPEC_HOTPATCH Direct3DCreate9Ex(UINT sdk_version, IDirect3D9E TRACE("sdk_version %#x, d3d9ex %p.\n", sdk_version, d3d9ex); if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)))) - { - ERR("Failed to allocate d3d9 object memory.\n"); return E_OUTOFMEMORY; - } if (!d3d9_init(object, TRUE)) { diff --git a/dll/directx/wine/d3d9/d3d9_private.h b/dll/directx/wine/d3d9/d3d9_private.h index f8055386d39..4e86556bcfa 100644 --- a/dll/directx/wine/d3d9/d3d9_private.h +++ b/dll/directx/wine/d3d9/d3d9_private.h @@ -154,6 +154,13 @@ struct d3d9_device struct fvf_declaration *fvf_decls; UINT fvf_decl_count, fvf_decl_size; + struct wined3d_buffer *vertex_buffer; + UINT vertex_buffer_size; + UINT vertex_buffer_pos; + struct wined3d_buffer *index_buffer; + UINT index_buffer_size; + UINT index_buffer_pos; + BOOL in_destruction; BOOL not_reset; BOOL in_scene; @@ -197,9 +204,9 @@ struct d3d9_surface BOOL getdc_supported; }; -HRESULT surface_init(struct d3d9_surface *surface, struct d3d9_device *device, - UINT width, UINT height, D3DFORMAT format, BOOL lockable, BOOL discard, UINT level, - DWORD usage, D3DPOOL pool, D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality) DECLSPEC_HIDDEN; +HRESULT surface_init(struct d3d9_surface *surface, struct d3d9_device *device, UINT width, UINT height, + D3DFORMAT format, BOOL lockable, BOOL discard, DWORD usage, D3DPOOL pool, + D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality) DECLSPEC_HIDDEN; struct d3d9_surface *unsafe_impl_from_IDirect3DSurface9(IDirect3DSurface9 *iface) DECLSPEC_HIDDEN; struct d3d9_vertexbuffer diff --git a/dll/directx/wine/d3d9/device.c b/dll/directx/wine/d3d9/device.c index f3c531469e5..5a943df405d 100644 --- a/dll/directx/wine/d3d9/device.c +++ b/dll/directx/wine/d3d9/device.c @@ -297,6 +297,11 @@ static ULONG WINAPI DECLSPEC_HOTPATCH d3d9_device_Release(IDirect3DDevice9Ex *if } HeapFree(GetProcessHeap(), 0, device->fvf_decls); + if (device->vertex_buffer) + wined3d_buffer_decref(device->vertex_buffer); + if (device->index_buffer) + wined3d_buffer_decref(device->index_buffer); + wined3d_device_uninit_3d(device->wined3d_device); wined3d_device_release_focus_window(device->wined3d_device); wined3d_device_decref(device->wined3d_device); @@ -422,16 +427,15 @@ static HRESULT WINAPI d3d9_device_GetCreationParameters(IDirect3DDevice9Ex *ifac D3DDEVICE_CREATION_PARAMETERS *parameters) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, parameters %p.\n", iface, parameters); wined3d_mutex_lock(); - hr = wined3d_device_get_creation_parameters(device->wined3d_device, + wined3d_device_get_creation_parameters(device->wined3d_device, (struct wined3d_device_creation_parameters *)parameters); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_SetCursorProperties(IDirect3DDevice9Ex *iface, @@ -506,24 +510,24 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH d3d9_device_GetSwapChain(IDirect3DDevice UINT swapchain_idx, IDirect3DSwapChain9 **swapchain) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - struct wined3d_swapchain *wined3d_swapchain = NULL; + struct wined3d_swapchain *wined3d_swapchain; struct d3d9_swapchain *swapchain_impl; HRESULT hr; TRACE("iface %p, swapchain_idx %u, swapchain %p.\n", iface, swapchain_idx, swapchain); wined3d_mutex_lock(); - hr = wined3d_device_get_swapchain(device->wined3d_device, swapchain_idx, &wined3d_swapchain); - if (SUCCEEDED(hr) && wined3d_swapchain) + if ((wined3d_swapchain = wined3d_device_get_swapchain(device->wined3d_device, swapchain_idx))) { swapchain_impl = wined3d_swapchain_get_parent(wined3d_swapchain); *swapchain = &swapchain_impl->IDirect3DSwapChain9_iface; IDirect3DSwapChain9_AddRef(*swapchain); - wined3d_swapchain_decref(wined3d_swapchain); + hr = D3D_OK; } else { *swapchain = NULL; + hr = D3DERR_INVALIDCALL; } wined3d_mutex_unlock(); @@ -582,9 +586,24 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH d3d9_device_Reset(IDirect3DDevice9Ex *if TRACE("iface %p, present_parameters %p.\n", iface, present_parameters); wined3d_mutex_lock(); + + if (device->vertex_buffer) + { + wined3d_buffer_decref(device->vertex_buffer); + device->vertex_buffer = NULL; + device->vertex_buffer_size = 0; + } + if (device->index_buffer) + { + wined3d_buffer_decref(device->index_buffer); + device->index_buffer = NULL; + device->index_buffer_size = 0; + } + wined3d_swapchain_desc_from_present_parameters(&swapchain_desc, present_parameters); - hr = wined3d_device_reset(device->wined3d_device, &swapchain_desc, NULL, reset_enum_callback); - if (FAILED(hr)) + hr = wined3d_device_reset(device->wined3d_device, &swapchain_desc, + NULL, reset_enum_callback, !device->d3d_parent->extended); + if (FAILED(hr) && !device->d3d_parent->extended) device->not_reset = TRUE; else device->not_reset = FALSE; @@ -629,7 +648,6 @@ static HRESULT WINAPI d3d9_device_GetBackBuffer(IDirect3DDevice9Ex *iface, UINT surface_impl = wined3d_surface_get_parent(wined3d_surface); *backbuffer = &surface_impl->IDirect3DSurface9_iface; IDirect3DSurface9_AddRef(*backbuffer); - wined3d_surface_decref(wined3d_surface); } wined3d_mutex_unlock(); @@ -716,10 +734,7 @@ static HRESULT WINAPI d3d9_device_CreateTexture(IDirect3DDevice9Ex *iface, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate texture memory.\n"); return D3DERR_OUTOFVIDEOMEMORY; - } hr = texture_init(object, device, width, height, levels, usage, format, pool); if (FAILED(hr)) @@ -763,10 +778,7 @@ static HRESULT WINAPI d3d9_device_CreateVolumeTexture(IDirect3DDevice9Ex *iface, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate volume texture memory.\n"); return D3DERR_OUTOFVIDEOMEMORY; - } hr = volumetexture_init(object, device, width, height, depth, levels, usage, format, pool); if (FAILED(hr)) @@ -798,10 +810,7 @@ static HRESULT WINAPI d3d9_device_CreateCubeTexture(IDirect3DDevice9Ex *iface, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate cube texture memory.\n"); return D3DERR_OUTOFVIDEOMEMORY; - } hr = cubetexture_init(object, device, edge_length, levels, usage, format, pool); if (FAILED(hr)) @@ -833,10 +842,7 @@ static HRESULT WINAPI d3d9_device_CreateVertexBuffer(IDirect3DDevice9Ex *iface, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate buffer memory.\n"); return D3DERR_OUTOFVIDEOMEMORY; - } hr = vertexbuffer_init(object, device, size, usage, fvf, pool); if (FAILED(hr)) @@ -868,10 +874,7 @@ static HRESULT WINAPI d3d9_device_CreateIndexBuffer(IDirect3DDevice9Ex *iface, U object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate buffer memory.\n"); return D3DERR_OUTOFVIDEOMEMORY; - } hr = indexbuffer_init(object, device, size, usage, format, pool); if (FAILED(hr)) @@ -888,15 +891,15 @@ static HRESULT WINAPI d3d9_device_CreateIndexBuffer(IDirect3DDevice9Ex *iface, U } static HRESULT d3d9_device_create_surface(struct d3d9_device *device, UINT width, UINT height, - D3DFORMAT format, BOOL lockable, BOOL discard, UINT level, IDirect3DSurface9 **surface, - UINT usage, D3DPOOL pool, D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality) + D3DFORMAT format, BOOL lockable, BOOL discard, IDirect3DSurface9 **surface, UINT usage, + D3DPOOL pool, D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality) { struct d3d9_surface *object; HRESULT hr; - TRACE("device %p, width %u, height %u, format %#x, lockable %#x, discard %#x, level %u, surface %p.\n" + TRACE("device %p, width %u, height %u, format %#x, lockable %#x, discard %#x, surface %p.\n" "usage %#x, pool %#x, multisample_type %#x, multisample_quality %u.\n", - device, width, height, format, lockable, discard, level, surface, usage, pool, + device, width, height, format, lockable, discard, surface, usage, pool, multisample_type, multisample_quality); if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)))) @@ -905,9 +908,8 @@ static HRESULT d3d9_device_create_surface(struct d3d9_device *device, UINT width return D3DERR_OUTOFVIDEOMEMORY; } - hr = surface_init(object, device, width, height, format, lockable, discard, - level, usage, pool, multisample_type, multisample_quality); - if (FAILED(hr)) + if (FAILED(hr = surface_init(object, device, width, height, format, lockable, + discard, usage, pool, multisample_type, multisample_quality))) { WARN("Failed to initialize surface, hr %#x.\n", hr); HeapFree(GetProcessHeap(), 0, object); @@ -925,7 +927,6 @@ static HRESULT WINAPI d3d9_device_CreateRenderTarget(IDirect3DDevice9Ex *iface, BOOL lockable, IDirect3DSurface9 **surface, HANDLE *shared_handle) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, width %u, height %u, format %#x, multisample_type %#x, multisample_quality %u.\n" "lockable %#x, surface %p, shared_handle %p.\n", @@ -935,10 +936,8 @@ static HRESULT WINAPI d3d9_device_CreateRenderTarget(IDirect3DDevice9Ex *iface, if (shared_handle) FIXME("Resource sharing not implemented, *shared_handle %p.\n", *shared_handle); - hr = d3d9_device_create_surface(device, width, height, format, lockable, FALSE, 0, surface, + return d3d9_device_create_surface(device, width, height, format, lockable, FALSE, surface, D3DUSAGE_RENDERTARGET, D3DPOOL_DEFAULT, multisample_type, multisample_quality); - - return hr; } static HRESULT WINAPI d3d9_device_CreateDepthStencilSurface(IDirect3DDevice9Ex *iface, UINT width, UINT height, @@ -946,7 +945,6 @@ static HRESULT WINAPI d3d9_device_CreateDepthStencilSurface(IDirect3DDevice9Ex * BOOL discard, IDirect3DSurface9 **surface, HANDLE *shared_handle) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, width %u, height %u, format %#x, multisample_type %#x, multisample_quality %u.\n" "discard %#x, surface %p, shared_handle %p.\n", @@ -956,10 +954,8 @@ static HRESULT WINAPI d3d9_device_CreateDepthStencilSurface(IDirect3DDevice9Ex * if (shared_handle) FIXME("Resource sharing not implemented, *shared_handle %p.\n", *shared_handle); - hr = d3d9_device_create_surface(device, width, height, format, TRUE, discard, 0, surface, + return d3d9_device_create_surface(device, width, height, format, TRUE, discard, surface, D3DUSAGE_DEPTHSTENCIL, D3DPOOL_DEFAULT, multisample_type, multisample_quality); - - return hr; } @@ -1160,7 +1156,7 @@ static HRESULT WINAPI d3d9_device_CreateOffscreenPlainSurface(IDirect3DDevice9Ex * regardless of the pool they're created in. Should we set dynamic usage * here? */ return d3d9_device_create_surface(device, width, height, format, TRUE, - FALSE, 0, surface, 0, pool, D3DMULTISAMPLE_NONE, 0); + FALSE, surface, 0, pool, D3DMULTISAMPLE_NONE, 0); } static HRESULT WINAPI d3d9_device_SetRenderTarget(IDirect3DDevice9Ex *iface, DWORD idx, IDirect3DSurface9 *surface) @@ -1190,7 +1186,7 @@ static HRESULT WINAPI d3d9_device_GetRenderTarget(IDirect3DDevice9Ex *iface, DWO struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); struct wined3d_surface *wined3d_surface; struct d3d9_surface *surface_impl; - HRESULT hr; + HRESULT hr = D3D_OK; TRACE("iface %p, idx %u, surface %p.\n", iface, idx, surface); @@ -1204,18 +1200,15 @@ static HRESULT WINAPI d3d9_device_GetRenderTarget(IDirect3DDevice9Ex *iface, DWO } wined3d_mutex_lock(); - hr = wined3d_device_get_render_target(device->wined3d_device, idx, &wined3d_surface); - if (SUCCEEDED(hr)) + if ((wined3d_surface = wined3d_device_get_render_target(device->wined3d_device, idx))) { surface_impl = wined3d_surface_get_parent(wined3d_surface); *surface = &surface_impl->IDirect3DSurface9_iface; IDirect3DSurface9_AddRef(*surface); - wined3d_surface_decref(wined3d_surface); } else { - if (hr != WINED3DERR_NOTFOUND) - WARN("Failed to get render target %u, hr %#x.\n", idx, hr); + hr = WINED3DERR_NOTFOUND; *surface = NULL; } wined3d_mutex_unlock(); @@ -1227,15 +1220,14 @@ static HRESULT WINAPI d3d9_device_SetDepthStencilSurface(IDirect3DDevice9Ex *ifa { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); struct d3d9_surface *ds_impl = unsafe_impl_from_IDirect3DSurface9(depth_stencil); - HRESULT hr; TRACE("iface %p, depth_stencil %p.\n", iface, depth_stencil); wined3d_mutex_lock(); - hr = wined3d_device_set_depth_stencil(device->wined3d_device, ds_impl ? ds_impl->wined3d_surface : NULL); + wined3d_device_set_depth_stencil(device->wined3d_device, ds_impl ? ds_impl->wined3d_surface : NULL); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_GetDepthStencilSurface(IDirect3DDevice9Ex *iface, IDirect3DSurface9 **depth_stencil) @@ -1243,7 +1235,7 @@ static HRESULT WINAPI d3d9_device_GetDepthStencilSurface(IDirect3DDevice9Ex *ifa struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); struct wined3d_surface *wined3d_surface; struct d3d9_surface *surface_impl; - HRESULT hr; + HRESULT hr = D3D_OK; TRACE("iface %p, depth_stencil %p.\n", iface, depth_stencil); @@ -1251,18 +1243,15 @@ static HRESULT WINAPI d3d9_device_GetDepthStencilSurface(IDirect3DDevice9Ex *ifa return D3DERR_INVALIDCALL; wined3d_mutex_lock(); - hr = wined3d_device_get_depth_stencil(device->wined3d_device, &wined3d_surface); - if (SUCCEEDED(hr)) + if ((wined3d_surface = wined3d_device_get_depth_stencil(device->wined3d_device))) { surface_impl = wined3d_surface_get_parent(wined3d_surface); *depth_stencil = &surface_impl->IDirect3DSurface9_iface; IDirect3DSurface9_AddRef(*depth_stencil); - wined3d_surface_decref(wined3d_surface); } else { - if (hr != WINED3DERR_NOTFOUND) - WARN("Call to IWineD3DDevice_GetDepthStencilSurface failed with 0x%08x\n", hr); + hr = WINED3DERR_NOTFOUND; *depth_stencil = NULL; } wined3d_mutex_unlock(); @@ -1327,108 +1316,101 @@ static HRESULT WINAPI d3d9_device_SetTransform(IDirect3DDevice9Ex *iface, D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, state %#x, matrix %p.\n", iface, state, matrix); /* Note: D3DMATRIX is compatible with struct wined3d_matrix. */ wined3d_mutex_lock(); - hr = wined3d_device_set_transform(device->wined3d_device, state, (const struct wined3d_matrix *)matrix); + wined3d_device_set_transform(device->wined3d_device, state, (const struct wined3d_matrix *)matrix); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_GetTransform(IDirect3DDevice9Ex *iface, D3DTRANSFORMSTATETYPE state, D3DMATRIX *matrix) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, state %#x, matrix %p.\n", iface, state, matrix); /* Note: D3DMATRIX is compatible with struct wined3d_matrix. */ wined3d_mutex_lock(); - hr = wined3d_device_get_transform(device->wined3d_device, state, (struct wined3d_matrix *)matrix); + wined3d_device_get_transform(device->wined3d_device, state, (struct wined3d_matrix *)matrix); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_MultiplyTransform(IDirect3DDevice9Ex *iface, D3DTRANSFORMSTATETYPE state, const D3DMATRIX *matrix) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, state %#x, matrix %p.\n", iface, state, matrix); /* Note: D3DMATRIX is compatible with struct wined3d_matrix. */ wined3d_mutex_lock(); - hr = wined3d_device_multiply_transform(device->wined3d_device, state, (const struct wined3d_matrix *)matrix); + wined3d_device_multiply_transform(device->wined3d_device, state, (const struct wined3d_matrix *)matrix); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_SetViewport(IDirect3DDevice9Ex *iface, const D3DVIEWPORT9 *viewport) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, viewport %p.\n", iface, viewport); /* Note: D3DVIEWPORT9 is compatible with struct wined3d_viewport. */ wined3d_mutex_lock(); - hr = wined3d_device_set_viewport(device->wined3d_device, (const struct wined3d_viewport *)viewport); + wined3d_device_set_viewport(device->wined3d_device, (const struct wined3d_viewport *)viewport); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_GetViewport(IDirect3DDevice9Ex *iface, D3DVIEWPORT9 *viewport) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, viewport %p.\n", iface, viewport); /* Note: D3DVIEWPORT9 is compatible with struct wined3d_viewport. */ wined3d_mutex_lock(); - hr = wined3d_device_get_viewport(device->wined3d_device, (struct wined3d_viewport *)viewport); + wined3d_device_get_viewport(device->wined3d_device, (struct wined3d_viewport *)viewport); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_SetMaterial(IDirect3DDevice9Ex *iface, const D3DMATERIAL9 *material) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, material %p.\n", iface, material); /* Note: D3DMATERIAL9 is compatible with struct wined3d_material. */ wined3d_mutex_lock(); - hr = wined3d_device_set_material(device->wined3d_device, (const struct wined3d_material *)material); + wined3d_device_set_material(device->wined3d_device, (const struct wined3d_material *)material); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_GetMaterial(IDirect3DDevice9Ex *iface, D3DMATERIAL9 *material) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, material %p.\n", iface, material); /* Note: D3DMATERIAL9 is compatible with struct wined3d_material. */ wined3d_mutex_lock(); - hr = wined3d_device_get_material(device->wined3d_device, (struct wined3d_material *)material); + wined3d_device_get_material(device->wined3d_device, (struct wined3d_material *)material); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_SetLight(IDirect3DDevice9Ex *iface, DWORD index, const D3DLIGHT9 *light) @@ -1521,30 +1503,28 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH d3d9_device_SetRenderState(IDirect3DDevi D3DRENDERSTATETYPE state, DWORD value) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, state %#x, value %#x.\n", iface, state, value); wined3d_mutex_lock(); - hr = wined3d_device_set_render_state(device->wined3d_device, state, value); + wined3d_device_set_render_state(device->wined3d_device, state, value); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_GetRenderState(IDirect3DDevice9Ex *iface, D3DRENDERSTATETYPE state, DWORD *value) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, state %#x, value %p.\n", iface, state, value); wined3d_mutex_lock(); - hr = wined3d_device_get_render_state(device->wined3d_device, state, value); + *value = wined3d_device_get_render_state(device->wined3d_device, state); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_CreateStateBlock(IDirect3DDevice9Ex *iface, @@ -1564,10 +1544,7 @@ static HRESULT WINAPI d3d9_device_CreateStateBlock(IDirect3DDevice9Ex *iface, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate stateblock memory.\n"); return E_OUTOFMEMORY; - } hr = stateblock_init(object, device, type, NULL); if (FAILED(hr)) @@ -1618,7 +1595,6 @@ static HRESULT WINAPI d3d9_device_EndStateBlock(IDirect3DDevice9Ex *iface, IDire object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) { - ERR("Failed to allocate stateblock memory.\n"); wined3d_mutex_lock(); wined3d_stateblock_decref(wined3d_stateblock); wined3d_mutex_unlock(); @@ -1675,7 +1651,6 @@ static HRESULT WINAPI d3d9_device_GetTexture(IDirect3DDevice9Ex *iface, DWORD st struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); struct wined3d_texture *wined3d_texture = NULL; struct d3d9_texture *texture_impl; - HRESULT hr; TRACE("iface %p, stage %u, texture %p.\n", iface, stage, texture); @@ -1683,23 +1658,19 @@ static HRESULT WINAPI d3d9_device_GetTexture(IDirect3DDevice9Ex *iface, DWORD st return D3DERR_INVALIDCALL; wined3d_mutex_lock(); - hr = wined3d_device_get_texture(device->wined3d_device, stage, &wined3d_texture); - if (SUCCEEDED(hr) && wined3d_texture) + if ((wined3d_texture = wined3d_device_get_texture(device->wined3d_device, stage))) { texture_impl = wined3d_texture_get_parent(wined3d_texture); *texture = &texture_impl->IDirect3DBaseTexture9_iface; IDirect3DBaseTexture9_AddRef(*texture); - wined3d_texture_decref(wined3d_texture); } else { - if (FAILED(hr)) - WARN("Call to get texture (%u) failed (%p).\n", stage, wined3d_texture); *texture = NULL; } wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_SetTexture(IDirect3DDevice9Ex *iface, DWORD stage, IDirect3DBaseTexture9 *texture) @@ -1761,7 +1732,6 @@ static HRESULT WINAPI d3d9_device_GetTextureStageState(IDirect3DDevice9Ex *iface DWORD stage, D3DTEXTURESTAGESTATETYPE state, DWORD *value) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, stage %u, state %#x, value %p.\n", iface, stage, state, value); @@ -1772,17 +1742,16 @@ static HRESULT WINAPI d3d9_device_GetTextureStageState(IDirect3DDevice9Ex *iface } wined3d_mutex_lock(); - hr = wined3d_device_get_texture_stage_state(device->wined3d_device, stage, tss_lookup[state], value); + *value = wined3d_device_get_texture_stage_state(device->wined3d_device, stage, tss_lookup[state]); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_SetTextureStageState(IDirect3DDevice9Ex *iface, DWORD stage, D3DTEXTURESTAGESTATETYPE state, DWORD value) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, stage %u, state %#x, value %#x.\n", iface, stage, state, value); @@ -1793,40 +1762,38 @@ static HRESULT WINAPI d3d9_device_SetTextureStageState(IDirect3DDevice9Ex *iface } wined3d_mutex_lock(); - hr = wined3d_device_set_texture_stage_state(device->wined3d_device, stage, tss_lookup[state], value); + wined3d_device_set_texture_stage_state(device->wined3d_device, stage, tss_lookup[state], value); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_GetSamplerState(IDirect3DDevice9Ex *iface, DWORD sampler, D3DSAMPLERSTATETYPE state, DWORD *value) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, sampler %u, state %#x, value %p.\n", iface, sampler, state, value); wined3d_mutex_lock(); - hr = wined3d_device_get_sampler_state(device->wined3d_device, sampler, state, value); + *value = wined3d_device_get_sampler_state(device->wined3d_device, sampler, state); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI DECLSPEC_HOTPATCH d3d9_device_SetSamplerState(IDirect3DDevice9Ex *iface, DWORD sampler, D3DSAMPLERSTATETYPE state, DWORD value) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, sampler %u, state %#x, value %#x.\n", iface, sampler, state, value); wined3d_mutex_lock(); - hr = wined3d_device_set_sampler_state(device->wined3d_device, sampler, state, value); + wined3d_device_set_sampler_state(device->wined3d_device, sampler, state, value); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_ValidateDevice(IDirect3DDevice9Ex *iface, DWORD *pass_count) @@ -1846,9 +1813,14 @@ static HRESULT WINAPI d3d9_device_ValidateDevice(IDirect3DDevice9Ex *iface, DWOR static HRESULT WINAPI d3d9_device_SetPaletteEntries(IDirect3DDevice9Ex *iface, UINT palette_idx, const PALETTEENTRY *entries) { - FIXME("iface %p, palette_idx %u, entries %p unimplemented.\n", iface, palette_idx, entries); + WARN("iface %p, palette_idx %u, entries %p unimplemented.\n", iface, palette_idx, entries); - return D3DERR_INVALIDCALL; + /* The d3d9 palette API is non-functional on Windows. Getters and setters are implemented, + * and some drivers allow the creation of P8 surfaces. These surfaces can be copied to + * other P8 surfaces with StretchRect, but cannot be converted to (A)RGB. + * + * Some older(dx7) cards may have support for P8 textures, but games cannot rely on this. */ + return D3D_OK; } static HRESULT WINAPI d3d9_device_GetPaletteEntries(IDirect3DDevice9Ex *iface, @@ -1861,9 +1833,9 @@ static HRESULT WINAPI d3d9_device_GetPaletteEntries(IDirect3DDevice9Ex *iface, static HRESULT WINAPI d3d9_device_SetCurrentTexturePalette(IDirect3DDevice9Ex *iface, UINT palette_idx) { - FIXME("iface %p, palette_idx %u unimplemented.\n", iface, palette_idx); + WARN("iface %p, palette_idx %u unimplemented.\n", iface, palette_idx); - return D3DERR_INVALIDCALL; + return D3D_OK; } static HRESULT WINAPI d3d9_device_GetCurrentTexturePalette(IDirect3DDevice9Ex *iface, UINT *palette_idx) @@ -1876,43 +1848,40 @@ static HRESULT WINAPI d3d9_device_GetCurrentTexturePalette(IDirect3DDevice9Ex *i static HRESULT WINAPI d3d9_device_SetScissorRect(IDirect3DDevice9Ex *iface, const RECT *rect) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, rect %p.\n", iface, rect); wined3d_mutex_lock(); - hr = wined3d_device_set_scissor_rect(device->wined3d_device, rect); + wined3d_device_set_scissor_rect(device->wined3d_device, rect); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_GetScissorRect(IDirect3DDevice9Ex *iface, RECT *rect) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, rect %p.\n", iface, rect); wined3d_mutex_lock(); - hr = wined3d_device_get_scissor_rect(device->wined3d_device, rect); + wined3d_device_get_scissor_rect(device->wined3d_device, rect); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_SetSoftwareVertexProcessing(IDirect3DDevice9Ex *iface, BOOL software) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; TRACE("iface %p, software %#x.\n", iface, software); wined3d_mutex_lock(); - hr = wined3d_device_set_software_vertex_processing(device->wined3d_device, software); + wined3d_device_set_software_vertex_processing(device->wined3d_device, software); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static BOOL WINAPI d3d9_device_GetSoftwareVertexProcessing(IDirect3DDevice9Ex *iface) @@ -1997,45 +1966,214 @@ static HRESULT WINAPI d3d9_device_DrawIndexedPrimitive(IDirect3DDevice9Ex *iface return hr; } +static void STDMETHODCALLTYPE d3d9_null_wined3d_object_destroyed(void *parent) {} + +static const struct wined3d_parent_ops d3d9_null_wined3d_parent_ops = +{ + d3d9_null_wined3d_object_destroyed, +}; + +/* The caller is responsible for wined3d locking */ +static HRESULT d3d9_device_prepare_vertex_buffer(struct d3d9_device *device, UINT min_size) +{ + HRESULT hr; + + if (device->vertex_buffer_size < min_size || !device->vertex_buffer) + { + UINT size = max(device->vertex_buffer_size * 2, min_size); + struct wined3d_buffer *buffer; + + TRACE("Growing vertex buffer to %u bytes\n", size); + + hr = wined3d_buffer_create_vb(device->wined3d_device, size, WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY, + WINED3D_POOL_DEFAULT, NULL, &d3d9_null_wined3d_parent_ops, &buffer); + if (FAILED(hr)) + { + ERR("(%p) wined3d_buffer_create_vb failed with hr = %08x\n", device, hr); + return hr; + } + + if (device->vertex_buffer) + wined3d_buffer_decref(device->vertex_buffer); + + device->vertex_buffer = buffer; + device->vertex_buffer_size = size; + device->vertex_buffer_pos = 0; + } + return D3D_OK; +} + static HRESULT WINAPI d3d9_device_DrawPrimitiveUP(IDirect3DDevice9Ex *iface, D3DPRIMITIVETYPE primitive_type, UINT primitive_count, const void *data, UINT stride) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); HRESULT hr; + UINT vtx_count = vertex_count_from_primitive_count(primitive_type, primitive_count); + UINT size = vtx_count * stride; + UINT vb_pos, align; + BYTE *buffer_data; TRACE("iface %p, primitive_type %#x, primitive_count %u, data %p, stride %u.\n", iface, primitive_type, primitive_count, data, stride); - wined3d_mutex_lock(); - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type); - hr = wined3d_device_draw_primitive_up(device->wined3d_device, - vertex_count_from_primitive_count(primitive_type, primitive_count), - data, stride); - wined3d_mutex_unlock(); + if (!primitive_count) + { + WARN("primitive_count is 0, returning D3D_OK\n"); + return D3D_OK; + } + wined3d_mutex_lock(); + + hr = d3d9_device_prepare_vertex_buffer(device, size); + if (FAILED(hr)) + goto done; + + vb_pos = device->vertex_buffer_pos; + align = vb_pos % stride; + if (align) align = stride - align; + if (vb_pos + size + align > device->vertex_buffer_size) + vb_pos = 0; + else + vb_pos += align; + + hr = wined3d_buffer_map(device->vertex_buffer, vb_pos, size, &buffer_data, + vb_pos ? WINED3D_MAP_NOOVERWRITE : WINED3D_MAP_DISCARD); + if (FAILED(hr)) + goto done; + memcpy(buffer_data, data, size); + wined3d_buffer_unmap(device->vertex_buffer); + device->vertex_buffer_pos = vb_pos + size; + + hr = wined3d_device_set_stream_source(device->wined3d_device, 0, device->vertex_buffer, 0, stride); + if (FAILED(hr)) + goto done; + + wined3d_device_set_primitive_type(device->wined3d_device, primitive_type); + hr = wined3d_device_draw_primitive(device->wined3d_device, vb_pos / stride, vtx_count); + wined3d_device_set_stream_source(device->wined3d_device, 0, NULL, 0, 0); + +done: + wined3d_mutex_unlock(); return hr; } +/* The caller is responsible for wined3d locking */ +static HRESULT d3d9_device_prepare_index_buffer(struct d3d9_device *device, UINT min_size) +{ + HRESULT hr; + + if (device->index_buffer_size < min_size || !device->index_buffer) + { + UINT size = max(device->index_buffer_size * 2, min_size); + struct wined3d_buffer *buffer; + + TRACE("Growing index buffer to %u bytes\n", size); + + hr = wined3d_buffer_create_ib(device->wined3d_device, size, WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY, + WINED3D_POOL_DEFAULT, NULL, &d3d9_null_wined3d_parent_ops, &buffer); + if (FAILED(hr)) + { + ERR("(%p) wined3d_buffer_create_ib failed with hr = %08x\n", device, hr); + return hr; + } + + if (device->index_buffer) + wined3d_buffer_decref(device->index_buffer); + + device->index_buffer = buffer; + device->index_buffer_size = size; + device->index_buffer_pos = 0; + } + return D3D_OK; +} + static HRESULT WINAPI d3d9_device_DrawIndexedPrimitiveUP(IDirect3DDevice9Ex *iface, - D3DPRIMITIVETYPE primitive_type, UINT min_vertex_idx, UINT index_count, + D3DPRIMITIVETYPE primitive_type, UINT min_vertex_idx, UINT vertex_count, UINT primitive_count, const void *index_data, D3DFORMAT index_format, const void *vertex_data, UINT vertex_stride) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); HRESULT hr; + BYTE *buffer_data; - TRACE("iface %p, primitive_type %#x, min_vertex_idx %u, index_count %u, primitive_count %u,\n" + UINT idx_count = vertex_count_from_primitive_count(primitive_type, primitive_count); + UINT idx_fmt_size = index_format == D3DFMT_INDEX16 ? 2 : 4; + UINT idx_size = idx_count * idx_fmt_size; + UINT ib_pos; + + UINT vtx_size = vertex_count * vertex_stride; + UINT vb_pos, align; + + TRACE("iface %p, primitive_type %#x, min_vertex_idx %u, vertex_count %u, primitive_count %u,\n" "index_data %p, index_format %#x, vertex_data %p, vertex_stride %u.\n", - iface, primitive_type, min_vertex_idx, index_count, primitive_count, + iface, primitive_type, min_vertex_idx, vertex_count, primitive_count, index_data, index_format, vertex_data, vertex_stride); - wined3d_mutex_lock(); - wined3d_device_set_primitive_type(device->wined3d_device, primitive_type); - hr = wined3d_device_draw_indexed_primitive_up(device->wined3d_device, - vertex_count_from_primitive_count(primitive_type, primitive_count), index_data, - wined3dformat_from_d3dformat(index_format), vertex_data, vertex_stride); - wined3d_mutex_unlock(); + if (!primitive_count) + { + WARN("primitive_count is 0, returning D3D_OK\n"); + return D3D_OK; + } + wined3d_mutex_lock(); + + hr = d3d9_device_prepare_vertex_buffer(device, vtx_size); + if (FAILED(hr)) + goto done; + + vb_pos = device->vertex_buffer_pos; + align = vb_pos % vertex_stride; + if (align) align = vertex_stride - align; + if (vb_pos + vtx_size + align > device->vertex_buffer_size) + vb_pos = 0; + else + vb_pos += align; + + hr = wined3d_buffer_map(device->vertex_buffer, vb_pos, vtx_size, &buffer_data, + vb_pos ? WINED3D_MAP_NOOVERWRITE : WINED3D_MAP_DISCARD); + if (FAILED(hr)) + goto done; + memcpy(buffer_data, vertex_data, vtx_size); + wined3d_buffer_unmap(device->vertex_buffer); + device->vertex_buffer_pos = vb_pos + vtx_size; + + hr = d3d9_device_prepare_index_buffer(device, idx_size); + if (FAILED(hr)) + goto done; + + ib_pos = device->index_buffer_pos; + align = ib_pos % idx_fmt_size; + if (align) align = idx_fmt_size - align; + if (ib_pos + idx_size + align > device->index_buffer_size) + ib_pos = 0; + else + ib_pos += align; + + hr = wined3d_buffer_map(device->index_buffer, ib_pos, idx_size, &buffer_data, + ib_pos ? WINED3D_MAP_NOOVERWRITE : WINED3D_MAP_DISCARD); + if (FAILED(hr)) + goto done; + memcpy(buffer_data, index_data, idx_size); + wined3d_buffer_unmap(device->index_buffer); + device->index_buffer_pos = ib_pos + idx_size; + + hr = wined3d_device_set_stream_source(device->wined3d_device, 0, device->vertex_buffer, 0, vertex_stride); + if (FAILED(hr)) + goto done; + + wined3d_device_set_index_buffer(device->wined3d_device, device->index_buffer, + wined3dformat_from_d3dformat(index_format)); + wined3d_device_set_base_vertex_index(device->wined3d_device, vb_pos / vertex_stride); + + wined3d_device_set_primitive_type(device->wined3d_device, primitive_type); + hr = wined3d_device_draw_indexed_primitive(device->wined3d_device, ib_pos / idx_fmt_size, idx_count); + + wined3d_device_set_stream_source(device->wined3d_device, 0, NULL, 0, 0); + wined3d_device_set_index_buffer(device->wined3d_device, NULL, WINED3DFMT_UNKNOWN); + wined3d_device_set_base_vertex_index(device->wined3d_device, 0); + +done: + wined3d_mutex_unlock(); return hr; } @@ -2086,38 +2224,34 @@ static HRESULT WINAPI d3d9_device_SetVertexDeclaration(IDirect3DDevice9Ex *iface { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); struct d3d9_vertex_declaration *decl_impl = unsafe_impl_from_IDirect3DVertexDeclaration9(declaration); - HRESULT hr; TRACE("iface %p, declaration %p.\n", iface, declaration); wined3d_mutex_lock(); - hr = wined3d_device_set_vertex_declaration(device->wined3d_device, + wined3d_device_set_vertex_declaration(device->wined3d_device, decl_impl ? decl_impl->wined3d_declaration : NULL); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_GetVertexDeclaration(IDirect3DDevice9Ex *iface, IDirect3DVertexDeclaration9 **declaration) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - struct wined3d_vertex_declaration *wined3d_declaration = NULL; + struct wined3d_vertex_declaration *wined3d_declaration; struct d3d9_vertex_declaration *declaration_impl; - HRESULT hr; TRACE("iface %p, declaration %p.\n", iface, declaration); if (!declaration) return D3DERR_INVALIDCALL; wined3d_mutex_lock(); - hr = wined3d_device_get_vertex_declaration(device->wined3d_device, &wined3d_declaration); - if (SUCCEEDED(hr) && wined3d_declaration) + if ((wined3d_declaration = wined3d_device_get_vertex_declaration(device->wined3d_device))) { declaration_impl = wined3d_vertex_declaration_get_parent(wined3d_declaration); *declaration = &declaration_impl->IDirect3DVertexDeclaration9_iface; IDirect3DVertexDeclaration9_AddRef(*declaration); - wined3d_vertex_declaration_decref(wined3d_declaration); } else { @@ -2126,7 +2260,7 @@ static HRESULT WINAPI d3d9_device_GetVertexDeclaration(IDirect3DDevice9Ex *iface wined3d_mutex_unlock(); TRACE("Returning %p.\n", *declaration); - return hr; + return D3D_OK; } static struct wined3d_vertex_declaration *device_get_fvf_declaration(struct d3d9_device *device, DWORD fvf) @@ -2201,7 +2335,6 @@ static HRESULT WINAPI d3d9_device_SetFVF(IDirect3DDevice9Ex *iface, DWORD fvf) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); struct wined3d_vertex_declaration *decl; - HRESULT hr; TRACE("iface %p, fvf %#x.\n", iface, fvf); @@ -2219,12 +2352,10 @@ static HRESULT WINAPI d3d9_device_SetFVF(IDirect3DDevice9Ex *iface, DWORD fvf) return D3DERR_DRIVERINTERNALERROR; } - hr = wined3d_device_set_vertex_declaration(device->wined3d_device, decl); - if (FAILED(hr)) - ERR("Failed to set vertex declaration.\n"); + wined3d_device_set_vertex_declaration(device->wined3d_device, decl); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_GetFVF(IDirect3DDevice9Ex *iface, DWORD *fvf) @@ -2232,24 +2363,14 @@ static HRESULT WINAPI d3d9_device_GetFVF(IDirect3DDevice9Ex *iface, DWORD *fvf) struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); struct wined3d_vertex_declaration *wined3d_declaration; struct d3d9_vertex_declaration *d3d9_declaration; - HRESULT hr; TRACE("iface %p, fvf %p.\n", iface, fvf); wined3d_mutex_lock(); - if (FAILED(hr = wined3d_device_get_vertex_declaration(device->wined3d_device, &wined3d_declaration))) - { - wined3d_mutex_unlock(); - WARN("Failed to get vertex declaration, hr %#x.\n", hr); - *fvf = 0; - return hr; - } - - if (wined3d_declaration) + if ((wined3d_declaration = wined3d_device_get_vertex_declaration(device->wined3d_device))) { d3d9_declaration = wined3d_vertex_declaration_get_parent(wined3d_declaration); *fvf = d3d9_declaration->fvf; - wined3d_vertex_declaration_decref(wined3d_declaration); } else { @@ -2259,7 +2380,7 @@ static HRESULT WINAPI d3d9_device_GetFVF(IDirect3DDevice9Ex *iface, DWORD *fvf) TRACE("Returning FVF %#x.\n", *fvf); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_CreateVertexShader(IDirect3DDevice9Ex *iface, @@ -2273,10 +2394,7 @@ static HRESULT WINAPI d3d9_device_CreateVertexShader(IDirect3DDevice9Ex *iface, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate vertex shader memory.\n"); return E_OUTOFMEMORY; - } hr = vertexshader_init(object, device, byte_code); if (FAILED(hr)) @@ -2296,16 +2414,15 @@ static HRESULT WINAPI d3d9_device_SetVertexShader(IDirect3DDevice9Ex *iface, IDi { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); struct d3d9_vertexshader *shader_obj = unsafe_impl_from_IDirect3DVertexShader9(shader); - HRESULT hr; TRACE("iface %p, shader %p.\n", iface, shader); wined3d_mutex_lock(); - hr = wined3d_device_set_vertex_shader(device->wined3d_device, + wined3d_device_set_vertex_shader(device->wined3d_device, shader_obj ? shader_obj->wined3d_shader : NULL); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_GetVertexShader(IDirect3DDevice9Ex *iface, IDirect3DVertexShader9 **shader) @@ -2317,13 +2434,11 @@ static HRESULT WINAPI d3d9_device_GetVertexShader(IDirect3DDevice9Ex *iface, IDi TRACE("iface %p, shader %p.\n", iface, shader); wined3d_mutex_lock(); - wined3d_shader = wined3d_device_get_vertex_shader(device->wined3d_device); - if (wined3d_shader) + if ((wined3d_shader = wined3d_device_get_vertex_shader(device->wined3d_device))) { shader_impl = wined3d_shader_get_parent(wined3d_shader); *shader = &shader_impl->IDirect3DVertexShader9_iface; IDirect3DVertexShader9_AddRef(*shader); - wined3d_shader_decref(wined3d_shader); } else { @@ -2524,25 +2639,24 @@ static HRESULT WINAPI d3d9_device_SetIndices(IDirect3DDevice9Ex *iface, IDirect3 { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); struct d3d9_indexbuffer *ib = unsafe_impl_from_IDirect3DIndexBuffer9(buffer); - HRESULT hr; TRACE("iface %p, buffer %p.\n", iface, buffer); wined3d_mutex_lock(); - hr = wined3d_device_set_index_buffer(device->wined3d_device, + wined3d_device_set_index_buffer(device->wined3d_device, ib ? ib->wined3d_buffer : NULL, ib ? ib->format : WINED3DFMT_UNKNOWN); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_GetIndices(IDirect3DDevice9Ex *iface, IDirect3DIndexBuffer9 **buffer) { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - struct wined3d_buffer *retIndexData = NULL; + enum wined3d_format_id wined3d_format; + struct wined3d_buffer *wined3d_buffer; struct d3d9_indexbuffer *buffer_impl; - HRESULT hr; TRACE("iface %p, buffer %p.\n", iface, buffer); @@ -2550,23 +2664,19 @@ static HRESULT WINAPI d3d9_device_GetIndices(IDirect3DDevice9Ex *iface, IDirect3 return D3DERR_INVALIDCALL; wined3d_mutex_lock(); - hr = wined3d_device_get_index_buffer(device->wined3d_device, &retIndexData); - if (SUCCEEDED(hr) && retIndexData) + if ((wined3d_buffer = wined3d_device_get_index_buffer(device->wined3d_device, &wined3d_format))) { - buffer_impl = wined3d_buffer_get_parent(retIndexData); + buffer_impl = wined3d_buffer_get_parent(wined3d_buffer); *buffer = &buffer_impl->IDirect3DIndexBuffer9_iface; IDirect3DIndexBuffer9_AddRef(*buffer); - wined3d_buffer_decref(retIndexData); } else { - if (FAILED(hr)) - FIXME("Call to GetIndices failed\n"); *buffer = NULL; } wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_CreatePixelShader(IDirect3DDevice9Ex *iface, @@ -2603,16 +2713,15 @@ static HRESULT WINAPI d3d9_device_SetPixelShader(IDirect3DDevice9Ex *iface, IDir { struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); struct d3d9_pixelshader *shader_obj = unsafe_impl_from_IDirect3DPixelShader9(shader); - HRESULT hr; TRACE("iface %p, shader %p.\n", iface, shader); wined3d_mutex_lock(); - hr = wined3d_device_set_pixel_shader(device->wined3d_device, + wined3d_device_set_pixel_shader(device->wined3d_device, shader_obj ? shader_obj->wined3d_shader : NULL); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_GetPixelShader(IDirect3DDevice9Ex *iface, IDirect3DPixelShader9 **shader) @@ -2626,13 +2735,11 @@ static HRESULT WINAPI d3d9_device_GetPixelShader(IDirect3DDevice9Ex *iface, IDir if (!shader) return D3DERR_INVALIDCALL; wined3d_mutex_lock(); - wined3d_shader = wined3d_device_get_pixel_shader(device->wined3d_device); - if (wined3d_shader) + if ((wined3d_shader = wined3d_device_get_pixel_shader(device->wined3d_device))) { shader_impl = wined3d_shader_get_parent(wined3d_shader); *shader = &shader_impl->IDirect3DPixelShader9_iface; IDirect3DPixelShader9_AddRef(*shader); - wined3d_shader_decref(wined3d_shader); } else { @@ -2738,49 +2845,23 @@ static HRESULT WINAPI d3d9_device_GetPixelShaderConstantB(IDirect3DDevice9Ex *if static HRESULT WINAPI d3d9_device_DrawRectPatch(IDirect3DDevice9Ex *iface, UINT handle, const float *segment_count, const D3DRECTPATCH_INFO *patch_info) { - struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; - - TRACE("iface %p, handle %#x, segment_count %p, patch_info %p.\n", + FIXME("iface %p, handle %#x, segment_count %p, patch_info %p unimplemented.\n", iface, handle, segment_count, patch_info); - - wined3d_mutex_lock(); - hr = wined3d_device_draw_rect_patch(device->wined3d_device, handle, - segment_count, (const struct wined3d_rect_patch_info *)patch_info); - wined3d_mutex_unlock(); - - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_DrawTriPatch(IDirect3DDevice9Ex *iface, UINT handle, const float *segment_count, const D3DTRIPATCH_INFO *patch_info) { - struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; - - TRACE("iface %p, handle %#x, segment_count %p, patch_info %p.\n", + FIXME("iface %p, handle %#x, segment_count %p, patch_info %p unimplemented.\n", iface, handle, segment_count, patch_info); - - wined3d_mutex_lock(); - hr = wined3d_device_draw_tri_patch(device->wined3d_device, handle, - segment_count, (const struct wined3d_tri_patch_info *)patch_info); - wined3d_mutex_unlock(); - - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_device_DeletePatch(IDirect3DDevice9Ex *iface, UINT handle) { - struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(iface); - HRESULT hr; - - TRACE("iface %p, handle %#x.\n", iface, handle); - - wined3d_mutex_lock(); - hr = wined3d_device_delete_patch(device->wined3d_device, handle); - wined3d_mutex_unlock(); - - return hr; + FIXME("iface %p, handle %#x unimplemented.\n", iface, handle); + return D3DERR_INVALIDCALL; } static HRESULT WINAPI d3d9_device_CreateQuery(IDirect3DDevice9Ex *iface, D3DQUERYTYPE type, IDirect3DQuery9 **query) @@ -2793,10 +2874,7 @@ static HRESULT WINAPI d3d9_device_CreateQuery(IDirect3DDevice9Ex *iface, D3DQUER object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate query memory.\n"); return E_OUTOFMEMORY; - } hr = query_init(object, device, type); if (FAILED(hr)) @@ -2971,13 +3049,23 @@ static HRESULT WINAPI d3d9_device_ResetEx(IDirect3DDevice9Ex *iface, } wined3d_mutex_lock(); + + if (device->vertex_buffer) + { + wined3d_buffer_decref(device->vertex_buffer); + device->vertex_buffer = NULL; + device->vertex_buffer_size = 0; + } + if (device->index_buffer) + { + wined3d_buffer_decref(device->index_buffer); + device->index_buffer = NULL; + device->index_buffer_size = 0; + } + wined3d_swapchain_desc_from_present_parameters(&swapchain_desc, present_parameters); hr = wined3d_device_reset(device->wined3d_device, &swapchain_desc, - mode ? &wined3d_mode : NULL, reset_enum_callback); - if (FAILED(hr)) - device->not_reset = TRUE; - else - device->not_reset = FALSE; + mode ? &wined3d_mode : NULL, reset_enum_callback, FALSE); wined3d_mutex_unlock(); return hr; @@ -3172,7 +3260,7 @@ static void CDECL device_parent_mode_changed(struct wined3d_device_parent *devic static HRESULT CDECL device_parent_create_texture_surface(struct wined3d_device_parent *device_parent, void *container_parent, UINT width, UINT height, enum wined3d_format_id format, DWORD usage, - enum wined3d_pool pool, UINT level, enum wined3d_cubemap_face face, struct wined3d_surface **surface) + enum wined3d_pool pool, UINT sub_resource_idx, struct wined3d_surface **surface) { struct d3d9_device *device = device_from_device_parent(device_parent); struct d3d9_surface *d3d_surface; @@ -3180,16 +3268,14 @@ static HRESULT CDECL device_parent_create_texture_surface(struct wined3d_device_ HRESULT hr; TRACE("device_parent %p, container_parent %p, width %u, height %u, format %#x, usage %#x,\n" - "\tpool %#x, level %u, face %u, surface %p.\n", - device_parent, container_parent, width, height, format, usage, pool, level, face, surface); + "\tpool %#x, sub_resource_idx %u, surface %p.\n", + device_parent, container_parent, width, height, format, usage, pool, sub_resource_idx, surface); if (pool == WINED3D_POOL_DEFAULT && !(usage & D3DUSAGE_DYNAMIC)) lockable = FALSE; - hr = d3d9_device_create_surface(device, width, height, - d3dformat_from_wined3dformat(format), lockable, FALSE /* Discard */, level, - (IDirect3DSurface9 **)&d3d_surface, usage, pool, D3DMULTISAMPLE_NONE, 0 /* MultisampleQuality */); - if (FAILED(hr)) + if (FAILED(hr = d3d9_device_create_surface(device, width, height, d3dformat_from_wined3dformat(format), + lockable, FALSE, (IDirect3DSurface9 **)&d3d_surface, usage, pool, D3DMULTISAMPLE_NONE, 0))) { WARN("Failed to create surface, hr %#x.\n", hr); return hr; @@ -3222,7 +3308,7 @@ static HRESULT CDECL device_parent_create_swapchain_surface(struct wined3d_devic multisample_type, multisample_quality, surface); if (FAILED(hr = d3d9_device_create_surface(device, width, height, d3dformat_from_wined3dformat(format_id), - TRUE, FALSE, 0, (IDirect3DSurface9 **)&d3d_surface, usage, D3DPOOL_DEFAULT, multisample_type, + TRUE, FALSE, (IDirect3DSurface9 **)&d3d_surface, usage, D3DPOOL_DEFAULT, multisample_type, multisample_quality))) { WARN("Failed to create surface, hr %#x.\n", hr); diff --git a/dll/directx/wine/d3d9/directx.c b/dll/directx/wine/d3d9/directx.c index e887cdd80e6..41b5e7027df 100644 --- a/dll/directx/wine/d3d9/directx.c +++ b/dll/directx/wine/d3d9/directx.c @@ -264,7 +264,7 @@ static HRESULT WINAPI d3d9_CheckDeviceFormat(IDirect3D9Ex *iface, UINT adapter, wined3d_mutex_lock(); hr = wined3d_check_device_format(d3d9->wined3d, adapter, device_type, wined3dformat_from_d3dformat(adapter_format), - usage, wined3d_rtype, wined3dformat_from_d3dformat(format), WINED3D_SURFACE_TYPE_OPENGL); + usage, wined3d_rtype, wined3dformat_from_d3dformat(format)); wined3d_mutex_unlock(); return hr; @@ -456,10 +456,7 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH d3d9_CreateDevice(IDirect3D9Ex *iface, U object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate device memory.\n"); return E_OUTOFMEMORY; - } hr = device_init(object, d3d9, d3d9->wined3d, adapter, device_type, focus_window, flags, parameters, NULL); if (FAILED(hr)) @@ -567,10 +564,7 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH d3d9_CreateDeviceEx(IDirect3D9Ex *iface, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate device memory.\n"); return E_OUTOFMEMORY; - } hr = device_init(object, d3d9, d3d9->wined3d, adapter, device_type, focus_window, flags, parameters, mode); if (FAILED(hr)) diff --git a/dll/directx/wine/d3d9/stateblock.c b/dll/directx/wine/d3d9/stateblock.c index 6062364b523..a1e7131155e 100644 --- a/dll/directx/wine/d3d9/stateblock.c +++ b/dll/directx/wine/d3d9/stateblock.c @@ -95,29 +95,27 @@ static HRESULT WINAPI d3d9_stateblock_GetDevice(IDirect3DStateBlock9 *iface, IDi static HRESULT WINAPI d3d9_stateblock_Capture(IDirect3DStateBlock9 *iface) { struct d3d9_stateblock *stateblock = impl_from_IDirect3DStateBlock9(iface); - HRESULT hr; TRACE("iface %p.\n", iface); wined3d_mutex_lock(); - hr = wined3d_stateblock_capture(stateblock->wined3d_stateblock); + wined3d_stateblock_capture(stateblock->wined3d_stateblock); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d9_stateblock_Apply(IDirect3DStateBlock9 *iface) { struct d3d9_stateblock *stateblock = impl_from_IDirect3DStateBlock9(iface); - HRESULT hr; TRACE("iface %p.\n", iface); wined3d_mutex_lock(); - hr = wined3d_stateblock_apply(stateblock->wined3d_stateblock); + wined3d_stateblock_apply(stateblock->wined3d_stateblock); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } diff --git a/dll/directx/wine/d3d9/surface.c b/dll/directx/wine/d3d9/surface.c index 9d44d84972a..3e1c34c5115 100644 --- a/dll/directx/wine/d3d9/surface.c +++ b/dll/directx/wine/d3d9/surface.c @@ -390,9 +390,9 @@ static const struct wined3d_parent_ops d3d9_surface_wined3d_parent_ops = surface_wined3d_object_destroyed, }; -HRESULT surface_init(struct d3d9_surface *surface, struct d3d9_device *device, - UINT width, UINT height, D3DFORMAT format, BOOL lockable, BOOL discard, UINT level, - DWORD usage, D3DPOOL pool, D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality) +HRESULT surface_init(struct d3d9_surface *surface, struct d3d9_device *device, UINT width, UINT height, + D3DFORMAT format, BOOL lockable, BOOL discard, DWORD usage, D3DPOOL pool, + D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality) { DWORD flags = 0; HRESULT hr; @@ -430,8 +430,8 @@ HRESULT surface_init(struct d3d9_surface *surface, struct d3d9_device *device, wined3d_mutex_lock(); hr = wined3d_surface_create(device->wined3d_device, width, height, wined3dformat_from_d3dformat(format), - level, usage & WINED3DUSAGE_MASK, (enum wined3d_pool)pool, multisample_type, multisample_quality, - WINED3D_SURFACE_TYPE_OPENGL, flags, surface, &d3d9_surface_wined3d_parent_ops, &surface->wined3d_surface); + usage & WINED3DUSAGE_MASK, (enum wined3d_pool)pool, multisample_type, multisample_quality, + flags, surface, &d3d9_surface_wined3d_parent_ops, &surface->wined3d_surface); wined3d_mutex_unlock(); if (FAILED(hr)) { diff --git a/dll/directx/wine/d3d9/swapchain.c b/dll/directx/wine/d3d9/swapchain.c index d06dc81e79d..57e76ea8c47 100644 --- a/dll/directx/wine/d3d9/swapchain.c +++ b/dll/directx/wine/d3d9/swapchain.c @@ -131,20 +131,22 @@ static HRESULT WINAPI d3d9_swapchain_GetBackBuffer(IDirect3DSwapChain9 *iface, struct d3d9_swapchain *swapchain = impl_from_IDirect3DSwapChain9(iface); struct wined3d_surface *wined3d_surface = NULL; struct d3d9_surface *surface_impl; - HRESULT hr; + HRESULT hr = D3D_OK; TRACE("iface %p, backbuffer_idx %u, backbuffer_type %#x, backbuffer %p.\n", iface, backbuffer_idx, backbuffer_type, backbuffer); wined3d_mutex_lock(); - hr = wined3d_swapchain_get_back_buffer(swapchain->wined3d_swapchain, - backbuffer_idx, (enum wined3d_backbuffer_type)backbuffer_type, &wined3d_surface); - if (SUCCEEDED(hr) && wined3d_surface) + if ((wined3d_surface = wined3d_swapchain_get_back_buffer(swapchain->wined3d_swapchain, + backbuffer_idx, (enum wined3d_backbuffer_type)backbuffer_type))) { surface_impl = wined3d_surface_get_parent(wined3d_surface); *backbuffer = &surface_impl->IDirect3DSurface9_iface; IDirect3DSurface9_AddRef(*backbuffer); - wined3d_surface_decref(wined3d_surface); + } + else + { + hr = D3DERR_INVALIDCALL; } wined3d_mutex_unlock(); @@ -208,16 +210,15 @@ static HRESULT WINAPI d3d9_swapchain_GetPresentParameters(IDirect3DSwapChain9 *i { struct d3d9_swapchain *swapchain = impl_from_IDirect3DSwapChain9(iface); struct wined3d_swapchain_desc desc; - HRESULT hr; TRACE("iface %p, parameters %p.\n", iface, parameters); wined3d_mutex_lock(); - hr = wined3d_swapchain_get_desc(swapchain->wined3d_swapchain, &desc); + wined3d_swapchain_get_desc(swapchain->wined3d_swapchain, &desc); wined3d_mutex_unlock(); present_parameters_from_wined3d_swapchain_desc(parameters, &desc); - return hr; + return D3D_OK; } @@ -254,9 +255,8 @@ static HRESULT swapchain_init(struct d3d9_swapchain *swapchain, struct d3d9_devi swapchain->IDirect3DSwapChain9_iface.lpVtbl = &d3d9_swapchain_vtbl; wined3d_mutex_lock(); - hr = wined3d_swapchain_create(device->wined3d_device, desc, - WINED3D_SURFACE_TYPE_OPENGL, swapchain, &d3d9_swapchain_wined3d_parent_ops, - &swapchain->wined3d_swapchain); + hr = wined3d_swapchain_create(device->wined3d_device, desc, swapchain, + &d3d9_swapchain_wined3d_parent_ops, &swapchain->wined3d_swapchain); wined3d_mutex_unlock(); if (FAILED(hr)) @@ -278,10 +278,7 @@ HRESULT d3d9_swapchain_create(struct d3d9_device *device, struct wined3d_swapcha HRESULT hr; if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)))) - { - ERR("Failed to allocate swapchain memory.\n"); return E_OUTOFMEMORY; - } if (FAILED(hr = swapchain_init(object, device, desc))) { diff --git a/dll/directx/wine/d3d9/vertexdeclaration.c b/dll/directx/wine/d3d9/vertexdeclaration.c index d57d3b96129..0eab4632808 100644 --- a/dll/directx/wine/d3d9/vertexdeclaration.c +++ b/dll/directx/wine/d3d9/vertexdeclaration.c @@ -419,10 +419,7 @@ HRESULT d3d9_vertex_declaration_create(struct d3d9_device *device, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate vertex declaration memory.\n"); return E_OUTOFMEMORY; - } hr = vertexdeclaration_init(object, device, elements); if (FAILED(hr)) diff --git a/dll/directx/wine/ddraw/ddraw.c b/dll/directx/wine/ddraw/ddraw.c index 9fd1c6bcd88..337aab0f5de 100644 --- a/dll/directx/wine/ddraw/ddraw.c +++ b/dll/directx/wine/ddraw/ddraw.c @@ -27,6 +27,10 @@ WINE_DEFAULT_DEBUG_CHANNEL(ddraw); +static struct wined3d_display_mode original_mode; +static const struct ddraw *exclusive_ddraw; +static BOOL restore_mode; + /* Device identifier. Don't relay it to WineD3D */ static const DDDEVICEIDENTIFIER2 deviceidentifier = { @@ -115,134 +119,78 @@ static inline struct ddraw *impl_from_IDirect3D7(IDirect3D7 *iface) return CONTAINING_RECORD(iface, struct ddraw, IDirect3D7_iface); } -/***************************************************************************** - * IUnknown Methods - *****************************************************************************/ - -/***************************************************************************** - * IDirectDraw7::QueryInterface - * - * Queries different interfaces of the DirectDraw object. It can return - * IDirectDraw interfaces in version 1, 2, 4 and 7, and IDirect3D interfaces - * in version 1, 2, 3 and 7. An IDirect3DDevice can be created with this - * method. - * The returned interface is AddRef()-ed before it's returned - * - * Used for version 1, 2, 4 and 7 - * - * Params: - * refiid: Interface ID asked for - * obj: Used to return the interface pointer - * - * Returns: - * S_OK if an interface was found - * E_NOINTERFACE if the requested interface wasn't found - * - *****************************************************************************/ -static HRESULT WINAPI ddraw7_QueryInterface(IDirectDraw7 *iface, REFIID refiid, void **obj) +static HRESULT WINAPI ddraw7_QueryInterface(IDirectDraw7 *iface, REFIID riid, void **out) { - struct ddraw *This = impl_from_IDirectDraw7(iface); + struct ddraw *ddraw = impl_from_IDirectDraw7(iface); - TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(refiid), obj); + TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out); - /* Can change surface impl type */ - wined3d_mutex_lock(); - - /* According to COM docs, if the QueryInterface fails, obj should be set to NULL */ - *obj = NULL; - - if(!refiid) + if (!riid) { - wined3d_mutex_unlock(); + *out = NULL; return DDERR_INVALIDPARAMS; } - /* Check DirectDraw Interfaces */ - if ( IsEqualGUID( &IID_IUnknown, refiid ) || - IsEqualGUID( &IID_IDirectDraw7, refiid ) ) + /* The refcount unit test revealed that an IDirect3D7 interface can only + * be queried from a DirectDraw object that was created as an IDirectDraw7 + * interface. The older interfaces can query any IDirect3D version except + * 7, because they are all initially created as IDirectDraw. This isn't + * really crucial behavior, and messy to implement with the common + * creation function, so it has been left out here. */ + if (IsEqualGUID(&IID_IDirectDraw7, riid) + || IsEqualGUID(&IID_IUnknown, riid)) { - *obj = &This->IDirectDraw7_iface; - TRACE("(%p) Returning IDirectDraw7 interface at %p\n", This, *obj); + *out = &ddraw->IDirectDraw7_iface; + TRACE("Returning IDirectDraw7 interface %p.\n", *out); } - else if ( IsEqualGUID( &IID_IDirectDraw4, refiid ) ) + else if (IsEqualGUID(&IID_IDirectDraw4, riid)) { - *obj = &This->IDirectDraw4_iface; - TRACE("(%p) Returning IDirectDraw4 interface at %p\n", This, *obj); + *out = &ddraw->IDirectDraw4_iface; + TRACE("Returning IDirectDraw4 interface %p.\n", *out); } - else if ( IsEqualGUID( &IID_IDirectDraw3, refiid ) ) + else if (IsEqualGUID(&IID_IDirectDraw2, riid)) { - /* This Interface exists in ddrawex.dll, it is implemented in a wrapper */ - WARN("IDirectDraw3 is not valid in ddraw.dll\n"); - *obj = NULL; - wined3d_mutex_unlock(); - return E_NOINTERFACE; + *out = &ddraw->IDirectDraw2_iface; + TRACE("Returning IDirectDraw2 interface %p.\n", *out); } - else if ( IsEqualGUID( &IID_IDirectDraw2, refiid ) ) + else if (IsEqualGUID(&IID_IDirectDraw, riid)) { - *obj = &This->IDirectDraw2_iface; - TRACE("(%p) Returning IDirectDraw2 interface at %p\n", This, *obj); + *out = &ddraw->IDirectDraw_iface; + TRACE("Returning IDirectDraw interface %p.\n", *out); } - else if ( IsEqualGUID( &IID_IDirectDraw, refiid ) ) + else if (IsEqualGUID(&IID_IDirect3D7, riid)) { - *obj = &This->IDirectDraw_iface; - TRACE("(%p) Returning IDirectDraw interface at %p\n", This, *obj); + ddraw->d3dversion = 7; + *out = &ddraw->IDirect3D7_iface; + TRACE("Returning Direct3D7 interface %p.\n", *out); } - - /* Direct3D - * The refcount unit test revealed that an IDirect3D7 interface can only be queried - * from a DirectDraw object that was created as an IDirectDraw7 interface. No idea - * who had this idea and why. The older interfaces can query and IDirect3D version - * because they are all created as IDirectDraw(1). This isn't really crucial behavior, - * and messy to implement with the common creation function, so it has been left out here. - */ - else if ( IsEqualGUID( &IID_IDirect3D , refiid ) || - IsEqualGUID( &IID_IDirect3D2 , refiid ) || - IsEqualGUID( &IID_IDirect3D3 , refiid ) || - IsEqualGUID( &IID_IDirect3D7 , refiid ) ) + else if (IsEqualGUID(&IID_IDirect3D3, riid)) { - /* Check the surface implementation */ - if (DefaultSurfaceType != WINED3D_SURFACE_TYPE_OPENGL) - { - WARN("The app requests a Direct3D interface, but non-opengl surfaces where set in winecfg\n"); - /* Do not abort here, only reject 3D Device creation */ - } - - if ( IsEqualGUID( &IID_IDirect3D , refiid ) ) - { - This->d3dversion = 1; - *obj = &This->IDirect3D_iface; - TRACE(" returning Direct3D interface at %p.\n", *obj); - } - else if ( IsEqualGUID( &IID_IDirect3D2 , refiid ) ) - { - This->d3dversion = 2; - *obj = &This->IDirect3D2_iface; - TRACE(" returning Direct3D2 interface at %p.\n", *obj); - } - else if ( IsEqualGUID( &IID_IDirect3D3 , refiid ) ) - { - This->d3dversion = 3; - *obj = &This->IDirect3D3_iface; - TRACE(" returning Direct3D3 interface at %p.\n", *obj); - } - else if(IsEqualGUID( &IID_IDirect3D7 , refiid )) - { - This->d3dversion = 7; - *obj = &This->IDirect3D7_iface; - TRACE(" returning Direct3D7 interface at %p.\n", *obj); - } + ddraw->d3dversion = 3; + *out = &ddraw->IDirect3D3_iface; + TRACE("Returning Direct3D3 interface %p.\n", *out); + } + else if (IsEqualGUID(&IID_IDirect3D2, riid)) + { + ddraw->d3dversion = 2; + *out = &ddraw->IDirect3D2_iface; + TRACE("Returning Direct3D2 interface %p.\n", *out); + } + else if (IsEqualGUID(&IID_IDirect3D, riid)) + { + ddraw->d3dversion = 1; + *out = &ddraw->IDirect3D_iface; + TRACE("Returning Direct3D interface %p.\n", *out); } /* Unknown interface */ else { - ERR("(%p)->(%s, %p): No interface found\n", This, debugstr_guid(refiid), obj); - wined3d_mutex_unlock(); + WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid)); + *out = NULL; return E_NOINTERFACE; } - IUnknown_AddRef( (IUnknown *) *obj ); - wined3d_mutex_unlock(); - + IUnknown_AddRef((IUnknown *)*out); return S_OK; } @@ -418,7 +366,7 @@ void ddraw_destroy_swapchain(struct ddraw *ddraw) wined3d_swapchain_decref(ddraw->wined3d_swapchain); ddraw->wined3d_swapchain = NULL; - if (DefaultSurfaceType == WINED3D_SURFACE_TYPE_OPENGL) + if (DefaultSurfaceType == DDRAW_SURFACE_TYPE_OPENGL) { UINT i; @@ -603,9 +551,6 @@ static HRESULT ddraw_set_focus_window(struct ddraw *ddraw, HWND window) ddraw->focuswindow = window; - /* Use the focus window for drawing too. */ - ddraw->dest_window = ddraw->focuswindow; - return DD_OK; } @@ -684,7 +629,7 @@ static HRESULT ddraw_create_swapchain(struct ddraw *ddraw, HWND window, BOOL win swapchain_desc.device_window = window; swapchain_desc.windowed = windowed; - if (DefaultSurfaceType == WINED3D_SURFACE_TYPE_OPENGL) + if (DefaultSurfaceType == DDRAW_SURFACE_TYPE_OPENGL) hr = ddraw_attach_d3d_device(ddraw, &swapchain_desc); else hr = wined3d_device_init_gdi(ddraw->wined3d_device, &swapchain_desc); @@ -695,13 +640,13 @@ static HRESULT ddraw_create_swapchain(struct ddraw *ddraw, HWND window, BOOL win return hr; } - if (FAILED(hr = wined3d_device_get_swapchain(ddraw->wined3d_device, 0, &ddraw->wined3d_swapchain))) + if (!(ddraw->wined3d_swapchain = wined3d_device_get_swapchain(ddraw->wined3d_device, 0))) { - ERR("Failed to get swapchain, hr %#x.\n", hr); - ddraw->wined3d_swapchain = NULL; - return hr; + ERR("Failed to get swapchain.\n"); + return DDERR_INVALIDPARAMS; } + wined3d_swapchain_incref(ddraw->wined3d_swapchain); ddraw_set_swapchain_window(ddraw, window); return DD_OK; @@ -751,23 +696,19 @@ static HRESULT ddraw_create_swapchain(struct ddraw *ddraw, HWND window, BOOL win * (Probably others too, have to investigate) * *****************************************************************************/ -static HRESULT WINAPI ddraw7_SetCooperativeLevel(IDirectDraw7 *iface, HWND hwnd, DWORD cooplevel) +static HRESULT WINAPI ddraw7_SetCooperativeLevel(IDirectDraw7 *iface, HWND window, DWORD cooplevel) { struct ddraw *This = impl_from_IDirectDraw7(iface); + struct wined3d_surface *rt = NULL, *ds = NULL; struct wined3d_stateblock *stateblock; - struct wined3d_surface *rt, *ds; BOOL restore_state = FALSE; - HWND window; HRESULT hr; - TRACE("iface %p, window %p, flags %#x.\n", iface, hwnd, cooplevel); + TRACE("iface %p, window %p, flags %#x.\n", iface, window, cooplevel); DDRAW_dump_cooperativelevel(cooplevel); wined3d_mutex_lock(); - /* Get the old window */ - window = This->dest_window; - /* Tests suggest that we need one of them: */ if(!(cooplevel & (DDSCL_SETFOCUSWINDOW | DDSCL_NORMAL | @@ -804,14 +745,14 @@ static HRESULT WINAPI ddraw7_SetCooperativeLevel(IDirectDraw7 *iface, HWND hwnd, return DDERR_INVALIDPARAMS; } - hr = ddraw_set_focus_window(This, hwnd); + hr = ddraw_set_focus_window(This, window); wined3d_mutex_unlock(); return hr; } if (cooplevel & DDSCL_EXCLUSIVE) { - if (!(cooplevel & DDSCL_FULLSCREEN) || !(hwnd || (cooplevel & DDSCL_CREATEDEVICEWINDOW))) + if (!(cooplevel & DDSCL_FULLSCREEN) || !(window || (cooplevel & DDSCL_CREATEDEVICEWINDOW))) { WARN("DDSCL_EXCLUSIVE requires DDSCL_FULLSCREEN and a window.\n"); wined3d_mutex_unlock(); @@ -849,20 +790,20 @@ static HRESULT WINAPI ddraw7_SetCooperativeLevel(IDirectDraw7 *iface, HWND hwnd, if (cooplevel & DDSCL_SETFOCUSWINDOW) { - if (!hwnd) + if (!window) { wined3d_mutex_unlock(); return DDERR_NOHWND; } - if (FAILED(hr = ddraw_set_focus_window(This, hwnd))) + if (FAILED(hr = ddraw_set_focus_window(This, window))) { wined3d_mutex_unlock(); return hr; } } - hwnd = device_window; + window = device_window; } } else @@ -874,28 +815,28 @@ static HRESULT WINAPI ddraw7_SetCooperativeLevel(IDirectDraw7 *iface, HWND hwnd, } if ((This->cooperative_level & DDSCL_EXCLUSIVE) - && (hwnd != window || !(cooplevel & DDSCL_EXCLUSIVE))) + && (window != This->dest_window || !(cooplevel & DDSCL_EXCLUSIVE))) wined3d_device_release_focus_window(This->wined3d_device); - if ((cooplevel & DDSCL_FULLSCREEN) != (This->cooperative_level & DDSCL_FULLSCREEN) || hwnd != window) + if ((cooplevel & DDSCL_FULLSCREEN) != (This->cooperative_level & DDSCL_FULLSCREEN) || window != This->dest_window) { if (This->cooperative_level & DDSCL_FULLSCREEN) - wined3d_device_restore_fullscreen_window(This->wined3d_device, window); + wined3d_device_restore_fullscreen_window(This->wined3d_device, This->dest_window); if (cooplevel & DDSCL_FULLSCREEN) { struct wined3d_display_mode display_mode; wined3d_get_adapter_display_mode(This->wined3d, WINED3DADAPTER_DEFAULT, &display_mode, NULL); - wined3d_device_setup_fullscreen_window(This->wined3d_device, hwnd, + wined3d_device_setup_fullscreen_window(This->wined3d_device, window, display_mode.width, display_mode.height); } } if ((cooplevel & DDSCL_EXCLUSIVE) - && (hwnd != window || !(This->cooperative_level & DDSCL_EXCLUSIVE))) + && (window != This->dest_window || !(This->cooperative_level & DDSCL_EXCLUSIVE))) { - hr = wined3d_device_acquire_focus_window(This->wined3d_device, hwnd); + hr = wined3d_device_acquire_focus_window(This->wined3d_device, window); if (FAILED(hr)) { ERR("Failed to acquire focus window, hr %#x.\n", hr); @@ -904,16 +845,12 @@ static HRESULT WINAPI ddraw7_SetCooperativeLevel(IDirectDraw7 *iface, HWND hwnd, } } - /* Don't override focus windows or private device windows */ - if (hwnd && !This->focuswindow && !This->devicewindow && (hwnd != window)) - This->dest_window = hwnd; - if (cooplevel & DDSCL_MULTITHREADED && !(This->cooperative_level & DDSCL_MULTITHREADED)) wined3d_device_set_multithreaded(This->wined3d_device); if (This->wined3d_swapchain) { - if (DefaultSurfaceType != WINED3D_SURFACE_TYPE_GDI) + if (DefaultSurfaceType != DDRAW_SURFACE_TYPE_GDI) { restore_state = TRUE; @@ -924,28 +861,21 @@ static HRESULT WINAPI ddraw7_SetCooperativeLevel(IDirectDraw7 *iface, HWND hwnd, return hr; } - if (FAILED(hr = wined3d_stateblock_capture(stateblock))) - { - ERR("Failed to capture stateblock, hr %#x.\n", hr); - wined3d_stateblock_decref(stateblock); - wined3d_mutex_unlock(); - return hr; - } - - wined3d_device_get_render_target(This->wined3d_device, 0, &rt); + wined3d_stateblock_capture(stateblock); + rt = wined3d_device_get_render_target(This->wined3d_device, 0); if (rt == This->wined3d_frontbuffer) - { - wined3d_surface_decref(rt); rt = NULL; - } + else if (rt) + wined3d_surface_incref(rt); - wined3d_device_get_depth_stencil(This->wined3d_device, &ds); + if ((ds = wined3d_device_get_depth_stencil(This->wined3d_device))) + wined3d_surface_incref(ds); } ddraw_destroy_swapchain(This); } - if (FAILED(hr = ddraw_create_swapchain(This, This->dest_window, !(cooplevel & DDSCL_FULLSCREEN)))) + if (FAILED(hr = ddraw_create_swapchain(This, window, !(cooplevel & DDSCL_FULLSCREEN)))) ERR("Failed to create swapchain, hr %#x.\n", hr); if (restore_state) @@ -962,14 +892,8 @@ static HRESULT WINAPI ddraw7_SetCooperativeLevel(IDirectDraw7 *iface, HWND hwnd, wined3d_surface_decref(rt); } - hr = wined3d_stateblock_apply(stateblock); + wined3d_stateblock_apply(stateblock); wined3d_stateblock_decref(stateblock); - if (FAILED(hr)) - { - ERR("Failed to apply stateblock, hr %#x.\n", hr); - wined3d_mutex_unlock(); - return hr; - } } /* Unhandled flags */ @@ -980,8 +904,14 @@ static HRESULT WINAPI ddraw7_SetCooperativeLevel(IDirectDraw7 *iface, HWND hwnd, if(cooplevel & DDSCL_FPUSETUP) WARN("(%p) Unhandled flag DDSCL_FPUSETUP, harmless\n", This); + if (cooplevel & DDSCL_EXCLUSIVE) + exclusive_ddraw = This; + else if (exclusive_ddraw == This) + exclusive_ddraw = NULL; + /* Store the cooperative_level */ This->cooperative_level = cooplevel; + This->dest_window = window; TRACE("SetCooperativeLevel retuning DD_OK\n"); wined3d_mutex_unlock(); @@ -1015,79 +945,6 @@ static HRESULT WINAPI ddraw1_SetCooperativeLevel(IDirectDraw *iface, HWND window return ddraw7_SetCooperativeLevel(&ddraw->IDirectDraw7_iface, window, flags); } -/***************************************************************************** - * - * Helper function for SetDisplayMode and RestoreDisplayMode - * - * Implements DirectDraw's SetDisplayMode, but ignores the value of - * ForceRefreshRate, since it is already handled by - * ddraw7_SetDisplayMode. RestoreDisplayMode can use this function - * without worrying that ForceRefreshRate will override the refresh rate. For - * argument and return value documentation, see - * ddraw7_SetDisplayMode. - * - *****************************************************************************/ -static HRESULT ddraw_set_display_mode(struct ddraw *ddraw, DWORD Width, DWORD Height, - DWORD BPP, DWORD RefreshRate, DWORD Flags) -{ - struct wined3d_display_mode mode; - enum wined3d_format_id format; - HRESULT hr; - - TRACE("ddraw %p, width %u, height %u, bpp %u, refresh_rate %u, flags %#x.\n", ddraw, Width, - Height, BPP, RefreshRate, Flags); - - wined3d_mutex_lock(); - if( !Width || !Height ) - { - ERR("Width %u, Height %u, what to do?\n", Width, Height); - /* It looks like Need for Speed Porsche Unleashed expects DD_OK here */ - wined3d_mutex_unlock(); - return DD_OK; - } - - switch(BPP) - { - case 8: format = WINED3DFMT_P8_UINT; break; - case 15: format = WINED3DFMT_B5G5R5X1_UNORM; break; - case 16: format = WINED3DFMT_B5G6R5_UNORM; break; - case 24: format = WINED3DFMT_B8G8R8_UNORM; break; - case 32: format = WINED3DFMT_B8G8R8X8_UNORM; break; - default: format = WINED3DFMT_UNKNOWN; break; - } - - /* Check the exclusive mode - if(!(ddraw->cooperative_level & DDSCL_EXCLUSIVE)) - return DDERR_NOEXCLUSIVEMODE; - * This is WRONG. Don't know if the SDK is completely - * wrong and if there are any conditions when DDERR_NOEXCLUSIVE - * is returned, but Half-Life 1.1.1.1 (Steam version) - * depends on this - */ - - mode.width = Width; - mode.height = Height; - mode.refresh_rate = RefreshRate; - mode.format_id = format; - mode.scanline_ordering = WINED3D_SCANLINE_ORDERING_UNKNOWN; - - /* TODO: The possible return values from msdn suggest that - * the screen mode can't be changed if a surface is locked - * or some drawing is in progress - */ - - /* TODO: Lose the primary surface */ - hr = wined3d_set_adapter_display_mode(ddraw->wined3d, WINED3DADAPTER_DEFAULT, &mode); - - wined3d_mutex_unlock(); - - switch(hr) - { - case WINED3DERR_NOTAVAILABLE: return DDERR_UNSUPPORTED; - default: return hr; - } -} - /***************************************************************************** * IDirectDraw7::SetDisplayMode * @@ -1110,22 +967,75 @@ static HRESULT ddraw_set_display_mode(struct ddraw *ddraw, DWORD Width, DWORD He * DD_OK on success * *****************************************************************************/ -static HRESULT WINAPI ddraw7_SetDisplayMode(IDirectDraw7 *iface, DWORD Width, DWORD Height, - DWORD BPP, DWORD RefreshRate, DWORD Flags) +static HRESULT WINAPI ddraw7_SetDisplayMode(IDirectDraw7 *iface, DWORD width, DWORD height, + DWORD bpp, DWORD refresh_rate, DWORD flags) { struct ddraw *ddraw = impl_from_IDirectDraw7(iface); + struct wined3d_display_mode mode; + enum wined3d_format_id format; + HRESULT hr; TRACE("iface %p, width %u, height %u, bpp %u, refresh_rate %u, flags %#x.\n", - iface, Width, Height, BPP, RefreshRate, Flags); + iface, width, height, bpp, refresh_rate, flags); if (force_refresh_rate != 0) { TRACE("ForceRefreshRate overriding passed-in refresh rate (%u Hz) to %u Hz\n", - RefreshRate, force_refresh_rate); - RefreshRate = force_refresh_rate; + refresh_rate, force_refresh_rate); + refresh_rate = force_refresh_rate; } - return ddraw_set_display_mode(ddraw, Width, Height, BPP, RefreshRate, Flags); + wined3d_mutex_lock(); + + if (exclusive_ddraw && exclusive_ddraw != ddraw) + { + wined3d_mutex_unlock(); + return DDERR_NOEXCLUSIVEMODE; + } + + if (!width || !height) + { + /* It looks like Need for Speed Porsche Unleashed expects DD_OK here. */ + wined3d_mutex_unlock(); + return DD_OK; + } + + if (!restore_mode && FAILED(hr = wined3d_get_adapter_display_mode(ddraw->wined3d, + WINED3DADAPTER_DEFAULT, &original_mode, NULL))) + ERR("Failed to get current display mode, hr %#x.\n", hr); + + switch (bpp) + { + case 8: format = WINED3DFMT_P8_UINT; break; + case 15: format = WINED3DFMT_B5G5R5X1_UNORM; break; + case 16: format = WINED3DFMT_B5G6R5_UNORM; break; + case 24: format = WINED3DFMT_B8G8R8_UNORM; break; + case 32: format = WINED3DFMT_B8G8R8X8_UNORM; break; + default: format = WINED3DFMT_UNKNOWN; break; + } + + mode.width = width; + mode.height = height; + mode.refresh_rate = refresh_rate; + mode.format_id = format; + mode.scanline_ordering = WINED3D_SCANLINE_ORDERING_UNKNOWN; + + /* TODO: The possible return values from msdn suggest that the screen mode + * can't be changed if a surface is locked or some drawing is in progress. */ + /* TODO: Lose the primary surface. */ + if (SUCCEEDED(hr = wined3d_set_adapter_display_mode(ddraw->wined3d, WINED3DADAPTER_DEFAULT, &mode))) + { + ddraw->restore_mode = TRUE; + restore_mode = TRUE; + } + + wined3d_mutex_unlock(); + + switch (hr) + { + case WINED3DERR_NOTAVAILABLE: return DDERR_UNSUPPORTED; + default: return hr; + } } static HRESULT WINAPI ddraw4_SetDisplayMode(IDirectDraw4 *iface, DWORD width, DWORD height, @@ -1164,17 +1074,6 @@ static HRESULT WINAPI ddraw1_SetDisplayMode(IDirectDraw *iface, DWORD width, DWO * * Restores the display mode to what it was at creation time. Basically. * - * A problem arises when there are 2 DirectDraw objects using the same hwnd: - * -> DD_1 finds the screen at 1400x1050x32 when created, sets it to 640x480x16 - * -> DD_2 is created, finds the screen at 640x480x16, sets it to 1024x768x32 - * -> DD_1 is released. The screen should be left at 1024x768x32. - * -> DD_2 is released. The screen should be set to 1400x1050x32 - * This case is unhandled right now, but Empire Earth does it this way. - * (But perhaps there is something in SetCooperativeLevel to prevent this) - * - * The msdn says that this method resets the display mode to what it was before - * SetDisplayMode was called. What if SetDisplayModes is called 2 times?? - * * Returns * DD_OK on success * DDERR_NOEXCLUSIVE mode if the device isn't in fullscreen mode @@ -1183,10 +1082,33 @@ static HRESULT WINAPI ddraw1_SetDisplayMode(IDirectDraw *iface, DWORD width, DWO static HRESULT WINAPI ddraw7_RestoreDisplayMode(IDirectDraw7 *iface) { struct ddraw *ddraw = impl_from_IDirectDraw7(iface); + HRESULT hr; TRACE("iface %p.\n", iface); - return ddraw_set_display_mode(ddraw, ddraw->orig_width, ddraw->orig_height, ddraw->orig_bpp, 0, 0); + wined3d_mutex_lock(); + + if (!ddraw->restore_mode) + { + wined3d_mutex_unlock(); + return DD_OK; + } + + if (exclusive_ddraw && exclusive_ddraw != ddraw) + { + wined3d_mutex_unlock(); + return DDERR_NOEXCLUSIVEMODE; + } + + if (SUCCEEDED(hr = wined3d_set_adapter_display_mode(ddraw->wined3d, WINED3DADAPTER_DEFAULT, &original_mode))) + { + ddraw->restore_mode = FALSE; + restore_mode = FALSE; + } + + wined3d_mutex_unlock(); + + return hr; } static HRESULT WINAPI ddraw4_RestoreDisplayMode(IDirectDraw4 *iface) @@ -1284,10 +1206,9 @@ static HRESULT WINAPI ddraw7_GetCaps(IDirectDraw7 *iface, DDCAPS *DriverCaps, DD caps.dwSSBCKeyCaps = winecaps.ddraw_caps.ssb_color_key_caps; caps.dwSSBFXCaps = winecaps.ddraw_caps.ssb_fx_caps; - /* Even if WineD3D supports 3D rendering, remove the cap if ddraw is configured - * not to use it - */ - if (DefaultSurfaceType == WINED3D_SURFACE_TYPE_GDI) + /* Even if wined3d supports 3D rendering, remove the cap if ddraw is + * configured not to use it. */ + if (DefaultSurfaceType == DDRAW_SURFACE_TYPE_GDI) { caps.dwCaps &= ~DDCAPS_3D; caps.ddsCaps.dwCaps &= ~(DDSCAPS_3DDEVICE | DDSCAPS_MIPMAP | DDSCAPS_TEXTURE | DDSCAPS_ZBUFFER); @@ -1524,9 +1445,8 @@ static HRESULT WINAPI ddraw7_GetFourCCCodes(IDirectDraw7 *iface, DWORD *NumCodes for (i = 0; i < (sizeof(formats) / sizeof(formats[0])); ++i) { - hr = wined3d_check_device_format(ddraw->wined3d, WINED3DADAPTER_DEFAULT, WINED3D_DEVICE_TYPE_HAL, - mode.format_id, 0, WINED3D_RTYPE_SURFACE, formats[i], DefaultSurfaceType); - if (SUCCEEDED(hr)) + if (SUCCEEDED(wined3d_check_device_format(ddraw->wined3d, WINED3DADAPTER_DEFAULT, WINED3D_DEVICE_TYPE_HAL, + mode.format_id, 0, WINED3D_RTYPE_SURFACE, formats[i]))) { if (count < outsize) Codes[count] = formats[i]; @@ -2422,14 +2342,12 @@ static HRESULT WINAPI ddraw7_GetSurfaceFromDC(IDirectDraw7 *iface, HDC hdc, struct ddraw *ddraw = impl_from_IDirectDraw7(iface); struct wined3d_surface *wined3d_surface; struct ddraw_surface *surface_impl; - HRESULT hr; TRACE("iface %p, dc %p, surface %p.\n", iface, hdc, Surface); if (!Surface) return E_INVALIDARG; - hr = wined3d_device_get_surface_from_dc(ddraw->wined3d_device, hdc, &wined3d_surface); - if (FAILED(hr)) + if (!(wined3d_surface = wined3d_device_get_surface_from_dc(ddraw->wined3d_device, hdc))) { TRACE("No surface found for dc %p.\n", hdc); *Surface = NULL; @@ -2558,12 +2476,11 @@ static HRESULT WINAPI ddraw7_StartModeTest(IDirectDraw7 *iface, SIZE *Modes, DWO * *****************************************************************************/ static HRESULT ddraw_create_surface(struct ddraw *ddraw, DDSURFACEDESC2 *pDDSD, - struct ddraw_surface **surface, UINT level, UINT version) + struct ddraw_surface **surface, UINT version) { HRESULT hr; - TRACE("ddraw %p, surface_desc %p, surface %p, level %u.\n", - ddraw, pDDSD, surface, level); + TRACE("ddraw %p, surface_desc %p, surface %p.\n", ddraw, pDDSD, surface); if (TRACE_ON(ddraw)) { @@ -2571,7 +2488,7 @@ static HRESULT ddraw_create_surface(struct ddraw *ddraw, DDSURFACEDESC2 *pDDSD, DDRAW_dump_surface_desc(pDDSD); } - if ((pDDSD->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) && DefaultSurfaceType != WINED3D_SURFACE_TYPE_OPENGL) + if ((pDDSD->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) && DefaultSurfaceType != DDRAW_SURFACE_TYPE_OPENGL) { WARN("The application requests a 3D capable surface, but a non-OpenGL surface type was set in the registry.\n"); /* Do not fail surface creation, only fail 3D device creation. */ @@ -2585,8 +2502,7 @@ static HRESULT ddraw_create_surface(struct ddraw *ddraw, DDSURFACEDESC2 *pDDSD, return DDERR_OUTOFVIDEOMEMORY; } - hr = ddraw_surface_init(*surface, ddraw, pDDSD, level, version); - if (FAILED(hr)) + if (FAILED(hr = ddraw_surface_init(*surface, ddraw, pDDSD, version))) { WARN("Failed to initialize surface, hr %#x.\n", hr); HeapFree(GetProcessHeap(), 0, *surface); @@ -2787,35 +2703,10 @@ static HRESULT CreateSurface(struct ddraw *ddraw, DDSURFACEDESC2 *DDSD, copy_to_surfacedesc2(&desc2, DDSD); desc2.u4.ddpfPixelFormat.dwSize=sizeof(DDPIXELFORMAT); /* Just to be sure */ - /* Get the video mode from WineD3D - we will need it */ if (FAILED(hr = wined3d_get_adapter_display_mode(ddraw->wined3d, WINED3DADAPTER_DEFAULT, &mode, NULL))) { ERR("Failed to get display mode, hr %#x.\n", hr); - - switch (ddraw->orig_bpp) - { - case 8: - mode.format_id = WINED3DFMT_P8_UINT; - break; - - case 15: - mode.format_id = WINED3DFMT_B5G5R5X1_UNORM; - break; - - case 16: - mode.format_id = WINED3DFMT_B5G6R5_UNORM; - break; - - case 24: - mode.format_id = WINED3DFMT_B8G8R8_UNORM; - break; - - case 32: - mode.format_id = WINED3DFMT_B8G8R8X8_UNORM; - break; - } - mode.width = ddraw->orig_width; - mode.height = ddraw->orig_height; + return hr; } /* No pixelformat given? Use the current screen format */ @@ -2902,19 +2793,13 @@ static HRESULT CreateSurface(struct ddraw *ddraw, DDSURFACEDESC2 *DDSD, { struct wined3d_swapchain_desc swapchain_desc; - hr = wined3d_swapchain_get_desc(ddraw->wined3d_swapchain, &swapchain_desc); - if (FAILED(hr)) - { - ERR("Failed to get present parameters.\n"); - return hr; - } - + wined3d_swapchain_get_desc(ddraw->wined3d_swapchain, &swapchain_desc); swapchain_desc.backbuffer_width = mode.width; swapchain_desc.backbuffer_height = mode.height; swapchain_desc.backbuffer_format = mode.format_id; hr = wined3d_device_reset(ddraw->wined3d_device, - &swapchain_desc, NULL, ddraw_reset_enum_callback); + &swapchain_desc, NULL, ddraw_reset_enum_callback, TRUE); if (FAILED(hr)) { ERR("Failed to reset device.\n"); @@ -2923,8 +2808,7 @@ static HRESULT CreateSurface(struct ddraw *ddraw, DDSURFACEDESC2 *DDSD, } /* Create the first surface */ - hr = ddraw_create_surface(ddraw, &desc2, &object, 0, version); - if (FAILED(hr)) + if (FAILED(hr = ddraw_create_surface(ddraw, &desc2, &object, version))) { WARN("ddraw_create_surface failed, hr %#x.\n", hr); return hr; @@ -2951,7 +2835,7 @@ static HRESULT CreateSurface(struct ddraw *ddraw, DDSURFACEDESC2 *DDSD, { struct ddraw_surface *object2 = NULL; - if (FAILED(hr = ddraw_create_surface(ddraw, &desc2, &object2, 0, version))) + if (FAILED(hr = ddraw_create_surface(ddraw, &desc2, &object2, version))) { if (version == 7) IDirectDrawSurface7_Release(&object->IDirectDrawSurface7_iface); @@ -3126,7 +3010,7 @@ static HRESULT WINAPI ddraw2_CreateSurface(IDirectDraw2 *iface, if (TRACE_ON(ddraw)) { TRACE(" (%p) Requesting surface desc :\n", iface); - DDRAW_dump_surface_desc((LPDDSURFACEDESC2)surface_desc); + DDRAW_dump_surface_desc((DDSURFACEDESC2 *)surface_desc); } WARN("Application tried to create an explicit front or back buffer\n"); @@ -4535,9 +4419,8 @@ static HRESULT WINAPI d3d7_EnumZBufferFormats(IDirect3D7 *iface, REFCLSID device for (i = 0; i < (sizeof(formats) / sizeof(*formats)); ++i) { - hr = wined3d_check_device_format(ddraw->wined3d, WINED3DADAPTER_DEFAULT, type, mode.format_id, - WINED3DUSAGE_DEPTHSTENCIL, WINED3D_RTYPE_SURFACE, formats[i], WINED3D_SURFACE_TYPE_OPENGL); - if (SUCCEEDED(hr)) + if (SUCCEEDED(wined3d_check_device_format(ddraw->wined3d, WINED3DADAPTER_DEFAULT, type, mode.format_id, + WINED3DUSAGE_DEPTHSTENCIL, WINED3D_RTYPE_SURFACE, formats[i]))) { DDPIXELFORMAT pformat; @@ -4560,9 +4443,8 @@ static HRESULT WINAPI d3d7_EnumZBufferFormats(IDirect3D7 *iface, REFCLSID device * while others used dwZBufferBitDepth=32. In either case the pitch matches a 32 bits per * pixel format, so we use dwZBufferBitDepth=32. Some games expect 24. Windows Vista and * newer enumerate both versions, so we do the same(bug 22434) */ - hr = wined3d_check_device_format(ddraw->wined3d, WINED3DADAPTER_DEFAULT, type, mode.format_id, - WINED3DUSAGE_DEPTHSTENCIL, WINED3D_RTYPE_SURFACE, WINED3DFMT_X8D24_UNORM, WINED3D_SURFACE_TYPE_OPENGL); - if (SUCCEEDED(hr)) + if (SUCCEEDED(wined3d_check_device_format(ddraw->wined3d, WINED3DADAPTER_DEFAULT, type, mode.format_id, + WINED3DUSAGE_DEPTHSTENCIL, WINED3D_RTYPE_SURFACE, WINED3DFMT_X8D24_UNORM))) { DDPIXELFORMAT x8d24 = { @@ -4788,11 +4670,6 @@ HRESULT IDirect3DImpl_GetCaps(const struct wined3d *wined3d, D3DDEVICEDESC *desc D3DPTFILTERCAPS_MAGFLINEAR | D3DPTFILTERCAPS_MAGFANISOTROPIC | D3DPTFILTERCAPS_MAGFAFLATCUBIC | D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC); - desc7->dpcLineCaps.dwTextureBlendCaps &= ( - D3DPTBLENDCAPS_DECAL | D3DPTBLENDCAPS_MODULATE | D3DPTBLENDCAPS_DECALALPHA | - D3DPTBLENDCAPS_MODULATEALPHA | D3DPTBLENDCAPS_DECALMASK | D3DPTBLENDCAPS_MODULATEMASK | - D3DPTBLENDCAPS_COPY | D3DPTBLENDCAPS_ADD); - desc7->dpcLineCaps.dwTextureAddressCaps &= ( D3DPTADDRESSCAPS_WRAP | D3DPTADDRESSCAPS_MIRROR | D3DPTADDRESSCAPS_CLAMP | D3DPTADDRESSCAPS_BORDER | D3DPTADDRESSCAPS_INDEPENDENTUV); @@ -5216,7 +5093,6 @@ static void CDECL device_parent_mode_changed(struct wined3d_device_parent *devic struct ddraw *ddraw = ddraw_from_device_parent(device_parent); MONITORINFO monitor_info; HMONITOR monitor; - BOOL ret; RECT *r; TRACE("device_parent %p.\n", device_parent); @@ -5229,7 +5105,7 @@ static void CDECL device_parent_mode_changed(struct wined3d_device_parent *devic monitor = MonitorFromWindow(ddraw->swapchain_window, MONITOR_DEFAULTTOPRIMARY); monitor_info.cbSize = sizeof(monitor_info); - if (!(ret = GetMonitorInfoW(monitor, &monitor_info))) + if (!GetMonitorInfoW(monitor, &monitor_info)) { ERR("Failed to get monitor info.\n"); return; @@ -5238,14 +5114,14 @@ static void CDECL device_parent_mode_changed(struct wined3d_device_parent *devic r = &monitor_info.rcMonitor; TRACE("Resizing window %p to %s.\n", ddraw->swapchain_window, wine_dbgstr_rect(r)); - if (!(ret = SetWindowPos(ddraw->swapchain_window, HWND_TOP, r->left, r->top, - r->right - r->left, r->bottom - r->top, SWP_SHOWWINDOW | SWP_NOACTIVATE))) + if (!SetWindowPos(ddraw->swapchain_window, HWND_TOP, r->left, r->top, + r->right - r->left, r->bottom - r->top, SWP_SHOWWINDOW | SWP_NOACTIVATE)) ERR("Failed to resize window.\n"); } static HRESULT CDECL device_parent_create_texture_surface(struct wined3d_device_parent *device_parent, void *container_parent, UINT width, UINT height, enum wined3d_format_id format, DWORD usage, - enum wined3d_pool pool, UINT level, enum wined3d_cubemap_face face, struct wined3d_surface **surface) + enum wined3d_pool pool, UINT sub_resource_idx, struct wined3d_surface **surface) { struct ddraw *ddraw = ddraw_from_device_parent(device_parent); struct ddraw_surface *tex_root = container_parent; @@ -5254,11 +5130,11 @@ static HRESULT CDECL device_parent_create_texture_surface(struct wined3d_device_ HRESULT hr; TRACE("device_parent %p, container_parent %p, width %u, height %u, format %#x, usage %#x,\n" - "\tpool %#x, level %u, face %u, surface %p.\n", - device_parent, container_parent, width, height, format, usage, pool, level, face, surface); + "\tpool %#x, sub_resource_idx %u, surface %p.\n", + device_parent, container_parent, width, height, format, usage, pool, sub_resource_idx, surface); /* The ddraw root surface is created before the wined3d texture. */ - if (!level && face == WINED3D_CUBEMAP_FACE_POSITIVE_X) + if (!sub_resource_idx) { ddraw_surface = tex_root; goto done; @@ -5266,50 +5142,9 @@ static HRESULT CDECL device_parent_create_texture_surface(struct wined3d_device_ desc.dwWidth = width; desc.dwHeight = height; - if (level) - desc.ddsCaps.dwCaps2 |= DDSCAPS2_MIPMAPSUBLEVEL; - else - desc.ddsCaps.dwCaps2 &= ~DDSCAPS2_MIPMAPSUBLEVEL; - - if (desc.ddsCaps.dwCaps2 & DDSCAPS2_CUBEMAP) - { - desc.ddsCaps.dwCaps2 &= ~DDSCAPS2_CUBEMAP_ALLFACES; - - switch (face) - { - case WINED3D_CUBEMAP_FACE_POSITIVE_X: - desc.ddsCaps.dwCaps2 |= DDSCAPS2_CUBEMAP_POSITIVEX; - break; - - case WINED3D_CUBEMAP_FACE_NEGATIVE_X: - desc.ddsCaps.dwCaps2 |= DDSCAPS2_CUBEMAP_NEGATIVEX; - break; - - case WINED3D_CUBEMAP_FACE_POSITIVE_Y: - desc.ddsCaps.dwCaps2 |= DDSCAPS2_CUBEMAP_POSITIVEY; - break; - - case WINED3D_CUBEMAP_FACE_NEGATIVE_Y: - desc.ddsCaps.dwCaps2 |= DDSCAPS2_CUBEMAP_NEGATIVEY; - break; - - case WINED3D_CUBEMAP_FACE_POSITIVE_Z: - desc.ddsCaps.dwCaps2 |= DDSCAPS2_CUBEMAP_POSITIVEZ; - break; - - case WINED3D_CUBEMAP_FACE_NEGATIVE_Z: - desc.ddsCaps.dwCaps2 |= DDSCAPS2_CUBEMAP_NEGATIVEZ; - break; - - default: - ERR("Unexpected cube face.\n"); - return DDERR_INVALIDPARAMS; - } - - } /* FIXME: Validate that format, usage, pool, etc. really make sense. */ - if (FAILED(hr = ddraw_create_surface(ddraw, &desc, &ddraw_surface, level, tex_root->version))) + if (FAILED(hr = ddraw_create_surface(ddraw, &desc, &ddraw_surface, tex_root->version))) return hr; done: @@ -5348,9 +5183,9 @@ static HRESULT CDECL device_parent_create_swapchain_surface(struct wined3d_devic return E_FAIL; } - if (SUCCEEDED(hr = wined3d_surface_create(ddraw->wined3d_device, width, height, format_id, 0, - usage, WINED3D_POOL_DEFAULT, multisample_type, multisample_quality, DefaultSurfaceType, - WINED3D_SURFACE_MAPPABLE, ddraw, &ddraw_frontbuffer_parent_ops, surface))) + if (SUCCEEDED(hr = wined3d_surface_create(ddraw->wined3d_device, width, height, format_id, usage, + WINED3D_POOL_DEFAULT, multisample_type, multisample_quality, WINED3D_SURFACE_MAPPABLE, + ddraw, &ddraw_frontbuffer_parent_ops, surface))) ddraw->wined3d_frontbuffer = *surface; return hr; @@ -5384,9 +5219,8 @@ static HRESULT CDECL device_parent_create_swapchain(struct wined3d_device_parent return E_FAIL; } - hr = wined3d_swapchain_create(ddraw->wined3d_device, desc, - DefaultSurfaceType, NULL, &ddraw_null_wined3d_parent_ops, swapchain); - if (FAILED(hr)) + if (FAILED(hr = wined3d_swapchain_create(ddraw->wined3d_device, desc, NULL, + &ddraw_null_wined3d_parent_ops, swapchain))) WARN("Failed to create swapchain, hr %#x.\n", hr); return hr; @@ -5404,8 +5238,8 @@ static const struct wined3d_device_parent_ops ddraw_wined3d_device_parent_ops = HRESULT ddraw_init(struct ddraw *ddraw, enum wined3d_device_type device_type) { + DWORD flags; HRESULT hr; - HDC hDC; ddraw->IDirectDraw7_iface.lpVtbl = &ddraw7_vtbl; ddraw->IDirectDraw_iface.lpVtbl = &ddraw1_vtbl; @@ -5419,18 +5253,20 @@ HRESULT ddraw_init(struct ddraw *ddraw, enum wined3d_device_type device_type) ddraw->numIfaces = 1; ddraw->ref7 = 1; - /* Get the current screen settings. */ - hDC = GetDC(0); - ddraw->orig_bpp = GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES); - ReleaseDC(0, hDC); - ddraw->orig_width = GetSystemMetrics(SM_CXSCREEN); - ddraw->orig_height = GetSystemMetrics(SM_CYSCREEN); + flags = WINED3D_LEGACY_DEPTH_BIAS; + if (DefaultSurfaceType != DDRAW_SURFACE_TYPE_OPENGL) + flags |= WINED3D_NO3D; - ddraw->wined3d = wined3d_create(7, WINED3D_LEGACY_DEPTH_BIAS); - if (!ddraw->wined3d) + if (!(ddraw->wined3d = wined3d_create(7, flags))) { - WARN("Failed to create a wined3d object.\n"); - return E_OUTOFMEMORY; + if ((flags & WINED3D_NO3D) || !(ddraw->wined3d = wined3d_create(7, flags | WINED3D_NO3D))) + { + WARN("Failed to create a wined3d object.\n"); + return E_FAIL; + } + + WARN("Created a wined3d object without 3D support.\n"); + DefaultSurfaceType = DDRAW_SURFACE_TYPE_GDI; } hr = wined3d_device_create(ddraw->wined3d, WINED3DADAPTER_DEFAULT, device_type, diff --git a/dll/directx/wine/ddraw/ddraw_private.h b/dll/directx/wine/ddraw/ddraw_private.h index 3fe2dbb3dc1..b64e1782479 100644 --- a/dll/directx/wine/ddraw/ddraw_private.h +++ b/dll/directx/wine/ddraw/ddraw_private.h @@ -30,7 +30,7 @@ #include #include -#include +#include "winuser.h" #include #include @@ -41,7 +41,14 @@ #include #include +enum ddraw_surface_type +{ + DDRAW_SURFACE_TYPE_OPENGL, + DDRAW_SURFACE_TYPE_GDI, +}; + extern const struct wined3d_parent_ops ddraw_null_wined3d_parent_ops DECLSPEC_HIDDEN; +extern enum ddraw_surface_type DefaultSurfaceType DECLSPEC_HIDDEN; extern DWORD force_refresh_rate DECLSPEC_HIDDEN; /***************************************************************************** @@ -72,7 +79,8 @@ struct ddraw struct wined3d *wined3d; struct wined3d_device *wined3d_device; - BOOL d3d_initialized; + BOOL d3d_initialized; + BOOL restore_mode; struct ddraw_surface *primary; RECT primary_lock; @@ -83,9 +91,6 @@ struct ddraw /* DirectDraw things, which are not handled by WineD3D */ DWORD cooperative_level; - DWORD orig_width, orig_height; - DWORD orig_bpp; - /* D3D things */ HWND d3d_window; struct d3d_device *d3ddevice; @@ -125,13 +130,6 @@ void DDRAW_Convert_DDSCAPS_1_To_2(const DDSCAPS *pIn, DDSCAPS2 *pOut) DECLSPEC_H void DDRAW_Convert_DDDEVICEIDENTIFIER_2_To_1(const DDDEVICEIDENTIFIER2 *pIn, DDDEVICEIDENTIFIER *pOut) DECLSPEC_HIDDEN; struct wined3d_vertex_declaration *ddraw_find_decl(struct ddraw *ddraw, DWORD fvf) DECLSPEC_HIDDEN; -/* The default surface type */ -extern enum wined3d_surface_type DefaultSurfaceType DECLSPEC_HIDDEN; - -/***************************************************************************** - * IDirectDrawSurface implementation structure - *****************************************************************************/ - struct ddraw_surface { /* IUnknown fields */ @@ -191,7 +189,7 @@ struct ddraw_surface HRESULT ddraw_surface_create_texture(struct ddraw_surface *surface) DECLSPEC_HIDDEN; HRESULT ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw, - DDSURFACEDESC2 *desc, UINT mip_level, UINT version) DECLSPEC_HIDDEN; + DDSURFACEDESC2 *desc, UINT version) DECLSPEC_HIDDEN; ULONG ddraw_surface_release_iface(struct ddraw_surface *This) DECLSPEC_HIDDEN; static inline struct ddraw_surface *impl_from_IDirect3DTexture(IDirect3DTexture *iface) @@ -281,9 +279,16 @@ struct d3d_device IUnknown *outer_unknown; struct wined3d_device *wined3d_device; struct ddraw *ddraw; - struct wined3d_buffer *indexbuffer; struct ddraw_surface *target; + struct wined3d_buffer *index_buffer; + UINT index_buffer_size; + UINT index_buffer_pos; + + struct wined3d_buffer *vertex_buffer; + UINT vertex_buffer_size; + UINT vertex_buffer_pos; + /* Viewport management */ struct list viewport_list; struct d3d_viewport *current_viewport; @@ -303,7 +308,7 @@ struct d3d_device DWORD vertex_type; DWORD render_flags; DWORD nb_vertices; - LPBYTE vertex_buffer; + LPBYTE sysmem_vertex_buffer; DWORD vertex_size; DWORD buffer_size; @@ -498,7 +503,8 @@ struct d3d_execute_buffer /* This buffer will store the transformed vertices */ void *vertex_data; WORD *indices; - int nb_indices; + unsigned int nb_indices; + unsigned int nb_vertices; /* This flags is set to TRUE if we allocated ourselves the * data buffer @@ -531,6 +537,10 @@ struct d3d_vertex_buffer /*** Storage for D3D7 specific things ***/ DWORD Caps; DWORD fvf; + DWORD size; + BOOL dynamic; + + BOOL read_since_last_map; }; HRESULT d3d_vertex_buffer_create(struct d3d_vertex_buffer **buffer, struct ddraw *ddraw, @@ -559,9 +569,7 @@ void DDRAW_dump_cooperativelevel(DWORD cooplevel) DECLSPEC_HIDDEN; void DDSD_to_DDSD2(const DDSURFACEDESC *in, DDSURFACEDESC2 *out) DECLSPEC_HIDDEN; void DDSD2_to_DDSD(const DDSURFACEDESC2 *in, DDSURFACEDESC *out) DECLSPEC_HIDDEN; -/* This only needs to be here as long the processvertices functionality of - * IDirect3DExecuteBuffer isn't in WineD3D */ -void multiply_matrix(LPD3DMATRIX dest, const D3DMATRIX *src1, const D3DMATRIX *src2) DECLSPEC_HIDDEN; +void multiply_matrix(D3DMATRIX *dst, const D3DMATRIX *src1, const D3DMATRIX *src2) DECLSPEC_HIDDEN; /* Used for generic dumping */ struct flag_info diff --git a/dll/directx/wine/ddraw/device.c b/dll/directx/wine/ddraw/device.c index d12a70e8f3e..7724c8b50c0 100644 --- a/dll/directx/wine/ddraw/device.c +++ b/dll/directx/wine/ddraw/device.c @@ -1,7 +1,7 @@ /* * Copyright (c) 1998-2004 Lionel Ulmer * Copyright (c) 2002-2005 Christian Costa - * Copyright (c) 2006 Stefan Dösinger + * Copyright (c) 2006-2009, 2011-2012 Stefan Dösinger * Copyright (c) 2008 Alexander Dorofeyev * * This library is free software; you can redistribute it and/or @@ -233,14 +233,17 @@ static ULONG WINAPI d3d_device_inner_Release(IUnknown *iface) if (!ref) { DWORD i; + struct list *vp_entry, *vp_entry2; wined3d_mutex_lock(); /* There is no need to unset any resources here, wined3d will take * care of that on uninit_3d(). */ - /* Free the index buffer. */ - wined3d_buffer_decref(This->indexbuffer); + if (This->index_buffer) + wined3d_buffer_decref(This->index_buffer); + if (This->vertex_buffer) + wined3d_buffer_decref(This->vertex_buffer); /* Set the device up to render to the front buffer since the back * buffer will vanish soon. */ @@ -302,6 +305,12 @@ static ULONG WINAPI d3d_device_inner_Release(IUnknown *iface) ddraw_handle_table_destroy(&This->handle_table); + LIST_FOR_EACH_SAFE(vp_entry, vp_entry2, &This->viewport_list) + { + struct d3d_viewport *vp = LIST_ENTRY(vp_entry, struct d3d_viewport, entry); + IDirect3DDevice3_DeleteViewport(&This->IDirect3DDevice3_iface, &vp->IDirect3DViewport3_iface); + } + TRACE("Releasing target %p.\n", This->target); /* Release the render target. */ if (This->version != 1) @@ -756,6 +765,7 @@ static HRESULT WINAPI d3d_device3_AddViewport(IDirect3DDevice3 *iface, IDirect3D return DDERR_INVALIDPARAMS; wined3d_mutex_lock(); + IDirect3DViewport3_AddRef(viewport); list_add_head(&device->viewport_list, &vp->entry); /* Viewport must be usable for Clear() after AddViewport, so set active_device here. */ vp->active_device = device; @@ -808,6 +818,12 @@ static HRESULT WINAPI d3d_device3_DeleteViewport(IDirect3DDevice3 *iface, IDirec TRACE("iface %p, viewport %p.\n", iface, viewport); + if (!vp) + { + WARN("NULL viewport, returning DDERR_INVALIDPARAMS\n"); + return DDERR_INVALIDPARAMS; + } + wined3d_mutex_lock(); if (vp->active_device != device) @@ -817,9 +833,18 @@ static HRESULT WINAPI d3d_device3_DeleteViewport(IDirect3DDevice3 *iface, IDirec return DDERR_INVALIDPARAMS; } + if (device->current_viewport == vp) + { + TRACE("Deleting current viewport, unsetting and releasing\n"); + IDirect3DViewport3_Release(viewport); + device->current_viewport = NULL; + } + vp->active_device = NULL; list_remove(&vp->entry); + IDirect3DViewport3_Release(viewport); + wined3d_mutex_unlock(); return D3D_OK; @@ -832,7 +857,8 @@ static HRESULT WINAPI d3d_device2_DeleteViewport(IDirect3DDevice2 *iface, IDirec TRACE("iface %p, viewport %p.\n", iface, viewport); - return d3d_device3_DeleteViewport(&device->IDirect3DDevice3_iface, &vp->IDirect3DViewport3_iface); + return d3d_device3_DeleteViewport(&device->IDirect3DDevice3_iface, + vp ? &vp->IDirect3DViewport3_iface : NULL); } static HRESULT WINAPI d3d_device1_DeleteViewport(IDirect3DDevice *iface, IDirect3DViewport *viewport) @@ -842,7 +868,8 @@ static HRESULT WINAPI d3d_device1_DeleteViewport(IDirect3DDevice *iface, IDirect TRACE("iface %p, viewport %p.\n", iface, viewport); - return d3d_device3_DeleteViewport(&device->IDirect3DDevice3_iface, &vp->IDirect3DViewport3_iface); + return d3d_device3_DeleteViewport(&device->IDirect3DDevice3_iface, + vp ? &vp->IDirect3DViewport3_iface : NULL); } /***************************************************************************** @@ -1077,9 +1104,8 @@ static HRESULT d3d_device7_EnumTextureFormats(IDirect3DDevice7 *iface, for (i = 0; i < sizeof(FormatList) / sizeof(*FormatList); ++i) { - hr = wined3d_check_device_format(device->ddraw->wined3d, WINED3DADAPTER_DEFAULT, WINED3D_DEVICE_TYPE_HAL, - mode.format_id, 0, WINED3D_RTYPE_TEXTURE, FormatList[i], WINED3D_SURFACE_TYPE_OPENGL); - if (hr == D3D_OK) + if (wined3d_check_device_format(device->ddraw->wined3d, WINED3DADAPTER_DEFAULT, WINED3D_DEVICE_TYPE_HAL, + mode.format_id, 0, WINED3D_RTYPE_TEXTURE, FormatList[i]) == D3D_OK) { DDPIXELFORMAT pformat; @@ -1100,10 +1126,9 @@ static HRESULT d3d_device7_EnumTextureFormats(IDirect3DDevice7 *iface, for (i = 0; i < sizeof(BumpFormatList) / sizeof(*BumpFormatList); ++i) { - hr = wined3d_check_device_format(device->ddraw->wined3d, WINED3DADAPTER_DEFAULT, + if (wined3d_check_device_format(device->ddraw->wined3d, WINED3DADAPTER_DEFAULT, WINED3D_DEVICE_TYPE_HAL, mode.format_id, WINED3DUSAGE_QUERY_LEGACYBUMPMAP, - WINED3D_RTYPE_TEXTURE, BumpFormatList[i], WINED3D_SURFACE_TYPE_OPENGL); - if (hr == D3D_OK) + WINED3D_RTYPE_TEXTURE, BumpFormatList[i]) == D3D_OK) { DDPIXELFORMAT pformat; @@ -1207,9 +1232,8 @@ static HRESULT WINAPI d3d_device2_EnumTextureFormats(IDirect3DDevice2 *iface, for (i = 0; i < sizeof(FormatList) / sizeof(*FormatList); ++i) { - hr = wined3d_check_device_format(device->ddraw->wined3d, 0, WINED3D_DEVICE_TYPE_HAL, - mode.format_id, 0, WINED3D_RTYPE_TEXTURE, FormatList[i], WINED3D_SURFACE_TYPE_OPENGL); - if (hr == D3D_OK) + if (wined3d_check_device_format(device->ddraw->wined3d, 0, WINED3D_DEVICE_TYPE_HAL, + mode.format_id, 0, WINED3D_RTYPE_TEXTURE, FormatList[i]) == D3D_OK) { DDSURFACEDESC sdesc; @@ -1689,9 +1713,15 @@ static HRESULT WINAPI d3d_device3_SetCurrentViewport(IDirect3DDevice3 *iface, ID TRACE("iface %p, viewport %p.\n", iface, Direct3DViewport3); + if (!vp) + { + WARN("Direct3DViewport3 is NULL, returning DDERR_INVALIDPARAMS\n"); + return DDERR_INVALIDPARAMS; + } + wined3d_mutex_lock(); /* Do nothing if the specified viewport is the same as the current one */ - if (This->current_viewport == vp ) + if (This->current_viewport == vp) { wined3d_mutex_unlock(); return D3D_OK; @@ -1731,7 +1761,8 @@ static HRESULT WINAPI d3d_device2_SetCurrentViewport(IDirect3DDevice2 *iface, ID TRACE("iface %p, viewport %p.\n", iface, viewport); - return d3d_device3_SetCurrentViewport(&device->IDirect3DDevice3_iface, &vp->IDirect3DViewport3_iface); + return d3d_device3_SetCurrentViewport(&device->IDirect3DDevice3_iface, + vp ? &vp->IDirect3DViewport3_iface : NULL); } /***************************************************************************** @@ -1755,20 +1786,19 @@ static HRESULT WINAPI d3d_device3_GetCurrentViewport(IDirect3DDevice3 *iface, ID TRACE("iface %p, viewport %p.\n", iface, viewport); - if (!viewport) - return DDERR_INVALIDPARAMS; - wined3d_mutex_lock(); - *viewport = &device->current_viewport->IDirect3DViewport3_iface; + if (!device->current_viewport) + { + wined3d_mutex_unlock(); + WARN("No current viewport, returning D3DERR_NOCURRENTVIEWPORT\n"); + return D3DERR_NOCURRENTVIEWPORT; + } - /* AddRef the returned viewport */ - if (*viewport) - IDirect3DViewport3_AddRef(*viewport); + *viewport = &device->current_viewport->IDirect3DViewport3_iface; + IDirect3DViewport3_AddRef(*viewport); TRACE("Returning interface %p.\n", *viewport); - wined3d_mutex_unlock(); - return D3D_OK; } @@ -2106,16 +2136,16 @@ static HRESULT WINAPI d3d_device3_Vertex(IDirect3DDevice3 *iface, void *vertex) BYTE *old_buffer; device->buffer_size = device->buffer_size ? device->buffer_size * 2 : device->vertex_size * 3; - old_buffer = device->vertex_buffer; - device->vertex_buffer = HeapAlloc(GetProcessHeap(), 0, device->buffer_size); + old_buffer = device->sysmem_vertex_buffer; + device->sysmem_vertex_buffer = HeapAlloc(GetProcessHeap(), 0, device->buffer_size); if (old_buffer) { - memcpy(device->vertex_buffer, old_buffer, device->nb_vertices * device->vertex_size); + memcpy(device->sysmem_vertex_buffer, old_buffer, device->nb_vertices * device->vertex_size); HeapFree(GetProcessHeap(), 0, old_buffer); } } - memcpy(device->vertex_buffer + device->nb_vertices++ * device->vertex_size, vertex, device->vertex_size); + memcpy(device->sysmem_vertex_buffer + device->nb_vertices++ * device->vertex_size, vertex, device->vertex_size); wined3d_mutex_unlock(); return D3D_OK; @@ -2184,7 +2214,7 @@ static HRESULT WINAPI d3d_device3_End(IDirect3DDevice3 *iface, DWORD flags) TRACE("iface %p, flags %#x.\n", iface, flags); return IDirect3DDevice7_DrawPrimitive(&device->IDirect3DDevice7_iface, device->primitive_type, - device->vertex_type, device->vertex_buffer, device->nb_vertices, device->render_flags); + device->vertex_type, device->sysmem_vertex_buffer, device->nb_vertices, device->render_flags); } static HRESULT WINAPI d3d_device2_End(IDirect3DDevice2 *iface, DWORD flags) @@ -2217,7 +2247,7 @@ static HRESULT d3d_device7_GetRenderState(IDirect3DDevice7 *iface, D3DRENDERSTATETYPE state, DWORD *value) { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); - HRESULT hr; + HRESULT hr = D3D_OK; TRACE("iface %p, state %#x, value %p.\n", iface, state, value); @@ -2231,8 +2261,7 @@ static HRESULT d3d_device7_GetRenderState(IDirect3DDevice7 *iface, { enum wined3d_texture_filter_type tex_mag; - hr = wined3d_device_get_sampler_state(device->wined3d_device, 0, WINED3D_SAMP_MAG_FILTER, &tex_mag); - + tex_mag = wined3d_device_get_sampler_state(device->wined3d_device, 0, WINED3D_SAMP_MAG_FILTER); switch (tex_mag) { case WINED3D_TEXF_POINT: @@ -2253,16 +2282,8 @@ static HRESULT d3d_device7_GetRenderState(IDirect3DDevice7 *iface, enum wined3d_texture_filter_type tex_min; enum wined3d_texture_filter_type tex_mip; - hr = wined3d_device_get_sampler_state(device->wined3d_device, - 0, WINED3D_SAMP_MIN_FILTER, &tex_min); - if (FAILED(hr)) - { - wined3d_mutex_unlock(); - return hr; - } - hr = wined3d_device_get_sampler_state(device->wined3d_device, - 0, WINED3D_SAMP_MIP_FILTER, &tex_mip); - + tex_min = wined3d_device_get_sampler_state(device->wined3d_device, 0, WINED3D_SAMP_MIN_FILTER); + tex_mip = wined3d_device_get_sampler_state(device->wined3d_device, 0, WINED3D_SAMP_MIP_FILTER); switch (tex_min) { case WINED3D_TEXF_POINT: @@ -2311,12 +2332,10 @@ static HRESULT d3d_device7_GetRenderState(IDirect3DDevice7 *iface, case D3DRENDERSTATE_TEXTUREADDRESS: case D3DRENDERSTATE_TEXTUREADDRESSU: - hr = wined3d_device_get_sampler_state(device->wined3d_device, - 0, WINED3D_SAMP_ADDRESS_U, value); + *value = wined3d_device_get_sampler_state(device->wined3d_device, 0, WINED3D_SAMP_ADDRESS_U); break; case D3DRENDERSTATE_TEXTUREADDRESSV: - hr = wined3d_device_get_sampler_state(device->wined3d_device, - 0, WINED3D_SAMP_ADDRESS_V, value); + *value = wined3d_device_get_sampler_state(device->wined3d_device, 0, WINED3D_SAMP_ADDRESS_V); break; case D3DRENDERSTATE_BORDERCOLOR: @@ -2331,7 +2350,7 @@ static HRESULT d3d_device7_GetRenderState(IDirect3DDevice7 *iface, break; case D3DRENDERSTATE_ZBIAS: - hr = wined3d_device_get_render_state(device->wined3d_device, WINED3D_RS_DEPTHBIAS, value); + *value = wined3d_device_get_render_state(device->wined3d_device, WINED3D_RS_DEPTHBIAS); break; default: @@ -2342,7 +2361,7 @@ static HRESULT d3d_device7_GetRenderState(IDirect3DDevice7 *iface, hr = E_NOTIMPL; break; } - hr = wined3d_device_get_render_state(device->wined3d_device, state, value); + *value = wined3d_device_get_render_state(device->wined3d_device, state); } wined3d_mutex_unlock(); @@ -2372,7 +2391,6 @@ static HRESULT WINAPI d3d_device3_GetRenderState(IDirect3DDevice3 *iface, D3DRENDERSTATETYPE state, DWORD *value) { struct d3d_device *device = impl_from_IDirect3DDevice3(iface); - HRESULT hr; TRACE("iface %p, state %#x, value %p.\n", iface, state, value); @@ -2386,19 +2404,17 @@ static HRESULT WINAPI d3d_device3_GetRenderState(IDirect3DDevice3 *iface, *value = 0; wined3d_mutex_lock(); - hr = wined3d_device_get_texture(device->wined3d_device, 0, &tex); - if (SUCCEEDED(hr) && tex) + if ((tex = wined3d_device_get_texture(device->wined3d_device, 0))) { /* The parent of the texture is the IDirectDrawSurface7 * interface of the ddraw surface. */ struct ddraw_surface *parent = wined3d_texture_get_parent(tex); if (parent) *value = parent->Handle; - wined3d_texture_decref(tex); } wined3d_mutex_unlock(); - return hr; + return D3D_OK; } case D3DRENDERSTATE_TEXTUREMAPBLEND: @@ -2412,12 +2428,12 @@ static HRESULT WINAPI d3d_device3_GetRenderState(IDirect3DDevice3 *iface, device->legacyTextureBlending = TRUE; - wined3d_device_get_texture_stage_state(device->wined3d_device, 0, WINED3D_TSS_COLOR_OP, &colorop); - wined3d_device_get_texture_stage_state(device->wined3d_device, 0, WINED3D_TSS_COLOR_ARG1, &colorarg1); - wined3d_device_get_texture_stage_state(device->wined3d_device, 0, WINED3D_TSS_COLOR_ARG2, &colorarg2); - wined3d_device_get_texture_stage_state(device->wined3d_device, 0, WINED3D_TSS_ALPHA_OP, &alphaop); - wined3d_device_get_texture_stage_state(device->wined3d_device, 0, WINED3D_TSS_ALPHA_ARG1, &alphaarg1); - wined3d_device_get_texture_stage_state(device->wined3d_device, 0, WINED3D_TSS_ALPHA_ARG2, &alphaarg2); + colorop = wined3d_device_get_texture_stage_state(device->wined3d_device, 0, WINED3D_TSS_COLOR_OP); + colorarg1 = wined3d_device_get_texture_stage_state(device->wined3d_device, 0, WINED3D_TSS_COLOR_ARG1); + colorarg2 = wined3d_device_get_texture_stage_state(device->wined3d_device, 0, WINED3D_TSS_COLOR_ARG2); + alphaop = wined3d_device_get_texture_stage_state(device->wined3d_device, 0, WINED3D_TSS_ALPHA_OP); + alphaarg1 = wined3d_device_get_texture_stage_state(device->wined3d_device, 0, WINED3D_TSS_ALPHA_ARG1); + alphaarg2 = wined3d_device_get_texture_stage_state(device->wined3d_device, 0, WINED3D_TSS_ALPHA_ARG2); if (colorop == WINED3D_TOP_SELECT_ARG1 && colorarg1 == WINED3DTA_TEXTURE && alphaop == WINED3D_TOP_SELECT_ARG1 && alphaarg1 == WINED3DTA_TEXTURE) @@ -2434,13 +2450,10 @@ static HRESULT WINAPI d3d_device3_GetRenderState(IDirect3DDevice3 *iface, else { struct wined3d_texture *tex = NULL; - HRESULT hr; BOOL tex_alpha = FALSE; DDPIXELFORMAT ddfmt; - hr = wined3d_device_get_texture(device->wined3d_device, 0, &tex); - - if(hr == WINED3D_OK && tex) + if ((tex = wined3d_device_get_texture(device->wined3d_device, 0))) { struct wined3d_resource *sub_resource; @@ -2453,8 +2466,6 @@ static HRESULT WINAPI d3d_device3_GetRenderState(IDirect3DDevice3 *iface, PixelFormat_WineD3DtoDD(&ddfmt, desc.format); if (ddfmt.u5.dwRGBAlphaBitMask) tex_alpha = TRUE; } - - wined3d_texture_decref(tex); } if (!(colorop == WINED3D_TOP_MODULATE @@ -2507,7 +2518,7 @@ static HRESULT d3d_device7_SetRenderState(IDirect3DDevice7 *iface, D3DRENDERSTATETYPE state, DWORD value) { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); - HRESULT hr; + HRESULT hr = D3D_OK; TRACE("iface %p, state %#x, value %#x.\n", iface, state, value); @@ -2550,7 +2561,7 @@ static HRESULT d3d_device7_SetRenderState(IDirect3DDevice7 *iface, break; } - hr = wined3d_device_set_sampler_state(device->wined3d_device, 0, WINED3D_SAMP_MAG_FILTER, tex_mag); + wined3d_device_set_sampler_state(device->wined3d_device, 0, WINED3D_SAMP_MAG_FILTER, tex_mag); break; } @@ -2595,7 +2606,7 @@ static HRESULT d3d_device7_SetRenderState(IDirect3DDevice7 *iface, wined3d_device_set_sampler_state(device->wined3d_device, 0, WINED3D_SAMP_MIP_FILTER, tex_mip); - hr = wined3d_device_set_sampler_state(device->wined3d_device, + wined3d_device_set_sampler_state(device->wined3d_device, 0, WINED3D_SAMP_MIN_FILTER, tex_min); break; } @@ -2605,11 +2616,11 @@ static HRESULT d3d_device7_SetRenderState(IDirect3DDevice7 *iface, 0, WINED3D_SAMP_ADDRESS_V, value); /* Drop through */ case D3DRENDERSTATE_TEXTUREADDRESSU: - hr = wined3d_device_set_sampler_state(device->wined3d_device, + wined3d_device_set_sampler_state(device->wined3d_device, 0, WINED3D_SAMP_ADDRESS_U, value); break; case D3DRENDERSTATE_TEXTUREADDRESSV: - hr = wined3d_device_set_sampler_state(device->wined3d_device, + wined3d_device_set_sampler_state(device->wined3d_device, 0, WINED3D_SAMP_ADDRESS_V, value); break; @@ -2627,7 +2638,7 @@ static HRESULT d3d_device7_SetRenderState(IDirect3DDevice7 *iface, break; case D3DRENDERSTATE_ZBIAS: - hr = wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_DEPTHBIAS, value); + wined3d_device_set_render_state(device->wined3d_device, WINED3D_RS_DEPTHBIAS, value); break; default: @@ -2639,7 +2650,7 @@ static HRESULT d3d_device7_SetRenderState(IDirect3DDevice7 *iface, break; } - hr = wined3d_device_set_render_state(device->wined3d_device, state, value); + wined3d_device_set_render_state(device->wined3d_device, state, value); break; } wined3d_mutex_unlock(); @@ -2731,9 +2742,7 @@ static HRESULT WINAPI d3d_device3_SetRenderState(IDirect3DDevice3 *iface, BOOL tex_alpha = FALSE; DDPIXELFORMAT ddfmt; - hr = wined3d_device_get_texture(device->wined3d_device, 0, &tex); - - if(hr == WINED3D_OK && tex) + if ((tex = wined3d_device_get_texture(device->wined3d_device, 0))) { struct wined3d_resource *sub_resource; @@ -2746,8 +2755,6 @@ static HRESULT WINAPI d3d_device3_SetRenderState(IDirect3DDevice3 *iface, PixelFormat_WineD3DtoDD(&ddfmt, desc.format); if (ddfmt.u5.dwRGBAlphaBitMask) tex_alpha = TRUE; } - - wined3d_texture_decref(tex); } if (tex_alpha) @@ -3080,7 +3087,6 @@ static HRESULT d3d_device7_SetTransform(IDirect3DDevice7 *iface, { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); enum wined3d_transform_state wined3d_state; - HRESULT hr; TRACE("iface %p, state %#x, matrix %p.\n", iface, state, matrix); @@ -3107,10 +3113,10 @@ static HRESULT d3d_device7_SetTransform(IDirect3DDevice7 *iface, /* Note: D3DMATRIX is compatible with struct wined3d_matrix. */ wined3d_mutex_lock(); - hr = wined3d_device_set_transform(device->wined3d_device, wined3d_state, (struct wined3d_matrix *)matrix); + wined3d_device_set_transform(device->wined3d_device, wined3d_state, (struct wined3d_matrix *)matrix); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d_device7_SetTransform_FPUSetup(IDirect3DDevice7 *iface, @@ -3145,17 +3151,15 @@ static HRESULT WINAPI d3d_device3_SetTransform(IDirect3DDevice3 *iface, if (state == D3DTRANSFORMSTATE_PROJECTION) { D3DMATRIX projection; - HRESULT hr; wined3d_mutex_lock(); multiply_matrix(&projection, &device->legacy_clipspace, matrix); - hr = wined3d_device_set_transform(device->wined3d_device, + wined3d_device_set_transform(device->wined3d_device, WINED3D_TS_PROJECTION, (struct wined3d_matrix *)&projection); - if (SUCCEEDED(hr)) - device->legacy_projection = *matrix; + device->legacy_projection = *matrix; wined3d_mutex_unlock(); - return hr; + return D3D_OK; } return IDirect3DDevice7_SetTransform(&device->IDirect3DDevice7_iface, state, matrix); @@ -3193,7 +3197,6 @@ static HRESULT d3d_device7_GetTransform(IDirect3DDevice7 *iface, { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); enum wined3d_transform_state wined3d_state; - HRESULT hr; TRACE("iface %p, state %#x, matrix %p.\n", iface, state, matrix); @@ -3220,10 +3223,10 @@ static HRESULT d3d_device7_GetTransform(IDirect3DDevice7 *iface, /* Note: D3DMATRIX is compatible with struct wined3d_matrix. */ wined3d_mutex_lock(); - hr = wined3d_device_get_transform(device->wined3d_device, wined3d_state, (struct wined3d_matrix *)matrix); + wined3d_device_get_transform(device->wined3d_device, wined3d_state, (struct wined3d_matrix *)matrix); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d_device7_GetTransform_FPUSetup(IDirect3DDevice7 *iface, @@ -3299,7 +3302,6 @@ static HRESULT d3d_device7_MultiplyTransform(IDirect3DDevice7 *iface, { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); enum wined3d_transform_state wined3d_state; - HRESULT hr; TRACE("iface %p, state %#x, matrix %p.\n", iface, state, matrix); @@ -3323,11 +3325,11 @@ static HRESULT d3d_device7_MultiplyTransform(IDirect3DDevice7 *iface, /* Note: D3DMATRIX is compatible with struct wined3d_matrix. */ wined3d_mutex_lock(); - hr = wined3d_device_multiply_transform(device->wined3d_device, + wined3d_device_multiply_transform(device->wined3d_device, wined3d_state, (struct wined3d_matrix *)matrix); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d_device7_MultiplyTransform_FPUSetup(IDirect3DDevice7 *iface, @@ -3359,18 +3361,16 @@ static HRESULT WINAPI d3d_device3_MultiplyTransform(IDirect3DDevice3 *iface, if (state == D3DTRANSFORMSTATE_PROJECTION) { D3DMATRIX projection, tmp; - HRESULT hr; wined3d_mutex_lock(); multiply_matrix(&tmp, &device->legacy_projection, matrix); multiply_matrix(&projection, &device->legacy_clipspace, &tmp); - hr = wined3d_device_set_transform(device->wined3d_device, + wined3d_device_set_transform(device->wined3d_device, WINED3D_TS_PROJECTION, (struct wined3d_matrix *)&projection); - if (SUCCEEDED(hr)) - device->legacy_projection = tmp; + device->legacy_projection = tmp; wined3d_mutex_unlock(); - return hr; + return D3D_OK; } return IDirect3DDevice7_MultiplyTransform(&device->IDirect3DDevice7_iface, state, matrix); @@ -3407,13 +3407,45 @@ static HRESULT WINAPI d3d_device2_MultiplyTransform(IDirect3DDevice2 *iface, * For details, see IWineD3DDevice::DrawPrimitiveUP * *****************************************************************************/ + +/* The caller is responsible for wined3d locking */ +static HRESULT d3d_device_prepare_vertex_buffer(struct d3d_device *device, UINT min_size) +{ + HRESULT hr; + + if (device->vertex_buffer_size < min_size || !device->vertex_buffer) + { + UINT size = max(device->vertex_buffer_size * 2, min_size); + struct wined3d_buffer *buffer; + + TRACE("Growing vertex buffer to %u bytes\n", size); + + hr = wined3d_buffer_create_vb(device->wined3d_device, size, WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY, + WINED3D_POOL_DEFAULT, NULL, &ddraw_null_wined3d_parent_ops, &buffer); + if (FAILED(hr)) + { + ERR("(%p) wined3d_buffer_create_vb failed with hr = %08x\n", device, hr); + return hr; + } + + if (device->vertex_buffer) + wined3d_buffer_decref(device->vertex_buffer); + + device->vertex_buffer = buffer; + device->vertex_buffer_size = size; + device->vertex_buffer_pos = 0; + } + return D3D_OK; +} + static HRESULT d3d_device7_DrawPrimitive(IDirect3DDevice7 *iface, D3DPRIMITIVETYPE primitive_type, DWORD fvf, void *vertices, DWORD vertex_count, DWORD flags) { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); - UINT stride; + UINT stride, vb_pos, size, align; HRESULT hr; + BYTE *data; TRACE("iface %p, primitive_type %#x, fvf %#x, vertices %p, vertex_count %u, flags %#x.\n", iface, primitive_type, fvf, vertices, vertex_count, flags); @@ -3423,21 +3455,39 @@ static HRESULT d3d_device7_DrawPrimitive(IDirect3DDevice7 *iface, /* Get the stride */ stride = get_flexible_vertex_size(fvf); + size = vertex_count * stride; - /* Set the FVF */ wined3d_mutex_lock(); - hr = wined3d_device_set_vertex_declaration(device->wined3d_device, ddraw_find_decl(device->ddraw, fvf)); - if (hr != D3D_OK) - { - wined3d_mutex_unlock(); - return hr; - } + hr = d3d_device_prepare_vertex_buffer(device, size); + if (FAILED(hr)) + goto done; - /* This method translates to the user pointer draw of WineD3D */ + vb_pos = device->vertex_buffer_pos; + align = vb_pos % stride; + if (align) align = stride - align; + if (vb_pos + size + align > device->vertex_buffer_size) + vb_pos = 0; + else + vb_pos += align; + + hr = wined3d_buffer_map(device->vertex_buffer, vb_pos, size, &data, + vb_pos ? WINED3D_MAP_NOOVERWRITE : WINED3D_MAP_DISCARD); + if (FAILED(hr)) + goto done; + memcpy(data, vertices, size); + wined3d_buffer_unmap(device->vertex_buffer); + device->vertex_buffer_pos = vb_pos + size; + + hr = wined3d_device_set_stream_source(device->wined3d_device, 0, device->vertex_buffer, 0, stride); + if (FAILED(hr)) + goto done; + + wined3d_device_set_vertex_declaration(device->wined3d_device, ddraw_find_decl(device->ddraw, fvf)); wined3d_device_set_primitive_type(device->wined3d_device, primitive_type); - hr = wined3d_device_draw_primitive_up(device->wined3d_device, vertex_count, vertices, stride); - wined3d_mutex_unlock(); + hr = wined3d_device_draw_primitive(device->wined3d_device, vb_pos / stride, vertex_count); +done: + wined3d_mutex_unlock(); return hr; } @@ -3523,12 +3573,45 @@ static HRESULT WINAPI d3d_device2_DrawPrimitive(IDirect3DDevice2 *iface, * For details, see IWineD3DDevice::DrawIndexedPrimitiveUP * *****************************************************************************/ +/* The caller is responsible for wined3d locking */ +static HRESULT d3d_device_prepare_index_buffer(struct d3d_device *device, UINT min_size) +{ + HRESULT hr; + + if (device->index_buffer_size < min_size || !device->index_buffer) + { + UINT size = max(device->index_buffer_size * 2, min_size); + struct wined3d_buffer *buffer; + + TRACE("Growing index buffer to %u bytes\n", size); + + hr = wined3d_buffer_create_ib(device->wined3d_device, size, WINED3DUSAGE_DYNAMIC | WINED3DUSAGE_WRITEONLY, + WINED3D_POOL_DEFAULT, NULL, &ddraw_null_wined3d_parent_ops, &buffer); + if (FAILED(hr)) + { + ERR("(%p) wined3d_buffer_create_ib failed with hr = %08x\n", device, hr); + return hr; + } + + if (device->index_buffer) + wined3d_buffer_decref(device->index_buffer); + device->index_buffer = buffer; + device->index_buffer_size = size; + device->index_buffer_pos = 0; + } + return D3D_OK; +} + static HRESULT d3d_device7_DrawIndexedPrimitive(IDirect3DDevice7 *iface, D3DPRIMITIVETYPE primitive_type, DWORD fvf, void *vertices, DWORD vertex_count, WORD *indices, DWORD index_count, DWORD flags) { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); HRESULT hr; + UINT stride = get_flexible_vertex_size(fvf); + UINT vtx_size = stride * vertex_count, idx_size = index_count * sizeof(*indices); + UINT vb_pos, ib_pos, align; + BYTE *data; TRACE("iface %p, primitive_type %#x, fvf %#x, vertices %p, vertex_count %u, " "indices %p, index_count %u, flags %#x.\n", @@ -3536,19 +3619,54 @@ static HRESULT d3d_device7_DrawIndexedPrimitive(IDirect3DDevice7 *iface, /* Set the D3DDevice's FVF */ wined3d_mutex_lock(); - hr = wined3d_device_set_vertex_declaration(device->wined3d_device, ddraw_find_decl(device->ddraw, fvf)); + + hr = d3d_device_prepare_vertex_buffer(device, vtx_size); if (FAILED(hr)) - { - WARN("Failed to set vertex declaration, hr %#x.\n", hr); - wined3d_mutex_unlock(); - return hr; - } + goto done; + vb_pos = device->vertex_buffer_pos; + align = vb_pos % stride; + if (align) align = stride - align; + if (vb_pos + vtx_size + align > device->vertex_buffer_size) + vb_pos = 0; + else + vb_pos += align; + + hr = wined3d_buffer_map(device->vertex_buffer, vb_pos, vtx_size, &data, + vb_pos ? WINED3D_MAP_NOOVERWRITE : WINED3D_MAP_DISCARD); + if (FAILED(hr)) + goto done; + memcpy(data, vertices, vtx_size); + wined3d_buffer_unmap(device->vertex_buffer); + device->vertex_buffer_pos = vb_pos + vtx_size; + + hr = d3d_device_prepare_index_buffer(device, idx_size); + if (FAILED(hr)) + goto done; + ib_pos = device->index_buffer_pos; + if (device->index_buffer_size - idx_size < ib_pos) + ib_pos = 0; + + hr = wined3d_buffer_map(device->index_buffer, ib_pos, idx_size, &data, + ib_pos ? WINED3D_MAP_NOOVERWRITE : WINED3D_MAP_DISCARD); + if (FAILED(hr)) + goto done; + memcpy(data, indices, idx_size); + wined3d_buffer_unmap(device->index_buffer); + device->index_buffer_pos = ib_pos + idx_size; + + hr = wined3d_device_set_stream_source(device->wined3d_device, 0, device->vertex_buffer, 0, stride); + if (FAILED(hr)) + goto done; + wined3d_device_set_index_buffer(device->wined3d_device, device->index_buffer, WINED3DFMT_R16_UINT); + + wined3d_device_set_vertex_declaration(device->wined3d_device, ddraw_find_decl(device->ddraw, fvf)); wined3d_device_set_primitive_type(device->wined3d_device, primitive_type); - hr = wined3d_device_draw_indexed_primitive_up(device->wined3d_device, index_count, indices, - WINED3DFMT_R16_UINT, vertices, get_flexible_vertex_size(fvf)); - wined3d_mutex_unlock(); + wined3d_device_set_base_vertex_index(device->wined3d_device, vb_pos / stride); + hr = wined3d_device_draw_indexed_primitive(device->wined3d_device, ib_pos / sizeof(*indices), index_count); +done: + wined3d_mutex_unlock(); return hr; } @@ -3719,82 +3837,106 @@ static HRESULT WINAPI d3d_device2_GetClipStatus(IDirect3DDevice2 *iface, D3DCLIP * (For details, see IWineD3DDevice::DrawPrimitiveStrided) * *****************************************************************************/ +static void pack_strided_data(BYTE *dst, DWORD count, const D3DDRAWPRIMITIVESTRIDEDDATA *src, DWORD fvf) +{ + DWORD i, tex, offset; + + for (i = 0; i < count; i++) + { + /* The contents of the strided data are determined by the fvf, + * not by the members set in src. So it's valid + * to have diffuse.lpvData set to 0xdeadbeef if the diffuse flag is + * not set in the fvf. */ + if (fvf & D3DFVF_POSITION_MASK) + { + offset = i * src->position.dwStride; + if (fvf & D3DFVF_XYZRHW) + { + memcpy(dst, ((BYTE *)src->position.lpvData) + offset, 4 * sizeof(float)); + dst += 4 * sizeof(float); + } + else + { + memcpy(dst, ((BYTE *)src->position.lpvData) + offset, 3 * sizeof(float)); + dst += 3 * sizeof(float); + } + } + + if (fvf & D3DFVF_NORMAL) + { + offset = i * src->normal.dwStride; + memcpy(dst, ((BYTE *)src->normal.lpvData) + offset, 3 * sizeof(float)); + dst += 3 * sizeof(float); + } + + if (fvf & D3DFVF_DIFFUSE) + { + offset = i * src->diffuse.dwStride; + memcpy(dst, ((BYTE *)src->diffuse.lpvData) + offset, sizeof(DWORD)); + dst += sizeof(DWORD); + } + + if (fvf & D3DFVF_SPECULAR) + { + offset = i * src->specular.dwStride; + memcpy(dst, ((BYTE *)src->specular.lpvData) + offset, sizeof(DWORD)); + dst += sizeof(DWORD); + } + + for (tex = 0; tex < GET_TEXCOUNT_FROM_FVF(fvf); ++tex) + { + DWORD attrib_count = GET_TEXCOORD_SIZE_FROM_FVF(fvf, tex); + offset = i * src->textureCoords[tex].dwStride; + memcpy(dst, ((BYTE *)src->textureCoords[tex].lpvData) + offset, attrib_count * sizeof(float)); + dst += attrib_count * sizeof(float); + } + } +} + static HRESULT d3d_device7_DrawPrimitiveStrided(IDirect3DDevice7 *iface, D3DPRIMITIVETYPE PrimitiveType, DWORD VertexType, D3DDRAWPRIMITIVESTRIDEDDATA *D3DDrawPrimStrideData, DWORD VertexCount, DWORD Flags) { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); - struct wined3d_strided_data wined3d_strided; - DWORD i; HRESULT hr; + UINT dst_stride = get_flexible_vertex_size(VertexType); + UINT dst_size = dst_stride * VertexCount; + UINT vb_pos, align; + BYTE *dst_data; TRACE("iface %p, primitive_type %#x, FVF %#x, strided_data %p, vertex_count %u, flags %#x.\n", iface, PrimitiveType, VertexType, D3DDrawPrimStrideData, VertexCount, Flags); - memset(&wined3d_strided, 0, sizeof(wined3d_strided)); - /* Get the strided data right. the wined3d structure is a bit bigger - * Watch out: The contents of the strided data are determined by the fvf, - * not by the members set in D3DDrawPrimStrideData. So it's valid - * to have diffuse.lpvData set to 0xdeadbeef if the diffuse flag is - * not set in the fvf. - */ - if(VertexType & D3DFVF_POSITION_MASK) - { - wined3d_strided.position.format = WINED3DFMT_R32G32B32_FLOAT; - wined3d_strided.position.data = D3DDrawPrimStrideData->position.lpvData; - wined3d_strided.position.stride = D3DDrawPrimStrideData->position.dwStride; - if (VertexType & D3DFVF_XYZRHW) - { - wined3d_strided.position.format = WINED3DFMT_R32G32B32A32_FLOAT; - wined3d_strided.position_transformed = TRUE; - } - else - { - wined3d_strided.position_transformed = FALSE; - } - } - - if (VertexType & D3DFVF_NORMAL) - { - wined3d_strided.normal.format = WINED3DFMT_R32G32B32_FLOAT; - wined3d_strided.normal.data = D3DDrawPrimStrideData->normal.lpvData; - wined3d_strided.normal.stride = D3DDrawPrimStrideData->normal.dwStride; - } - - if (VertexType & D3DFVF_DIFFUSE) - { - wined3d_strided.diffuse.format = WINED3DFMT_B8G8R8A8_UNORM; - wined3d_strided.diffuse.data = D3DDrawPrimStrideData->diffuse.lpvData; - wined3d_strided.diffuse.stride = D3DDrawPrimStrideData->diffuse.dwStride; - } - - if (VertexType & D3DFVF_SPECULAR) - { - wined3d_strided.specular.format = WINED3DFMT_B8G8R8A8_UNORM; - wined3d_strided.specular.data = D3DDrawPrimStrideData->specular.lpvData; - wined3d_strided.specular.stride = D3DDrawPrimStrideData->specular.dwStride; - } - - for (i = 0; i < GET_TEXCOUNT_FROM_FVF(VertexType); ++i) - { - switch (GET_TEXCOORD_SIZE_FROM_FVF(VertexType, i)) - { - case 1: wined3d_strided.tex_coords[i].format = WINED3DFMT_R32_FLOAT; break; - case 2: wined3d_strided.tex_coords[i].format = WINED3DFMT_R32G32_FLOAT; break; - case 3: wined3d_strided.tex_coords[i].format = WINED3DFMT_R32G32B32_FLOAT; break; - case 4: wined3d_strided.tex_coords[i].format = WINED3DFMT_R32G32B32A32_FLOAT; break; - default: ERR("Unexpected texture coordinate size %d\n", - GET_TEXCOORD_SIZE_FROM_FVF(VertexType, i)); - } - wined3d_strided.tex_coords[i].data = D3DDrawPrimStrideData->textureCoords[i].lpvData; - wined3d_strided.tex_coords[i].stride = D3DDrawPrimStrideData->textureCoords[i].dwStride; - } - - /* WineD3D doesn't need the FVF here */ wined3d_mutex_lock(); - wined3d_device_set_primitive_type(device->wined3d_device, PrimitiveType); - hr = wined3d_device_draw_primitive_strided(device->wined3d_device, VertexCount, &wined3d_strided); - wined3d_mutex_unlock(); + hr = d3d_device_prepare_vertex_buffer(device, dst_size); + if (FAILED(hr)) + goto done; + vb_pos = device->vertex_buffer_pos; + align = vb_pos % dst_stride; + if (align) align = dst_stride - align; + if (vb_pos + dst_size + align > device->vertex_buffer_size) + vb_pos = 0; + else + vb_pos += align; + + hr = wined3d_buffer_map(device->vertex_buffer, vb_pos, dst_size, &dst_data, + vb_pos ? WINED3D_MAP_NOOVERWRITE : WINED3D_MAP_DISCARD); + if (FAILED(hr)) + goto done; + pack_strided_data(dst_data, VertexCount, D3DDrawPrimStrideData, VertexType); + wined3d_buffer_unmap(device->vertex_buffer); + device->vertex_buffer_pos = vb_pos + dst_size; + + hr = wined3d_device_set_stream_source(device->wined3d_device, 0, device->vertex_buffer, 0, dst_stride); + if (FAILED(hr)) + goto done; + wined3d_device_set_vertex_declaration(device->wined3d_device, ddraw_find_decl(device->ddraw, VertexType)); + + wined3d_device_set_primitive_type(device->wined3d_device, PrimitiveType); + hr = wined3d_device_draw_primitive(device->wined3d_device, vb_pos / dst_stride, VertexCount); + +done: + wined3d_mutex_unlock(); return hr; } @@ -3857,78 +3999,66 @@ static HRESULT d3d_device7_DrawIndexedPrimitiveStrided(IDirect3DDevice7 *iface, WORD *Indices, DWORD IndexCount, DWORD Flags) { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); - struct wined3d_strided_data wined3d_strided; - DWORD i; HRESULT hr; + UINT vtx_dst_stride = get_flexible_vertex_size(VertexType); + UINT vtx_dst_size = VertexCount * vtx_dst_stride; + UINT vb_pos, align; + UINT idx_size = IndexCount * sizeof(WORD); + UINT ib_pos; + BYTE *dst_data; TRACE("iface %p, primitive_type %#x, FVF %#x, strided_data %p, vertex_count %u, indices %p, index_count %u, flags %#x.\n", iface, PrimitiveType, VertexType, D3DDrawPrimStrideData, VertexCount, Indices, IndexCount, Flags); - memset(&wined3d_strided, 0, sizeof(wined3d_strided)); - /* Get the strided data right. the wined3d structure is a bit bigger - * Watch out: The contents of the strided data are determined by the fvf, - * not by the members set in D3DDrawPrimStrideData. So it's valid - * to have diffuse.lpvData set to 0xdeadbeef if the diffuse flag is - * not set in the fvf. */ - if (VertexType & D3DFVF_POSITION_MASK) - { - wined3d_strided.position.format = WINED3DFMT_R32G32B32_FLOAT; - wined3d_strided.position.data = D3DDrawPrimStrideData->position.lpvData; - wined3d_strided.position.stride = D3DDrawPrimStrideData->position.dwStride; - if (VertexType & D3DFVF_XYZRHW) - { - wined3d_strided.position.format = WINED3DFMT_R32G32B32A32_FLOAT; - wined3d_strided.position_transformed = TRUE; - } - else - { - wined3d_strided.position_transformed = FALSE; - } - } - - if (VertexType & D3DFVF_NORMAL) - { - wined3d_strided.normal.format = WINED3DFMT_R32G32B32_FLOAT; - wined3d_strided.normal.data = D3DDrawPrimStrideData->normal.lpvData; - wined3d_strided.normal.stride = D3DDrawPrimStrideData->normal.dwStride; - } - - if (VertexType & D3DFVF_DIFFUSE) - { - wined3d_strided.diffuse.format = WINED3DFMT_B8G8R8A8_UNORM; - wined3d_strided.diffuse.data = D3DDrawPrimStrideData->diffuse.lpvData; - wined3d_strided.diffuse.stride = D3DDrawPrimStrideData->diffuse.dwStride; - } - - if (VertexType & D3DFVF_SPECULAR) - { - wined3d_strided.specular.format = WINED3DFMT_B8G8R8A8_UNORM; - wined3d_strided.specular.data = D3DDrawPrimStrideData->specular.lpvData; - wined3d_strided.specular.stride = D3DDrawPrimStrideData->specular.dwStride; - } - - for (i = 0; i < GET_TEXCOUNT_FROM_FVF(VertexType); ++i) - { - switch (GET_TEXCOORD_SIZE_FROM_FVF(VertexType, i)) - { - case 1: wined3d_strided.tex_coords[i].format = WINED3DFMT_R32_FLOAT; break; - case 2: wined3d_strided.tex_coords[i].format = WINED3DFMT_R32G32_FLOAT; break; - case 3: wined3d_strided.tex_coords[i].format = WINED3DFMT_R32G32B32_FLOAT; break; - case 4: wined3d_strided.tex_coords[i].format = WINED3DFMT_R32G32B32A32_FLOAT; break; - default: ERR("Unexpected texture coordinate size %d\n", - GET_TEXCOORD_SIZE_FROM_FVF(VertexType, i)); - } - wined3d_strided.tex_coords[i].data = D3DDrawPrimStrideData->textureCoords[i].lpvData; - wined3d_strided.tex_coords[i].stride = D3DDrawPrimStrideData->textureCoords[i].dwStride; - } - - /* WineD3D doesn't need the FVF here */ wined3d_mutex_lock(); - wined3d_device_set_primitive_type(device->wined3d_device, PrimitiveType); - hr = wined3d_device_draw_indexed_primitive_strided(device->wined3d_device, - IndexCount, &wined3d_strided, VertexCount, Indices, WINED3DFMT_R16_UINT); - wined3d_mutex_unlock(); + hr = d3d_device_prepare_vertex_buffer(device, vtx_dst_size); + if (FAILED(hr)) + goto done; + + vb_pos = device->vertex_buffer_pos; + align = vb_pos % vtx_dst_stride; + if (align) align = vtx_dst_stride - align; + if (vb_pos + vtx_dst_size + align > device->vertex_buffer_size) + vb_pos = 0; + else + vb_pos += align; + + hr = wined3d_buffer_map(device->vertex_buffer, vb_pos, vtx_dst_size, &dst_data, + vb_pos ? WINED3D_MAP_NOOVERWRITE : WINED3D_MAP_DISCARD); + if (FAILED(hr)) + goto done; + pack_strided_data(dst_data, VertexCount, D3DDrawPrimStrideData, VertexType); + wined3d_buffer_unmap(device->vertex_buffer); + device->vertex_buffer_pos = vb_pos + vtx_dst_size; + + hr = d3d_device_prepare_index_buffer(device, idx_size); + if (FAILED(hr)) + goto done; + ib_pos = device->index_buffer_pos; + if (device->index_buffer_size - idx_size < ib_pos) + ib_pos = 0; + + hr = wined3d_buffer_map(device->index_buffer, ib_pos, idx_size, &dst_data, + ib_pos ? WINED3D_MAP_NOOVERWRITE : WINED3D_MAP_DISCARD); + if (FAILED(hr)) + goto done; + memcpy(dst_data, Indices, idx_size); + wined3d_buffer_unmap(device->index_buffer); + device->index_buffer_pos = ib_pos + idx_size; + + hr = wined3d_device_set_stream_source(device->wined3d_device, 0, device->vertex_buffer, 0, vtx_dst_stride); + if (FAILED(hr)) + goto done; + wined3d_device_set_index_buffer(device->wined3d_device, device->index_buffer, WINED3DFMT_R16_UINT); + wined3d_device_set_base_vertex_index(device->wined3d_device, vb_pos / vtx_dst_stride); + + wined3d_device_set_vertex_declaration(device->wined3d_device, ddraw_find_decl(device->ddraw, VertexType)); + wined3d_device_set_primitive_type(device->wined3d_device, PrimitiveType); + hr = wined3d_device_draw_indexed_primitive(device->wined3d_device, ib_pos / sizeof(WORD), IndexCount); + +done: + wined3d_mutex_unlock(); return hr; } @@ -4010,15 +4140,7 @@ static HRESULT d3d_device7_DrawPrimitiveVB(IDirect3DDevice7 *iface, D3DPRIMITIVE stride = get_flexible_vertex_size(vb->fvf); wined3d_mutex_lock(); - hr = wined3d_device_set_vertex_declaration(device->wined3d_device, vb->wineD3DVertexDeclaration); - if (FAILED(hr)) - { - WARN("Failed to set vertex declaration, hr %#x.\n", hr); - wined3d_mutex_unlock(); - return hr; - } - - /* Set the vertex stream source */ + wined3d_device_set_vertex_declaration(device->wined3d_device, vb->wineD3DVertexDeclaration); hr = wined3d_device_set_stream_source(device->wined3d_device, 0, vb->wineD3DVertexBuffer, 0, stride); if (FAILED(hr)) { @@ -4030,6 +4152,10 @@ static HRESULT d3d_device7_DrawPrimitiveVB(IDirect3DDevice7 *iface, D3DPRIMITIVE /* Now draw the primitives */ wined3d_device_set_primitive_type(device->wined3d_device, PrimitiveType); hr = wined3d_device_draw_primitive(device->wined3d_device, StartVertex, NumVertices); + + if (SUCCEEDED(hr)) + vb->read_since_last_map = TRUE; + wined3d_mutex_unlock(); return hr; @@ -4067,7 +4193,6 @@ static HRESULT WINAPI d3d_device3_DrawPrimitiveVB(IDirect3DDevice3 *iface, D3DPR PrimitiveType, &vb->IDirect3DVertexBuffer7_iface, StartVertex, NumVertices, Flags); } - /***************************************************************************** * IDirect3DDevice7::DrawIndexedPrimitiveVB * @@ -4092,10 +4217,9 @@ static HRESULT d3d_device7_DrawIndexedPrimitiveVB(IDirect3DDevice7 *iface, struct d3d_device *This = impl_from_IDirect3DDevice7(iface); struct d3d_vertex_buffer *vb = unsafe_impl_from_IDirect3DVertexBuffer7(D3DVertexBuf); DWORD stride = get_flexible_vertex_size(vb->fvf); - struct wined3d_resource *wined3d_resource; - struct wined3d_resource_desc desc; WORD *LockedIndices; HRESULT hr; + UINT ib_pos; TRACE("iface %p, primitive_type %#x, vb %p, start_vertex %u, vertex_count %u, indices %p, index_count %u, flags %#x.\n", iface, PrimitiveType, D3DVertexBuf, StartVertex, NumVertices, Indices, IndexCount, Flags); @@ -4109,44 +4233,25 @@ static HRESULT d3d_device7_DrawIndexedPrimitiveVB(IDirect3DDevice7 *iface, wined3d_mutex_lock(); - hr = wined3d_device_set_vertex_declaration(This->wined3d_device, vb->wineD3DVertexDeclaration); + wined3d_device_set_vertex_declaration(This->wined3d_device, vb->wineD3DVertexDeclaration); + + hr = d3d_device_prepare_index_buffer(This, IndexCount * sizeof(WORD)); if (FAILED(hr)) { - ERR(" (%p) Setting the FVF failed, hr = %x!\n", This, hr); wined3d_mutex_unlock(); return hr; } + ib_pos = This->index_buffer_pos; - /* check that the buffer is large enough to hold the indices, - * reallocate if necessary. */ - wined3d_resource = wined3d_buffer_get_resource(This->indexbuffer); - wined3d_resource_get_desc(wined3d_resource, &desc); - if (desc.size < IndexCount * sizeof(WORD)) - { - UINT size = max(desc.size * 2, IndexCount * sizeof(WORD)); - struct wined3d_buffer *buffer; - - TRACE("Growing index buffer to %u bytes\n", size); - - hr = wined3d_buffer_create_ib(This->wined3d_device, size, WINED3DUSAGE_DYNAMIC /* Usage */, - WINED3D_POOL_DEFAULT, NULL, &ddraw_null_wined3d_parent_ops, &buffer); - if (FAILED(hr)) - { - ERR("(%p) IWineD3DDevice::CreateIndexBuffer failed with hr = %08x\n", This, hr); - wined3d_mutex_unlock(); - return hr; - } - - wined3d_buffer_decref(This->indexbuffer); - This->indexbuffer = buffer; - } + if (This->index_buffer_size - IndexCount * sizeof(WORD) < ib_pos) + ib_pos = 0; /* Copy the index stream into the index buffer. A new IWineD3DDevice * method could be created which takes an user pointer containing the * indices or a SetData-Method for the index buffer, which overrides the * index buffer data with our pointer. */ - hr = wined3d_buffer_map(This->indexbuffer, 0, IndexCount * sizeof(WORD), - (BYTE **)&LockedIndices, 0); + hr = wined3d_buffer_map(This->index_buffer, ib_pos, IndexCount * sizeof(WORD), + (BYTE **)&LockedIndices, ib_pos ? WINED3D_MAP_NOOVERWRITE : WINED3D_MAP_DISCARD); if (FAILED(hr)) { ERR("Failed to map buffer, hr %#x.\n", hr); @@ -4154,11 +4259,12 @@ static HRESULT d3d_device7_DrawIndexedPrimitiveVB(IDirect3DDevice7 *iface, return hr; } memcpy(LockedIndices, Indices, IndexCount * sizeof(WORD)); - wined3d_buffer_unmap(This->indexbuffer); + wined3d_buffer_unmap(This->index_buffer); + This->index_buffer_pos = ib_pos + IndexCount * sizeof(WORD); /* Set the index stream */ wined3d_device_set_base_vertex_index(This->wined3d_device, StartVertex); - hr = wined3d_device_set_index_buffer(This->wined3d_device, This->indexbuffer, WINED3DFMT_R16_UINT); + wined3d_device_set_index_buffer(This->wined3d_device, This->index_buffer, WINED3DFMT_R16_UINT); /* Set the vertex stream source */ hr = wined3d_device_set_stream_source(This->wined3d_device, 0, vb->wineD3DVertexBuffer, 0, stride); @@ -4171,7 +4277,10 @@ static HRESULT d3d_device7_DrawIndexedPrimitiveVB(IDirect3DDevice7 *iface, wined3d_device_set_primitive_type(This->wined3d_device, PrimitiveType); - hr = wined3d_device_draw_indexed_primitive(This->wined3d_device, 0, IndexCount); + hr = wined3d_device_draw_indexed_primitive(This->wined3d_device, ib_pos / sizeof(WORD), IndexCount); + + if (SUCCEEDED(hr)) + vb->read_since_last_map = TRUE; wined3d_mutex_unlock(); @@ -4359,7 +4468,6 @@ static HRESULT d3d_device7_GetTexture(IDirect3DDevice7 *iface, struct d3d_device *device = impl_from_IDirect3DDevice7(iface); struct wined3d_texture *wined3d_texture; struct ddraw_surface *surface; - HRESULT hr; TRACE("iface %p, stage %u, texture %p.\n", iface, stage, texture); @@ -4367,21 +4475,19 @@ static HRESULT d3d_device7_GetTexture(IDirect3DDevice7 *iface, return DDERR_INVALIDPARAMS; wined3d_mutex_lock(); - hr = wined3d_device_get_texture(device->wined3d_device, stage, &wined3d_texture); - if (FAILED(hr) || !wined3d_texture) + if (!(wined3d_texture = wined3d_device_get_texture(device->wined3d_device, stage))) { *texture = NULL; wined3d_mutex_unlock(); - return hr; + return D3D_OK; } surface = wined3d_texture_get_parent(wined3d_texture); *texture = &surface->IDirectDrawSurface7_iface; IDirectDrawSurface7_AddRef(*texture); - wined3d_texture_decref(wined3d_texture); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d_device7_GetTexture_FPUSetup(IDirect3DDevice7 *iface, @@ -4499,10 +4605,8 @@ static HRESULT WINAPI d3d_device3_SetTexture(IDirect3DDevice3 *iface, struct wined3d_texture *tex = NULL; BOOL tex_alpha = FALSE; DDPIXELFORMAT ddfmt; - HRESULT result; - result = wined3d_device_get_texture(device->wined3d_device, 0, &tex); - if (result == WINED3D_OK && tex) + if ((tex = wined3d_device_get_texture(device->wined3d_device, 0))) { struct wined3d_resource *sub_resource; @@ -4515,8 +4619,6 @@ static HRESULT WINAPI d3d_device3_SetTexture(IDirect3DDevice3 *iface, PixelFormat_WineD3DtoDD(&ddfmt, desc.format); if (ddfmt.u5.dwRGBAlphaBitMask) tex_alpha = TRUE; } - - wined3d_texture_decref(tex); } /* Arg 1/2 are already set to WINED3DTA_TEXTURE/WINED3DTA_CURRENT in case of D3DTBLEND_MODULATE */ @@ -4589,7 +4691,6 @@ static HRESULT d3d_device7_GetTextureStageState(IDirect3DDevice7 *iface, DWORD stage, D3DTEXTURESTAGESTATETYPE state, DWORD *value) { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); - HRESULT hr; const struct tss_lookup *l; TRACE("iface %p, stage %u, state %#x, value %p.\n", @@ -4610,7 +4711,7 @@ static HRESULT d3d_device7_GetTextureStageState(IDirect3DDevice7 *iface, if (l->sampler_state) { - hr = wined3d_device_get_sampler_state(device->wined3d_device, stage, l->state, value); + *value = wined3d_device_get_sampler_state(device->wined3d_device, stage, l->state); switch (state) { @@ -4670,12 +4771,12 @@ static HRESULT d3d_device7_GetTextureStageState(IDirect3DDevice7 *iface, } else { - hr = wined3d_device_get_texture_stage_state(device->wined3d_device, stage, l->state, value); + *value = wined3d_device_get_texture_stage_state(device->wined3d_device, stage, l->state); } wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d_device7_GetTextureStageState_FPUSetup(IDirect3DDevice7 *iface, @@ -4731,7 +4832,6 @@ static HRESULT d3d_device7_SetTextureStageState(IDirect3DDevice7 *iface, { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); const struct tss_lookup *l; - HRESULT hr; TRACE("iface %p, stage %u, state %#x, value %#x.\n", iface, stage, state, value); @@ -4809,16 +4909,16 @@ static HRESULT d3d_device7_SetTextureStageState(IDirect3DDevice7 *iface, break; } - hr = wined3d_device_set_sampler_state(device->wined3d_device, stage, l->state, value); + wined3d_device_set_sampler_state(device->wined3d_device, stage, l->state, value); } else { - hr = wined3d_device_set_texture_stage_state(device->wined3d_device, stage, l->state, value); + wined3d_device_set_texture_stage_state(device->wined3d_device, stage, l->state, value); } wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d_device7_SetTextureStageState_FPUSetup(IDirect3DDevice7 *iface, @@ -4992,7 +5092,6 @@ static HRESULT WINAPI d3d_device7_Clear_FPUPreserve(IDirect3DDevice7 *iface, DWO static HRESULT d3d_device7_SetViewport(IDirect3DDevice7 *iface, D3DVIEWPORT7 *viewport) { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); - HRESULT hr; TRACE("iface %p, viewport %p.\n", iface, viewport); @@ -5001,10 +5100,10 @@ static HRESULT d3d_device7_SetViewport(IDirect3DDevice7 *iface, D3DVIEWPORT7 *vi /* Note: D3DVIEWPORT7 is compatible with struct wined3d_viewport. */ wined3d_mutex_lock(); - hr = wined3d_device_set_viewport(device->wined3d_device, (struct wined3d_viewport *)viewport); + wined3d_device_set_viewport(device->wined3d_device, (struct wined3d_viewport *)viewport); wined3d_mutex_unlock(); - return hr; + return D3D_OK; } static HRESULT WINAPI d3d_device7_SetViewport_FPUSetup(IDirect3DDevice7 *iface, D3DVIEWPORT7 *viewport) @@ -5043,7 +5142,6 @@ static HRESULT WINAPI d3d_device7_SetViewport_FPUPreserve(IDirect3DDevice7 *ifac static HRESULT d3d_device7_GetViewport(IDirect3DDevice7 *iface, D3DVIEWPORT7 *viewport) { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); - HRESULT hr; TRACE("iface %p, viewport %p.\n", iface, viewport); @@ -5052,10 +5150,10 @@ static HRESULT d3d_device7_GetViewport(IDirect3DDevice7 *iface, D3DVIEWPORT7 *vi /* Note: D3DVIEWPORT7 is compatible with struct wined3d_viewport. */ wined3d_mutex_lock(); - hr = wined3d_device_get_viewport(device->wined3d_device, (struct wined3d_viewport *)viewport); + wined3d_device_get_viewport(device->wined3d_device, (struct wined3d_viewport *)viewport); wined3d_mutex_unlock(); - return hr_ddraw_from_wined3d(hr); + return D3D_OK; } static HRESULT WINAPI d3d_device7_GetViewport_FPUSetup(IDirect3DDevice7 *iface, D3DVIEWPORT7 *viewport) @@ -5094,7 +5192,6 @@ static HRESULT WINAPI d3d_device7_GetViewport_FPUPreserve(IDirect3DDevice7 *ifac static HRESULT d3d_device7_SetMaterial(IDirect3DDevice7 *iface, D3DMATERIAL7 *material) { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); - HRESULT hr; TRACE("iface %p, material %p.\n", iface, material); @@ -5103,10 +5200,10 @@ static HRESULT d3d_device7_SetMaterial(IDirect3DDevice7 *iface, D3DMATERIAL7 *ma wined3d_mutex_lock(); /* Note: D3DMATERIAL7 is compatible with struct wined3d_material. */ - hr = wined3d_device_set_material(device->wined3d_device, (struct wined3d_material *)material); + wined3d_device_set_material(device->wined3d_device, (struct wined3d_material *)material); wined3d_mutex_unlock(); - return hr_ddraw_from_wined3d(hr); + return D3D_OK; } static HRESULT WINAPI d3d_device7_SetMaterial_FPUSetup(IDirect3DDevice7 *iface, D3DMATERIAL7 *material) @@ -5145,16 +5242,15 @@ static HRESULT WINAPI d3d_device7_SetMaterial_FPUPreserve(IDirect3DDevice7 *ifac static HRESULT d3d_device7_GetMaterial(IDirect3DDevice7 *iface, D3DMATERIAL7 *material) { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); - HRESULT hr; TRACE("iface %p, material %p.\n", iface, material); wined3d_mutex_lock(); /* Note: D3DMATERIAL7 is compatible with struct wined3d_material. */ - hr = wined3d_device_get_material(device->wined3d_device, (struct wined3d_material *)material); + wined3d_device_get_material(device->wined3d_device, (struct wined3d_material *)material); wined3d_mutex_unlock(); - return hr_ddraw_from_wined3d(hr); + return D3D_OK; } static HRESULT WINAPI d3d_device7_GetMaterial_FPUSetup(IDirect3DDevice7 *iface, D3DMATERIAL7 *material) @@ -5452,7 +5548,6 @@ static HRESULT d3d_device7_ApplyStateBlock(IDirect3DDevice7 *iface, DWORD stateb { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); struct wined3d_stateblock *wined3d_sb; - HRESULT hr; TRACE("iface %p, stateblock %#x.\n", iface, stateblock); @@ -5465,10 +5560,10 @@ static HRESULT d3d_device7_ApplyStateBlock(IDirect3DDevice7 *iface, DWORD stateb return D3DERR_INVALIDSTATEBLOCK; } - hr = wined3d_stateblock_apply(wined3d_sb); + wined3d_stateblock_apply(wined3d_sb); wined3d_mutex_unlock(); - return hr_ddraw_from_wined3d(hr); + return D3D_OK; } static HRESULT WINAPI d3d_device7_ApplyStateBlock_FPUSetup(IDirect3DDevice7 *iface, DWORD stateblock) @@ -5508,7 +5603,6 @@ static HRESULT d3d_device7_CaptureStateBlock(IDirect3DDevice7 *iface, DWORD stat { struct d3d_device *device = impl_from_IDirect3DDevice7(iface); struct wined3d_stateblock *wined3d_sb; - HRESULT hr; TRACE("iface %p, stateblock %#x.\n", iface, stateblock); @@ -5521,10 +5615,10 @@ static HRESULT d3d_device7_CaptureStateBlock(IDirect3DDevice7 *iface, DWORD stat return D3DERR_INVALIDSTATEBLOCK; } - hr = wined3d_stateblock_capture(wined3d_sb); + wined3d_stateblock_capture(wined3d_sb); wined3d_mutex_unlock(); - return hr_ddraw_from_wined3d(hr); + return D3D_OK; } static HRESULT WINAPI d3d_device7_CaptureStateBlock_FPUSetup(IDirect3DDevice7 *iface, DWORD stateblock) @@ -6603,17 +6697,6 @@ static HRESULT d3d_device_init(struct d3d_device *device, struct ddraw *ddraw, device->legacy_projection = ident; device->legacy_clipspace = ident; - /* Create an index buffer, it's needed for indexed drawing */ - hr = wined3d_buffer_create_ib(ddraw->wined3d_device, 0x40000 /* Length. Don't know how long it should be */, - WINED3DUSAGE_DYNAMIC /* Usage */, WINED3D_POOL_DEFAULT, NULL, - &ddraw_null_wined3d_parent_ops, &device->indexbuffer); - if (FAILED(hr)) - { - ERR("Failed to create an index buffer, hr %#x.\n", hr); - ddraw_handle_table_destroy(&device->handle_table); - return hr; - } - /* This is for convenience. */ device->wined3d_device = ddraw->wined3d_device; wined3d_device_incref(ddraw->wined3d_device); @@ -6623,7 +6706,6 @@ static HRESULT d3d_device_init(struct d3d_device *device, struct ddraw *ddraw, if (FAILED(hr)) { ERR("Failed to set render target, hr %#x.\n", hr); - wined3d_buffer_decref(device->indexbuffer); ddraw_handle_table_destroy(&device->handle_table); return hr; } @@ -6659,7 +6741,7 @@ HRESULT d3d_device_create(struct ddraw *ddraw, struct ddraw_surface *target, TRACE("ddraw %p, target %p, version %u, device %p, outer_unknown %p.\n", ddraw, target, version, device, outer_unknown); - if (DefaultSurfaceType != WINED3D_SURFACE_TYPE_OPENGL) + if (DefaultSurfaceType != DDRAW_SURFACE_TYPE_OPENGL) { ERR_(winediag)("The application wants to create a Direct3D device, " "but the current DirectDrawRenderer does not support this.\n"); diff --git a/dll/directx/wine/ddraw/executebuffer.c b/dll/directx/wine/ddraw/executebuffer.c index d30b169c928..7c7cd731668 100644 --- a/dll/directx/wine/ddraw/executebuffer.c +++ b/dll/directx/wine/ddraw/executebuffer.c @@ -71,8 +71,9 @@ HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *buffer, if (TRACE_ON(ddraw)) _dump_executedata(&(buffer->data)); - while (1) { - LPD3DINSTRUCTION current = (LPD3DINSTRUCTION) instr; + for (;;) + { + D3DINSTRUCTION *current = (D3DINSTRUCTION *)instr; BYTE size; WORD count; @@ -92,7 +93,7 @@ HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *buffer, } break; case D3DOP_TRIANGLE: { - int i; + DWORD i; D3DTLVERTEX *tl_vx = buffer->vertex_data; TRACE("TRIANGLE (%d)\n", count); @@ -103,8 +104,9 @@ HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *buffer, buffer->indices = HeapAlloc(GetProcessHeap(), 0, sizeof(*buffer->indices) * buffer->nb_indices); } - for (i = 0; i < count; i++) { - LPD3DTRIANGLE ci = (LPD3DTRIANGLE) instr; + for (i = 0; i < count; ++i) + { + D3DTRIANGLE *ci = (D3DTRIANGLE *)instr; TRACE(" v1: %d v2: %d v3: %d\n",ci->u1.v1, ci->u2.v2, ci->u3.v3); TRACE(" Flags : "); if (TRACE_ON(ddraw)) @@ -133,7 +135,8 @@ HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *buffer, instr += size; } IDirect3DDevice7_DrawIndexedPrimitive(&device->IDirect3DDevice7_iface, - D3DPT_TRIANGLELIST, D3DFVF_TLVERTEX, tl_vx, 0, buffer->indices, count * 3, 0); + D3DPT_TRIANGLELIST, D3DFVF_TLVERTEX, tl_vx, buffer->nb_vertices, + buffer->indices, count * 3, 0); } break; case D3DOP_MATRIXLOAD: @@ -142,7 +145,7 @@ HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *buffer, break; case D3DOP_MATRIXMULTIPLY: { - int i; + DWORD i; TRACE("MATRIXMULTIPLY (%d)\n", count); for (i = 0; i < count; ++i) @@ -170,7 +173,7 @@ HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *buffer, } break; case D3DOP_STATETRANSFORM: { - int i; + DWORD i; TRACE("STATETRANSFORM (%d)\n", count); for (i = 0; i < count; ++i) @@ -200,11 +203,12 @@ HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *buffer, } break; case D3DOP_STATELIGHT: { - int i; + DWORD i; TRACE("STATELIGHT (%d)\n", count); - for (i = 0; i < count; i++) { - LPD3DSTATE ci = (LPD3DSTATE) instr; + for (i = 0; i < count; ++i) + { + D3DSTATE *ci = (D3DSTATE *)instr; TRACE("(%08x,%08x)\n", ci->u1.dlstLightStateType, ci->u2.dwArg[0]); @@ -266,12 +270,13 @@ HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *buffer, } break; case D3DOP_STATERENDER: { - int i; + DWORD i; IDirect3DDevice2 *d3d_device2 = &device->IDirect3DDevice2_iface; TRACE("STATERENDER (%d)\n", count); - for (i = 0; i < count; i++) { - LPD3DSTATE ci = (LPD3DSTATE) instr; + for (i = 0; i < count; ++i) + { + D3DSTATE *ci = (D3DSTATE *)instr; IDirect3DDevice2_SetRenderState(d3d_device2, ci->u1.drstRenderStateType, ci->u2.dwArg[0]); @@ -284,7 +289,7 @@ HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *buffer, /* TODO: Share code with IDirect3DVertexBuffer::ProcessVertices and / or * IWineD3DDevice::ProcessVertices */ - int i; + DWORD i; D3DMATRIX view_mat, world_mat, proj_mat; TRACE("PROCESSVERTICES (%d)\n", count); @@ -297,8 +302,9 @@ HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *buffer, wined3d_device_get_transform(device->wined3d_device, WINED3D_TS_WORLD_MATRIX(0), (struct wined3d_matrix *)&world_mat); - for (i = 0; i < count; i++) { - LPD3DPROCESSVERTICES ci = (LPD3DPROCESSVERTICES) instr; + for (i = 0; i < count; ++i) + { + D3DPROCESSVERTICES *ci = (D3DPROCESSVERTICES *)instr; TRACE(" Start : %d Dest : %d Count : %d\n", ci->wStart, ci->wDest, ci->dwCount); @@ -465,11 +471,12 @@ HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *buffer, } break; case D3DOP_BRANCHFORWARD: { - int i; + DWORD i; TRACE("BRANCHFORWARD (%d)\n", count); - for (i = 0; i < count; i++) { - LPD3DBRANCH ci = (LPD3DBRANCH) instr; + for (i = 0; i < count; ++i) + { + D3DBRANCH *ci = (D3DBRANCH *)instr; if ((buffer->data.dsStatus.dwStatus & ci->dwMask) == ci->dwValue) { @@ -502,16 +509,14 @@ HRESULT d3d_execute_buffer_execute(struct d3d_execute_buffer *buffer, } break; case D3DOP_SETSTATUS: { - int i; + DWORD i; TRACE("SETSTATUS (%d)\n", count); - for (i = 0; i < count; i++) { - LPD3DSTATUS ci = (LPD3DSTATUS) instr; - - buffer->data.dsStatus = *ci; - - instr += size; - } + for (i = 0; i < count; ++i) + { + buffer->data.dsStatus = *(D3DSTATUS *)instr; + instr += size; + } } break; default: @@ -711,6 +716,7 @@ static HRESULT WINAPI d3d_execute_buffer_SetExecuteData(IDirect3DExecuteBuffer * /* Prepares the transformed vertex buffer */ HeapFree(GetProcessHeap(), 0, buffer->vertex_data); buffer->vertex_data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, nbvert * sizeof(D3DTLVERTEX)); + buffer->nb_vertices = nbvert; if (TRACE_ON(ddraw)) _dump_executedata(data); diff --git a/dll/directx/wine/ddraw/light.c b/dll/directx/wine/ddraw/light.c index abd2731c721..19e49845163 100644 --- a/dll/directx/wine/ddraw/light.c +++ b/dll/directx/wine/ddraw/light.c @@ -166,67 +166,43 @@ static HRESULT WINAPI d3d_light_Initialize(IDirect3DLight *iface, IDirect3D *d3d return D3D_OK; } -/***************************************************************************** - * IDirect3DLight::SetLight - * - * Assigns a lighting value to this object - * - * Params: - * Light: Lighting parameter to set - * - * Returns: - * D3D_OK on success - * DDERR_INVALIDPARAMS if Light is NULL - * - *****************************************************************************/ -static void dump_light(const D3DLIGHT2 *light) -{ - TRACE(" - dwSize : %d\n", light->dwSize); -} - static const float zero_value[] = { 0.0, 0.0, 0.0, 0.0 }; -static HRESULT WINAPI d3d_light_SetLight(IDirect3DLight *iface, D3DLIGHT *lpLight) +static HRESULT WINAPI d3d_light_SetLight(IDirect3DLight *iface, D3DLIGHT *data) { struct d3d_light *light = impl_from_IDirect3DLight(iface); D3DLIGHT7 *light7 = &light->light7; - TRACE("iface %p, light %p.\n", iface, lpLight); + TRACE("iface %p, data %p.\n", iface, data); - if (TRACE_ON(ddraw)) - { - TRACE(" Light definition :\n"); - dump_light((LPD3DLIGHT2) lpLight); - } - - if ( (lpLight->dltType == 0) || (lpLight->dltType > D3DLIGHT_PARALLELPOINT) ) + if ((!data->dltType) || (data->dltType > D3DLIGHT_PARALLELPOINT)) return DDERR_INVALIDPARAMS; - if ( lpLight->dltType == D3DLIGHT_PARALLELPOINT ) - FIXME("D3DLIGHT_PARALLELPOINT not supported\n"); + if (data->dltType == D3DLIGHT_PARALLELPOINT) + FIXME("D3DLIGHT_PARALLELPOINT not implemented.\n"); - /* Translate D3DLIGH2 structure to D3DLIGHT7 */ - light7->dltType = lpLight->dltType; - light7->dcvDiffuse = lpLight->dcvColor; - if ((((LPD3DLIGHT2)lpLight)->dwFlags & D3DLIGHT_NO_SPECULAR) != 0) - light7->dcvSpecular = lpLight->dcvColor; + /* Translate D3DLIGHT2 structure to D3DLIGHT7. */ + light7->dltType = data->dltType; + light7->dcvDiffuse = data->dcvColor; + if (data->dwSize >= sizeof(D3DLIGHT2) && (((D3DLIGHT2 *)data)->dwFlags & D3DLIGHT_NO_SPECULAR)) + light7->dcvSpecular = data->dcvColor; else - light7->dcvSpecular = *(const D3DCOLORVALUE*)zero_value; - light7->dcvAmbient = lpLight->dcvColor; - light7->dvPosition = lpLight->dvPosition; - light7->dvDirection = lpLight->dvDirection; - light7->dvRange = lpLight->dvRange; - light7->dvFalloff = lpLight->dvFalloff; - light7->dvAttenuation0 = lpLight->dvAttenuation0; - light7->dvAttenuation1 = lpLight->dvAttenuation1; - light7->dvAttenuation2 = lpLight->dvAttenuation2; - light7->dvTheta = lpLight->dvTheta; - light7->dvPhi = lpLight->dvPhi; + light7->dcvSpecular = *(const D3DCOLORVALUE *)zero_value; + light7->dcvAmbient = data->dcvColor; + light7->dvPosition = data->dvPosition; + light7->dvDirection = data->dvDirection; + light7->dvRange = data->dvRange; + light7->dvFalloff = data->dvFalloff; + light7->dvAttenuation0 = data->dvAttenuation0; + light7->dvAttenuation1 = data->dvAttenuation1; + light7->dvAttenuation2 = data->dvAttenuation2; + light7->dvTheta = data->dvTheta; + light7->dvPhi = data->dvPhi; wined3d_mutex_lock(); - memcpy(&light->light, lpLight, lpLight->dwSize); + memcpy(&light->light, data, data->dwSize); if (light->light.dwFlags & D3DLIGHT_ACTIVE) light_update(light); wined3d_mutex_unlock(); @@ -252,12 +228,6 @@ static HRESULT WINAPI d3d_light_GetLight(IDirect3DLight *iface, D3DLIGHT *lpLigh TRACE("iface %p, light %p.\n", iface, lpLight); - if (TRACE_ON(ddraw)) - { - TRACE(" Returning light definition :\n"); - dump_light(&light->light); - } - wined3d_mutex_lock(); memcpy(lpLight, &light->light, lpLight->dwSize); wined3d_mutex_unlock(); diff --git a/dll/directx/wine/ddraw/main.c b/dll/directx/wine/ddraw/main.c index d6d531d252b..1d8030a7bb4 100644 --- a/dll/directx/wine/ddraw/main.c +++ b/dll/directx/wine/ddraw/main.c @@ -32,12 +32,12 @@ #include #include -//#include "winreg.h" +#include WINE_DEFAULT_DEBUG_CHANNEL(ddraw); /* The configured default surface */ -enum wined3d_surface_type DefaultSurfaceType = WINED3D_SURFACE_TYPE_OPENGL; +enum ddraw_surface_type DefaultSurfaceType = DDRAW_SURFACE_TYPE_OPENGL; static struct list global_ddraw_list = LIST_INIT(global_ddraw_list); @@ -46,6 +46,22 @@ static HINSTANCE instance; /* value of ForceRefreshRate */ DWORD force_refresh_rate = 0; +/* Structure for converting DirectDrawEnumerateA to DirectDrawEnumerateExA */ +struct callback_info +{ + LPDDENUMCALLBACKA callback; + void *context; +}; + +/* Enumeration callback for converting DirectDrawEnumerateA to DirectDrawEnumerateExA */ +static HRESULT CALLBACK enum_callback(GUID *guid, char *description, char *driver_name, + void *context, HMONITOR monitor) +{ + const struct callback_info *info = context; + + return info->callback(guid, description, driver_name, info->context); +} + /* Handle table functions */ BOOL ddraw_handle_table_init(struct ddraw_handle_table *t, UINT initial_size) { @@ -254,25 +270,21 @@ DDRAW_Create(const GUID *guid, * Arguments, return values: See DDRAW_Create * ***********************************************************************/ -HRESULT WINAPI DECLSPEC_HOTPATCH -DirectDrawCreate(GUID *GUID, - LPDIRECTDRAW *DD, - IUnknown *UnkOuter) +HRESULT WINAPI DECLSPEC_HOTPATCH DirectDrawCreate(GUID *driver_guid, IDirectDraw **ddraw, IUnknown *outer) { HRESULT hr; - TRACE("driver_guid %s, ddraw %p, outer_unknown %p.\n", - debugstr_guid(GUID), DD, UnkOuter); + TRACE("driver_guid %s, ddraw %p, outer %p.\n", + debugstr_guid(driver_guid), ddraw, outer); wined3d_mutex_lock(); - hr = DDRAW_Create(GUID, (void **) DD, UnkOuter, &IID_IDirectDraw); + hr = DDRAW_Create(driver_guid, (void **)ddraw, outer, &IID_IDirectDraw); wined3d_mutex_unlock(); if (SUCCEEDED(hr)) { - hr = IDirectDraw_Initialize(*DD, GUID); - if (FAILED(hr)) - IDirectDraw_Release(*DD); + if (FAILED(hr = IDirectDraw_Initialize(*ddraw, driver_guid))) + IDirectDraw_Release(*ddraw); } return hr; @@ -336,27 +348,15 @@ DirectDrawCreateEx(GUID *guid, * * ***********************************************************************/ -HRESULT WINAPI DirectDrawEnumerateA(LPDDENUMCALLBACKA Callback, void *Context) +HRESULT WINAPI DirectDrawEnumerateA(LPDDENUMCALLBACKA callback, void *context) { - TRACE("callback %p, context %p.\n", Callback, Context); + struct callback_info info; - TRACE(" Enumerating default DirectDraw HAL interface\n"); - /* We only have one driver */ - __TRY - { - static CHAR driver_desc[] = "DirectDraw HAL", - driver_name[] = "display"; + TRACE("callback %p, context %p.\n", callback, context); - Callback(NULL, driver_desc, driver_name, Context); - } - __EXCEPT_PAGE_FAULT - { - return DDERR_INVALIDPARAMS; - } - __ENDTRY - - TRACE(" End of enumeration\n"); - return DD_OK; + info.callback = callback; + info.context = context; + return DirectDrawEnumerateExA(enum_callback, &info, 0x0); } /*********************************************************************** @@ -368,35 +368,79 @@ HRESULT WINAPI DirectDrawEnumerateA(LPDDENUMCALLBACKA Callback, void *Context) * The Flag member is not supported right now. * ***********************************************************************/ -HRESULT WINAPI DirectDrawEnumerateExA(LPDDENUMCALLBACKEXA Callback, void *Context, DWORD Flags) +HRESULT WINAPI DirectDrawEnumerateExA(LPDDENUMCALLBACKEXA callback, void *context, DWORD flags) { - TRACE("callback %p, context %p, flags %#x.\n", Callback, Context, Flags); + struct wined3d *wined3d; + DWORD wined3d_flags; - if (Flags & ~(DDENUM_ATTACHEDSECONDARYDEVICES | + TRACE("callback %p, context %p, flags %#x.\n", callback, context, flags); + + if (flags & ~(DDENUM_ATTACHEDSECONDARYDEVICES | DDENUM_DETACHEDSECONDARYDEVICES | DDENUM_NONDISPLAYDEVICES)) return DDERR_INVALIDPARAMS; - if (Flags) - FIXME("flags 0x%08x not handled\n", Flags); + if (flags) + FIXME("flags 0x%08x not handled\n", flags); - TRACE("Enumerating default DirectDraw HAL interface\n"); + wined3d_flags = WINED3D_LEGACY_DEPTH_BIAS; + if (DefaultSurfaceType != DDRAW_SURFACE_TYPE_OPENGL) + wined3d_flags |= WINED3D_NO3D; + + TRACE("Enumerating ddraw interfaces\n"); + if (!(wined3d = wined3d_create(7, wined3d_flags))) + { + if ((wined3d_flags & WINED3D_NO3D) || !(wined3d = wined3d_create(7, wined3d_flags | WINED3D_NO3D))) + { + WARN("Failed to create a wined3d object.\n"); + return E_FAIL; + } + + WARN("Created a wined3d object without 3D support.\n"); + DefaultSurfaceType = DDRAW_SURFACE_TYPE_GDI; + } - /* We only have one driver by now */ __TRY { + /* QuickTime expects the description "DirectDraw HAL" */ static CHAR driver_desc[] = "DirectDraw HAL", driver_name[] = "display"; + struct wined3d_adapter_identifier adapter_id; + HRESULT hr = S_OK; + UINT adapter = 0; + BOOL cont_enum; - /* QuickTime expects the description "DirectDraw HAL" */ - Callback(NULL, driver_desc, driver_name, Context, 0); + /* The Battle.net System Checker expects both a NULL device and a GUID-based device */ + TRACE("Default interface: DirectDraw HAL\n"); + cont_enum = callback(NULL, driver_desc, driver_name, context, 0); + for (adapter = 0; SUCCEEDED(hr) && cont_enum; adapter++) + { + char DriverName[512] = ""; + + /* The Battle.net System Checker expects the GetAdapterIdentifier DeviceName to match the + * Driver Name, so obtain the DeviceName and GUID from D3D. */ + memset(&adapter_id, 0x0, sizeof(adapter_id)); + adapter_id.device_name = DriverName; + adapter_id.device_name_size = sizeof(DriverName); + wined3d_mutex_lock(); + hr = wined3d_get_adapter_identifier(wined3d, adapter, 0x0, &adapter_id); + wined3d_mutex_unlock(); + if (SUCCEEDED(hr)) + { + TRACE("Interface %d: %s\n", adapter, wine_dbgstr_guid(&adapter_id.device_identifier)); + cont_enum = callback(&adapter_id.device_identifier, driver_desc, + adapter_id.device_name, context, 0); + } + } } __EXCEPT_PAGE_FAULT { + wined3d_decref(wined3d); return DDERR_INVALIDPARAMS; } __ENDTRY; + wined3d_decref(wined3d); TRACE("End of enumeration\n"); return DD_OK; } @@ -866,12 +910,12 @@ DllMain(HINSTANCE hInstDLL, if (!strcmp(buffer,"gdi")) { TRACE("Defaulting to GDI surfaces\n"); - DefaultSurfaceType = WINED3D_SURFACE_TYPE_GDI; + DefaultSurfaceType = DDRAW_SURFACE_TYPE_GDI; } else if (!strcmp(buffer,"opengl")) { TRACE("Defaulting to opengl surfaces\n"); - DefaultSurfaceType = WINED3D_SURFACE_TYPE_OPENGL; + DefaultSurfaceType = DDRAW_SURFACE_TYPE_OPENGL; } else { diff --git a/dll/directx/wine/ddraw/material.c b/dll/directx/wine/ddraw/material.c index 884159b53ab..e3459103c8d 100644 --- a/dll/directx/wine/ddraw/material.c +++ b/dll/directx/wine/ddraw/material.c @@ -75,7 +75,7 @@ static HRESULT WINAPI d3d_material3_QueryInterface(IDirect3DMaterial3 *iface, RE if (IsEqualGUID(&IID_IUnknown, riid)) { - IUnknown_AddRef(iface); + IDirect3DMaterial3_AddRef(iface); *obp = iface; TRACE(" Creating IUnknown interface at %p.\n", *obp); return S_OK; diff --git a/dll/directx/wine/ddraw/surface.c b/dll/directx/wine/ddraw/surface.c index b87da4d74d2..2091bd2c2e6 100644 --- a/dll/directx/wine/ddraw/surface.c +++ b/dll/directx/wine/ddraw/surface.c @@ -311,18 +311,20 @@ static HRESULT WINAPI d3d_texture1_QueryInterface(IDirect3DTexture *iface, REFII return ddraw_surface7_QueryInterface(&surface->IDirectDrawSurface7_iface, riid, object); } -static void ddraw_surface_add_iface(struct ddraw_surface *This) +static void ddraw_surface_add_iface(struct ddraw_surface *surface) { - ULONG iface_count = InterlockedIncrement(&This->iface_count); - TRACE("%p increasing iface count to %u.\n", This, iface_count); + ULONG iface_count = InterlockedIncrement(&surface->iface_count); + TRACE("%p increasing iface count to %u.\n", surface, iface_count); if (iface_count == 1) { + if (surface->ifaceToRelease) + IUnknown_AddRef(surface->ifaceToRelease); wined3d_mutex_lock(); - if (This->wined3d_surface) - wined3d_surface_incref(This->wined3d_surface); - if (This->wined3d_texture) - wined3d_texture_incref(This->wined3d_texture); + if (surface->wined3d_surface) + wined3d_surface_incref(surface->wined3d_surface); + if (surface->wined3d_texture) + wined3d_texture_incref(surface->wined3d_texture); wined3d_mutex_unlock(); } } @@ -447,7 +449,6 @@ static ULONG WINAPI d3d_texture1_AddRef(IDirect3DTexture *iface) static void ddraw_surface_cleanup(struct ddraw_surface *surface) { struct ddraw_surface *surf; - IUnknown *ifaceToRelease; UINT i; TRACE("surface %p.\n", surface); @@ -472,7 +473,6 @@ static void ddraw_surface_cleanup(struct ddraw_surface *surface) if (surface->device1) IUnknown_Release(&surface->device1->IUnknown_inner); - ifaceToRelease = surface->ifaceToRelease; if (surface->iface_count > 1) { @@ -485,10 +485,6 @@ static void ddraw_surface_cleanup(struct ddraw_surface *surface) if (surface->wined3d_surface) wined3d_surface_decref(surface->wined3d_surface); - - /* Reduce the ddraw refcount */ - if (ifaceToRelease) - IUnknown_Release(ifaceToRelease); } ULONG ddraw_surface_release_iface(struct ddraw_surface *This) @@ -498,6 +494,8 @@ ULONG ddraw_surface_release_iface(struct ddraw_surface *This) if (iface_count == 0) { + IUnknown *release_iface = This->ifaceToRelease; + /* Complex attached surfaces are destroyed implicitly when the root is released */ wined3d_mutex_lock(); if(!This->is_complex_root) @@ -511,6 +509,9 @@ ULONG ddraw_surface_release_iface(struct ddraw_surface *This) else ddraw_surface_cleanup(This); wined3d_mutex_unlock(); + + if (release_iface) + IUnknown_Release(release_iface); } return iface_count; @@ -4711,11 +4712,8 @@ static HRESULT WINAPI ddraw_surface7_SetPalette(IDirectDrawSurface7 *iface, IDir /* Update the wined3d frontbuffer if this is the frontbuffer. */ if ((This->surface_desc.ddsCaps.dwCaps & DDSCAPS_FRONTBUFFER) && This->ddraw->wined3d_frontbuffer) - { - hr = wined3d_surface_set_palette(This->ddraw->wined3d_frontbuffer, palette_impl ? palette_impl->wineD3DPalette : NULL); - if (FAILED(hr)) - ERR("Failed to set frontbuffer palette, hr %#x.\n", hr); - } + wined3d_surface_set_palette(This->ddraw->wined3d_frontbuffer, + palette_impl ? palette_impl->wineD3DPalette : NULL); /* If this is a front buffer, also update the back buffers * TODO: How do things work for palettized cube textures? @@ -5440,13 +5438,13 @@ struct ddraw_surface *unsafe_impl_from_IDirectDrawSurface7(IDirectDrawSurface7 * if (!iface) return NULL; if (iface->lpVtbl != &ddraw_surface7_vtbl) { - HRESULT hr = IUnknown_QueryInterface(iface, &IID_IDirectDrawSurface7, (void **)&iface); + HRESULT hr = IDirectDrawSurface7_QueryInterface(iface, &IID_IDirectDrawSurface7, (void **)&iface); if (FAILED(hr)) { WARN("Object %p doesn't expose interface IDirectDrawSurface7.\n", iface); return NULL; } - IUnknown_Release(iface); + IDirectDrawSurface7_Release(iface); } return CONTAINING_RECORD(iface, struct ddraw_surface, IDirectDrawSurface7_iface); } @@ -5456,13 +5454,13 @@ struct ddraw_surface *unsafe_impl_from_IDirectDrawSurface4(IDirectDrawSurface4 * if (!iface) return NULL; if (iface->lpVtbl != &ddraw_surface4_vtbl) { - HRESULT hr = IUnknown_QueryInterface(iface, &IID_IDirectDrawSurface4, (void **)&iface); + HRESULT hr = IDirectDrawSurface4_QueryInterface(iface, &IID_IDirectDrawSurface4, (void **)&iface); if (FAILED(hr)) { WARN("Object %p doesn't expose interface IDirectDrawSurface4.\n", iface); return NULL; } - IUnknown_Release(iface); + IDirectDrawSurface4_Release(iface); } return CONTAINING_RECORD(iface, struct ddraw_surface, IDirectDrawSurface4_iface); } @@ -5472,13 +5470,13 @@ static struct ddraw_surface *unsafe_impl_from_IDirectDrawSurface3(IDirectDrawSur if (!iface) return NULL; if (iface->lpVtbl != &ddraw_surface3_vtbl) { - HRESULT hr = IUnknown_QueryInterface(iface, &IID_IDirectDrawSurface3, (void **)&iface); + HRESULT hr = IDirectDrawSurface3_QueryInterface(iface, &IID_IDirectDrawSurface3, (void **)&iface); if (FAILED(hr)) { WARN("Object %p doesn't expose interface IDirectDrawSurface3.\n", iface); return NULL; } - IUnknown_Release(iface); + IDirectDrawSurface3_Release(iface); } return CONTAINING_RECORD(iface, struct ddraw_surface, IDirectDrawSurface3_iface); } @@ -5488,13 +5486,13 @@ static struct ddraw_surface *unsafe_impl_from_IDirectDrawSurface2(IDirectDrawSur if (!iface) return NULL; if (iface->lpVtbl != &ddraw_surface2_vtbl) { - HRESULT hr = IUnknown_QueryInterface(iface, &IID_IDirectDrawSurface2, (void **)&iface); + HRESULT hr = IDirectDrawSurface2_QueryInterface(iface, &IID_IDirectDrawSurface2, (void **)&iface); if (FAILED(hr)) { WARN("Object %p doesn't expose interface IDirectDrawSurface2.\n", iface); return NULL; } - IUnknown_Release(iface); + IDirectDrawSurface2_Release(iface); } return CONTAINING_RECORD(iface, struct ddraw_surface, IDirectDrawSurface2_iface); } @@ -5504,13 +5502,13 @@ struct ddraw_surface *unsafe_impl_from_IDirectDrawSurface(IDirectDrawSurface *if if (!iface) return NULL; if (iface->lpVtbl != &ddraw_surface1_vtbl) { - HRESULT hr = IUnknown_QueryInterface(iface, &IID_IDirectDrawSurface, (void **)&iface); + HRESULT hr = IDirectDrawSurface_QueryInterface(iface, &IID_IDirectDrawSurface, (void **)&iface); if (FAILED(hr)) { WARN("Object %p doesn't expose interface IDirectDrawSurface.\n", iface); return NULL; } - IUnknown_Release(iface); + IDirectDrawSurface_Release(iface); } return CONTAINING_RECORD(iface, struct ddraw_surface, IDirectDrawSurface_iface); } @@ -5594,6 +5592,7 @@ HRESULT ddraw_surface_create_texture(struct ddraw_surface *surface) struct wined3d_resource *resource; enum wined3d_format_id format; UINT layers, levels, i, j; + DDSURFACEDESC2 *mip_desc; enum wined3d_pool pool; HRESULT hr; @@ -5640,6 +5639,41 @@ HRESULT ddraw_surface_create_texture(struct ddraw_surface *surface) if (mip == surface) continue; + mip_desc = &mip->surface_desc; + + if (j) + mip_desc->ddsCaps.dwCaps2 |= DDSCAPS2_MIPMAPSUBLEVEL; + else + mip_desc->ddsCaps.dwCaps2 &= ~DDSCAPS2_MIPMAPSUBLEVEL; + + if (mip_desc->ddsCaps.dwCaps2 & DDSCAPS2_CUBEMAP) + { + mip_desc->ddsCaps.dwCaps2 &= ~DDSCAPS2_CUBEMAP_ALLFACES; + + switch (i) + { + case WINED3D_CUBEMAP_FACE_POSITIVE_X: + mip_desc->ddsCaps.dwCaps2 |= DDSCAPS2_CUBEMAP_POSITIVEX; + break; + case WINED3D_CUBEMAP_FACE_NEGATIVE_X: + mip_desc->ddsCaps.dwCaps2 |= DDSCAPS2_CUBEMAP_NEGATIVEX; + break; + case WINED3D_CUBEMAP_FACE_POSITIVE_Y: + mip_desc->ddsCaps.dwCaps2 |= DDSCAPS2_CUBEMAP_POSITIVEY; + break; + case WINED3D_CUBEMAP_FACE_NEGATIVE_Y: + mip_desc->ddsCaps.dwCaps2 |= DDSCAPS2_CUBEMAP_NEGATIVEY; + break; + case WINED3D_CUBEMAP_FACE_POSITIVE_Z: + mip_desc->ddsCaps.dwCaps2 |= DDSCAPS2_CUBEMAP_POSITIVEZ; + break; + case WINED3D_CUBEMAP_FACE_NEGATIVE_Z: + mip_desc->ddsCaps.dwCaps2 |= DDSCAPS2_CUBEMAP_NEGATIVEZ; + break; + } + + } + *attach = mip; attach = &mip->complex_array[0]; } @@ -5648,8 +5682,7 @@ HRESULT ddraw_surface_create_texture(struct ddraw_surface *surface) return DD_OK; } -HRESULT ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw, - DDSURFACEDESC2 *desc, UINT mip_level, UINT version) +HRESULT ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw, DDSURFACEDESC2 *desc, UINT version) { enum wined3d_pool pool = WINED3D_POOL_DEFAULT; DWORD flags = WINED3D_SURFACE_MAPPABLE; @@ -5751,10 +5784,9 @@ HRESULT ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw, surface->first_attached = surface; - hr = wined3d_surface_create(ddraw->wined3d_device, desc->dwWidth, desc->dwHeight, format, mip_level, - usage, pool, WINED3D_MULTISAMPLE_NONE, 0, DefaultSurfaceType, flags, - surface, &ddraw_surface_wined3d_parent_ops, &surface->wined3d_surface); - if (FAILED(hr)) + if (FAILED(hr = wined3d_surface_create(ddraw->wined3d_device, desc->dwWidth, desc->dwHeight, format, + usage, pool, WINED3D_MULTISAMPLE_NONE, 0, flags, surface, + &ddraw_surface_wined3d_parent_ops, &surface->wined3d_surface))) { WARN("Failed to create wined3d surface, hr %#x.\n", hr); return hr; diff --git a/dll/directx/wine/ddraw/utils.c b/dll/directx/wine/ddraw/utils.c index c69a1cf70b0..74e35ddfe34 100644 --- a/dll/directx/wine/ddraw/utils.c +++ b/dll/directx/wine/ddraw/utils.c @@ -446,6 +446,7 @@ enum wined3d_format_id PixelFormat_DD2WineD3D(const DDPIXELFORMAT *DDPixelFormat } WARN("32 bit RGB pixel format does not match.\n"); + return WINED3DFMT_UNKNOWN; default: WARN("Invalid dwRGBBitCount in Pixelformat structure.\n"); @@ -457,10 +458,6 @@ enum wined3d_format_id PixelFormat_DD2WineD3D(const DDPIXELFORMAT *DDPixelFormat /* Alpha only Pixelformat */ switch(DDPixelFormat->u1.dwAlphaBitDepth) { - case 1: - case 2: - case 4: - FIXME("Unsupported Alpha-Only bit depth 0x%x.\n", DDPixelFormat->u1.dwAlphaBitDepth); case 8: return WINED3DFMT_A8_UNORM; diff --git a/dll/directx/wine/ddraw/vertexbuffer.c b/dll/directx/wine/ddraw/vertexbuffer.c index 41da3d0c8be..3dcadf13c92 100644 --- a/dll/directx/wine/ddraw/vertexbuffer.c +++ b/dll/directx/wine/ddraw/vertexbuffer.c @@ -66,21 +66,21 @@ static HRESULT WINAPI d3d_vertex_buffer7_QueryInterface(IDirect3DVertexBuffer7 * if ( IsEqualGUID( &IID_IUnknown, riid ) ) { - IUnknown_AddRef(iface); + IDirect3DVertexBuffer7_AddRef(iface); *obj = iface; TRACE(" Creating IUnknown interface at %p.\n", *obj); return S_OK; } if ( IsEqualGUID( &IID_IDirect3DVertexBuffer, riid ) ) { - IUnknown_AddRef(iface); + IDirect3DVertexBuffer7_AddRef(iface); *obj = &buffer->IDirect3DVertexBuffer_iface; TRACE(" Creating IDirect3DVertexBuffer interface %p\n", *obj); return S_OK; } if ( IsEqualGUID( &IID_IDirect3DVertexBuffer7, riid ) ) { - IUnknown_AddRef(iface); + IDirect3DVertexBuffer7_AddRef(iface); *obj = iface; TRACE(" Creating IDirect3DVertexBuffer7 interface %p\n", *obj); return S_OK; @@ -185,6 +185,27 @@ static ULONG WINAPI d3d_vertex_buffer1_Release(IDirect3DVertexBuffer *iface) * IDirect3DVertexBuffer Methods *****************************************************************************/ +static HRESULT d3d_vertex_buffer_create_wined3d_buffer(struct d3d_vertex_buffer *buffer, BOOL dynamic, + struct wined3d_buffer **wined3d_buffer) +{ + DWORD usage = WINED3DUSAGE_STATICDECL; + enum wined3d_pool pool; + + if (buffer->Caps & D3DVBCAPS_SYSTEMMEMORY) + pool = WINED3D_POOL_SYSTEM_MEM; + else + pool = WINED3D_POOL_DEFAULT; + + if (buffer->Caps & D3DVBCAPS_WRITEONLY) + usage |= WINED3DUSAGE_WRITEONLY; + if (dynamic) + usage |= WINED3DUSAGE_DYNAMIC; + + return wined3d_buffer_create_vb(buffer->ddraw->wined3d_device, + buffer->size, usage, pool, buffer, &ddraw_null_wined3d_parent_ops, + wined3d_buffer); +} + /***************************************************************************** * IDirect3DVertexBuffer7::Lock * @@ -224,9 +245,29 @@ static HRESULT WINAPI d3d_vertex_buffer7_Lock(IDirect3DVertexBuffer7 *iface, wined3d_flags |= WINED3D_MAP_READONLY; if (flags & DDLOCK_NOOVERWRITE) wined3d_flags |= WINED3D_MAP_NOOVERWRITE; - if (flags & DDLOCK_DISCARDCONTENTS) + if (flags & DDLOCK_DISCARDCONTENTS && buffer->read_since_last_map) + { wined3d_flags |= WINED3D_MAP_DISCARD; + if (!buffer->dynamic) + { + struct wined3d_buffer *new_buffer; + wined3d_mutex_lock(); + hr = d3d_vertex_buffer_create_wined3d_buffer(buffer, TRUE, &new_buffer); + if (SUCCEEDED(hr)) + { + buffer->dynamic = TRUE; + wined3d_buffer_decref(buffer->wineD3DVertexBuffer); + buffer->wineD3DVertexBuffer = new_buffer; + } + else + { + WARN("Failed to create a dynamic buffer\n"); + } + wined3d_mutex_unlock(); + } + } + wined3d_mutex_lock(); if (data_size) { @@ -237,6 +278,10 @@ static HRESULT WINAPI d3d_vertex_buffer7_Lock(IDirect3DVertexBuffer7 *iface, } hr = wined3d_buffer_map(buffer->wineD3DVertexBuffer, 0, 0, (BYTE **)data, wined3d_flags); + + if (SUCCEEDED(hr)) + buffer->read_since_last_map = FALSE; + wined3d_mutex_unlock(); return hr; @@ -339,7 +384,7 @@ static HRESULT WINAPI d3d_vertex_buffer7_ProcessVertices(IDirect3DVertexBuffer7 * the vertex ops */ doClip = !!(vertex_op & D3DVOP_CLIP); - wined3d_device_get_render_state(device_impl->wined3d_device, WINED3D_RS_CLIPPING, (DWORD *)&oldClip); + oldClip = wined3d_device_get_render_state(device_impl->wined3d_device, WINED3D_RS_CLIPPING); if (doClip != oldClip) wined3d_device_set_render_state(device_impl->wined3d_device, WINED3D_RS_CLIPPING, doClip); @@ -534,7 +579,6 @@ HRESULT d3d_vertex_buffer_create(struct d3d_vertex_buffer **vertex_buf, struct ddraw *ddraw, D3DVERTEXBUFFERDESC *desc) { struct d3d_vertex_buffer *buffer; - DWORD usage; HRESULT hr = D3D_OK; TRACE("Vertex buffer description:\n"); @@ -554,16 +598,11 @@ HRESULT d3d_vertex_buffer_create(struct d3d_vertex_buffer **vertex_buf, buffer->ddraw = ddraw; buffer->Caps = desc->dwCaps; buffer->fvf = desc->dwFVF; - - usage = desc->dwCaps & D3DVBCAPS_WRITEONLY ? WINED3DUSAGE_WRITEONLY : 0; - usage |= WINED3DUSAGE_STATICDECL; + buffer->size = get_flexible_vertex_size(desc->dwFVF) * desc->dwNumVertices; wined3d_mutex_lock(); - hr = wined3d_buffer_create_vb(ddraw->wined3d_device, - get_flexible_vertex_size(desc->dwFVF) * desc->dwNumVertices, - usage, desc->dwCaps & D3DVBCAPS_SYSTEMMEMORY ? WINED3D_POOL_SYSTEM_MEM : WINED3D_POOL_DEFAULT, - buffer, &ddraw_null_wined3d_parent_ops, &buffer->wineD3DVertexBuffer); + hr = d3d_vertex_buffer_create_wined3d_buffer(buffer, FALSE, &buffer->wineD3DVertexBuffer); if (FAILED(hr)) { WARN("Failed to create wined3d vertex buffer, hr %#x.\n", hr); diff --git a/dll/directx/wine/ddraw/viewport.c b/dll/directx/wine/ddraw/viewport.c index 05b5556dd7f..22365c8da81 100644 --- a/dll/directx/wine/ddraw/viewport.c +++ b/dll/directx/wine/ddraw/viewport.c @@ -41,13 +41,11 @@ static void update_clip_space(struct d3d_device *device, offset->x, offset->y, offset->z, 1.0f, }; D3DMATRIX projection; - HRESULT hr; multiply_matrix(&projection, &clip_space, &device->legacy_projection); - hr = wined3d_device_set_transform(device->wined3d_device, + wined3d_device_set_transform(device->wined3d_device, WINED3D_TS_PROJECTION, (struct wined3d_matrix *)&projection); - if (SUCCEEDED(hr)) - device->legacy_clipspace = clip_space; + device->legacy_clipspace = clip_space; } /***************************************************************************** @@ -344,10 +342,10 @@ static HRESULT WINAPI d3d_viewport_SetViewport(IDirect3DViewport3 *iface, D3DVIE This->viewports.vp1.dvMinZ = 0.0; This->viewports.vp1.dvMaxZ = 1.0; - if (This->active_device) { + if (This->active_device) + { IDirect3DDevice3 *d3d_device3 = &This->active_device->IDirect3DDevice3_iface; - IDirect3DDevice3_GetCurrentViewport(d3d_device3, ¤t_viewport); - if (current_viewport) + if (SUCCEEDED(IDirect3DDevice3_GetCurrentViewport(d3d_device3, ¤t_viewport))) { if (current_viewport == iface) viewport_activate(This, FALSE); IDirect3DViewport3_Release(current_viewport); @@ -672,6 +670,12 @@ static HRESULT WINAPI d3d_viewport_Clear(IDirect3DViewport3 *iface, TRACE("iface %p, rect_count %u, rects %p, flags %#x.\n", iface, rect_count, rects, flags); + if (!rects || !rect_count) + { + WARN("rect_count = %u, rects = %p, ignoring clear\n", rect_count, rects); + return D3D_OK; + } + if (This->active_device == NULL) { ERR(" Trying to clear a viewport not attached to a device !\n"); return D3DERR_VIEWPORTHASNODEVICE; @@ -701,8 +705,7 @@ static HRESULT WINAPI d3d_viewport_Clear(IDirect3DViewport3 *iface, hr = IDirect3DDevice7_Clear(&This->active_device->IDirect3DDevice7_iface, rect_count, rects, flags & (D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET), color, 1.0, 0x00000000); - IDirect3DDevice3_GetCurrentViewport(d3d_device3, ¤t_viewport); - if (current_viewport) + if (SUCCEEDED(IDirect3DDevice3_GetCurrentViewport(d3d_device3, ¤t_viewport))) { struct d3d_viewport *vp = impl_from_IDirect3DViewport3(current_viewport); viewport_activate(vp, TRUE); @@ -975,10 +978,10 @@ static HRESULT WINAPI d3d_viewport_SetViewport2(IDirect3DViewport3 *iface, D3DVI memset(&(This->viewports.vp2), 0, sizeof(This->viewports.vp2)); memcpy(&(This->viewports.vp2), lpData, lpData->dwSize); - if (This->active_device) { + if (This->active_device) + { IDirect3DDevice3 *d3d_device3 = &This->active_device->IDirect3DDevice3_iface; - IDirect3DDevice3_GetCurrentViewport(d3d_device3, ¤t_viewport); - if (current_viewport) + if (SUCCEEDED(IDirect3DDevice3_GetCurrentViewport(d3d_device3, ¤t_viewport))) { if (current_viewport == iface) viewport_activate(This, FALSE); IDirect3DViewport3_Release(current_viewport); @@ -1062,6 +1065,12 @@ static HRESULT WINAPI d3d_viewport_Clear2(IDirect3DViewport3 *iface, DWORD rect_ TRACE("iface %p, rect_count %u, rects %p, flags %#x, color 0x%08x, depth %.8e, stencil %u.\n", iface, rect_count, rects, flags, color, depth, stencil); + if (!rects || !rect_count) + { + WARN("rect_count = %u, rects = %p, ignoring clear\n", rect_count, rects); + return D3D_OK; + } + wined3d_mutex_lock(); if (!viewport->active_device) @@ -1077,8 +1086,7 @@ static HRESULT WINAPI d3d_viewport_Clear2(IDirect3DViewport3 *iface, DWORD rect_ hr = IDirect3DDevice7_Clear(&viewport->active_device->IDirect3DDevice7_iface, rect_count, rects, flags, color, depth, stencil); - IDirect3DDevice3_GetCurrentViewport(d3d_device3, ¤t_viewport); - if (current_viewport) + if (SUCCEEDED(IDirect3DDevice3_GetCurrentViewport(d3d_device3, ¤t_viewport))) { struct d3d_viewport *vp = impl_from_IDirect3DViewport3(current_viewport); viewport_activate(vp, TRUE); diff --git a/dll/directx/wine/wined3d/CMakeLists.txt b/dll/directx/wine/wined3d/CMakeLists.txt index d36e7b655eb..b5ac102275e 100644 --- a/dll/directx/wine/wined3d/CMakeLists.txt +++ b/dll/directx/wine/wined3d/CMakeLists.txt @@ -22,6 +22,7 @@ list(APPEND SOURCE palette.c query.c resource.c + sampler.c shader.c shader_sm1.c shader_sm4.c diff --git a/dll/directx/wine/wined3d/arb_program_shader.c b/dll/directx/wine/wined3d/arb_program_shader.c index 5341d6a626a..885d0645d81 100644 --- a/dll/directx/wine/wined3d/arb_program_shader.c +++ b/dll/directx/wine/wined3d/arb_program_shader.c @@ -39,6 +39,16 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader); WINE_DECLARE_DEBUG_CHANNEL(d3d_constants); WINE_DECLARE_DEBUG_CHANNEL(d3d); +static BOOL shader_is_pshader_version(enum wined3d_shader_type type) +{ + return type == WINED3D_SHADER_TYPE_PIXEL; +} + +static BOOL shader_is_vshader_version(enum wined3d_shader_type type) +{ + return type == WINED3D_SHADER_TYPE_VERTEX; +} + /* Extract a line. Note that this modifies the source string. */ static char *get_line(char **ptr) { @@ -316,9 +326,13 @@ struct shader_arb_priv unsigned int highest_dirty_ps_const, highest_dirty_vs_const; char *vshader_const_dirty, *pshader_const_dirty; const struct wined3d_context *last_context; + + const struct fragment_pipeline *fragment_pipe; + BOOL ffp_proj_control; }; -/* GL locking for state handlers is done by the caller. */ +/* Context activation for state handlers is done by the caller. */ + static BOOL need_rel_addr_const(const struct arb_vshader_private *shader_data, const struct wined3d_shader_reg_maps *reg_maps, const struct wined3d_gl_info *gl_info) { @@ -365,7 +379,7 @@ static unsigned int reserved_vs_const(const struct arb_vshader_private *shader_d * @target_type should be either GL_VERTEX_PROGRAM_ARB (for vertex shaders) * or GL_FRAGMENT_PROGRAM_ARB (for pixel shaders) */ -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static unsigned int shader_arb_load_constantsF(const struct wined3d_shader *shader, const struct wined3d_gl_info *gl_info, GLuint target_type, unsigned int max_constants, const float *constants, char *dirty_consts) @@ -531,7 +545,7 @@ static void shader_arb_load_np2fixup_constants(void *shader_priv, } } -/* GL locking is done by the caller. */ +/* Context activation is done by the caller. */ static void shader_arb_ps_local_constants(const struct arb_ps_compiled_shader *gl_shader, const struct wined3d_context *context, const struct wined3d_state *state, UINT rt_height) { @@ -595,7 +609,7 @@ static void shader_arb_ps_local_constants(const struct arb_ps_compiled_shader *g checkGLcall("Load ps int consts"); } -/* GL locking is done by the caller. */ +/* Context activation is done by the caller. */ static void shader_arb_vs_local_constants(const struct arb_vs_compiled_shader *gl_shader, const struct wined3d_context *context, const struct wined3d_state *state) { @@ -625,20 +639,52 @@ static void shader_arb_vs_local_constants(const struct arb_vs_compiled_shader *g checkGLcall("Load vs int consts"); } +static void shader_arb_select(const struct wined3d_context *context, enum wined3d_shader_mode vertex_mode, + enum wined3d_shader_mode fragment_mode); + /** * Loads the app-supplied constants into the currently set ARB_[vertex/fragment]_programs. * * We only support float constants in ARB at the moment, so don't * worry about the Integers or Booleans */ -/* GL locking is done by the caller (state handler) */ -static void shader_arb_load_constants(const struct wined3d_context *context, char usePixelShader, char useVertexShader) +/* Context activation is done by the caller (state handler). */ +static void shader_arb_load_constants_internal(const struct wined3d_context *context, + BOOL usePixelShader, BOOL useVertexShader, BOOL from_shader_select) { struct wined3d_device *device = context->swapchain->device; - const struct wined3d_state *state = &device->stateBlock->state; + const struct wined3d_stateblock *stateblock = device->stateBlock; + const struct wined3d_state *state = &stateblock->state; const struct wined3d_gl_info *gl_info = context->gl_info; struct shader_arb_priv *priv = device->shader_priv; + if (!from_shader_select) + { + const struct wined3d_shader *vshader = state->vertex_shader, *pshader = state->pixel_shader; + if (vshader + && (stateblock->changed.vertexShaderConstantsB & vshader->reg_maps.boolean_constants + || (!gl_info->supported[NV_VERTEX_PROGRAM2_OPTION] + && (stateblock->changed.vertexShaderConstantsI + & vshader->reg_maps.integer_constants & ~vshader->reg_maps.local_int_consts)))) + { + TRACE("bool/integer vertex shader constants potentially modified, forcing shader reselection.\n"); + shader_arb_select(context, + useVertexShader ? WINED3D_SHADER_MODE_SHADER : WINED3D_SHADER_MODE_FFP, + usePixelShader ? WINED3D_SHADER_MODE_SHADER : WINED3D_SHADER_MODE_FFP); + } + else if (pshader + && (stateblock->changed.pixelShaderConstantsB & pshader->reg_maps.boolean_constants + || (!gl_info->supported[NV_FRAGMENT_PROGRAM_OPTION] + && (stateblock->changed.pixelShaderConstantsI + & pshader->reg_maps.integer_constants & ~pshader->reg_maps.local_int_consts)))) + { + TRACE("bool/integer pixel shader constants potentially modified, forcing shader reselection.\n"); + shader_arb_select(context, + useVertexShader ? WINED3D_SHADER_MODE_SHADER : WINED3D_SHADER_MODE_FFP, + usePixelShader ? WINED3D_SHADER_MODE_SHADER : WINED3D_SHADER_MODE_FFP); + } + } + if (context != priv->last_context) { memset(priv->vshader_const_dirty, 1, @@ -676,6 +722,11 @@ static void shader_arb_load_constants(const struct wined3d_context *context, cha } } +static void shader_arb_load_constants(const struct wined3d_context *context, BOOL ps, BOOL vs) +{ + shader_arb_load_constants_internal(context, ps, vs, FALSE); +} + static void shader_arb_update_float_vertex_constants(struct wined3d_device *device, UINT start, UINT count) { struct wined3d_context *context = context_get_current(); @@ -770,6 +821,7 @@ static DWORD shader_generate_arb_declarations(const struct wined3d_shader *shade max_constantsF -= reserved_vs_const(shader_data, reg_maps, gl_info); max_constantsF -= count_bits(reg_maps->integer_constants); + max_constantsF -= gl_info->reserved_arb_constants; for (i = 0; i < shader->limits.constant_float; ++i) { @@ -974,7 +1026,7 @@ static void shader_arb_get_register_name(const struct wined3d_shader_instruction switch (reg->type) { case WINED3DSPR_TEMP: - sprintf(register_name, "R%u", reg->idx); + sprintf(register_name, "R%u", reg->idx[0].offset); break; case WINED3DSPR_INPUT: @@ -982,19 +1034,21 @@ static void shader_arb_get_register_name(const struct wined3d_shader_instruction { if (reg_maps->shader_version.major < 3) { - if (!reg->idx) strcpy(register_name, "fragment.color.primary"); - else strcpy(register_name, "fragment.color.secondary"); + if (!reg->idx[0].offset) + strcpy(register_name, "fragment.color.primary"); + else + strcpy(register_name, "fragment.color.secondary"); } else { - if(reg->rel_addr) + if (reg->idx[0].rel_addr) { char rel_reg[50]; - shader_arb_get_src_param(ins, reg->rel_addr, 0, rel_reg); + shader_arb_get_src_param(ins, reg->idx[0].rel_addr, 0, rel_reg); if (!strcmp(rel_reg, "**aL_emul**")) { - DWORD idx = ctx->aL + reg->idx; + DWORD idx = ctx->aL + reg->idx[0].offset; if(idx < MAX_REG_INPUT) { strcpy(register_name, ctx->ps_input[idx]); @@ -1020,7 +1074,7 @@ static void shader_arb_get_register_name(const struct wined3d_shader_instruction FIXME("Relative input register addressing with more than 8 registers\n"); /* This is better than nothing for now */ - sprintf(register_name, "fragment.texcoord[%s + %u]", rel_reg, reg->idx); + sprintf(register_name, "fragment.texcoord[%s + %u]", rel_reg, reg->idx[0].offset); } else if(ctx->cur_ps_args->super.vp_mode != vertexshader) { @@ -1032,39 +1086,40 @@ static void shader_arb_get_register_name(const struct wined3d_shader_instruction * For now use the texcoords and hope for the best */ FIXME("Non-vertex shader varying input with indirect addressing\n"); - sprintf(register_name, "fragment.texcoord[%s + %u]", rel_reg, reg->idx); + sprintf(register_name, "fragment.texcoord[%s + %u]", rel_reg, reg->idx[0].offset); } else { /* D3D supports indirect addressing only with aL in loop registers. The loop instruction * pulls GL_NV_fragment_program2 in */ - sprintf(register_name, "fragment.texcoord[%s + %u]", rel_reg, reg->idx); + sprintf(register_name, "fragment.texcoord[%s + %u]", rel_reg, reg->idx[0].offset); } } else { - if(reg->idx < MAX_REG_INPUT) + if (reg->idx[0].offset < MAX_REG_INPUT) { - strcpy(register_name, ctx->ps_input[reg->idx]); + strcpy(register_name, ctx->ps_input[reg->idx[0].offset]); } else { - ERR("Pixel shader input register out of bounds: %u\n", reg->idx); - sprintf(register_name, "out_of_bounds_%u", reg->idx); + ERR("Pixel shader input register out of bounds: %u\n", reg->idx[0].offset); + sprintf(register_name, "out_of_bounds_%u", reg->idx[0].offset); } } } } else { - if (ctx->cur_vs_args->super.swizzle_map & (1 << reg->idx)) *is_color = TRUE; - sprintf(register_name, "vertex.attrib[%u]", reg->idx); + if (ctx->cur_vs_args->super.swizzle_map & (1 << reg->idx[0].offset)) + *is_color = TRUE; + sprintf(register_name, "vertex.attrib[%u]", reg->idx[0].offset); } break; case WINED3DSPR_CONST: - if (!pshader && reg->rel_addr) + if (!pshader && reg->idx[0].rel_addr) { const struct arb_vshader_private *shader_data = shader->backend_data; UINT rel_offset = shader_data->rel_offset; @@ -1073,9 +1128,12 @@ static void shader_arb_get_register_name(const struct wined3d_shader_instruction if (reg_maps->shader_version.major < 2) { sprintf(rel_reg, "A0.x"); - } else { - shader_arb_get_src_param(ins, reg->rel_addr, 0, rel_reg); - if(ctx->target_version == ARB) { + } + else + { + shader_arb_get_src_param(ins, reg->idx[0].rel_addr, 0, rel_reg); + if (ctx->target_version == ARB) + { if (!strcmp(rel_reg, "**aL_emul**")) { aL = TRUE; @@ -1085,19 +1143,19 @@ static void shader_arb_get_register_name(const struct wined3d_shader_instruction } } } - if(aL) - sprintf(register_name, "C[%u]", ctx->aL + reg->idx); - else if (reg->idx >= rel_offset) - sprintf(register_name, "C[%s + %u]", rel_reg, reg->idx - rel_offset); + if (aL) + sprintf(register_name, "C[%u]", ctx->aL + reg->idx[0].offset); + else if (reg->idx[0].offset >= rel_offset) + sprintf(register_name, "C[%s + %u]", rel_reg, reg->idx[0].offset - rel_offset); else - sprintf(register_name, "C[%s - %u]", rel_reg, rel_offset - reg->idx); + sprintf(register_name, "C[%s - %u]", rel_reg, rel_offset - reg->idx[0].offset); } else { if (reg_maps->usesrelconstF) - sprintf(register_name, "C[%u]", reg->idx); + sprintf(register_name, "C[%u]", reg->idx[0].offset); else - sprintf(register_name, "C%u", reg->idx); + sprintf(register_name, "C%u", reg->idx[0].offset); } break; @@ -1106,52 +1164,45 @@ static void shader_arb_get_register_name(const struct wined3d_shader_instruction { if (reg_maps->shader_version.major == 1 && reg_maps->shader_version.minor <= 3) - { - /* In ps <= 1.3, Tx is a temporary register as destination to all instructions, - * and as source to most instructions. For some instructions it is the texcoord - * input. Those instructions know about the special use - */ - sprintf(register_name, "T%u", reg->idx); - } else { - /* in ps 1.4 and 2.x Tx is always a (read-only) varying */ - sprintf(register_name, "fragment.texcoord[%u]", reg->idx); - } + /* In ps <= 1.3, Tx is a temporary register as destination + * to all instructions, and as source to most instructions. + * For some instructions it is the texcoord input. Those + * instructions know about the special use. */ + sprintf(register_name, "T%u", reg->idx[0].offset); + else + /* In ps 1.4 and 2.x Tx is always a (read-only) varying. */ + sprintf(register_name, "fragment.texcoord[%u]", reg->idx[0].offset); } else { if (reg_maps->shader_version.major == 1 || ctx->target_version >= NV2) - { - sprintf(register_name, "A%u", reg->idx); - } + sprintf(register_name, "A%u", reg->idx[0].offset); else - { - sprintf(register_name, "A%u_SHADOW", reg->idx); - } + sprintf(register_name, "A%u_SHADOW", reg->idx[0].offset); } break; case WINED3DSPR_COLOROUT: - if (ctx->cur_ps_args->super.srgb_correction && !reg->idx) + if (ctx->cur_ps_args->super.srgb_correction && !reg->idx[0].offset) { strcpy(register_name, "TMP_COLOR"); } else { - if(ctx->cur_ps_args->super.srgb_correction) FIXME("sRGB correction on higher render targets\n"); + if (ctx->cur_ps_args->super.srgb_correction) + FIXME("sRGB correction on higher render targets.\n"); if (reg_maps->rt_mask > 1) - { - sprintf(register_name, "result.color[%u]", reg->idx); - } + sprintf(register_name, "result.color[%u]", reg->idx[0].offset); else - { strcpy(register_name, "result.color"); - } } break; case WINED3DSPR_RASTOUT: - if(reg->idx == 1) sprintf(register_name, "%s", ctx->fog_output); - else sprintf(register_name, "%s", rastout_reg_names[reg->idx]); + if (reg->idx[0].offset == 1) + sprintf(register_name, "%s", ctx->fog_output); + else + sprintf(register_name, "%s", rastout_reg_names[reg->idx[0].offset]); break; case WINED3DSPR_DEPTHOUT: @@ -1160,26 +1211,19 @@ static void shader_arb_get_register_name(const struct wined3d_shader_instruction case WINED3DSPR_ATTROUT: /* case WINED3DSPR_OUTPUT: */ - if (pshader) sprintf(register_name, "oD[%u]", reg->idx); - else strcpy(register_name, ctx->color_output[reg->idx]); + if (pshader) + sprintf(register_name, "oD[%u]", reg->idx[0].offset); + else + strcpy(register_name, ctx->color_output[reg->idx[0].offset]); break; case WINED3DSPR_TEXCRDOUT: if (pshader) - { - sprintf(register_name, "oT[%u]", reg->idx); - } + sprintf(register_name, "oT[%u]", reg->idx[0].offset); + else if (reg_maps->shader_version.major < 3) + strcpy(register_name, ctx->texcrd_output[reg->idx[0].offset]); else - { - if (reg_maps->shader_version.major < 3) - { - strcpy(register_name, ctx->texcrd_output[reg->idx]); - } - else - { - strcpy(register_name, ctx->vs_output[reg->idx]); - } - } + strcpy(register_name, ctx->vs_output[reg->idx[0].offset]); break; case WINED3DSPR_LOOP: @@ -1203,27 +1247,21 @@ static void shader_arb_get_register_name(const struct wined3d_shader_instruction break; case WINED3DSPR_CONSTINT: - sprintf(register_name, "I%u", reg->idx); + sprintf(register_name, "I%u", reg->idx[0].offset); break; case WINED3DSPR_MISCTYPE: - if (!reg->idx) - { + if (!reg->idx[0].offset) sprintf(register_name, "vpos"); - } - else if(reg->idx == 1) - { + else if (reg->idx[0].offset == 1) sprintf(register_name, "fragment.facing.x"); - } else - { - FIXME("Unknown MISCTYPE register index %u\n", reg->idx); - } + FIXME("Unknown MISCTYPE register index %u.\n", reg->idx[0].offset); break; default: - FIXME("Unhandled register type %#x[%u]\n", reg->type, reg->idx); - sprintf(register_name, "unrecognized_register[%u]", reg->idx); + FIXME("Unhandled register type %#x[%u].\n", reg->type, reg->idx[0].offset); + sprintf(register_name, "unrecognized_register[%u]", reg->idx[0].offset); break; } } @@ -1555,9 +1593,9 @@ static void pshader_hw_bem(const struct wined3d_shader_instruction *ins) { const struct wined3d_shader_dst_param *dst = &ins->dst[0]; struct wined3d_shader_buffer *buffer = ins->ctx->buffer; + DWORD sampler_code = dst->reg.idx[0].offset; char dst_name[50]; char src_name[2][50]; - DWORD sampler_code = dst->reg.idx; shader_arb_get_dst_param(ins, dst, dst_name); @@ -1754,11 +1792,7 @@ static void shader_hw_map2gl(const struct wined3d_shader_instruction *ins) shader_addline(buffer, "%s%s %s%s;\n", instruction, shader_arb_get_modifier(ins), dst_str, arguments); } -static void shader_hw_nop(const struct wined3d_shader_instruction *ins) -{ - struct wined3d_shader_buffer *buffer = ins->ctx->buffer; - shader_addline(buffer, "NOP;\n"); -} +static void shader_hw_nop(const struct wined3d_shader_instruction *ins) {} static void shader_hw_mov(const struct wined3d_shader_instruction *ins) { @@ -1835,7 +1869,7 @@ static void shader_hw_mov(const struct wined3d_shader_instruction *ins) shader_addline(buffer, "ARL A0.x, %s;\n", src0_param); } } - else if (ins->dst[0].reg.type == WINED3DSPR_COLOROUT && !ins->dst[0].reg.idx && pshader) + else if (ins->dst[0].reg.type == WINED3DSPR_COLOROUT && !ins->dst[0].reg.idx[0].offset && pshader) { if (ctx->cur_ps_args->super.srgb_correction && shader->u.ps.color0_mov) { @@ -1885,18 +1919,19 @@ static void pshader_hw_texkill(const struct wined3d_shader_instruction *ins) shader_addline(buffer, "SWZ TA, %s, %c, %c, %c, %c;\n", reg_dest, x, y, z, w); } shader_addline(buffer, "KIL %s;\n", kilsrc); - } else { + } + else + { /* ARB fp doesn't like swizzles on the parameter of the KIL instruction. To mask the 4th component, * copy the register into our general purpose TMP variable, overwrite .w and pass TMP to KIL * * ps_1_3 shaders use the texcoord incarnation of the Tx register. ps_1_4 shaders can use the same, * or pass in any temporary register(in shader phase 2) */ - if(ins->ctx->reg_maps->shader_version.minor <= 3) { - sprintf(reg_dest, "fragment.texcoord[%u]", dst->reg.idx); - } else { + if (ins->ctx->reg_maps->shader_version.minor <= 3) + sprintf(reg_dest, "fragment.texcoord[%u]", dst->reg.idx[0].offset); + else shader_arb_get_dst_param(ins, dst, reg_dest); - } shader_addline(buffer, "SWZ TA, %s, x, y, z, 1;\n", reg_dest); shader_addline(buffer, "KIL TA;\n"); } @@ -1922,9 +1957,9 @@ static void pshader_hw_tex(const struct wined3d_shader_instruction *ins) /* 1.0-1.4: Use destination register number as texture code. 2.0+: Use provided sampler number as texure code. */ if (shader_version < WINED3D_SHADER_VERSION(2,0)) - reg_sampler_code = dst->reg.idx; + reg_sampler_code = dst->reg.idx[0].offset; else - reg_sampler_code = ins->src[1].reg.idx; + reg_sampler_code = ins->src[1].reg.idx[0].offset; /* 1.0-1.3: Use the texcoord varying. 1.4+: Use provided coordinate source register. */ @@ -1991,7 +2026,7 @@ static void pshader_hw_texcoord(const struct wined3d_shader_instruction *ins) if (shader_version < WINED3D_SHADER_VERSION(1,4)) { - DWORD reg = dst->reg.idx; + DWORD reg = dst->reg.idx[0].offset; shader_arb_get_dst_param(ins, &ins->dst[0], dst_str); shader_addline(buffer, "MOV_SAT %s, fragment.texcoord[%u];\n", dst_str, reg); @@ -2001,7 +2036,7 @@ static void pshader_hw_texcoord(const struct wined3d_shader_instruction *ins) shader_arb_get_src_param(ins, &ins->src[0], 0, reg_src); shader_arb_get_dst_param(ins, &ins->dst[0], dst_str); shader_addline(buffer, "MOV %s, %s;\n", dst_str, reg_src); - } + } } static void pshader_hw_texreg2ar(const struct wined3d_shader_instruction *ins) @@ -2009,7 +2044,7 @@ static void pshader_hw_texreg2ar(const struct wined3d_shader_instruction *ins) struct wined3d_shader_buffer *buffer = ins->ctx->buffer; DWORD flags = 0; - DWORD reg1 = ins->dst[0].reg.idx; + DWORD reg1 = ins->dst[0].reg.idx[0].offset; char dst_str[50]; char src_str[50]; @@ -2031,7 +2066,7 @@ static void pshader_hw_texreg2gb(const struct wined3d_shader_instruction *ins) { struct wined3d_shader_buffer *buffer = ins->ctx->buffer; - DWORD reg1 = ins->dst[0].reg.idx; + DWORD reg1 = ins->dst[0].reg.idx[0].offset; char dst_str[50]; char src_str[50]; @@ -2045,7 +2080,7 @@ static void pshader_hw_texreg2gb(const struct wined3d_shader_instruction *ins) static void pshader_hw_texreg2rgb(const struct wined3d_shader_instruction *ins) { - DWORD reg1 = ins->dst[0].reg.idx; + DWORD reg1 = ins->dst[0].reg.idx[0].offset; char dst_str[50]; char src_str[50]; @@ -2066,7 +2101,7 @@ static void pshader_hw_texbem(const struct wined3d_shader_instruction *ins) /* All versions have a destination register. The Tx where the texture coordinates come * from is the varying incarnation of the texture register */ - reg_dest_code = dst->reg.idx; + reg_dest_code = dst->reg.idx[0].offset; shader_arb_get_dst_param(ins, &ins->dst[0], dst_reg); shader_arb_get_src_param(ins, &ins->src[0], 0, src_reg); sprintf(reg_coord, "fragment.texcoord[%u]", reg_dest_code); @@ -2112,7 +2147,7 @@ static void pshader_hw_texbem(const struct wined3d_shader_instruction *ins) static void pshader_hw_texm3x2pad(const struct wined3d_shader_instruction *ins) { - DWORD reg = ins->dst[0].reg.idx; + DWORD reg = ins->dst[0].reg.idx[0].offset; struct wined3d_shader_buffer *buffer = ins->ctx->buffer; char src0_name[50], dst_name[50]; BOOL is_color; @@ -2122,7 +2157,7 @@ static void pshader_hw_texm3x2pad(const struct wined3d_shader_instruction *ins) /* The next instruction will be a texm3x2tex or texm3x2depth that writes to the uninitialized * T register. Use this register to store the calculated vector */ - tmp_reg.idx = reg + 1; + tmp_reg.idx[0].offset = reg + 1; shader_arb_get_register_name(ins, &tmp_reg, dst_name, &is_color); shader_addline(buffer, "DP3 %s.x, fragment.texcoord[%u], %s;\n", dst_name, reg, src0_name); } @@ -2131,7 +2166,7 @@ static void pshader_hw_texm3x2tex(const struct wined3d_shader_instruction *ins) { struct shader_arb_ctx_priv *priv = ins->ctx->backend_data; DWORD flags; - DWORD reg = ins->dst[0].reg.idx; + DWORD reg = ins->dst[0].reg.idx[0].offset; struct wined3d_shader_buffer *buffer = ins->ctx->buffer; char dst_str[50]; char src0_name[50]; @@ -2151,7 +2186,7 @@ static void pshader_hw_texm3x2tex(const struct wined3d_shader_instruction *ins) static void pshader_hw_texm3x3pad(const struct wined3d_shader_instruction *ins) { struct wined3d_shader_tex_mx *tex_mx = ins->ctx->tex_mx; - DWORD reg = ins->dst[0].reg.idx; + DWORD reg = ins->dst[0].reg.idx[0].offset; struct wined3d_shader_buffer *buffer = ins->ctx->buffer; char src0_name[50], dst_name[50]; struct wined3d_shader_register tmp_reg = ins->dst[0].reg; @@ -2161,7 +2196,7 @@ static void pshader_hw_texm3x3pad(const struct wined3d_shader_instruction *ins) * incrementing ins->dst[0].register_idx numbers. So the pad instruction already knows the final destination * register, and this register is uninitialized(otherwise the assembler complains that it is 'redeclared') */ - tmp_reg.idx = reg + 2 - tex_mx->current_row; + tmp_reg.idx[0].offset = reg + 2 - tex_mx->current_row; shader_arb_get_register_name(ins, &tmp_reg, dst_name, &is_color); shader_arb_get_src_param(ins, &ins->src[0], 0, src0_name); @@ -2175,7 +2210,7 @@ static void pshader_hw_texm3x3tex(const struct wined3d_shader_instruction *ins) struct shader_arb_ctx_priv *priv = ins->ctx->backend_data; struct wined3d_shader_tex_mx *tex_mx = ins->ctx->tex_mx; DWORD flags; - DWORD reg = ins->dst[0].reg.idx; + DWORD reg = ins->dst[0].reg.idx[0].offset; struct wined3d_shader_buffer *buffer = ins->ctx->buffer; char dst_str[50]; char src0_name[50], dst_name[50]; @@ -2197,7 +2232,7 @@ static void pshader_hw_texm3x3vspec(const struct wined3d_shader_instruction *ins struct shader_arb_ctx_priv *priv = ins->ctx->backend_data; struct wined3d_shader_tex_mx *tex_mx = ins->ctx->tex_mx; DWORD flags; - DWORD reg = ins->dst[0].reg.idx; + DWORD reg = ins->dst[0].reg.idx[0].offset; struct wined3d_shader_buffer *buffer = ins->ctx->buffer; char dst_str[50]; char src0_name[50]; @@ -2238,7 +2273,7 @@ static void pshader_hw_texm3x3spec(const struct wined3d_shader_instruction *ins) struct shader_arb_ctx_priv *priv = ins->ctx->backend_data; struct wined3d_shader_tex_mx *tex_mx = ins->ctx->tex_mx; DWORD flags; - DWORD reg = ins->dst[0].reg.idx; + DWORD reg = ins->dst[0].reg.idx[0].offset; struct wined3d_shader_buffer *buffer = ins->ctx->buffer; char dst_str[50]; char src0_name[50]; @@ -2310,7 +2345,7 @@ static void pshader_hw_texdepth(const struct wined3d_shader_instruction *ins) static void pshader_hw_texdp3tex(const struct wined3d_shader_instruction *ins) { struct wined3d_shader_buffer *buffer = ins->ctx->buffer; - DWORD sampler_idx = ins->dst[0].reg.idx; + DWORD sampler_idx = ins->dst[0].reg.idx[0].offset; char src0[50]; char dst_str[50]; @@ -2334,7 +2369,7 @@ static void pshader_hw_texdp3(const struct wined3d_shader_instruction *ins) /* Handle output register */ shader_arb_get_dst_param(ins, dst, dst_str); shader_arb_get_src_param(ins, &ins->src[0], 0, src0); - shader_addline(buffer, "DP3 %s, fragment.texcoord[%u], %s;\n", dst_str, dst->reg.idx, src0); + shader_addline(buffer, "DP3 %s, fragment.texcoord[%u], %s;\n", dst_str, dst->reg.idx[0].offset, src0); } /** Process the WINED3DSIO_TEXM3X3 instruction in ARB @@ -2350,7 +2385,7 @@ static void pshader_hw_texm3x3(const struct wined3d_shader_instruction *ins) shader_arb_get_dst_param(ins, dst, dst_str); shader_arb_get_src_param(ins, &ins->src[0], 0, src0); shader_arb_get_register_name(ins, &ins->dst[0].reg, dst_name, &is_color); - shader_addline(buffer, "DP3 %s.z, fragment.texcoord[%u], %s;\n", dst_name, dst->reg.idx, src0); + shader_addline(buffer, "DP3 %s.z, fragment.texcoord[%u], %s;\n", dst_name, dst->reg.idx[0].offset, src0); shader_addline(buffer, "MOV %s, %s;\n", dst_str, dst_name); } @@ -2370,7 +2405,7 @@ static void pshader_hw_texm3x2depth(const struct wined3d_shader_instruction *ins shader_arb_get_src_param(ins, &ins->src[0], 0, src0); shader_arb_get_register_name(ins, &ins->dst[0].reg, dst_name, &is_color); - shader_addline(buffer, "DP3 %s.y, fragment.texcoord[%u], %s;\n", dst_name, dst->reg.idx, src0); + shader_addline(buffer, "DP3 %s.y, fragment.texcoord[%u], %s;\n", dst_name, dst->reg.idx[0].offset, src0); /* How to deal with the special case dst_name.g == 0? if r != 0, then * the r * (1 / 0) will give infinity, which is clamped to 1.0, the correct @@ -2431,10 +2466,11 @@ static void shader_hw_mnxn(const struct wined3d_shader_instruction *ins) tmp_dst = ins->dst[0]; tmp_src[0] = ins->src[0]; tmp_src[1] = ins->src[1]; - for (i = 0; i < nComponents; i++) { + for (i = 0; i < nComponents; ++i) + { tmp_dst.write_mask = WINED3DSP_WRITEMASK_0 << i; shader_hw_map2gl(&tmp_ins); - ++tmp_src[1].reg.idx; + ++tmp_src[1].reg.idx[0].offset; } } @@ -3091,7 +3127,7 @@ static void shader_hw_endif(const struct wined3d_shader_instruction *ins) static void shader_hw_texldd(const struct wined3d_shader_instruction *ins) { - DWORD sampler_idx = ins->src[1].reg.idx; + DWORD sampler_idx = ins->src[1].reg.idx[0].offset; char reg_dest[40]; char reg_src[3][40]; WORD flags = TEX_DERIV; @@ -3109,7 +3145,7 @@ static void shader_hw_texldd(const struct wined3d_shader_instruction *ins) static void shader_hw_texldl(const struct wined3d_shader_instruction *ins) { - DWORD sampler_idx = ins->src[1].reg.idx; + DWORD sampler_idx = ins->src[1].reg.idx[0].offset; char reg_dest[40]; char reg_coord[40]; WORD flags = TEX_LOD; @@ -3134,7 +3170,7 @@ static void shader_hw_label(const struct wined3d_shader_instruction *ins) */ if(priv->target_version == ARB) return; - shader_addline(buffer, "l%u:\n", ins->src[0].reg.idx); + shader_addline(buffer, "l%u:\n", ins->src[0].reg.idx[0].offset); } static void vshader_add_footer(struct shader_arb_ctx_priv *priv_ctx, @@ -3266,10 +3302,10 @@ static void shader_hw_ret(const struct wined3d_shader_instruction *ins) static void shader_hw_call(const struct wined3d_shader_instruction *ins) { struct wined3d_shader_buffer *buffer = ins->ctx->buffer; - shader_addline(buffer, "CAL l%u;\n", ins->src[0].reg.idx); + shader_addline(buffer, "CAL l%u;\n", ins->src[0].reg.idx[0].offset); } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static GLuint create_arb_blt_vertex_program(const struct wined3d_gl_info *gl_info) { GLuint program_id = 0; @@ -3308,7 +3344,7 @@ static GLuint create_arb_blt_vertex_program(const struct wined3d_gl_info *gl_inf return program_id; } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static GLuint create_arb_blt_fragment_program(const struct wined3d_gl_info *gl_info, enum tex_types tex_type, BOOL masked) { @@ -3544,7 +3580,7 @@ static void init_ps_input(const struct wined3d_shader *shader, } } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static GLuint shader_arb_generate_pshader(const struct wined3d_shader *shader, const struct wined3d_gl_info *gl_info, struct wined3d_shader_buffer *buffer, const struct arb_ps_compile_args *args, struct arb_ps_compiled_shader *compiled) @@ -4133,13 +4169,14 @@ static void init_output_registers(const struct wined3d_shader *shader, DWORD sig } } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static GLuint shader_arb_generate_vshader(const struct wined3d_shader *shader, const struct wined3d_gl_info *gl_info, struct wined3d_shader_buffer *buffer, const struct arb_vs_compile_args *args, struct arb_vs_compiled_shader *compiled) { const struct arb_vshader_private *shader_data = shader->backend_data; const struct wined3d_shader_reg_maps *reg_maps = &shader->reg_maps; + struct shader_arb_priv *priv = shader->device->shader_priv; const struct wined3d_shader_lconst *lconst; const DWORD *function = shader->function; GLuint ret; @@ -4232,11 +4269,10 @@ static GLuint shader_arb_generate_vshader(const struct wined3d_shader *shader, */ if (!gl_info->supported[NV_VERTEX_PROGRAM]) { - struct wined3d_device *device = shader->device; const char *color_init = arb_get_helper_value(WINED3D_SHADER_TYPE_VERTEX, ARB_0001); shader_addline(buffer, "MOV result.color.secondary, %s;\n", color_init); - if (gl_info->quirks & WINED3D_QUIRK_SET_TEXCOORD_W && !device->frag_pipe->ffp_proj_control) + if (gl_info->quirks & WINED3D_QUIRK_SET_TEXCOORD_W && !priv->ffp_proj_control) { int i; const char *one = arb_get_helper_value(WINED3D_SHADER_TYPE_VERTEX, ARB_ONE); @@ -4282,7 +4318,7 @@ static GLuint shader_arb_generate_vshader(const struct wined3d_shader *shader, { GLint native; - GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native)); + GL_EXTCALL(glGetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native)); checkGLcall("glGetProgramivARB()"); if (!native) WARN("Program exceeds native resource limits.\n"); @@ -4301,7 +4337,7 @@ static GLuint shader_arb_generate_vshader(const struct wined3d_shader *shader, return ret; } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static struct arb_ps_compiled_shader *find_arb_pshader(struct wined3d_shader *shader, const struct arb_ps_compile_args *args) { @@ -4615,8 +4651,9 @@ static void find_arb_vs_compile_args(const struct wined3d_state *state, } } -/* GL locking is done by the caller */ -static void shader_arb_select(const struct wined3d_context *context, BOOL usePS, BOOL useVS) +/* Context activation is done by the caller. */ +static void shader_arb_select(const struct wined3d_context *context, enum wined3d_shader_mode vertex_mode, + enum wined3d_shader_mode fragment_mode) { struct wined3d_device *device = context->swapchain->device; struct shader_arb_priv *priv = device->shader_priv; @@ -4625,7 +4662,7 @@ static void shader_arb_select(const struct wined3d_context *context, BOOL usePS, int i; /* Deal with pixel shaders first so the vertex shader arg function has the input signature ready */ - if (usePS) + if (fragment_mode == WINED3D_SHADER_MODE_SHADER) { struct wined3d_shader *ps = state->pixel_shader; struct arb_ps_compile_args compile_args; @@ -4642,11 +4679,12 @@ static void shader_arb_select(const struct wined3d_context *context, BOOL usePS, checkGLcall("glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, priv->current_fprogram_id);"); if (!priv->use_arbfp_fixed_func) - { - /* Enable OpenGL fragment programs. */ - gl_info->gl_ops.gl.p_glEnable(GL_FRAGMENT_PROGRAM_ARB); - checkGLcall("glEnable(GL_FRAGMENT_PROGRAM_ARB);"); - } + priv->fragment_pipe->enable_extension(gl_info, FALSE); + + /* Enable OpenGL fragment programs. */ + gl_info->gl_ops.gl.p_glEnable(GL_FRAGMENT_PROGRAM_ARB); + checkGLcall("glEnable(GL_FRAGMENT_PROGRAM_ARB);"); + TRACE("(%p) : Bound fragment program %u and enabled GL_FRAGMENT_PROGRAM_ARB\n", device, priv->current_fprogram_id); @@ -4662,7 +4700,7 @@ static void shader_arb_select(const struct wined3d_context *context, BOOL usePS, priv->pshader_const_dirty[i] = 1; } /* Also takes care of loading local constants */ - shader_arb_load_constants(context, TRUE, FALSE); + shader_arb_load_constants_internal(context, TRUE, FALSE, TRUE); } else { @@ -4674,18 +4712,22 @@ static void shader_arb_select(const struct wined3d_context *context, BOOL usePS, if (compiled->np2fixup_info.super.active) shader_arb_load_np2fixup_constants(priv, gl_info, state); } - else if (gl_info->supported[ARB_FRAGMENT_PROGRAM] && !priv->use_arbfp_fixed_func) + else { - /* Disable only if we're not using arbfp fixed function fragment processing. If this is used, - * keep GL_FRAGMENT_PROGRAM_ARB enabled, and the fixed function pipeline will bind the fixed function - * replacement shader - */ - gl_info->gl_ops.gl.p_glDisable(GL_FRAGMENT_PROGRAM_ARB); - checkGLcall("glDisable(GL_FRAGMENT_PROGRAM_ARB)"); - priv->current_fprogram_id = 0; + if (gl_info->supported[ARB_FRAGMENT_PROGRAM] && !priv->use_arbfp_fixed_func) + { + /* Disable only if we're not using arbfp fixed function fragment + * processing. If this is used, keep GL_FRAGMENT_PROGRAM_ARB + * enabled, and the fixed function pipeline will bind the fixed + * function replacement shader. */ + gl_info->gl_ops.gl.p_glDisable(GL_FRAGMENT_PROGRAM_ARB); + checkGLcall("glDisable(GL_FRAGMENT_PROGRAM_ARB)"); + priv->current_fprogram_id = 0; + } + priv->fragment_pipe->enable_extension(gl_info, fragment_mode == WINED3D_SHADER_MODE_FFP); } - if (useVS) + if (vertex_mode == WINED3D_SHADER_MODE_SHADER) { struct wined3d_shader *vs = state->vertex_shader; struct arb_vs_compile_args compile_args; @@ -4727,7 +4769,7 @@ static void shader_arb_select(const struct wined3d_context *context, BOOL usePS, } } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void shader_arb_select_depth_blt(void *shader_priv, const struct wined3d_gl_info *gl_info, enum tex_types tex_type, const SIZE *ds_mask_size) { @@ -4747,7 +4789,7 @@ static void shader_arb_select_depth_blt(void *shader_priv, const struct wined3d_ gl_info->gl_ops.gl.p_glEnable(GL_FRAGMENT_PROGRAM_ARB); } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void shader_arb_deselect_depth_blt(void *shader_priv, const struct wined3d_gl_info *gl_info) { struct shader_arb_priv *priv = shader_priv; @@ -4793,13 +4835,11 @@ static void shader_arb_destroy(struct wined3d_shader *shader) { struct wined3d_context *context = context_acquire(device, NULL); - ENTER_GL(); for (i = 0; i < shader_data->num_gl_shaders; ++i) { GL_EXTCALL(glDeleteProgramsARB(1, &shader_data->gl_shaders[i].prgId)); checkGLcall("GL_EXTCALL(glDeleteProgramsARB(1, &shader_data->gl_shaders[i].prgId))"); } - LEAVE_GL(); context_release(context); } @@ -4819,13 +4859,11 @@ static void shader_arb_destroy(struct wined3d_shader *shader) { struct wined3d_context *context = context_acquire(device, NULL); - ENTER_GL(); for (i = 0; i < shader_data->num_gl_shaders; ++i) { GL_EXTCALL(glDeleteProgramsARB(1, &shader_data->gl_shaders[i].prgId)); checkGLcall("GL_EXTCALL(glDeleteProgramsARB(1, &shader_data->gl_shaders[i].prgId))"); } - LEAVE_GL(); context_release(context); } @@ -4850,9 +4888,18 @@ static const struct wine_rb_functions sig_tree_functions = sig_tree_compare }; -static HRESULT shader_arb_alloc(struct wined3d_device *device) +static HRESULT shader_arb_alloc(struct wined3d_device *device, const struct fragment_pipeline *fragment_pipe) { struct shader_arb_priv *priv = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*priv)); + struct fragment_caps fragment_caps; + void *fragment_priv; + + if (!(fragment_priv = fragment_pipe->alloc_private(&arb_program_shader_backend, priv))) + { + ERR("Failed to initialize fragment pipe.\n"); + HeapFree(GetProcessHeap(), 0, priv); + return E_FAIL; + } priv->vshader_const_dirty = HeapAlloc(GetProcessHeap(), 0, sizeof(*priv->vshader_const_dirty) * device->d3d_vshader_constantF); @@ -4873,12 +4920,18 @@ static HRESULT shader_arb_alloc(struct wined3d_device *device) ERR("RB tree init failed\n"); goto fail; } + + fragment_pipe->get_caps(&device->adapter->gl_info, &fragment_caps); + priv->ffp_proj_control = fragment_caps.wined3d_caps & WINED3D_FRAGMENT_CAP_PROJ_CONTROL; + device->fragment_priv = fragment_priv; + priv->fragment_pipe = fragment_pipe; device->shader_priv = priv; return WINED3D_OK; fail: HeapFree(GetProcessHeap(), 0, priv->pshader_const_dirty); HeapFree(GetProcessHeap(), 0, priv->vshader_const_dirty); + fragment_pipe->free_private(device); HeapFree(GetProcessHeap(), 0, priv); return E_OUTOFMEMORY; } @@ -4902,10 +4955,9 @@ static void shader_arb_free(struct wined3d_device *device) struct shader_arb_priv *priv = device->shader_priv; int i; - ENTER_GL(); - if(priv->depth_blt_vprogram_id) { + if (priv->depth_blt_vprogram_id) GL_EXTCALL(glDeleteProgramsARB(1, &priv->depth_blt_vprogram_id)); - } + for (i = 0; i < tex_type_count; ++i) { if (priv->depth_blt_fprogram_id_full[i]) @@ -4917,11 +4969,11 @@ static void shader_arb_free(struct wined3d_device *device) GL_EXTCALL(glDeleteProgramsARB(1, &priv->depth_blt_fprogram_id_masked[i])); } } - LEAVE_GL(); wine_rb_destroy(&priv->signature_tree, release_signature, NULL); HeapFree(GetProcessHeap(), 0, priv->pshader_const_dirty); HeapFree(GetProcessHeap(), 0, priv->vshader_const_dirty); + priv->fragment_pipe->free_private(device); HeapFree(GetProcessHeap(), 0, device->shader_priv); } @@ -4938,6 +4990,7 @@ static void shader_arb_get_caps(const struct wined3d_gl_info *gl_info, struct sh if (gl_info->supported[ARB_VERTEX_PROGRAM]) { DWORD vs_consts; + UINT vs_version; /* 96 is the minimum allowed value of MAX_PROGRAM_ENV_PARAMETERS_ARB * for vertex programs. If the native limit is less than that it's @@ -4950,31 +5003,35 @@ static void shader_arb_get_caps(const struct wined3d_gl_info *gl_info, struct sh if (gl_info->supported[NV_VERTEX_PROGRAM3]) { - caps->VertexShaderVersion = 3; + vs_version = 3; TRACE("Hardware vertex shader version 3.0 enabled (NV_VERTEX_PROGRAM3)\n"); } else if (vs_consts >= 256) { /* Shader Model 2.0 requires at least 256 vertex shader constants */ - caps->VertexShaderVersion = 2; + vs_version = 2; TRACE("Hardware vertex shader version 2.0 enabled (ARB_PROGRAM)\n"); } else { - caps->VertexShaderVersion = 1; + vs_version = 1; TRACE("Hardware vertex shader version 1.1 enabled (ARB_PROGRAM)\n"); } - caps->MaxVertexShaderConst = vs_consts; + caps->vs_version = min(wined3d_settings.max_sm_vs, vs_version); + caps->vs_uniform_count = vs_consts; } else { - caps->VertexShaderVersion = 0; - caps->MaxVertexShaderConst = 0; + caps->vs_version = 0; + caps->vs_uniform_count = 0; } + caps->gs_version = 0; + if (gl_info->supported[ARB_FRAGMENT_PROGRAM]) { DWORD ps_consts; + UINT ps_version; /* Similar as above for vertex programs, but the minimum for fragment * programs is 24. */ @@ -4985,31 +5042,34 @@ static void shader_arb_get_caps(const struct wined3d_gl_info *gl_info, struct sh if (gl_info->supported[NV_FRAGMENT_PROGRAM2]) { - caps->PixelShaderVersion = 3; + ps_version = 3; TRACE("Hardware pixel shader version 3.0 enabled (NV_FRAGMENT_PROGRAM2)\n"); } else if (ps_consts >= 32) { /* Shader Model 2.0 requires at least 32 pixel shader constants */ - caps->PixelShaderVersion = 2; + ps_version = 2; TRACE("Hardware pixel shader version 2.0 enabled (ARB_PROGRAM)\n"); } else { - caps->PixelShaderVersion = 1; + ps_version = 1; TRACE("Hardware pixel shader version 1.4 enabled (ARB_PROGRAM)\n"); } - caps->PixelShader1xMaxValue = 8.0f; - caps->MaxPixelShaderConst = ps_consts; + caps->ps_version = min(wined3d_settings.max_sm_ps, ps_version); + caps->ps_uniform_count = ps_consts; + caps->ps_1x_max_value = 8.0f; } else { - caps->PixelShaderVersion = 0; - caps->PixelShader1xMaxValue = 0.0f; - caps->MaxPixelShaderConst = 0; + caps->ps_version = 0; + caps->ps_uniform_count = 0; + caps->ps_1x_max_value = 0.0f; } - caps->VSClipping = use_nv_clip(gl_info); + caps->wined3d_caps = WINED3D_SHADER_CAP_SRGB_WRITE; + if (use_nv_clip(gl_info)) + caps->wined3d_caps |= WINED3D_SHADER_CAP_VS_CLIPPING; } static BOOL shader_arb_color_fixup_supported(struct color_fixup_desc fixup) @@ -5057,113 +5117,117 @@ static void shader_arb_add_instruction_modifiers(const struct wined3d_shader_ins static const SHADER_HANDLER shader_arb_instruction_handler_table[WINED3DSIH_TABLE_SIZE] = { - /* WINED3DSIH_ABS */ shader_hw_map2gl, - /* WINED3DSIH_ADD */ shader_hw_map2gl, - /* WINED3DSIH_AND */ NULL, - /* WINED3DSIH_BEM */ pshader_hw_bem, - /* WINED3DSIH_BREAK */ shader_hw_break, - /* WINED3DSIH_BREAKC */ shader_hw_breakc, - /* WINED3DSIH_BREAKP */ NULL, - /* WINED3DSIH_CALL */ shader_hw_call, - /* WINED3DSIH_CALLNZ */ NULL, - /* WINED3DSIH_CMP */ pshader_hw_cmp, - /* WINED3DSIH_CND */ pshader_hw_cnd, - /* WINED3DSIH_CRS */ shader_hw_map2gl, - /* WINED3DSIH_CUT */ NULL, - /* WINED3DSIH_DCL */ NULL, - /* WINED3DSIH_DEF */ NULL, - /* WINED3DSIH_DEFB */ NULL, - /* WINED3DSIH_DEFI */ NULL, - /* WINED3DSIH_DIV */ NULL, - /* WINED3DSIH_DP2ADD */ pshader_hw_dp2add, - /* WINED3DSIH_DP3 */ shader_hw_map2gl, - /* WINED3DSIH_DP4 */ shader_hw_map2gl, - /* WINED3DSIH_DST */ shader_hw_map2gl, - /* WINED3DSIH_DSX */ shader_hw_map2gl, - /* WINED3DSIH_DSY */ shader_hw_dsy, - /* WINED3DSIH_ELSE */ shader_hw_else, - /* WINED3DSIH_EMIT */ NULL, - /* WINED3DSIH_ENDIF */ shader_hw_endif, - /* WINED3DSIH_ENDLOOP */ shader_hw_endloop, - /* WINED3DSIH_ENDREP */ shader_hw_endrep, - /* WINED3DSIH_EQ */ NULL, - /* WINED3DSIH_EXP */ shader_hw_scalar_op, - /* WINED3DSIH_EXPP */ shader_hw_scalar_op, - /* WINED3DSIH_FRC */ shader_hw_map2gl, - /* WINED3DSIH_FTOI */ NULL, - /* WINED3DSIH_GE */ NULL, - /* WINED3DSIH_IADD */ NULL, - /* WINED3DSIH_IEQ */ NULL, - /* WINED3DSIH_IF */ NULL /* Hardcoded into the shader */, - /* WINED3DSIH_IFC */ shader_hw_ifc, - /* WINED3DSIH_IGE */ NULL, - /* WINED3DSIH_IMUL */ NULL, - /* WINED3DSIH_ITOF */ NULL, - /* WINED3DSIH_LABEL */ shader_hw_label, - /* WINED3DSIH_LD */ NULL, - /* WINED3DSIH_LIT */ shader_hw_map2gl, - /* WINED3DSIH_LOG */ shader_hw_log, - /* WINED3DSIH_LOGP */ shader_hw_log, - /* WINED3DSIH_LOOP */ shader_hw_loop, - /* WINED3DSIH_LRP */ shader_hw_lrp, - /* WINED3DSIH_LT */ NULL, - /* WINED3DSIH_M3x2 */ shader_hw_mnxn, - /* WINED3DSIH_M3x3 */ shader_hw_mnxn, - /* WINED3DSIH_M3x4 */ shader_hw_mnxn, - /* WINED3DSIH_M4x3 */ shader_hw_mnxn, - /* WINED3DSIH_M4x4 */ shader_hw_mnxn, - /* WINED3DSIH_MAD */ shader_hw_map2gl, - /* WINED3DSIH_MAX */ shader_hw_map2gl, - /* WINED3DSIH_MIN */ shader_hw_map2gl, - /* WINED3DSIH_MOV */ shader_hw_mov, - /* WINED3DSIH_MOVA */ shader_hw_mov, - /* WINED3DSIH_MOVC */ NULL, - /* WINED3DSIH_MUL */ shader_hw_map2gl, - /* WINED3DSIH_NOP */ shader_hw_nop, - /* WINED3DSIH_NRM */ shader_hw_nrm, - /* WINED3DSIH_PHASE */ NULL, - /* WINED3DSIH_POW */ shader_hw_pow, - /* WINED3DSIH_RCP */ shader_hw_rcp, - /* WINED3DSIH_REP */ shader_hw_rep, - /* WINED3DSIH_RET */ shader_hw_ret, - /* WINED3DSIH_ROUND_NI */ NULL, - /* WINED3DSIH_RSQ */ shader_hw_scalar_op, - /* WINED3DSIH_SAMPLE */ NULL, - /* WINED3DSIH_SAMPLE_GRAD */ NULL, - /* WINED3DSIH_SAMPLE_LOD */ NULL, - /* WINED3DSIH_SETP */ NULL, - /* WINED3DSIH_SGE */ shader_hw_map2gl, - /* WINED3DSIH_SGN */ shader_hw_sgn, - /* WINED3DSIH_SINCOS */ shader_hw_sincos, - /* WINED3DSIH_SLT */ shader_hw_map2gl, - /* WINED3DSIH_SQRT */ NULL, - /* WINED3DSIH_SUB */ shader_hw_map2gl, - /* WINED3DSIH_TEX */ pshader_hw_tex, - /* WINED3DSIH_TEXBEM */ pshader_hw_texbem, - /* WINED3DSIH_TEXBEML */ pshader_hw_texbem, - /* WINED3DSIH_TEXCOORD */ pshader_hw_texcoord, - /* WINED3DSIH_TEXDEPTH */ pshader_hw_texdepth, - /* WINED3DSIH_TEXDP3 */ pshader_hw_texdp3, - /* WINED3DSIH_TEXDP3TEX */ pshader_hw_texdp3tex, - /* WINED3DSIH_TEXKILL */ pshader_hw_texkill, - /* WINED3DSIH_TEXLDD */ shader_hw_texldd, - /* WINED3DSIH_TEXLDL */ shader_hw_texldl, - /* WINED3DSIH_TEXM3x2DEPTH */ pshader_hw_texm3x2depth, - /* WINED3DSIH_TEXM3x2PAD */ pshader_hw_texm3x2pad, - /* WINED3DSIH_TEXM3x2TEX */ pshader_hw_texm3x2tex, - /* WINED3DSIH_TEXM3x3 */ pshader_hw_texm3x3, - /* WINED3DSIH_TEXM3x3DIFF */ NULL, - /* WINED3DSIH_TEXM3x3PAD */ pshader_hw_texm3x3pad, - /* WINED3DSIH_TEXM3x3SPEC */ pshader_hw_texm3x3spec, - /* WINED3DSIH_TEXM3x3TEX */ pshader_hw_texm3x3tex, - /* WINED3DSIH_TEXM3x3VSPEC */ pshader_hw_texm3x3vspec, - /* WINED3DSIH_TEXREG2AR */ pshader_hw_texreg2ar, - /* WINED3DSIH_TEXREG2GB */ pshader_hw_texreg2gb, - /* WINED3DSIH_TEXREG2RGB */ pshader_hw_texreg2rgb, - /* WINED3DSIH_UDIV */ NULL, - /* WINED3DSIH_USHR */ NULL, - /* WINED3DSIH_UTOF */ NULL, - /* WINED3DSIH_XOR */ NULL, + /* WINED3DSIH_ABS */ shader_hw_map2gl, + /* WINED3DSIH_ADD */ shader_hw_map2gl, + /* WINED3DSIH_AND */ NULL, + /* WINED3DSIH_BEM */ pshader_hw_bem, + /* WINED3DSIH_BREAK */ shader_hw_break, + /* WINED3DSIH_BREAKC */ shader_hw_breakc, + /* WINED3DSIH_BREAKP */ NULL, + /* WINED3DSIH_CALL */ shader_hw_call, + /* WINED3DSIH_CALLNZ */ NULL, + /* WINED3DSIH_CMP */ pshader_hw_cmp, + /* WINED3DSIH_CND */ pshader_hw_cnd, + /* WINED3DSIH_CRS */ shader_hw_map2gl, + /* WINED3DSIH_CUT */ NULL, + /* WINED3DSIH_DCL */ shader_hw_nop, + /* WINED3DSIH_DCL_CONSTANT_BUFFER */ shader_hw_nop, + /* WINED3DSIH_DCL_INPUT_PRIMITIVE */ shader_hw_nop, + /* WINED3DSIH_DCL_OUTPUT_TOPOLOGY */ shader_hw_nop, + /* WINED3DSIH_DCL_VERTICES_OUT */ shader_hw_nop, + /* WINED3DSIH_DEF */ shader_hw_nop, + /* WINED3DSIH_DEFB */ shader_hw_nop, + /* WINED3DSIH_DEFI */ shader_hw_nop, + /* WINED3DSIH_DIV */ NULL, + /* WINED3DSIH_DP2ADD */ pshader_hw_dp2add, + /* WINED3DSIH_DP3 */ shader_hw_map2gl, + /* WINED3DSIH_DP4 */ shader_hw_map2gl, + /* WINED3DSIH_DST */ shader_hw_map2gl, + /* WINED3DSIH_DSX */ shader_hw_map2gl, + /* WINED3DSIH_DSY */ shader_hw_dsy, + /* WINED3DSIH_ELSE */ shader_hw_else, + /* WINED3DSIH_EMIT */ NULL, + /* WINED3DSIH_ENDIF */ shader_hw_endif, + /* WINED3DSIH_ENDLOOP */ shader_hw_endloop, + /* WINED3DSIH_ENDREP */ shader_hw_endrep, + /* WINED3DSIH_EQ */ NULL, + /* WINED3DSIH_EXP */ shader_hw_scalar_op, + /* WINED3DSIH_EXPP */ shader_hw_scalar_op, + /* WINED3DSIH_FRC */ shader_hw_map2gl, + /* WINED3DSIH_FTOI */ NULL, + /* WINED3DSIH_GE */ NULL, + /* WINED3DSIH_IADD */ NULL, + /* WINED3DSIH_IEQ */ NULL, + /* WINED3DSIH_IF */ NULL /* Hardcoded into the shader */, + /* WINED3DSIH_IFC */ shader_hw_ifc, + /* WINED3DSIH_IGE */ NULL, + /* WINED3DSIH_IMUL */ NULL, + /* WINED3DSIH_ITOF */ NULL, + /* WINED3DSIH_LABEL */ shader_hw_label, + /* WINED3DSIH_LD */ NULL, + /* WINED3DSIH_LIT */ shader_hw_map2gl, + /* WINED3DSIH_LOG */ shader_hw_log, + /* WINED3DSIH_LOGP */ shader_hw_log, + /* WINED3DSIH_LOOP */ shader_hw_loop, + /* WINED3DSIH_LRP */ shader_hw_lrp, + /* WINED3DSIH_LT */ NULL, + /* WINED3DSIH_M3x2 */ shader_hw_mnxn, + /* WINED3DSIH_M3x3 */ shader_hw_mnxn, + /* WINED3DSIH_M3x4 */ shader_hw_mnxn, + /* WINED3DSIH_M4x3 */ shader_hw_mnxn, + /* WINED3DSIH_M4x4 */ shader_hw_mnxn, + /* WINED3DSIH_MAD */ shader_hw_map2gl, + /* WINED3DSIH_MAX */ shader_hw_map2gl, + /* WINED3DSIH_MIN */ shader_hw_map2gl, + /* WINED3DSIH_MOV */ shader_hw_mov, + /* WINED3DSIH_MOVA */ shader_hw_mov, + /* WINED3DSIH_MOVC */ NULL, + /* WINED3DSIH_MUL */ shader_hw_map2gl, + /* WINED3DSIH_NOP */ shader_hw_nop, + /* WINED3DSIH_NRM */ shader_hw_nrm, + /* WINED3DSIH_PHASE */ shader_hw_nop, + /* WINED3DSIH_POW */ shader_hw_pow, + /* WINED3DSIH_RCP */ shader_hw_rcp, + /* WINED3DSIH_REP */ shader_hw_rep, + /* WINED3DSIH_RET */ shader_hw_ret, + /* WINED3DSIH_ROUND_NI */ NULL, + /* WINED3DSIH_RSQ */ shader_hw_scalar_op, + /* WINED3DSIH_SAMPLE */ NULL, + /* WINED3DSIH_SAMPLE_GRAD */ NULL, + /* WINED3DSIH_SAMPLE_LOD */ NULL, + /* WINED3DSIH_SETP */ NULL, + /* WINED3DSIH_SGE */ shader_hw_map2gl, + /* WINED3DSIH_SGN */ shader_hw_sgn, + /* WINED3DSIH_SINCOS */ shader_hw_sincos, + /* WINED3DSIH_SLT */ shader_hw_map2gl, + /* WINED3DSIH_SQRT */ NULL, + /* WINED3DSIH_SUB */ shader_hw_map2gl, + /* WINED3DSIH_TEX */ pshader_hw_tex, + /* WINED3DSIH_TEXBEM */ pshader_hw_texbem, + /* WINED3DSIH_TEXBEML */ pshader_hw_texbem, + /* WINED3DSIH_TEXCOORD */ pshader_hw_texcoord, + /* WINED3DSIH_TEXDEPTH */ pshader_hw_texdepth, + /* WINED3DSIH_TEXDP3 */ pshader_hw_texdp3, + /* WINED3DSIH_TEXDP3TEX */ pshader_hw_texdp3tex, + /* WINED3DSIH_TEXKILL */ pshader_hw_texkill, + /* WINED3DSIH_TEXLDD */ shader_hw_texldd, + /* WINED3DSIH_TEXLDL */ shader_hw_texldl, + /* WINED3DSIH_TEXM3x2DEPTH */ pshader_hw_texm3x2depth, + /* WINED3DSIH_TEXM3x2PAD */ pshader_hw_texm3x2pad, + /* WINED3DSIH_TEXM3x2TEX */ pshader_hw_texm3x2tex, + /* WINED3DSIH_TEXM3x3 */ pshader_hw_texm3x3, + /* WINED3DSIH_TEXM3x3DIFF */ NULL, + /* WINED3DSIH_TEXM3x3PAD */ pshader_hw_texm3x3pad, + /* WINED3DSIH_TEXM3x3SPEC */ pshader_hw_texm3x3spec, + /* WINED3DSIH_TEXM3x3TEX */ pshader_hw_texm3x3tex, + /* WINED3DSIH_TEXM3x3VSPEC */ pshader_hw_texm3x3vspec, + /* WINED3DSIH_TEXREG2AR */ pshader_hw_texreg2ar, + /* WINED3DSIH_TEXREG2GB */ pshader_hw_texreg2gb, + /* WINED3DSIH_TEXREG2RGB */ pshader_hw_texreg2rgb, + /* WINED3DSIH_UDIV */ NULL, + /* WINED3DSIH_USHR */ NULL, + /* WINED3DSIH_UTOF */ NULL, + /* WINED3DSIH_XOR */ NULL, }; static BOOL get_bool_const(const struct wined3d_shader_instruction *ins, @@ -5266,26 +5330,29 @@ static void record_instruction(struct list *list, const struct wined3d_shader_in dst_param = HeapAlloc(GetProcessHeap(), 0, sizeof(*dst_param)); if(!dst_param) goto free; *dst_param = *ins->dst; - if(ins->dst->reg.rel_addr) + if (ins->dst->reg.idx[0].rel_addr) { - rel_addr = HeapAlloc(GetProcessHeap(), 0, sizeof(*dst_param->reg.rel_addr)); - if(!rel_addr) goto free; - *rel_addr = *ins->dst->reg.rel_addr; - dst_param->reg.rel_addr = rel_addr; + rel_addr = HeapAlloc(GetProcessHeap(), 0, sizeof(*rel_addr)); + if (!rel_addr) + goto free; + *rel_addr = *ins->dst->reg.idx[0].rel_addr; + dst_param->reg.idx[0].rel_addr = rel_addr; } rec->ins.dst = dst_param; src_param = HeapAlloc(GetProcessHeap(), 0, sizeof(*src_param) * ins->src_count); - if(!src_param) goto free; - for(i = 0; i < ins->src_count; i++) + if (!src_param) + goto free; + for (i = 0; i < ins->src_count; ++i) { src_param[i] = ins->src[i]; - if(ins->src[i].reg.rel_addr) + if (ins->src[i].reg.idx[0].rel_addr) { rel_addr = HeapAlloc(GetProcessHeap(), 0, sizeof(*rel_addr)); - if(!rel_addr) goto free; - *rel_addr = *ins->src[i].reg.rel_addr; - src_param[i].reg.rel_addr = rel_addr; + if (!rel_addr) + goto free; + *rel_addr = *ins->src[i].reg.idx[0].rel_addr; + src_param[i].reg.idx[0].rel_addr = rel_addr; } } rec->ins.src = src_param; @@ -5296,14 +5363,14 @@ free: ERR("Out of memory\n"); if(dst_param) { - HeapFree(GetProcessHeap(), 0, (void *) dst_param->reg.rel_addr); + HeapFree(GetProcessHeap(), 0, (void *)dst_param->reg.idx[0].rel_addr); HeapFree(GetProcessHeap(), 0, dst_param); } if(src_param) { for(i = 0; i < ins->src_count; i++) { - HeapFree(GetProcessHeap(), 0, (void *) src_param[i].reg.rel_addr); + HeapFree(GetProcessHeap(), 0, (void *)src_param[i].reg.idx[0].rel_addr); } HeapFree(GetProcessHeap(), 0, src_param); } @@ -5318,23 +5385,46 @@ static void free_recorded_instruction(struct list *list) LIST_FOR_EACH_ENTRY_SAFE(rec_ins, entry2, list, struct recorded_instruction, entry) { list_remove(&rec_ins->entry); - if(rec_ins->ins.dst) + if (rec_ins->ins.dst) { - HeapFree(GetProcessHeap(), 0, (void *) rec_ins->ins.dst->reg.rel_addr); - HeapFree(GetProcessHeap(), 0, (void *) rec_ins->ins.dst); + HeapFree(GetProcessHeap(), 0, (void *)rec_ins->ins.dst->reg.idx[0].rel_addr); + HeapFree(GetProcessHeap(), 0, (void *)rec_ins->ins.dst); } - if(rec_ins->ins.src) + if (rec_ins->ins.src) { - for(i = 0; i < rec_ins->ins.src_count; i++) + for (i = 0; i < rec_ins->ins.src_count; ++i) { - HeapFree(GetProcessHeap(), 0, (void *) rec_ins->ins.src[i].reg.rel_addr); + HeapFree(GetProcessHeap(), 0, (void *)rec_ins->ins.src[i].reg.idx[0].rel_addr); } - HeapFree(GetProcessHeap(), 0, (void *) rec_ins->ins.src); + HeapFree(GetProcessHeap(), 0, (void *)rec_ins->ins.src); } HeapFree(GetProcessHeap(), 0, rec_ins); } } +static void pop_control_frame(const struct wined3d_shader_instruction *ins) +{ + struct shader_arb_ctx_priv *priv = ins->ctx->backend_data; + struct control_frame *control_frame; + + if (ins->handler_idx == WINED3DSIH_ENDLOOP || ins->handler_idx == WINED3DSIH_ENDREP) + { + struct list *e = list_head(&priv->control_frames); + control_frame = LIST_ENTRY(e, struct control_frame, entry); + list_remove(&control_frame->entry); + HeapFree(GetProcessHeap(), 0, control_frame); + priv->loop_depth--; + } + else if (ins->handler_idx == WINED3DSIH_ENDIF) + { + /* Non-ifc ENDIFs were already handled previously. */ + struct list *e = list_head(&priv->control_frames); + control_frame = LIST_ENTRY(e, struct control_frame, entry); + list_remove(&control_frame->entry); + HeapFree(GetProcessHeap(), 0, control_frame); + } +} + static void shader_arb_handle_instruction(const struct wined3d_shader_instruction *ins) { SHADER_HANDLER hw_fct; struct shader_arb_ctx_priv *priv = ins->ctx->backend_data; @@ -5369,7 +5459,7 @@ static void shader_arb_handle_instruction(const struct wined3d_shader_instructio list_init(&priv->record); priv->recording = TRUE; control_frame->outer_loop = TRUE; - get_loop_control_const(ins, shader, ins->src[0].reg.idx, &control_frame->loop_control); + get_loop_control_const(ins, shader, ins->src[0].reg.idx[0].offset, &control_frame->loop_control); return; /* Instruction is handled */ } /* Record this loop in the outer loop's recording */ @@ -5466,8 +5556,9 @@ static void shader_arb_handle_instruction(const struct wined3d_shader_instructio list_add_head(&priv->control_frames, &control_frame->entry); control_frame->type = IF; - bool_const = get_bool_const(ins, shader, ins->src[0].reg.idx); - if(ins->src[0].modifiers == WINED3DSPSM_NOT) bool_const = !bool_const; + bool_const = get_bool_const(ins, shader, ins->src[0].reg.idx[0].offset); + if (ins->src[0].modifiers == WINED3DSPSM_NOT) + bool_const = !bool_const; if (!priv->muted && !bool_const) { shader_addline(buffer, "#if(FALSE){\n"); @@ -5503,6 +5594,8 @@ static void shader_arb_handle_instruction(const struct wined3d_shader_instructio return; /* Instruction is handled. */ } /* In case of an ifc, generate a HW shader instruction */ + if (control_frame->type != IFC) + ERR("Control frame does not match.\n"); } else if(ins->handler_idx == WINED3DSIH_ENDIF) { @@ -5517,9 +5610,16 @@ static void shader_arb_handle_instruction(const struct wined3d_shader_instructio HeapFree(GetProcessHeap(), 0, control_frame); return; /* Instruction is handled */ } + /* In case of an ifc, generate a HW shader instruction */ + if (control_frame->type != IFC) + ERR("Control frame does not match.\n"); } - if(priv->muted) return; + if(priv->muted) + { + pop_control_frame(ins); + return; + } /* Select handler */ hw_fct = shader_arb_instruction_handler_table[ins->handler_idx]; @@ -5532,27 +5632,18 @@ static void shader_arb_handle_instruction(const struct wined3d_shader_instructio } hw_fct(ins); - if(ins->handler_idx == WINED3DSIH_ENDLOOP || ins->handler_idx == WINED3DSIH_ENDREP) - { - struct list *e = list_head(&priv->control_frames); - control_frame = LIST_ENTRY(e, struct control_frame, entry); - list_remove(&control_frame->entry); - HeapFree(GetProcessHeap(), 0, control_frame); - priv->loop_depth--; - } - else if(ins->handler_idx == WINED3DSIH_ENDIF) - { - /* Non-ifc ENDIFs don't reach that place because of the return in the if block above */ - struct list *e = list_head(&priv->control_frames); - control_frame = LIST_ENTRY(e, struct control_frame, entry); - list_remove(&control_frame->entry); - HeapFree(GetProcessHeap(), 0, control_frame); - } - + pop_control_frame(ins); shader_arb_add_instruction_modifiers(ins); } +static BOOL shader_arb_has_ffp_proj_control(void *shader_priv) +{ + struct shader_arb_priv *priv = shader_priv; + + return priv->ffp_proj_control; +} + const struct wined3d_shader_backend_ops arb_program_shader_backend = { shader_arb_handle_instruction, @@ -5569,6 +5660,7 @@ const struct wined3d_shader_backend_ops arb_program_shader_backend = shader_arb_context_destroyed, shader_arb_get_caps, shader_arb_color_fixup_supported, + shader_arb_has_ffp_proj_control, }; /* ARB_fragment_program fixed function pipeline replacement definitions */ @@ -5582,10 +5674,9 @@ struct arbfp_ffp_desc { struct ffp_frag_desc parent; GLuint shader; - unsigned int num_textures_used; }; -/* Context activation and GL locking are done by the caller. */ +/* Context activation is done by the caller. */ static void arbfp_enable(const struct wined3d_gl_info *gl_info, BOOL enable) { if (enable) @@ -5600,31 +5691,29 @@ static void arbfp_enable(const struct wined3d_gl_info *gl_info, BOOL enable) } } -static HRESULT arbfp_alloc(struct wined3d_device *device) +static void *arbfp_alloc(const struct wined3d_shader_backend_ops *shader_backend, void *shader_priv) { struct shader_arb_priv *priv; - /* Share private data between the shader backend and the pipeline replacement, if both - * are the arb implementation. This is needed to figure out whether ARBfp should be disabled - * if no pixel shader is bound or not - */ - if (device->shader_backend == &arb_program_shader_backend) - { - device->fragment_priv = device->shader_priv; - } - else - { - device->fragment_priv = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct shader_arb_priv)); - if (!device->fragment_priv) return E_OUTOFMEMORY; - } - priv = device->fragment_priv; + + /* Share private data between the shader backend and the pipeline + * replacement, if both are the arb implementation. This is needed to + * figure out whether ARBfp should be disabled if no pixel shader is bound + * or not. */ + if (shader_backend == &arb_program_shader_backend) + priv = shader_priv; + else if (!(priv = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*priv)))) + return NULL; + if (wine_rb_init(&priv->fragment_shaders, &wined3d_ffp_frag_program_rb_functions) == -1) { ERR("Failed to initialize rbtree.\n"); - HeapFree(GetProcessHeap(), 0, device->fragment_priv); - return E_OUTOFMEMORY; + if (priv != shader_priv) + HeapFree(GetProcessHeap(), 0, priv); + return NULL; } priv->use_arbfp_fixed_func = TRUE; - return WINED3D_OK; + + return priv; } /* Context activation is done by the caller. */ @@ -5633,11 +5722,9 @@ static void arbfp_free_ffpshader(struct wine_rb_entry *entry, void *context) const struct wined3d_gl_info *gl_info = context; struct arbfp_ffp_desc *entry_arb = WINE_RB_ENTRY_VALUE(entry, struct arbfp_ffp_desc, parent.entry); - ENTER_GL(); GL_EXTCALL(glDeleteProgramsARB(1, &entry_arb->shader)); checkGLcall("glDeleteProgramsARB(1, &entry_arb->shader)"); HeapFree(GetProcessHeap(), 0, entry_arb); - LEAVE_GL(); } /* Context activation is done by the caller. */ @@ -5656,6 +5743,8 @@ static void arbfp_free(struct wined3d_device *device) static void arbfp_get_caps(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps) { + caps->wined3d_caps = WINED3D_FRAGMENT_CAP_PROJ_CONTROL + | WINED3D_FRAGMENT_CAP_SRGB_WRITE; caps->PrimitiveMiscCaps = WINED3DPMISCCAPS_TSSARGTEMP; caps->TextureOpCaps = WINED3DTEXOPCAPS_DISABLE | WINED3DTEXOPCAPS_SELECTARG1 | @@ -5757,14 +5846,10 @@ static void set_bumpmat_arbfp(struct wined3d_context *context, const struct wine if (use_ps(state)) { + /* The pixel shader has to know the bump env matrix. Do a constants + * update. */ if (stage && (state->pixel_shader->reg_maps.bumpmat & (1 << stage))) - { - /* The pixel shader has to know the bump env matrix. Do a constants update if it isn't scheduled - * anyway - */ - if (!isStateDirty(context, STATE_PIXELSHADERCONSTANT)) - context_apply_state(context, state, STATE_PIXELSHADERCONSTANT); - } + context->load_constants = 1; if(device->shader_backend == &arb_program_shader_backend) { /* Exit now, don't set the bumpmat below, otherwise we may overwrite pixel shader constants */ @@ -5797,14 +5882,10 @@ static void tex_bumpenvlum_arbfp(struct wined3d_context *context, if (use_ps(state)) { + /* The pixel shader has to know the luminance offset. Do a constants + * update. */ if (stage && (state->pixel_shader->reg_maps.luminanceparams & (1 << stage))) - { - /* The pixel shader has to know the luminance offset. Do a constants update if it - * isn't scheduled anyway - */ - if (!isStateDirty(context, STATE_PIXELSHADERCONSTANT)) - context_apply_state(context, state, STATE_PIXELSHADERCONSTANT); - } + context->load_constants = 1; if(device->shader_backend == &arb_program_shader_backend) { /* Exit now, don't set the bumpmat below, otherwise we may overwrite pixel shader constants */ @@ -5904,7 +5985,6 @@ static void gen_ffp_instr(struct wined3d_shader_buffer *buffer, unsigned int sta { const char *dstmask, *dstreg, *arg0, *arg1, *arg2; unsigned int mul = 1; - BOOL mul_final_dest = FALSE; if(color && alpha) dstmask = ""; else if(color) dstmask = ".xyz"; @@ -5936,11 +6016,6 @@ static void gen_ffp_instr(struct wined3d_shader_buffer *buffer, unsigned int sta /* FALLTHROUGH */ case WINED3D_TOP_MODULATE_2X: mul *= 2; - if (!strcmp(dstreg, "result.color")) - { - dstreg = "ret"; - mul_final_dest = TRUE; - } /* FALLTHROUGH */ case WINED3D_TOP_MODULATE: shader_addline(buffer, "MUL %s%s, %s, %s;\n", dstreg, dstmask, arg1, arg2); @@ -5948,11 +6023,6 @@ static void gen_ffp_instr(struct wined3d_shader_buffer *buffer, unsigned int sta case WINED3D_TOP_ADD_SIGNED_2X: mul = 2; - if (!strcmp(dstreg, "result.color")) - { - dstreg = "ret"; - mul_final_dest = TRUE; - } /* FALLTHROUGH */ case WINED3D_TOP_ADD_SIGNED: shader_addline(buffer, "SUB arg2, %s, const.w;\n", arg2); @@ -6013,11 +6083,6 @@ static void gen_ffp_instr(struct wined3d_shader_buffer *buffer, unsigned int sta case WINED3D_TOP_DOTPRODUCT3: mul = 4; - if (!strcmp(dstreg, "result.color")) - { - dstreg = "ret"; - mul_final_dest = TRUE; - } shader_addline(buffer, "SUB arg1, %s, const.w;\n", arg1); shader_addline(buffer, "SUB arg2, %s, const.w;\n", arg2); shader_addline(buffer, "DP3_SAT %s%s, arg1, arg2;\n", dstreg, dstmask); @@ -6041,11 +6106,10 @@ static void gen_ffp_instr(struct wined3d_shader_buffer *buffer, unsigned int sta FIXME("Unhandled texture op %08x\n", op); } - if(mul == 2) { - shader_addline(buffer, "MUL_SAT %s%s, %s, const.y;\n", mul_final_dest ? "result.color" : dstreg, dstmask, dstreg); - } else if(mul == 4) { - shader_addline(buffer, "MUL_SAT %s%s, %s, const.z;\n", mul_final_dest ? "result.color" : dstreg, dstmask, dstreg); - } + if (mul == 2) + shader_addline(buffer, "MUL_SAT %s%s, %s, const.y;\n", dstreg, dstmask, dstreg); + else if (mul == 4) + shader_addline(buffer, "MUL_SAT %s%s, %s, const.z;\n", dstreg, dstmask, dstreg); } static GLuint gen_arbfp_ffp_shader(const struct ffp_frag_settings *settings, const struct wined3d_gl_info *gl_info) @@ -6160,7 +6224,7 @@ static GLuint gen_arbfp_ffp_shader(const struct ffp_frag_settings *settings, con if(tfactor_used) { shader_addline(&buffer, "PARAM tfactor = program.env[%u];\n", ARB_FFP_CONST_TFACTOR); } - shader_addline(&buffer, "PARAM specular_enable = program.env[%u];\n", ARB_FFP_CONST_SPECULAR_ENABLE); + shader_addline(&buffer, "PARAM specular_enable = program.env[%u];\n", ARB_FFP_CONST_SPECULAR_ENABLE); if(settings->sRGB_write) { shader_addline(&buffer, "PARAM srgb_consts1 = {%f, %f, %f, %f};\n", @@ -6344,7 +6408,6 @@ static void fragment_prog_arbfp(struct wined3d_context *context, const struct wi const struct wined3d_device *device = context->swapchain->device; const struct wined3d_gl_info *gl_info = context->gl_info; struct shader_arb_priv *priv = device->fragment_priv; - BOOL use_vshader = use_vs(state); BOOL use_pshader = use_ps(state); struct ffp_frag_settings settings; const struct arbfp_ffp_desc *desc; @@ -6365,9 +6428,9 @@ static void fragment_prog_arbfp(struct wined3d_context *context, const struct wi state_texfactor_arbfp(context, state, STATE_RENDER(WINED3D_RS_TEXTUREFACTOR)); state_arb_specularenable(context, state, STATE_RENDER(WINED3D_RS_SPECULARENABLE)); } - else if (use_pshader && !isStateDirty(context, context->state_table[STATE_VSHADER].representative)) + else if (use_pshader) { - device->shader_backend->shader_select(context, use_pshader, use_vshader); + context->select_shader = 1; } return; } @@ -6385,15 +6448,8 @@ static void fragment_prog_arbfp(struct wined3d_context *context, const struct wi ERR("Out of memory\n"); return; } - new_desc->num_textures_used = 0; - for (i = 0; i < gl_info->limits.texture_stages; ++i) - { - if (settings.op[i].cop == WINED3D_TOP_DISABLE) - break; - new_desc->num_textures_used = i; - } - memcpy(&new_desc->parent.settings, &settings, sizeof(settings)); + new_desc->parent.settings = settings; new_desc->shader = gen_arbfp_ffp_shader(&settings, gl_info); add_ffp_frag_shader(&priv->fragment_shaders, &new_desc->parent); TRACE("Allocated fixed function replacement shader descriptor %p\n", new_desc); @@ -6424,24 +6480,8 @@ static void fragment_prog_arbfp(struct wined3d_context *context, const struct wi context->last_was_pshader = TRUE; } - /* Finally, select the shader. If a pixel shader is used, it will be set and enabled by the shader backend. - * If this shader backend is arbfp(most likely), then it will simply overwrite the last fixed function - * replacement shader. If the shader backend is not ARB, it currently is important that the opengl implementation - * type overwrites GL_ARB_fragment_program. This is currently the case with GLSL. If we really want to use - * atifs or nvrc pixel shaders with arb fragment programs we'd have to disable GL_FRAGMENT_PROGRAM_ARB here - * - * Don't call shader_select if the vertex shader is dirty, because it will be called later on by the vertex - * shader handler. - */ - if (!isStateDirty(context, context->state_table[STATE_VSHADER].representative)) - { - device->shader_backend->shader_select(context, use_pshader, use_vshader); - - if (!isStateDirty(context, STATE_VERTEXSHADERCONSTANT) && (use_vshader || use_pshader)) - context_apply_state(context, state, STATE_VERTEXSHADERCONSTANT); - } - if (use_pshader) - context_apply_state(context, state, STATE_PIXELSHADERCONSTANT); + context->select_shader = 1; + context->load_constants = 1; } /* We can't link the fog states to the fragment state directly since the @@ -6495,20 +6535,6 @@ static void textransform(struct wined3d_context *context, const struct wined3d_s fragment_prog_arbfp(context, state, state_id); } -static void state_srgbwrite(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) -{ - const struct wined3d_gl_info *gl_info = context->gl_info; - const struct wined3d_surface *rt = state->fb->render_targets[0]; - - TRACE("context %p, state %p, state_id %#x.\n", context, state, state_id); - - if (state->render_states[WINED3D_RS_SRGBWRITEENABLE] - && rt->resource.format->flags & WINED3DFMT_FLAG_SRGB_WRITE) - gl_info->gl_ops.gl.p_glEnable(GL_FRAMEBUFFER_SRGB); - else - gl_info->gl_ops.gl.p_glDisable(GL_FRAMEBUFFER_SRGB); -} - static const struct StateEntryTemplate arbfp_fragmentstate_template[] = { {STATE_RENDER(WINED3D_RS_TEXTUREFACTOR), { STATE_RENDER(WINED3D_RS_TEXTUREFACTOR), state_texfactor_arbfp }, WINED3D_GL_EXT_NONE }, @@ -6661,7 +6687,6 @@ const struct fragment_pipeline arbfp_fragment_pipeline = { arbfp_free, shader_arb_color_fixup_supported, arbfp_fragmentstate_template, - TRUE /* We can disable projected textures */ }; struct arbfp_blit_priv { @@ -6688,7 +6713,6 @@ static void arbfp_blit_free(struct wined3d_device *device) const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; struct arbfp_blit_priv *priv = device->blit_priv; - ENTER_GL(); GL_EXTCALL(glDeleteProgramsARB(1, &priv->yuy2_rect_shader)); GL_EXTCALL(glDeleteProgramsARB(1, &priv->yuy2_2d_shader)); GL_EXTCALL(glDeleteProgramsARB(1, &priv->uyvy_rect_shader)); @@ -6701,7 +6725,6 @@ static void arbfp_blit_free(struct wined3d_device *device) if (priv->palette_texture) gl_info->gl_ops.gl.p_glDeleteTextures(1, &priv->palette_texture); - LEAVE_GL(); HeapFree(GetProcessHeap(), 0, device->blit_priv); device->blit_priv = NULL; @@ -6955,11 +6978,10 @@ static GLuint gen_p8_shader(struct arbfp_blit_priv *priv, return 0; } - ENTER_GL(); GL_EXTCALL(glGenProgramsARB(1, &shader)); GL_EXTCALL(glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, shader)); - LEAVE_GL(); - if(!shader) { + if (!shader) + { shader_buffer_free(&buffer); return 0; } @@ -6983,7 +7005,6 @@ static GLuint gen_p8_shader(struct arbfp_blit_priv *priv, shader_addline(&buffer, "TEX result.color, index.a, texture[1], 1D;\n"); shader_addline(&buffer, "END\n"); - ENTER_GL(); GL_EXTCALL(glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, strlen(buffer.buffer), buffer.buffer)); checkGLcall("glProgramStringARB()"); @@ -7002,7 +7023,6 @@ static GLuint gen_p8_shader(struct arbfp_blit_priv *priv, priv->p8_2d_shader = shader; shader_buffer_free(&buffer); - LEAVE_GL(); return shader; } @@ -7018,8 +7038,6 @@ static void upload_palette(const struct wined3d_surface *surface, struct wined3d d3dfmt_p8_init_palette(surface, table, colorkey); - ENTER_GL(); - if (gl_info->supported[APPLE_CLIENT_STORAGE]) { gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_FALSE); @@ -7050,7 +7068,6 @@ static void upload_palette(const struct wined3d_surface *surface, struct wined3d /* Switch back to unit 0 in which the 2D texture will be stored. */ context_active_texture(context, gl_info, 0); - LEAVE_GL(); } /* Context activation is done by the caller. */ @@ -7069,13 +7086,12 @@ static GLuint gen_yuv_shader(struct arbfp_blit_priv *priv, const struct wined3d_ return 0; } - ENTER_GL(); GL_EXTCALL(glGenProgramsARB(1, &shader)); checkGLcall("GL_EXTCALL(glGenProgramsARB(1, &shader))"); GL_EXTCALL(glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, shader)); checkGLcall("glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, shader)"); - LEAVE_GL(); - if(!shader) { + if (!shader) + { shader_buffer_free(&buffer); return 0; } @@ -7162,7 +7178,6 @@ static GLuint gen_yuv_shader(struct arbfp_blit_priv *priv, const struct wined3d_ shader_addline(&buffer, "MAD result.color.z, chroma.y, yuv_coef.w, luminance.%c;\n", luminance_component); shader_addline(&buffer, "END\n"); - ENTER_GL(); GL_EXTCALL(glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, strlen(buffer.buffer), buffer.buffer)); checkGLcall("glProgramStringARB()"); @@ -7184,7 +7199,6 @@ static GLuint gen_yuv_shader(struct arbfp_blit_priv *priv, const struct wined3d_ } shader_buffer_free(&buffer); - LEAVE_GL(); switch (yuv_fixup) { @@ -7226,10 +7240,8 @@ static HRESULT arbfp_blit_set(void *blit_priv, struct wined3d_context *context, if (surface->flags & SFLAG_CONVERTED) { - ENTER_GL(); gl_info->gl_ops.gl.p_glEnable(textype); checkGLcall("glEnable(textype)"); - LEAVE_GL(); return WINED3D_OK; } @@ -7238,10 +7250,8 @@ static HRESULT arbfp_blit_set(void *blit_priv, struct wined3d_context *context, TRACE("Fixup:\n"); dump_color_fixup_desc(surface->resource.format->color_fixup); /* Don't bother setting up a shader for unconverted formats */ - ENTER_GL(); gl_info->gl_ops.gl.p_glEnable(textype); checkGLcall("glEnable(textype)"); - LEAVE_GL(); return WINED3D_OK; } @@ -7270,23 +7280,19 @@ static HRESULT arbfp_blit_set(void *blit_priv, struct wined3d_context *context, default: FIXME("Unsupported complex fixup %#x, not setting a shader\n", fixup); - ENTER_GL(); gl_info->gl_ops.gl.p_glEnable(textype); checkGLcall("glEnable(textype)"); - LEAVE_GL(); return E_NOTIMPL; } if (!shader) shader = gen_yuv_shader(priv, gl_info, fixup, textype); - ENTER_GL(); gl_info->gl_ops.gl.p_glEnable(GL_FRAGMENT_PROGRAM_ARB); checkGLcall("glEnable(GL_FRAGMENT_PROGRAM_ARB)"); GL_EXTCALL(glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, shader)); checkGLcall("glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, shader)"); GL_EXTCALL(glProgramLocalParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, 0, size)); checkGLcall("glProgramLocalParameter4fvARB"); - LEAVE_GL(); return WINED3D_OK; } @@ -7294,7 +7300,6 @@ static HRESULT arbfp_blit_set(void *blit_priv, struct wined3d_context *context, /* Context activation is done by the caller. */ static void arbfp_blit_unset(const struct wined3d_gl_info *gl_info) { - ENTER_GL(); gl_info->gl_ops.gl.p_glDisable(GL_FRAGMENT_PROGRAM_ARB); checkGLcall("glDisable(GL_FRAGMENT_PROGRAM_ARB)"); gl_info->gl_ops.gl.p_glDisable(GL_TEXTURE_2D); @@ -7309,7 +7314,6 @@ static void arbfp_blit_unset(const struct wined3d_gl_info *gl_info) gl_info->gl_ops.gl.p_glDisable(GL_TEXTURE_RECTANGLE_ARB); checkGLcall("glDisable(GL_TEXTURE_RECTANGLE_ARB)"); } - LEAVE_GL(); } static BOOL arbfp_blit_supported(const struct wined3d_gl_info *gl_info, enum wined3d_blit_op blit_op, @@ -7406,13 +7410,9 @@ HRESULT arbfp_blit_surface(struct wined3d_device *device, DWORD filter, arbfp_blit_set(device->blit_priv, context, src_surface); - ENTER_GL(); - /* Draw a textured quad */ draw_textured_quad(src_surface, context, &src_rect, &dst_rect, filter); - LEAVE_GL(); - /* Leave the opengl state valid for blitting */ arbfp_blit_unset(context->gl_info); diff --git a/dll/directx/wine/wined3d/ati_fragment_shader.c b/dll/directx/wine/wined3d/ati_fragment_shader.c index 1d3cfabbce6..a8e4dfb3dcd 100644 --- a/dll/directx/wine/wined3d/ati_fragment_shader.c +++ b/dll/directx/wine/wined3d/ati_fragment_shader.c @@ -29,7 +29,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader); WINE_DECLARE_DEBUG_CHANNEL(d3d); -/* GL locking for state handlers is done by the caller. */ +/* Context activation for state handlers is done by the caller. */ /* Some private defines, Constant associations, etc. * Env bump matrix and per stage constant should be independent, @@ -157,6 +157,7 @@ static const char *debug_rep(GLuint rep) { case GL_RED: return "GL_RED"; case GL_GREEN: return "GL_GREEN"; case GL_BLUE: return "GL_BLUE"; + case GL_ALPHA: return "GL_ALPHA"; default: return "unknown argrep"; } } @@ -468,11 +469,11 @@ static GLuint gen_ati_shader(const struct texture_stage_op op[MAX_TEXTURES], con */ wrap_op3(gl_info, GL_MAD_ATI, GL_REG_0_ATI + stage + 1, GL_ALPHA, GL_NONE, GL_REG_0_ATI + stage, GL_RED, argmodextra_y, - ATI_FFP_CONST_BUMPMAT(stage), GL_BLUE, GL_NONE, + ATI_FFP_CONST_BUMPMAT(stage), GL_BLUE, GL_2X_BIT_ATI | GL_BIAS_BIT_ATI, GL_REG_0_ATI + stage + 1, GL_GREEN, GL_NONE); wrap_op3(gl_info, GL_MAD_ATI, GL_REG_0_ATI + stage + 1, GL_GREEN_BIT_ATI, GL_NONE, GL_REG_0_ATI + stage, GL_GREEN, argmodextra_y, - ATI_FFP_CONST_BUMPMAT(stage), GL_ALPHA, GL_NONE, + ATI_FFP_CONST_BUMPMAT(stage), GL_ALPHA, GL_2X_BIT_ATI | GL_BIAS_BIT_ATI, GL_REG_0_ATI + stage + 1, GL_ALPHA, GL_NONE); } @@ -857,10 +858,10 @@ static void set_tex_op_atifs(struct wined3d_context *context, const struct wined { if (settings.op[i].cop == WINED3D_TOP_DISABLE) break; - new_desc->num_textures_used = i; + new_desc->num_textures_used = i + 1; } - memcpy(&new_desc->parent.settings, &settings, sizeof(settings)); + new_desc->parent.settings = settings; new_desc->shader = gen_ati_shader(settings.op, gl_info); add_ffp_frag_shader(&priv->fragment_shaders, &new_desc->parent); TRACE("Allocated fixed function replacement shader descriptor %p\n", new_desc); @@ -926,9 +927,6 @@ static void textransform(struct wined3d_context *context, const struct wined3d_s static void atifs_apply_pixelshader(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { - const struct wined3d_device *device = context->swapchain->device; - BOOL use_vshader = use_vs(state); - context->last_was_pshader = use_ps(state); /* The ATIFS code does not support pixel shaders currently, but we have to * provide a state handler to call shader_select to select a vertex shader @@ -943,13 +941,8 @@ static void atifs_apply_pixelshader(struct wined3d_context *context, const struc * startup, and blitting disables all shaders and dirtifies all shader * states. If atifs can deal with this it keeps the rest of the code * simpler. */ - if (!isStateDirty(context, context->state_table[STATE_VSHADER].representative)) - { - device->shader_backend->shader_select(context, FALSE, use_vshader); - - if (!isStateDirty(context, STATE_VERTEXSHADERCONSTANT) && use_vshader) - context_apply_state(context, state, STATE_VERTEXSHADERCONSTANT); - } + context->select_shader = 1; + context->load_constants = 1; } static void atifs_srgbwriteenable(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) @@ -1092,7 +1085,7 @@ static const struct StateEntryTemplate atifs_fragmentstate_template[] = { {0 /* Terminate */, { 0, 0 }, WINED3D_GL_EXT_NONE }, }; -/* Context activation and GL locking are done by the caller. */ +/* Context activation is done by the caller. */ static void atifs_enable(const struct wined3d_gl_info *gl_info, BOOL enable) { if (enable) @@ -1109,6 +1102,7 @@ static void atifs_enable(const struct wined3d_gl_info *gl_info, BOOL enable) static void atifs_get_caps(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps) { + caps->wined3d_caps = WINED3D_FRAGMENT_CAP_PROJ_CONTROL; caps->PrimitiveMiscCaps = WINED3DPMISCCAPS_TSSARGTEMP; caps->TextureOpCaps = WINED3DTEXOPCAPS_DISABLE | WINED3DTEXOPCAPS_SELECTARG1 | @@ -1154,24 +1148,21 @@ static void atifs_get_caps(const struct wined3d_gl_info *gl_info, struct fragmen caps->MaxSimultaneousTextures = 6; } -static HRESULT atifs_alloc(struct wined3d_device *device) +static void *atifs_alloc(const struct wined3d_shader_backend_ops *shader_backend, void *shader_priv) { struct atifs_private_data *priv; - device->fragment_priv = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct atifs_private_data)); - if (!device->fragment_priv) - { - ERR("Out of memory\n"); - return E_OUTOFMEMORY; - } - priv = device->fragment_priv; + if (!(priv = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*priv)))) + return NULL; + if (wine_rb_init(&priv->fragment_shaders, &wined3d_ffp_frag_program_rb_functions) == -1) { ERR("Failed to initialize rbtree.\n"); - HeapFree(GetProcessHeap(), 0, device->fragment_priv); - return E_OUTOFMEMORY; + HeapFree(GetProcessHeap(), 0, priv); + return NULL; } - return WINED3D_OK; + + return priv; } /* Context activation is done by the caller. */ @@ -1181,11 +1172,9 @@ static void atifs_free_ffpshader(struct wine_rb_entry *entry, void *context) const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; struct atifs_ffp_desc *entry_ati = WINE_RB_ENTRY_VALUE(entry, struct atifs_ffp_desc, parent.entry); - ENTER_GL(); GL_EXTCALL(glDeleteFragmentShaderATI(entry_ati->shader)); checkGLcall("glDeleteFragmentShaderATI(entry->shader)"); HeapFree(GetProcessHeap(), 0, entry_ati); - LEAVE_GL(); } /* Context activation is done by the caller. */ @@ -1227,5 +1216,4 @@ const struct fragment_pipeline atifs_fragment_pipeline = { atifs_free, atifs_color_fixup_supported, atifs_fragmentstate_template, - TRUE /* We can disable projected textures */ }; diff --git a/dll/directx/wine/wined3d/buffer.c b/dll/directx/wine/wined3d/buffer.c index 1e9a8b3b56d..0fc122dbaa0 100644 --- a/dll/directx/wine/wined3d/buffer.c +++ b/dll/directx/wine/wined3d/buffer.c @@ -98,10 +98,8 @@ static void delete_gl_buffer(struct wined3d_buffer *This, const struct wined3d_g { if(!This->buffer_object) return; - ENTER_GL(); GL_EXTCALL(glDeleteBuffersARB(1, &This->buffer_object)); checkGLcall("glDeleteBuffersARB"); - LEAVE_GL(); This->buffer_object = 0; if(This->query) @@ -120,8 +118,6 @@ static void buffer_create_buffer_object(struct wined3d_buffer *This, const struc TRACE("Creating an OpenGL vertex buffer object for wined3d_buffer %p with usage %s.\n", This, debug_d3dusage(This->resource.usage)); - ENTER_GL(); - /* Make sure that the gl error is cleared. Do not use checkGLcall * here because checkGLcall just prints a fixme and continues. However, * if an error during VBO creation occurs we can fall back to non-vbo operation @@ -140,7 +136,6 @@ static void buffer_create_buffer_object(struct wined3d_buffer *This, const struc if (!This->buffer_object || error != GL_NO_ERROR) { ERR("Failed to create a VBO with error %s (%#x)\n", debug_glerror(error), error); - LEAVE_GL(); goto fail; } @@ -151,7 +146,6 @@ static void buffer_create_buffer_object(struct wined3d_buffer *This, const struc if (error != GL_NO_ERROR) { ERR("Failed to bind the VBO with error %s (%#x)\n", debug_glerror(error), error); - LEAVE_GL(); goto fail; } @@ -188,7 +182,6 @@ static void buffer_create_buffer_object(struct wined3d_buffer *This, const struc */ GL_EXTCALL(glBufferDataARB(This->buffer_type_hint, This->resource.size, This->resource.allocatedMemory, gl_usage)); error = gl_info->gl_ops.gl.p_glGetError(); - LEAVE_GL(); if (error != GL_NO_ERROR) { ERR("glBufferDataARB failed with error %s (%#x)\n", debug_glerror(error), error); @@ -516,10 +509,8 @@ BYTE *buffer_get_sysmem(struct wined3d_buffer *This, const struct wined3d_gl_inf if (This->buffer_type_hint == GL_ELEMENT_ARRAY_BUFFER_ARB) device_invalidate_state(This->resource.device, STATE_INDEXBUFFER); - ENTER_GL(); GL_EXTCALL(glBindBufferARB(This->buffer_type_hint, This->buffer_object)); GL_EXTCALL(glGetBufferSubDataARB(This->buffer_type_hint, 0, This->resource.size, This->resource.allocatedMemory)); - LEAVE_GL(); This->flags |= WINED3D_BUFFER_DOUBLEBUFFER; return This->resource.allocatedMemory; @@ -610,10 +601,8 @@ static void buffer_sync_apple(struct wined3d_buffer *This, DWORD flags, const st if (flags & WINED3D_MAP_DISCARD) { - ENTER_GL(); GL_EXTCALL(glBufferDataARB(This->buffer_type_hint, This->resource.size, NULL, This->buffer_object_usage)); checkGLcall("glBufferDataARB\n"); - LEAVE_GL(); return; } @@ -664,10 +653,8 @@ drop_query: } gl_info->gl_ops.gl.p_glFinish(); - ENTER_GL(); GL_EXTCALL(glBufferParameteriAPPLE(This->buffer_type_hint, GL_BUFFER_SERIALIZED_MODIFY_APPLE, GL_TRUE)); checkGLcall("glBufferParameteriAPPLE(This->buffer_type_hint, GL_BUFFER_SERIALIZED_MODIFY_APPLE, GL_TRUE)"); - LEAVE_GL(); This->flags &= ~WINED3D_BUFFER_APPLESYNC; } @@ -677,8 +664,6 @@ static void buffer_direct_upload(struct wined3d_buffer *This, const struct wined BYTE *map; UINT start = 0, len = 0; - ENTER_GL(); - /* This potentially invalidates the element array buffer binding, but the * caller always takes care of this. */ GL_EXTCALL(glBindBufferARB(This->buffer_type_hint, This->buffer_object)); @@ -704,16 +689,13 @@ static void buffer_direct_upload(struct wined3d_buffer *This, const struct wined syncflags |= WINED3D_MAP_DISCARD; if (flags & WINED3D_BUFFER_NOSYNC) syncflags |= WINED3D_MAP_NOOVERWRITE; - LEAVE_GL(); buffer_sync_apple(This, syncflags, gl_info); - ENTER_GL(); } map = GL_EXTCALL(glMapBufferARB(This->buffer_type_hint, GL_WRITE_ONLY_ARB)); checkGLcall("glMapBufferARB"); } if (!map) { - LEAVE_GL(); ERR("Failed to map opengl buffer\n"); return; } @@ -739,8 +721,6 @@ static void buffer_direct_upload(struct wined3d_buffer *This, const struct wined } GL_EXTCALL(glUnmapBufferARB(This->buffer_type_hint)); checkGLcall("glUnmapBufferARB"); - - LEAVE_GL(); } /* Do not call while under the GL lock. */ @@ -938,12 +918,10 @@ void CDECL wined3d_buffer_preload(struct wined3d_buffer *buffer) } } - ENTER_GL(); GL_EXTCALL(glBindBufferARB(buffer->buffer_type_hint, buffer->buffer_object)); checkGLcall("glBindBufferARB"); GL_EXTCALL(glBufferSubDataARB(buffer->buffer_type_hint, start, len, data + start)); checkGLcall("glBufferSubDataARB"); - LEAVE_GL(); } HeapFree(GetProcessHeap(), 0, data); @@ -1048,8 +1026,6 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN context = context_acquire(device, NULL); gl_info = context->gl_info; - ENTER_GL(); - if (buffer->buffer_type_hint == GL_ELEMENT_ARRAY_BUFFER_ARB) context_invalidate_state(context, STATE_INDEXBUFFER); GL_EXTCALL(glBindBufferARB(buffer->buffer_type_hint, buffer->buffer_object)); @@ -1064,25 +1040,18 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN else { if (buffer->flags & WINED3D_BUFFER_APPLESYNC) - { - LEAVE_GL(); buffer_sync_apple(buffer, flags, gl_info); - ENTER_GL(); - } buffer->resource.allocatedMemory = GL_EXTCALL(glMapBufferARB(buffer->buffer_type_hint, GL_READ_WRITE_ARB)); checkGLcall("glMapBufferARB"); } - LEAVE_GL(); if (((DWORD_PTR)buffer->resource.allocatedMemory) & (RESOURCE_ALIGNMENT - 1)) { WARN("Pointer %p is not %u byte aligned.\n", buffer->resource.allocatedMemory, RESOURCE_ALIGNMENT); - ENTER_GL(); GL_EXTCALL(glUnmapBufferARB(buffer->buffer_type_hint)); checkGLcall("glUnmapBufferARB"); - LEAVE_GL(); buffer->resource.allocatedMemory = NULL; if (buffer->resource.usage & WINED3DUSAGE_DYNAMIC) @@ -1168,8 +1137,6 @@ void CDECL wined3d_buffer_unmap(struct wined3d_buffer *buffer) context = context_acquire(device, NULL); gl_info = context->gl_info; - ENTER_GL(); - if (buffer->buffer_type_hint == GL_ELEMENT_ARRAY_BUFFER_ARB) context_invalidate_state(context, STATE_INDEXBUFFER); GL_EXTCALL(glBindBufferARB(buffer->buffer_type_hint, buffer->buffer_object)); @@ -1194,7 +1161,6 @@ void CDECL wined3d_buffer_unmap(struct wined3d_buffer *buffer) } GL_EXTCALL(glUnmapBufferARB(buffer->buffer_type_hint)); - LEAVE_GL(); if (wined3d_settings.strict_draw_ordering) gl_info->gl_ops.gl.p_glFlush(); /* Flush to ensure ordering across contexts. */ context_release(context); @@ -1241,6 +1207,15 @@ static HRESULT buffer_init(struct wined3d_buffer *buffer, struct wined3d_device TRACE("size %#x, usage %#x, format %s, memory @ %p, iface @ %p.\n", buffer->resource.size, buffer->resource.usage, debug_d3dformat(buffer->resource.format->id), buffer->resource.allocatedMemory, buffer); + if (device->create_parms.flags & WINED3DCREATE_SOFTWARE_VERTEXPROCESSING) + { + /* SWvp always returns the same pointer in buffer maps and retains data in DISCARD maps. + * Keep a system memory copy of the buffer to provide the same behavior to the application. + * Still use a VBO to support OpenGL 3 core contexts. */ + TRACE("Using doublebuffer mode because of software vertex processing\n"); + buffer->flags |= WINED3D_BUFFER_DOUBLEBUFFER; + } + dynamic_buffer_ok = gl_info->supported[APPLE_FLUSH_BUFFER_RANGE] || gl_info->supported[ARB_MAP_BUFFER_RANGE]; /* Observations show that drawStridedSlow is faster on dynamic VBs than converting + @@ -1308,10 +1283,7 @@ HRESULT CDECL wined3d_buffer_create(struct wined3d_device *device, struct wined3 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate memory\n"); return E_OUTOFMEMORY; - } FIXME("Ignoring access flags (pool)\n"); @@ -1353,7 +1325,6 @@ HRESULT CDECL wined3d_buffer_create_vb(struct wined3d_device *device, UINT size, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) { - ERR("Out of memory\n"); *buffer = NULL; return WINED3DERR_OUTOFVIDEOMEMORY; } @@ -1385,7 +1356,6 @@ HRESULT CDECL wined3d_buffer_create_ib(struct wined3d_device *device, UINT size, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) { - ERR("Out of memory\n"); *buffer = NULL; return WINED3DERR_OUTOFVIDEOMEMORY; } diff --git a/dll/directx/wine/wined3d/context.c b/dll/directx/wine/wined3d/context.c index 72301e0ca7d..43b87187fa8 100644 --- a/dll/directx/wine/wined3d/context.c +++ b/dll/directx/wine/wined3d/context.c @@ -35,7 +35,7 @@ static DWORD wined3d_context_tls_idx; /* FBO helper functions */ -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void context_bind_fbo(struct wined3d_context *context, GLenum target, GLuint *fbo) { const struct wined3d_gl_info *gl_info = context->gl_info; @@ -84,7 +84,7 @@ static void context_bind_fbo(struct wined3d_context *context, GLenum target, GLu checkGLcall("glBindFramebuffer()"); } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void context_clean_fbo_attachments(const struct wined3d_gl_info *gl_info, GLenum target) { unsigned int i; @@ -101,7 +101,7 @@ static void context_clean_fbo_attachments(const struct wined3d_gl_info *gl_info, checkGLcall("glFramebufferTexture2D()"); } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void context_destroy_fbo(struct wined3d_context *context, GLuint *fbo) { const struct wined3d_gl_info *gl_info = context->gl_info; @@ -130,7 +130,7 @@ static void context_attach_depth_stencil_rb(const struct wined3d_gl_info *gl_inf } } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void context_attach_depth_stencil_fbo(struct wined3d_context *context, GLenum fbo_target, struct wined3d_surface *depth_stencil, DWORD location) { @@ -212,7 +212,7 @@ static void context_attach_depth_stencil_fbo(struct wined3d_context *context, } } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void context_attach_surface_fbo(struct wined3d_context *context, GLenum fbo_target, DWORD idx, struct wined3d_surface *surface, DWORD location) { @@ -262,7 +262,7 @@ static void context_attach_surface_fbo(struct wined3d_context *context, } } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ void context_check_fbo_status(const struct wined3d_context *context, GLenum target) { const struct wined3d_gl_info *gl_info = context->gl_info; @@ -341,7 +341,7 @@ static struct fbo_entry *context_create_fbo_entry(const struct wined3d_context * return entry; } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void context_reuse_fbo_entry(struct wined3d_context *context, GLenum target, struct wined3d_surface **render_targets, struct wined3d_surface *depth_stencil, DWORD location, struct fbo_entry *entry) @@ -357,7 +357,7 @@ static void context_reuse_fbo_entry(struct wined3d_context *context, GLenum targ entry->attached = FALSE; } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void context_destroy_fbo_entry(struct wined3d_context *context, struct fbo_entry *entry) { if (entry->id) @@ -371,8 +371,7 @@ static void context_destroy_fbo_entry(struct wined3d_context *context, struct fb HeapFree(GetProcessHeap(), 0, entry); } - -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static struct fbo_entry *context_find_fbo_entry(struct wined3d_context *context, GLenum target, struct wined3d_surface **render_targets, struct wined3d_surface *depth_stencil, DWORD location) { @@ -418,7 +417,7 @@ static struct fbo_entry *context_find_fbo_entry(struct wined3d_context *context, return entry; } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void context_apply_fbo_entry(struct wined3d_context *context, GLenum target, struct fbo_entry *entry) { const struct wined3d_gl_info *gl_info = context->gl_info; @@ -442,7 +441,7 @@ static void context_apply_fbo_entry(struct wined3d_context *context, GLenum targ entry->attached = TRUE; } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void context_apply_fbo_state(struct wined3d_context *context, GLenum target, struct wined3d_surface **render_targets, struct wined3d_surface *depth_stencil, DWORD location) { @@ -471,7 +470,7 @@ static void context_apply_fbo_state(struct wined3d_context *context, GLenum targ } } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ void context_apply_fbo_state_blit(struct wined3d_context *context, GLenum target, struct wined3d_surface *render_target, struct wined3d_surface *depth_stencil, DWORD location) { @@ -496,10 +495,8 @@ void context_alloc_occlusion_query(struct wined3d_context *context, struct wined { if (gl_info->supported[ARB_OCCLUSION_QUERY]) { - ENTER_GL(); GL_EXTCALL(glGenQueriesARB(1, &query->id)); checkGLcall("glGenQueriesARB"); - LEAVE_GL(); TRACE("Allocated occlusion query %u in context %p.\n", query->id, context); } @@ -559,19 +556,15 @@ void context_alloc_event_query(struct wined3d_context *context, struct wined3d_e } else if (gl_info->supported[APPLE_FENCE]) { - ENTER_GL(); GL_EXTCALL(glGenFencesAPPLE(1, &query->object.id)); checkGLcall("glGenFencesAPPLE"); - LEAVE_GL(); TRACE("Allocated event query %u in context %p.\n", query->object.id, context); } else if(gl_info->supported[NV_FENCE]) { - ENTER_GL(); GL_EXTCALL(glGenFencesNV(1, &query->object.id)); checkGLcall("glGenFencesNV"); - LEAVE_GL(); TRACE("Allocated event query %u in context %p.\n", query->object.id, context); } @@ -771,7 +764,7 @@ static BOOL context_set_gl_context(struct wined3d_context *ctx) backup = TRUE; } - if (backup || !pwglMakeCurrent(ctx->hdc, ctx->glCtx)) + if (backup || !wglMakeCurrent(ctx->hdc, ctx->glCtx)) { HDC dc; @@ -805,7 +798,7 @@ static BOOL context_set_gl_context(struct wined3d_context *ctx) return FALSE; } - if (!pwglMakeCurrent(dc, ctx->glCtx)) + if (!wglMakeCurrent(dc, ctx->glCtx)) { ERR("Fallback to backup window (dc %p) failed too, last error %#x.\n", dc, GetLastError()); @@ -825,7 +818,7 @@ static void context_restore_gl_context(const struct wined3d_gl_info *gl_info, HD return; } - if (!pwglMakeCurrent(dc, gl_ctx)) + if (!wglMakeCurrent(dc, gl_ctx)) { ERR("Failed to restore GL context %p on device context %p, last error %#x.\n", gl_ctx, dc, GetLastError()); @@ -897,15 +890,14 @@ static void context_destroy_gl_resources(struct wined3d_context *context) unsigned int i; int restore_pf; - restore_ctx = pwglGetCurrentContext(); - restore_dc = pwglGetCurrentDC(); + restore_ctx = wglGetCurrentContext(); + restore_dc = wglGetCurrentDC(); restore_pf = GetPixelFormat(restore_dc); if (context->valid && restore_ctx != context->glCtx) context_set_gl_context(context); - else restore_ctx = NULL; - - ENTER_GL(); + else + restore_ctx = NULL; LIST_FOR_EACH_ENTRY(occlusion_query, &context->occlusion_queries, struct wined3d_occlusion_query, entry) { @@ -975,8 +967,6 @@ static void context_destroy_gl_resources(struct wined3d_context *context) checkGLcall("context cleanup"); } - LEAVE_GL(); - HeapFree(GetProcessHeap(), 0, context->free_occlusion_queries); HeapFree(GetProcessHeap(), 0, context->free_event_queries); @@ -984,14 +974,14 @@ static void context_destroy_gl_resources(struct wined3d_context *context) { context_restore_gl_context(gl_info, restore_dc, restore_ctx, restore_pf); } - else if (pwglGetCurrentContext() && !pwglMakeCurrent(NULL, NULL)) + else if (wglGetCurrentContext() && !wglMakeCurrent(NULL, NULL)) { ERR("Failed to disable GL context.\n"); } ReleaseDC(context->win_handle, context->hdc); - if (!pwglDeleteContext(context->glCtx)) + if (!wglDeleteContext(context->glCtx)) { DWORD err = GetLastError(); ERR("wglDeleteContext(%p) failed, last error %#x.\n", context->glCtx, err); @@ -1052,10 +1042,10 @@ BOOL context_set_current(struct wined3d_context *ctx) return FALSE; ctx->current = 1; } - else if(pwglGetCurrentContext()) + else if(wglGetCurrentContext()) { TRACE("Clearing current D3D context.\n"); - if (!pwglMakeCurrent(NULL, NULL)) + if (!wglMakeCurrent(NULL, NULL)) { DWORD err = GetLastError(); ERR("Failed to clear current GL context, last error %#x.\n", err); @@ -1095,14 +1085,14 @@ static void context_enter(struct wined3d_context *context) if (!context->level++) { const struct wined3d_context *current_context = context_get_current(); - HGLRC current_gl = pwglGetCurrentContext(); + HGLRC current_gl = wglGetCurrentContext(); if (current_gl && (!current_context || current_context->glCtx != current_gl)) { TRACE("Another GL context (%p on device context %p) is already current.\n", - current_gl, pwglGetCurrentDC()); + current_gl, wglGetCurrentDC()); context->restore_ctx = current_gl; - context->restore_dc = pwglGetCurrentDC(); + context->restore_dc = wglGetCurrentDC(); context->restore_pf = GetPixelFormat(context->restore_dc); } } @@ -1233,7 +1223,7 @@ static int context_choose_pixel_format(const struct wined3d_device *device, HDC return iPixelFormat; } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void bind_dummy_textures(const struct wined3d_device *device, const struct wined3d_context *context) { const struct wined3d_gl_info *gl_info = context->gl_info; @@ -1287,10 +1277,7 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain, ret = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ret)); if (!ret) - { - ERR("Failed to allocate context memory.\n"); return NULL; - } ret->blit_targets = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, gl_info->limits.buffers * sizeof(*ret->blit_targets)); @@ -1380,7 +1367,7 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain, goto out; } - if (!(ctx = pwglCreateContext(hdc))) + if (!(ctx = wglCreateContext(hdc))) { ERR("Failed to create a WGL context.\n"); context_release(ret); @@ -1389,12 +1376,12 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain, if (device->context_count) { - if (!pwglShareLists(device->contexts[0]->glCtx, ctx)) + if (!wglShareLists(device->contexts[0]->glCtx, ctx)) { ERR("wglShareLists(%p, %p) failed, last error %#x.\n", device->contexts[0]->glCtx, ctx, GetLastError()); context_release(ret); - if (!pwglDeleteContext(ctx)) + if (!wglDeleteContext(ctx)) ERR("wglDeleteContext(%p) failed, last error %#x.\n", ctx, GetLastError()); goto out; } @@ -1404,7 +1391,7 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain, { ERR("Failed to add the newly created context to the context list\n"); context_release(ret); - if (!pwglDeleteContext(ctx)) + if (!wglDeleteContext(ctx)) ERR("wglDeleteContext(%p) failed, last error %#x.\n", ctx, GetLastError()); goto out; } @@ -1439,7 +1426,7 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain, ERR("Cannot activate context to set up defaults.\n"); device_context_remove(device, ret); context_release(ret); - if (!pwglDeleteContext(ctx)) + if (!wglDeleteContext(ctx)) ERR("wglDeleteContext(%p) failed, last error %#x.\n", ctx, GetLastError()); goto out; } @@ -1474,8 +1461,6 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain, swap_interval, ret, GetLastError()); } - ENTER_GL(); - gl_info->gl_ops.gl.p_glGetIntegerv(GL_AUX_BUFFERS, &ret->aux_buffers); TRACE("Setting up the screen\n"); @@ -1569,7 +1554,7 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain, { GL_EXTCALL(glProvokingVertexEXT(GL_FIRST_VERTEX_CONVENTION_EXT)); } - device->frag_pipe->enable_extension(gl_info, TRUE); + ret->select_shader = 1; /* If this happens to be the first context for the device, dummy textures * are not created yet. In that case, they will be created (and bound) by @@ -1577,8 +1562,6 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain, if (device->dummy_texture_2d[0]) bind_dummy_textures(device, ret); - LEAVE_GL(); - TRACE("Created context %p.\n", ret); return ret; @@ -1622,7 +1605,7 @@ void context_destroy(struct wined3d_device *device, struct wined3d_context *cont if (destroy) HeapFree(GetProcessHeap(), 0, context); } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void set_blit_dimension(const struct wined3d_gl_info *gl_info, UINT width, UINT height) { const GLdouble projection[] = @@ -1693,9 +1676,7 @@ static void SetupForBlit(const struct wined3d_device *device, struct wined3d_con { if (context->blit_w != rt_size.cx || context->blit_h != rt_size.cy) { - ENTER_GL(); set_blit_dimension(gl_info, rt_size.cx, rt_size.cy); - LEAVE_GL(); context->blit_w = rt_size.cx; context->blit_h = rt_size.cy; /* No need to dirtify here, the states are still dirtified because @@ -1706,23 +1687,6 @@ static void SetupForBlit(const struct wined3d_device *device, struct wined3d_con } context->last_was_blit = TRUE; - /* TODO: Use a display list */ - - /* Disable shaders */ - ENTER_GL(); - device->shader_backend->shader_select(context, FALSE, FALSE); - LEAVE_GL(); - - context_invalidate_state(context, STATE_VSHADER); - context_invalidate_state(context, STATE_PIXELSHADER); - - /* Call ENTER_GL() once for all gl calls below. In theory we should not call - * helper functions in between gl calls. This function is full of context_invalidate_state - * which can safely be called from here, we only lock once instead locking/unlocking - * after each GL call. - */ - ENTER_GL(); - /* Disable all textures. The caller can then bind a texture it wants to blit * from * @@ -1865,9 +1829,11 @@ static void SetupForBlit(const struct wined3d_device *device, struct wined3d_con context_invalidate_state(context, STATE_RENDER(WINED3D_RS_CLIPPING)); set_blit_dimension(gl_info, rt_size.cx, rt_size.cy); - device->frag_pipe->enable_extension(gl_info, FALSE); - LEAVE_GL(); + /* Disable shaders */ + device->shader_backend->shader_select(context, WINED3D_SHADER_MODE_NONE, WINED3D_SHADER_MODE_NONE); + context->select_shader = 1; + context->load_constants = 1; context->blit_w = rt_size.cx; context->blit_h = rt_size.cy; @@ -1885,7 +1851,7 @@ static inline GLenum draw_buffer_from_rt_mask(DWORD rt_mask) return rt_mask & ~(1 << 31); } -/* Context activation and GL locking are done by the caller. */ +/* Context activation is done by the caller. */ static void context_apply_draw_buffers(struct wined3d_context *context, DWORD rt_mask) { const struct wined3d_gl_info *gl_info = context->gl_info; @@ -1935,7 +1901,7 @@ static void context_apply_draw_buffers(struct wined3d_context *context, DWORD rt } } -/* GL locking is done by the caller. */ +/* Context activation is done by the caller. */ void context_set_draw_buffer(struct wined3d_context *context, GLenum buffer) { const struct wined3d_gl_info *gl_info = context->gl_info; @@ -1948,7 +1914,7 @@ void context_set_draw_buffer(struct wined3d_context *context, GLenum buffer) context->draw_buffers_mask = context_generate_rt_mask(buffer); } -/* GL locking is done by the caller. */ +/* Context activation is done by the caller. */ void context_active_texture(struct wined3d_context *context, const struct wined3d_gl_info *gl_info, unsigned int unit) { GL_EXTCALL(glActiveTextureARB(GL_TEXTURE0 + unit)); @@ -2081,9 +2047,7 @@ void context_apply_blit_state(struct wined3d_context *context, const struct wine { surface_internal_preload(rt, SRGB_RGB); - ENTER_GL(); context_apply_fbo_state_blit(context, GL_FRAMEBUFFER, rt, NULL, rt->draw_binding); - LEAVE_GL(); if (rt->resource.format->id != WINED3DFMT_NULL) rt_mask = 1; else @@ -2091,9 +2055,7 @@ void context_apply_blit_state(struct wined3d_context *context, const struct wine } else { - ENTER_GL(); context_bind_fbo(context, GL_FRAMEBUFFER, NULL); - LEAVE_GL(); rt_mask = context_generate_rt_mask_from_surface(rt); } } @@ -2104,7 +2066,6 @@ void context_apply_blit_state(struct wined3d_context *context, const struct wine cur_mask = context->current_fbo ? &context->current_fbo->rt_mask : &context->draw_buffers_mask; - ENTER_GL(); if (rt_mask != *cur_mask) { context_apply_draw_buffers(context, rt_mask); @@ -2115,7 +2076,6 @@ void context_apply_blit_state(struct wined3d_context *context, const struct wine { context_check_fbo_status(context, GL_FRAMEBUFFER); } - LEAVE_GL(); SetupForBlit(device, context); context_invalidate_state(context, STATE_FRAMEBUFFER); @@ -2157,8 +2117,6 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win { context_validate_onscreen_formats(context, fb->depth_stencil); - ENTER_GL(); - if (!rt_count || surface_is_offscreen(rts[0])) { for (i = 0; i < rt_count; ++i) @@ -2183,8 +2141,6 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win rt_mask = context_generate_rt_mask_from_surface(rts[0]); } - LEAVE_GL(); - /* If the framebuffer is not the device's fb the device's fb has to be reapplied * next draw. Otherwise we could mark the framebuffer state clean here, once the * state management allows this */ @@ -2210,7 +2166,6 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win cur_mask = context->current_fbo ? &context->current_fbo->rt_mask : &context->draw_buffers_mask; - ENTER_GL(); if (rt_mask != *cur_mask) { context_apply_draw_buffers(context, rt_mask); @@ -2224,10 +2179,7 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win } if (context->last_was_blit) - { - device->frag_pipe->enable_extension(gl_info, TRUE); context->last_was_blit = FALSE; - } /* Blending and clearing should be orthogonal, but tests on the nvidia * driver show that disabling blending when clearing improves the clearing @@ -2235,7 +2187,6 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win gl_info->gl_ops.gl.p_glDisable(GL_BLEND); gl_info->gl_ops.gl.p_glEnable(GL_SCISSOR_TEST); checkGLcall("glEnable GL_SCISSOR_TEST"); - LEAVE_GL(); context_invalidate_state(context, STATE_RENDER(WINED3D_RS_ALPHABLENDENABLE)); context_invalidate_state(context, STATE_RENDER(WINED3D_RS_SCISSORTESTENABLE)); @@ -2271,7 +2222,7 @@ static DWORD find_draw_buffers_mask(const struct wined3d_context *context, const return rt_mask; } -/* GL locking and context activation are done by the caller */ +/* Context activation is done by the caller. */ void context_state_fb(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { const struct wined3d_device *device = context->swapchain->device; @@ -2303,7 +2254,7 @@ void context_state_fb(struct wined3d_context *context, const struct wined3d_stat } } -/* GL locking and context activation are done by the caller */ +/* Context activation is done by the caller. */ void context_state_drawbuf(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { const struct wined3d_device *device = context->swapchain->device; @@ -2344,7 +2295,7 @@ BOOL context_apply_draw_state(struct wined3d_context *context, struct wined3d_de device_preload_textures(device); if (isStateDirty(context, STATE_VDECL) || isStateDirty(context, STATE_STREAMSRC)) device_update_stream_info(device, context->gl_info); - if (state->index_buffer && !state->user_stream) + if (state->index_buffer) { if (device->strided_streams.all_vbo) wined3d_buffer_preload(state->index_buffer); @@ -2352,10 +2303,6 @@ BOOL context_apply_draw_state(struct wined3d_context *context, struct wined3d_de buffer_get_sysmem(state->index_buffer, context->gl_info); } - ENTER_GL(); - if (context->last_was_blit) - device->frag_pipe->enable_extension(context->gl_info, TRUE); - for (i = 0; i < context->numDirtyEntries; ++i) { DWORD rep = context->dirtyArray[i]; @@ -2365,12 +2312,25 @@ BOOL context_apply_draw_state(struct wined3d_context *context, struct wined3d_de state_table[rep].apply(context, state, rep); } + if (context->select_shader) + { + device->shader_backend->shader_select(context, + use_vs(state) ? WINED3D_SHADER_MODE_SHADER : WINED3D_SHADER_MODE_FFP, + use_ps(state) ? WINED3D_SHADER_MODE_SHADER : WINED3D_SHADER_MODE_FFP); + context->select_shader = 0; + } + + if (context->load_constants) + { + device->shader_backend->shader_load_constants(context, use_ps(state), use_vs(state)); + context->load_constants = 0; + } + if (wined3d_settings.offscreen_rendering_mode == ORM_FBO) { context_check_fbo_status(context, GL_FRAMEBUFFER); } - LEAVE_GL(); context->numDirtyEntries = 0; /* This makes the whole list clean */ context->last_was_blit = FALSE; @@ -2488,15 +2448,7 @@ struct wined3d_context *context_acquire(const struct wined3d_device *device, str if (context != current_context) { if (!context_set_current(context)) - { ERR("Failed to activate the new context.\n"); - } - else - { - ENTER_GL(); - device->frag_pipe->enable_extension(context->gl_info, !context->last_was_blit); - LEAVE_GL(); - } } else if (context->restore_ctx) { diff --git a/dll/directx/wine/wined3d/device.c b/dll/directx/wine/wined3d/device.c index a0c19602fca..119ed283c91 100644 --- a/dll/directx/wine/wined3d/device.c +++ b/dll/directx/wine/wined3d/device.c @@ -65,7 +65,7 @@ const struct wined3d_matrix identity = /* Note that except for WINED3DPT_POINTLIST and WINED3DPT_LINELIST these * actually have the same values in GL and D3D. */ -static GLenum gl_primitive_type_from_d3d(enum wined3d_primitive_type primitive_type) +GLenum gl_primitive_type_from_d3d(enum wined3d_primitive_type primitive_type) { switch(primitive_type) { @@ -174,16 +174,18 @@ static BOOL fixed_get_input(BYTE usage, BYTE usage_idx, unsigned int *regnum) } /* Context activation is done by the caller. */ -void device_stream_info_from_declaration(struct wined3d_device *device, struct wined3d_stream_info *stream_info) +static void device_stream_info_from_declaration(struct wined3d_device *device, struct wined3d_stream_info *stream_info) { const struct wined3d_state *state = &device->stateBlock->state; /* We need to deal with frequency data! */ struct wined3d_vertex_declaration *declaration = state->vertex_declaration; BOOL use_vshader; unsigned int i; + WORD map; stream_info->use_map = 0; stream_info->swizzle_map = 0; + stream_info->all_vbo = 1; /* Check for transformed vertices, disable vertex shader if present. */ stream_info->position_transformed = declaration->position_transformed; @@ -205,37 +207,25 @@ void device_stream_info_from_declaration(struct wined3d_device *device, struct w if (!buffer) continue; - data.buffer_object = 0; - data.addr = NULL; - stride = stream->stride; - if (state->user_stream) - { - TRACE("Stream %u is UP, %p\n", element->input_slot, buffer); - data.buffer_object = 0; - data.addr = (BYTE *)buffer; - } - else - { - TRACE("Stream %u isn't UP, %p\n", element->input_slot, buffer); - buffer_get_memory(buffer, &device->adapter->gl_info, &data); - /* Can't use vbo's if the base vertex index is negative. OpenGL doesn't accept negative offsets - * (or rather offsets bigger than the vbo, because the pointer is unsigned), so use system memory - * sources. In most sane cases the pointer - offset will still be > 0, otherwise it will wrap - * around to some big value. Hope that with the indices, the driver wraps it back internally. If - * not, drawStridedSlow is needed, including a vertex buffer path. */ - if (state->load_base_vertex_index < 0) - { - WARN("load_base_vertex_index is < 0 (%d), not using VBOs.\n", - state->load_base_vertex_index); - data.buffer_object = 0; - data.addr = buffer_get_sysmem(buffer, &device->adapter->gl_info); - if ((UINT_PTR)data.addr < -state->load_base_vertex_index * stride) - { - FIXME("System memory vertex data load offset is negative!\n"); - } - } + TRACE("Stream %u, buffer %p.\n", element->input_slot, buffer); + buffer_get_memory(buffer, &device->adapter->gl_info, &data); + + /* We can't use VBOs if the base vertex index is negative. OpenGL + * doesn't accept negative offsets (or rather offsets bigger than the + * VBO, because the pointer is unsigned), so use system memory + * sources. In most sane cases the pointer - offset will still be > 0, + * otherwise it will wrap around to some big value. Hope that with the + * indices, the driver wraps it back internally. If not, + * drawStridedSlow() is needed, including a vertex buffer path. */ + if (state->load_base_vertex_index < 0) + { + WARN("load_base_vertex_index is < 0 (%d), not using VBOs.\n", state->load_base_vertex_index); + data.buffer_object = 0; + data.addr = buffer_get_sysmem(buffer, &device->adapter->gl_info); + if ((UINT_PTR)data.addr < -state->load_base_vertex_index * stride) + FIXME("System memory vertex data load offset is negative!\n"); } data.addr += element->offset; @@ -295,111 +285,33 @@ void device_stream_info_from_declaration(struct wined3d_device *device, struct w } } + /* Preload the vertex buffers. */ device->num_buffer_queries = 0; - if (!state->user_stream) + for (i = 0, map = stream_info->use_map; map; map >>= 1, ++i) { - WORD map = stream_info->use_map; - stream_info->all_vbo = 1; + struct wined3d_stream_info_element *element; + struct wined3d_buffer *buffer; - /* PreLoad all the vertex buffers. */ - for (i = 0; map; map >>= 1, ++i) + if (!(map & 1)) + continue; + + element = &stream_info->elements[i]; + buffer = state->streams[element->stream_idx].buffer; + wined3d_buffer_preload(buffer); + + /* If the preload dropped the buffer object, update the stream info. */ + if (buffer->buffer_object != element->data.buffer_object) { - struct wined3d_stream_info_element *element; - struct wined3d_buffer *buffer; - - if (!(map & 1)) continue; - - element = &stream_info->elements[i]; - buffer = state->streams[element->stream_idx].buffer; - wined3d_buffer_preload(buffer); - - /* If the preload dropped the buffer object, update the stream info. */ - if (buffer->buffer_object != element->data.buffer_object) - { - element->data.buffer_object = 0; - element->data.addr = buffer_get_sysmem(buffer, &device->adapter->gl_info) - + (ptrdiff_t)element->data.addr; - } - - if (!buffer->buffer_object) - stream_info->all_vbo = 0; - - if (buffer->query) - device->buffer_queries[device->num_buffer_queries++] = buffer->query; + element->data.buffer_object = 0; + element->data.addr = buffer_get_sysmem(buffer, &device->adapter->gl_info) + (ptrdiff_t)element->data.addr; } + + if (!buffer->buffer_object) + stream_info->all_vbo = 0; + + if (buffer->query) + device->buffer_queries[device->num_buffer_queries++] = buffer->query; } - else - { - stream_info->all_vbo = 0; - } -} - -static void stream_info_element_from_strided(const struct wined3d_gl_info *gl_info, - const struct wined3d_strided_element *strided, struct wined3d_stream_info_element *e) -{ - e->data.addr = strided->data; - e->data.buffer_object = 0; - e->format = wined3d_get_format(gl_info, strided->format); - e->stride = strided->stride; - e->stream_idx = 0; -} - -static void device_stream_info_from_strided(const struct wined3d_gl_info *gl_info, - const struct wined3d_strided_data *strided, struct wined3d_stream_info *stream_info) -{ - unsigned int i; - - memset(stream_info, 0, sizeof(*stream_info)); - - if (strided->position.data) - stream_info_element_from_strided(gl_info, &strided->position, &stream_info->elements[WINED3D_FFP_POSITION]); - if (strided->normal.data) - stream_info_element_from_strided(gl_info, &strided->normal, &stream_info->elements[WINED3D_FFP_NORMAL]); - if (strided->diffuse.data) - stream_info_element_from_strided(gl_info, &strided->diffuse, &stream_info->elements[WINED3D_FFP_DIFFUSE]); - if (strided->specular.data) - stream_info_element_from_strided(gl_info, &strided->specular, &stream_info->elements[WINED3D_FFP_SPECULAR]); - - for (i = 0; i < WINED3DDP_MAXTEXCOORD; ++i) - { - if (strided->tex_coords[i].data) - stream_info_element_from_strided(gl_info, &strided->tex_coords[i], - &stream_info->elements[WINED3D_FFP_TEXCOORD0 + i]); - } - - stream_info->position_transformed = strided->position_transformed; - - for (i = 0; i < sizeof(stream_info->elements) / sizeof(*stream_info->elements); ++i) - { - if (!stream_info->elements[i].format) continue; - - if (!gl_info->supported[ARB_VERTEX_ARRAY_BGRA] - && stream_info->elements[i].format->id == WINED3DFMT_B8G8R8A8_UNORM) - { - stream_info->swizzle_map |= 1 << i; - } - stream_info->use_map |= 1 << i; - } -} - -static void device_trace_strided_stream_info(const struct wined3d_stream_info *stream_info) -{ - TRACE("Strided Data:\n"); - TRACE_STRIDED(stream_info, WINED3D_FFP_POSITION); - TRACE_STRIDED(stream_info, WINED3D_FFP_BLENDWEIGHT); - TRACE_STRIDED(stream_info, WINED3D_FFP_BLENDINDICES); - TRACE_STRIDED(stream_info, WINED3D_FFP_NORMAL); - TRACE_STRIDED(stream_info, WINED3D_FFP_PSIZE); - TRACE_STRIDED(stream_info, WINED3D_FFP_DIFFUSE); - TRACE_STRIDED(stream_info, WINED3D_FFP_SPECULAR); - TRACE_STRIDED(stream_info, WINED3D_FFP_TEXCOORD0); - TRACE_STRIDED(stream_info, WINED3D_FFP_TEXCOORD1); - TRACE_STRIDED(stream_info, WINED3D_FFP_TEXCOORD2); - TRACE_STRIDED(stream_info, WINED3D_FFP_TEXCOORD3); - TRACE_STRIDED(stream_info, WINED3D_FFP_TEXCOORD4); - TRACE_STRIDED(stream_info, WINED3D_FFP_TEXCOORD5); - TRACE_STRIDED(stream_info, WINED3D_FFP_TEXCOORD6); - TRACE_STRIDED(stream_info, WINED3D_FFP_TEXCOORD7); } /* Context activation is done by the caller. */ @@ -409,18 +321,8 @@ void device_update_stream_info(struct wined3d_device *device, const struct wined const struct wined3d_state *state = &device->stateBlock->state; DWORD prev_all_vbo = stream_info->all_vbo; - if (device->up_strided) - { - /* Note: this is a ddraw fixed-function code path. */ - TRACE("=============================== Strided Input ================================\n"); - device_stream_info_from_strided(gl_info, device->up_strided, stream_info); - if (TRACE_ON(d3d)) device_trace_strided_stream_info(stream_info); - } - else - { - TRACE("============================= Vertex Declaration =============================\n"); - device_stream_info_from_declaration(device, stream_info); - } + TRACE("============================= Vertex Declaration =============================\n"); + device_stream_info_from_declaration(device, stream_info); if (state->vertex_shader && !stream_info->position_transformed) { @@ -710,8 +612,6 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c return; } - ENTER_GL(); - /* Only set the values up once, as they are not changing. */ if (flags & WINED3DCLEAR_STENCIL) { @@ -816,8 +716,6 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c } } - LEAVE_GL(); - if (wined3d_settings.strict_draw_ordering || (flags & WINED3DCLEAR_TARGET && target->container.type == WINED3D_CONTAINER_SWAPCHAIN && target->container.u.swapchain->front_buffer == target)) @@ -897,26 +795,18 @@ UINT CDECL wined3d_device_get_swapchain_count(const struct wined3d_device *devic return device->swapchain_count; } -HRESULT CDECL wined3d_device_get_swapchain(const struct wined3d_device *device, - UINT swapchain_idx, struct wined3d_swapchain **swapchain) +struct wined3d_swapchain * CDECL wined3d_device_get_swapchain(const struct wined3d_device *device, UINT swapchain_idx) { - TRACE("device %p, swapchain_idx %u, swapchain %p.\n", - device, swapchain_idx, swapchain); + TRACE("device %p, swapchain_idx %u.\n", device, swapchain_idx); if (swapchain_idx >= device->swapchain_count) { WARN("swapchain_idx %u >= swapchain_count %u.\n", swapchain_idx, device->swapchain_count); - *swapchain = NULL; - - return WINED3DERR_INVALIDCALL; + return NULL; } - *swapchain = device->swapchains[swapchain_idx]; - wined3d_swapchain_incref(*swapchain); - TRACE("Returning %p.\n", *swapchain); - - return WINED3D_OK; + return device->swapchains[swapchain_idx]; } static void device_load_logo(struct wined3d_device *device, const char *filename) @@ -945,8 +835,8 @@ static void device_load_logo(struct wined3d_device *device, const char *filename bm.bmHeight = 32; } - hr = wined3d_surface_create(device, bm.bmWidth, bm.bmHeight, WINED3DFMT_B5G6R5_UNORM, 0, 0, - WINED3D_POOL_SYSTEM_MEM, WINED3D_MULTISAMPLE_NONE, 0, WINED3D_SURFACE_TYPE_OPENGL, WINED3D_SURFACE_MAPPABLE, + hr = wined3d_surface_create(device, bm.bmWidth, bm.bmHeight, WINED3DFMT_B5G6R5_UNORM, 0, + WINED3D_POOL_SYSTEM_MEM, WINED3D_MULTISAMPLE_NONE, 0, WINED3D_SURFACE_MAPPABLE, NULL, &wined3d_null_parent_ops, &device->logo_surface); if (FAILED(hr)) { @@ -986,7 +876,6 @@ static void create_dummy_textures(struct wined3d_device *device, struct wined3d_ * OpenGL will only allow that when a valid texture is bound. * We emulate this by creating dummy textures and binding them * to each texture stage when the currently set D3D texture is NULL. */ - ENTER_GL(); if (gl_info->supported[APPLE_CLIENT_STORAGE]) { @@ -1065,8 +954,6 @@ static void create_dummy_textures(struct wined3d_device *device, struct wined3d_ gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE); checkGLcall("glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE)"); } - - LEAVE_GL(); } /* Context activation is done by the caller. */ @@ -1074,7 +961,6 @@ static void destroy_dummy_textures(struct wined3d_device *device, const struct w { unsigned int count = min(MAX_COMBINED_SAMPLERS, gl_info->limits.combined_samplers); - ENTER_GL(); if (gl_info->supported[ARB_TEXTURE_CUBE_MAP]) { gl_info->gl_ops.gl.p_glDeleteTextures(count, device->dummy_texture_cube); @@ -1095,7 +981,6 @@ static void destroy_dummy_textures(struct wined3d_device *device, const struct w gl_info->gl_ops.gl.p_glDeleteTextures(count, device->dummy_texture_2d); checkGLcall("glDeleteTextures(count, device->dummy_texture_2d)"); - LEAVE_GL(); memset(device->dummy_texture_cube, 0, gl_info->limits.textures * sizeof(*device->dummy_texture_cube)); memset(device->dummy_texture_3d, 0, gl_info->limits.textures * sizeof(*device->dummy_texture_3d)); @@ -1225,7 +1110,7 @@ HRESULT CDECL wined3d_device_init_3d(struct wined3d_device *device, if (device->d3d_initialized) return WINED3DERR_INVALIDCALL; - if (!device->adapter->opengl) + if (device->wined3d->flags & WINED3D_NO3D) return WINED3DERR_INVALIDCALL; device->valid_rt_mask = 0; @@ -1249,6 +1134,17 @@ HRESULT CDECL wined3d_device_init_3d(struct wined3d_device *device, } } + if (FAILED(hr = device->shader_backend->shader_alloc_private(device, device->adapter->fragment_pipe))) + { + TRACE("Shader private data couldn't be allocated\n"); + goto err_out; + } + if (FAILED(hr = device->blitter->alloc_private(device))) + { + TRACE("Blitter private data couldn't be allocated\n"); + goto err_out; + } + /* Setup the implicit swapchain. This also initializes a context. */ TRACE("Creating implicit swapchain\n"); hr = device->device_parent->ops->create_swapchain(device->device_parent, @@ -1285,25 +1181,6 @@ HRESULT CDECL wined3d_device_init_3d(struct wined3d_device *device, if (device->fb.depth_stencil) wined3d_surface_incref(device->fb.depth_stencil); - hr = device->shader_backend->shader_alloc_private(device); - if (FAILED(hr)) - { - TRACE("Shader private data couldn't be allocated\n"); - goto err_out; - } - hr = device->frag_pipe->alloc_private(device); - if (FAILED(hr)) - { - TRACE("Fragment pipeline private data couldn't be allocated\n"); - goto err_out; - } - hr = device->blitter->alloc_private(device); - if (FAILED(hr)) - { - TRACE("Blitter private data couldn't be allocated\n"); - goto err_out; - } - /* Set up some starting GL setup */ /* Setup all the devices defaults */ @@ -1313,8 +1190,6 @@ HRESULT CDECL wined3d_device_init_3d(struct wined3d_device *device, create_dummy_textures(device, context); - ENTER_GL(); - /* Initialize the current view state */ device->view_ident = 1; device->contexts[0]->last_was_rhw = 0; @@ -1341,7 +1216,6 @@ HRESULT CDECL wined3d_device_init_3d(struct wined3d_device *device, } TRACE("All defaults now set up, leaving 3D init.\n"); - LEAVE_GL(); context_release(context); @@ -1364,8 +1238,6 @@ err_out: wined3d_swapchain_decref(swapchain); if (device->blit_priv) device->blitter->free_private(device); - if (device->fragment_priv) - device->frag_pipe->free_private(device); if (device->shader_priv) device->shader_backend->shader_free_private(device); @@ -1440,25 +1312,10 @@ HRESULT CDECL wined3d_device_uninit_3d(struct wined3d_device *device) resource->resource_ops->resource_unload(resource); } - TRACE("Deleting high order patches\n"); - for (i = 0; i < PATCHMAP_SIZE; ++i) - { - struct wined3d_rect_patch *patch; - struct list *e1, *e2; - - LIST_FOR_EACH_SAFE(e1, e2, &device->patches[i]) - { - patch = LIST_ENTRY(e1, struct wined3d_rect_patch, entry); - wined3d_device_delete_patch(device, patch->Handle); - } - } - /* Delete the mouse cursor texture */ if (device->cursorTexture) { - ENTER_GL(); gl_info->gl_ops.gl.p_glDeleteTextures(1, &device->cursorTexture); - LEAVE_GL(); device->cursorTexture = 0; } @@ -1467,15 +1324,12 @@ HRESULT CDECL wined3d_device_uninit_3d(struct wined3d_device *device) */ if (device->depth_blt_texture) { - ENTER_GL(); gl_info->gl_ops.gl.p_glDeleteTextures(1, &device->depth_blt_texture); - LEAVE_GL(); device->depth_blt_texture = 0; } /* Destroy the shader backend. Note that this has to happen after all shaders are destroyed. */ device->blitter->free_private(device); - device->frag_pipe->free_private(device); device->shader_backend->shader_free_private(device); /* Release the buffers (with sanity checks)*/ @@ -1567,18 +1421,6 @@ void CDECL wined3d_device_set_multithreaded(struct wined3d_device *device) device->create_parms.flags |= WINED3DCREATE_MULTITHREADED; } -HRESULT CDECL wined3d_device_get_wined3d(const struct wined3d_device *device, struct wined3d **wined3d) -{ - TRACE("device %p, wined3d %p.\n", device, wined3d); - - *wined3d = device->wined3d; - wined3d_incref(*wined3d); - - TRACE("Returning %p.\n", *wined3d); - - return WINED3D_OK; -} - UINT CDECL wined3d_device_get_available_texture_mem(const struct wined3d_device *device) { TRACE("device %p.\n", device); @@ -1590,6 +1432,62 @@ UINT CDECL wined3d_device_get_available_texture_mem(const struct wined3d_device return device->adapter->TextureRam - device->adapter->UsedTextureRam; } +void CDECL wined3d_device_set_stream_output(struct wined3d_device *device, UINT idx, + struct wined3d_buffer *buffer, UINT offset) +{ + struct wined3d_buffer *prev_buffer; + + TRACE("device %p, idx %u, buffer %p, offset %u.\n", device, idx, buffer, offset); + + if (idx >= MAX_STREAM_OUT) + { + WARN("Invalid stream output %u.\n", idx); + return; + } + + prev_buffer = device->updateStateBlock->state.stream_output[idx].buffer; + device->updateStateBlock->state.stream_output[idx].buffer = buffer; + device->updateStateBlock->state.stream_output[idx].offset = offset; + + if (device->isRecordingState) + { + if (buffer) + wined3d_buffer_incref(buffer); + if (prev_buffer) + wined3d_buffer_decref(prev_buffer); + return; + } + + if (prev_buffer != buffer) + { + if (buffer) + { + InterlockedIncrement(&buffer->resource.bind_count); + wined3d_buffer_incref(buffer); + } + if (prev_buffer) + { + InterlockedDecrement(&prev_buffer->resource.bind_count); + wined3d_buffer_decref(prev_buffer); + } + } +} + +struct wined3d_buffer * CDECL wined3d_device_get_stream_output(struct wined3d_device *device, + UINT idx, UINT *offset) +{ + TRACE("device %p, idx %u, offset %p.\n", device, idx, offset); + + if (idx >= MAX_STREAM_OUT) + { + WARN("Invalid stream output %u.\n", idx); + return NULL; + } + + *offset = device->stateBlock->state.stream_output[idx].offset; + return device->stateBlock->state.stream_output[idx].buffer; +} + HRESULT CDECL wined3d_device_set_stream_source(struct wined3d_device *device, UINT stream_idx, struct wined3d_buffer *buffer, UINT offset, UINT stride) { @@ -1736,7 +1634,7 @@ HRESULT CDECL wined3d_device_get_stream_source_freq(const struct wined3d_device return WINED3D_OK; } -HRESULT CDECL wined3d_device_set_transform(struct wined3d_device *device, +void CDECL wined3d_device_set_transform(struct wined3d_device *device, enum wined3d_transform_state d3dts, const struct wined3d_matrix *matrix) { TRACE("device %p, state %s, matrix %p.\n", @@ -1752,7 +1650,7 @@ HRESULT CDECL wined3d_device_set_transform(struct wined3d_device *device, TRACE("Recording... not performing anything.\n"); device->updateStateBlock->changed.transform[d3dts >> 5] |= 1 << (d3dts & 0x1f); device->updateStateBlock->state.transforms[d3dts] = *matrix; - return WINED3D_OK; + return; } /* If the new matrix is the same as the current one, @@ -1764,7 +1662,7 @@ HRESULT CDECL wined3d_device_set_transform(struct wined3d_device *device, if (!memcmp(&device->stateBlock->state.transforms[d3dts].u.m[0][0], matrix, sizeof(*matrix))) { TRACE("The application is setting the same matrix over again.\n"); - return WINED3D_OK; + return; } device->stateBlock->state.transforms[d3dts] = *matrix; @@ -1773,25 +1671,20 @@ HRESULT CDECL wined3d_device_set_transform(struct wined3d_device *device, if (d3dts < WINED3D_TS_WORLD_MATRIX(device->adapter->gl_info.limits.blends)) device_invalidate_state(device, STATE_TRANSFORM(d3dts)); - - return WINED3D_OK; - } -HRESULT CDECL wined3d_device_get_transform(const struct wined3d_device *device, +void CDECL wined3d_device_get_transform(const struct wined3d_device *device, enum wined3d_transform_state state, struct wined3d_matrix *matrix) { TRACE("device %p, state %s, matrix %p.\n", device, debug_d3dtstype(state), matrix); *matrix = device->stateBlock->state.transforms[state]; - - return WINED3D_OK; } -HRESULT CDECL wined3d_device_multiply_transform(struct wined3d_device *device, +void CDECL wined3d_device_multiply_transform(struct wined3d_device *device, enum wined3d_transform_state state, const struct wined3d_matrix *matrix) { - const struct wined3d_matrix *mat = NULL; + const struct wined3d_matrix *mat; struct wined3d_matrix temp; TRACE("device %p, state %s, matrix %p.\n", device, debug_d3dtstype(state), matrix); @@ -1803,14 +1696,14 @@ HRESULT CDECL wined3d_device_multiply_transform(struct wined3d_device *device, if (state > HIGHEST_TRANSFORMSTATE) { WARN("Unhandled transform state %#x.\n", state); - return WINED3D_OK; + return; } mat = &device->updateStateBlock->state.transforms[state]; multiply_matrix(&temp, mat, matrix); /* Apply change via set transform - will reapply to eg. lights this way. */ - return wined3d_device_set_transform(device, state, &temp); + wined3d_device_set_transform(device, state, &temp); } /* Note lights are real special cases. Although the device caps state only @@ -1872,10 +1765,8 @@ HRESULT CDECL wined3d_device_set_light(struct wined3d_device *device, TRACE("Adding new light\n"); object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Out of memory error when allocating a light\n"); return E_OUTOFMEMORY; - } + list_add_head(&device->updateStateBlock->state.light_map[hash_idx], &object->entry); object->glIndex = -1; object->OriginalIndex = light_idx; @@ -2193,7 +2084,7 @@ HRESULT CDECL wined3d_device_get_clip_status(const struct wined3d_device *device return WINED3D_OK; } -HRESULT CDECL wined3d_device_set_material(struct wined3d_device *device, const struct wined3d_material *material) +void CDECL wined3d_device_set_material(struct wined3d_device *device, const struct wined3d_material *material) { TRACE("device %p, material %p.\n", device, material); @@ -2204,15 +2095,13 @@ HRESULT CDECL wined3d_device_set_material(struct wined3d_device *device, const s if (device->isRecordingState) { TRACE("Recording... not performing anything.\n"); - return WINED3D_OK; + return; } device_invalidate_state(device, STATE_MATERIAL); - - return WINED3D_OK; } -HRESULT CDECL wined3d_device_get_material(const struct wined3d_device *device, struct wined3d_material *material) +void CDECL wined3d_device_get_material(const struct wined3d_device *device, struct wined3d_material *material) { TRACE("device %p, material %p.\n", device, material); @@ -2231,11 +2120,9 @@ HRESULT CDECL wined3d_device_get_material(const struct wined3d_device *device, s material->emissive.r, material->emissive.g, material->emissive.b, material->emissive.a); TRACE("power %.8e.\n", material->power); - - return WINED3D_OK; } -HRESULT CDECL wined3d_device_set_index_buffer(struct wined3d_device *device, +void CDECL wined3d_device_set_index_buffer(struct wined3d_device *device, struct wined3d_buffer *buffer, enum wined3d_format_id format_id) { struct wined3d_buffer *prev_buffer; @@ -2257,7 +2144,7 @@ HRESULT CDECL wined3d_device_set_index_buffer(struct wined3d_device *device, wined3d_buffer_incref(buffer); if (prev_buffer) wined3d_buffer_decref(prev_buffer); - return WINED3D_OK; + return; } if (prev_buffer != buffer) @@ -2274,43 +2161,22 @@ HRESULT CDECL wined3d_device_set_index_buffer(struct wined3d_device *device, wined3d_buffer_decref(prev_buffer); } } - - return WINED3D_OK; } -HRESULT CDECL wined3d_device_get_index_buffer(const struct wined3d_device *device, struct wined3d_buffer **buffer) +struct wined3d_buffer * CDECL wined3d_device_get_index_buffer(const struct wined3d_device *device, + enum wined3d_format_id *format) { - TRACE("device %p, buffer %p.\n", device, buffer); + TRACE("device %p, format %p.\n", device, format); - *buffer = device->stateBlock->state.index_buffer; - - if (*buffer) - wined3d_buffer_incref(*buffer); - - TRACE("Returning %p.\n", *buffer); - - return WINED3D_OK; + *format = device->stateBlock->state.index_format; + return device->stateBlock->state.index_buffer; } -/* Method to offer d3d9 a simple way to set the base vertex index without messing with the index buffer */ -HRESULT CDECL wined3d_device_set_base_vertex_index(struct wined3d_device *device, INT base_index) +void CDECL wined3d_device_set_base_vertex_index(struct wined3d_device *device, INT base_index) { TRACE("device %p, base_index %d.\n", device, base_index); - if (device->updateStateBlock->state.base_vertex_index == base_index) - { - TRACE("Application is setting the old value over, nothing to do\n"); - return WINED3D_OK; - } - device->updateStateBlock->state.base_vertex_index = base_index; - - if (device->isRecordingState) - { - TRACE("Recording... not performing anything\n"); - return WINED3D_OK; - } - return WINED3D_OK; } INT CDECL wined3d_device_get_base_vertex_index(const struct wined3d_device *device) @@ -2320,7 +2186,7 @@ INT CDECL wined3d_device_get_base_vertex_index(const struct wined3d_device *devi return device->stateBlock->state.base_vertex_index; } -HRESULT CDECL wined3d_device_set_viewport(struct wined3d_device *device, const struct wined3d_viewport *viewport) +void CDECL wined3d_device_set_viewport(struct wined3d_device *device, const struct wined3d_viewport *viewport) { TRACE("device %p, viewport %p.\n", device, viewport); TRACE("x %u, y %u, w %u, h %u, min_z %.8e, max_z %.8e.\n", @@ -2333,24 +2199,20 @@ HRESULT CDECL wined3d_device_set_viewport(struct wined3d_device *device, const s if (device->isRecordingState) { TRACE("Recording... not performing anything\n"); - return WINED3D_OK; + return; } device_invalidate_state(device, STATE_VIEWPORT); - - return WINED3D_OK; } -HRESULT CDECL wined3d_device_get_viewport(const struct wined3d_device *device, struct wined3d_viewport *viewport) +void CDECL wined3d_device_get_viewport(const struct wined3d_device *device, struct wined3d_viewport *viewport) { TRACE("device %p, viewport %p.\n", device, viewport); *viewport = device->stateBlock->state.viewport; - - return WINED3D_OK; } -HRESULT CDECL wined3d_device_set_render_state(struct wined3d_device *device, +void CDECL wined3d_device_set_render_state(struct wined3d_device *device, enum wined3d_render_state state, DWORD value) { DWORD old_value = device->stateBlock->state.render_states[state]; @@ -2364,7 +2226,7 @@ HRESULT CDECL wined3d_device_set_render_state(struct wined3d_device *device, if (device->isRecordingState) { TRACE("Recording... not performing anything.\n"); - return WINED3D_OK; + return; } /* Compared here and not before the assignment to allow proper stateblock recording. */ @@ -2372,21 +2234,16 @@ HRESULT CDECL wined3d_device_set_render_state(struct wined3d_device *device, TRACE("Application is setting the old value over, nothing to do.\n"); else device_invalidate_state(device, STATE_RENDER(state)); - - return WINED3D_OK; } -HRESULT CDECL wined3d_device_get_render_state(const struct wined3d_device *device, - enum wined3d_render_state state, DWORD *value) +DWORD CDECL wined3d_device_get_render_state(const struct wined3d_device *device, enum wined3d_render_state state) { - TRACE("device %p, state %s (%#x), value %p.\n", device, debug_d3drenderstate(state), state, value); + TRACE("device %p, state %s (%#x).\n", device, debug_d3drenderstate(state), state); - *value = device->stateBlock->state.render_states[state]; - - return WINED3D_OK; + return device->stateBlock->state.render_states[state]; } -HRESULT CDECL wined3d_device_set_sampler_state(struct wined3d_device *device, +void CDECL wined3d_device_set_sampler_state(struct wined3d_device *device, UINT sampler_idx, enum wined3d_sampler_state state, DWORD value) { DWORD old_value; @@ -2401,7 +2258,7 @@ HRESULT CDECL wined3d_device_set_sampler_state(struct wined3d_device *device, / sizeof(*device->stateBlock->state.sampler_states)) { WARN("Invalid sampler %u.\n", sampler_idx); - return WINED3D_OK; /* Windows accepts overflowing this array ... we do not. */ + return; /* Windows accepts overflowing this array ... we do not. */ } old_value = device->stateBlock->state.sampler_states[sampler_idx][state]; @@ -2412,25 +2269,23 @@ HRESULT CDECL wined3d_device_set_sampler_state(struct wined3d_device *device, if (device->isRecordingState) { TRACE("Recording... not performing anything.\n"); - return WINED3D_OK; + return; } if (old_value == value) { TRACE("Application is setting the old value over, nothing to do.\n"); - return WINED3D_OK; + return; } device_invalidate_state(device, STATE_SAMPLER(sampler_idx)); - - return WINED3D_OK; } -HRESULT CDECL wined3d_device_get_sampler_state(const struct wined3d_device *device, - UINT sampler_idx, enum wined3d_sampler_state state, DWORD *value) +DWORD CDECL wined3d_device_get_sampler_state(const struct wined3d_device *device, + UINT sampler_idx, enum wined3d_sampler_state state) { - TRACE("device %p, sampler_idx %u, state %s, value %p.\n", - device, sampler_idx, debug_d3dsamplerstate(state), value); + TRACE("device %p, sampler_idx %u, state %s.\n", + device, sampler_idx, debug_d3dsamplerstate(state)); if (sampler_idx >= WINED3DVERTEXTEXTURESAMPLER0 && sampler_idx <= WINED3DVERTEXTEXTURESAMPLER3) sampler_idx -= (WINED3DVERTEXTEXTURESAMPLER0 - MAX_FRAGMENT_SAMPLERS); @@ -2439,16 +2294,13 @@ HRESULT CDECL wined3d_device_get_sampler_state(const struct wined3d_device *devi / sizeof(*device->stateBlock->state.sampler_states)) { WARN("Invalid sampler %u.\n", sampler_idx); - return WINED3D_OK; /* Windows accepts overflowing this array ... we do not. */ + return 0; /* Windows accepts overflowing this array ... we do not. */ } - *value = device->stateBlock->state.sampler_states[sampler_idx][state]; - TRACE("Returning %#x.\n", *value); - - return WINED3D_OK; + return device->stateBlock->state.sampler_states[sampler_idx][state]; } -HRESULT CDECL wined3d_device_set_scissor_rect(struct wined3d_device *device, const RECT *rect) +void CDECL wined3d_device_set_scissor_rect(struct wined3d_device *device, const RECT *rect) { TRACE("device %p, rect %s.\n", device, wine_dbgstr_rect(rect)); @@ -2456,32 +2308,28 @@ HRESULT CDECL wined3d_device_set_scissor_rect(struct wined3d_device *device, con if (EqualRect(&device->updateStateBlock->state.scissor_rect, rect)) { TRACE("App is setting the old scissor rectangle over, nothing to do.\n"); - return WINED3D_OK; + return; } CopyRect(&device->updateStateBlock->state.scissor_rect, rect); if (device->isRecordingState) { TRACE("Recording... not performing anything.\n"); - return WINED3D_OK; + return; } device_invalidate_state(device, STATE_SCISSORRECT); - - return WINED3D_OK; } -HRESULT CDECL wined3d_device_get_scissor_rect(const struct wined3d_device *device, RECT *rect) +void CDECL wined3d_device_get_scissor_rect(const struct wined3d_device *device, RECT *rect) { TRACE("device %p, rect %p.\n", device, rect); *rect = device->updateStateBlock->state.scissor_rect; TRACE("Returning rect %s.\n", wine_dbgstr_rect(rect)); - - return WINED3D_OK; } -HRESULT CDECL wined3d_device_set_vertex_declaration(struct wined3d_device *device, +void CDECL wined3d_device_set_vertex_declaration(struct wined3d_device *device, struct wined3d_vertex_declaration *declaration) { struct wined3d_vertex_declaration *prev = device->updateStateBlock->state.vertex_declaration; @@ -2499,78 +2347,146 @@ HRESULT CDECL wined3d_device_set_vertex_declaration(struct wined3d_device *devic if (device->isRecordingState) { TRACE("Recording... not performing anything.\n"); - return WINED3D_OK; + return; } - else if (declaration == prev) + + if (declaration == prev) { /* Checked after the assignment to allow proper stateblock recording. */ TRACE("Application is setting the old declaration over, nothing to do.\n"); - return WINED3D_OK; + return; } device_invalidate_state(device, STATE_VDECL); - return WINED3D_OK; } -HRESULT CDECL wined3d_device_get_vertex_declaration(const struct wined3d_device *device, - struct wined3d_vertex_declaration **declaration) +struct wined3d_vertex_declaration * CDECL wined3d_device_get_vertex_declaration(const struct wined3d_device *device) { - TRACE("device %p, declaration %p.\n", device, declaration); + TRACE("device %p.\n", device); - *declaration = device->stateBlock->state.vertex_declaration; - if (*declaration) - wined3d_vertex_declaration_incref(*declaration); - - return WINED3D_OK; + return device->stateBlock->state.vertex_declaration; } -HRESULT CDECL wined3d_device_set_vertex_shader(struct wined3d_device *device, struct wined3d_shader *shader) +void CDECL wined3d_device_set_vertex_shader(struct wined3d_device *device, struct wined3d_shader *shader) { struct wined3d_shader *prev = device->updateStateBlock->state.vertex_shader; TRACE("device %p, shader %p.\n", device, shader); - device->updateStateBlock->state.vertex_shader = shader; - device->updateStateBlock->changed.vertexShader = TRUE; - - if (device->isRecordingState) - { - if (shader) - wined3d_shader_incref(shader); - if (prev) - wined3d_shader_decref(prev); - TRACE("Recording... not performing anything.\n"); - return WINED3D_OK; - } - - if (shader == prev) - { - TRACE("Application is setting the old shader over, nothing to do.\n"); - return WINED3D_OK; - } - if (shader) wined3d_shader_incref(shader); if (prev) wined3d_shader_decref(prev); - device_invalidate_state(device, STATE_VSHADER); + device->updateStateBlock->state.vertex_shader = shader; + device->updateStateBlock->changed.vertexShader = TRUE; - return WINED3D_OK; + if (device->isRecordingState) + { + TRACE("Recording... not performing anything.\n"); + return; + } + + if (shader == prev) + { + TRACE("Application is setting the old shader over, nothing to do.\n"); + return; + } + + device_invalidate_state(device, STATE_VSHADER); } struct wined3d_shader * CDECL wined3d_device_get_vertex_shader(const struct wined3d_device *device) { - struct wined3d_shader *shader; - TRACE("device %p.\n", device); - shader = device->stateBlock->state.vertex_shader; - if (shader) - wined3d_shader_incref(shader); + return device->stateBlock->state.vertex_shader; +} - TRACE("Returning %p.\n", shader); - return shader; +void CDECL wined3d_device_set_vs_cb(struct wined3d_device *device, UINT idx, struct wined3d_buffer *buffer) +{ + struct wined3d_buffer *prev; + + TRACE("device %p, idx %u, buffer %p.\n", device, idx, buffer); + + if (idx >= MAX_CONSTANT_BUFFERS) + { + WARN("Invalid constant buffer index %u.\n", idx); + return; + } + + prev = device->updateStateBlock->state.vs_cb[idx]; + device->updateStateBlock->state.vs_cb[idx] = buffer; + + if (device->isRecordingState) + { + if (buffer) + wined3d_buffer_incref(buffer); + if (prev) + wined3d_buffer_decref(prev); + return; + } + + if (prev != buffer) + { + if (buffer) + { + InterlockedIncrement(&buffer->resource.bind_count); + wined3d_buffer_incref(buffer); + } + if (prev) + { + InterlockedDecrement(&prev->resource.bind_count); + wined3d_buffer_decref(prev); + } + } +} + +struct wined3d_buffer * CDECL wined3d_device_get_vs_cb(const struct wined3d_device *device, UINT idx) +{ + TRACE("device %p, idx %u.\n", device, idx); + + if (idx >= MAX_CONSTANT_BUFFERS) + { + WARN("Invalid constant buffer index %u.\n", idx); + return NULL; + } + + return device->stateBlock->state.vs_cb[idx]; +} + +void CDECL wined3d_device_set_vs_sampler(struct wined3d_device *device, UINT idx, struct wined3d_sampler *sampler) +{ + struct wined3d_sampler *prev; + + TRACE("device %p, idx %u, sampler %p.\n", device, idx, sampler); + + if (idx >= MAX_SAMPLER_OBJECTS) + { + WARN("Invalid sampler index %u.\n", idx); + return; + } + + prev = device->updateStateBlock->state.vs_sampler[idx]; + device->updateStateBlock->state.vs_sampler[idx] = sampler; + + if (sampler) + wined3d_sampler_incref(sampler); + if (prev) + wined3d_sampler_decref(prev); +} + +struct wined3d_sampler * CDECL wined3d_device_get_vs_sampler(const struct wined3d_device *device, UINT idx) +{ + TRACE("device %p, idx %u.\n", device, idx); + + if (idx >= MAX_SAMPLER_OBJECTS) + { + WARN("Invalid sampler index %u.\n", idx); + return NULL; + } + + return device->stateBlock->state.vs_sampler[idx]; } HRESULT CDECL wined3d_device_set_vs_consts_b(struct wined3d_device *device, @@ -2919,53 +2835,126 @@ void device_update_tex_unit_map(struct wined3d_device *device) device_map_vsamplers(device, ps, gl_info); } -HRESULT CDECL wined3d_device_set_pixel_shader(struct wined3d_device *device, struct wined3d_shader *shader) +void CDECL wined3d_device_set_pixel_shader(struct wined3d_device *device, struct wined3d_shader *shader) { struct wined3d_shader *prev = device->updateStateBlock->state.pixel_shader; TRACE("device %p, shader %p.\n", device, shader); - device->updateStateBlock->state.pixel_shader = shader; - device->updateStateBlock->changed.pixelShader = TRUE; - - if (device->isRecordingState) - { - if (shader) - wined3d_shader_incref(shader); - if (prev) - wined3d_shader_decref(prev); - TRACE("Recording... not performing anything.\n"); - return WINED3D_OK; - } - - if (shader == prev) - { - TRACE("Application is setting the old shader over, nothing to do.\n"); - return WINED3D_OK; - } - if (shader) wined3d_shader_incref(shader); if (prev) wined3d_shader_decref(prev); - device_invalidate_state(device, STATE_PIXELSHADER); + device->updateStateBlock->state.pixel_shader = shader; + device->updateStateBlock->changed.pixelShader = TRUE; - return WINED3D_OK; + if (device->isRecordingState) + { + TRACE("Recording... not performing anything.\n"); + return; + } + + if (shader == prev) + { + TRACE("Application is setting the old shader over, nothing to do.\n"); + return; + } + + device_invalidate_state(device, STATE_PIXELSHADER); } struct wined3d_shader * CDECL wined3d_device_get_pixel_shader(const struct wined3d_device *device) { - struct wined3d_shader *shader; - TRACE("device %p.\n", device); - shader = device->stateBlock->state.pixel_shader; - if (shader) - wined3d_shader_incref(shader); + return device->stateBlock->state.pixel_shader; +} - TRACE("Returning %p.\n", shader); - return shader; +void CDECL wined3d_device_set_ps_cb(struct wined3d_device *device, UINT idx, struct wined3d_buffer *buffer) +{ + struct wined3d_buffer *prev; + + TRACE("device %p, idx %u, buffer %p.\n", device, idx, buffer); + + if (idx >= MAX_CONSTANT_BUFFERS) + { + WARN("Invalid constant buffer index %u.\n", idx); + return; + } + + prev = device->updateStateBlock->state.ps_cb[idx]; + device->updateStateBlock->state.ps_cb[idx] = buffer; + + if (device->isRecordingState) + { + if (buffer) + wined3d_buffer_incref(buffer); + if (prev) + wined3d_buffer_decref(prev); + return; + } + + if (prev != buffer) + { + if (buffer) + { + InterlockedIncrement(&buffer->resource.bind_count); + wined3d_buffer_incref(buffer); + } + if (prev) + { + InterlockedDecrement(&prev->resource.bind_count); + wined3d_buffer_decref(prev); + } + } +} + +struct wined3d_buffer * CDECL wined3d_device_get_ps_cb(const struct wined3d_device *device, UINT idx) +{ + TRACE("device %p, idx %u.\n", device, idx); + + if (idx >= MAX_CONSTANT_BUFFERS) + { + WARN("Invalid constant buffer index %u.\n", idx); + return NULL; + } + + return device->stateBlock->state.ps_cb[idx]; +} + +void CDECL wined3d_device_set_ps_sampler(struct wined3d_device *device, UINT idx, struct wined3d_sampler *sampler) +{ + struct wined3d_sampler *prev; + + TRACE("device %p, idx %u, sampler %p.\n", device, idx, sampler); + + if (idx >= MAX_SAMPLER_OBJECTS) + { + WARN("Invalid sampler index %u.\n", idx); + return; + } + + prev = device->updateStateBlock->state.ps_sampler[idx]; + device->updateStateBlock->state.ps_sampler[idx] = sampler; + + if (sampler) + wined3d_sampler_incref(sampler); + if (prev) + wined3d_sampler_decref(prev); +} + +struct wined3d_sampler * CDECL wined3d_device_get_ps_sampler(const struct wined3d_device *device, UINT idx) +{ + TRACE("device %p, idx %u.\n", device, idx); + + if (idx >= MAX_SAMPLER_OBJECTS) + { + WARN("Invalid sampler index %u.\n", idx); + return NULL; + } + + return device->stateBlock->state.ps_sampler[idx]; } HRESULT CDECL wined3d_device_set_ps_consts_b(struct wined3d_device *device, @@ -3105,6 +3094,118 @@ HRESULT CDECL wined3d_device_get_ps_consts_f(const struct wined3d_device *device return WINED3D_OK; } +void CDECL wined3d_device_set_geometry_shader(struct wined3d_device *device, struct wined3d_shader *shader) +{ + struct wined3d_shader *prev = device->updateStateBlock->state.geometry_shader; + + TRACE("device %p, shader %p.\n", device, shader); + + if (shader) + wined3d_shader_incref(shader); + if (prev) + wined3d_shader_decref(prev); + + device->updateStateBlock->state.geometry_shader = shader; + + if (device->isRecordingState || shader == prev) + return; + + device_invalidate_state(device, STATE_GEOMETRY_SHADER); +} + +struct wined3d_shader * CDECL wined3d_device_get_geometry_shader(const struct wined3d_device *device) +{ + TRACE("device %p.\n", device); + + return device->stateBlock->state.geometry_shader; +} + +void CDECL wined3d_device_set_gs_cb(struct wined3d_device *device, UINT idx, struct wined3d_buffer *buffer) +{ + struct wined3d_buffer *prev; + + TRACE("device %p, idx %u, buffer %p.\n", device, idx, buffer); + + if (idx >= MAX_CONSTANT_BUFFERS) + { + WARN("Invalid constant buffer index %u.\n", idx); + return; + } + + prev = device->updateStateBlock->state.gs_cb[idx]; + device->updateStateBlock->state.gs_cb[idx] = buffer; + + if (device->isRecordingState) + { + if (buffer) + wined3d_buffer_incref(buffer); + if (prev) + wined3d_buffer_decref(prev); + return; + } + + if (prev != buffer) + { + if (buffer) + { + InterlockedIncrement(&buffer->resource.bind_count); + wined3d_buffer_incref(buffer); + } + if (prev) + { + InterlockedDecrement(&prev->resource.bind_count); + wined3d_buffer_decref(prev); + } + } +} + +struct wined3d_buffer * CDECL wined3d_device_get_gs_cb(const struct wined3d_device *device, UINT idx) +{ + TRACE("device %p, idx %u.\n", device, idx); + + if (idx >= MAX_CONSTANT_BUFFERS) + { + WARN("Invalid constant buffer index %u.\n", idx); + return NULL; + } + + return device->stateBlock->state.gs_cb[idx]; +} + +void CDECL wined3d_device_set_gs_sampler(struct wined3d_device *device, UINT idx, struct wined3d_sampler *sampler) +{ + struct wined3d_sampler *prev; + + TRACE("device %p, idx %u, sampler %p.\n", device, idx, sampler); + + if (idx >= MAX_SAMPLER_OBJECTS) + { + WARN("Invalid sampler index %u.\n", idx); + return; + } + + prev = device->updateStateBlock->state.gs_sampler[idx]; + device->updateStateBlock->state.gs_sampler[idx] = sampler; + + if (sampler) + wined3d_sampler_incref(sampler); + if (prev) + wined3d_sampler_decref(prev); +} + +struct wined3d_sampler * CDECL wined3d_device_get_gs_sampler(const struct wined3d_device *device, UINT idx) +{ + TRACE("device %p, idx %u.\n", device, idx); + + if (idx >= MAX_SAMPLER_OBJECTS) + { + WARN("Invalid sampler index %u.\n", idx); + return NULL; + } + + return device->stateBlock->state.gs_sampler[idx]; +} + /* Context activation is done by the caller. */ /* Do not call while under the GL lock. */ #define copy_and_next(dest, src, size) memcpy(dest, src, size); dest += (size) @@ -3381,7 +3482,6 @@ HRESULT CDECL wined3d_device_process_vertices(struct wined3d_device *device, struct wined3d_state *state = &device->stateBlock->state; struct wined3d_stream_info stream_info; const struct wined3d_gl_info *gl_info; - BOOL streamWasUP = state->user_stream; struct wined3d_context *context; struct wined3d_shader *vs; unsigned int i; @@ -3399,14 +3499,9 @@ HRESULT CDECL wined3d_device_process_vertices(struct wined3d_device *device, context = context_acquire(device, NULL); gl_info = context->gl_info; - /* ProcessVertices reads from vertex buffers, which have to be assigned. - * DrawPrimitive and DrawPrimitiveUP control the streamIsUP flag, thus - * restore it afterwards. */ vs = state->vertex_shader; state->vertex_shader = NULL; - state->user_stream = FALSE; device_stream_info_from_declaration(device, &stream_info); - state->user_stream = streamWasUP; state->vertex_shader = vs; /* We can't convert FROM a VBO, and vertex buffers used to source into @@ -3427,10 +3522,8 @@ HRESULT CDECL wined3d_device_process_vertices(struct wined3d_device *device, struct wined3d_buffer *vb = state->streams[e->stream_idx].buffer; e->data.buffer_object = 0; e->data.addr = (BYTE *)((ULONG_PTR)e->data.addr + (ULONG_PTR)buffer_get_sysmem(vb, gl_info)); - ENTER_GL(); GL_EXTCALL(glDeleteBuffersARB(1, &vb->buffer_object)); vb->buffer_object = 0; - LEAVE_GL(); } if (e->data.addr) e->data.addr += e->stride * src_start_idx; @@ -3444,7 +3537,7 @@ HRESULT CDECL wined3d_device_process_vertices(struct wined3d_device *device, return hr; } -HRESULT CDECL wined3d_device_set_texture_stage_state(struct wined3d_device *device, +void CDECL wined3d_device_set_texture_stage_state(struct wined3d_device *device, UINT stage, enum wined3d_texture_stage_state state, DWORD value) { const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; @@ -3456,14 +3549,14 @@ HRESULT CDECL wined3d_device_set_texture_stage_state(struct wined3d_device *devi if (state > WINED3D_HIGHEST_TEXTURE_STATE) { WARN("Invalid state %#x passed.\n", state); - return WINED3D_OK; + return; } if (stage >= gl_info->limits.texture_stages) { WARN("Attempting to set stage %u which is higher than the max stage %u, ignoring.\n", stage, gl_info->limits.texture_stages - 1); - return WINED3D_OK; + return; } old_value = device->updateStateBlock->state.texture_states[stage][state]; @@ -3473,14 +3566,14 @@ HRESULT CDECL wined3d_device_set_texture_stage_state(struct wined3d_device *devi if (device->isRecordingState) { TRACE("Recording... not performing anything.\n"); - return WINED3D_OK; + return; } /* Checked after the assignments to allow proper stateblock recording. */ if (old_value == value) { TRACE("Application is setting the old value over, nothing to do.\n"); - return WINED3D_OK; + return; } if (stage > device->stateBlock->state.lowest_disabled_stage @@ -3490,7 +3583,7 @@ HRESULT CDECL wined3d_device_set_texture_stage_state(struct wined3d_device *devi /* Colorop change above lowest disabled stage? That won't change * anything in the GL setup. Changes in other states are important on * disabled stages too. */ - return WINED3D_OK; + return; } if (state == WINED3D_TSS_COLOR_OP) @@ -3534,26 +3627,21 @@ HRESULT CDECL wined3d_device_set_texture_stage_state(struct wined3d_device *devi } device_invalidate_state(device, STATE_TEXTURESTAGE(stage, state)); - - return WINED3D_OK; } -HRESULT CDECL wined3d_device_get_texture_stage_state(const struct wined3d_device *device, - UINT stage, enum wined3d_texture_stage_state state, DWORD *value) +DWORD CDECL wined3d_device_get_texture_stage_state(const struct wined3d_device *device, + UINT stage, enum wined3d_texture_stage_state state) { - TRACE("device %p, stage %u, state %s, value %p.\n", - device, stage, debug_d3dtexturestate(state), value); + TRACE("device %p, stage %u, state %s.\n", + device, stage, debug_d3dtexturestate(state)); if (state > WINED3D_HIGHEST_TEXTURE_STATE) { WARN("Invalid state %#x passed.\n", state); - return WINED3D_OK; + return 0; } - *value = device->updateStateBlock->state.texture_states[stage][state]; - TRACE("Returning %#x.\n", *value); - - return WINED3D_OK; + return device->updateStateBlock->state.texture_states[stage][state]; } HRESULT CDECL wined3d_device_set_texture(struct wined3d_device *device, @@ -3630,8 +3718,6 @@ HRESULT CDECL wined3d_device_set_texture(struct wined3d_device *device, { LONG bind_count = InterlockedDecrement(&prev->resource.bind_count); - wined3d_texture_decref(prev); - if (!texture && stage < gl_info->limits.texture_stages) { device_invalidate_state(device, STATE_TEXTURESTAGE(stage, WINED3D_TSS_COLOR_OP)); @@ -3655,6 +3741,8 @@ HRESULT CDECL wined3d_device_set_texture(struct wined3d_device *device, } } } + + wined3d_texture_decref(prev); } device_invalidate_state(device, STATE_SAMPLER(stage)); @@ -3662,10 +3750,9 @@ HRESULT CDECL wined3d_device_set_texture(struct wined3d_device *device, return WINED3D_OK; } -HRESULT CDECL wined3d_device_get_texture(const struct wined3d_device *device, - UINT stage, struct wined3d_texture **texture) +struct wined3d_texture * CDECL wined3d_device_get_texture(const struct wined3d_device *device, UINT stage) { - TRACE("device %p, stage %u, texture %p.\n", device, stage, texture); + TRACE("device %p, stage %u.\n", device, stage); if (stage >= WINED3DVERTEXTEXTURESAMPLER0 && stage <= WINED3DVERTEXTEXTURESAMPLER3) stage -= (WINED3DVERTEXTEXTURESAMPLER0 - MAX_FRAGMENT_SAMPLERS); @@ -3673,42 +3760,25 @@ HRESULT CDECL wined3d_device_get_texture(const struct wined3d_device *device, if (stage >= sizeof(device->stateBlock->state.textures) / sizeof(*device->stateBlock->state.textures)) { WARN("Ignoring invalid stage %u.\n", stage); - return WINED3D_OK; /* Windows accepts overflowing this array ... we do not. */ + return NULL; /* Windows accepts overflowing this array ... we do not. */ } - *texture = device->stateBlock->state.textures[stage]; - if (*texture) - wined3d_texture_incref(*texture); - - TRACE("Returning %p.\n", *texture); - - return WINED3D_OK; + return device->stateBlock->state.textures[stage]; } HRESULT CDECL wined3d_device_get_back_buffer(const struct wined3d_device *device, UINT swapchain_idx, UINT backbuffer_idx, enum wined3d_backbuffer_type backbuffer_type, struct wined3d_surface **backbuffer) { struct wined3d_swapchain *swapchain; - HRESULT hr; TRACE("device %p, swapchain_idx %u, backbuffer_idx %u, backbuffer_type %#x, backbuffer %p.\n", device, swapchain_idx, backbuffer_idx, backbuffer_type, backbuffer); - hr = wined3d_device_get_swapchain(device, swapchain_idx, &swapchain); - if (FAILED(hr)) - { - WARN("Failed to get swapchain %u, hr %#x.\n", swapchain_idx, hr); - return hr; - } - - hr = wined3d_swapchain_get_back_buffer(swapchain, backbuffer_idx, backbuffer_type, backbuffer); - wined3d_swapchain_decref(swapchain); - if (FAILED(hr)) - { - WARN("Failed to get backbuffer %u, hr %#x.\n", backbuffer_idx, hr); - return hr; - } + if (!(swapchain = wined3d_device_get_swapchain(device, swapchain_idx))) + return WINED3DERR_INVALIDCALL; + if (!(*backbuffer = wined3d_swapchain_get_back_buffer(swapchain, backbuffer_idx, backbuffer_type))) + return WINED3DERR_INVALIDCALL; return WINED3D_OK; } @@ -3724,18 +3794,14 @@ HRESULT CDECL wined3d_device_get_display_mode(const struct wined3d_device *devic struct wined3d_display_mode *mode, enum wined3d_display_rotation *rotation) { struct wined3d_swapchain *swapchain; - HRESULT hr; TRACE("device %p, swapchain_idx %u, mode %p, rotation %p.\n", device, swapchain_idx, mode, rotation); - if (SUCCEEDED(hr = wined3d_device_get_swapchain(device, swapchain_idx, &swapchain))) - { - hr = wined3d_swapchain_get_display_mode(swapchain, mode, rotation); - wined3d_swapchain_decref(swapchain); - } + if (!(swapchain = wined3d_device_get_swapchain(device, swapchain_idx))) + return WINED3DERR_INVALIDCALL; - return hr; + return wined3d_swapchain_get_display_mode(swapchain, mode, rotation); } HRESULT CDECL wined3d_device_begin_stateblock(struct wined3d_device *device) @@ -3852,6 +3918,12 @@ HRESULT CDECL wined3d_device_clear(struct wined3d_device *device, DWORD rect_cou TRACE("device %p, rect_count %u, rects %p, flags %#x, color {%.8e, %.8e, %.8e, %.8e}, depth %.8e, stencil %u.\n", device, rect_count, rects, flags, color->r, color->g, color->b, color->a, depth, stencil); + if (!rect_count && rects) + { + WARN("Rects is %p, but rect_count is 0, ignoring clear\n", rects); + return WINED3D_OK; + } + if (flags & (WINED3DCLEAR_ZBUFFER | WINED3DCLEAR_STENCIL)) { struct wined3d_surface *ds = device->fb.depth_stencil; @@ -3908,13 +3980,6 @@ HRESULT CDECL wined3d_device_draw_primitive(struct wined3d_device *device, UINT return WINED3DERR_INVALIDCALL; } - /* The index buffer is not needed here, but restore it, otherwise it is hell to keep track of */ - if (device->stateBlock->state.user_stream) - { - device_invalidate_state(device, STATE_INDEXBUFFER); - device->stateBlock->state.user_stream = FALSE; - } - if (device->stateBlock->state.load_base_vertex_index) { device->stateBlock->state.load_base_vertex_index = 0; @@ -3923,7 +3988,7 @@ HRESULT CDECL wined3d_device_draw_primitive(struct wined3d_device *device, UINT /* Account for the loading offset due to index buffers. Instead of * reloading all sources correct it with the startvertex parameter. */ - drawPrimitive(device, vertex_count, start_vertex, FALSE, NULL); + draw_primitive(device, start_vertex, vertex_count, 0, 0, FALSE, NULL); return WINED3D_OK; } @@ -3949,12 +4014,6 @@ HRESULT CDECL wined3d_device_draw_indexed_primitive(struct wined3d_device *devic return WINED3DERR_INVALIDCALL; } - if (device->stateBlock->state.user_stream) - { - device_invalidate_state(device, STATE_INDEXBUFFER); - device->stateBlock->state.user_stream = FALSE; - } - if (!gl_info->supported[ARB_DRAW_ELEMENTS_BASE_VERTEX] && device->stateBlock->state.load_base_vertex_index != device->stateBlock->state.base_vertex_index) { @@ -3962,163 +4021,17 @@ HRESULT CDECL wined3d_device_draw_indexed_primitive(struct wined3d_device *devic device_invalidate_state(device, STATE_BASEVERTEXINDEX); } - drawPrimitive(device, index_count, start_idx, TRUE, NULL); + draw_primitive(device, start_idx, index_count, 0, 0, TRUE, NULL); return WINED3D_OK; } -HRESULT CDECL wined3d_device_draw_primitive_up(struct wined3d_device *device, UINT vertex_count, - const void *stream_data, UINT stream_stride) +void CDECL wined3d_device_draw_indexed_primitive_instanced(struct wined3d_device *device, + UINT start_idx, UINT index_count, UINT start_instance, UINT instance_count) { - struct wined3d_stream_state *stream; - struct wined3d_buffer *vb; + TRACE("device %p, start_idx %u, index_count %u.\n", device, start_idx, index_count); - TRACE("device %p, vertex count %u, stream_data %p, stream_stride %u.\n", - device, vertex_count, stream_data, stream_stride); - - if (!device->stateBlock->state.vertex_declaration) - { - WARN("Called without a valid vertex declaration set.\n"); - return WINED3DERR_INVALIDCALL; - } - - /* Note in the following, it's not this type, but that's the purpose of streamIsUP */ - stream = &device->stateBlock->state.streams[0]; - vb = stream->buffer; - stream->buffer = (struct wined3d_buffer *)stream_data; - if (vb) - wined3d_buffer_decref(vb); - stream->offset = 0; - stream->stride = stream_stride; - device->stateBlock->state.user_stream = TRUE; - if (device->stateBlock->state.load_base_vertex_index) - { - device->stateBlock->state.load_base_vertex_index = 0; - device_invalidate_state(device, STATE_BASEVERTEXINDEX); - } - - /* TODO: Only mark dirty if drawing from a different UP address */ - device_invalidate_state(device, STATE_STREAMSRC); - - drawPrimitive(device, vertex_count, 0, FALSE, NULL); - - /* MSDN specifies stream zero settings must be set to NULL */ - stream->buffer = NULL; - stream->stride = 0; - - /* stream zero settings set to null at end, as per the msdn. No need to - * mark dirty here, the app has to set the new stream sources or use UP - * drawing again. */ - return WINED3D_OK; -} - -HRESULT CDECL wined3d_device_draw_indexed_primitive_up(struct wined3d_device *device, - UINT index_count, const void *index_data, enum wined3d_format_id index_data_format_id, - const void *stream_data, UINT stream_stride) -{ - struct wined3d_stream_state *stream; - struct wined3d_buffer *vb, *ib; - - TRACE("device %p, index_count %u, index_data %p, index_data_format %s, stream_data %p, stream_stride %u.\n", - device, index_count, index_data, debug_d3dformat(index_data_format_id), stream_data, stream_stride); - - if (!device->stateBlock->state.vertex_declaration) - { - WARN("(%p) : Called without a valid vertex declaration set\n", device); - return WINED3DERR_INVALIDCALL; - } - - stream = &device->stateBlock->state.streams[0]; - vb = stream->buffer; - stream->buffer = (struct wined3d_buffer *)stream_data; - if (vb) - wined3d_buffer_decref(vb); - stream->offset = 0; - stream->stride = stream_stride; - device->stateBlock->state.user_stream = TRUE; - device->stateBlock->state.index_format = index_data_format_id; - - /* Set to 0 as per msdn. Do it now due to the stream source loading during drawPrimitive */ - device->stateBlock->state.base_vertex_index = 0; - if (device->stateBlock->state.load_base_vertex_index) - { - device->stateBlock->state.load_base_vertex_index = 0; - device_invalidate_state(device, STATE_BASEVERTEXINDEX); - } - /* Invalidate the state until we have nicer tracking of the stream source pointers */ - device_invalidate_state(device, STATE_STREAMSRC); - device_invalidate_state(device, STATE_INDEXBUFFER); - - drawPrimitive(device, index_count, 0, TRUE, index_data); - - /* MSDN specifies stream zero settings and index buffer must be set to NULL */ - stream->buffer = NULL; - stream->stride = 0; - ib = device->stateBlock->state.index_buffer; - if (ib) - { - wined3d_buffer_decref(ib); - device->stateBlock->state.index_buffer = NULL; - } - /* No need to mark the stream source state dirty here. Either the app calls UP drawing again, or it has to call - * SetStreamSource to specify a vertex buffer - */ - - return WINED3D_OK; -} - -HRESULT CDECL wined3d_device_draw_primitive_strided(struct wined3d_device *device, - UINT vertex_count, const struct wined3d_strided_data *strided_data) -{ - /* Mark the state dirty until we have nicer tracking. It's fine to change - * baseVertexIndex because that call is only called by ddraw which does - * not need that value. */ - device_invalidate_state(device, STATE_VDECL); - device_invalidate_state(device, STATE_STREAMSRC); - device_invalidate_state(device, STATE_INDEXBUFFER); - - device->stateBlock->state.base_vertex_index = 0; - device->up_strided = strided_data; - drawPrimitive(device, vertex_count, 0, FALSE, NULL); - device->up_strided = NULL; - - /* Invalidate the states again to make sure the values from the stateblock - * are properly applied in the next regular draw. Note that the application- - * provided strided data has ovwritten pretty much the entire vertex and - * and index stream related states */ - device_invalidate_state(device, STATE_VDECL); - device_invalidate_state(device, STATE_STREAMSRC); - device_invalidate_state(device, STATE_INDEXBUFFER); - return WINED3D_OK; -} - -HRESULT CDECL wined3d_device_draw_indexed_primitive_strided(struct wined3d_device *device, - UINT index_count, const struct wined3d_strided_data *strided_data, - UINT vertex_count, const void *index_data, enum wined3d_format_id index_data_format_id) -{ - enum wined3d_format_id prev_idx_format; - - /* Mark the state dirty until we have nicer tracking - * its fine to change baseVertexIndex because that call is only called by ddraw which does not need - * that value. - */ - device_invalidate_state(device, STATE_VDECL); - device_invalidate_state(device, STATE_STREAMSRC); - device_invalidate_state(device, STATE_INDEXBUFFER); - - prev_idx_format = device->stateBlock->state.index_format; - device->stateBlock->state.index_format = index_data_format_id; - device->stateBlock->state.user_stream = TRUE; - device->stateBlock->state.base_vertex_index = 0; - device->up_strided = strided_data; - drawPrimitive(device, index_count, 0, TRUE, index_data); - device->up_strided = NULL; - device->stateBlock->state.index_format = prev_idx_format; - - device_invalidate_state(device, STATE_VDECL); - device_invalidate_state(device, STATE_STREAMSRC); - device_invalidate_state(device, STATE_INDEXBUFFER); - return WINED3D_OK; + draw_primitive(device, start_idx, index_count, start_instance, instance_count, TRUE, NULL); } /* This is a helper function for UpdateTexture, there is no UpdateVolume method in D3D. */ @@ -4263,17 +4176,13 @@ HRESULT CDECL wined3d_device_get_front_buffer_data(const struct wined3d_device * UINT swapchain_idx, struct wined3d_surface *dst_surface) { struct wined3d_swapchain *swapchain; - HRESULT hr; TRACE("device %p, swapchain_idx %u, dst_surface %p.\n", device, swapchain_idx, dst_surface); - hr = wined3d_device_get_swapchain(device, swapchain_idx, &swapchain); - if (FAILED(hr)) return hr; + if (!(swapchain = wined3d_device_get_swapchain(device, swapchain_idx))) + return WINED3DERR_INVALIDCALL; - hr = wined3d_swapchain_get_front_buffer_data(swapchain, dst_surface); - wined3d_swapchain_decref(swapchain); - - return hr; + return wined3d_swapchain_get_front_buffer_data(swapchain, dst_surface); } HRESULT CDECL wined3d_device_validate_device(const struct wined3d_device *device, DWORD *num_passes) @@ -4339,7 +4248,7 @@ HRESULT CDECL wined3d_device_validate_device(const struct wined3d_device *device return WINED3D_OK; } -HRESULT CDECL wined3d_device_set_software_vertex_processing(struct wined3d_device *device, BOOL software) +void CDECL wined3d_device_set_software_vertex_processing(struct wined3d_device *device, BOOL software) { static BOOL warned; @@ -4352,8 +4261,6 @@ HRESULT CDECL wined3d_device_set_software_vertex_processing(struct wined3d_devic } device->softwareVertexProcessing = software; - - return WINED3D_OK; } BOOL CDECL wined3d_device_get_software_vertex_processing(const struct wined3d_device *device) @@ -4375,27 +4282,14 @@ HRESULT CDECL wined3d_device_get_raster_status(const struct wined3d_device *devi UINT swapchain_idx, struct wined3d_raster_status *raster_status) { struct wined3d_swapchain *swapchain; - HRESULT hr; TRACE("device %p, swapchain_idx %u, raster_status %p.\n", device, swapchain_idx, raster_status); - hr = wined3d_device_get_swapchain(device, swapchain_idx, &swapchain); - if (FAILED(hr)) - { - WARN("Failed to get swapchain %u, hr %#x.\n", swapchain_idx, hr); - return hr; - } + if (!(swapchain = wined3d_device_get_swapchain(device, swapchain_idx))) + return WINED3DERR_INVALIDCALL; - hr = wined3d_swapchain_get_raster_status(swapchain, raster_status); - wined3d_swapchain_decref(swapchain); - if (FAILED(hr)) - { - WARN("Failed to get raster status, hr %#x.\n", hr); - return hr; - } - - return WINED3D_OK; + return wined3d_swapchain_get_raster_status(swapchain, raster_status); } HRESULT CDECL wined3d_device_set_npatch_mode(struct wined3d_device *device, float segments) @@ -4449,140 +4343,6 @@ HRESULT CDECL wined3d_device_update_surface(struct wined3d_device *device, return surface_upload_from_surface(dst_surface, dst_point, src_surface, src_rect); } -HRESULT CDECL wined3d_device_draw_rect_patch(struct wined3d_device *device, UINT handle, - const float *num_segs, const struct wined3d_rect_patch_info *rect_patch_info) -{ - struct wined3d_rect_patch *patch; - GLenum old_primitive_type; - unsigned int i; - struct list *e; - BOOL found; - - TRACE("device %p, handle %#x, num_segs %p, rect_patch_info %p.\n", - device, handle, num_segs, rect_patch_info); - - if (!(handle || rect_patch_info)) - { - /* TODO: Write a test for the return value, thus the FIXME */ - FIXME("Both handle and rect_patch_info are NULL.\n"); - return WINED3DERR_INVALIDCALL; - } - - if (handle) - { - i = PATCHMAP_HASHFUNC(handle); - found = FALSE; - LIST_FOR_EACH(e, &device->patches[i]) - { - patch = LIST_ENTRY(e, struct wined3d_rect_patch, entry); - if (patch->Handle == handle) - { - found = TRUE; - break; - } - } - - if (!found) - { - TRACE("Patch does not exist. Creating a new one\n"); - patch = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*patch)); - patch->Handle = handle; - list_add_head(&device->patches[i], &patch->entry); - } else { - TRACE("Found existing patch %p\n", patch); - } - } - else - { - /* Since opengl does not load tesselated vertex attributes into numbered vertex - * attributes we have to tesselate, read back, and draw. This needs a patch - * management structure instance. Create one. - * - * A possible improvement is to check if a vertex shader is used, and if not directly - * draw the patch. - */ - FIXME("Drawing an uncached patch. This is slow\n"); - patch = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*patch)); - } - - if (num_segs[0] != patch->numSegs[0] || num_segs[1] != patch->numSegs[1] - || num_segs[2] != patch->numSegs[2] || num_segs[3] != patch->numSegs[3] - || (rect_patch_info && memcmp(rect_patch_info, &patch->rect_patch_info, sizeof(*rect_patch_info)))) - { - HRESULT hr; - TRACE("Tesselation density or patch info changed, retesselating\n"); - - if (rect_patch_info) - patch->rect_patch_info = *rect_patch_info; - - patch->numSegs[0] = num_segs[0]; - patch->numSegs[1] = num_segs[1]; - patch->numSegs[2] = num_segs[2]; - patch->numSegs[3] = num_segs[3]; - - hr = tesselate_rectpatch(device, patch); - if (FAILED(hr)) - { - WARN("Patch tesselation failed.\n"); - - /* Do not release the handle to store the params of the patch */ - if (!handle) - HeapFree(GetProcessHeap(), 0, patch); - - return hr; - } - } - - old_primitive_type = device->stateBlock->state.gl_primitive_type; - device->stateBlock->state.gl_primitive_type = GL_TRIANGLES; - wined3d_device_draw_primitive_strided(device, patch->numSegs[0] * patch->numSegs[1] * 2 * 3, &patch->strided); - device->stateBlock->state.gl_primitive_type = old_primitive_type; - - /* Destroy uncached patches */ - if (!handle) - { - HeapFree(GetProcessHeap(), 0, patch->mem); - HeapFree(GetProcessHeap(), 0, patch); - } - return WINED3D_OK; -} - -HRESULT CDECL wined3d_device_draw_tri_patch(struct wined3d_device *device, UINT handle, - const float *segment_count, const struct wined3d_tri_patch_info *patch_info) -{ - FIXME("device %p, handle %#x, segment_count %p, patch_info %p stub!\n", - device, handle, segment_count, patch_info); - - return WINED3D_OK; -} - -HRESULT CDECL wined3d_device_delete_patch(struct wined3d_device *device, UINT handle) -{ - struct wined3d_rect_patch *patch; - struct list *e; - int i; - - TRACE("device %p, handle %#x.\n", device, handle); - - i = PATCHMAP_HASHFUNC(handle); - LIST_FOR_EACH(e, &device->patches[i]) - { - patch = LIST_ENTRY(e, struct wined3d_rect_patch, entry); - if (patch->Handle == handle) - { - TRACE("Deleting patch %p\n", patch); - list_remove(&patch->entry); - HeapFree(GetProcessHeap(), 0, patch->mem); - HeapFree(GetProcessHeap(), 0, patch); - return WINED3D_OK; - } - } - - /* TODO: Write a test for the return value */ - FIXME("Attempt to destroy nonexistent patch\n"); - return WINED3DERR_INVALIDCALL; -} - /* Do not call while under the GL lock. */ HRESULT CDECL wined3d_device_color_fill(struct wined3d_device *device, struct wined3d_surface *surface, const RECT *rect, const struct wined3d_color *color) @@ -4628,43 +4388,25 @@ void CDECL wined3d_device_clear_rendertarget_view(struct wined3d_device *device, if (FAILED(hr)) ERR("Color fill failed, hr %#x.\n", hr); } -HRESULT CDECL wined3d_device_get_render_target(const struct wined3d_device *device, - UINT render_target_idx, struct wined3d_surface **render_target) +struct wined3d_surface * CDECL wined3d_device_get_render_target(const struct wined3d_device *device, + UINT render_target_idx) { - TRACE("device %p, render_target_idx %u, render_target %p.\n", - device, render_target_idx, render_target); + TRACE("device %p, render_target_idx %u.\n", device, render_target_idx); if (render_target_idx >= device->adapter->gl_info.limits.buffers) { WARN("Only %u render targets are supported.\n", device->adapter->gl_info.limits.buffers); - return WINED3DERR_INVALIDCALL; + return NULL; } - *render_target = device->fb.render_targets[render_target_idx]; - TRACE("Returning render target %p.\n", *render_target); - - if (!*render_target) - return WINED3DERR_NOTFOUND; - - wined3d_surface_incref(*render_target); - - return WINED3D_OK; + return device->fb.render_targets[render_target_idx]; } -HRESULT CDECL wined3d_device_get_depth_stencil(const struct wined3d_device *device, - struct wined3d_surface **depth_stencil) +struct wined3d_surface * CDECL wined3d_device_get_depth_stencil(const struct wined3d_device *device) { - TRACE("device %p, depth_stencil %p.\n", device, depth_stencil); + TRACE("device %p.\n", device); - *depth_stencil = device->fb.depth_stencil; - TRACE("Returning depth/stencil surface %p.\n", *depth_stencil); - - if (!*depth_stencil) - return WINED3DERR_NOTFOUND; - - wined3d_surface_incref(*depth_stencil); - - return WINED3D_OK; + return device->fb.depth_stencil; } HRESULT CDECL wined3d_device_set_render_target(struct wined3d_device *device, @@ -4681,13 +4423,6 @@ HRESULT CDECL wined3d_device_set_render_target(struct wined3d_device *device, return WINED3DERR_INVALIDCALL; } - prev = device->fb.render_targets[render_target_idx]; - if (render_target == prev) - { - TRACE("Trying to do a NOP SetRenderTarget operation.\n"); - return WINED3D_OK; - } - /* Render target 0 can't be set to NULL. */ if (!render_target && !render_target_idx) { @@ -4701,6 +4436,33 @@ HRESULT CDECL wined3d_device_set_render_target(struct wined3d_device *device, return WINED3DERR_INVALIDCALL; } + /* Set the viewport and scissor rectangles, if requested. Tests show that + * stateblock recording is ignored, the change goes directly into the + * primary stateblock. */ + if (!render_target_idx && set_viewport) + { + struct wined3d_state *state = &device->stateBlock->state; + + state->viewport.x = 0; + state->viewport.y = 0; + state->viewport.width = render_target->resource.width; + state->viewport.height = render_target->resource.height; + state->viewport.min_z = 0.0f; + state->viewport.max_z = 1.0f; + device_invalidate_state(device, STATE_VIEWPORT); + + state->scissor_rect.top = 0; + state->scissor_rect.left = 0; + state->scissor_rect.right = render_target->resource.width; + state->scissor_rect.bottom = render_target->resource.height; + device_invalidate_state(device, STATE_SCISSORRECT); + } + + + prev = device->fb.render_targets[render_target_idx]; + if (render_target == prev) + return WINED3D_OK; + if (render_target) wined3d_surface_incref(render_target); device->fb.render_targets[render_target_idx] = render_target; @@ -4709,33 +4471,12 @@ HRESULT CDECL wined3d_device_set_render_target(struct wined3d_device *device, if (prev) wined3d_surface_decref(prev); - /* Render target 0 is special. */ - if (!render_target_idx && set_viewport) - { - /* Set the viewport and scissor rectangles, if requested. Tests show - * that stateblock recording is ignored, the change goes directly - * into the primary stateblock. */ - device->stateBlock->state.viewport.height = device->fb.render_targets[0]->resource.height; - device->stateBlock->state.viewport.width = device->fb.render_targets[0]->resource.width; - device->stateBlock->state.viewport.x = 0; - device->stateBlock->state.viewport.y = 0; - device->stateBlock->state.viewport.max_z = 1.0f; - device->stateBlock->state.viewport.min_z = 0.0f; - device_invalidate_state(device, STATE_VIEWPORT); - - device->stateBlock->state.scissor_rect.top = 0; - device->stateBlock->state.scissor_rect.left = 0; - device->stateBlock->state.scissor_rect.right = device->stateBlock->state.viewport.width; - device->stateBlock->state.scissor_rect.bottom = device->stateBlock->state.viewport.height; - device_invalidate_state(device, STATE_SCISSORRECT); - } - device_invalidate_state(device, STATE_FRAMEBUFFER); return WINED3D_OK; } -HRESULT CDECL wined3d_device_set_depth_stencil(struct wined3d_device *device, struct wined3d_surface *depth_stencil) +void CDECL wined3d_device_set_depth_stencil(struct wined3d_device *device, struct wined3d_surface *depth_stencil) { struct wined3d_surface *prev = device->fb.depth_stencil; @@ -4745,7 +4486,7 @@ HRESULT CDECL wined3d_device_set_depth_stencil(struct wined3d_device *device, st if (prev == depth_stencil) { TRACE("Trying to do a NOP SetRenderTarget operation.\n"); - return WINED3D_OK; + return; } if (prev) @@ -4784,7 +4525,7 @@ HRESULT CDECL wined3d_device_set_depth_stencil(struct wined3d_device *device, st device_invalidate_state(device, STATE_FRAMEBUFFER); - return WINED3D_OK; + return; } HRESULT CDECL wined3d_device_set_cursor_properties(struct wined3d_device *device, @@ -4797,9 +4538,7 @@ HRESULT CDECL wined3d_device_set_cursor_properties(struct wined3d_device *device if (device->cursorTexture) { struct wined3d_context *context = context_acquire(device, NULL); - ENTER_GL(); context->gl_info->gl_ops.gl.p_glDeleteTextures(1, &device->cursorTexture); - LEAVE_GL(); context_release(context); device->cursorTexture = 0; } @@ -4864,8 +4603,6 @@ HRESULT CDECL wined3d_device_set_cursor_properties(struct wined3d_device *device context = context_acquire(device, NULL); - ENTER_GL(); - if (gl_info->supported[APPLE_CLIENT_STORAGE]) { gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_FALSE); @@ -4888,8 +4625,6 @@ HRESULT CDECL wined3d_device_set_cursor_properties(struct wined3d_device *device checkGLcall("glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE)"); } - LEAVE_GL(); - context_release(context); } else @@ -5046,7 +4781,6 @@ static void delete_opengl_contexts(struct wined3d_device *device, struct wined3d device->shader_backend->shader_destroy(shader); } - ENTER_GL(); if (device->depth_blt_texture) { gl_info->gl_ops.gl.p_glDeleteTextures(1, &device->depth_blt_texture); @@ -5057,10 +4791,8 @@ static void delete_opengl_contexts(struct wined3d_device *device, struct wined3d gl_info->gl_ops.gl.p_glDeleteTextures(1, &device->cursorTexture); device->cursorTexture = 0; } - LEAVE_GL(); device->blitter->free_private(device); - device->frag_pipe->free_private(device); device->shader_backend->shader_free_private(device); destroy_dummy_textures(device, gl_info); @@ -5082,11 +4814,26 @@ static HRESULT create_primary_opengl_context(struct wined3d_device *device, stru struct wined3d_surface *target; HRESULT hr; + if (FAILED(hr = device->shader_backend->shader_alloc_private(device, device->adapter->fragment_pipe))) + { + ERR("Failed to allocate shader private data, hr %#x.\n", hr); + return hr; + } + + if (FAILED(hr = device->blitter->alloc_private(device))) + { + ERR("Failed to allocate blitter private data, hr %#x.\n", hr); + device->shader_backend->shader_free_private(device); + return hr; + } + /* Recreate the primary swapchain's context */ swapchain->context = HeapAlloc(GetProcessHeap(), 0, sizeof(*swapchain->context)); if (!swapchain->context) { ERR("Failed to allocate memory for swapchain context array.\n"); + device->blitter->free_private(device); + device->shader_backend->shader_free_private(device); return E_OUTOFMEMORY; } @@ -5094,6 +4841,8 @@ static HRESULT create_primary_opengl_context(struct wined3d_device *device, stru if (!(context = context_create(swapchain, target, swapchain->ds_format))) { WARN("Failed to create context.\n"); + device->blitter->free_private(device); + device->shader_backend->shader_free_private(device); HeapFree(GetProcessHeap(), 0, swapchain->context); return E_FAIL; } @@ -5103,71 +4852,43 @@ static HRESULT create_primary_opengl_context(struct wined3d_device *device, stru create_dummy_textures(device, context); context_release(context); - hr = device->shader_backend->shader_alloc_private(device); - if (FAILED(hr)) - { - ERR("Failed to allocate shader private data, hr %#x.\n", hr); - goto err; - } - - hr = device->frag_pipe->alloc_private(device); - if (FAILED(hr)) - { - ERR("Failed to allocate fragment pipe private data, hr %#x.\n", hr); - device->shader_backend->shader_free_private(device); - goto err; - } - - hr = device->blitter->alloc_private(device); - if (FAILED(hr)) - { - ERR("Failed to allocate blitter private data, hr %#x.\n", hr); - device->frag_pipe->free_private(device); - device->shader_backend->shader_free_private(device); - goto err; - } - return WINED3D_OK; - -err: - context_acquire(device, NULL); - destroy_dummy_textures(device, context->gl_info); - context_release(context); - context_destroy(device, context); - HeapFree(GetProcessHeap(), 0, swapchain->context); - swapchain->num_contexts = 0; - return hr; } /* Do not call while under the GL lock. */ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, const struct wined3d_swapchain_desc *swapchain_desc, const struct wined3d_display_mode *mode, - wined3d_device_reset_cb callback) + wined3d_device_reset_cb callback, BOOL reset_state) { struct wined3d_resource *resource, *cursor; struct wined3d_swapchain *swapchain; struct wined3d_display_mode m; BOOL DisplayModeChanged = FALSE; BOOL update_desc = FALSE; + HRESULT hr = WINED3D_OK; unsigned int i; - HRESULT hr; TRACE("device %p, swapchain_desc %p, mode %p, callback %p.\n", device, swapchain_desc, mode, callback); - if (FAILED(hr = wined3d_device_get_swapchain(device, 0, &swapchain))) + if (!(swapchain = wined3d_device_get_swapchain(device, 0))) { ERR("Failed to get the first implicit swapchain.\n"); - return hr; + return WINED3DERR_INVALIDCALL; } - stateblock_unbind_resources(device->stateBlock); - if (swapchain->back_buffers && swapchain->back_buffers[0]) - wined3d_device_set_render_target(device, 0, swapchain->back_buffers[0], FALSE); - else - wined3d_device_set_render_target(device, 0, swapchain->front_buffer, FALSE); - for (i = 1; i < device->adapter->gl_info.limits.buffers; ++i) + if (reset_state) + stateblock_unbind_resources(device->stateBlock); + + if (device->fb.render_targets) { - wined3d_device_set_render_target(device, i, NULL, FALSE); + if (swapchain->back_buffers && swapchain->back_buffers[0]) + wined3d_device_set_render_target(device, 0, swapchain->back_buffers[0], FALSE); + else + wined3d_device_set_render_target(device, 0, swapchain->front_buffer, FALSE); + for (i = 1; i < device->adapter->gl_info.limits.buffers; ++i) + { + wined3d_device_set_render_target(device, i, NULL, FALSE); + } } wined3d_device_set_depth_stencil(device, NULL); @@ -5177,13 +4898,13 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, device->onscreen_depth_stencil = NULL; } - LIST_FOR_EACH_ENTRY_SAFE(resource, cursor, &device->resources, struct wined3d_resource, resource_list_entry) + if (reset_state) { - TRACE("Enumerating resource %p.\n", resource); - if (FAILED(hr = callback(resource))) + LIST_FOR_EACH_ENTRY_SAFE(resource, cursor, &device->resources, struct wined3d_resource, resource_list_entry) { - wined3d_swapchain_decref(swapchain); - return hr; + TRACE("Enumerating resource %p.\n", resource); + if (FAILED(hr = callback(resource))) + return hr; } } @@ -5235,8 +4956,6 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, if (swapchain_desc->enable_auto_depth_stencil && !device->auto_depth_stencil) { - HRESULT hr; - TRACE("Creating the depth stencil buffer\n"); if (FAILED(hr = device->device_parent->ops->create_swapchain_surface(device->device_parent, @@ -5246,7 +4965,6 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, &device->auto_depth_stencil))) { ERR("Failed to create the depth stencil buffer, hr %#x.\n", hr); - wined3d_swapchain_decref(swapchain); return WINED3DERR_INVALIDCALL; } } @@ -5309,36 +5027,24 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, { UINT i; - hr = wined3d_surface_update_desc(swapchain->front_buffer, swapchain->desc.backbuffer_width, + if (FAILED(hr = wined3d_surface_update_desc(swapchain->front_buffer, swapchain->desc.backbuffer_width, swapchain->desc.backbuffer_height, swapchain->desc.backbuffer_format, - swapchain->desc.multisample_type, swapchain->desc.multisample_quality); - if (FAILED(hr)) - { - wined3d_swapchain_decref(swapchain); + swapchain->desc.multisample_type, swapchain->desc.multisample_quality))) return hr; - } for (i = 0; i < swapchain->desc.backbuffer_count; ++i) { - hr = wined3d_surface_update_desc(swapchain->back_buffers[i], swapchain->desc.backbuffer_width, + if (FAILED(hr = wined3d_surface_update_desc(swapchain->back_buffers[i], swapchain->desc.backbuffer_width, swapchain->desc.backbuffer_height, swapchain->desc.backbuffer_format, - swapchain->desc.multisample_type, swapchain->desc.multisample_quality); - if (FAILED(hr)) - { - wined3d_swapchain_decref(swapchain); + swapchain->desc.multisample_type, swapchain->desc.multisample_quality))) return hr; - } } if (device->auto_depth_stencil) { - hr = wined3d_surface_update_desc(device->auto_depth_stencil, swapchain->desc.backbuffer_width, + if (FAILED(hr = wined3d_surface_update_desc(device->auto_depth_stencil, swapchain->desc.backbuffer_width, swapchain->desc.backbuffer_height, device->auto_depth_stencil->resource.format->id, - swapchain->desc.multisample_type, swapchain->desc.multisample_quality); - if (FAILED(hr)) - { - wined3d_swapchain_decref(swapchain); + swapchain->desc.multisample_type, swapchain->desc.multisample_quality))) return hr; - } } } @@ -5348,7 +5054,6 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, if (FAILED(hr = wined3d_set_adapter_display_mode(device->wined3d, device->adapter->ordinal, &m))) { WARN("Failed to set display mode, hr %#x.\n", hr); - wined3d_swapchain_decref(swapchain); return WINED3DERR_INVALIDCALL; } @@ -5362,7 +5067,6 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, if (FAILED(hr = wined3d_device_acquire_focus_window(device, focus_window))) { ERR("Failed to acquire focus window, hr %#x.\n", hr); - wined3d_swapchain_decref(swapchain); return hr; } @@ -5405,30 +5109,50 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, device->exStyle = exStyle; } - TRACE("Resetting stateblock.\n"); - wined3d_stateblock_decref(device->updateStateBlock); - wined3d_stateblock_decref(device->stateBlock); + if (reset_state) + { + TRACE("Resetting stateblock.\n"); + wined3d_stateblock_decref(device->updateStateBlock); + wined3d_stateblock_decref(device->stateBlock); - if (device->d3d_initialized) - delete_opengl_contexts(device, swapchain); + if (device->d3d_initialized) + delete_opengl_contexts(device, swapchain); - /* Note: No parent needed for initial internal stateblock */ - hr = wined3d_stateblock_create(device, WINED3D_SBT_INIT, &device->stateBlock); - if (FAILED(hr)) - ERR("Resetting the stateblock failed with error %#x.\n", hr); + /* Note: No parent needed for initial internal stateblock */ + hr = wined3d_stateblock_create(device, WINED3D_SBT_INIT, &device->stateBlock); + if (FAILED(hr)) + ERR("Resetting the stateblock failed with error %#x.\n", hr); + else + TRACE("Created stateblock %p.\n", device->stateBlock); + device->updateStateBlock = device->stateBlock; + wined3d_stateblock_incref(device->updateStateBlock); + + stateblock_init_default_state(device->stateBlock); + } else - TRACE("Created stateblock %p.\n", device->stateBlock); - device->updateStateBlock = device->stateBlock; - wined3d_stateblock_incref(device->updateStateBlock); + { + struct wined3d_surface *rt = device->fb.render_targets[0]; + struct wined3d_state *state = &device->stateBlock->state; - stateblock_init_default_state(device->stateBlock); + /* Note the min_z / max_z is not reset. */ + state->viewport.x = 0; + state->viewport.y = 0; + state->viewport.width = rt->resource.width; + state->viewport.height = rt->resource.height; + device_invalidate_state(device, STATE_VIEWPORT); + + state->scissor_rect.top = 0; + state->scissor_rect.left = 0; + state->scissor_rect.right = rt->resource.width; + state->scissor_rect.bottom = rt->resource.height; + device_invalidate_state(device, STATE_SCISSORRECT); + } swapchain_update_render_to_fbo(swapchain); swapchain_update_draw_bindings(swapchain); - if (device->d3d_initialized) + if (reset_state && device->d3d_initialized) hr = create_primary_opengl_context(device, swapchain); - wined3d_swapchain_decref(swapchain); /* All done. There is no need to reload resources or shaders, this will happen automatically on the * first use @@ -5446,13 +5170,12 @@ HRESULT CDECL wined3d_device_set_dialog_box_mode(struct wined3d_device *device, } -HRESULT CDECL wined3d_device_get_creation_parameters(const struct wined3d_device *device, +void CDECL wined3d_device_get_creation_parameters(const struct wined3d_device *device, struct wined3d_device_creation_parameters *parameters) { TRACE("device %p, parameters %p.\n", device, parameters); *parameters = device->create_parms; - return WINED3D_OK; } void CDECL wined3d_device_set_gamma_ramp(const struct wined3d_device *device, @@ -5463,11 +5186,8 @@ void CDECL wined3d_device_set_gamma_ramp(const struct wined3d_device *device, TRACE("device %p, swapchain_idx %u, flags %#x, ramp %p.\n", device, swapchain_idx, flags, ramp); - if (SUCCEEDED(wined3d_device_get_swapchain(device, swapchain_idx, &swapchain))) - { + if ((swapchain = wined3d_device_get_swapchain(device, swapchain_idx))) wined3d_swapchain_set_gamma_ramp(swapchain, flags, ramp); - wined3d_swapchain_decref(swapchain); - } } void CDECL wined3d_device_get_gamma_ramp(const struct wined3d_device *device, @@ -5478,11 +5198,8 @@ void CDECL wined3d_device_get_gamma_ramp(const struct wined3d_device *device, TRACE("device %p, swapchain_idx %u, ramp %p.\n", device, swapchain_idx, ramp); - if (SUCCEEDED(wined3d_device_get_swapchain(device, swapchain_idx, &swapchain))) - { + if ((swapchain = wined3d_device_get_swapchain(device, swapchain_idx))) wined3d_swapchain_get_gamma_ramp(swapchain, ramp); - wined3d_swapchain_decref(swapchain); - } } void device_resource_add(struct wined3d_device *device, struct wined3d_resource *resource) @@ -5607,15 +5324,14 @@ void device_resource_released(struct wined3d_device *device, struct wined3d_reso TRACE("Resource released.\n"); } -HRESULT CDECL wined3d_device_get_surface_from_dc(const struct wined3d_device *device, - HDC dc, struct wined3d_surface **surface) +struct wined3d_surface * CDECL wined3d_device_get_surface_from_dc(const struct wined3d_device *device, HDC dc) { struct wined3d_resource *resource; - TRACE("device %p, dc %p, surface %p.\n", device, dc, surface); + TRACE("device %p, dc %p.\n", device, dc); if (!dc) - return WINED3DERR_INVALIDCALL; + return NULL; LIST_FOR_EACH_ENTRY(resource, &device->resources, struct wined3d_resource, resource_list_entry) { @@ -5626,13 +5342,12 @@ HRESULT CDECL wined3d_device_get_surface_from_dc(const struct wined3d_device *de if (s->hDC == dc) { TRACE("Found surface %p for dc %p.\n", s, dc); - *surface = s; - return WINED3D_OK; + return s; } } } - return WINED3DERR_INVALIDCALL; + return NULL; } HRESULT device_init(struct wined3d_device *device, struct wined3d *wined3d, @@ -5661,36 +5376,28 @@ HRESULT device_init(struct wined3d_device *device, struct wined3d *wined3d, device->create_parms.focus_window = focus_window; device->create_parms.flags = flags; - for (i = 0; i < PATCHMAP_SIZE; ++i) list_init(&device->patches[i]); - - select_shader_mode(&adapter->gl_info, &device->ps_selected_mode, &device->vs_selected_mode); device->shader_backend = adapter->shader_backend; + device->shader_backend->shader_get_caps(&adapter->gl_info, &shader_caps); + device->vs_version = shader_caps.vs_version; + device->gs_version = shader_caps.gs_version; + device->ps_version = shader_caps.ps_version; + device->d3d_vshader_constantF = shader_caps.vs_uniform_count; + device->d3d_pshader_constantF = shader_caps.ps_uniform_count; + device->vs_clipping = shader_caps.wined3d_caps & WINED3D_SHADER_CAP_VS_CLIPPING; - if (device->shader_backend) - { - device->shader_backend->shader_get_caps(&adapter->gl_info, &shader_caps); - device->vshader_version = shader_caps.VertexShaderVersion; - device->pshader_version = shader_caps.PixelShaderVersion; - device->d3d_vshader_constantF = shader_caps.MaxVertexShaderConst; - device->d3d_pshader_constantF = shader_caps.MaxPixelShaderConst; - device->vs_clipping = shader_caps.VSClipping; - } fragment_pipeline = adapter->fragment_pipe; - device->frag_pipe = fragment_pipeline; - if (fragment_pipeline) - { - fragment_pipeline->get_caps(&adapter->gl_info, &ffp_caps); - device->max_ffp_textures = ffp_caps.MaxSimultaneousTextures; + fragment_pipeline->get_caps(&adapter->gl_info, &ffp_caps); + device->max_ffp_textures = ffp_caps.MaxSimultaneousTextures; - hr = compile_state_table(device->StateTable, device->multistate_funcs, &adapter->gl_info, - ffp_vertexstate_template, fragment_pipeline, misc_state_template); - if (FAILED(hr)) - { - ERR("Failed to compile state table, hr %#x.\n", hr); - wined3d_decref(device->wined3d); - return hr; - } + if (fragment_pipeline->states + && FAILED(hr = compile_state_table(device->StateTable, device->multistate_funcs, + &adapter->gl_info, ffp_vertexstate_template, fragment_pipeline, misc_state_template))) + { + ERR("Failed to compile state table, hr %#x.\n", hr); + wined3d_decref(device->wined3d); + return hr; } + device->blitter = adapter->blitter; hr = wined3d_stateblock_create(device, WINED3D_SBT_INIT, &device->stateBlock); diff --git a/dll/directx/wine/wined3d/directx.c b/dll/directx/wine/wined3d/directx.c index 9b44c030ce9..6bc54627f37 100644 --- a/dll/directx/wine/wined3d/directx.c +++ b/dll/directx/wine/wined3d/directx.c @@ -97,6 +97,7 @@ static const struct wined3d_extension_map gl_extension_map[] = {"GL_ARB_depth_texture", ARB_DEPTH_TEXTURE }, {"GL_ARB_draw_buffers", ARB_DRAW_BUFFERS }, {"GL_ARB_draw_elements_base_vertex", ARB_DRAW_ELEMENTS_BASE_VERTEX }, + {"GL_ARB_draw_instanced", ARB_DRAW_INSTANCED }, {"GL_ARB_fragment_program", ARB_FRAGMENT_PROGRAM }, {"GL_ARB_fragment_shader", ARB_FRAGMENT_SHADER }, {"GL_ARB_framebuffer_object", ARB_FRAMEBUFFER_OBJECT }, @@ -104,6 +105,7 @@ static const struct wined3d_extension_map gl_extension_map[] = {"GL_ARB_geometry_shader4", ARB_GEOMETRY_SHADER4 }, {"GL_ARB_half_float_pixel", ARB_HALF_FLOAT_PIXEL }, {"GL_ARB_half_float_vertex", ARB_HALF_FLOAT_VERTEX }, + {"GL_ARB_instanced_arrays", ARB_INSTANCED_ARRAYS, }, {"GL_ARB_map_buffer_alignment", ARB_MAP_BUFFER_ALIGNMENT }, {"GL_ARB_map_buffer_range", ARB_MAP_BUFFER_RANGE }, {"GL_ARB_multisample", ARB_MULTISAMPLE }, /* needs GLX_ARB_MULTISAMPLE as well */ @@ -113,6 +115,7 @@ static const struct wined3d_extension_map gl_extension_map[] = {"GL_ARB_point_parameters", ARB_POINT_PARAMETERS }, {"GL_ARB_point_sprite", ARB_POINT_SPRITE }, {"GL_ARB_provoking_vertex", ARB_PROVOKING_VERTEX }, + {"GL_ARB_shader_bit_encoding", ARB_SHADER_BIT_ENCODING }, {"GL_ARB_shader_objects", ARB_SHADER_OBJECTS }, {"GL_ARB_shader_texture_lod", ARB_SHADER_TEXTURE_LOD }, {"GL_ARB_shading_language_100", ARB_SHADING_LANGUAGE_100 }, @@ -276,10 +279,10 @@ static void WineD3D_ReleaseFakeGLContext(const struct wined3d_fake_gl_ctx *ctx) { TRACE("Destroying fake GL context.\n"); - if (!pwglMakeCurrent(NULL, NULL)) + if (!wglMakeCurrent(NULL, NULL)) ERR("Failed to disable fake GL context.\n"); - if (!pwglDeleteContext(ctx->gl_ctx)) + if (!wglDeleteContext(ctx->gl_ctx)) { DWORD err = GetLastError(); ERR("wglDeleteContext(%p) failed, last error %#x.\n", ctx->gl_ctx, err); @@ -288,7 +291,7 @@ static void WineD3D_ReleaseFakeGLContext(const struct wined3d_fake_gl_ctx *ctx) ReleaseDC(ctx->wnd, ctx->dc); DestroyWindow(ctx->wnd); - if (ctx->restore_gl_ctx && !pwglMakeCurrent(ctx->restore_dc, ctx->restore_gl_ctx)) + if (ctx->restore_gl_ctx && !wglMakeCurrent(ctx->restore_dc, ctx->restore_gl_ctx)) ERR("Failed to restore previous GL context.\n"); } @@ -300,8 +303,8 @@ static BOOL WineD3D_CreateFakeGLContext(struct wined3d_fake_gl_ctx *ctx) TRACE("getting context...\n"); - ctx->restore_dc = pwglGetCurrentDC(); - ctx->restore_gl_ctx = pwglGetCurrentContext(); + ctx->restore_dc = wglGetCurrentDC(); + ctx->restore_gl_ctx = wglGetCurrentContext(); /* We need a fake window as a hdc retrieved using GetDC(0) can't be used for much GL purposes. */ ctx->wnd = CreateWindowA(WINED3D_OPENGL_WINDOW_CLASS_NAME, "WineD3D fake window", @@ -338,14 +341,14 @@ static BOOL WineD3D_CreateFakeGLContext(struct wined3d_fake_gl_ctx *ctx) SetPixelFormat(ctx->dc, iPixelFormat, &pfd); /* Create a GL context. */ - if (!(ctx->gl_ctx = pwglCreateContext(ctx->dc))) + if (!(ctx->gl_ctx = wglCreateContext(ctx->dc))) { WARN("Failed to create default context for capabilities initialization.\n"); goto fail; } /* Make it the current GL context. */ - if (!pwglMakeCurrent(ctx->dc, ctx->gl_ctx)) + if (!wglMakeCurrent(ctx->dc, ctx->gl_ctx)) { ERR("Failed to make fake GL context current.\n"); goto fail; @@ -354,13 +357,13 @@ static BOOL WineD3D_CreateFakeGLContext(struct wined3d_fake_gl_ctx *ctx) return TRUE; fail: - if (ctx->gl_ctx) pwglDeleteContext(ctx->gl_ctx); + if (ctx->gl_ctx) wglDeleteContext(ctx->gl_ctx); ctx->gl_ctx = NULL; if (ctx->dc) ReleaseDC(ctx->wnd, ctx->dc); ctx->dc = NULL; if (ctx->wnd) DestroyWindow(ctx->wnd); ctx->wnd = NULL; - if (ctx->restore_gl_ctx && !pwglMakeCurrent(ctx->restore_dc, ctx->restore_gl_ctx)) + if (ctx->restore_gl_ctx && !wglMakeCurrent(ctx->restore_dc, ctx->restore_gl_ctx)) ERR("Failed to restore previous GL context.\n"); return FALSE; @@ -409,8 +412,8 @@ ULONG CDECL wined3d_decref(struct wined3d *wined3d) return refcount; } -/* GL locking is done by the caller */ -static inline BOOL test_arb_vs_offset_limit(const struct wined3d_gl_info *gl_info) +/* Context activation is done by the caller. */ +static BOOL test_arb_vs_offset_limit(const struct wined3d_gl_info *gl_info) { GLuint prog; BOOL ret = FALSE; @@ -520,8 +523,6 @@ static void test_pbo_functionality(struct wined3d_gl_info *gl_info) /* No PBO -> No point in testing them. */ if (!gl_info->supported[ARB_PIXEL_BUFFER_OBJECT]) return; - ENTER_GL(); - while (gl_info->gl_ops.gl.p_glGetError()); gl_info->gl_ops.gl.p_glGenTextures(1, &texture); gl_info->gl_ops.gl.p_glBindTexture(GL_TEXTURE_2D, texture); @@ -539,12 +540,10 @@ static void test_pbo_functionality(struct wined3d_gl_info *gl_info) checkGLcall("Loading the PBO test texture"); GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0)); - LEAVE_GL(); gl_info->gl_ops.gl.p_glFinish(); /* just to be sure */ memset(check, 0, sizeof(check)); - ENTER_GL(); gl_info->gl_ops.gl.p_glGetTexImage(GL_TEXTURE_2D, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, check); checkGLcall("Reading back the PBO test texture"); @@ -552,8 +551,6 @@ static void test_pbo_functionality(struct wined3d_gl_info *gl_info) GL_EXTCALL(glDeleteBuffersARB(1, &pbo)); checkGLcall("PBO test cleanup"); - LEAVE_GL(); - if (memcmp(check, pattern, sizeof(check))) { WARN("PBO test failed, read back data doesn't match original.\n" @@ -610,11 +607,9 @@ static BOOL match_allows_spec_alpha(const struct wined3d_gl_info *gl_info, const if (!gl_info->supported[EXT_SECONDARY_COLOR]) return FALSE; - ENTER_GL(); while (gl_info->gl_ops.gl.p_glGetError()); GL_EXTCALL(glSecondaryColorPointerEXT)(4, GL_UNSIGNED_BYTE, 4, data); error = gl_info->gl_ops.gl.p_glGetError(); - LEAVE_GL(); if (error == GL_NO_ERROR) { @@ -645,14 +640,12 @@ static BOOL match_broken_nv_clip(const struct wined3d_gl_info *gl_info, const ch if (!gl_info->supported[NV_VERTEX_PROGRAM2_OPTION]) return FALSE; - ENTER_GL(); while (gl_info->gl_ops.gl.p_glGetError()); GL_EXTCALL(glGenProgramsARB(1, &prog)); if(!prog) { ERR("Failed to create the NVvp clip test program\n"); - LEAVE_GL(); return FALSE; } GL_EXTCALL(glBindProgramARB(GL_VERTEX_PROGRAM_ARB, prog)); @@ -672,7 +665,6 @@ static BOOL match_broken_nv_clip(const struct wined3d_gl_info *gl_info, const ch GL_EXTCALL(glDeleteProgramsARB(1, &prog)); checkGLcall("GL_NV_vertex_program2_option result.clip[] test cleanup"); - LEAVE_GL(); return ret; } @@ -688,8 +680,6 @@ static BOOL match_fbo_tex_update(const struct wined3d_gl_info *gl_info, const ch memset(data, 0xcc, sizeof(data)); - ENTER_GL(); - gl_info->gl_ops.gl.p_glGenTextures(1, &tex); gl_info->gl_ops.gl.p_glBindTexture(GL_TEXTURE_2D, tex); gl_info->gl_ops.gl.p_glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); @@ -726,8 +716,6 @@ static BOOL match_fbo_tex_update(const struct wined3d_gl_info *gl_info, const ch gl_info->gl_ops.gl.p_glDeleteTextures(1, &tex); checkGLcall("glDeleteTextures"); - LEAVE_GL(); - return *(DWORD *)data == 0x11111111; } @@ -740,8 +728,6 @@ static BOOL match_broken_rgba16(const struct wined3d_gl_info *gl_info, const cha GLuint tex; GLint size; - ENTER_GL(); - gl_info->gl_ops.gl.p_glGenTextures(1, &tex); gl_info->gl_ops.gl.p_glBindTexture(GL_TEXTURE_2D, tex); gl_info->gl_ops.gl.p_glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16, 4, 4, 0, GL_RGBA, GL_UNSIGNED_SHORT, NULL); @@ -756,8 +742,6 @@ static BOOL match_broken_rgba16(const struct wined3d_gl_info *gl_info, const cha gl_info->gl_ops.gl.p_glDeleteTextures(1, &tex); checkGLcall("glDeleteTextures"); - LEAVE_GL(); - return size < 16; } @@ -767,6 +751,14 @@ static BOOL match_fglrx(const struct wined3d_gl_info *gl_info, const char *gl_re return gl_vendor == GL_VENDOR_FGLRX; } +static BOOL match_r200(const struct wined3d_gl_info *gl_info, const char *gl_renderer, + enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device) +{ + if (card_vendor != HW_VENDOR_AMD) return FALSE; + if (device == CARD_AMD_RADEON_8500) return TRUE; + return FALSE; +} + static void quirk_apple_glsl_constants(struct wined3d_gl_info *gl_info) { /* MacOS needs uniforms for relative addressing offsets. This can accumulate to quite a few uniforms. @@ -877,6 +869,19 @@ static void quirk_limited_tex_filtering(struct wined3d_gl_info *gl_info) gl_info->quirks |= WINED3D_QUIRK_LIMITED_TEX_FILTERING; } +static void quirk_r200_constants(struct wined3d_gl_info *gl_info) +{ + /* The Mesa r200 driver (and there is no other driver for this GPU Wine would run on) + * loads some fog parameters (start, end, exponent, but not the color) into the + * program. + * + * Apparently the fog hardware is only able to handle linear fog with a range of 0.0;1.0, + * and it is the responsibility of the vertex pipeline to handle non-linear fog and + * linear fog with start and end other than 0.0 and 1.0. */ + TRACE("Reserving 1 ARB constant for compiler private use.\n"); + gl_info->reserved_arb_constants = max(gl_info->reserved_arb_constants, 1); +} + struct driver_quirk { BOOL (*match)(const struct wined3d_gl_info *gl_info, const char *gl_renderer, @@ -957,6 +962,11 @@ static const struct driver_quirk quirk_table[] = quirk_limited_tex_filtering, "Texture filtering, blending and VTF support is limited" }, + { + match_r200, + quirk_r200_constants, + "r200 vertex shader constants" + }, }; /* Certain applications (Steam) complain if we report an outdated driver version. In general, @@ -1075,6 +1085,7 @@ static const struct gpu_description gpu_description_table[] = {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8800GTS, "NVIDIA GeForce 8800 GTS", DRIVER_NVIDIA_GEFORCE6, 320 }, {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8800GTX, "NVIDIA GeForce 8800 GTX", DRIVER_NVIDIA_GEFORCE6, 768 }, {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9200, "NVIDIA GeForce 9200", DRIVER_NVIDIA_GEFORCE6, 256 }, + {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9300, "NVIDIA GeForce 9300", DRIVER_NVIDIA_GEFORCE6, 256 }, {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9400M, "NVIDIA GeForce 9400M", DRIVER_NVIDIA_GEFORCE6, 256 }, {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9400GT, "NVIDIA GeForce 9400 GT", DRIVER_NVIDIA_GEFORCE6, 256 }, {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9500GT, "NVIDIA GeForce 9500 GT", DRIVER_NVIDIA_GEFORCE6, 256 }, @@ -1100,6 +1111,7 @@ static const struct gpu_description gpu_description_table[] = {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX465, "NVIDIA GeForce GTX 465", DRIVER_NVIDIA_GEFORCE6, 1024}, {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX470, "NVIDIA GeForce GTX 470", DRIVER_NVIDIA_GEFORCE6, 1280}, {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX480, "NVIDIA GeForce GTX 480", DRIVER_NVIDIA_GEFORCE6, 1536}, + {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT520, "NVIDIA GeForce GT 520", DRIVER_NVIDIA_GEFORCE6, 1024}, {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT540M, "NVIDIA GeForce GT 540M", DRIVER_NVIDIA_GEFORCE6, 1024}, {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX550, "NVIDIA GeForce GTX 550 Ti", DRIVER_NVIDIA_GEFORCE6, 1024}, {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT555M, "NVIDIA GeForce GT 555M", DRIVER_NVIDIA_GEFORCE6, 1024}, @@ -1107,7 +1119,14 @@ static const struct gpu_description gpu_description_table[] = {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX560, "NVIDIA GeForce GTX 560", DRIVER_NVIDIA_GEFORCE6, 1024}, {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX570, "NVIDIA GeForce GTX 570", DRIVER_NVIDIA_GEFORCE6, 1280}, {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX580, "NVIDIA GeForce GTX 580", DRIVER_NVIDIA_GEFORCE6, 1536}, + {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT610, "NVIDIA GeForce GT 610", DRIVER_NVIDIA_GEFORCE6, 1024}, {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT630M, "NVIDIA GeForce GT 630M", DRIVER_NVIDIA_GEFORCE6, 1024}, + {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT640M, "NVIDIA GeForce GT 640M", DRIVER_NVIDIA_GEFORCE6, 1024}, + {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT650M, "NVIDIA GeForce GT 650M", DRIVER_NVIDIA_GEFORCE6, 2048}, + {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX650, "NVIDIA GeForce GTX 650", DRIVER_NVIDIA_GEFORCE6, 1024}, + {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX650TI, "NVIDIA GeForce GTX 650 Ti", DRIVER_NVIDIA_GEFORCE6, 1024}, + {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX660, "NVIDIA GeForce GTX 660", DRIVER_NVIDIA_GEFORCE6, 2048}, + {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX660TI, "NVIDIA GeForce GTX 660 Ti", DRIVER_NVIDIA_GEFORCE6, 2048}, {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX670, "NVIDIA GeForce GTX 670", DRIVER_NVIDIA_GEFORCE6, 2048}, {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX680, "NVIDIA GeForce GTX 680", DRIVER_NVIDIA_GEFORCE6, 2048}, @@ -1141,6 +1160,8 @@ static const struct gpu_description gpu_description_table[] = {HW_VENDOR_AMD, CARD_AMD_RADEON_HD6700, "AMD Radeon HD 6700 Series", DRIVER_AMD_R600, 1024}, {HW_VENDOR_AMD, CARD_AMD_RADEON_HD6800, "AMD Radeon HD 6800 Series", DRIVER_AMD_R600, 1024}, {HW_VENDOR_AMD, CARD_AMD_RADEON_HD6900, "AMD Radeon HD 6900 Series", DRIVER_AMD_R600, 2048}, + {HW_VENDOR_AMD, CARD_AMD_RADEON_HD7700, "AMD Radeon HD 7700 Series", DRIVER_AMD_R600, 1024}, + {HW_VENDOR_AMD, CARD_AMD_RADEON_HD7800, "AMD Radeon HD 7800 Series", DRIVER_AMD_R600, 2048}, {HW_VENDOR_AMD, CARD_AMD_RADEON_HD7900, "AMD Radeon HD 7900 Series", DRIVER_AMD_R600, 2048}, /* Intel cards */ {HW_VENDOR_INTEL, CARD_INTEL_830M, "Intel(R) 82830M Graphics Controller", DRIVER_INTEL_GMA800, 32 }, @@ -1416,9 +1437,9 @@ static enum wined3d_gl_vendor wined3d_guess_gl_vendor(const struct wined3d_gl_in return GL_VENDOR_INTEL; if (strstr(gl_vendor_string, "Mesa") + || strstr(gl_vendor_string, "X.Org") || strstr(gl_vendor_string, "Advanced Micro Devices, Inc.") || strstr(gl_vendor_string, "DRI R300 Project") - || strstr(gl_vendor_string, "X.Org R300 Project") || strstr(gl_vendor_string, "Tungsten Graphics, Inc") || strstr(gl_vendor_string, "VMware, Inc.") || strstr(gl_renderer, "Mesa") @@ -1506,7 +1527,14 @@ static enum wined3d_pci_device select_card_nvidia_binary(const struct wined3d_gl { {"GTX 680", CARD_NVIDIA_GEFORCE_GTX680}, /* Geforce 600 - highend */ {"GTX 670", CARD_NVIDIA_GEFORCE_GTX670}, /* Geforce 600 - midend high */ + {"GTX 660 Ti", CARD_NVIDIA_GEFORCE_GTX660TI}, /* Geforce 600 - midend high */ + {"GTX 660", CARD_NVIDIA_GEFORCE_GTX660}, /* Geforce 600 - midend high */ + {"GTX 650 Ti", CARD_NVIDIA_GEFORCE_GTX650TI}, /* Geforce 600 - lowend */ + {"GTX 650", CARD_NVIDIA_GEFORCE_GTX650}, /* Geforce 600 - lowend */ + {"GT 650M", CARD_NVIDIA_GEFORCE_GT650M}, /* Geforce 600 - midend mobile */ + {"GT 640M", CARD_NVIDIA_GEFORCE_GT640M}, /* Geforce 600 - midend mobile */ {"GT 630M", CARD_NVIDIA_GEFORCE_GT630M}, /* Geforce 600 - midend mobile */ + {"GT 610", CARD_NVIDIA_GEFORCE_GT610}, /* Geforce 600 - lowend */ {"GTX 580", CARD_NVIDIA_GEFORCE_GTX580}, /* Geforce 500 - highend */ {"GTX 570", CARD_NVIDIA_GEFORCE_GTX570}, /* Geforce 500 - midend high */ {"GTX 560 Ti", CARD_NVIDIA_GEFORCE_GTX560TI}, /* Geforce 500 - midend */ @@ -1514,6 +1542,7 @@ static enum wined3d_pci_device select_card_nvidia_binary(const struct wined3d_gl {"GT 555M", CARD_NVIDIA_GEFORCE_GT555M}, /* Geforce 500 - midend mobile */ {"GTX 550 Ti", CARD_NVIDIA_GEFORCE_GTX550}, /* Geforce 500 - midend */ {"GT 540M", CARD_NVIDIA_GEFORCE_GT540M}, /* Geforce 500 - midend mobile */ + {"GT 520", CARD_NVIDIA_GEFORCE_GT520}, /* Geforce 500 - lowend */ {"GTX 480", CARD_NVIDIA_GEFORCE_GTX480}, /* Geforce 400 - highend */ {"GTX 470", CARD_NVIDIA_GEFORCE_GTX470}, /* Geforce 400 - midend high */ {"GTX 465", CARD_NVIDIA_GEFORCE_GTX465}, /* Geforce 400 - midend */ @@ -1551,7 +1580,7 @@ static enum wined3d_pci_device select_card_nvidia_binary(const struct wined3d_gl {"9500", CARD_NVIDIA_GEFORCE_9500GT}, /* Geforce 9 - midend low / Geforce 200 - low */ {"9400M", CARD_NVIDIA_GEFORCE_9400M}, /* Geforce 9 - lowend */ {"9400", CARD_NVIDIA_GEFORCE_9400GT}, /* Geforce 9 - lowend */ - {"9300", CARD_NVIDIA_GEFORCE_9200}, /* Geforce 9 - lowend low */ + {"9300", CARD_NVIDIA_GEFORCE_9300}, /* Geforce 9 - lowend low */ {"9200", CARD_NVIDIA_GEFORCE_9200}, /* Geforce 9 - lowend low */ {"9100", CARD_NVIDIA_GEFORCE_9200}, /* Geforce 9 - lowend low */ {"G 100", CARD_NVIDIA_GEFORCE_9200}, /* Geforce 9 - lowend low */ @@ -1573,9 +1602,7 @@ static enum wined3d_pci_device select_card_nvidia_binary(const struct wined3d_gl if (strstr(gl_renderer, cards[i].renderer)) return cards[i].id; } - - /* Geforce8-compatible fall back if the GPU is not in the list yet */ - return CARD_NVIDIA_GEFORCE_8300GS; + return PCI_DEVICE_NONE; } /* Both the GeforceFX, 6xxx and 7xxx series support D3D9. The last two types have more @@ -1610,9 +1637,7 @@ static enum wined3d_pci_device select_card_nvidia_binary(const struct wined3d_gl if (strstr(gl_renderer, cards[i].renderer)) return cards[i].id; } - - /* Geforce 6/7 - lowend */ - return CARD_NVIDIA_GEFORCE_6200; /* Geforce 6100/6150/6200/7300/7400/7500 */ + return PCI_DEVICE_NONE; } if (d3d_level >= 9) @@ -1699,15 +1724,20 @@ static enum wined3d_pci_device select_card_amd_binary(const struct wined3d_gl_in { /* Southern Islands */ {"HD 7900", CARD_AMD_RADEON_HD7900}, + {"HD 7800", CARD_AMD_RADEON_HD7800}, + {"HD 7700", CARD_AMD_RADEON_HD7700}, /* Northern Islands */ + {"HD 6970", CARD_AMD_RADEON_HD6900}, {"HD 6900", CARD_AMD_RADEON_HD6900}, {"HD 6800", CARD_AMD_RADEON_HD6800}, {"HD 6770M",CARD_AMD_RADEON_HD6600M}, {"HD 6750M",CARD_AMD_RADEON_HD6600M}, {"HD 6700", CARD_AMD_RADEON_HD6700}, + {"HD 6670", CARD_AMD_RADEON_HD6600}, {"HD 6630M",CARD_AMD_RADEON_HD6600M}, {"HD 6600M",CARD_AMD_RADEON_HD6600M}, {"HD 6600", CARD_AMD_RADEON_HD6600}, + {"HD 6570", CARD_AMD_RADEON_HD6600}, {"HD 6500M",CARD_AMD_RADEON_HD6600M}, {"HD 6500", CARD_AMD_RADEON_HD6600}, {"HD 6400", CARD_AMD_RADEON_HD6400}, @@ -1724,6 +1754,7 @@ static enum wined3d_pci_device select_card_amd_binary(const struct wined3d_gl_in {"HD 5570", CARD_AMD_RADEON_HD5600}, /* Radeon EG REDWOOD PRO mapped to HD5600 series */ {"HD 5550", CARD_AMD_RADEON_HD5600}, /* Radeon EG REDWOOD LE mapped to HD5600 series */ {"HD 5450", CARD_AMD_RADEON_HD5400}, /* Radeon EG CEDAR PRO */ + {"HD 5000", CARD_AMD_RADEON_HD5600}, /* Defaulting to HD 5600 */ /* R700 */ {"HD 4890", CARD_AMD_RADEON_HD4800}, /* Radeon RV790 */ {"HD 4870", CARD_AMD_RADEON_HD4800}, /* Radeon RV770 */ @@ -1762,9 +1793,7 @@ static enum wined3d_pci_device select_card_amd_binary(const struct wined3d_gl_in if (strstr(gl_renderer, cards[i].renderer)) return cards[i].id; } - - /* Default for when no GPU has been found */ - return CARD_AMD_RADEON_HD3200; + return PCI_DEVICE_NONE; } if (d3d_level >= 9) @@ -1801,18 +1830,8 @@ static enum wined3d_pci_device select_card_amd_binary(const struct wined3d_gl_in { return CARD_AMD_RADEON_XPRESS_200M; } - - /* Radeon R3xx */ - return CARD_AMD_RADEON_9500; /* Radeon 9500/9550/9600/9700/9800/X300/X550/X600 */ } - - if (d3d_level >= 8) - return CARD_AMD_RADEON_8500; /* Radeon 8500/9000/9100/9200/9300 */ - - if (d3d_level >= 7) - return CARD_AMD_RADEON_7200; /* Radeon 7000/7100/7200/7500 */ - - return CARD_AMD_RAGE_128PRO; + return PCI_DEVICE_NONE; } static enum wined3d_pci_device select_card_intel(const struct wined3d_gl_info *gl_info, @@ -1880,163 +1899,108 @@ static enum wined3d_pci_device select_card_intel(const struct wined3d_gl_info *g return cards[i].id; } - return CARD_INTEL_915G; + return PCI_DEVICE_NONE; } static enum wined3d_pci_device select_card_amd_mesa(const struct wined3d_gl_info *gl_info, const char *gl_renderer) { - UINT d3d_level; unsigned int i; - /* See http://developer.amd.com/drivers/pc_vendor_id/Pages/default.aspx + /* 20101109 - These are never returned by current Gallium radeon + * drivers: R700, RV790, R680, RV535, RV516, R410, RS485, RV360, RV351. * - * Beware: renderer string do not match exact card model, - * eg HD 4800 is returned for multiple cards, even for RV790 based ones. */ - if (strstr(gl_renderer, "Gallium")) + * These are returned but not handled: RC410, RV380. */ + static const struct { - /* 20101109 - These are never returned by current Gallium radeon - * drivers: R700, RV790, R680, RV535, RV516, R410, RS485, RV360, RV351. - * - * These are returned but not handled: RC410, RV380. */ - static const struct - { - const char *renderer; - enum wined3d_pci_device id; - } - cards[] = - { - /* Southern Islands */ - {"TAHITI", CARD_AMD_RADEON_HD7900}, - /* Northern Islands */ - {"CAYMAN", CARD_AMD_RADEON_HD6900}, - {"BARTS", CARD_AMD_RADEON_HD6800}, - {"TURKS", CARD_AMD_RADEON_HD6600}, - {"SUMO2", CARD_AMD_RADEON_HD6410D}, /* SUMO2 first, because we do a strstr(). */ - {"SUMO", CARD_AMD_RADEON_HD6550D}, - {"CAICOS", CARD_AMD_RADEON_HD6400}, - {"PALM", CARD_AMD_RADEON_HD6300}, - /* Evergreen */ - {"HEMLOCK", CARD_AMD_RADEON_HD5900}, - {"CYPRESS", CARD_AMD_RADEON_HD5800}, - {"JUNIPER", CARD_AMD_RADEON_HD5700}, - {"REDWOOD", CARD_AMD_RADEON_HD5600}, - {"CEDAR", CARD_AMD_RADEON_HD5400}, - /* R700 */ - {"R700", CARD_AMD_RADEON_HD4800}, /* HD4800 - highend */ - {"RV790", CARD_AMD_RADEON_HD4800}, - {"RV770", CARD_AMD_RADEON_HD4800}, - {"RV740", CARD_AMD_RADEON_HD4700}, /* HD4700 - midend */ - {"RV730", CARD_AMD_RADEON_HD4600}, /* HD4600 - midend */ - {"RV710", CARD_AMD_RADEON_HD4350}, /* HD4500/HD4350 - lowend */ - /* R600/R700 integrated */ - {"RS880", CARD_AMD_RADEON_HD3200}, - {"RS780", CARD_AMD_RADEON_HD3200}, - /* R600 */ - {"R680", CARD_AMD_RADEON_HD2900}, /* HD2900/HD3800 - highend */ - {"R600", CARD_AMD_RADEON_HD2900}, - {"RV670", CARD_AMD_RADEON_HD2900}, - {"RV635", CARD_AMD_RADEON_HD2600}, /* HD2600/HD3600 - midend; HD3830 is China-only midend */ - {"RV630", CARD_AMD_RADEON_HD2600}, - {"RV620", CARD_AMD_RADEON_HD2350}, /* HD2350/HD2400/HD3400 - lowend */ - {"RV610", CARD_AMD_RADEON_HD2350}, - /* R500 */ - {"R580", CARD_AMD_RADEON_X1600}, - {"R520", CARD_AMD_RADEON_X1600}, - {"RV570", CARD_AMD_RADEON_X1600}, - {"RV560", CARD_AMD_RADEON_X1600}, - {"RV535", CARD_AMD_RADEON_X1600}, - {"RV530", CARD_AMD_RADEON_X1600}, - {"RV516", CARD_AMD_RADEON_X700}, /* X700 is actually R400. */ - {"RV515", CARD_AMD_RADEON_X700}, - /* R400 */ - {"R481", CARD_AMD_RADEON_X700}, - {"R480", CARD_AMD_RADEON_X700}, - {"R430", CARD_AMD_RADEON_X700}, - {"R423", CARD_AMD_RADEON_X700}, - {"R420", CARD_AMD_RADEON_X700}, - {"R410", CARD_AMD_RADEON_X700}, - {"RV410", CARD_AMD_RADEON_X700}, - /* Radeon Xpress - onboard, DX9b, Shader 2.0, 300-400MHz */ - {"RS740", CARD_AMD_RADEON_XPRESS_200M}, - {"RS690", CARD_AMD_RADEON_XPRESS_200M}, - {"RS600", CARD_AMD_RADEON_XPRESS_200M}, - {"RS485", CARD_AMD_RADEON_XPRESS_200M}, - {"RS482", CARD_AMD_RADEON_XPRESS_200M}, - {"RS480", CARD_AMD_RADEON_XPRESS_200M}, - {"RS400", CARD_AMD_RADEON_XPRESS_200M}, - /* R300 */ - {"R360", CARD_AMD_RADEON_9500}, - {"R350", CARD_AMD_RADEON_9500}, - {"R300", CARD_AMD_RADEON_9500}, - {"RV370", CARD_AMD_RADEON_9500}, - {"RV360", CARD_AMD_RADEON_9500}, - {"RV351", CARD_AMD_RADEON_9500}, - {"RV350", CARD_AMD_RADEON_9500}, - }; + const char *renderer; + enum wined3d_pci_device id; + } + cards[] = + { + /* Southern Islands */ + {"TAHITI", CARD_AMD_RADEON_HD7900}, + {"PITCAIRN", CARD_AMD_RADEON_HD7800}, + {"CAPE VERDE", CARD_AMD_RADEON_HD7700}, + /* Northern Islands */ + {"CAYMAN", CARD_AMD_RADEON_HD6900}, + {"BARTS", CARD_AMD_RADEON_HD6800}, + {"TURKS", CARD_AMD_RADEON_HD6600}, + {"SUMO2", CARD_AMD_RADEON_HD6410D}, /* SUMO2 first, because we do a strstr(). */ + {"SUMO", CARD_AMD_RADEON_HD6550D}, + {"CAICOS", CARD_AMD_RADEON_HD6400}, + {"PALM", CARD_AMD_RADEON_HD6300}, + /* Evergreen */ + {"HEMLOCK", CARD_AMD_RADEON_HD5900}, + {"CYPRESS", CARD_AMD_RADEON_HD5800}, + {"JUNIPER", CARD_AMD_RADEON_HD5700}, + {"REDWOOD", CARD_AMD_RADEON_HD5600}, + {"CEDAR", CARD_AMD_RADEON_HD5400}, + /* R700 */ + {"R700", CARD_AMD_RADEON_HD4800}, + {"RV790", CARD_AMD_RADEON_HD4800}, + {"RV770", CARD_AMD_RADEON_HD4800}, + {"RV740", CARD_AMD_RADEON_HD4700}, + {"RV730", CARD_AMD_RADEON_HD4600}, + {"RV710", CARD_AMD_RADEON_HD4350}, + /* R600/R700 integrated */ + {"RS880", CARD_AMD_RADEON_HD3200}, + {"RS780", CARD_AMD_RADEON_HD3200}, + /* R600 */ + {"R680", CARD_AMD_RADEON_HD2900}, + {"R600", CARD_AMD_RADEON_HD2900}, + {"RV670", CARD_AMD_RADEON_HD2900}, + {"RV635", CARD_AMD_RADEON_HD2600}, + {"RV630", CARD_AMD_RADEON_HD2600}, + {"RV620", CARD_AMD_RADEON_HD2350}, + {"RV610", CARD_AMD_RADEON_HD2350}, + /* R500 */ + {"R580", CARD_AMD_RADEON_X1600}, + {"R520", CARD_AMD_RADEON_X1600}, + {"RV570", CARD_AMD_RADEON_X1600}, + {"RV560", CARD_AMD_RADEON_X1600}, + {"RV535", CARD_AMD_RADEON_X1600}, + {"RV530", CARD_AMD_RADEON_X1600}, + {"RV516", CARD_AMD_RADEON_X700}, + {"RV515", CARD_AMD_RADEON_X700}, + /* R400 */ + {"R481", CARD_AMD_RADEON_X700}, + {"R480", CARD_AMD_RADEON_X700}, + {"R430", CARD_AMD_RADEON_X700}, + {"R423", CARD_AMD_RADEON_X700}, + {"R420", CARD_AMD_RADEON_X700}, + {"R410", CARD_AMD_RADEON_X700}, + {"RV410", CARD_AMD_RADEON_X700}, + /* Radeon Xpress - onboard, DX9b, Shader 2.0, 300-400MHz */ + {"RS740", CARD_AMD_RADEON_XPRESS_200M}, + {"RS690", CARD_AMD_RADEON_XPRESS_200M}, + {"RS600", CARD_AMD_RADEON_XPRESS_200M}, + {"RS485", CARD_AMD_RADEON_XPRESS_200M}, + {"RS482", CARD_AMD_RADEON_XPRESS_200M}, + {"RS480", CARD_AMD_RADEON_XPRESS_200M}, + {"RS400", CARD_AMD_RADEON_XPRESS_200M}, + /* R300 */ + {"R360", CARD_AMD_RADEON_9500}, + {"R350", CARD_AMD_RADEON_9500}, + {"R300", CARD_AMD_RADEON_9500}, + {"RV370", CARD_AMD_RADEON_9500}, + {"RV360", CARD_AMD_RADEON_9500}, + {"RV351", CARD_AMD_RADEON_9500}, + {"RV350", CARD_AMD_RADEON_9500}, + }; - for (i = 0; i < sizeof(cards) / sizeof(*cards); ++i) - { - if (strstr(gl_renderer, cards[i].renderer)) - return cards[i].id; - } + for (i = 0; i < sizeof(cards) / sizeof(*cards); ++i) + { + if (strstr(gl_renderer, cards[i].renderer)) + return cards[i].id; } - d3d_level = d3d_level_from_gl_info(gl_info); - if (d3d_level >= 10) - return CARD_AMD_RADEON_HD2600; - - if (d3d_level >= 9) - { - static const struct - { - const char *renderer; - enum wined3d_pci_device id; - } - cards[] = - { - /* R700 */ - {"(R700", CARD_AMD_RADEON_HD4800}, /* HD4800 - highend */ - {"(RV790", CARD_AMD_RADEON_HD4800}, - {"(RV770", CARD_AMD_RADEON_HD4800}, - {"(RV740", CARD_AMD_RADEON_HD4700}, /* HD4700 - midend */ - {"(RV730", CARD_AMD_RADEON_HD4600}, /* HD4600 - midend */ - {"(RV710", CARD_AMD_RADEON_HD4350}, /* HD4500/HD4350 - lowend */ - /* R600/R700 integrated */ - {"RS880", CARD_AMD_RADEON_HD3200}, - {"RS780", CARD_AMD_RADEON_HD3200}, - /* R600 */ - {"(R680", CARD_AMD_RADEON_HD2900}, /* HD2900/HD3800 - highend */ - {"(R600", CARD_AMD_RADEON_HD2900}, - {"(RV670", CARD_AMD_RADEON_HD2900}, - {"(RV635", CARD_AMD_RADEON_HD2600}, /* HD2600/HD3600 - midend; HD3830 is China-only midend */ - {"(RV630", CARD_AMD_RADEON_HD2600}, - {"(RV620", CARD_AMD_RADEON_HD2350}, /* HD2300/HD2400/HD3400 - lowend */ - {"(RV610", CARD_AMD_RADEON_HD2350}, - }; - - for (i = 0; i < sizeof(cards) / sizeof(*cards); ++i) - { - if (strstr(gl_renderer, cards[i].renderer)) - return cards[i].id; - } - - return CARD_AMD_RADEON_9500; - } - - if (d3d_level >= 8) - return CARD_AMD_RADEON_8500; /* Radeon 8500/9000/9100/9200/9300 */ - - if (d3d_level >= 7) - return CARD_AMD_RADEON_7200; /* Radeon 7000/7100/7200/7500 */ - - return CARD_AMD_RAGE_128PRO; + return PCI_DEVICE_NONE; } static enum wined3d_pci_device select_card_nvidia_mesa(const struct wined3d_gl_info *gl_info, const char *gl_renderer) { - UINT d3d_level; unsigned int i; static const struct @@ -2049,6 +2013,7 @@ static enum wined3d_pci_device select_card_nvidia_mesa(const struct wined3d_gl_i /* Kepler */ {"NVE4", CARD_NVIDIA_GEFORCE_GTX680}, /* Fermi */ + {"NVD9", CARD_NVIDIA_GEFORCE_GT520}, {"NVCF", CARD_NVIDIA_GEFORCE_GTX550}, {"NVCE", CARD_NVIDIA_GEFORCE_GTX560}, {"NVC8", CARD_NVIDIA_GEFORCE_GTX570}, @@ -2119,12 +2084,41 @@ static enum wined3d_pci_device select_card_nvidia_mesa(const struct wined3d_gl_i if (strstr(gl_renderer, cards[i].renderer)) return cards[i].id; } + return PCI_DEVICE_NONE; +} - FIXME("Unknown renderer %s.\n", debugstr_a(gl_renderer)); +static const struct gl_vendor_selection +{ + enum wined3d_gl_vendor gl_vendor; + const char *description; /* Description of the card selector i.e. Apple OS/X Intel */ + enum wined3d_pci_device (*select_card)(const struct wined3d_gl_info *gl_info, const char *gl_renderer); +} +nvidia_gl_vendor_table[] = +{ + {GL_VENDOR_NVIDIA, "Nvidia binary driver", select_card_nvidia_binary}, + {GL_VENDOR_APPLE, "Apple OSX NVidia binary driver", select_card_nvidia_binary}, + {GL_VENDOR_MESA, "Mesa Nouveau driver", select_card_nvidia_mesa}, +}, +amd_gl_vendor_table[] = +{ + {GL_VENDOR_APPLE, "Apple OSX AMD/ATI binary driver", select_card_amd_binary}, + {GL_VENDOR_FGLRX, "AMD/ATI binary driver", select_card_amd_binary}, + {GL_VENDOR_MESA, "Mesa AMD/ATI driver", select_card_amd_mesa}, +}, +intel_gl_vendor_table[] = +{ + {GL_VENDOR_APPLE, "Apple OSX Intel binary driver", select_card_intel}, + {GL_VENDOR_INTEL, "Mesa Intel driver", select_card_intel}, + {GL_VENDOR_MESA, "Mesa Intel driver", select_card_intel}, +}; - d3d_level = d3d_level_from_gl_info(gl_info); +static enum wined3d_pci_device select_card_fallback_nvidia(const struct wined3d_gl_info *gl_info) +{ + UINT d3d_level = d3d_level_from_gl_info(gl_info); if (d3d_level >= 10) return CARD_NVIDIA_GEFORCE_8800GTX; + if (d3d_level >= 9 && gl_info->supported[NV_VERTEX_PROGRAM3]) + return CARD_NVIDIA_GEFORCE_6800; if (d3d_level >= 9) return CARD_NVIDIA_GEFORCEFX_5800; if (d3d_level >= 8) @@ -2136,40 +2130,74 @@ static enum wined3d_pci_device select_card_nvidia_mesa(const struct wined3d_gl_i return CARD_NVIDIA_RIVA_128; } - -struct vendor_card_selection +static enum wined3d_pci_device select_card_fallback_amd(const struct wined3d_gl_info *gl_info) +{ + UINT d3d_level = d3d_level_from_gl_info(gl_info); + if (d3d_level >= 10) + return CARD_AMD_RADEON_HD2900; + if (d3d_level >= 9) + return CARD_AMD_RADEON_9500; + if (d3d_level >= 8) + return CARD_AMD_RADEON_8500; + if (d3d_level >= 7) + return CARD_AMD_RADEON_7200; + return CARD_AMD_RAGE_128PRO; +} + +static enum wined3d_pci_device select_card_fallback_intel(const struct wined3d_gl_info *gl_info) +{ + UINT d3d_level = d3d_level_from_gl_info(gl_info); + if (d3d_level >= 10) + return CARD_INTEL_G45; + return CARD_INTEL_915G; +} + +static enum wined3d_pci_device select_card_handler(const struct gl_vendor_selection *table, + unsigned int table_size, enum wined3d_gl_vendor gl_vendor, + const struct wined3d_gl_info *gl_info, const char *gl_renderer) +{ + unsigned int i; + + for (i = 0; i < table_size; ++i) + { + if (table[i].gl_vendor != gl_vendor) + continue; + + TRACE("Applying card selector \"%s\".\n", table[i].description); + return table[i].select_card(gl_info, gl_renderer); + } + FIXME("Couldn't find a suitable card selector for GL vendor %04x (using GL_RENDERER %s)\n", + gl_vendor, debugstr_a(gl_renderer)); + + return PCI_DEVICE_NONE; +} + +static const struct { - enum wined3d_gl_vendor gl_vendor; enum wined3d_pci_vendor card_vendor; const char *description; /* Description of the card selector i.e. Apple OS/X Intel */ - enum wined3d_pci_device (*select_card)(const struct wined3d_gl_info *gl_info, const char *gl_renderer); -}; - -static const struct vendor_card_selection vendor_card_select_table[] = + const struct gl_vendor_selection *gl_vendor_selection; + unsigned int gl_vendor_count; + enum wined3d_pci_device (*select_card_fallback)(const struct wined3d_gl_info *gl_info); +} +card_vendor_table[] = { - {GL_VENDOR_NVIDIA, HW_VENDOR_NVIDIA, "Nvidia binary driver", select_card_nvidia_binary}, - {GL_VENDOR_APPLE, HW_VENDOR_NVIDIA, "Apple OSX NVidia binary driver", select_card_nvidia_binary}, - {GL_VENDOR_APPLE, HW_VENDOR_AMD, "Apple OSX AMD/ATI binary driver", select_card_amd_binary}, - {GL_VENDOR_APPLE, HW_VENDOR_INTEL, "Apple OSX Intel binary driver", select_card_intel}, - {GL_VENDOR_FGLRX, HW_VENDOR_AMD, "AMD/ATI binary driver", select_card_amd_binary}, - {GL_VENDOR_MESA, HW_VENDOR_AMD, "Mesa AMD/ATI driver", select_card_amd_mesa}, - {GL_VENDOR_MESA, HW_VENDOR_NVIDIA, "Mesa Nouveau driver", select_card_nvidia_mesa}, - {GL_VENDOR_MESA, HW_VENDOR_INTEL, "Mesa Intel driver", select_card_intel}, - {GL_VENDOR_INTEL, HW_VENDOR_INTEL, "Mesa Intel driver", select_card_intel} + {HW_VENDOR_NVIDIA, "Nvidia", nvidia_gl_vendor_table, + sizeof(nvidia_gl_vendor_table) / sizeof(nvidia_gl_vendor_table[0]), + select_card_fallback_nvidia}, + {HW_VENDOR_AMD, "AMD", amd_gl_vendor_table, + sizeof(amd_gl_vendor_table) / sizeof(amd_gl_vendor_table[0]), + select_card_fallback_amd}, + {HW_VENDOR_INTEL, "Intel", intel_gl_vendor_table, + sizeof(intel_gl_vendor_table) / sizeof(intel_gl_vendor_table[0]), + select_card_fallback_intel}, }; static enum wined3d_pci_device wined3d_guess_card(const struct wined3d_gl_info *gl_info, const char *gl_renderer, enum wined3d_gl_vendor *gl_vendor, enum wined3d_pci_vendor *card_vendor) { - UINT d3d_level; - - /* Above is a list of Nvidia and ATI GPUs. Both vendors have dozens of - * different GPUs with roughly the same features. In most cases GPUs from a - * certain family differ in clockspeeds, the amount of video memory and the - * number of shader pipelines. - * - * A Direct3D device object contains the PCI id (vendor + device) of the + /* A Direct3D device object contains the PCI id (vendor + device) of the * videocard which is used for rendering. Various applications use this * information to get a rough estimation of the features of the card and * some might use it for enabling 3d effects only on certain types of @@ -2220,67 +2248,76 @@ static enum wined3d_pci_device wined3d_guess_card(const struct wined3d_gl_info * * memory can be overruled using a registry setting. */ int i; + enum wined3d_pci_device device; - for (i = 0; i < (sizeof(vendor_card_select_table) / sizeof(*vendor_card_select_table)); ++i) + for (i = 0; i < (sizeof(card_vendor_table) / sizeof(*card_vendor_table)); ++i) { - if ((vendor_card_select_table[i].gl_vendor != *gl_vendor) - || (vendor_card_select_table[i].card_vendor != *card_vendor)) + if (card_vendor_table[i].card_vendor != *card_vendor) continue; - TRACE("Applying card_selector \"%s\".\n", vendor_card_select_table[i].description); - return vendor_card_select_table[i].select_card(gl_info, gl_renderer); + + TRACE("Applying card selector \"%s\".\n", card_vendor_table[i].description); + device = select_card_handler(card_vendor_table[i].gl_vendor_selection, + card_vendor_table[i].gl_vendor_count, *gl_vendor, gl_info, gl_renderer); + if (device != PCI_DEVICE_NONE) + return device; + + TRACE("Unrecognized renderer %s, falling back to default.\n", debugstr_a(gl_renderer)); + return card_vendor_table[i].select_card_fallback(gl_info); } - FIXME("No card selector available for GL vendor %#x and card vendor %04x (using GL_RENDERER %s).\n", - *gl_vendor, *card_vendor, debugstr_a(gl_renderer)); + FIXME("No card selector available for card vendor %04x (using GL_RENDERER %s).\n", + *card_vendor, debugstr_a(gl_renderer)); - /* Default to generic Nvidia hardware based on the supported OpenGL extensions. The choice - * for Nvidia was because the hardware and drivers they make are of good quality. This makes - * them a good generic choice. */ + /* Default to generic Nvidia hardware based on the supported OpenGL extensions. */ *card_vendor = HW_VENDOR_NVIDIA; - d3d_level = d3d_level_from_gl_info(gl_info); - if (d3d_level >= 9) - return CARD_NVIDIA_GEFORCEFX_5600; - if (d3d_level >= 8) - return CARD_NVIDIA_GEFORCE3; - if (d3d_level >= 7) - return CARD_NVIDIA_GEFORCE; - if (d3d_level >= 6) - return CARD_NVIDIA_RIVA_TNT; - return CARD_NVIDIA_RIVA_128; + return select_card_fallback_nvidia(gl_info); } -static const struct fragment_pipeline *select_fragment_implementation(const struct wined3d_gl_info *gl_info) +static const struct fragment_pipeline *select_fragment_implementation(const struct wined3d_gl_info *gl_info, + const struct wined3d_shader_backend_ops *shader_backend_ops) { - int vs_selected_mode, ps_selected_mode; - - select_shader_mode(gl_info, &ps_selected_mode, &vs_selected_mode); - if ((ps_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_GLSL) - && gl_info->supported[ARB_FRAGMENT_PROGRAM]) return &arbfp_fragment_pipeline; - else if (ps_selected_mode == SHADER_ATI) return &atifs_fragment_pipeline; - else if (gl_info->supported[NV_REGISTER_COMBINERS] - && gl_info->supported[NV_TEXTURE_SHADER2]) return &nvts_fragment_pipeline; - else if (gl_info->supported[NV_REGISTER_COMBINERS]) return &nvrc_fragment_pipeline; - else return &ffp_fragment_pipeline; + if (shader_backend_ops == &glsl_shader_backend) + return &glsl_fragment_pipe; + if (shader_backend_ops == &arb_program_shader_backend && gl_info->supported[ARB_FRAGMENT_PROGRAM]) + return &arbfp_fragment_pipeline; + if (gl_info->supported[ATI_FRAGMENT_SHADER]) + return &atifs_fragment_pipeline; + if (gl_info->supported[NV_REGISTER_COMBINERS] && gl_info->supported[NV_TEXTURE_SHADER2]) + return &nvts_fragment_pipeline; + if (gl_info->supported[NV_REGISTER_COMBINERS]) + return &nvrc_fragment_pipeline; + return &ffp_fragment_pipeline; } static const struct wined3d_shader_backend_ops *select_shader_backend(const struct wined3d_gl_info *gl_info) { - int vs_selected_mode, ps_selected_mode; + BOOL glsl = wined3d_settings.glslRequested && gl_info->glsl_version >= MAKEDWORD_VERSION(1, 20); - select_shader_mode(gl_info, &ps_selected_mode, &vs_selected_mode); - if (vs_selected_mode == SHADER_GLSL || ps_selected_mode == SHADER_GLSL) return &glsl_shader_backend; - if (vs_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_ARB) return &arb_program_shader_backend; + if (glsl && gl_info->supported[ARB_FRAGMENT_SHADER]) + return &glsl_shader_backend; + if (glsl && gl_info->supported[ARB_VERTEX_SHADER]) + { + /* Geforce4 cards support GLSL but for vertex shaders only. Further + * its reported GLSL caps are wrong. This combined with the fact that + * GLSL won't offer more features or performance, use ARB shaders only + * on this card. */ + if (gl_info->supported[NV_VERTEX_PROGRAM] && !gl_info->supported[NV_VERTEX_PROGRAM2]) + return &arb_program_shader_backend; + return &glsl_shader_backend; + } + if (gl_info->supported[ARB_VERTEX_PROGRAM] || gl_info->supported[ARB_FRAGMENT_PROGRAM]) + return &arb_program_shader_backend; return &none_shader_backend; } -static const struct blit_shader *select_blit_implementation(const struct wined3d_gl_info *gl_info) +static const struct blit_shader *select_blit_implementation(const struct wined3d_gl_info *gl_info, + const struct wined3d_shader_backend_ops *shader_backend_ops) { - int vs_selected_mode, ps_selected_mode; - - select_shader_mode(gl_info, &ps_selected_mode, &vs_selected_mode); - if ((ps_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_GLSL) - && gl_info->supported[ARB_FRAGMENT_PROGRAM]) return &arbfp_blit; - else return &ffp_blit; + if ((shader_backend_ops == &glsl_shader_backend + || shader_backend_ops == &arb_program_shader_backend) + && gl_info->supported[ARB_FRAGMENT_PROGRAM]) + return &arbfp_blit; + return &ffp_blit; } static void parse_extension_string(struct wined3d_gl_info *gl_info, const char *extensions, @@ -2319,7 +2356,7 @@ static void parse_extension_string(struct wined3d_gl_info *gl_info, const char * static void load_gl_funcs(struct wined3d_gl_info *gl_info) { -#define USE_GL_FUNC(pfn) gl_info->gl_ops.ext.p_##pfn = (void *)pwglGetProcAddress(#pfn); +#define USE_GL_FUNC(pfn) gl_info->gl_ops.ext.p_##pfn = (void *)wglGetProcAddress(#pfn); GL_EXT_FUNCS_GEN; #undef USE_GL_FUNC @@ -2556,13 +2593,10 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter) TRACE("adapter %p.\n", adapter); - ENTER_GL(); - gl_renderer_str = (const char *)gl_info->gl_ops.gl.p_glGetString(GL_RENDERER); TRACE("GL_RENDERER: %s.\n", debugstr_a(gl_renderer_str)); if (!gl_renderer_str) { - LEAVE_GL(); ERR("Received a NULL GL_RENDERER.\n"); return FALSE; } @@ -2571,7 +2605,6 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter) TRACE("GL_VENDOR: %s.\n", debugstr_a(gl_vendor_str)); if (!gl_vendor_str) { - LEAVE_GL(); ERR("Received a NULL GL_VENDOR.\n"); return FALSE; } @@ -2581,7 +2614,6 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter) TRACE("GL_VERSION: %s.\n", debugstr_a(gl_version_str)); if (!gl_version_str) { - LEAVE_GL(); ERR("Received a NULL GL_VERSION.\n"); return FALSE; } @@ -2591,13 +2623,10 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter) GL_Extensions = (const char *)gl_info->gl_ops.gl.p_glGetString(GL_EXTENSIONS); if (!GL_Extensions) { - LEAVE_GL(); ERR("Received a NULL GL_EXTENSIONS.\n"); return FALSE; } - LEAVE_GL(); - memset(gl_info->supported, 0, sizeof(gl_info->supported)); gl_info->supported[WINED3D_GL_EXT_NONE] = TRUE; @@ -2608,7 +2637,7 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter) /* Now work out what GL support this card really has. */ load_gl_funcs( gl_info ); - hdc = pwglGetCurrentDC(); + hdc = wglGetCurrentDC(); /* Not all GL drivers might offer WGL extensions e.g. VirtualBox. */ if (GL_EXTCALL(wglGetExtensionsStringARB)) WGL_Extensions = (const char *)GL_EXTCALL(wglGetExtensionsStringARB(hdc)); @@ -2740,8 +2769,6 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter) gl_info->supported[ARB_FRAMEBUFFER_SRGB] = FALSE; } - ENTER_GL(); - wined3d_adapter_init_limits(gl_info); if (gl_info->supported[ARB_VERTEX_PROGRAM] && test_arb_vs_offset_limit(gl_info)) @@ -2761,11 +2788,9 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter) checkGLcall("extension detection"); - LEAVE_GL(); - - adapter->fragment_pipe = select_fragment_implementation(gl_info); adapter->shader_backend = select_shader_backend(gl_info); - adapter->blitter = select_blit_implementation(gl_info); + adapter->fragment_pipe = select_fragment_implementation(gl_info, adapter->shader_backend); + adapter->blitter = select_blit_implementation(gl_info, adapter->shader_backend); adapter->fragment_pipe->get_caps(gl_info, &fragment_caps); gl_info->limits.texture_stages = fragment_caps.MaxTextureBlendStages; @@ -3430,16 +3455,6 @@ HRESULT CDECL wined3d_check_device_multisample_type(const struct wined3d *wined3 return WINED3D_OK; } -/* Check if we support bumpmapping for a format */ -static BOOL CheckBumpMapCapability(const struct wined3d_adapter *adapter, const struct wined3d_format *format) -{ - /* Ask the fixed function pipeline implementation if it can deal - * with the conversion. If we've got a GL extension giving native - * support this will be an identity conversion. */ - return (format->flags & WINED3DFMT_FLAG_BUMPMAP) - && adapter->fragment_pipe->color_fixup_supported(format->color_fixup); -} - /* Check if the given DisplayFormat + DepthStencilFormat combination is valid for the Adapter */ static BOOL CheckDepthStencilCapability(const struct wined3d_adapter *adapter, const struct wined3d_format *display_format, const struct wined3d_format *ds_format) @@ -3481,16 +3496,6 @@ static BOOL CheckDepthStencilCapability(const struct wined3d_adapter *adapter, return FALSE; } -static BOOL CheckFilterCapability(const struct wined3d_adapter *adapter, const struct wined3d_format *format) -{ - /* The flags entry of a format contains the filtering capability */ - if ((format->flags & WINED3DFMT_FLAG_FILTERING) - || !(adapter->gl_info.quirks & WINED3D_QUIRK_LIMITED_TEX_FILTERING)) - return TRUE; - - return FALSE; -} - /* Check the render target capabilities of a format */ static BOOL CheckRenderTargetCapability(const struct wined3d_adapter *adapter, const struct wined3d_format *adapter_format, const struct wined3d_format *check_format) @@ -3537,336 +3542,11 @@ static BOOL CheckRenderTargetCapability(const struct wined3d_adapter *adapter, return FALSE; } -static BOOL CheckSrgbReadCapability(const struct wined3d_adapter *adapter, const struct wined3d_format *format) -{ - return format->flags & WINED3DFMT_FLAG_SRGB_READ; -} - -static BOOL CheckSrgbWriteCapability(const struct wined3d_adapter *adapter, const struct wined3d_format *format) -{ - /* Only offer SRGB writing on X8R8G8B8/A8R8G8B8 when we use ARB or GLSL shaders as we are - * doing the color fixup in shaders. - * Note Windows drivers (at least on the Geforce 8800) also offer this on R5G6B5. */ - if (format->flags & WINED3DFMT_FLAG_SRGB_WRITE) - { - int vs_selected_mode; - int ps_selected_mode; - select_shader_mode(&adapter->gl_info, &ps_selected_mode, &vs_selected_mode); - - if ((ps_selected_mode == SHADER_ARB) || (ps_selected_mode == SHADER_GLSL)) - { - TRACE("[OK]\n"); - return TRUE; - } - } - - TRACE("[FAILED] - sRGB writes not supported by format %s.\n", debug_d3dformat(format->id)); - return FALSE; -} - -/* Check if a format support blending in combination with pixel shaders */ -static BOOL CheckPostPixelShaderBlendingCapability(const struct wined3d_adapter *adapter, - const struct wined3d_format *format) -{ - /* The flags entry of a format contains the post pixel shader blending capability */ - if (format->flags & WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING) return TRUE; - - return FALSE; -} - -static BOOL CheckWrapAndMipCapability(const struct wined3d_adapter *adapter, const struct wined3d_format *format) -{ - /* OpenGL supports mipmapping on all formats basically. Wrapping is unsupported, - * but we have to report mipmapping so we cannot reject this flag. Tests show that - * windows reports WRAPANDMIP on unfilterable surfaces as well, apparently to show - * that wrapping is supported. The lack of filtering will sort out the mipmapping - * capability anyway. - * - * For now lets report this on all formats, but in the future we may want to - * restrict it to some should games need that - */ - return TRUE; -} - -/* Check if a texture format is supported on the given adapter */ -static BOOL CheckTextureCapability(const struct wined3d_adapter *adapter, const struct wined3d_format *format) -{ - const struct wined3d_gl_info *gl_info = &adapter->gl_info; - - switch (format->id) - { - /***** - * supported: RGB(A) formats - */ - case WINED3DFMT_B8G8R8_UNORM: - TRACE("[FAILED] - Not enumerated on Windows.\n"); - return FALSE; - case WINED3DFMT_B8G8R8A8_UNORM: - case WINED3DFMT_B8G8R8X8_UNORM: - case WINED3DFMT_B5G6R5_UNORM: - case WINED3DFMT_B5G5R5X1_UNORM: - case WINED3DFMT_B5G5R5A1_UNORM: - case WINED3DFMT_B4G4R4A4_UNORM: - case WINED3DFMT_A8_UNORM: - case WINED3DFMT_B4G4R4X4_UNORM: - case WINED3DFMT_R8G8B8A8_UNORM: - case WINED3DFMT_R8G8B8X8_UNORM: - case WINED3DFMT_B10G10R10A2_UNORM: - case WINED3DFMT_R10G10B10A2_UNORM: - case WINED3DFMT_R16G16_UNORM: - TRACE("[OK]\n"); - return TRUE; - - case WINED3DFMT_B2G3R3_UNORM: - TRACE("[FAILED] - Not supported on Windows.\n"); - return FALSE; - - /***** - * Not supported: Palettized - * Only some Geforce/Voodoo3/G400 cards offer 8-bit textures in case of <=Direct3D7. - * Since it is not widely available, don't offer it. Further no Windows driver offers - * WINED3DFMT_P8_UINT_A8_NORM, so don't offer it either. - */ - case WINED3DFMT_P8_UINT: - case WINED3DFMT_P8_UINT_A8_UNORM: - return FALSE; - - /***** - * Supported: (Alpha)-Luminance - */ - case WINED3DFMT_L8_UNORM: - case WINED3DFMT_L8A8_UNORM: - case WINED3DFMT_L16_UNORM: - TRACE("[OK]\n"); - return TRUE; - - /* Not supported on Windows, thus disabled */ - case WINED3DFMT_L4A4_UNORM: - TRACE("[FAILED] - not supported on windows\n"); - return FALSE; - - /***** - * Supported: Depth/Stencil formats - */ - case WINED3DFMT_D16_LOCKABLE: - case WINED3DFMT_D16_UNORM: - case WINED3DFMT_X8D24_UNORM: - case WINED3DFMT_D24_UNORM_S8_UINT: - case WINED3DFMT_S8_UINT_D24_FLOAT: - case WINED3DFMT_D32_UNORM: - case WINED3DFMT_D32_FLOAT: - return TRUE; - - case WINED3DFMT_INTZ: - if (gl_info->supported[EXT_PACKED_DEPTH_STENCIL] - || gl_info->supported[ARB_FRAMEBUFFER_OBJECT]) - return TRUE; - return FALSE; - - /* Not supported on Windows */ - case WINED3DFMT_S1_UINT_D15_UNORM: - case WINED3DFMT_S4X4_UINT_D24_UNORM: - TRACE("[FAILED] - not supported on windows\n"); - return FALSE; - - /***** - * Not supported everywhere(depends on GL_ATI_envmap_bumpmap or - * GL_NV_texture_shader). Emulated by shaders - */ - case WINED3DFMT_R8G8_SNORM: - case WINED3DFMT_R8G8_SNORM_L8X8_UNORM: - case WINED3DFMT_R5G5_SNORM_L6_UNORM: - case WINED3DFMT_R8G8B8A8_SNORM: - case WINED3DFMT_R16G16_SNORM: - /* Ask the shader backend if it can deal with the conversion. If - * we've got a GL extension giving native support this will be an - * identity conversion. */ - if (adapter->shader_backend->shader_color_fixup_supported(format->color_fixup)) - { - TRACE("[OK]\n"); - return TRUE; - } - TRACE("[FAILED]\n"); - return FALSE; - - case WINED3DFMT_DXT1: - case WINED3DFMT_DXT2: - case WINED3DFMT_DXT3: - case WINED3DFMT_DXT4: - case WINED3DFMT_DXT5: - if (gl_info->supported[EXT_TEXTURE_COMPRESSION_S3TC]) - { - TRACE("[OK]\n"); - return TRUE; - } - TRACE("[FAILED]\n"); - return FALSE; - - - /***** - * Odd formats - not supported - */ - case WINED3DFMT_VERTEXDATA: - case WINED3DFMT_R16_UINT: - case WINED3DFMT_R32_UINT: - case WINED3DFMT_R16G16B16A16_SNORM: - case WINED3DFMT_R10G10B10_SNORM_A2_UNORM: - case WINED3DFMT_R10G11B11_SNORM: - case WINED3DFMT_R16: - case WINED3DFMT_AL16: - TRACE("[FAILED]\n"); /* Enable when implemented */ - return FALSE; - - /***** - * WINED3DFMT_R8G8_SNORM_Cx: Not supported right now - */ - case WINED3DFMT_R8G8_SNORM_Cx: - TRACE("[FAILED]\n"); /* Enable when implemented */ - return FALSE; - - /* YUV formats */ - case WINED3DFMT_UYVY: - case WINED3DFMT_YUY2: - if (gl_info->supported[APPLE_YCBCR_422]) - { - TRACE("[OK]\n"); - return TRUE; - } - TRACE("[FAILED]\n"); - return FALSE; - case WINED3DFMT_YV12: - TRACE("[FAILED]\n"); - return FALSE; - - case WINED3DFMT_R16G16B16A16_UNORM: - if (gl_info->quirks & WINED3D_QUIRK_BROKEN_RGBA16) - { - TRACE("[FAILED]\n"); - return FALSE; - } - TRACE("[OK]\n"); - return TRUE; - - /* Not supported */ - case WINED3DFMT_B2G3R3A8_UNORM: - TRACE("[FAILED]\n"); /* Enable when implemented */ - return FALSE; - - /* Floating point formats */ - case WINED3DFMT_R16_FLOAT: - case WINED3DFMT_R16G16_FLOAT: - case WINED3DFMT_R16G16B16A16_FLOAT: - if (gl_info->supported[ARB_TEXTURE_FLOAT] && gl_info->supported[ARB_HALF_FLOAT_PIXEL]) - { - TRACE("[OK]\n"); - return TRUE; - } - TRACE("[FAILED]\n"); - return FALSE; - - case WINED3DFMT_R32_FLOAT: - case WINED3DFMT_R32G32_FLOAT: - case WINED3DFMT_R32G32B32A32_FLOAT: - if (gl_info->supported[ARB_TEXTURE_FLOAT]) - { - TRACE("[OK]\n"); - return TRUE; - } - TRACE("[FAILED]\n"); - return FALSE; - - /* ATI instancing hack: Although ATI cards do not support Shader Model 3.0, they support - * instancing. To query if the card supports instancing CheckDeviceFormat with the special format - * MAKEFOURCC('I','N','S','T') is used. Should a (broken) app check for this provide a proper return value. - * We can do instancing with all shader versions, but we need vertex shaders. - * - * Additionally applications have to set the D3DRS_POINTSIZE render state to MAKEFOURCC('I','N','S','T') once - * to enable instancing. WineD3D doesn't need that and just ignores it. - * - * With Shader Model 3.0 capable cards Instancing 'just works' in Windows. - */ - case WINED3DFMT_INST: - TRACE("ATI Instancing check hack\n"); - if (gl_info->supported[ARB_VERTEX_PROGRAM] || gl_info->supported[ARB_VERTEX_SHADER]) - { - TRACE("[OK]\n"); - return TRUE; - } - TRACE("[FAILED]\n"); - return FALSE; - - /* Some weird FOURCC formats */ - case WINED3DFMT_R8G8_B8G8: - case WINED3DFMT_G8R8_G8B8: - case WINED3DFMT_MULTI2_ARGB8: - TRACE("[FAILED]\n"); - return FALSE; - - /* Vendor specific formats */ - case WINED3DFMT_ATI2N: - if (gl_info->supported[ATI_TEXTURE_COMPRESSION_3DC] - || gl_info->supported[ARB_TEXTURE_COMPRESSION_RGTC]) - { - if (adapter->shader_backend->shader_color_fixup_supported(format->color_fixup) - && adapter->fragment_pipe->color_fixup_supported(format->color_fixup)) - { - TRACE("[OK]\n"); - return TRUE; - } - - TRACE("[OK]\n"); - return TRUE; - } - TRACE("[FAILED]\n"); - return FALSE; - - /* Depth bound test. To query if the card supports it CheckDeviceFormat with the special - * format MAKEFOURCC('N','V','D','B') is used. - * It is enabled by setting D3DRS_ADAPTIVETESS_X render state to MAKEFOURCC('N','V','D','B') and - * then controlled by setting D3DRS_ADAPTIVETESS_Z (zMin) and D3DRS_ADAPTIVETESS_W (zMax) - * to test value. - */ - case WINED3DFMT_NVDB: - if (gl_info->supported[EXT_DEPTH_BOUNDS_TEST]) - { - TRACE("[OK]\n"); - return TRUE; - } - TRACE("[FAILED]\n"); - return FALSE; - - case WINED3DFMT_NVHU: - case WINED3DFMT_NVHS: - /* These formats seem to be similar to the HILO formats in GL_NV_texture_shader. NVHU - * is said to be GL_UNSIGNED_HILO16, NVHS GL_SIGNED_HILO16. Rumours say that d3d computes - * a 3rd channel similarly to D3DFMT_CxV8U8(So NVHS could be called D3DFMT_CxV16U16). - * ATI refused to support formats which can easily be emulated with pixel shaders, so - * Applications have to deal with not having NVHS and NVHU. - */ - TRACE("[FAILED]\n"); - return FALSE; - - case WINED3DFMT_NULL: - if (gl_info->supported[ARB_FRAMEBUFFER_OBJECT]) - return TRUE; - return FALSE; - - case WINED3DFMT_UNKNOWN: - return FALSE; - - default: - ERR("Unhandled format %s.\n", debug_d3dformat(format->id)); - break; - } - return FALSE; -} - static BOOL CheckSurfaceCapability(const struct wined3d_adapter *adapter, const struct wined3d_format *adapter_format, - const struct wined3d_format *check_format, - enum wined3d_surface_type surface_type) + const struct wined3d_format *check_format, BOOL no3d) { - if (surface_type == WINED3D_SURFACE_TYPE_GDI) + if (no3d) { switch (check_format->id) { @@ -3898,8 +3578,10 @@ static BOOL CheckSurfaceCapability(const struct wined3d_adapter *adapter, } } - /* All format that are supported for textures are supported for surfaces as well */ - if (CheckTextureCapability(adapter, check_format)) return TRUE; + /* All formats that are supported for textures are supported for surfaces + * as well. */ + if (check_format->flags & WINED3DFMT_FLAG_TEXTURE) + return TRUE; /* All depth stencil formats are supported on surfaces */ if (CheckDepthStencilCapability(adapter, adapter_format, check_format)) return TRUE; @@ -3917,28 +3599,9 @@ static BOOL CheckSurfaceCapability(const struct wined3d_adapter *adapter, return FALSE; } -static BOOL CheckVertexTextureCapability(const struct wined3d_adapter *adapter, - const struct wined3d_format *format) -{ - const struct wined3d_gl_info *gl_info = &adapter->gl_info; - - if (!gl_info->limits.vertex_samplers || !(format->flags & WINED3DFMT_FLAG_VTF)) - return FALSE; - - switch (format->id) - { - case WINED3DFMT_R32G32B32A32_FLOAT: - case WINED3DFMT_R32_FLOAT: - return TRUE; - default: - return !(gl_info->quirks & WINED3D_QUIRK_LIMITED_TEX_FILTERING); - } -} - HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT adapter_idx, enum wined3d_device_type device_type, enum wined3d_format_id adapter_format_id, DWORD usage, - enum wined3d_resource_type resource_type, enum wined3d_format_id check_format_id, - enum wined3d_surface_type surface_type) + enum wined3d_resource_type resource_type, enum wined3d_format_id check_format_id) { const struct wined3d_adapter *adapter = &wined3d->adapters[adapter_idx]; const struct wined3d_gl_info *gl_info = &adapter->gl_info; @@ -3947,10 +3610,10 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad DWORD usage_caps = 0; TRACE("wined3d %p, adapter_idx %u, device_type %s, adapter_format %s, usage %s, %s,\n" - "resource_type %s, check_format %s, surface_type %#x.\n", + "resource_type %s, check_format %s.\n", wined3d, adapter_idx, debug_d3ddevicetype(device_type), debug_d3dformat(adapter_format_id), debug_d3dusage(usage), debug_d3dusagequery(usage), debug_d3dresourcetype(resource_type), - debug_d3dformat(check_format_id), surface_type); + debug_d3dformat(check_format_id)); if (adapter_idx >= wined3d->adapter_count) return WINED3DERR_INVALIDCALL; @@ -3967,7 +3630,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad * - WINED3DUSAGE_SOFTWAREPROCESSING * - WINED3DUSAGE_QUERY_WRAPANDMIP */ - if (surface_type != WINED3D_SURFACE_TYPE_OPENGL) + if (wined3d->flags & WINED3D_NO3D) { TRACE("[FAILED]\n"); return WINED3DERR_NOTAVAILABLE; @@ -3979,7 +3642,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad return WINED3DERR_NOTAVAILABLE; } - if (!CheckTextureCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_TEXTURE)) { TRACE("[FAILED] - Cube texture format not supported.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4015,7 +3678,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad if (usage & WINED3DUSAGE_QUERY_FILTER) { - if (!CheckFilterCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_FILTERING)) { TRACE("[FAILED] - No filter support.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4025,7 +3688,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad if (usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) { - if (!CheckPostPixelShaderBlendingCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING)) { TRACE("[FAILED] - No post pixelshader blending support.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4035,7 +3698,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad if (usage & WINED3DUSAGE_QUERY_SRGBREAD) { - if (!CheckSrgbReadCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_SRGB_READ)) { TRACE("[FAILED] - No sRGB read support.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4045,7 +3708,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad if (usage & WINED3DUSAGE_QUERY_SRGBWRITE) { - if (!CheckSrgbWriteCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_SRGB_WRITE)) { TRACE("[FAILED] - No sRGB write support.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4055,7 +3718,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad if (usage & WINED3DUSAGE_QUERY_VERTEXTEXTURE) { - if (!CheckVertexTextureCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_VTF)) { TRACE("[FAILED] - No vertex texture support.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4063,15 +3726,18 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad usage_caps |= WINED3DUSAGE_QUERY_VERTEXTEXTURE; } + /* OpenGL supports mipmapping on all formats. Wrapping is + * unsupported, but we have to report mipmapping so we cannot + * reject this flag. Tests show that Windows reports WRAPANDMIP on + * unfilterable surfaces as well, apparently to show that wrapping + * is supported. The lack of filtering will sort out the + * mipmapping capability anyway. + * + * For now lets report this on all formats, but in the future we + * may want to restrict it to some should applications need that. */ if (usage & WINED3DUSAGE_QUERY_WRAPANDMIP) - { - if (!CheckWrapAndMipCapability(adapter, format)) - { - TRACE("[FAILED] - No wrapping and mipmapping support.\n"); - return WINED3DERR_NOTAVAILABLE; - } usage_caps |= WINED3DUSAGE_QUERY_WRAPANDMIP; - } + break; case WINED3D_RTYPE_SURFACE: @@ -4080,7 +3746,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad * - WINED3DUSAGE_NONSECURE (d3d9ex) * - WINED3DUSAGE_RENDERTARGET */ - if (!CheckSurfaceCapability(adapter, adapter_format, format, surface_type)) + if (!CheckSurfaceCapability(adapter, adapter_format, format, wined3d->flags & WINED3D_NO3D)) { TRACE("[FAILED] - Not supported for plain surfaces.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4108,7 +3774,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad if (usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) { - if (!CheckPostPixelShaderBlendingCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING)) { TRACE("[FAILED] - No post pixelshader blending support.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4129,13 +3795,13 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad * - WINED3DUSAGE_TEXTAPI (d3d9ex) * - WINED3DUSAGE_QUERY_WRAPANDMIP */ - if (surface_type != WINED3D_SURFACE_TYPE_OPENGL) + if (wined3d->flags & WINED3D_NO3D) { TRACE("[FAILED]\n"); return WINED3DERR_NOTAVAILABLE; } - if (!CheckTextureCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_TEXTURE)) { TRACE("[FAILED] - Texture format not supported.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4171,7 +3837,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad if (usage & WINED3DUSAGE_QUERY_FILTER) { - if (!CheckFilterCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_FILTERING)) { TRACE("[FAILED] - No filter support.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4181,7 +3847,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad if (usage & WINED3DUSAGE_QUERY_LEGACYBUMPMAP) { - if (!CheckBumpMapCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_BUMPMAP)) { TRACE("[FAILED] - No legacy bumpmap support.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4191,7 +3857,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad if (usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) { - if (!CheckPostPixelShaderBlendingCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING)) { TRACE("[FAILED] - No post pixelshader blending support.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4201,7 +3867,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad if (usage & WINED3DUSAGE_QUERY_SRGBREAD) { - if (!CheckSrgbReadCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_SRGB_READ)) { TRACE("[FAILED] - No sRGB read support.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4211,7 +3877,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad if (usage & WINED3DUSAGE_QUERY_SRGBWRITE) { - if (!CheckSrgbWriteCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_SRGB_WRITE)) { TRACE("[FAILED] - No sRGB write support.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4221,7 +3887,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad if (usage & WINED3DUSAGE_QUERY_VERTEXTEXTURE) { - if (!CheckVertexTextureCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_VTF)) { TRACE("[FAILED] - No vertex texture support.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4230,14 +3896,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad } if (usage & WINED3DUSAGE_QUERY_WRAPANDMIP) - { - if (!CheckWrapAndMipCapability(adapter, format)) - { - TRACE("[FAILED] - No wrapping and mipmapping support.\n"); - return WINED3DERR_NOTAVAILABLE; - } usage_caps |= WINED3DUSAGE_QUERY_WRAPANDMIP; - } if (usage & WINED3DUSAGE_DEPTHSTENCIL) { @@ -4267,7 +3926,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad * - D3DUSAGE_SOFTWAREPROCESSING * - D3DUSAGE_QUERY_WRAPANDMIP */ - if (surface_type != WINED3D_SURFACE_TYPE_OPENGL) + if (wined3d->flags & WINED3D_NO3D) { TRACE("[FAILED]\n"); return WINED3DERR_NOTAVAILABLE; @@ -4279,7 +3938,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad return WINED3DERR_NOTAVAILABLE; } - if (!CheckTextureCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_TEXTURE)) { TRACE("[FAILED] - Format not supported.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4349,7 +4008,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad if (usage & WINED3DUSAGE_QUERY_FILTER) { - if (!CheckFilterCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_FILTERING)) { TRACE("[FAILED] - No filter support.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4359,7 +4018,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad if (usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) { - if (!CheckPostPixelShaderBlendingCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING)) { TRACE("[FAILED] - No post pixelshader blending support.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4369,7 +4028,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad if (usage & WINED3DUSAGE_QUERY_SRGBREAD) { - if (!CheckSrgbReadCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_SRGB_READ)) { TRACE("[FAILED] - No sRGB read support.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4379,7 +4038,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad if (usage & WINED3DUSAGE_QUERY_SRGBWRITE) { - if (!CheckSrgbWriteCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_SRGB_WRITE)) { TRACE("[FAILED] - No sRGB write support.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4389,7 +4048,7 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad if (usage & WINED3DUSAGE_QUERY_VERTEXTEXTURE) { - if (!CheckVertexTextureCapability(adapter, format)) + if (!(format->flags & WINED3DFMT_FLAG_VTF)) { TRACE("[FAILED] - No vertex texture support.\n"); return WINED3DERR_NOTAVAILABLE; @@ -4398,14 +4057,8 @@ HRESULT CDECL wined3d_check_device_format(const struct wined3d *wined3d, UINT ad } if (usage & WINED3DUSAGE_QUERY_WRAPANDMIP) - { - if (!CheckWrapAndMipCapability(adapter, format)) - { - TRACE("[FAILED] - No wrapping and mipmapping support.\n"); - return WINED3DERR_NOTAVAILABLE; - } usage_caps |= WINED3DUSAGE_QUERY_WRAPANDMIP; - } + break; default: @@ -4530,7 +4183,7 @@ HRESULT CDECL wined3d_check_device_type(const struct wined3d *wined3d, UINT adap /* Use CheckDeviceFormat to see if the backbuffer_format is usable with the given display_format */ hr = wined3d_check_device_format(wined3d, adapter_idx, device_type, display_format, - WINED3DUSAGE_RENDERTARGET, WINED3D_RTYPE_SURFACE, backbuffer_format, WINED3D_SURFACE_TYPE_OPENGL); + WINED3DUSAGE_RENDERTARGET, WINED3D_RTYPE_SURFACE, backbuffer_format); if (FAILED(hr)) TRACE("Unsupported display/backbuffer format combination %s / %s.\n", debug_d3dformat(display_format), debug_d3dformat(backbuffer_format)); @@ -4543,8 +4196,6 @@ HRESULT CDECL wined3d_get_device_caps(const struct wined3d *wined3d, UINT adapte { const struct wined3d_adapter *adapter = &wined3d->adapters[adapter_idx]; const struct wined3d_gl_info *gl_info = &adapter->gl_info; - int vs_selected_mode; - int ps_selected_mode; struct shader_caps shader_caps; struct fragment_caps fragment_caps; DWORD ckey_caps, blit_caps, fx_caps, pal_caps; @@ -4555,12 +4206,6 @@ HRESULT CDECL wined3d_get_device_caps(const struct wined3d *wined3d, UINT adapte if (adapter_idx >= wined3d->adapter_count) return WINED3DERR_INVALIDCALL; - select_shader_mode(&adapter->gl_info, &ps_selected_mode, &vs_selected_mode); - - /* ------------------------------------------------ - The following fields apply to both d3d8 and d3d9 - ------------------------------------------------ */ - /* Not quite true, but use h/w supported by opengl I suppose */ caps->DeviceType = (device_type == WINED3D_DEVICE_TYPE_HAL) ? WINED3D_DEVICE_TYPE_HAL : WINED3D_DEVICE_TYPE_REF; caps->AdapterOrdinal = adapter_idx; @@ -4594,8 +4239,7 @@ HRESULT CDECL wined3d_get_device_caps(const struct wined3d *wined3d, UINT adapte WINED3DDEVCAPS_TEXTURESYSTEMMEMORY | WINED3DDEVCAPS_CANRENDERAFTERFLIP | WINED3DDEVCAPS_DRAWPRIMITIVES2 | - WINED3DDEVCAPS_DRAWPRIMITIVES2EX | - WINED3DDEVCAPS_RTPATCHES; + WINED3DDEVCAPS_DRAWPRIMITIVES2EX; caps->PrimitiveMiscCaps = WINED3DPMISCCAPS_CULLNONE | WINED3DPMISCCAPS_CULLCCW | @@ -4944,30 +4588,11 @@ HRESULT CDECL wined3d_get_device_caps(const struct wined3d *wined3d, UINT adapte /* Add shader misc caps. Only some of them belong to the shader parts of the pipeline */ caps->PrimitiveMiscCaps |= fragment_caps.PrimitiveMiscCaps; - /* This takes care for disabling vertex shader or pixel shader caps while leaving the other one enabled. - * Ignore shader model capabilities if disabled in config - */ - if (vs_selected_mode == SHADER_NONE) - { - TRACE("Vertex shader disabled in config, reporting version 0.0.\n"); - caps->VertexShaderVersion = 0; - caps->MaxVertexShaderConst = 0; - } - else - { - caps->VertexShaderVersion = shader_caps.VertexShaderVersion; - caps->MaxVertexShaderConst = shader_caps.MaxVertexShaderConst; - } + caps->VertexShaderVersion = shader_caps.vs_version; + caps->MaxVertexShaderConst = shader_caps.vs_uniform_count; - if (ps_selected_mode == SHADER_NONE) - { - TRACE("Pixel shader disabled in config, reporting version 0.0.\n"); - caps->PixelShaderVersion = 0; - caps->PixelShader1xMaxValue = 0.0f; - } else { - caps->PixelShaderVersion = shader_caps.PixelShaderVersion; - caps->PixelShader1xMaxValue = shader_caps.PixelShader1xMaxValue; - } + caps->PixelShaderVersion = shader_caps.ps_version; + caps->PixelShader1xMaxValue = shader_caps.ps_1x_max_value; caps->TextureOpCaps = fragment_caps.TextureOpCaps; caps->MaxTextureBlendStages = fragment_caps.MaxTextureBlendStages; @@ -5152,8 +4777,7 @@ HRESULT CDECL wined3d_get_device_caps(const struct wined3d *wined3d, UINT adapte WINEDDSCAPS_VISIBLE; caps->ddraw_caps.stride_align = DDRAW_PITCH_ALIGNMENT; - /* Set D3D caps if OpenGL is available. */ - if (adapter->opengl) + if (!(wined3d->flags & WINED3D_NO3D)) { caps->ddraw_caps.dds_caps |= WINEDDSCAPS_3DDEVICE | WINEDDSCAPS_MIPMAP | @@ -5182,10 +4806,7 @@ HRESULT CDECL wined3d_device_create(struct wined3d *wined3d, UINT adapter_idx, e object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate device memory.\n"); return E_OUTOFMEMORY; - } hr = device_init(object, wined3d, adapter_idx, device_type, focus_window, flags, surface_alignment, device_parent); @@ -5390,46 +5011,163 @@ static void fillGLAttribFuncs(const struct wined3d_gl_info *gl_info) } } -/* Do not call while under the GL lock. */ -static BOOL InitAdapters(struct wined3d *wined3d) +static void wined3d_adapter_init_fb_cfgs(struct wined3d_adapter *adapter, HDC dc) { - struct wined3d_adapter *adapter = &wined3d->adapters[0]; - struct wined3d_gl_info *gl_info = &adapter->gl_info; - static HMODULE mod_gl; - BOOL ret; - int ps_selected_mode, vs_selected_mode; + const struct wined3d_gl_info *gl_info = &adapter->gl_info; + unsigned int i; - /* No need to hold any lock. The calling library makes sure only one thread calls - * wined3d simultaneously - */ + if (gl_info->supported[WGL_ARB_PIXEL_FORMAT]) + { + UINT attrib_count = 0; + GLint cfg_count; + int attribs[11]; + int values[11]; + int attribute; - TRACE("Initializing adapters\n"); + attribute = WGL_NUMBER_PIXEL_FORMATS_ARB; + GL_EXTCALL(wglGetPixelFormatAttribivARB(dc, 0, 0, 1, &attribute, &cfg_count)); - if(!mod_gl) { - mod_gl = LoadLibraryA("opengl32.dll"); - if(!mod_gl) { - ERR("Can't load opengl32.dll!\n"); - goto nogl_adapter; + adapter->cfgs = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cfg_count * sizeof(*adapter->cfgs)); + attribs[attrib_count++] = WGL_RED_BITS_ARB; + attribs[attrib_count++] = WGL_GREEN_BITS_ARB; + attribs[attrib_count++] = WGL_BLUE_BITS_ARB; + attribs[attrib_count++] = WGL_ALPHA_BITS_ARB; + attribs[attrib_count++] = WGL_COLOR_BITS_ARB; + attribs[attrib_count++] = WGL_DEPTH_BITS_ARB; + attribs[attrib_count++] = WGL_STENCIL_BITS_ARB; + attribs[attrib_count++] = WGL_DRAW_TO_WINDOW_ARB; + attribs[attrib_count++] = WGL_PIXEL_TYPE_ARB; + attribs[attrib_count++] = WGL_DOUBLE_BUFFER_ARB; + attribs[attrib_count++] = WGL_AUX_BUFFERS_ARB; + + for (i = 0, adapter->cfg_count = 0; i < cfg_count; ++i) + { + struct wined3d_pixel_format *cfg = &adapter->cfgs[adapter->cfg_count]; + int format_id = i + 1; + + if (!GL_EXTCALL(wglGetPixelFormatAttribivARB(dc, format_id, 0, attrib_count, attribs, values))) + continue; + + cfg->iPixelFormat = format_id; + cfg->redSize = values[0]; + cfg->greenSize = values[1]; + cfg->blueSize = values[2]; + cfg->alphaSize = values[3]; + cfg->colorSize = values[4]; + cfg->depthSize = values[5]; + cfg->stencilSize = values[6]; + cfg->windowDrawable = values[7]; + cfg->iPixelType = values[8]; + cfg->doubleBuffer = values[9]; + cfg->auxBuffers = values[10]; + + cfg->numSamples = 0; + /* Check multisample support. */ + if (gl_info->supported[ARB_MULTISAMPLE]) + { + int attribs[2] = {WGL_SAMPLE_BUFFERS_ARB, WGL_SAMPLES_ARB}; + int values[2]; + + if (GL_EXTCALL(wglGetPixelFormatAttribivARB(dc, format_id, 0, 2, attribs, values))) + { + /* values[0] = WGL_SAMPLE_BUFFERS_ARB which tells whether + * multisampling is supported. values[1] = number of + * multisample buffers. */ + if (values[0]) + cfg->numSamples = values[1]; + } + } + + TRACE("iPixelFormat=%d, iPixelType=%#x, doubleBuffer=%d, RGBA=%d/%d/%d/%d, " + "depth=%d, stencil=%d, samples=%d, windowDrawable=%d\n", + cfg->iPixelFormat, cfg->iPixelType, cfg->doubleBuffer, + cfg->redSize, cfg->greenSize, cfg->blueSize, cfg->alphaSize, + cfg->depthSize, cfg->stencilSize, cfg->numSamples, cfg->windowDrawable); + + ++adapter->cfg_count; } } + else + { + int cfg_count; -/* Load WGL core functions from opengl32.dll */ -#define USE_WGL_FUNC(pfn) p##pfn = (void*)GetProcAddress(mod_gl, #pfn); - WGL_FUNCS_GEN; -#undef USE_WGL_FUNC + cfg_count = DescribePixelFormat(dc, 0, 0, 0); + adapter->cfgs = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cfg_count * sizeof(*adapter->cfgs)); + + for (i = 0, adapter->cfg_count = 0; i < cfg_count; ++i) + { + struct wined3d_pixel_format *cfg = &adapter->cfgs[adapter->cfg_count]; + PIXELFORMATDESCRIPTOR pfd; + int format_id = i + 1; + + if (!DescribePixelFormat(dc, format_id, sizeof(pfd), &pfd)) + continue; + + /* We only want HW acceleration using an OpenGL ICD driver. + * PFD_GENERIC_FORMAT = slow opengl 1.1 gdi software rendering. + * PFD_GENERIC_ACCELERATED = partial hw acceleration using a MCD + * driver (e.g. 3dfx minigl). */ + if (pfd.dwFlags & (PFD_GENERIC_FORMAT | PFD_GENERIC_ACCELERATED)) + { + TRACE("Skipping format %d because it isn't ICD accelerated.\n", format_id); + continue; + } + + cfg->iPixelFormat = format_id; + cfg->redSize = pfd.cRedBits; + cfg->greenSize = pfd.cGreenBits; + cfg->blueSize = pfd.cBlueBits; + cfg->alphaSize = pfd.cAlphaBits; + cfg->colorSize = pfd.cColorBits; + cfg->depthSize = pfd.cDepthBits; + cfg->stencilSize = pfd.cStencilBits; + cfg->windowDrawable = (pfd.dwFlags & PFD_DRAW_TO_WINDOW) ? 1 : 0; + cfg->iPixelType = (pfd.iPixelType == PFD_TYPE_RGBA) ? WGL_TYPE_RGBA_ARB : WGL_TYPE_COLORINDEX_ARB; + cfg->doubleBuffer = (pfd.dwFlags & PFD_DOUBLEBUFFER) ? 1 : 0; + cfg->auxBuffers = pfd.cAuxBuffers; + cfg->numSamples = 0; + + TRACE("iPixelFormat=%d, iPixelType=%#x, doubleBuffer=%d, RGBA=%d/%d/%d/%d, " + "depth=%d, stencil=%d, windowDrawable=%d\n", + cfg->iPixelFormat, cfg->iPixelType, cfg->doubleBuffer, + cfg->redSize, cfg->greenSize, cfg->blueSize, cfg->alphaSize, + cfg->depthSize, cfg->stencilSize, cfg->windowDrawable); + + ++adapter->cfg_count; + } + } +} + +/* Do not call while under the GL lock. */ +static BOOL wined3d_adapter_init(struct wined3d_adapter *adapter, UINT ordinal) +{ + struct wined3d_gl_info *gl_info = &adapter->gl_info; + struct wined3d_fake_gl_ctx fake_gl_ctx = {0}; + DISPLAY_DEVICEW display_device; + + TRACE("adapter %p, ordinal %u.\n", adapter, ordinal); + + adapter->ordinal = ordinal; + adapter->monitorPoint.x = -1; + adapter->monitorPoint.y = -1; /* Dynamically load all GL core functions */ #ifdef USE_WIN32_OPENGL + { + HMODULE mod_gl = GetModuleHandleA("opengl32.dll"); #define USE_GL_FUNC(f) gl_info->gl_ops.gl.p_##f = (void *)GetProcAddress(mod_gl, #f); - ALL_WGL_FUNCS + ALL_WGL_FUNCS #undef USE_GL_FUNC + gl_info->gl_ops.wgl.p_wglSwapBuffers = (void *)GetProcAddress(mod_gl, "wglSwapBuffers"); + } #else /* To bypass the opengl32 thunks retrieve functions from the WGL driver instead of opengl32 */ { HDC hdc = GetDC( 0 ); const struct opengl_funcs *wgl_driver = __wine_get_wgl_driver( hdc, WINE_WGL_DRIVER_VERSION ); ReleaseDC( 0, hdc ); - if (!wgl_driver || wgl_driver == (void *)-1) goto nogl_adapter; + if (!wgl_driver || wgl_driver == (void *)-1) return FALSE; + gl_info->gl_ops.wgl = wgl_driver->wgl; gl_info->gl_ops.gl = wgl_driver->gl; } #endif @@ -5437,220 +5175,81 @@ static BOOL InitAdapters(struct wined3d *wined3d) glEnableWINE = gl_info->gl_ops.gl.p_glEnable; glDisableWINE = gl_info->gl_ops.gl.p_glDisable; - /* For now only one default adapter */ + if (!AllocateLocallyUniqueId(&adapter->luid)) { - struct wined3d_fake_gl_ctx fake_gl_ctx = {0}; - struct wined3d_pixel_format *cfgs; - int iPixelFormat; - int res; - DISPLAY_DEVICEW DisplayDevice; - HDC hdc; - - TRACE("Initializing default adapter\n"); - adapter->ordinal = 0; - adapter->monitorPoint.x = -1; - adapter->monitorPoint.y = -1; - - if (!AllocateLocallyUniqueId(&adapter->luid)) - { - DWORD err = GetLastError(); - ERR("Failed to set adapter LUID (%#x).\n", err); - goto nogl_adapter; - } - TRACE("Allocated LUID %08x:%08x for adapter.\n", - adapter->luid.HighPart, adapter->luid.LowPart); - - if (!WineD3D_CreateFakeGLContext(&fake_gl_ctx)) - { - ERR("Failed to get a gl context for default adapter\n"); - goto nogl_adapter; - } - - ret = wined3d_adapter_init_gl_caps(adapter); - if(!ret) { - ERR("Failed to initialize gl caps for default adapter\n"); - WineD3D_ReleaseFakeGLContext(&fake_gl_ctx); - goto nogl_adapter; - } - ret = initPixelFormats(&adapter->gl_info, adapter->driver_info.vendor); - if(!ret) { - ERR("Failed to init gl formats\n"); - WineD3D_ReleaseFakeGLContext(&fake_gl_ctx); - goto nogl_adapter; - } - - hdc = fake_gl_ctx.dc; - - adapter->TextureRam = adapter->driver_info.vidmem; - adapter->UsedTextureRam = 0; - TRACE("Emulating %dMB of texture ram\n", adapter->TextureRam/(1024*1024)); - - /* Initialize the Adapter's DeviceName which is required for ChangeDisplaySettings and friends */ - DisplayDevice.cb = sizeof(DisplayDevice); - EnumDisplayDevicesW(NULL, 0 /* Adapter 0 = iDevNum 0 */, &DisplayDevice, 0); - TRACE("DeviceName: %s\n", debugstr_w(DisplayDevice.DeviceName)); - strcpyW(adapter->DeviceName, DisplayDevice.DeviceName); - - if (gl_info->supported[WGL_ARB_PIXEL_FORMAT]) - { - GLint cfg_count; - int attribute; - int attribs[11]; - int values[11]; - int nAttribs = 0; - - attribute = WGL_NUMBER_PIXEL_FORMATS_ARB; - GL_EXTCALL(wglGetPixelFormatAttribivARB(hdc, 0, 0, 1, &attribute, &cfg_count)); - adapter->cfg_count = cfg_count; - - adapter->cfgs = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, adapter->cfg_count * sizeof(*adapter->cfgs)); - cfgs = adapter->cfgs; - attribs[nAttribs++] = WGL_RED_BITS_ARB; - attribs[nAttribs++] = WGL_GREEN_BITS_ARB; - attribs[nAttribs++] = WGL_BLUE_BITS_ARB; - attribs[nAttribs++] = WGL_ALPHA_BITS_ARB; - attribs[nAttribs++] = WGL_COLOR_BITS_ARB; - attribs[nAttribs++] = WGL_DEPTH_BITS_ARB; - attribs[nAttribs++] = WGL_STENCIL_BITS_ARB; - attribs[nAttribs++] = WGL_DRAW_TO_WINDOW_ARB; - attribs[nAttribs++] = WGL_PIXEL_TYPE_ARB; - attribs[nAttribs++] = WGL_DOUBLE_BUFFER_ARB; - attribs[nAttribs++] = WGL_AUX_BUFFERS_ARB; - - for (iPixelFormat=1; iPixelFormat <= adapter->cfg_count; ++iPixelFormat) - { - res = GL_EXTCALL(wglGetPixelFormatAttribivARB(hdc, iPixelFormat, 0, nAttribs, attribs, values)); - - if(!res) - continue; - - /* Cache the pixel format */ - cfgs->iPixelFormat = iPixelFormat; - cfgs->redSize = values[0]; - cfgs->greenSize = values[1]; - cfgs->blueSize = values[2]; - cfgs->alphaSize = values[3]; - cfgs->colorSize = values[4]; - cfgs->depthSize = values[5]; - cfgs->stencilSize = values[6]; - cfgs->windowDrawable = values[7]; - cfgs->iPixelType = values[8]; - cfgs->doubleBuffer = values[9]; - cfgs->auxBuffers = values[10]; - - cfgs->numSamples = 0; - /* Check multisample support */ - if (gl_info->supported[ARB_MULTISAMPLE]) - { - int attrib[2] = {WGL_SAMPLE_BUFFERS_ARB, WGL_SAMPLES_ARB}; - int value[2]; - if(GL_EXTCALL(wglGetPixelFormatAttribivARB(hdc, iPixelFormat, 0, 2, attrib, value))) { - /* value[0] = WGL_SAMPLE_BUFFERS_ARB which tells whether multisampling is supported. - * value[1] = number of multi sample buffers*/ - if(value[0]) - cfgs->numSamples = value[1]; - } - } - - TRACE("iPixelFormat=%d, iPixelType=%#x, doubleBuffer=%d, RGBA=%d/%d/%d/%d, " - "depth=%d, stencil=%d, samples=%d, windowDrawable=%d\n", - cfgs->iPixelFormat, cfgs->iPixelType, cfgs->doubleBuffer, - cfgs->redSize, cfgs->greenSize, cfgs->blueSize, cfgs->alphaSize, - cfgs->depthSize, cfgs->stencilSize, cfgs->numSamples, cfgs->windowDrawable); - cfgs++; - } - } - else - { - int nCfgs = DescribePixelFormat(hdc, 0, 0, 0); - adapter->cfgs = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, nCfgs * sizeof(*adapter->cfgs)); - adapter->cfg_count = 0; /* We won't accept all formats e.g. software accelerated ones will be skipped */ - - cfgs = adapter->cfgs; - for(iPixelFormat=1; iPixelFormat<=nCfgs; iPixelFormat++) - { - PIXELFORMATDESCRIPTOR ppfd; - - res = DescribePixelFormat(hdc, iPixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &ppfd); - if(!res) - continue; - - /* We only want HW acceleration using an OpenGL ICD driver. - * PFD_GENERIC_FORMAT = slow opengl 1.1 gdi software rendering - * PFD_GENERIC_ACCELERATED = partial hw acceleration using a MCD driver (e.g. 3dfx minigl) - */ - if(ppfd.dwFlags & (PFD_GENERIC_FORMAT | PFD_GENERIC_ACCELERATED)) - { - TRACE("Skipping iPixelFormat=%d because it isn't ICD accelerated\n", iPixelFormat); - continue; - } - - cfgs->iPixelFormat = iPixelFormat; - cfgs->redSize = ppfd.cRedBits; - cfgs->greenSize = ppfd.cGreenBits; - cfgs->blueSize = ppfd.cBlueBits; - cfgs->alphaSize = ppfd.cAlphaBits; - cfgs->colorSize = ppfd.cColorBits; - cfgs->depthSize = ppfd.cDepthBits; - cfgs->stencilSize = ppfd.cStencilBits; - cfgs->windowDrawable = (ppfd.dwFlags & PFD_DRAW_TO_WINDOW) ? 1 : 0; - cfgs->iPixelType = (ppfd.iPixelType == PFD_TYPE_RGBA) ? WGL_TYPE_RGBA_ARB : WGL_TYPE_COLORINDEX_ARB; - cfgs->doubleBuffer = (ppfd.dwFlags & PFD_DOUBLEBUFFER) ? 1 : 0; - cfgs->auxBuffers = ppfd.cAuxBuffers; - cfgs->numSamples = 0; - - TRACE("iPixelFormat=%d, iPixelType=%#x, doubleBuffer=%d, RGBA=%d/%d/%d/%d, " - "depth=%d, stencil=%d, windowDrawable=%d\n", - cfgs->iPixelFormat, cfgs->iPixelType, cfgs->doubleBuffer, - cfgs->redSize, cfgs->greenSize, cfgs->blueSize, cfgs->alphaSize, - cfgs->depthSize, cfgs->stencilSize, cfgs->windowDrawable); - cfgs++; - adapter->cfg_count++; - } - - /* We haven't found any suitable formats. This should only happen - * in case of GDI software rendering, which is pretty useless - * anyway. */ - if (!adapter->cfg_count) - { - ERR("Disabling Direct3D because no hardware accelerated pixel formats have been found!\n"); - - WineD3D_ReleaseFakeGLContext(&fake_gl_ctx); - HeapFree(GetProcessHeap(), 0, adapter->cfgs); - goto nogl_adapter; - } - } - - WineD3D_ReleaseFakeGLContext(&fake_gl_ctx); - - select_shader_mode(&adapter->gl_info, &ps_selected_mode, &vs_selected_mode); - fillGLAttribFuncs(&adapter->gl_info); - adapter->opengl = TRUE; + ERR("Failed to set adapter LUID (%#x).\n", GetLastError()); + return FALSE; } - wined3d->adapter_count = 1; - TRACE("%u adapters successfully initialized.\n", wined3d->adapter_count); + TRACE("Allocated LUID %08x:%08x for adapter %p.\n", + adapter->luid.HighPart, adapter->luid.LowPart, adapter); + + if (!WineD3D_CreateFakeGLContext(&fake_gl_ctx)) + { + ERR("Failed to get a GL context for adapter %p.\n", adapter); + return FALSE; + } + + if (!wined3d_adapter_init_gl_caps(adapter)) + { + ERR("Failed to initialize GL caps for adapter %p.\n", adapter); + WineD3D_ReleaseFakeGLContext(&fake_gl_ctx); + return FALSE; + } + + wined3d_adapter_init_fb_cfgs(adapter, fake_gl_ctx.dc); + /* We haven't found any suitable formats. This should only happen in + * case of GDI software rendering, which is pretty useless anyway. */ + if (!adapter->cfg_count) + { + WARN("No suitable pixel formats found.\n"); + WineD3D_ReleaseFakeGLContext(&fake_gl_ctx); + HeapFree(GetProcessHeap(), 0, adapter->cfgs); + return FALSE; + } + + if (!wined3d_adapter_init_format_info(adapter)) + { + ERR("Failed to initialize GL format info.\n"); + WineD3D_ReleaseFakeGLContext(&fake_gl_ctx); + HeapFree(GetProcessHeap(), 0, adapter->cfgs); + return FALSE; + } + + adapter->TextureRam = adapter->driver_info.vidmem; + adapter->UsedTextureRam = 0; + TRACE("Emulating %u MB of texture ram.\n", adapter->TextureRam / (1024 * 1024)); + + display_device.cb = sizeof(display_device); + EnumDisplayDevicesW(NULL, ordinal, &display_device, 0); + TRACE("DeviceName: %s\n", debugstr_w(display_device.DeviceName)); + strcpyW(adapter->DeviceName, display_device.DeviceName); + + WineD3D_ReleaseFakeGLContext(&fake_gl_ctx); + + fillGLAttribFuncs(&adapter->gl_info); return TRUE; +} -nogl_adapter: - /* Initialize an adapter for ddraw-only memory counting */ - memset(wined3d->adapters, 0, sizeof(wined3d->adapters)); - wined3d->adapters[0].ordinal = 0; - wined3d->adapters[0].opengl = FALSE; - wined3d->adapters[0].monitorPoint.x = -1; - wined3d->adapters[0].monitorPoint.y = -1; +static void wined3d_adapter_init_nogl(struct wined3d_adapter *adapter, UINT ordinal) +{ + memset(adapter, 0, sizeof(*adapter)); + adapter->ordinal = ordinal; + adapter->monitorPoint.x = -1; + adapter->monitorPoint.y = -1; - wined3d->adapters[0].driver_info.name = "Display"; - wined3d->adapters[0].driver_info.description = "WineD3D DirectDraw Emulation"; + adapter->driver_info.name = "Display"; + adapter->driver_info.description = "WineD3D DirectDraw Emulation"; if (wined3d_settings.emulated_textureram) - wined3d->adapters[0].TextureRam = wined3d_settings.emulated_textureram; + adapter->TextureRam = wined3d_settings.emulated_textureram; else - wined3d->adapters[0].TextureRam = 8 * 1024 * 1024; /* This is plenty for a DDraw-only card */ + adapter->TextureRam = 128 * 1024 * 1024; - initPixelFormatsNoGL(&wined3d->adapters[0].gl_info); + initPixelFormatsNoGL(&adapter->gl_info); - wined3d->adapter_count = 1; - return FALSE; + adapter->fragment_pipe = &none_fragment_pipe; + adapter->shader_backend = &none_shader_backend; + adapter->blitter = &cpu_blit; } static void STDMETHODCALLTYPE wined3d_null_wined3d_object_destroyed(void *parent) {} @@ -5667,15 +5266,21 @@ HRESULT wined3d_init(struct wined3d *wined3d, UINT version, DWORD flags) wined3d->ref = 1; wined3d->flags = flags; - if (!InitAdapters(wined3d)) + TRACE("Initializing adapters.\n"); + + if (flags & WINED3D_NO3D) { - WARN("Failed to initialize adapters.\n"); - if (version > 7) - { - MESSAGE("Direct3D%u is not available without OpenGL.\n", version); - return E_FAIL; - } + wined3d_adapter_init_nogl(&wined3d->adapters[0], 0); + wined3d->adapter_count = 1; + return WINED3D_OK; } + if (!wined3d_adapter_init(&wined3d->adapters[0], 0)) + { + WARN("Failed to initialize adapter.\n"); + return E_FAIL; + } + wined3d->adapter_count = 1; + return WINED3D_OK; } diff --git a/dll/directx/wine/wined3d/drawprim.c b/dll/directx/wine/wined3d/drawprim.c index 69625ffef7c..1859b9943e1 100644 --- a/dll/directx/wine/wined3d/drawprim.c +++ b/dll/directx/wine/wined3d/drawprim.c @@ -34,14 +34,29 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d_draw); //#include //#include -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void drawStridedFast(const struct wined3d_gl_info *gl_info, GLenum primitive_type, UINT count, UINT idx_size, - const void *idx_data, UINT start_idx, INT base_vertex_index) + const void *idx_data, UINT start_idx, INT base_vertex_index, UINT start_instance, UINT instance_count) { if (idx_size) { GLenum idxtype = idx_size == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT; - if (gl_info->supported[ARB_DRAW_ELEMENTS_BASE_VERTEX]) + if (instance_count) + { + if (!gl_info->supported[ARB_DRAW_INSTANCED]) + { + FIXME("Instanced drawing not supported.\n"); + } + else + { + if (start_instance) + FIXME("Start instance (%u) not supported.\n", start_instance); + GL_EXTCALL(glDrawElementsInstancedBaseVertex(primitive_type, count, idxtype, + (const char *)idx_data + (idx_size * start_idx), instance_count, base_vertex_index)); + checkGLcall("glDrawElementsInstancedBaseVertex"); + } + } + else if (gl_info->supported[ARB_DRAW_ELEMENTS_BASE_VERTEX]) { GL_EXTCALL(glDrawElementsBaseVertex(primitive_type, count, idxtype, (const char *)idx_data + (idx_size * start_idx), base_vertex_index)); @@ -66,7 +81,7 @@ static void drawStridedFast(const struct wined3d_gl_info *gl_info, GLenum primit * Slower GL version which extracts info about each vertex in turn */ -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void drawStridedSlow(const struct wined3d_device *device, const struct wined3d_context *context, const struct wined3d_stream_info *si, UINT NumVertexes, GLenum glPrimType, const void *idxData, UINT idxSize, UINT startIdx) @@ -310,7 +325,7 @@ static void drawStridedSlow(const struct wined3d_device *device, const struct wi checkGLcall("glEnd and previous calls"); } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static inline void send_attribute(const struct wined3d_gl_info *gl_info, enum wined3d_format_id format, const UINT index, const void *ptr) { @@ -420,7 +435,7 @@ static inline void send_attribute(const struct wined3d_gl_info *gl_info, } } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void drawStridedSlowVs(const struct wined3d_gl_info *gl_info, const struct wined3d_state *state, const struct wined3d_stream_info *si, UINT numberOfVertices, GLenum glPrimitiveType, const void *idxData, UINT idxSize, UINT startIdx) @@ -476,15 +491,15 @@ static void drawStridedSlowVs(const struct wined3d_gl_info *gl_info, const struc gl_info->gl_ops.gl.p_glEnd(); } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void drawStridedInstanced(const struct wined3d_gl_info *gl_info, const struct wined3d_state *state, const struct wined3d_stream_info *si, UINT numberOfVertices, GLenum glPrimitiveType, - const void *idxData, UINT idxSize, UINT startIdx, UINT base_vertex_index) + const void *idxData, UINT idxSize, UINT startIdx, UINT base_vertex_index, UINT instance_count) { - UINT numInstances = 0, i; int numInstancedAttribs = 0, j; UINT instancedData[sizeof(si->elements) / sizeof(*si->elements) /* 16 */]; GLenum idxtype = idxSize == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT; + UINT i; if (!idxSize) { @@ -498,22 +513,6 @@ static void drawStridedInstanced(const struct wined3d_gl_info *gl_info, const st return; } - /* First, figure out how many instances we have to draw */ - for (i = 0; i < MAX_STREAMS; ++i) - { - /* Look at the streams and take the first one which matches */ - if (state->streams[i].buffer - && ((state->streams[i].flags & WINED3DSTREAMSOURCE_INSTANCEDATA) - || (state->streams[i].flags & WINED3DSTREAMSOURCE_INDEXEDDATA))) - { - /* Use the specified number of instances from the first matched - * stream. A streamFreq of 0 (with INSTANCEDATA or INDEXEDDATA) - * is handled as 1. See d3d9/tests/visual.c-> stream_test(). */ - numInstances = state->streams[i].frequency ? state->streams[i].frequency : 1; - break; - } - } - for (i = 0; i < sizeof(si->elements) / sizeof(*si->elements); ++i) { if (!(si->use_map & (1 << i))) continue; @@ -525,8 +524,8 @@ static void drawStridedInstanced(const struct wined3d_gl_info *gl_info, const st } } - /* now draw numInstances instances :-) */ - for(i = 0; i < numInstances; i++) { + for (i = 0; i < instance_count; ++i) + { /* Specify the instanced attributes using immediate mode calls */ for(j = 0; j < numInstancedAttribs; j++) { const BYTE *ptr = si->elements[instancedData[j]].data.addr @@ -577,11 +576,17 @@ static void remove_vbos(const struct wined3d_gl_info *gl_info, } /* Routine common to the draw primitive and draw indexed primitive routines */ -void drawPrimitive(struct wined3d_device *device, UINT index_count, UINT StartIdx, BOOL indexed, const void *idxData) +void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_count, + UINT start_instance, UINT instance_count, BOOL indexed, const void *idx_data) { const struct wined3d_state *state = &device->stateBlock->state; + const struct wined3d_stream_info *stream_info; + struct wined3d_event_query *ib_query = NULL; + struct wined3d_stream_info si_emulated; const struct wined3d_gl_info *gl_info; struct wined3d_context *context; + BOOL emulation = FALSE; + UINT idx_size = 0; unsigned int i; if (!index_count) return; @@ -665,106 +670,98 @@ void drawPrimitive(struct wined3d_device *device, UINT index_count, UINT StartId FIXME("Point sprite coordinate origin switching not supported.\n"); } - /* Ok, we will be updating the screen from here onwards so grab the lock */ - ENTER_GL(); + stream_info = &device->strided_streams; + if (device->instance_count) + instance_count = device->instance_count; + + if (indexed) { - GLenum glPrimType = state->gl_primitive_type; - INT base_vertex_index = state->base_vertex_index; - BOOL emulation = FALSE; - const struct wined3d_stream_info *stream_info = &device->strided_streams; - struct wined3d_stream_info stridedlcl; - UINT idx_size = 0; - - if (indexed) - { - if (!state->user_stream) - { - struct wined3d_buffer *index_buffer = state->index_buffer; - if (!index_buffer->buffer_object || !stream_info->all_vbo) - idxData = index_buffer->resource.allocatedMemory; - else - idxData = NULL; - } - - if (state->index_format == WINED3DFMT_R16_UINT) - idx_size = 2; - else - idx_size = 4; - } - - if (!use_vs(state)) - { - if (!stream_info->position_transformed && context->num_untracked_materials - && state->render_states[WINED3D_RS_LIGHTING]) - { - static BOOL warned; - if (!warned) { - FIXME("Using software emulation because not all material properties could be tracked\n"); - warned = TRUE; - } else { - TRACE("Using software emulation because not all material properties could be tracked\n"); - } - emulation = TRUE; - } - else if (context->fog_coord && state->render_states[WINED3D_RS_FOGENABLE]) - { - /* Either write a pipeline replacement shader or convert the specular alpha from unsigned byte - * to a float in the vertex buffer - */ - static BOOL warned; - if (!warned) { - FIXME("Using software emulation because manual fog coordinates are provided\n"); - warned = TRUE; - } else { - TRACE("Using software emulation because manual fog coordinates are provided\n"); - } - emulation = TRUE; - } - - if(emulation) { - stream_info = &stridedlcl; - memcpy(&stridedlcl, &device->strided_streams, sizeof(stridedlcl)); - remove_vbos(gl_info, state, &stridedlcl); - } - } - - if (device->useDrawStridedSlow || emulation) - { - /* Immediate mode drawing */ - if (use_vs(state)) - { - static BOOL warned; - if (!warned) { - FIXME("Using immediate mode with vertex shaders for half float emulation\n"); - warned = TRUE; - } else { - TRACE("Using immediate mode with vertex shaders for half float emulation\n"); - } - drawStridedSlowVs(gl_info, state, stream_info, - index_count, glPrimType, idxData, idx_size, StartIdx); - } - else - { - drawStridedSlow(device, context, stream_info, index_count, - glPrimType, idxData, idx_size, StartIdx); - } - } - else if (device->instancedDraw) - { - /* Instancing emulation with mixing immediate mode and arrays */ - drawStridedInstanced(gl_info, state, stream_info, - index_count, glPrimType, idxData, idx_size, StartIdx, base_vertex_index); - } + struct wined3d_buffer *index_buffer = state->index_buffer; + if (!index_buffer->buffer_object || !stream_info->all_vbo) + idx_data = index_buffer->resource.allocatedMemory; else { - drawStridedFast(gl_info, glPrimType, index_count, idx_size, idxData, StartIdx, base_vertex_index); + ib_query = index_buffer->query; + idx_data = NULL; + } + + if (state->index_format == WINED3DFMT_R16_UINT) + idx_size = 2; + else + idx_size = 4; + } + + if (!use_vs(state)) + { + if (!stream_info->position_transformed && context->num_untracked_materials + && state->render_states[WINED3D_RS_LIGHTING]) + { + static BOOL warned; + + if (!warned++) + FIXME("Using software emulation because not all material properties could be tracked.\n"); + else + WARN("Using software emulation because not all material properties could be tracked.\n"); + emulation = TRUE; + } + else if (context->fog_coord && state->render_states[WINED3D_RS_FOGENABLE]) + { + static BOOL warned; + + /* Either write a pipeline replacement shader or convert the + * specular alpha from unsigned byte to a float in the vertex + * buffer. */ + if (!warned++) + FIXME("Using software emulation because manual fog coordinates are provided.\n"); + else + WARN("Using software emulation because manual fog coordinates are provided.\n"); + emulation = TRUE; + } + + if (emulation) + { + si_emulated = device->strided_streams; + remove_vbos(gl_info, state, &si_emulated); + stream_info = &si_emulated; } } - /* Finished updating the screen, restore lock */ - LEAVE_GL(); + if (device->useDrawStridedSlow || emulation) + { + /* Immediate mode drawing. */ + if (use_vs(state)) + { + static BOOL warned; - for(i = 0; i < device->num_buffer_queries; ++i) + if (!warned++) + FIXME("Using immediate mode with vertex shaders for half float emulation.\n"); + else + WARN("Using immediate mode with vertex shaders for half float emulation.\n"); + + drawStridedSlowVs(gl_info, state, stream_info, index_count, + state->gl_primitive_type, idx_data, idx_size, start_idx); + } + else + { + drawStridedSlow(device, context, stream_info, index_count, + state->gl_primitive_type, idx_data, idx_size, start_idx); + } + } + else if (!gl_info->supported[ARB_INSTANCED_ARRAYS] && instance_count) + { + /* Instancing emulation by mixing immediate mode and arrays. */ + drawStridedInstanced(gl_info, state, stream_info, index_count, state->gl_primitive_type, + idx_data, idx_size, start_idx, state->base_vertex_index, instance_count); + } + else + { + drawStridedFast(gl_info, state->gl_primitive_type, index_count, idx_size, idx_data, + start_idx, state->base_vertex_index, start_instance, instance_count); + } + + if (ib_query) + wined3d_event_query_issue(ib_query, device); + for (i = 0; i < device->num_buffer_queries; ++i) { wined3d_event_query_issue(device->buffer_queries[i], device); } @@ -779,404 +776,3 @@ void drawPrimitive(struct wined3d_device *device, UINT index_count, UINT StartId /* Control goes back to the device, stateblock values may change again */ device->isInDraw = FALSE; } - -static void normalize_normal(float *n) { - float length = n[0] * n[0] + n[1] * n[1] + n[2] * n[2]; - if (length == 0.0f) return; - length = sqrtf(length); - n[0] = n[0] / length; - n[1] = n[1] / length; - n[2] = n[2] / length; -} - -/* Tesselates a high order rectangular patch into single triangles using gl evaluators - * - * The problem is that OpenGL does not offer a direct way to return the tesselated primitives, - * and they can't be sent off for rendering directly either. Tesselating is slow, so we want - * to cache the patches in a vertex buffer. But more importantly, gl can't bind generated - * attributes to numbered shader attributes, so we have to store them and rebind them as needed - * in drawprim. - * - * To read back, the opengl feedback mode is used. This creates a problem because we want - * untransformed, unlit vertices, but feedback runs everything through transform and lighting. - * Thus disable lighting and set identity matrices to get unmodified colors and positions. - * To overcome clipping find the biggest x, y and z values of the vertices in the patch and scale - * them to [-1.0;+1.0] and set the viewport up to scale them back. - * - * Normals are more tricky: Draw white vertices with 3 directional lights, and calculate the - * resulting colors back to the normals. - * - * NOTE: This function activates a context for blitting, modifies matrices & viewport, but - * does not restore it because normally a draw follows immediately afterwards. The caller is - * responsible of taking care that either the gl states are restored, or the context activated - * for drawing to reset the lastWasBlit flag. - */ -HRESULT tesselate_rectpatch(struct wined3d_device *This, struct wined3d_rect_patch *patch) -{ - unsigned int i, j, num_quads, out_vertex_size, buffer_size, d3d_out_vertex_size; - const struct wined3d_rect_patch_info *info = &patch->rect_patch_info; - float max_x = 0.0f, max_y = 0.0f, max_z = 0.0f, neg_z = 0.0f; - struct wined3d_state *state = &This->stateBlock->state; - struct wined3d_stream_info stream_info; - struct wined3d_stream_info_element *e; - const struct wined3d_gl_info *gl_info; - struct wined3d_context *context; - struct wined3d_shader *vs; - const BYTE *data; - DWORD vtxStride; - GLenum feedback_type; - GLfloat *feedbuffer; - - /* Simply activate the context for blitting. This disables all the things we don't want and - * takes care of dirtifying. Dirtifying is preferred over pushing / popping, since drawing the - * patch (as opposed to normal draws) will most likely need different changes anyway. */ - context = context_acquire(This, NULL); - gl_info = context->gl_info; - context_apply_blit_state(context, This); - - /* First, locate the position data. This is provided in a vertex buffer in - * the stateblock. Beware of VBOs. */ - vs = state->vertex_shader; - state->vertex_shader = NULL; - device_stream_info_from_declaration(This, &stream_info); - state->vertex_shader = vs; - - e = &stream_info.elements[WINED3D_FFP_POSITION]; - if (e->data.buffer_object) - { - struct wined3d_buffer *vb = state->streams[e->stream_idx].buffer; - e->data.addr = (BYTE *)((ULONG_PTR)e->data.addr + (ULONG_PTR)buffer_get_sysmem(vb, context->gl_info)); - } - vtxStride = e->stride; - data = e->data.addr - + vtxStride * info->stride * info->start_vertex_offset_height - + vtxStride * info->start_vertex_offset_width; - - /* Not entirely sure about what happens with transformed vertices */ - if (stream_info.position_transformed) FIXME("Transformed position in rectpatch generation\n"); - - if(vtxStride % sizeof(GLfloat)) { - /* glMap2f reads vertex sizes in GLfloats, the d3d stride is in bytes. - * I don't see how the stride could not be a multiple of 4, but make sure - * to check it - */ - ERR("Vertex stride is not a multiple of sizeof(GLfloat)\n"); - } - if (info->basis != WINED3D_BASIS_BEZIER) - FIXME("Basis is %s, how to handle this?\n", debug_d3dbasis(info->basis)); - if (info->degree != WINED3D_DEGREE_CUBIC) - FIXME("Degree is %s, how to handle this?\n", debug_d3ddegree(info->degree)); - - /* First, get the boundary cube of the input data */ - for (j = 0; j < info->height; ++j) - { - for (i = 0; i < info->width; ++i) - { - const float *v = (const float *)(data + vtxStride * i + vtxStride * info->stride * j); - if(fabs(v[0]) > max_x) max_x = fabsf(v[0]); - if(fabs(v[1]) > max_y) max_y = fabsf(v[1]); - if(fabs(v[2]) > max_z) max_z = fabsf(v[2]); - if(v[2] < neg_z) neg_z = v[2]; - } - } - - /* This needs some improvements in the vertex decl code */ - FIXME("Cannot find data to generate. Only generating position and normals\n"); - patch->has_normals = TRUE; - patch->has_texcoords = FALSE; - - ENTER_GL(); - - gl_info->gl_ops.gl.p_glMatrixMode(GL_PROJECTION); - checkGLcall("glMatrixMode(GL_PROJECTION)"); - gl_info->gl_ops.gl.p_glLoadIdentity(); - checkGLcall("glLoadIdentity()"); - gl_info->gl_ops.gl.p_glScalef(1.0f / (max_x), 1.0f / (max_y), max_z == 0.0f ? 1.0f : 1.0f / (2.0f * max_z)); - gl_info->gl_ops.gl.p_glTranslatef(0.0f, 0.0f, 0.5f); - checkGLcall("glScalef"); - gl_info->gl_ops.gl.p_glViewport(-max_x, -max_y, 2 * (max_x), 2 * (max_y)); - checkGLcall("glViewport"); - - /* Some states to take care of. If we're in wireframe opengl will produce lines, and confuse - * our feedback buffer parser - */ - gl_info->gl_ops.gl.p_glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - checkGLcall("glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)"); - context_invalidate_state(context, STATE_RENDER(WINED3D_RS_FILLMODE)); - if (patch->has_normals) - { - static const GLfloat black[] = {0.0f, 0.0f, 0.0f, 0.0f}; - static const GLfloat red[] = {1.0f, 0.0f, 0.0f, 0.0f}; - static const GLfloat green[] = {0.0f, 1.0f, 0.0f, 0.0f}; - static const GLfloat blue[] = {0.0f, 0.0f, 1.0f, 0.0f}; - static const GLfloat white[] = {1.0f, 1.0f, 1.0f, 1.0f}; - gl_info->gl_ops.gl.p_glEnable(GL_LIGHTING); - checkGLcall("glEnable(GL_LIGHTING)"); - gl_info->gl_ops.gl.p_glLightModelfv(GL_LIGHT_MODEL_AMBIENT, black); - checkGLcall("glLightModel for MODEL_AMBIENT"); - context_invalidate_state(context, STATE_RENDER(WINED3D_RS_AMBIENT)); - - for (i = 3; i < context->gl_info->limits.lights; ++i) - { - gl_info->gl_ops.gl.p_glDisable(GL_LIGHT0 + i); - checkGLcall("glDisable(GL_LIGHT0 + i)"); - context_invalidate_state(context, STATE_ACTIVELIGHT(i)); - } - - context_invalidate_state(context, STATE_ACTIVELIGHT(0)); - gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT0, GL_DIFFUSE, red); - gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT0, GL_SPECULAR, black); - gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT0, GL_AMBIENT, black); - gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT0, GL_POSITION, red); - gl_info->gl_ops.gl.p_glEnable(GL_LIGHT0); - checkGLcall("Setting up light 1"); - context_invalidate_state(context, STATE_ACTIVELIGHT(1)); - gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT1, GL_DIFFUSE, green); - gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT1, GL_SPECULAR, black); - gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT1, GL_AMBIENT, black); - gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT1, GL_POSITION, green); - gl_info->gl_ops.gl.p_glEnable(GL_LIGHT1); - checkGLcall("Setting up light 2"); - context_invalidate_state(context, STATE_ACTIVELIGHT(2)); - gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT2, GL_DIFFUSE, blue); - gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT2, GL_SPECULAR, black); - gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT2, GL_AMBIENT, black); - gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT2, GL_POSITION, blue); - gl_info->gl_ops.gl.p_glEnable(GL_LIGHT2); - checkGLcall("Setting up light 3"); - - context_invalidate_state(context, STATE_MATERIAL); - context_invalidate_state(context, STATE_RENDER(WINED3D_RS_COLORVERTEX)); - gl_info->gl_ops.gl.p_glDisable(GL_COLOR_MATERIAL); - gl_info->gl_ops.gl.p_glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, black); - gl_info->gl_ops.gl.p_glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, black); - gl_info->gl_ops.gl.p_glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, white); - checkGLcall("Setting up materials"); - } - - /* Enable the needed maps. - * GL_MAP2_VERTEX_3 is needed for positional data. - * GL_AUTO_NORMAL to generate normals from the position. Do not use GL_MAP2_NORMAL. - * GL_MAP2_TEXTURE_COORD_4 for texture coords - */ - num_quads = ceilf(patch->numSegs[0]) * ceilf(patch->numSegs[1]); - out_vertex_size = 3 /* position */; - d3d_out_vertex_size = 3; - gl_info->gl_ops.gl.p_glEnable(GL_MAP2_VERTEX_3); - if (patch->has_normals && patch->has_texcoords) - { - FIXME("Texcoords not handled yet\n"); - feedback_type = GL_3D_COLOR_TEXTURE; - out_vertex_size += 8; - d3d_out_vertex_size += 7; - gl_info->gl_ops.gl.p_glEnable(GL_AUTO_NORMAL); - gl_info->gl_ops.gl.p_glEnable(GL_MAP2_TEXTURE_COORD_4); - } - else if (patch->has_texcoords) - { - FIXME("Texcoords not handled yet\n"); - feedback_type = GL_3D_COLOR_TEXTURE; - out_vertex_size += 7; - d3d_out_vertex_size += 4; - gl_info->gl_ops.gl.p_glEnable(GL_MAP2_TEXTURE_COORD_4); - } - else if (patch->has_normals) - { - feedback_type = GL_3D_COLOR; - out_vertex_size += 4; - d3d_out_vertex_size += 3; - gl_info->gl_ops.gl.p_glEnable(GL_AUTO_NORMAL); - } - else - { - feedback_type = GL_3D; - } - checkGLcall("glEnable vertex attrib generation"); - - buffer_size = num_quads * out_vertex_size * 2 /* triangle list */ * 3 /* verts per tri */ - + 4 * num_quads /* 2 triangle markers per quad + num verts in tri */; - feedbuffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, buffer_size * sizeof(float) * 8); - - gl_info->gl_ops.gl.p_glMap2f(GL_MAP2_VERTEX_3, - 0.0f, 1.0f, vtxStride / sizeof(float), info->width, - 0.0f, 1.0f, info->stride * vtxStride / sizeof(float), info->height, - (const GLfloat *)data); - checkGLcall("glMap2f"); - if (patch->has_texcoords) - { - gl_info->gl_ops.gl.p_glMap2f(GL_MAP2_TEXTURE_COORD_4, - 0.0f, 1.0f, vtxStride / sizeof(float), info->width, - 0.0f, 1.0f, info->stride * vtxStride / sizeof(float), info->height, - (const GLfloat *)data); - checkGLcall("glMap2f"); - } - gl_info->gl_ops.gl.p_glMapGrid2f(ceilf(patch->numSegs[0]), 0.0f, 1.0f, ceilf(patch->numSegs[1]), 0.0f, 1.0f); - checkGLcall("glMapGrid2f"); - - gl_info->gl_ops.gl.p_glFeedbackBuffer(buffer_size * 2, feedback_type, feedbuffer); - checkGLcall("glFeedbackBuffer"); - gl_info->gl_ops.gl.p_glRenderMode(GL_FEEDBACK); - - gl_info->gl_ops.gl.p_glEvalMesh2(GL_FILL, 0, ceilf(patch->numSegs[0]), 0, ceilf(patch->numSegs[1])); - checkGLcall("glEvalMesh2"); - - i = gl_info->gl_ops.gl.p_glRenderMode(GL_RENDER); - if (i == -1) - { - LEAVE_GL(); - ERR("Feedback failed. Expected %d elements back\n", buffer_size); - HeapFree(GetProcessHeap(), 0, feedbuffer); - context_release(context); - return WINED3DERR_DRIVERINTERNALERROR; - } else if(i != buffer_size) { - LEAVE_GL(); - ERR("Unexpected amount of elements returned. Expected %d, got %d\n", buffer_size, i); - HeapFree(GetProcessHeap(), 0, feedbuffer); - context_release(context); - return WINED3DERR_DRIVERINTERNALERROR; - } else { - TRACE("Got %d elements as expected\n", i); - } - - HeapFree(GetProcessHeap(), 0, patch->mem); - patch->mem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, num_quads * 6 * d3d_out_vertex_size * sizeof(float) * 8); - i = 0; - for(j = 0; j < buffer_size; j += (3 /* num verts */ * out_vertex_size + 2 /* tri marker */)) { - if(feedbuffer[j] != GL_POLYGON_TOKEN) { - ERR("Unexpected token: %f\n", feedbuffer[j]); - continue; - } - if(feedbuffer[j + 1] != 3) { - ERR("Unexpected polygon: %f corners\n", feedbuffer[j + 1]); - continue; - } - /* Somehow there are different ideas about back / front facing, so fix up the - * vertex order - */ - patch->mem[i + 0] = feedbuffer[j + out_vertex_size * 2 + 2]; /* x, triangle 2 */ - patch->mem[i + 1] = feedbuffer[j + out_vertex_size * 2 + 3]; /* y, triangle 2 */ - patch->mem[i + 2] = (feedbuffer[j + out_vertex_size * 2 + 4] - 0.5f) * 4.0f * max_z; /* z, triangle 3 */ - if(patch->has_normals) { - patch->mem[i + 3] = feedbuffer[j + out_vertex_size * 2 + 5]; - patch->mem[i + 4] = feedbuffer[j + out_vertex_size * 2 + 6]; - patch->mem[i + 5] = feedbuffer[j + out_vertex_size * 2 + 7]; - } - i += d3d_out_vertex_size; - - patch->mem[i + 0] = feedbuffer[j + out_vertex_size * 1 + 2]; /* x, triangle 2 */ - patch->mem[i + 1] = feedbuffer[j + out_vertex_size * 1 + 3]; /* y, triangle 2 */ - patch->mem[i + 2] = (feedbuffer[j + out_vertex_size * 1 + 4] - 0.5f) * 4.0f * max_z; /* z, triangle 2 */ - if(patch->has_normals) { - patch->mem[i + 3] = feedbuffer[j + out_vertex_size * 1 + 5]; - patch->mem[i + 4] = feedbuffer[j + out_vertex_size * 1 + 6]; - patch->mem[i + 5] = feedbuffer[j + out_vertex_size * 1 + 7]; - } - i += d3d_out_vertex_size; - - patch->mem[i + 0] = feedbuffer[j + out_vertex_size * 0 + 2]; /* x, triangle 1 */ - patch->mem[i + 1] = feedbuffer[j + out_vertex_size * 0 + 3]; /* y, triangle 1 */ - patch->mem[i + 2] = (feedbuffer[j + out_vertex_size * 0 + 4] - 0.5f) * 4.0f * max_z; /* z, triangle 1 */ - if(patch->has_normals) { - patch->mem[i + 3] = feedbuffer[j + out_vertex_size * 0 + 5]; - patch->mem[i + 4] = feedbuffer[j + out_vertex_size * 0 + 6]; - patch->mem[i + 5] = feedbuffer[j + out_vertex_size * 0 + 7]; - } - i += d3d_out_vertex_size; - } - - if(patch->has_normals) { - /* Now do the same with reverse light directions */ - static const GLfloat x[] = {-1.0f, 0.0f, 0.0f, 0.0f}; - static const GLfloat y[] = { 0.0f, -1.0f, 0.0f, 0.0f}; - static const GLfloat z[] = { 0.0f, 0.0f, -1.0f, 0.0f}; - gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT0, GL_POSITION, x); - gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT1, GL_POSITION, y); - gl_info->gl_ops.gl.p_glLightfv(GL_LIGHT2, GL_POSITION, z); - checkGLcall("Setting up reverse light directions"); - - gl_info->gl_ops.gl.p_glRenderMode(GL_FEEDBACK); - checkGLcall("glRenderMode(GL_FEEDBACK)"); - gl_info->gl_ops.gl.p_glEvalMesh2(GL_FILL, 0, ceilf(patch->numSegs[0]), 0, ceilf(patch->numSegs[1])); - checkGLcall("glEvalMesh2"); - i = gl_info->gl_ops.gl.p_glRenderMode(GL_RENDER); - checkGLcall("glRenderMode(GL_RENDER)"); - - i = 0; - for(j = 0; j < buffer_size; j += (3 /* num verts */ * out_vertex_size + 2 /* tri marker */)) { - if(feedbuffer[j] != GL_POLYGON_TOKEN) { - ERR("Unexpected token: %f\n", feedbuffer[j]); - continue; - } - if(feedbuffer[j + 1] != 3) { - ERR("Unexpected polygon: %f corners\n", feedbuffer[j + 1]); - continue; - } - if(patch->mem[i + 3] == 0.0f) - patch->mem[i + 3] = -feedbuffer[j + out_vertex_size * 2 + 5]; - if(patch->mem[i + 4] == 0.0f) - patch->mem[i + 4] = -feedbuffer[j + out_vertex_size * 2 + 6]; - if(patch->mem[i + 5] == 0.0f) - patch->mem[i + 5] = -feedbuffer[j + out_vertex_size * 2 + 7]; - normalize_normal(patch->mem + i + 3); - i += d3d_out_vertex_size; - - if(patch->mem[i + 3] == 0.0f) - patch->mem[i + 3] = -feedbuffer[j + out_vertex_size * 1 + 5]; - if(patch->mem[i + 4] == 0.0f) - patch->mem[i + 4] = -feedbuffer[j + out_vertex_size * 1 + 6]; - if(patch->mem[i + 5] == 0.0f) - patch->mem[i + 5] = -feedbuffer[j + out_vertex_size * 1 + 7]; - normalize_normal(patch->mem + i + 3); - i += d3d_out_vertex_size; - - if(patch->mem[i + 3] == 0.0f) - patch->mem[i + 3] = -feedbuffer[j + out_vertex_size * 0 + 5]; - if(patch->mem[i + 4] == 0.0f) - patch->mem[i + 4] = -feedbuffer[j + out_vertex_size * 0 + 6]; - if(patch->mem[i + 5] == 0.0f) - patch->mem[i + 5] = -feedbuffer[j + out_vertex_size * 0 + 7]; - normalize_normal(patch->mem + i + 3); - i += d3d_out_vertex_size; - } - } - - gl_info->gl_ops.gl.p_glDisable(GL_MAP2_VERTEX_3); - gl_info->gl_ops.gl.p_glDisable(GL_AUTO_NORMAL); - gl_info->gl_ops.gl.p_glDisable(GL_MAP2_NORMAL); - gl_info->gl_ops.gl.p_glDisable(GL_MAP2_TEXTURE_COORD_4); - checkGLcall("glDisable vertex attrib generation"); - LEAVE_GL(); - - context_release(context); - - HeapFree(GetProcessHeap(), 0, feedbuffer); - - vtxStride = 3 * sizeof(float); - if(patch->has_normals) { - vtxStride += 3 * sizeof(float); - } - if(patch->has_texcoords) { - vtxStride += 4 * sizeof(float); - } - memset(&patch->strided, 0, sizeof(patch->strided)); - patch->strided.position.format = WINED3DFMT_R32G32B32_FLOAT; - patch->strided.position.data = (BYTE *)patch->mem; - patch->strided.position.stride = vtxStride; - - if (patch->has_normals) - { - patch->strided.normal.format = WINED3DFMT_R32G32B32_FLOAT; - patch->strided.normal.data = (BYTE *)patch->mem + 3 * sizeof(float) /* pos */; - patch->strided.normal.stride = vtxStride; - } - if (patch->has_texcoords) - { - patch->strided.tex_coords[0].format = WINED3DFMT_R32G32B32A32_FLOAT; - patch->strided.tex_coords[0].data = (BYTE *)patch->mem + 3 * sizeof(float) /* pos */; - if (patch->has_normals) - patch->strided.tex_coords[0].data += 3 * sizeof(float); - patch->strided.tex_coords[0].stride = vtxStride; - } - - return WINED3D_OK; -} diff --git a/dll/directx/wine/wined3d/gl_compat.c b/dll/directx/wine/wined3d/gl_compat.c index fb4e2b8785f..b31b892ae4f 100644 --- a/dll/directx/wine/wined3d/gl_compat.c +++ b/dll/directx/wine/wined3d/gl_compat.c @@ -21,7 +21,7 @@ #include #include -//#include +#include #ifdef HAVE_FLOAT_H # include #endif diff --git a/dll/directx/wine/wined3d/glsl_shader.c b/dll/directx/wine/wined3d/glsl_shader.c index ea0c0ee8d66..7b11567ffd4 100644 --- a/dll/directx/wine/wined3d/glsl_shader.c +++ b/dll/directx/wine/wined3d/glsl_shader.c @@ -96,39 +96,60 @@ struct shader_glsl_priv { GLhandleARB depth_blt_program_full[tex_type_count]; GLhandleARB depth_blt_program_masked[tex_type_count]; UINT next_constant_version; + + const struct fragment_pipeline *fragment_pipe; + struct wine_rb_tree ffp_fragment_shaders; + BOOL ffp_proj_control; +}; + +struct glsl_vs_program +{ + struct list shader_entry; + GLhandleARB id; + GLenum vertex_color_clamp; + GLint *uniform_f_locations; + GLint uniform_i_locations[MAX_CONST_I]; + GLint pos_fixup_location; +}; + +struct glsl_gs_program +{ + struct list shader_entry; + GLhandleARB id; +}; + +struct glsl_ps_program +{ + struct list shader_entry; + GLhandleARB id; + GLint *uniform_f_locations; + GLint uniform_i_locations[MAX_CONST_I]; + GLint bumpenv_mat_location[MAX_TEXTURES]; + GLint bumpenv_lum_scale_location[MAX_TEXTURES]; + GLint bumpenv_lum_offset_location[MAX_TEXTURES]; + GLint tex_factor_location; + GLint specular_enable_location; + GLint ycorrection_location; + GLint np2_fixup_location; + const struct ps_np2fixup_info *np2_fixup_info; }; /* Struct to maintain data about a linked GLSL program */ -struct glsl_shader_prog_link { - struct wine_rb_entry program_lookup_entry; - struct list vshader_entry; - struct list pshader_entry; - GLhandleARB programId; - GLint *vuniformF_locations; - GLint *puniformF_locations; - GLint vuniformI_locations[MAX_CONST_I]; - GLint puniformI_locations[MAX_CONST_I]; - GLint posFixup_location; - GLint np2Fixup_location; - GLint bumpenvmat_location[MAX_TEXTURES]; - GLint luminancescale_location[MAX_TEXTURES]; - GLint luminanceoffset_location[MAX_TEXTURES]; - GLint ycorrection_location; - GLenum vertex_color_clamp; - const struct wined3d_shader *vshader; - const struct wined3d_shader *pshader; - struct vs_compile_args vs_args; - struct ps_compile_args ps_args; - UINT constant_version; - const struct ps_np2fixup_info *np2Fixup_info; +struct glsl_shader_prog_link +{ + struct wine_rb_entry program_lookup_entry; + struct glsl_vs_program vs; + struct glsl_gs_program gs; + struct glsl_ps_program ps; + GLhandleARB programId; + UINT constant_version; }; struct glsl_program_key { - const struct wined3d_shader *vshader; - const struct wined3d_shader *pshader; - struct ps_compile_args ps_args; - struct vs_compile_args vs_args; + GLhandleARB vs_id; + GLhandleARB gs_id; + GLhandleARB ps_id; }; struct shader_glsl_ctx_priv { @@ -144,22 +165,33 @@ struct glsl_ps_compiled_shader GLhandleARB prgId; }; -struct glsl_pshader_private -{ - struct glsl_ps_compiled_shader *gl_shaders; - UINT num_gl_shaders, shader_array_size; -}; - struct glsl_vs_compiled_shader { struct vs_compile_args args; GLhandleARB prgId; }; -struct glsl_vshader_private +struct glsl_gs_compiled_shader { - struct glsl_vs_compiled_shader *gl_shaders; - UINT num_gl_shaders, shader_array_size; + GLhandleARB id; +}; + +struct glsl_shader_private +{ + union + { + struct glsl_vs_compiled_shader *vs; + struct glsl_gs_compiled_shader *gs; + struct glsl_ps_compiled_shader *ps; + } gl_shaders; + UINT num_gl_shaders, shader_array_size; +}; + +struct glsl_ffp_fragment_shader +{ + struct ffp_frag_desc entry; + GLhandleARB id; + struct list linked_programs; }; static const char *debug_gl_shader_type(GLenum type) @@ -176,6 +208,25 @@ static const char *debug_gl_shader_type(GLenum type) } } +static const char *shader_glsl_get_prefix(enum wined3d_shader_type type) +{ + switch (type) + { + case WINED3D_SHADER_TYPE_VERTEX: + return "vs"; + + case WINED3D_SHADER_TYPE_GEOMETRY: + return "gs"; + + case WINED3D_SHADER_TYPE_PIXEL: + return "ps"; + + default: + FIXME("Unhandled shader type %#x.\n", type); + return "unknown"; + } +} + /* Extract a line from the info log. * Note that this modifies the source string. */ static char *get_info_log_line(char **ptr) @@ -195,8 +246,7 @@ static char *get_info_log_line(char **ptr) return p; } -/** Prints the GLSL info log which will contain error messages if they exist */ -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void print_glsl_info_log(const struct wined3d_gl_info *gl_info, GLhandleARB obj) { int infologLength = 0; @@ -238,7 +288,7 @@ static void print_glsl_info_log(const struct wined3d_gl_info *gl_info, GLhandleA } } -/* GL locking is done by the caller. */ +/* Context activation is done by the caller. */ static void shader_glsl_compile(const struct wined3d_gl_info *gl_info, GLhandleARB shader, const char *src) { TRACE("Compiling shader object %u.\n", shader); @@ -249,7 +299,7 @@ static void shader_glsl_compile(const struct wined3d_gl_info *gl_info, GLhandleA print_glsl_info_log(gl_info, shader); } -/* GL locking is done by the caller. */ +/* Context activation is done by the caller. */ static void shader_glsl_dump_program_source(const struct wined3d_gl_info *gl_info, GLhandleARB program) { GLint i, object_count, source_size = -1; @@ -303,7 +353,7 @@ static void shader_glsl_dump_program_source(const struct wined3d_gl_info *gl_inf HeapFree(GetProcessHeap(), 0, objects); } -/* GL locking is done by the caller. */ +/* Context activation is done by the caller. */ static void shader_glsl_validate_link(const struct wined3d_gl_info *gl_info, GLhandleARB program) { GLint tmp; @@ -324,19 +374,17 @@ static void shader_glsl_validate_link(const struct wined3d_gl_info *gl_info, GLh print_glsl_info_log(gl_info, program); } -/** - * Loads (pixel shader) samplers - */ -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void shader_glsl_load_psamplers(const struct wined3d_gl_info *gl_info, const DWORD *tex_unit_map, GLhandleARB programId) { GLint name_loc; - int i; char sampler_name[20]; + unsigned int i; - for (i = 0; i < MAX_FRAGMENT_SAMPLERS; ++i) { - snprintf(sampler_name, sizeof(sampler_name), "Psampler%d", i); + for (i = 0; i < MAX_FRAGMENT_SAMPLERS; ++i) + { + snprintf(sampler_name, sizeof(sampler_name), "ps_sampler%u", i); name_loc = GL_EXTCALL(glGetUniformLocationARB(programId, sampler_name)); if (name_loc != -1) { DWORD mapped_unit = tex_unit_map[i]; @@ -352,16 +400,17 @@ static void shader_glsl_load_psamplers(const struct wined3d_gl_info *gl_info, } } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void shader_glsl_load_vsamplers(const struct wined3d_gl_info *gl_info, const DWORD *tex_unit_map, GLhandleARB programId) { GLint name_loc; char sampler_name[20]; - int i; + unsigned int i; - for (i = 0; i < MAX_VERTEX_SAMPLERS; ++i) { - snprintf(sampler_name, sizeof(sampler_name), "Vsampler%d", i); + for (i = 0; i < MAX_VERTEX_SAMPLERS; ++i) + { + snprintf(sampler_name, sizeof(sampler_name), "vs_sampler%u", i); name_loc = GL_EXTCALL(glGetUniformLocationARB(programId, sampler_name)); if (name_loc != -1) { DWORD mapped_unit = tex_unit_map[MAX_FRAGMENT_SAMPLERS + i]; @@ -377,7 +426,7 @@ static void shader_glsl_load_vsamplers(const struct wined3d_gl_info *gl_info, } } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static inline void walk_constant_heap(const struct wined3d_gl_info *gl_info, const float *constants, const GLint *constant_locations, const struct constant_heap *heap, unsigned char *stack, DWORD version) { @@ -437,7 +486,7 @@ static inline void walk_constant_heap(const struct wined3d_gl_info *gl_info, con checkGLcall("walk_constant_heap()"); } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static inline void apply_clamped_constant(const struct wined3d_gl_info *gl_info, GLint location, const GLfloat *data) { GLfloat clamped_constant[4]; @@ -452,7 +501,7 @@ static inline void apply_clamped_constant(const struct wined3d_gl_info *gl_info, GL_EXTCALL(glUniform4fvARB(location, 1, clamped_constant)); } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static inline void walk_constant_heap_clamped(const struct wined3d_gl_info *gl_info, const float *constants, const GLint *constant_locations, const struct constant_heap *heap, unsigned char *stack, DWORD version) { @@ -510,8 +559,7 @@ static inline void walk_constant_heap_clamped(const struct wined3d_gl_info *gl_i checkGLcall("walk_constant_heap_clamped()"); } -/* Loads floating point constants (aka uniforms) into the currently set GLSL program. */ -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void shader_glsl_load_constantsF(const struct wined3d_shader *shader, const struct wined3d_gl_info *gl_info, const float *constants, const GLint *constant_locations, const struct constant_heap *heap, unsigned char *stack, UINT version) @@ -520,7 +568,7 @@ static void shader_glsl_load_constantsF(const struct wined3d_shader *shader, con /* 1.X pshaders have the constants clamped to [-1;1] implicitly. */ if (shader->reg_maps.shader_version.major == 1 - && shader_is_pshader_version(shader->reg_maps.shader_version.type)) + && shader->reg_maps.shader_version.type == WINED3D_SHADER_TYPE_PIXEL) walk_constant_heap_clamped(gl_info, constants, constant_locations, heap, stack, version); else walk_constant_heap(gl_info, constants, constant_locations, heap, stack, version); @@ -541,8 +589,7 @@ static void shader_glsl_load_constantsF(const struct wined3d_shader *shader, con checkGLcall("glUniform4fvARB()"); } -/* Loads integer constants (aka uniforms) into the currently set GLSL program. */ -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void shader_glsl_load_constantsI(const struct wined3d_shader *shader, const struct wined3d_gl_info *gl_info, const GLint locations[MAX_CONST_I], const int *constants, WORD constants_set) { @@ -579,37 +626,17 @@ static void shader_glsl_load_constantsI(const struct wined3d_shader *shader, con } } -/* Loads boolean constants (aka uniforms) into the currently set GLSL program. */ -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void shader_glsl_load_constantsB(const struct wined3d_shader *shader, const struct wined3d_gl_info *gl_info, GLhandleARB programId, const BOOL *constants, WORD constants_set) { GLint tmp_loc; unsigned int i; - char tmp_name[8]; + char tmp_name[10]; const char *prefix; struct list* ptr; - switch (shader->reg_maps.shader_version.type) - { - case WINED3D_SHADER_TYPE_VERTEX: - prefix = "VB"; - break; - - case WINED3D_SHADER_TYPE_GEOMETRY: - prefix = "GB"; - break; - - case WINED3D_SHADER_TYPE_PIXEL: - prefix = "PB"; - break; - - default: - FIXME("Unknown shader type %#x.\n", - shader->reg_maps.shader_version.type); - prefix = "UB"; - break; - } + prefix = shader_glsl_get_prefix(shader->reg_maps.shader_version.type); /* TODO: Benchmark and see if it would be beneficial to store the * locations of the constants to avoid looking up each time */ @@ -621,7 +648,7 @@ static void shader_glsl_load_constantsB(const struct wined3d_shader *shader, con /* TODO: Benchmark and see if it would be beneficial to store the * locations of the constants to avoid looking up each time */ - snprintf(tmp_name, sizeof(tmp_name), "%s[%i]", prefix, i); + snprintf(tmp_name, sizeof(tmp_name), "%s_b[%i]", prefix, i); tmp_loc = GL_EXTCALL(glGetUniformLocationARB(programId, tmp_name)); if (tmp_loc != -1) { @@ -641,7 +668,7 @@ static void shader_glsl_load_constantsB(const struct wined3d_shader *shader, con TRACE_(d3d_constants)("Loading local constants %i: %i\n", idx, values[0]); - snprintf(tmp_name, sizeof(tmp_name), "%s[%i]", prefix, idx); + snprintf(tmp_name, sizeof(tmp_name), "%s_b[%i]", prefix, idx); tmp_loc = GL_EXTCALL(glGetUniformLocationARB(programId, tmp_name)); if (tmp_loc != -1) { /* We found this uniform name in the program - go ahead and send the data */ @@ -657,10 +684,7 @@ static void reset_program_constant_version(struct wine_rb_entry *entry, void *co WINE_RB_ENTRY_VALUE(entry, struct glsl_shader_prog_link, program_lookup_entry)->constant_version = 0; } -/** - * Loads the texture dimensions for NP2 fixup into the currently set GLSL program. - */ -/* GL locking is done by the caller (state handler) */ +/* Context activation is done by the caller (state handler). */ static void shader_glsl_load_np2fixup_constants(void *shader_priv, const struct wined3d_gl_info *gl_info, const struct wined3d_state *state) { @@ -673,16 +697,16 @@ static void shader_glsl_load_np2fixup_constants(void *shader_priv, /* NP2 texcoord fixup is (currently) only done for pixelshaders. */ if (!use_ps(state)) return; - if (prog->ps_args.np2_fixup && prog->np2Fixup_location != -1) + if (prog->ps.np2_fixup_info && prog->ps.np2_fixup_location != -1) { UINT i; - UINT fixup = prog->ps_args.np2_fixup; + UINT fixup = prog->ps.np2_fixup_info->active; GLfloat np2fixup_constants[4 * MAX_FRAGMENT_SAMPLERS]; for (i = 0; fixup; fixup >>= 1, ++i) { const struct wined3d_texture *tex = state->textures[i]; - const unsigned char idx = prog->np2Fixup_info->idx[i]; + const unsigned char idx = prog->ps.np2_fixup_info->idx[i]; GLfloat *tex_dim = &np2fixup_constants[(idx >> 1) * 4]; if (!tex) @@ -703,16 +727,14 @@ static void shader_glsl_load_np2fixup_constants(void *shader_priv, } } - GL_EXTCALL(glUniform4fvARB(prog->np2Fixup_location, prog->np2Fixup_info->num_consts, np2fixup_constants)); + GL_EXTCALL(glUniform4fvARB(prog->ps.np2_fixup_location, + prog->ps.np2_fixup_info->num_consts, np2fixup_constants)); } } -/** - * Loads the app-supplied constants into the currently set GLSL program. - */ -/* GL locking is done by the caller (state handler) */ +/* Context activation is done by the caller (state handler). */ static void shader_glsl_load_constants(const struct wined3d_context *context, - char usePixelShader, char useVertexShader) + BOOL usePixelShader, BOOL useVertexShader) { const struct wined3d_gl_info *gl_info = context->gl_info; struct wined3d_device *device = context->swapchain->device; @@ -739,10 +761,10 @@ static void shader_glsl_load_constants(const struct wined3d_context *context, /* Load DirectX 9 float constants/uniforms for vertex shader */ shader_glsl_load_constantsF(vshader, gl_info, state->vs_consts_f, - prog->vuniformF_locations, &priv->vconst_heap, priv->stack, constant_version); + prog->vs.uniform_f_locations, &priv->vconst_heap, priv->stack, constant_version); /* Load DirectX 9 integer constants/uniforms for vertex shader */ - shader_glsl_load_constantsI(vshader, gl_info, prog->vuniformI_locations, state->vs_consts_i, + shader_glsl_load_constantsI(vshader, gl_info, prog->vs.uniform_i_locations, state->vs_consts_i, stateBlock->changed.vertexShaderConstantsI & vshader->reg_maps.integer_constants); /* Load DirectX 9 boolean constants/uniforms for vertex shader */ @@ -751,7 +773,7 @@ static void shader_glsl_load_constants(const struct wined3d_context *context, /* Upload the position fixup params */ shader_get_position_fixup(context, state, position_fixup); - GL_EXTCALL(glUniform4fvARB(prog->posFixup_location, 1, position_fixup)); + GL_EXTCALL(glUniform4fvARB(prog->vs.pos_fixup_location, 1, position_fixup)); checkGLcall("glUniform4fvARB"); } @@ -761,44 +783,46 @@ static void shader_glsl_load_constants(const struct wined3d_context *context, /* Load DirectX 9 float constants/uniforms for pixel shader */ shader_glsl_load_constantsF(pshader, gl_info, state->ps_consts_f, - prog->puniformF_locations, &priv->pconst_heap, priv->stack, constant_version); + prog->ps.uniform_f_locations, &priv->pconst_heap, priv->stack, constant_version); /* Load DirectX 9 integer constants/uniforms for pixel shader */ - shader_glsl_load_constantsI(pshader, gl_info, prog->puniformI_locations, state->ps_consts_i, + shader_glsl_load_constantsI(pshader, gl_info, prog->ps.uniform_i_locations, state->ps_consts_i, stateBlock->changed.pixelShaderConstantsI & pshader->reg_maps.integer_constants); /* Load DirectX 9 boolean constants/uniforms for pixel shader */ shader_glsl_load_constantsB(pshader, gl_info, programId, state->ps_consts_b, stateBlock->changed.pixelShaderConstantsB & pshader->reg_maps.boolean_constants); - /* Upload the environment bump map matrix if needed. The needsbumpmat member specifies the texture stage to load the matrix from. - * It can't be 0 for a valid texbem instruction. - */ - for(i = 0; i < MAX_TEXTURES; i++) { + /* Upload the environment bump map matrix if needed. The needsbumpmat + * member specifies the texture stage to load the matrix from. It + * can't be 0 for a valid texbem instruction. */ + for (i = 0; i < MAX_TEXTURES; ++i) + { const float *data; - if(prog->bumpenvmat_location[i] == -1) continue; + if (prog->ps.bumpenv_mat_location[i] == -1) + continue; data = (const float *)&state->texture_states[i][WINED3D_TSS_BUMPENV_MAT00]; - GL_EXTCALL(glUniformMatrix2fvARB(prog->bumpenvmat_location[i], 1, 0, data)); + GL_EXTCALL(glUniformMatrix2fvARB(prog->ps.bumpenv_mat_location[i], 1, 0, data)); checkGLcall("glUniformMatrix2fvARB"); /* texbeml needs the luminance scale and offset too. If texbeml * is used, needsbumpmat is set too, so we can check that in the * needsbumpmat check. */ - if (prog->luminancescale_location[i] != -1) + if (prog->ps.bumpenv_lum_scale_location[i] != -1) { const GLfloat *scale = (const GLfloat *)&state->texture_states[i][WINED3D_TSS_BUMPENV_LSCALE]; const GLfloat *offset = (const GLfloat *)&state->texture_states[i][WINED3D_TSS_BUMPENV_LOFFSET]; - GL_EXTCALL(glUniform1fvARB(prog->luminancescale_location[i], 1, scale)); + GL_EXTCALL(glUniform1fvARB(prog->ps.bumpenv_lum_scale_location[i], 1, scale)); checkGLcall("glUniform1fvARB"); - GL_EXTCALL(glUniform1fvARB(prog->luminanceoffset_location[i], 1, offset)); + GL_EXTCALL(glUniform1fvARB(prog->ps.bumpenv_lum_offset_location[i], 1, offset)); checkGLcall("glUniform1fvARB"); } } - if (prog->ycorrection_location != -1) + if (prog->ps.ycorrection_location != -1) { float correction_params[4]; @@ -811,9 +835,33 @@ static void shader_glsl_load_constants(const struct wined3d_context *context, correction_params[0] = (float) context->current_rt->resource.height; correction_params[1] = -1.0f; } - GL_EXTCALL(glUniform4fvARB(prog->ycorrection_location, 1, correction_params)); + GL_EXTCALL(glUniform4fvARB(prog->ps.ycorrection_location, 1, correction_params)); } } + else if (priv->fragment_pipe == &glsl_fragment_pipe) + { + float col[4]; + + for (i = 0; i < MAX_TEXTURES; ++i) + { + GL_EXTCALL(glUniformMatrix2fvARB(prog->ps.bumpenv_mat_location[i], 1, 0, + (const float *)&state->texture_states[i][WINED3D_TSS_BUMPENV_MAT00])); + GL_EXTCALL(glUniform1fARB(prog->ps.bumpenv_lum_scale_location[i], + *(const float *)&state->texture_states[i][WINED3D_TSS_BUMPENV_LSCALE])); + GL_EXTCALL(glUniform1fARB(prog->ps.bumpenv_lum_offset_location[i], + *(const float *)&state->texture_states[i][WINED3D_TSS_BUMPENV_LOFFSET])); + } + + D3DCOLORTOGLFLOAT4(state->render_states[WINED3D_RS_TEXTUREFACTOR], col); + GL_EXTCALL(glUniform4fARB(prog->ps.tex_factor_location, col[0], col[1], col[2], col[3])); + + if (state->render_states[WINED3D_RS_SPECULARENABLE]) + GL_EXTCALL(glUniform4fARB(prog->ps.specular_enable_location, 1.0f, 1.0f, 1.0f, 0.0f)); + else + GL_EXTCALL(glUniform4fARB(prog->ps.specular_enable_location, 0.0f, 0.0f, 0.0f, 0.0f)); + + checkGLcall("fixed function uniforms"); + } if (priv->next_constant_version == UINT_MAX) { @@ -896,17 +944,17 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont struct wined3d_shader_buffer *buffer, const struct wined3d_shader *shader, const struct wined3d_shader_reg_maps *reg_maps, const struct shader_glsl_ctx_priv *ctx_priv) { + const struct wined3d_shader_version *version = ®_maps->shader_version; const struct wined3d_state *state = &shader->device->stateBlock->state; const struct ps_compile_args *ps_args = ctx_priv->cur_ps_args; const struct wined3d_gl_info *gl_info = context->gl_info; const struct wined3d_fb_state *fb = &shader->device->fb; unsigned int i, extra_constants_needed = 0; const struct wined3d_shader_lconst *lconst; + const char *prefix; DWORD map; - /* There are some minor differences between pixel and vertex shaders */ - char pshader = shader_is_pshader_version(reg_maps->shader_version.type); - char prefix = pshader ? 'P' : 'V'; + prefix = shader_glsl_get_prefix(version->type); /* Prototype the subroutines */ for (i = 0, map = reg_maps->labels; map; map >>= 1, ++i) @@ -918,20 +966,25 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont if (shader->limits.constant_float > 0) { unsigned max_constantsF; - /* Unless the shader uses indirect addressing, always declare the maximum array size and ignore that we need some - * uniforms privately. E.g. if GL supports 256 uniforms, and we need 2 for the pos fixup and immediate values, still - * declare VC[256]. If the shader needs more uniforms than we have it won't work in any case. If it uses less, the - * compiler will figure out which uniforms are really used and strip them out. This allows a shader to use c255 on - * a dx9 card, as long as it doesn't also use all the other constants. + + /* Unless the shader uses indirect addressing, always declare the + * maximum array size and ignore that we need some uniforms privately. + * E.g. if GL supports 256 uniforms, and we need 2 for the pos fixup + * and immediate values, still declare VC[256]. If the shader needs + * more uniforms than we have it won't work in any case. If it uses + * less, the compiler will figure out which uniforms are really used + * and strip them out. This allows a shader to use c255 on a dx9 card, + * as long as it doesn't also use all the other constants. * - * If the shader uses indirect addressing the compiler must assume that all declared uniforms are used. In this case, - * declare only the amount that we're assured to have. + * If the shader uses indirect addressing the compiler must assume + * that all declared uniforms are used. In this case, declare only the + * amount that we're assured to have. * * Thus we run into problems in these two cases: - * 1) The shader really uses more uniforms than supported - * 2) The shader uses indirect addressing, less constants than supported, but uses a constant index > #supported consts - */ - if (pshader) + * 1) The shader really uses more uniforms than supported. + * 2) The shader uses indirect addressing, less constants than + * supported, but uses a constant index > #supported consts. */ + if (version->type == WINED3D_SHADER_TYPE_PIXEL) { /* No indirect addressing here. */ max_constantsF = gl_info->limits.glsl_ps_float_constants; @@ -981,35 +1034,166 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont } } max_constantsF = min(shader->limits.constant_float, max_constantsF); - shader_addline(buffer, "uniform vec4 %cC[%u];\n", prefix, max_constantsF); + shader_addline(buffer, "uniform vec4 %s_c[%u];\n", prefix, max_constantsF); } /* Always declare the full set of constants, the compiler can remove the * unused ones because d3d doesn't (yet) support indirect int and bool * constant addressing. This avoids problems if the app uses e.g. i0 and i9. */ if (shader->limits.constant_int > 0 && reg_maps->integer_constants) - shader_addline(buffer, "uniform ivec4 %cI[%u];\n", prefix, shader->limits.constant_int); + shader_addline(buffer, "uniform ivec4 %s_i[%u];\n", prefix, shader->limits.constant_int); if (shader->limits.constant_bool > 0 && reg_maps->boolean_constants) - shader_addline(buffer, "uniform bool %cB[%u];\n", prefix, shader->limits.constant_bool); + shader_addline(buffer, "uniform bool %s_b[%u];\n", prefix, shader->limits.constant_bool); - if (!pshader) + for (i = 0; i < WINED3D_MAX_CBS; ++i) { - shader_addline(buffer, "uniform vec4 posFixup;\n"); - shader_addline(buffer, "void order_ps_input(in vec4[%u]);\n", MAX_REG_OUTPUT); + if (reg_maps->cb_sizes[i]) + shader_addline(buffer, "uniform vec4 %s_cb%u[%u];\n", prefix, i, reg_maps->cb_sizes[i]); } - else + + /* Declare texture samplers */ + for (i = 0; i < shader->limits.sampler; ++i) { + if (reg_maps->sampler_type[i]) + { + BOOL shadow_sampler = version->type == WINED3D_SHADER_TYPE_PIXEL && (ps_args->shadow & (1 << i)); + const struct wined3d_texture *texture; + + switch (reg_maps->sampler_type[i]) + { + case WINED3DSTT_1D: + if (shadow_sampler) + shader_addline(buffer, "uniform sampler1DShadow %s_sampler%u;\n", prefix, i); + else + shader_addline(buffer, "uniform sampler1D %s_sampler%u;\n", prefix, i); + break; + case WINED3DSTT_2D: + texture = state->textures[i]; + if (shadow_sampler) + { + if (texture && texture->target == GL_TEXTURE_RECTANGLE_ARB) + shader_addline(buffer, "uniform sampler2DRectShadow %s_sampler%u;\n", prefix, i); + else + shader_addline(buffer, "uniform sampler2DShadow %s_sampler%u;\n", prefix, i); + } + else + { + if (texture && texture->target == GL_TEXTURE_RECTANGLE_ARB) + shader_addline(buffer, "uniform sampler2DRect %s_sampler%u;\n", prefix, i); + else + shader_addline(buffer, "uniform sampler2D %s_sampler%u;\n", prefix, i); + } + break; + case WINED3DSTT_CUBE: + if (shadow_sampler) + FIXME("Unsupported Cube shadow sampler.\n"); + shader_addline(buffer, "uniform samplerCube %s_sampler%u;\n", prefix, i); + break; + case WINED3DSTT_VOLUME: + if (shadow_sampler) + FIXME("Unsupported 3D shadow sampler.\n"); + shader_addline(buffer, "uniform sampler3D %s_sampler%u;\n", prefix, i); + break; + default: + shader_addline(buffer, "uniform unsupported_sampler %s_sampler%u;\n", prefix, i); + FIXME("Unrecognized sampler type: %#x\n", reg_maps->sampler_type[i]); + break; + } + } + } + + /* Declare uniforms for NP2 texcoord fixup: + * This is NOT done inside the loop that declares the texture samplers + * since the NP2 fixup code is currently only used for the GeforceFX + * series and when forcing the ARB_npot extension off. Modern cards just + * skip the code anyway, so put it inside a separate loop. */ + if (version->type == WINED3D_SHADER_TYPE_PIXEL && ps_args->np2_fixup) + { + struct ps_np2fixup_info *fixup = ctx_priv->cur_np2fixup_info; + UINT cur = 0; + + /* NP2/RECT textures in OpenGL use texcoords in the range [0,width]x[0,height] + * while D3D has them in the (normalized) [0,1]x[0,1] range. + * samplerNP2Fixup stores texture dimensions and is updated through + * shader_glsl_load_np2fixup_constants when the sampler changes. */ + + for (i = 0; i < shader->limits.sampler; ++i) + { + if (reg_maps->sampler_type[i]) + { + if (!(ps_args->np2_fixup & (1 << i))) continue; + + if (WINED3DSTT_2D != reg_maps->sampler_type[i]) { + FIXME("Non-2D texture is flagged for NP2 texcoord fixup.\n"); + continue; + } + + fixup->idx[i] = cur++; + } + } + + fixup->num_consts = (cur + 1) >> 1; + fixup->active = ps_args->np2_fixup; + shader_addline(buffer, "uniform vec4 %s_samplerNP2Fixup[%u];\n", prefix, fixup->num_consts); + } + + /* Declare address variables */ + for (i = 0, map = reg_maps->address; map; map >>= 1, ++i) + { + if (map & 1) shader_addline(buffer, "ivec4 A%u;\n", i); + } + + /* Declare texture coordinate temporaries and initialize them */ + for (i = 0, map = reg_maps->texcoord; map; map >>= 1, ++i) + { + if (map & 1) shader_addline(buffer, "vec4 T%u = gl_TexCoord[%u];\n", i, i); + } + + if (version->type == WINED3D_SHADER_TYPE_VERTEX) + { + /* Declare attributes. */ + for (i = 0, map = reg_maps->input_registers; map; map >>= 1, ++i) + { + if (map & 1) + shader_addline(buffer, "attribute vec4 %s_in%u;\n", prefix, i); + } + + shader_addline(buffer, "uniform vec4 posFixup;\n"); + shader_addline(buffer, "void order_ps_input(in vec4[%u]);\n", shader->limits.packed_output); + } + else if (version->type == WINED3D_SHADER_TYPE_GEOMETRY) + { + shader_addline(buffer, "varying in vec4 gs_in[][%u];\n", shader->limits.packed_input); + } + else if (version->type == WINED3D_SHADER_TYPE_PIXEL) + { + if (version->major >= 3) + { + UINT in_count = min(vec4_varyings(version->major, gl_info), shader->limits.packed_input); + + if (use_vs(state)) + shader_addline(buffer, "varying vec4 %s_in[%u];\n", prefix, in_count); + else + /* TODO: Write a replacement shader for the fixed function + * vertex pipeline, so this isn't needed. For fixed function + * vertex processing + 3.0 pixel shader we need a separate + * function in the pixel shader that reads the fixed function + * color into the packed input registers. */ + shader_addline(buffer, "vec4 %s_in[%u];\n", prefix, in_count); + } + for (i = 0, map = reg_maps->bumpmat; map; map >>= 1, ++i) { - if (!(map & 1)) continue; + if (!(map & 1)) + continue; - shader_addline(buffer, "uniform mat2 bumpenvmat%d;\n", i); + shader_addline(buffer, "uniform mat2 bumpenv_mat%u;\n", i); if (reg_maps->luminanceparams & (1 << i)) { - shader_addline(buffer, "uniform float luminancescale%d;\n", i); - shader_addline(buffer, "uniform float luminanceoffset%d;\n", i); + shader_addline(buffer, "uniform float bumpenv_lum_scale%u;\n", i); + shader_addline(buffer, "uniform float bumpenv_lum_offset%u;\n", i); extra_constants_needed++; } @@ -1045,118 +1229,9 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont } } - /* Declare texture samplers */ - for (i = 0; i < shader->limits.sampler; ++i) - { - if (reg_maps->sampler_type[i]) - { - const struct wined3d_texture *texture; - - switch (reg_maps->sampler_type[i]) - { - case WINED3DSTT_1D: - if (pshader && ps_args->shadow & (1 << i)) - shader_addline(buffer, "uniform sampler1DShadow %csampler%u;\n", prefix, i); - else - shader_addline(buffer, "uniform sampler1D %csampler%u;\n", prefix, i); - break; - case WINED3DSTT_2D: - texture = state->textures[i]; - if (pshader && ps_args->shadow & (1 << i)) - { - if (texture && texture->target == GL_TEXTURE_RECTANGLE_ARB) - shader_addline(buffer, "uniform sampler2DRectShadow %csampler%u;\n", prefix, i); - else - shader_addline(buffer, "uniform sampler2DShadow %csampler%u;\n", prefix, i); - } - else - { - if (texture && texture->target == GL_TEXTURE_RECTANGLE_ARB) - shader_addline(buffer, "uniform sampler2DRect %csampler%u;\n", prefix, i); - else - shader_addline(buffer, "uniform sampler2D %csampler%u;\n", prefix, i); - } - break; - case WINED3DSTT_CUBE: - if (pshader && ps_args->shadow & (1 << i)) FIXME("Unsupported Cube shadow sampler.\n"); - shader_addline(buffer, "uniform samplerCube %csampler%u;\n", prefix, i); - break; - case WINED3DSTT_VOLUME: - if (pshader && ps_args->shadow & (1 << i)) FIXME("Unsupported 3D shadow sampler.\n"); - shader_addline(buffer, "uniform sampler3D %csampler%u;\n", prefix, i); - break; - default: - shader_addline(buffer, "uniform unsupported_sampler %csampler%u;\n", prefix, i); - FIXME("Unrecognized sampler type: %#x\n", reg_maps->sampler_type[i]); - break; - } - } - } - - /* Declare uniforms for NP2 texcoord fixup: - * This is NOT done inside the loop that declares the texture samplers since the NP2 fixup code - * is currently only used for the GeforceFX series and when forcing the ARB_npot extension off. - * Modern cards just skip the code anyway, so put it inside a separate loop. */ - if (pshader && ps_args->np2_fixup) { - - struct ps_np2fixup_info* const fixup = ctx_priv->cur_np2fixup_info; - UINT cur = 0; - - /* NP2/RECT textures in OpenGL use texcoords in the range [0,width]x[0,height] - * while D3D has them in the (normalized) [0,1]x[0,1] range. - * samplerNP2Fixup stores texture dimensions and is updated through - * shader_glsl_load_np2fixup_constants when the sampler changes. */ - - for (i = 0; i < shader->limits.sampler; ++i) - { - if (reg_maps->sampler_type[i]) - { - if (!(ps_args->np2_fixup & (1 << i))) continue; - - if (WINED3DSTT_2D != reg_maps->sampler_type[i]) { - FIXME("Non-2D texture is flagged for NP2 texcoord fixup.\n"); - continue; - } - - fixup->idx[i] = cur++; - } - } - - fixup->num_consts = (cur + 1) >> 1; - shader_addline(buffer, "uniform vec4 %csamplerNP2Fixup[%u];\n", prefix, fixup->num_consts); - } - - /* Declare address variables */ - for (i = 0, map = reg_maps->address; map; map >>= 1, ++i) - { - if (map & 1) shader_addline(buffer, "ivec4 A%u;\n", i); - } - - /* Declare texture coordinate temporaries and initialize them */ - for (i = 0, map = reg_maps->texcoord; map; map >>= 1, ++i) - { - if (map & 1) shader_addline(buffer, "vec4 T%u = gl_TexCoord[%u];\n", i, i); - } - - /* Declare input register varyings. Only pixel shader, vertex shaders have that declared in the - * helper function shader that is linked in at link time - */ - if (pshader && reg_maps->shader_version.major >= 3) - { - UINT in_count = min(vec4_varyings(reg_maps->shader_version.major, gl_info), shader->limits.packed_input); - - if (use_vs(state)) - shader_addline(buffer, "varying vec4 IN[%u];\n", in_count); - else - /* TODO: Write a replacement shader for the fixed function vertex pipeline, so this isn't needed. - * For fixed function vertex processing + 3.0 pixel shader we need a separate function in the - * pixel shader that reads the fixed function color into the packed input registers. */ - shader_addline(buffer, "vec4 IN[%u];\n", in_count); - } - /* Declare output register temporaries */ if (shader->limits.packed_output) - shader_addline(buffer, "vec4 OUT[%u];\n", shader->limits.packed_output); + shader_addline(buffer, "vec4 %s_out[%u];\n", prefix, shader->limits.packed_output); /* Declare temporary variables */ for (i = 0, map = reg_maps->temporary; map; map >>= 1, ++i) @@ -1164,19 +1239,14 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont if (map & 1) shader_addline(buffer, "vec4 R%u;\n", i); } - /* Declare attributes */ - if (reg_maps->shader_version.type == WINED3D_SHADER_TYPE_VERTEX) - { - for (i = 0, map = reg_maps->input_registers; map; map >>= 1, ++i) - { - if (map & 1) shader_addline(buffer, "attribute vec4 attrib%i;\n", i); - } - } - /* Declare loop registers aLx */ - for (i = 0; i < reg_maps->loop_depth; i++) { - shader_addline(buffer, "int aL%u;\n", i); - shader_addline(buffer, "int tmpInt%u;\n", i); + if (version->major < 4) + { + for (i = 0; i < reg_maps->loop_depth; ++i) + { + shader_addline(buffer, "int aL%u;\n", i); + shader_addline(buffer, "int tmpInt%u;\n", i); + } } /* Temporary variables for matrix operations */ @@ -1191,29 +1261,32 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont { LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, struct wined3d_shader_lconst, entry) { - shader_addline(buffer, "uniform vec4 %cLC%u;\n", prefix, lconst->idx); + shader_addline(buffer, "uniform vec4 %s_lc%u;\n", prefix, lconst->idx); } } - /* Start the main program */ - shader_addline(buffer, "void main() {\n"); - if(pshader && reg_maps->vpos) { - /* DirectX apps expect integer values, while OpenGL drivers add approximately 0.5. This causes - * off-by-one problems as spotted by the vPos d3d9 visual test. Unfortunately the ATI cards do - * not add exactly 0.5, but rather something like 0.49999999 or 0.50000001, which still causes - * precision troubles when we just subtract 0.5. - * - * To deal with that just floor() the position. This will eliminate the fraction on all cards. - * - * TODO: Test how that behaves with multisampling once we can enable multisampling in winex11. - * - * An advantage of floor is that it works even if the driver doesn't add 1/2. It is somewhat - * questionable if 1.5, 2.5, ... are the proper values to return in gl_FragCoord, even though - * coordinates specify the pixel centers instead of the pixel corners. This code will behave - * correctly on drivers that returns integer values. - */ - shader_addline(buffer, "vpos = floor(vec4(0, ycorrection[0], 0, 0) + gl_FragCoord * vec4(1, ycorrection[1], 1, 1));\n"); - } + /* Start the main program. */ + shader_addline(buffer, "void main()\n{\n"); + + /* Direct3D applications expect integer vPos values, while OpenGL drivers + * add approximately 0.5. This causes off-by-one problems as spotted by + * the vPos d3d9 visual test. Unfortunately ATI cards do not add exactly + * 0.5, but rather something like 0.49999999 or 0.50000001, which still + * causes precision troubles when we just subtract 0.5. + * + * To deal with that, just floor() the position. This will eliminate the + * fraction on all cards. + * + * TODO: Test how this behaves with multisampling. + * + * An advantage of floor is that it works even if the driver doesn't add + * 0.5. It is somewhat questionable if 1.5, 2.5, ... are the proper values + * to return in gl_FragCoord, even though coordinates specify the pixel + * centers instead of the pixel corners. This code will behave correctly + * on drivers that returns integer values. */ + if (version->type == WINED3D_SHADER_TYPE_PIXEL && reg_maps->vpos) + shader_addline(buffer, + "vpos = floor(vec4(0, ycorrection[0], 0, 0) + gl_FragCoord * vec4(1, ycorrection[1], 1, 1));\n"); } /***************************************************************************** @@ -1304,70 +1377,92 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register * char *register_name, BOOL *is_color, const struct wined3d_shader_instruction *ins) { /* oPos, oFog and oPts in D3D */ - static const char * const hwrastout_reg_names[] = {"OUT[10]", "OUT[11].x", "OUT[11].y"}; + static const char * const hwrastout_reg_names[] = {"vs_out[10]", "vs_out[11].x", "vs_out[11].y"}; const struct wined3d_shader *shader = ins->ctx->shader; const struct wined3d_shader_reg_maps *reg_maps = ins->ctx->reg_maps; + const struct wined3d_shader_version *version = ®_maps->shader_version; const struct wined3d_gl_info *gl_info = ins->ctx->gl_info; - char pshader = shader_is_pshader_version(reg_maps->shader_version.type); + const char *prefix = shader_glsl_get_prefix(version->type); + struct glsl_src_param rel_param0, rel_param1; + if (reg->idx[0].offset != ~0U && reg->idx[0].rel_addr) + shader_glsl_add_src_param(ins, reg->idx[0].rel_addr, WINED3DSP_WRITEMASK_0, &rel_param0); + if (reg->idx[1].offset != ~0U && reg->idx[1].rel_addr) + shader_glsl_add_src_param(ins, reg->idx[1].rel_addr, WINED3DSP_WRITEMASK_0, &rel_param1); *is_color = FALSE; switch (reg->type) { case WINED3DSPR_TEMP: - sprintf(register_name, "R%u", reg->idx); + sprintf(register_name, "R%u", reg->idx[0].offset); break; case WINED3DSPR_INPUT: /* vertex shaders */ - if (!pshader) + if (version->type == WINED3D_SHADER_TYPE_VERTEX) { struct shader_glsl_ctx_priv *priv = ins->ctx->backend_data; - if (priv->cur_vs_args->swizzle_map & (1 << reg->idx)) *is_color = TRUE; - sprintf(register_name, "attrib%u", reg->idx); + if (priv->cur_vs_args->swizzle_map & (1 << reg->idx[0].offset)) + *is_color = TRUE; + sprintf(register_name, "%s_in%u", prefix, reg->idx[0].offset); + break; + } + + if (version->type == WINED3D_SHADER_TYPE_GEOMETRY) + { + if (reg->idx[0].rel_addr) + { + if (reg->idx[1].rel_addr) + sprintf(register_name, "gs_in[%s + %u][%s + %u]", + rel_param0.param_str, reg->idx[0].offset, rel_param1.param_str, reg->idx[1].offset); + else + sprintf(register_name, "gs_in[%s + %u][%u]", + rel_param0.param_str, reg->idx[0].offset, reg->idx[1].offset); + } + else if (reg->idx[1].rel_addr) + sprintf(register_name, "gs_in[%u][%s + %u]", + reg->idx[0].offset, rel_param1.param_str, reg->idx[1].offset); + else + sprintf(register_name, "gs_in[%u][%u]", reg->idx[0].offset, reg->idx[1].offset); break; } /* pixel shaders >= 3.0 */ - if (reg_maps->shader_version.major >= 3) + if (version->major >= 3) { - DWORD idx = shader->u.ps.input_reg_map[reg->idx]; - unsigned int in_count = vec4_varyings(reg_maps->shader_version.major, gl_info); + DWORD idx = shader->u.ps.input_reg_map[reg->idx[0].offset]; + unsigned int in_count = vec4_varyings(version->major, gl_info); - if (reg->rel_addr) + if (reg->idx[0].rel_addr) { - struct glsl_src_param rel_param; - - shader_glsl_add_src_param(ins, reg->rel_addr, WINED3DSP_WRITEMASK_0, &rel_param); - - /* Removing a + 0 would be an obvious optimization, but macos doesn't see the NOP - * operation there */ + /* Removing a + 0 would be an obvious optimization, but + * OS X doesn't see the NOP operation there. */ if (idx) { if (shader->u.ps.declared_in_count > in_count) { sprintf(register_name, - "((%s + %u) > %d ? (%s + %u) > %d ? gl_SecondaryColor : gl_Color : IN[%s + %u])", - rel_param.param_str, idx, in_count - 1, rel_param.param_str, idx, in_count, - rel_param.param_str, idx); + "((%s + %u) > %u ? (%s + %u) > %u ? gl_SecondaryColor : gl_Color : %s_in[%s + %u])", + rel_param0.param_str, idx, in_count - 1, rel_param0.param_str, idx, in_count, + prefix, rel_param0.param_str, idx); } else { - sprintf(register_name, "IN[%s + %u]", rel_param.param_str, idx); + sprintf(register_name, "%s_in[%s + %u]", prefix, rel_param0.param_str, idx); } } else { if (shader->u.ps.declared_in_count > in_count) { - sprintf(register_name, "((%s) > %d ? (%s) > %d ? gl_SecondaryColor : gl_Color : IN[%s])", - rel_param.param_str, in_count - 1, rel_param.param_str, in_count, - rel_param.param_str); + sprintf(register_name, "((%s) > %u ? (%s) > %u ? gl_SecondaryColor : gl_Color : %s_in[%s])", + rel_param0.param_str, in_count - 1, rel_param0.param_str, in_count, + prefix, rel_param0.param_str); } else { - sprintf(register_name, "IN[%s]", rel_param.param_str); + sprintf(register_name, "%s_in[%s]", prefix, rel_param0.param_str); } } } @@ -1375,52 +1470,52 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register * { if (idx == in_count) sprintf(register_name, "gl_Color"); else if (idx == in_count + 1) sprintf(register_name, "gl_SecondaryColor"); - else sprintf(register_name, "IN[%u]", idx); + else sprintf(register_name, "%s_in[%u]", prefix, idx); } } else { - if (!reg->idx) strcpy(register_name, "gl_Color"); - else strcpy(register_name, "gl_SecondaryColor"); + if (!reg->idx[0].offset) + strcpy(register_name, "gl_Color"); + else + strcpy(register_name, "gl_SecondaryColor"); break; } break; case WINED3DSPR_CONST: { - const char prefix = pshader ? 'P' : 'V'; - /* Relative addressing */ - if (reg->rel_addr) + if (reg->idx[0].rel_addr) { - struct glsl_src_param rel_param; - shader_glsl_add_src_param(ins, reg->rel_addr, WINED3DSP_WRITEMASK_0, &rel_param); - if (reg->idx) sprintf(register_name, "%cC[%s + %u]", prefix, rel_param.param_str, reg->idx); - else sprintf(register_name, "%cC[%s]", prefix, rel_param.param_str); + if (reg->idx[0].offset) + sprintf(register_name, "%s_c[%s + %u]", prefix, rel_param0.param_str, reg->idx[0].offset); + else + sprintf(register_name, "%s_c[%s]", prefix, rel_param0.param_str); } else { - if (shader_constant_is_local(shader, reg->idx)) - sprintf(register_name, "%cLC%u", prefix, reg->idx); + if (shader_constant_is_local(shader, reg->idx[0].offset)) + sprintf(register_name, "%s_lc%u", prefix, reg->idx[0].offset); else - sprintf(register_name, "%cC[%u]", prefix, reg->idx); + sprintf(register_name, "%s_c[%u]", prefix, reg->idx[0].offset); } } break; case WINED3DSPR_CONSTINT: - if (pshader) sprintf(register_name, "PI[%u]", reg->idx); - else sprintf(register_name, "VI[%u]", reg->idx); + sprintf(register_name, "%s_i[%u]", prefix, reg->idx[0].offset); break; case WINED3DSPR_CONSTBOOL: - if (pshader) sprintf(register_name, "PB[%u]", reg->idx); - else sprintf(register_name, "VB[%u]", reg->idx); + sprintf(register_name, "%s_b[%u]", prefix, reg->idx[0].offset); break; case WINED3DSPR_TEXTURE: /* case WINED3DSPR_ADDR: */ - if (pshader) sprintf(register_name, "T%u", reg->idx); - else sprintf(register_name, "A%u", reg->idx); + if (version->type == WINED3D_SHADER_TYPE_PIXEL) + sprintf(register_name, "T%u", reg->idx[0].offset); + else + sprintf(register_name, "A%u", reg->idx[0].offset); break; case WINED3DSPR_LOOP: @@ -1428,19 +1523,19 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register * break; case WINED3DSPR_SAMPLER: - if (pshader) sprintf(register_name, "Psampler%u", reg->idx); - else sprintf(register_name, "Vsampler%u", reg->idx); + sprintf(register_name, "%s_sampler%u", prefix, reg->idx[0].offset); break; case WINED3DSPR_COLOROUT: - if (reg->idx >= gl_info->limits.buffers) - WARN("Write to render target %u, only %d supported.\n", reg->idx, gl_info->limits.buffers); + if (reg->idx[0].offset >= gl_info->limits.buffers) + WARN("Write to render target %u, only %d supported.\n", + reg->idx[0].offset, gl_info->limits.buffers); - sprintf(register_name, "gl_FragData[%u]", reg->idx); + sprintf(register_name, "gl_FragData[%u]", reg->idx[0].offset); break; case WINED3DSPR_RASTOUT: - sprintf(register_name, "%s", hwrastout_reg_names[reg->idx]); + sprintf(register_name, "%s", hwrastout_reg_names[reg->idx[0].offset]); break; case WINED3DSPR_DEPTHOUT: @@ -1448,22 +1543,24 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register * break; case WINED3DSPR_ATTROUT: - if (!reg->idx) sprintf(register_name, "OUT[8]"); - else sprintf(register_name, "OUT[9]"); + if (!reg->idx[0].offset) + sprintf(register_name, "%s_out[8]", prefix); + else + sprintf(register_name, "%s_out[9]", prefix); break; case WINED3DSPR_TEXCRDOUT: /* Vertex shaders >= 3.0: WINED3DSPR_OUTPUT */ - sprintf(register_name, "OUT[%u]", reg->idx); + sprintf(register_name, "%s_out[%u]", prefix, reg->idx[0].offset); break; case WINED3DSPR_MISCTYPE: - if (!reg->idx) + if (!reg->idx[0].offset) { /* vPos */ sprintf(register_name, "vpos"); } - else if (reg->idx == 1) + else if (reg->idx[0].offset == 1) { /* Note that gl_FrontFacing is a bool, while vFace is * a float for which the sign determines front/back */ @@ -1471,7 +1568,7 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register * } else { - FIXME("Unhandled misctype register %d\n", reg->idx); + FIXME("Unhandled misctype register %u.\n", reg->idx[0].offset); sprintf(register_name, "unrecognized_register"); } break; @@ -1480,13 +1577,49 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register * switch (reg->immconst_type) { case WINED3D_IMMCONST_SCALAR: - sprintf(register_name, "%.8e", *(const float *)reg->immconst_data); + switch (reg->data_type) + { + case WINED3D_DATA_FLOAT: + sprintf(register_name, "%.8e", *(const float *)reg->immconst_data); + break; + case WINED3D_DATA_INT: + sprintf(register_name, "%#x", reg->immconst_data[0]); + break; + case WINED3D_DATA_RESOURCE: + case WINED3D_DATA_SAMPLER: + case WINED3D_DATA_UINT: + sprintf(register_name, "%#xu", reg->immconst_data[0]); + break; + default: + sprintf(register_name, "", reg->data_type); + break; + } break; case WINED3D_IMMCONST_VEC4: - sprintf(register_name, "vec4(%.8e, %.8e, %.8e, %.8e)", - *(const float *)®->immconst_data[0], *(const float *)®->immconst_data[1], - *(const float *)®->immconst_data[2], *(const float *)®->immconst_data[3]); + switch (reg->data_type) + { + case WINED3D_DATA_FLOAT: + sprintf(register_name, "vec4(%.8e, %.8e, %.8e, %.8e)", + *(const float *)®->immconst_data[0], *(const float *)®->immconst_data[1], + *(const float *)®->immconst_data[2], *(const float *)®->immconst_data[3]); + break; + case WINED3D_DATA_INT: + sprintf(register_name, "ivec4(%#x, %#x, %#x, %#x)", + reg->immconst_data[0], reg->immconst_data[1], + reg->immconst_data[2], reg->immconst_data[3]); + break; + case WINED3D_DATA_RESOURCE: + case WINED3D_DATA_SAMPLER: + case WINED3D_DATA_UINT: + sprintf(register_name, "uvec4(%#xu, %#xu, %#xu, %#xu)", + reg->immconst_data[0], reg->immconst_data[1], + reg->immconst_data[2], reg->immconst_data[3]); + break; + default: + sprintf(register_name, "", reg->data_type); + break; + } break; default: @@ -1495,8 +1628,20 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register * } break; + case WINED3DSPR_CONSTBUFFER: + if (reg->idx[1].rel_addr) + sprintf(register_name, "%s_cb%u[%s + %u]", + prefix, reg->idx[0].offset, rel_param1.param_str, reg->idx[1].offset); + else + sprintf(register_name, "%s_cb%u[%u]", prefix, reg->idx[0].offset, reg->idx[1].offset); + break; + + case WINED3DSPR_PRIMID: + sprintf(register_name, "uint(gl_PrimitiveIDIn)"); + break; + default: - FIXME("Unhandled register name Type(%d)\n", reg->type); + FIXME("Unhandled register type %#x.\n", reg->type); sprintf(register_name, "unrecognized_register"); break; } @@ -1581,7 +1726,36 @@ static void shader_glsl_add_src_param(const struct wined3d_shader_instruction *i shader_glsl_get_register_name(&wined3d_src->reg, glsl_src->reg_name, &is_color, ins); shader_glsl_get_swizzle(wined3d_src, is_color, mask, swizzle_str); - shader_glsl_gen_modifier(wined3d_src->modifiers, glsl_src->reg_name, swizzle_str, glsl_src->param_str); + + if (wined3d_src->reg.type == WINED3DSPR_IMMCONST || wined3d_src->reg.type == WINED3DSPR_PRIMID) + { + shader_glsl_gen_modifier(wined3d_src->modifiers, glsl_src->reg_name, swizzle_str, glsl_src->param_str); + } + else + { + char param_str[200]; + + shader_glsl_gen_modifier(wined3d_src->modifiers, glsl_src->reg_name, swizzle_str, param_str); + + switch (wined3d_src->reg.data_type) + { + case WINED3D_DATA_FLOAT: + sprintf(glsl_src->param_str, "%s", param_str); + break; + case WINED3D_DATA_INT: + sprintf(glsl_src->param_str, "floatBitsToInt(%s)", param_str); + break; + case WINED3D_DATA_RESOURCE: + case WINED3D_DATA_SAMPLER: + case WINED3D_DATA_UINT: + sprintf(glsl_src->param_str, "floatBitsToUint(%s)", param_str); + break; + default: + FIXME("Unhandled data type %#x.\n", wined3d_src->reg.data_type); + sprintf(glsl_src->param_str, "%s", param_str); + break; + } + } } /* From a given parameter token, generate the corresponding GLSL string. @@ -1606,8 +1780,31 @@ static DWORD shader_glsl_append_dst_ext(struct wined3d_shader_buffer *buffer, struct glsl_dst_param glsl_dst; DWORD mask; - mask = shader_glsl_add_dst_param(ins, dst, &glsl_dst); - if (mask) shader_addline(buffer, "%s%s = %s(", glsl_dst.reg_name, glsl_dst.mask_str, shift_glsl_tab[dst->shift]); + if ((mask = shader_glsl_add_dst_param(ins, dst, &glsl_dst))) + { + switch (dst->reg.data_type) + { + case WINED3D_DATA_FLOAT: + shader_addline(buffer, "%s%s = %s(", + glsl_dst.reg_name, glsl_dst.mask_str, shift_glsl_tab[dst->shift]); + break; + case WINED3D_DATA_INT: + shader_addline(buffer, "%s%s = %sintBitsToFloat(", + glsl_dst.reg_name, glsl_dst.mask_str, shift_glsl_tab[dst->shift]); + break; + case WINED3D_DATA_RESOURCE: + case WINED3D_DATA_SAMPLER: + case WINED3D_DATA_UINT: + shader_addline(buffer, "%s%s = %suintBitsToFloat(", + glsl_dst.reg_name, glsl_dst.mask_str, shift_glsl_tab[dst->shift]); + break; + default: + FIXME("Unhandled data type %#x.\n", dst->reg.data_type); + shader_addline(buffer, "%s%s = %s(", + glsl_dst.reg_name, glsl_dst.mask_str, shift_glsl_tab[dst->shift]); + break; + } + } return mask; } @@ -1670,7 +1867,7 @@ static void shader_glsl_get_sample_function(const struct wined3d_shader_context { enum wined3d_sampler_texture_type sampler_type = ctx->reg_maps->sampler_type[sampler_idx]; const struct wined3d_gl_info *gl_info = ctx->gl_info; - BOOL shadow = shader_is_pshader_version(ctx->reg_maps->shader_version.type) + BOOL shadow = ctx->reg_maps->shader_version.type == WINED3D_SHADER_TYPE_PIXEL && (((const struct shader_glsl_ctx_priv *)ctx->backend_data)->cur_ps_args->shadow & (1 << sampler_idx)); BOOL projected = flags & WINED3D_GLSL_SAMPLE_PROJECTED; BOOL texrect = flags & WINED3D_GLSL_SAMPLE_RECT; @@ -1949,22 +2146,20 @@ static void shader_glsl_append_fixup_arg(char *arguments, const char *reg_name, if (sign_fixup) strcat(arguments, " * 2.0 - 1.0"); } -static void shader_glsl_color_correction(const struct wined3d_shader_instruction *ins, struct color_fixup_desc fixup) +static void shader_glsl_color_correction_ext(struct wined3d_shader_buffer *buffer, + const char *reg_name, DWORD mask, struct color_fixup_desc fixup) { - struct wined3d_shader_dst_param dst; unsigned int mask_size, remaining; - struct glsl_dst_param dst_param; + DWORD fixup_mask = 0; char arguments[256]; - DWORD mask; + char mask_str[6]; - mask = 0; - if (fixup.x_sign_fixup || fixup.x_source != CHANNEL_SOURCE_X) mask |= WINED3DSP_WRITEMASK_0; - if (fixup.y_sign_fixup || fixup.y_source != CHANNEL_SOURCE_Y) mask |= WINED3DSP_WRITEMASK_1; - if (fixup.z_sign_fixup || fixup.z_source != CHANNEL_SOURCE_Z) mask |= WINED3DSP_WRITEMASK_2; - if (fixup.w_sign_fixup || fixup.w_source != CHANNEL_SOURCE_W) mask |= WINED3DSP_WRITEMASK_3; - mask &= ins->dst[0].write_mask; - - if (!mask) return; /* Nothing to do */ + if (fixup.x_sign_fixup || fixup.x_source != CHANNEL_SOURCE_X) fixup_mask |= WINED3DSP_WRITEMASK_0; + if (fixup.y_sign_fixup || fixup.y_source != CHANNEL_SOURCE_Y) fixup_mask |= WINED3DSP_WRITEMASK_1; + if (fixup.z_sign_fixup || fixup.z_source != CHANNEL_SOURCE_Z) fixup_mask |= WINED3DSP_WRITEMASK_2; + if (fixup.w_sign_fixup || fixup.w_source != CHANNEL_SOURCE_W) fixup_mask |= WINED3DSP_WRITEMASK_3; + if (!(mask &= fixup_mask)) + return; if (is_complex_fixup(fixup)) { @@ -1973,51 +2168,52 @@ static void shader_glsl_color_correction(const struct wined3d_shader_instruction return; } + shader_glsl_write_mask_to_str(mask, mask_str); mask_size = shader_glsl_get_write_mask_size(mask); - dst = ins->dst[0]; - dst.write_mask = mask; - shader_glsl_add_dst_param(ins, &dst, &dst_param); - arguments[0] = '\0'; remaining = mask_size; if (mask & WINED3DSP_WRITEMASK_0) { - shader_glsl_append_fixup_arg(arguments, dst_param.reg_name, fixup.x_sign_fixup, fixup.x_source); + shader_glsl_append_fixup_arg(arguments, reg_name, fixup.x_sign_fixup, fixup.x_source); if (--remaining) strcat(arguments, ", "); } if (mask & WINED3DSP_WRITEMASK_1) { - shader_glsl_append_fixup_arg(arguments, dst_param.reg_name, fixup.y_sign_fixup, fixup.y_source); + shader_glsl_append_fixup_arg(arguments, reg_name, fixup.y_sign_fixup, fixup.y_source); if (--remaining) strcat(arguments, ", "); } if (mask & WINED3DSP_WRITEMASK_2) { - shader_glsl_append_fixup_arg(arguments, dst_param.reg_name, fixup.z_sign_fixup, fixup.z_source); + shader_glsl_append_fixup_arg(arguments, reg_name, fixup.z_sign_fixup, fixup.z_source); if (--remaining) strcat(arguments, ", "); } if (mask & WINED3DSP_WRITEMASK_3) { - shader_glsl_append_fixup_arg(arguments, dst_param.reg_name, fixup.w_sign_fixup, fixup.w_source); + shader_glsl_append_fixup_arg(arguments, reg_name, fixup.w_sign_fixup, fixup.w_source); if (--remaining) strcat(arguments, ", "); } if (mask_size > 1) - { - shader_addline(ins->ctx->buffer, "%s%s = vec%u(%s);\n", - dst_param.reg_name, dst_param.mask_str, mask_size, arguments); - } + shader_addline(buffer, "%s%s = vec%u(%s);\n", reg_name, mask_str, mask_size, arguments); else - { - shader_addline(ins->ctx->buffer, "%s%s = %s;\n", dst_param.reg_name, dst_param.mask_str, arguments); - } + shader_addline(buffer, "%s%s = %s;\n", reg_name, mask_str, arguments); +} + +static void shader_glsl_color_correction(const struct wined3d_shader_instruction *ins, struct color_fixup_desc fixup) +{ + char reg_name[256]; + BOOL is_color; + + shader_glsl_get_register_name(&ins->dst[0].reg, reg_name, &is_color, ins); + shader_glsl_color_correction_ext(ins->ctx->buffer, reg_name, ins->dst[0].write_mask, fixup); } static void PRINTF_ATTR(8, 9) shader_glsl_gen_sample_code(const struct wined3d_shader_instruction *ins, DWORD sampler, const struct glsl_sample_function *sample_function, DWORD swizzle, const char *dx, const char *dy, const char *bias, const char *coord_reg_fmt, ...) { - const char *sampler_base; + const struct wined3d_shader_version *version = &ins->ctx->reg_maps->shader_version; char dst_swizzle[6]; struct color_fixup_desc fixup; BOOL np2_fixup = FALSE; @@ -2025,11 +2221,10 @@ static void PRINTF_ATTR(8, 9) shader_glsl_gen_sample_code(const struct wined3d_s shader_glsl_swizzle_to_str(swizzle, FALSE, ins->dst[0].write_mask, dst_swizzle); - if (shader_is_pshader_version(ins->ctx->reg_maps->shader_version.type)) + if (version->type == WINED3D_SHADER_TYPE_PIXEL) { const struct shader_glsl_ctx_priv *priv = ins->ctx->backend_data; fixup = priv->cur_ps_args->color_fixup[sampler]; - sampler_base = "Psampler"; if(priv->cur_ps_args->np2_fixup & (1 << sampler)) { if(bias) { @@ -2038,14 +2233,16 @@ static void PRINTF_ATTR(8, 9) shader_glsl_gen_sample_code(const struct wined3d_s np2_fixup = TRUE; } } - } else { - sampler_base = "Vsampler"; + } + else + { fixup = COLOR_FIXUP_IDENTITY; /* FIXME: Vshader color fixup */ } shader_glsl_append_dst(ins->ctx->buffer, ins); - shader_addline(ins->ctx->buffer, "%s(%s%u, ", sample_function->name, sampler_base, sampler); + shader_addline(ins->ctx->buffer, "%s(%s_sampler%u, ", + sample_function->name, shader_glsl_get_prefix(version->type), sampler); va_start(args, coord_reg_fmt); shader_vaddline(ins->ctx->buffer, coord_reg_fmt, args); @@ -2058,7 +2255,7 @@ static void PRINTF_ATTR(8, 9) shader_glsl_gen_sample_code(const struct wined3d_s const struct shader_glsl_ctx_priv *priv = ins->ctx->backend_data; const unsigned char idx = priv->cur_np2fixup_info->idx[sampler]; - shader_addline(ins->ctx->buffer, " * PsamplerNP2Fixup[%u].%s)%s);\n", idx >> 1, + shader_addline(ins->ctx->buffer, " * ps_samplerNP2Fixup[%u].%s)%s);\n", idx >> 1, (idx % 2) ? "zw" : "xy", dst_swizzle); } else if(dx && dy) { shader_addline(ins->ctx->buffer, ", %s, %s)%s);\n", dx, dy, dst_swizzle); @@ -2076,23 +2273,27 @@ static void PRINTF_ATTR(8, 9) shader_glsl_gen_sample_code(const struct wined3d_s * Begin processing individual instruction opcodes ****************************************************************************/ -/* Generate GLSL arithmetic functions (dst = src1 + src2) */ -static void shader_glsl_arith(const struct wined3d_shader_instruction *ins) +static void shader_glsl_binop(const struct wined3d_shader_instruction *ins) { struct wined3d_shader_buffer *buffer = ins->ctx->buffer; struct glsl_src_param src0_param; struct glsl_src_param src1_param; DWORD write_mask; - char op; + const char *op; /* Determine the GLSL operator to use based on the opcode */ switch (ins->handler_idx) { - case WINED3DSIH_MUL: op = '*'; break; - case WINED3DSIH_ADD: op = '+'; break; - case WINED3DSIH_SUB: op = '-'; break; + case WINED3DSIH_ADD: op = "+"; break; + case WINED3DSIH_AND: op = "&"; break; + case WINED3DSIH_DIV: op = "/"; break; + case WINED3DSIH_IADD: op = "+"; break; + case WINED3DSIH_MUL: op = "*"; break; + case WINED3DSIH_SUB: op = "-"; break; + case WINED3DSIH_USHR: op = ">>"; break; + case WINED3DSIH_XOR: op = "^"; break; default: - op = ' '; + op = ""; FIXME("Opcode %#x not yet handled in GLSL\n", ins->handler_idx); break; } @@ -2100,7 +2301,124 @@ static void shader_glsl_arith(const struct wined3d_shader_instruction *ins) write_mask = shader_glsl_append_dst(buffer, ins); shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param); shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param); - shader_addline(buffer, "%s %c %s);\n", src0_param.param_str, op, src1_param.param_str); + shader_addline(buffer, "%s %s %s);\n", src0_param.param_str, op, src1_param.param_str); +} + +static void shader_glsl_relop(const struct wined3d_shader_instruction *ins) +{ + struct wined3d_shader_buffer *buffer = ins->ctx->buffer; + struct glsl_src_param src0_param; + struct glsl_src_param src1_param; + unsigned int mask_size; + DWORD write_mask; + const char *op; + + write_mask = shader_glsl_append_dst(buffer, ins); + mask_size = shader_glsl_get_write_mask_size(write_mask); + shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param); + shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param); + + if (mask_size > 1) + { + switch (ins->handler_idx) + { + case WINED3DSIH_EQ: op = "equal"; break; + case WINED3DSIH_GE: op = "greaterThanEqual"; break; + case WINED3DSIH_IGE: op = "greaterThanEqual"; break; + case WINED3DSIH_LT: op = "lessThan"; break; + default: + op = ""; + ERR("Unhandled opcode %#x.\n", ins->handler_idx); + break; + } + + shader_addline(buffer, "uvec%u(%s(%s, %s)) * 0xffffffffu);\n", + mask_size, op, src0_param.param_str, src1_param.param_str); + } + else + { + switch (ins->handler_idx) + { + case WINED3DSIH_EQ: op = "=="; break; + case WINED3DSIH_GE: op = ">="; break; + case WINED3DSIH_IGE: op = ">="; break; + case WINED3DSIH_LT: op = "<"; break; + default: + op = ""; + ERR("Unhandled opcode %#x.\n", ins->handler_idx); + break; + } + + shader_addline(buffer, "%s %s %s ? 0xffffffffu : 0u);\n", + src0_param.param_str, op, src1_param.param_str); + } +} + +static void shader_glsl_imul(const struct wined3d_shader_instruction *ins) +{ + struct wined3d_shader_buffer *buffer = ins->ctx->buffer; + struct glsl_src_param src0_param; + struct glsl_src_param src1_param; + DWORD write_mask; + + /* If we have ARB_gpu_shader5 or GLSL 4.0, we can use imulExtended(). If + * not, we can emulate it. */ + if (ins->dst[0].reg.type != WINED3DSPR_NULL) + FIXME("64-bit integer multiplies not implemented.\n"); + + if (ins->dst[1].reg.type != WINED3DSPR_NULL) + { + write_mask = shader_glsl_append_dst_ext(buffer, ins, &ins->dst[1]); + shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param); + shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param); + + shader_addline(ins->ctx->buffer, "%s * %s);\n", + src0_param.param_str, src1_param.param_str); + } +} + +static void shader_glsl_udiv(const struct wined3d_shader_instruction *ins) +{ + struct wined3d_shader_buffer *buffer = ins->ctx->buffer; + struct glsl_src_param src0_param, src1_param; + DWORD write_mask; + + if (ins->dst[0].reg.type != WINED3DSPR_NULL) + { + + if (ins->dst[1].reg.type != WINED3DSPR_NULL) + { + char dst_mask[6]; + + write_mask = shader_glsl_get_write_mask(&ins->dst[0], dst_mask); + shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param); + shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param); + shader_addline(buffer, "tmp0%s = %s / %s;\n", + dst_mask, src0_param.param_str, src1_param.param_str); + + write_mask = shader_glsl_append_dst_ext(buffer, ins, &ins->dst[1]); + shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param); + shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param); + shader_addline(buffer, "%s %% %s));\n", src0_param.param_str, src1_param.param_str); + + shader_glsl_append_dst_ext(buffer, ins, &ins->dst[0]); + shader_addline(buffer, "tmp0%s);\n", dst_mask); + } + else + { + write_mask = shader_glsl_append_dst_ext(buffer, ins, &ins->dst[0]); + shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param); + shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param); + shader_addline(buffer, "%s / %s);\n", src0_param.param_str, src1_param.param_str); + } + } + else if (ins->dst[1].reg.type != WINED3DSPR_NULL) + { + write_mask = shader_glsl_append_dst_ext(buffer, ins, &ins->dst[1]); + shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param); + shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param); + shader_addline(buffer, "%s %% %s);\n", src0_param.param_str, src1_param.param_str); + } } /* Process the WINED3DSIO_MOV opcode using GLSL (dst = src) */ @@ -2117,7 +2435,7 @@ static void shader_glsl_mov(const struct wined3d_shader_instruction *ins) /* In vs_1_1 WINED3DSIO_MOV can write to the address register. In later * shader versions WINED3DSIO_MOVA is used for this. */ if (ins->ctx->reg_maps->shader_version.major == 1 - && !shader_is_pshader_version(ins->ctx->reg_maps->shader_version.type) + && ins->ctx->reg_maps->shader_version.type == WINED3D_SHADER_TYPE_VERTEX && ins->dst[0].reg.type == WINED3DSPR_ADDR) { /* This is a simple floor() */ @@ -2202,6 +2520,11 @@ static void shader_glsl_cross(const struct wined3d_shader_instruction *ins) shader_addline(ins->ctx->buffer, "cross(%s, %s)%s);\n", src0_param.param_str, src1_param.param_str, dst_mask); } +static void shader_glsl_cut(const struct wined3d_shader_instruction *ins) +{ + shader_addline(ins->ctx->buffer, "EndPrimitive();\n"); +} + /* Process the WINED3DSIO_POW instruction in GLSL (dst = |src0|^src1) * Src0 and src1 are scalars. Note that D3D uses the absolute of src0, while * GLSL uses the value as-is. */ @@ -2278,6 +2601,7 @@ static void shader_glsl_map2gl(const struct wined3d_shader_instruction *ins) case WINED3DSIH_EXP: instruction = "exp2"; break; case WINED3DSIH_DSX: instruction = "dFdx"; break; case WINED3DSIH_DSY: instruction = "ycorrection.y * dFdy"; break; + case WINED3DSIH_ROUND_NI: instruction = "floor"; break; default: instruction = ""; FIXME("Opcode %#x not yet handled in GLSL\n", ins->handler_idx); break; @@ -2301,6 +2625,8 @@ static void shader_glsl_map2gl(const struct wined3d_shader_instruction *ins) shader_addline(buffer, "));\n"); } +static void shader_glsl_nop(const struct wined3d_shader_instruction *ins) {} + static void shader_glsl_nrm(const struct wined3d_shader_instruction *ins) { struct wined3d_shader_buffer *buffer = ins->ctx->buffer; @@ -2371,6 +2697,40 @@ static void shader_glsl_expp(const struct wined3d_shader_instruction *ins) } } +static void shader_glsl_to_int(const struct wined3d_shader_instruction *ins) +{ + struct wined3d_shader_buffer *buffer = ins->ctx->buffer; + struct glsl_src_param src_param; + unsigned int mask_size; + DWORD write_mask; + + write_mask = shader_glsl_append_dst(buffer, ins); + mask_size = shader_glsl_get_write_mask_size(write_mask); + shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src_param); + + if (mask_size > 1) + shader_addline(buffer, "ivec%u(%s));\n", mask_size, src_param.param_str); + else + shader_addline(buffer, "int(%s));\n", src_param.param_str); +} + +static void shader_glsl_to_float(const struct wined3d_shader_instruction *ins) +{ + struct wined3d_shader_buffer *buffer = ins->ctx->buffer; + struct glsl_src_param src_param; + unsigned int mask_size; + DWORD write_mask; + + write_mask = shader_glsl_append_dst(buffer, ins); + mask_size = shader_glsl_get_write_mask_size(write_mask); + shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src_param); + + if (mask_size > 1) + shader_addline(buffer, "vec%u(%s));\n", mask_size, src_param.param_str); + else + shader_addline(buffer, "float(%s));\n", src_param.param_str); +} + /** Process the RCP (reciprocal or inverse) opcode in GLSL (dst = 1 / src) */ static void shader_glsl_rcp(const struct wined3d_shader_instruction *ins) { @@ -2469,79 +2829,108 @@ static void shader_glsl_compare(const struct wined3d_shader_instruction *ins) } } -/** Process CMP instruction in GLSL (dst = src0 >= 0.0 ? src1 : src2), per channel */ -static void shader_glsl_cmp(const struct wined3d_shader_instruction *ins) +static void shader_glsl_conditional_move(const struct wined3d_shader_instruction *ins) { + const char *condition_prefix, *condition_suffix; + struct wined3d_shader_dst_param dst; struct glsl_src_param src0_param; struct glsl_src_param src1_param; struct glsl_src_param src2_param; - DWORD write_mask, cmp_channel = 0; + BOOL temp_destination = FALSE; + DWORD cmp_channel = 0; unsigned int i, j; char mask_char[6]; - BOOL temp_destination = FALSE; + DWORD write_mask; - if (shader_is_scalar(&ins->src[0].reg)) + switch (ins->handler_idx) + { + case WINED3DSIH_CMP: + condition_prefix = ""; + condition_suffix = " >= 0.0"; + break; + + case WINED3DSIH_CND: + condition_prefix = ""; + condition_suffix = " > 0.5"; + break; + + case WINED3DSIH_MOVC: + condition_prefix = "bool("; + condition_suffix = ")"; + break; + + default: + FIXME("Unhandled instruction %#x.\n", ins->handler_idx); + condition_prefix = ""; + condition_suffix = ""; + break; + } + + if (shader_is_scalar(&ins->dst[0].reg) || shader_is_scalar(&ins->src[0].reg)) { write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins); - - shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_ALL, &src0_param); + shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param); shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param); shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param); - shader_addline(ins->ctx->buffer, "%s >= 0.0 ? %s : %s);\n", - src0_param.param_str, src1_param.param_str, src2_param.param_str); - } else { - DWORD dst_mask = ins->dst[0].write_mask; - struct wined3d_shader_dst_param dst = ins->dst[0]; - - /* Cycle through all source0 channels */ - for (i=0; i<4; i++) { - write_mask = 0; - /* Find the destination channels which use the current source0 channel */ - for (j=0; j<4; j++) { - if (((ins->src[0].swizzle >> (2 * j)) & 0x3) == i) - { - write_mask |= WINED3DSP_WRITEMASK_0 << j; - cmp_channel = WINED3DSP_WRITEMASK_0 << j; - } - } - dst.write_mask = dst_mask & write_mask; - - /* Splitting the cmp instruction up in multiple lines imposes a problem: - * The first lines may overwrite source parameters of the following lines. - * Deal with that by using a temporary destination register if needed - */ - if ((ins->src[0].reg.idx == ins->dst[0].reg.idx - && ins->src[0].reg.type == ins->dst[0].reg.type) - || (ins->src[1].reg.idx == ins->dst[0].reg.idx - && ins->src[1].reg.type == ins->dst[0].reg.type) - || (ins->src[2].reg.idx == ins->dst[0].reg.idx - && ins->src[2].reg.type == ins->dst[0].reg.type)) - { - write_mask = shader_glsl_get_write_mask(&dst, mask_char); - if (!write_mask) continue; - shader_addline(ins->ctx->buffer, "tmp0%s = (", mask_char); - temp_destination = TRUE; - } else { - write_mask = shader_glsl_append_dst_ext(ins->ctx->buffer, ins, &dst); - if (!write_mask) continue; - } - - shader_glsl_add_src_param(ins, &ins->src[0], cmp_channel, &src0_param); - shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param); - shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param); - - shader_addline(ins->ctx->buffer, "%s >= 0.0 ? %s : %s);\n", - src0_param.param_str, src1_param.param_str, src2_param.param_str); - } - - if(temp_destination) { - shader_glsl_get_write_mask(&ins->dst[0], mask_char); - shader_glsl_append_dst(ins->ctx->buffer, ins); - shader_addline(ins->ctx->buffer, "tmp0%s);\n", mask_char); - } + shader_addline(ins->ctx->buffer, "%s%s%s ? %s : %s);\n", + condition_prefix, src0_param.param_str, condition_suffix, + src1_param.param_str, src2_param.param_str); + return; } + dst = ins->dst[0]; + + /* Splitting the instruction up in multiple lines imposes a problem: + * The first lines may overwrite source parameters of the following lines. + * Deal with that by using a temporary destination register if needed. */ + if ((ins->src[0].reg.idx[0].offset == dst.reg.idx[0].offset + && ins->src[0].reg.type == dst.reg.type) + || (ins->src[1].reg.idx[0].offset == dst.reg.idx[0].offset + && ins->src[1].reg.type == dst.reg.type) + || (ins->src[2].reg.idx[0].offset == dst.reg.idx[0].offset + && ins->src[2].reg.type == dst.reg.type)) + temp_destination = TRUE; + + /* Cycle through all source0 channels. */ + for (i = 0; i < 4; ++i) + { + write_mask = 0; + /* Find the destination channels which use the current source0 channel. */ + for (j = 0; j < 4; ++j) + { + if (((ins->src[0].swizzle >> (2 * j)) & 0x3) == i) + { + write_mask |= WINED3DSP_WRITEMASK_0 << j; + cmp_channel = WINED3DSP_WRITEMASK_0 << j; + } + } + dst.write_mask = ins->dst[0].write_mask & write_mask; + + if (temp_destination) + { + if (!(write_mask = shader_glsl_get_write_mask(&dst, mask_char))) + continue; + shader_addline(ins->ctx->buffer, "tmp0%s = (", mask_char); + } + else if (!(write_mask = shader_glsl_append_dst_ext(ins->ctx->buffer, ins, &dst))) + continue; + + shader_glsl_add_src_param(ins, &ins->src[0], cmp_channel, &src0_param); + shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param); + shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param); + + shader_addline(ins->ctx->buffer, "%s%s%s ? %s : %s);\n", + condition_prefix, src0_param.param_str, condition_suffix, + src1_param.param_str, src2_param.param_str); + } + + if (temp_destination) + { + shader_glsl_get_write_mask(&ins->dst[0], mask_char); + shader_glsl_append_dst(ins->ctx->buffer, ins); + shader_addline(ins->ctx->buffer, "tmp0%s);\n", mask_char); + } } /** Process the CND opcode in GLSL (dst = (src0 > 0.5) ? src1 : src2) */ @@ -2549,13 +2938,10 @@ static void shader_glsl_cmp(const struct wined3d_shader_instruction *ins) * the compare is done per component of src0. */ static void shader_glsl_cnd(const struct wined3d_shader_instruction *ins) { - struct wined3d_shader_dst_param dst; struct glsl_src_param src0_param; struct glsl_src_param src1_param; struct glsl_src_param src2_param; - DWORD write_mask, cmp_channel = 0; - unsigned int i, j; - DWORD dst_mask; + DWORD write_mask; DWORD shader_version = WINED3D_SHADER_VERSION(ins->ctx->reg_maps->shader_version.major, ins->ctx->reg_maps->shader_version.minor); @@ -2576,31 +2962,8 @@ static void shader_glsl_cnd(const struct wined3d_shader_instruction *ins) } return; } - /* Cycle through all source0 channels */ - dst_mask = ins->dst[0].write_mask; - dst = ins->dst[0]; - for (i=0; i<4; i++) { - write_mask = 0; - /* Find the destination channels which use the current source0 channel */ - for (j=0; j<4; j++) { - if (((ins->src[0].swizzle >> (2 * j)) & 0x3) == i) - { - write_mask |= WINED3DSP_WRITEMASK_0 << j; - cmp_channel = WINED3DSP_WRITEMASK_0 << j; - } - } - dst.write_mask = dst_mask & write_mask; - write_mask = shader_glsl_append_dst_ext(ins->ctx->buffer, ins, &dst); - if (!write_mask) continue; - - shader_glsl_add_src_param(ins, &ins->src[0], cmp_channel, &src0_param); - shader_glsl_add_src_param(ins, &ins->src[1], write_mask, &src1_param); - shader_glsl_add_src_param(ins, &ins->src[2], write_mask, &src2_param); - - shader_addline(ins->ctx->buffer, "%s > 0.5 ? %s : %s);\n", - src0_param.param_str, src1_param.param_str, src2_param.param_str); - } + shader_glsl_conditional_move(ins); } /** GLSL code generation for WINED3DSIO_MAD: Multiply the first 2 opcodes, then add the last */ @@ -2671,7 +3034,7 @@ static void shader_glsl_mnxn(const struct wined3d_shader_instruction *ins) { tmp_dst.write_mask = WINED3DSP_WRITEMASK_0 << i; shader_glsl_dot(&tmp_ins); - ++tmp_src[1].reg.idx; + ++tmp_src[1].reg.idx[0].offset; } } @@ -2788,28 +3151,68 @@ static void shader_glsl_dst(const struct wined3d_shader_instruction *ins) */ static void shader_glsl_sincos(const struct wined3d_shader_instruction *ins) { + struct wined3d_shader_buffer *buffer = ins->ctx->buffer; struct glsl_src_param src0_param; DWORD write_mask; - write_mask = shader_glsl_append_dst(ins->ctx->buffer, ins); - shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param); + if (ins->ctx->reg_maps->shader_version.major < 4) + { + shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param); - switch (write_mask) { - case WINED3DSP_WRITEMASK_0: - shader_addline(ins->ctx->buffer, "cos(%s));\n", src0_param.param_str); - break; + write_mask = shader_glsl_append_dst(buffer, ins); + switch (write_mask) + { + case WINED3DSP_WRITEMASK_0: + shader_addline(buffer, "cos(%s));\n", src0_param.param_str); + break; - case WINED3DSP_WRITEMASK_1: - shader_addline(ins->ctx->buffer, "sin(%s));\n", src0_param.param_str); - break; + case WINED3DSP_WRITEMASK_1: + shader_addline(buffer, "sin(%s));\n", src0_param.param_str); + break; - case (WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1): - shader_addline(ins->ctx->buffer, "vec2(cos(%s), sin(%s)));\n", src0_param.param_str, src0_param.param_str); - break; + case (WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1): + shader_addline(buffer, "vec2(cos(%s), sin(%s)));\n", + src0_param.param_str, src0_param.param_str); + break; - default: - ERR("Write mask should be .x, .y or .xy\n"); - break; + default: + ERR("Write mask should be .x, .y or .xy\n"); + break; + } + + return; + } + + if (ins->dst[0].reg.type != WINED3DSPR_NULL) + { + + if (ins->dst[1].reg.type != WINED3DSPR_NULL) + { + char dst_mask[6]; + + write_mask = shader_glsl_get_write_mask(&ins->dst[0], dst_mask); + shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param); + shader_addline(buffer, "tmp0%s = sin(%s);\n", dst_mask, src0_param.param_str); + + write_mask = shader_glsl_append_dst_ext(buffer, ins, &ins->dst[1]); + shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param); + shader_addline(buffer, "cos(%s));\n", src0_param.param_str); + + shader_glsl_append_dst_ext(buffer, ins, &ins->dst[0]); + shader_addline(buffer, "tmp0%s);\n", dst_mask); + } + else + { + write_mask = shader_glsl_append_dst_ext(buffer, ins, &ins->dst[0]); + shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param); + shader_addline(buffer, "sin(%s));\n", src0_param.param_str); + } + } + else if (ins->dst[1].reg.type != WINED3DSPR_NULL) + { + write_mask = shader_glsl_append_dst_ext(buffer, ins, &ins->dst[1]); + shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src0_param); + shader_addline(buffer, "cos(%s));\n", src0_param.param_str); } } @@ -2837,68 +3240,78 @@ static void shader_glsl_sgn(const struct wined3d_shader_instruction *ins) static void shader_glsl_loop(const struct wined3d_shader_instruction *ins) { struct wined3d_shader_loop_state *loop_state = ins->ctx->loop_state; + struct wined3d_shader_buffer *buffer = ins->ctx->buffer; const struct wined3d_shader *shader = ins->ctx->shader; const struct wined3d_shader_lconst *constant; struct glsl_src_param src1_param; const DWORD *control_values = NULL; - shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_ALL, &src1_param); - - /* Try to hardcode the loop control parameters if possible. Direct3D 9 class hardware doesn't support real - * varying indexing, but Microsoft designed this feature for Shader model 2.x+. If the loop control is - * known at compile time, the GLSL compiler can unroll the loop, and replace indirect addressing with direct - * addressing. - */ - if (ins->src[1].reg.type == WINED3DSPR_CONSTINT) + if (ins->ctx->reg_maps->shader_version.major < 4) { - LIST_FOR_EACH_ENTRY(constant, &shader->constantsI, struct wined3d_shader_lconst, entry) + shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_ALL, &src1_param); + + /* Try to hardcode the loop control parameters if possible. Direct3D 9 + * class hardware doesn't support real varying indexing, but Microsoft + * designed this feature for Shader model 2.x+. If the loop control is + * known at compile time, the GLSL compiler can unroll the loop, and + * replace indirect addressing with direct addressing. */ + if (ins->src[1].reg.type == WINED3DSPR_CONSTINT) { - if (constant->idx == ins->src[1].reg.idx) + LIST_FOR_EACH_ENTRY(constant, &shader->constantsI, struct wined3d_shader_lconst, entry) { - control_values = constant->value; - break; + if (constant->idx == ins->src[1].reg.idx[0].offset) + { + control_values = constant->value; + break; + } } } - } - if (control_values) - { - struct wined3d_shader_loop_control loop_control; - loop_control.count = control_values[0]; - loop_control.start = control_values[1]; - loop_control.step = (int)control_values[2]; + if (control_values) + { + struct wined3d_shader_loop_control loop_control; + loop_control.count = control_values[0]; + loop_control.start = control_values[1]; + loop_control.step = (int)control_values[2]; - if (loop_control.step > 0) - { - shader_addline(ins->ctx->buffer, "for (aL%u = %u; aL%u < (%u * %d + %u); aL%u += %d) {\n", - loop_state->current_depth, loop_control.start, - loop_state->current_depth, loop_control.count, loop_control.step, loop_control.start, - loop_state->current_depth, loop_control.step); - } - else if (loop_control.step < 0) - { - shader_addline(ins->ctx->buffer, "for (aL%u = %u; aL%u > (%u * %d + %u); aL%u += %d) {\n", - loop_state->current_depth, loop_control.start, - loop_state->current_depth, loop_control.count, loop_control.step, loop_control.start, - loop_state->current_depth, loop_control.step); + if (loop_control.step > 0) + { + shader_addline(buffer, "for (aL%u = %u; aL%u < (%u * %d + %u); aL%u += %d)\n{\n", + loop_state->current_depth, loop_control.start, + loop_state->current_depth, loop_control.count, loop_control.step, loop_control.start, + loop_state->current_depth, loop_control.step); + } + else if (loop_control.step < 0) + { + shader_addline(buffer, "for (aL%u = %u; aL%u > (%u * %d + %u); aL%u += %d)\n{\n", + loop_state->current_depth, loop_control.start, + loop_state->current_depth, loop_control.count, loop_control.step, loop_control.start, + loop_state->current_depth, loop_control.step); + } + else + { + shader_addline(buffer, "for (aL%u = %u, tmpInt%u = 0; tmpInt%u < %u; tmpInt%u++)\n{\n", + loop_state->current_depth, loop_control.start, loop_state->current_depth, + loop_state->current_depth, loop_control.count, + loop_state->current_depth); + } } else { - shader_addline(ins->ctx->buffer, "for (aL%u = %u, tmpInt%u = 0; tmpInt%u < %u; tmpInt%u++) {\n", - loop_state->current_depth, loop_control.start, loop_state->current_depth, - loop_state->current_depth, loop_control.count, - loop_state->current_depth); + shader_addline(buffer, "for (tmpInt%u = 0, aL%u = %s.y; tmpInt%u < %s.x; tmpInt%u++, aL%u += %s.z)\n{\n", + loop_state->current_depth, loop_state->current_reg, + src1_param.reg_name, loop_state->current_depth, src1_param.reg_name, + loop_state->current_depth, loop_state->current_reg, src1_param.reg_name); } - } else { - shader_addline(ins->ctx->buffer, - "for (tmpInt%u = 0, aL%u = %s.y; tmpInt%u < %s.x; tmpInt%u++, aL%u += %s.z) {\n", - loop_state->current_depth, loop_state->current_reg, - src1_param.reg_name, loop_state->current_depth, src1_param.reg_name, - loop_state->current_depth, loop_state->current_reg, src1_param.reg_name); + + ++loop_state->current_reg; + } + else + { + shader_addline(buffer, "for (;;)\n{\n"); } ++loop_state->current_depth; - ++loop_state->current_reg; } static void shader_glsl_end(const struct wined3d_shader_instruction *ins) @@ -2932,7 +3345,7 @@ static void shader_glsl_rep(const struct wined3d_shader_instruction *ins) { LIST_FOR_EACH_ENTRY(constant, &shader->constantsI, struct wined3d_shader_lconst, entry) { - if (constant->idx == ins->src[0].reg.idx) + if (constant->idx == ins->src[0].reg.idx[0].offset) { control_values = constant->value; break; @@ -2982,6 +3395,11 @@ static void shader_glsl_else(const struct wined3d_shader_instruction *ins) shader_addline(ins->ctx->buffer, "} else {\n"); } +static void shader_glsl_emit(const struct wined3d_shader_instruction *ins) +{ + shader_addline(ins->ctx->buffer, "EmitVertex();\n"); +} + static void shader_glsl_break(const struct wined3d_shader_instruction *ins) { shader_addline(ins->ctx->buffer, "break;\n"); @@ -3000,15 +3418,23 @@ static void shader_glsl_breakc(const struct wined3d_shader_instruction *ins) src0_param.param_str, shader_glsl_get_rel_op(ins->flags), src1_param.param_str); } +static void shader_glsl_breakp(const struct wined3d_shader_instruction *ins) +{ + struct glsl_src_param src_param; + + shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src_param); + shader_addline(ins->ctx->buffer, "if (bool(%s)) break;\n", src_param.param_str); +} + static void shader_glsl_label(const struct wined3d_shader_instruction *ins) { shader_addline(ins->ctx->buffer, "}\n"); - shader_addline(ins->ctx->buffer, "void subroutine%u () {\n", ins->src[0].reg.idx); + shader_addline(ins->ctx->buffer, "void subroutine%u()\n{\n", ins->src[0].reg.idx[0].offset); } static void shader_glsl_call(const struct wined3d_shader_instruction *ins) { - shader_addline(ins->ctx->buffer, "subroutine%u();\n", ins->src[0].reg.idx); + shader_addline(ins->ctx->buffer, "subroutine%u();\n", ins->src[0].reg.idx[0].offset); } static void shader_glsl_callnz(const struct wined3d_shader_instruction *ins) @@ -3016,7 +3442,8 @@ static void shader_glsl_callnz(const struct wined3d_shader_instruction *ins) struct glsl_src_param src1_param; shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_0, &src1_param); - shader_addline(ins->ctx->buffer, "if (%s) subroutine%u();\n", src1_param.param_str, ins->src[0].reg.idx); + shader_addline(ins->ctx->buffer, "if (%s) subroutine%u();\n", + src1_param.param_str, ins->src[0].reg.idx[0].offset); } static void shader_glsl_ret(const struct wined3d_shader_instruction *ins) @@ -3043,8 +3470,10 @@ static void shader_glsl_tex(const struct wined3d_shader_instruction *ins) /* 1.0-1.4: Use destination register as sampler source. * 2.0+: Use provided sampler source. */ - if (shader_version < WINED3D_SHADER_VERSION(2,0)) sampler_idx = ins->dst[0].reg.idx; - else sampler_idx = ins->src[1].reg.idx; + if (shader_version < WINED3D_SHADER_VERSION(2,0)) + sampler_idx = ins->dst[0].reg.idx[0].offset; + else + sampler_idx = ins->src[1].reg.idx[0].offset; texture = device->stateBlock->state.textures[sampler_idx]; if (shader_version < WINED3D_SHADER_VERSION(1,4)) @@ -3150,7 +3579,7 @@ static void shader_glsl_texldd(const struct wined3d_shader_instruction *ins) return; } - sampler_idx = ins->src[1].reg.idx; + sampler_idx = ins->src[1].reg.idx[0].offset; texture = device->stateBlock->state.textures[sampler_idx]; if (texture && texture->target == GL_TEXTURE_RECTANGLE_ARB) sample_flags |= WINED3D_GLSL_SAMPLE_RECT; @@ -3176,7 +3605,7 @@ static void shader_glsl_texldl(const struct wined3d_shader_instruction *ins) DWORD swizzle = ins->src[1].swizzle; const struct wined3d_texture *texture; - sampler_idx = ins->src[1].reg.idx; + sampler_idx = ins->src[1].reg.idx[0].offset; texture = device->stateBlock->state.textures[sampler_idx]; if (texture && texture->target == GL_TEXTURE_RECTANGLE_ARB) sample_flags |= WINED3D_GLSL_SAMPLE_RECT; @@ -3187,7 +3616,7 @@ static void shader_glsl_texldl(const struct wined3d_shader_instruction *ins) shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &lod_param); if (!gl_info->supported[ARB_SHADER_TEXTURE_LOD] && !gl_info->supported[EXT_GPU_SHADER4] - && shader_is_pshader_version(ins->ctx->reg_maps->shader_version.type)) + && ins->ctx->reg_maps->shader_version.type == WINED3D_SHADER_TYPE_PIXEL) { /* Plain GLSL only supports Lod sampling functions in vertex shaders. * However, the NVIDIA drivers allow them in fragment shaders as well, @@ -3210,12 +3639,12 @@ static void shader_glsl_texcoord(const struct wined3d_shader_instruction *ins) shader_glsl_get_write_mask(&ins->dst[0], dst_mask); shader_addline(buffer, "clamp(gl_TexCoord[%u], 0.0, 1.0)%s);\n", - ins->dst[0].reg.idx, dst_mask); + ins->dst[0].reg.idx[0].offset, dst_mask); } else { enum wined3d_shader_src_modifier src_mod = ins->src[0].modifiers; - DWORD reg = ins->src[0].reg.idx; + DWORD reg = ins->src[0].reg.idx[0].offset; char dst_swizzle[6]; shader_glsl_get_swizzle(&ins->src[0], FALSE, write_mask, dst_swizzle); @@ -3256,8 +3685,8 @@ static void shader_glsl_texcoord(const struct wined3d_shader_instruction *ins) * then perform a 1D texture lookup from stage dstregnum, place into dst. */ static void shader_glsl_texdp3tex(const struct wined3d_shader_instruction *ins) { - DWORD sampler_idx = ins->dst[0].reg.idx; DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2; + DWORD sampler_idx = ins->dst[0].reg.idx[0].offset; struct glsl_sample_function sample_function; struct glsl_src_param src0_param; UINT mask_size; @@ -3299,8 +3728,8 @@ static void shader_glsl_texdp3tex(const struct wined3d_shader_instruction *ins) * Take a 3-component dot product of the TexCoord[dstreg] and src. */ static void shader_glsl_texdp3(const struct wined3d_shader_instruction *ins) { - DWORD dstreg = ins->dst[0].reg.idx; DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2; + DWORD dstreg = ins->dst[0].reg.idx[0].offset; struct glsl_src_param src0_param; DWORD dst_mask; unsigned int mask_size; @@ -3342,7 +3771,7 @@ static void shader_glsl_texdepth(const struct wined3d_shader_instruction *ins) static void shader_glsl_texm3x2depth(const struct wined3d_shader_instruction *ins) { DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2; - DWORD dstreg = ins->dst[0].reg.idx; + DWORD dstreg = ins->dst[0].reg.idx[0].offset; struct glsl_src_param src0_param; shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param); @@ -3356,7 +3785,7 @@ static void shader_glsl_texm3x2depth(const struct wined3d_shader_instruction *in static void shader_glsl_texm3x2pad(const struct wined3d_shader_instruction *ins) { DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2; - DWORD reg = ins->dst[0].reg.idx; + DWORD reg = ins->dst[0].reg.idx[0].offset; struct wined3d_shader_buffer *buffer = ins->ctx->buffer; struct glsl_src_param src0_param; @@ -3369,9 +3798,9 @@ static void shader_glsl_texm3x2pad(const struct wined3d_shader_instruction *ins) static void shader_glsl_texm3x3pad(const struct wined3d_shader_instruction *ins) { DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2; - DWORD reg = ins->dst[0].reg.idx; struct wined3d_shader_buffer *buffer = ins->ctx->buffer; struct wined3d_shader_tex_mx *tex_mx = ins->ctx->tex_mx; + DWORD reg = ins->dst[0].reg.idx[0].offset; struct glsl_src_param src0_param; shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param); @@ -3382,9 +3811,9 @@ static void shader_glsl_texm3x3pad(const struct wined3d_shader_instruction *ins) static void shader_glsl_texm3x2tex(const struct wined3d_shader_instruction *ins) { DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2; - DWORD reg = ins->dst[0].reg.idx; struct wined3d_shader_buffer *buffer = ins->ctx->buffer; struct glsl_sample_function sample_function; + DWORD reg = ins->dst[0].reg.idx[0].offset; struct glsl_src_param src0_param; shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param); @@ -3403,8 +3832,8 @@ static void shader_glsl_texm3x3tex(const struct wined3d_shader_instruction *ins) DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2; struct wined3d_shader_tex_mx *tex_mx = ins->ctx->tex_mx; struct glsl_sample_function sample_function; + DWORD reg = ins->dst[0].reg.idx[0].offset; struct glsl_src_param src0_param; - DWORD reg = ins->dst[0].reg.idx; shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param); shader_addline(ins->ctx->buffer, "tmp0.z = dot(T%u.xyz, %s);\n", reg, src0_param.param_str); @@ -3424,9 +3853,9 @@ static void shader_glsl_texm3x3(const struct wined3d_shader_instruction *ins) { DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2; struct wined3d_shader_tex_mx *tex_mx = ins->ctx->tex_mx; + DWORD reg = ins->dst[0].reg.idx[0].offset; struct glsl_src_param src0_param; char dst_mask[6]; - DWORD reg = ins->dst[0].reg.idx; shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param); @@ -3443,11 +3872,11 @@ static void shader_glsl_texm3x3spec(const struct wined3d_shader_instruction *ins { struct glsl_src_param src0_param; struct glsl_src_param src1_param; - DWORD reg = ins->dst[0].reg.idx; struct wined3d_shader_buffer *buffer = ins->ctx->buffer; struct wined3d_shader_tex_mx *tex_mx = ins->ctx->tex_mx; DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2; struct glsl_sample_function sample_function; + DWORD reg = ins->dst[0].reg.idx[0].offset; char coord_mask[6]; shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param); @@ -3473,11 +3902,11 @@ static void shader_glsl_texm3x3spec(const struct wined3d_shader_instruction *ins * Perform the final texture lookup based on the previous 2 3x3 matrix multiplies */ static void shader_glsl_texm3x3vspec(const struct wined3d_shader_instruction *ins) { - DWORD reg = ins->dst[0].reg.idx; struct wined3d_shader_buffer *buffer = ins->ctx->buffer; struct wined3d_shader_tex_mx *tex_mx = ins->ctx->tex_mx; DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2; struct glsl_sample_function sample_function; + DWORD reg = ins->dst[0].reg.idx[0].offset; struct glsl_src_param src0_param; char coord_mask[6]; @@ -3516,7 +3945,7 @@ static void shader_glsl_texbem(const struct wined3d_shader_instruction *ins) DWORD flags; char coord_mask[6]; - sampler_idx = ins->dst[0].reg.idx; + sampler_idx = ins->dst[0].reg.idx[0].offset; flags = (priv->cur_ps_args->tex_transform >> sampler_idx * WINED3D_PSARGS_TEXTRANSFORM_SHIFT) & WINED3D_PSARGS_TEXTRANSFORM_MASK; @@ -3555,7 +3984,7 @@ static void shader_glsl_texbem(const struct wined3d_shader_instruction *ins) shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1, &coord_param); shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL, - "T%u%s + vec4(bumpenvmat%d * %s, 0.0, 0.0)%s", sampler_idx, coord_mask, sampler_idx, + "T%u%s + vec4(bumpenv_mat%u * %s, 0.0, 0.0)%s", sampler_idx, coord_mask, sampler_idx, coord_param.param_str, coord_mask); if (ins->handler_idx == WINED3DSIH_TEXBEML) @@ -3566,7 +3995,7 @@ static void shader_glsl_texbem(const struct wined3d_shader_instruction *ins) shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_2, &luminance_param); shader_glsl_add_dst_param(ins, &ins->dst[0], &dst_param); - shader_addline(ins->ctx->buffer, "%s%s *= (%s * luminancescale%d + luminanceoffset%d);\n", + shader_addline(ins->ctx->buffer, "%s%s *= (%s * bumpenv_lum_scale%u + bumpenv_lum_offset%u);\n", dst_param.reg_name, dst_param.mask_str, luminance_param.param_str, sampler_idx, sampler_idx); } @@ -3574,14 +4003,14 @@ static void shader_glsl_texbem(const struct wined3d_shader_instruction *ins) static void shader_glsl_bem(const struct wined3d_shader_instruction *ins) { + DWORD sampler_idx = ins->dst[0].reg.idx[0].offset; struct glsl_src_param src0_param, src1_param; - DWORD sampler_idx = ins->dst[0].reg.idx; shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1, &src0_param); shader_glsl_add_src_param(ins, &ins->src[1], WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1, &src1_param); shader_glsl_append_dst(ins->ctx->buffer, ins); - shader_addline(ins->ctx->buffer, "%s + bumpenvmat%d * %s);\n", + shader_addline(ins->ctx->buffer, "%s + bumpenv_mat%u * %s);\n", src0_param.param_str, sampler_idx, src1_param.param_str); } @@ -3589,9 +4018,9 @@ static void shader_glsl_bem(const struct wined3d_shader_instruction *ins) * Sample 2D texture at dst using the alpha & red (wx) components of src as texture coordinates */ static void shader_glsl_texreg2ar(const struct wined3d_shader_instruction *ins) { + DWORD sampler_idx = ins->dst[0].reg.idx[0].offset; struct glsl_sample_function sample_function; struct glsl_src_param src0_param; - DWORD sampler_idx = ins->dst[0].reg.idx; shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_ALL, &src0_param); @@ -3604,9 +4033,9 @@ static void shader_glsl_texreg2ar(const struct wined3d_shader_instruction *ins) * Sample 2D texture at dst using the green & blue (yz) components of src as texture coordinates */ static void shader_glsl_texreg2gb(const struct wined3d_shader_instruction *ins) { + DWORD sampler_idx = ins->dst[0].reg.idx[0].offset; struct glsl_sample_function sample_function; struct glsl_src_param src0_param; - DWORD sampler_idx = ins->dst[0].reg.idx; shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_ALL, &src0_param); @@ -3619,9 +4048,9 @@ static void shader_glsl_texreg2gb(const struct wined3d_shader_instruction *ins) * Sample texture at dst using the rgb (xyz) components of src as texture coordinates */ static void shader_glsl_texreg2rgb(const struct wined3d_shader_instruction *ins) { + DWORD sampler_idx = ins->dst[0].reg.idx[0].offset; struct glsl_sample_function sample_function; struct glsl_src_param src0_param; - DWORD sampler_idx = ins->dst[0].reg.idx; /* Dependent read, not valid with conditional NP2 */ shader_glsl_get_sample_function(ins->ctx, sampler_idx, 0, &sample_function); @@ -3702,27 +4131,27 @@ static void shader_glsl_input_pack(const struct wined3d_shader *shader, struct w if (shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_TEXCOORD)) { if (semantic_idx < 8 && vertexprocessing == pretransformed) - shader_addline(buffer, "IN[%u]%s = gl_TexCoord[%u]%s;\n", + shader_addline(buffer, "ps_in[%u]%s = gl_TexCoord[%u]%s;\n", shader->u.ps.input_reg_map[i], reg_mask, semantic_idx, reg_mask); else - shader_addline(buffer, "IN[%u]%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n", + shader_addline(buffer, "ps_in[%u]%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n", shader->u.ps.input_reg_map[i], reg_mask, reg_mask); } else if (shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_COLOR)) { if (!semantic_idx) - shader_addline(buffer, "IN[%u]%s = vec4(gl_Color)%s;\n", + shader_addline(buffer, "ps_in[%u]%s = vec4(gl_Color)%s;\n", shader->u.ps.input_reg_map[i], reg_mask, reg_mask); else if (semantic_idx == 1) - shader_addline(buffer, "IN[%u]%s = vec4(gl_SecondaryColor)%s;\n", + shader_addline(buffer, "ps_in[%u]%s = vec4(gl_SecondaryColor)%s;\n", shader->u.ps.input_reg_map[i], reg_mask, reg_mask); else - shader_addline(buffer, "IN[%u]%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n", + shader_addline(buffer, "ps_in[%u]%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n", shader->u.ps.input_reg_map[i], reg_mask, reg_mask); } else { - shader_addline(buffer, "IN[%u]%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n", + shader_addline(buffer, "ps_in[%u]%s = vec4(0.0, 0.0, 0.0, 0.0)%s;\n", shader->u.ps.input_reg_map[i], reg_mask, reg_mask); } } @@ -3736,10 +4165,9 @@ static void add_glsl_program_entry(struct shader_glsl_priv *priv, struct glsl_sh { struct glsl_program_key key; - key.vshader = entry->vshader; - key.pshader = entry->pshader; - key.vs_args = entry->vs_args; - key.ps_args = entry->ps_args; + key.vs_id = entry->vs.id; + key.gs_id = entry->gs.id; + key.ps_id = entry->ps.id; if (wine_rb_put(&priv->program_lookup, &key, &entry->program_lookup_entry) == -1) { @@ -3748,38 +4176,39 @@ static void add_glsl_program_entry(struct shader_glsl_priv *priv, struct glsl_sh } static struct glsl_shader_prog_link *get_glsl_program_entry(const struct shader_glsl_priv *priv, - const struct wined3d_shader *vshader, const struct wined3d_shader *pshader, - const struct vs_compile_args *vs_args, const struct ps_compile_args *ps_args) + GLhandleARB vs_id, GLhandleARB gs_id, GLhandleARB ps_id) { struct wine_rb_entry *entry; struct glsl_program_key key; - key.vshader = vshader; - key.pshader = pshader; - key.vs_args = *vs_args; - key.ps_args = *ps_args; + key.vs_id = vs_id; + key.gs_id = gs_id; + key.ps_id = ps_id; entry = wine_rb_get(&priv->program_lookup, &key); return entry ? WINE_RB_ENTRY_VALUE(entry, struct glsl_shader_prog_link, program_lookup_entry) : NULL; } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void delete_glsl_program_entry(struct shader_glsl_priv *priv, const struct wined3d_gl_info *gl_info, struct glsl_shader_prog_link *entry) { struct glsl_program_key key; - key.vshader = entry->vshader; - key.pshader = entry->pshader; - key.vs_args = entry->vs_args; - key.ps_args = entry->ps_args; + key.vs_id = entry->vs.id; + key.gs_id = entry->gs.id; + key.ps_id = entry->ps.id; wine_rb_remove(&priv->program_lookup, &key); GL_EXTCALL(glDeleteObjectARB(entry->programId)); - if (entry->vshader) list_remove(&entry->vshader_entry); - if (entry->pshader) list_remove(&entry->pshader_entry); - HeapFree(GetProcessHeap(), 0, entry->vuniformF_locations); - HeapFree(GetProcessHeap(), 0, entry->puniformF_locations); + if (entry->vs.id) + list_remove(&entry->vs.shader_entry); + if (entry->gs.id) + list_remove(&entry->gs.shader_entry); + if (entry->ps.id) + list_remove(&entry->ps.shader_entry); + HeapFree(GetProcessHeap(), 0, entry->vs.uniform_f_locations); + HeapFree(GetProcessHeap(), 0, entry->ps.uniform_f_locations); HeapFree(GetProcessHeap(), 0, entry); } @@ -3816,13 +4245,12 @@ static void handle_ps3_input(struct wined3d_shader_buffer *buffer, continue; } - if (in_idx == in_count) { + if (in_idx == in_count) sprintf(destination, "gl_FrontColor"); - } else if (in_idx == in_count + 1) { + else if (in_idx == in_count + 1) sprintf(destination, "gl_FrontSecondaryColor"); - } else { - sprintf(destination, "IN[%u]", in_idx); - } + else + sprintf(destination, "ps_in[%u]", in_idx); semantic_name_in = input_signature[i].semantic_name; semantic_idx_in = input_signature[i].semantic_idx; @@ -3842,7 +4270,7 @@ static void handle_ps3_input(struct wined3d_shader_buffer *buffer, set[in_idx] = mask; shader_glsl_write_mask_to_str(mask, reg_mask); - shader_addline(buffer, "%s%s = OUT[%u]%s;\n", + shader_addline(buffer, "%s%s = vs_out[%u]%s;\n", destination, reg_mask, j, reg_mask); } } @@ -3863,9 +4291,12 @@ static void handle_ps3_input(struct wined3d_shader_buffer *buffer, if (!(set[i] & WINED3DSP_WRITEMASK_3)) reg_mask[size++] = 'w'; reg_mask[size] = '\0'; - if (i == in_count) sprintf(destination, "gl_FrontColor"); - else if (i == in_count + 1) sprintf(destination, "gl_FrontSecondaryColor"); - else sprintf(destination, "IN[%u]", i); + if (i == in_count) + sprintf(destination, "gl_FrontColor"); + else if (i == in_count + 1) + sprintf(destination, "gl_FrontSecondaryColor"); + else + sprintf(destination, "ps_in[%u]", i); if (size == 1) shader_addline(buffer, "%s.%s = 0.0;\n", destination, reg_mask); else shader_addline(buffer, "%s.%s = vec%u(0.0);\n", destination, reg_mask, size); @@ -3874,7 +4305,7 @@ static void handle_ps3_input(struct wined3d_shader_buffer *buffer, HeapFree(GetProcessHeap(), 0, set); } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static GLhandleARB generate_param_reorder_function(struct wined3d_shader_buffer *buffer, const struct wined3d_shader *vs, const struct wined3d_shader *ps, const struct wined3d_gl_info *gl_info) @@ -3894,7 +4325,7 @@ static GLhandleARB generate_param_reorder_function(struct wined3d_shader_buffer if (ps_major < 3) { - shader_addline(buffer, "void order_ps_input(in vec4 OUT[%u]) {\n", MAX_REG_OUTPUT); + shader_addline(buffer, "void order_ps_input(in vec4 vs_out[%u])\n{\n", vs->limits.packed_output); for (i = 0; map; map >>= 1, ++i) { @@ -3910,15 +4341,15 @@ static GLhandleARB generate_param_reorder_function(struct wined3d_shader_buffer if (shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_COLOR)) { if (!semantic_idx) - shader_addline(buffer, "gl_FrontColor%s = OUT[%u]%s;\n", + shader_addline(buffer, "gl_FrontColor%s = vs_out[%u]%s;\n", reg_mask, i, reg_mask); else if (semantic_idx == 1) - shader_addline(buffer, "gl_FrontSecondaryColor%s = OUT[%u]%s;\n", + shader_addline(buffer, "gl_FrontSecondaryColor%s = vs_out[%u]%s;\n", reg_mask, i, reg_mask); } else if (shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_POSITION)) { - shader_addline(buffer, "gl_Position%s = OUT[%u]%s;\n", + shader_addline(buffer, "gl_Position%s = vs_out[%u]%s;\n", reg_mask, i, reg_mask); } else if (shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_TEXCOORD)) @@ -3928,7 +4359,7 @@ static GLhandleARB generate_param_reorder_function(struct wined3d_shader_buffer if (!(gl_info->quirks & WINED3D_QUIRK_SET_TEXCOORD_W) || ps_major > 0) write_mask |= WINED3DSP_WRITEMASK_3; - shader_addline(buffer, "gl_TexCoord[%u]%s = OUT[%u]%s;\n", + shader_addline(buffer, "gl_TexCoord[%u]%s = vs_out[%u]%s;\n", semantic_idx, reg_mask, i, reg_mask); if (!(write_mask & WINED3DSP_WRITEMASK_3)) shader_addline(buffer, "gl_TexCoord[%u].w = 1.0;\n", semantic_idx); @@ -3936,11 +4367,11 @@ static GLhandleARB generate_param_reorder_function(struct wined3d_shader_buffer } else if (shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_PSIZE)) { - shader_addline(buffer, "gl_PointSize = OUT[%u].%c;\n", i, reg_mask[1]); + shader_addline(buffer, "gl_PointSize = vs_out[%u].%c;\n", i, reg_mask[1]); } else if (shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_FOG)) { - shader_addline(buffer, "gl_FogFragCoord = clamp(OUT[%u].%c, 0.0, 1.0);\n", i, reg_mask[1]); + shader_addline(buffer, "gl_FogFragCoord = clamp(vs_out[%u].%c, 0.0, 1.0);\n", i, reg_mask[1]); } } shader_addline(buffer, "}\n"); @@ -3949,8 +4380,8 @@ static GLhandleARB generate_param_reorder_function(struct wined3d_shader_buffer { UINT in_count = min(vec4_varyings(ps_major, gl_info), ps->limits.packed_input); /* This one is tricky: a 3.0 pixel shader reads from a 3.0 vertex shader */ - shader_addline(buffer, "varying vec4 IN[%u];\n", in_count); - shader_addline(buffer, "void order_ps_input(in vec4 OUT[%u]) {\n", MAX_REG_OUTPUT); + shader_addline(buffer, "varying vec4 ps_in[%u];\n", in_count); + shader_addline(buffer, "void order_ps_input(in vec4 vs_out[%u])\n{\n", vs->limits.packed_output); /* First, sort out position and point size. Those are not passed to the pixel shader */ for (i = 0; map; map >>= 1, ++i) @@ -3962,12 +4393,12 @@ static GLhandleARB generate_param_reorder_function(struct wined3d_shader_buffer if (shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_POSITION)) { - shader_addline(buffer, "gl_Position%s = OUT[%u]%s;\n", + shader_addline(buffer, "gl_Position%s = vs_out[%u]%s;\n", reg_mask, i, reg_mask); } else if (shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_PSIZE)) { - shader_addline(buffer, "gl_PointSize = OUT[%u].%c;\n", i, reg_mask[1]); + shader_addline(buffer, "gl_PointSize = vs_out[%u].%c;\n", i, reg_mask[1]); } } @@ -3985,26 +4416,66 @@ static GLhandleARB generate_param_reorder_function(struct wined3d_shader_buffer return ret; } -/* GL locking is done by the caller */ +static void shader_glsl_generate_srgb_write_correction(struct wined3d_shader_buffer *buffer) +{ + shader_addline(buffer, "tmp0.xyz = pow(gl_FragData[0].xyz, vec3(srgb_const0.x));\n"); + shader_addline(buffer, "tmp0.xyz = tmp0.xyz * vec3(srgb_const0.y) - vec3(srgb_const0.z);\n"); + shader_addline(buffer, "tmp1.xyz = gl_FragData[0].xyz * vec3(srgb_const0.w);\n"); + shader_addline(buffer, "bvec3 srgb_compare = lessThan(gl_FragData[0].xyz, vec3(srgb_const1.x));\n"); + shader_addline(buffer, "gl_FragData[0].xyz = mix(tmp0.xyz, tmp1.xyz, vec3(srgb_compare));\n"); + shader_addline(buffer, "gl_FragData[0] = clamp(gl_FragData[0], 0.0, 1.0);\n"); +} + +static void shader_glsl_generate_fog_code(struct wined3d_shader_buffer *buffer, enum fogmode mode) +{ + switch (mode) + { + case FOG_OFF: + return; + + case FOG_LINEAR: + /* Fog = (gl_Fog.end - gl_FogFragCoord) / (gl_Fog.end - gl_Fog.start) */ + shader_addline(buffer, "float Fog = (gl_Fog.end - gl_FogFragCoord) / (gl_Fog.end - gl_Fog.start);\n"); + break; + + case FOG_EXP: + /* Fog = e^-(gl_Fog.density * gl_FogFragCoord) */ + shader_addline(buffer, "float Fog = exp(-gl_Fog.density * gl_FogFragCoord);\n"); + break; + + case FOG_EXP2: + /* Fog = e^-((gl_Fog.density * gl_FogFragCoord)^2) */ + shader_addline(buffer, "float Fog = exp(-gl_Fog.density * gl_Fog.density * gl_FogFragCoord * gl_FogFragCoord);\n"); + break; + + default: + ERR("Invalid fog mode %#x.\n", mode); + return; + } + + shader_addline(buffer, "gl_FragData[0].xyz = mix(gl_Fog.color.xyz, gl_FragData[0].xyz, clamp(Fog, 0.0, 1.0));\n"); +} + +/* Context activation is done by the caller. */ static void hardcode_local_constants(const struct wined3d_shader *shader, - const struct wined3d_gl_info *gl_info, GLhandleARB programId, char prefix) + const struct wined3d_gl_info *gl_info, GLhandleARB programId, const char *prefix) { const struct wined3d_shader_lconst *lconst; GLint tmp_loc; const float *value; - char glsl_name[8]; + char glsl_name[10]; LIST_FOR_EACH_ENTRY(lconst, &shader->constantsF, struct wined3d_shader_lconst, entry) { value = (const float *)lconst->value; - snprintf(glsl_name, sizeof(glsl_name), "%cLC%u", prefix, lconst->idx); + snprintf(glsl_name, sizeof(glsl_name), "%s_lc%u", prefix, lconst->idx); tmp_loc = GL_EXTCALL(glGetUniformLocationARB(programId, glsl_name)); GL_EXTCALL(glUniform4fvARB(tmp_loc, 1, value)); } checkGLcall("Hardcoding local constants"); } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context, struct wined3d_shader_buffer *buffer, const struct wined3d_shader *shader, const struct ps_compile_args *args, struct ps_np2fixup_info *np2fixup_info) @@ -4023,21 +4494,16 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context shader_addline(buffer, "#version 120\n"); + if (gl_info->supported[ARB_SHADER_BIT_ENCODING]) + shader_addline(buffer, "#extension GL_ARB_shader_bit_encoding : enable\n"); if (gl_info->supported[ARB_SHADER_TEXTURE_LOD]) - { shader_addline(buffer, "#extension GL_ARB_shader_texture_lod : enable\n"); - } + /* The spec says that it doesn't have to be explicitly enabled, but the + * nvidia drivers write a warning if we don't do so. */ if (gl_info->supported[ARB_TEXTURE_RECTANGLE]) - { - /* The spec says that it doesn't have to be explicitly enabled, but the nvidia - * drivers write a warning if we don't do so - */ shader_addline(buffer, "#extension GL_ARB_texture_rectangle : enable\n"); - } if (gl_info->supported[EXT_GPU_SHADER4]) - { shader_addline(buffer, "#extension GL_EXT_gpu_shader4 : enable\n"); - } /* Base Declarations */ shader_generate_glsl_declarations(context, buffer, shader, reg_maps, &priv_ctx); @@ -4057,44 +4523,11 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context } if (args->srgb_correction) - { - shader_addline(buffer, "tmp0.xyz = pow(gl_FragData[0].xyz, vec3(srgb_const0.x));\n"); - shader_addline(buffer, "tmp0.xyz = tmp0.xyz * vec3(srgb_const0.y) - vec3(srgb_const0.z);\n"); - shader_addline(buffer, "tmp1.xyz = gl_FragData[0].xyz * vec3(srgb_const0.w);\n"); - shader_addline(buffer, "bvec3 srgb_compare = lessThan(gl_FragData[0].xyz, vec3(srgb_const1.x));\n"); - shader_addline(buffer, "gl_FragData[0].xyz = mix(tmp0.xyz, tmp1.xyz, vec3(srgb_compare));\n"); - shader_addline(buffer, "gl_FragData[0] = clamp(gl_FragData[0], 0.0, 1.0);\n"); - } - /* Pixel shader < 3.0 do not replace the fog stage. - * This implements linear fog computation and blending. - * TODO: non linear fog - * NOTE: gl_Fog.start and gl_Fog.end don't hold fog start s and end e but - * -1/(e-s) and e/(e-s) respectively. - */ + shader_glsl_generate_srgb_write_correction(buffer); + + /* SM < 3 does not replace the fog stage. */ if (reg_maps->shader_version.major < 3) - { - switch(args->fog) { - case FOG_OFF: break; - case FOG_LINEAR: - shader_addline(buffer, "float fogstart = -1.0 / (gl_Fog.end - gl_Fog.start);\n"); - shader_addline(buffer, "float fogend = gl_Fog.end * -fogstart;\n"); - shader_addline(buffer, "float Fog = clamp(gl_FogFragCoord * fogstart + fogend, 0.0, 1.0);\n"); - shader_addline(buffer, "gl_FragData[0].xyz = mix(gl_Fog.color.xyz, gl_FragData[0].xyz, Fog);\n"); - break; - case FOG_EXP: - /* Fog = e^(-gl_Fog.density * gl_FogFragCoord) */ - shader_addline(buffer, "float Fog = exp(-gl_Fog.density * gl_FogFragCoord);\n"); - shader_addline(buffer, "Fog = clamp(Fog, 0.0, 1.0);\n"); - shader_addline(buffer, "gl_FragData[0].xyz = mix(gl_Fog.color.xyz, gl_FragData[0].xyz, Fog);\n"); - break; - case FOG_EXP2: - /* Fog = e^(-(gl_Fog.density * gl_FogFragCoord)^2) */ - shader_addline(buffer, "float Fog = exp(-gl_Fog.density * gl_Fog.density * gl_FogFragCoord * gl_FogFragCoord);\n"); - shader_addline(buffer, "Fog = clamp(Fog, 0.0, 1.0);\n"); - shader_addline(buffer, "gl_FragData[0].xyz = mix(gl_Fog.color.xyz, gl_FragData[0].xyz, Fog);\n"); - break; - } - } + shader_glsl_generate_fog_code(buffer, args->fog); shader_addline(buffer, "}\n"); @@ -4105,7 +4538,7 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context return shader_obj; } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static GLuint shader_glsl_generate_vshader(const struct wined3d_context *context, struct wined3d_shader_buffer *buffer, const struct wined3d_shader *shader, const struct vs_compile_args *args) @@ -4120,6 +4553,8 @@ static GLuint shader_glsl_generate_vshader(const struct wined3d_context *context shader_addline(buffer, "#version 120\n"); + if (gl_info->supported[ARB_SHADER_BIT_ENCODING]) + shader_addline(buffer, "#extension GL_ARB_shader_bit_encoding : enable\n"); if (gl_info->supported[EXT_GPU_SHADER4]) shader_addline(buffer, "#extension GL_EXT_gpu_shader4 : enable\n"); @@ -4133,7 +4568,7 @@ static GLuint shader_glsl_generate_vshader(const struct wined3d_context *context shader_generate_main(shader, buffer, reg_maps, function, &priv_ctx); /* Unpack outputs */ - shader_addline(buffer, "order_ps_input(OUT);\n"); + shader_addline(buffer, "order_ps_input(vs_out);\n"); /* The D3DRS_FOGTABLEMODE render state defines if the shader-generated fog coord is used * or if the fragment depth is used. If the fragment depth is used(FOGTABLEMODE != NONE), @@ -4175,16 +4610,48 @@ static GLuint shader_glsl_generate_vshader(const struct wined3d_context *context return shader_obj; } +/* Context activation is done by the caller. */ +static GLhandleARB shader_glsl_generate_geometry_shader(const struct wined3d_context *context, + struct wined3d_shader_buffer *buffer, const struct wined3d_shader *shader) +{ + const struct wined3d_shader_reg_maps *reg_maps = &shader->reg_maps; + const struct wined3d_gl_info *gl_info = context->gl_info; + const DWORD *function = shader->function; + struct shader_glsl_ctx_priv priv_ctx; + GLhandleARB shader_id; + + shader_id = GL_EXTCALL(glCreateShaderObjectARB(GL_GEOMETRY_SHADER_ARB)); + + shader_addline(buffer, "#version 120\n"); + + if (gl_info->supported[ARB_GEOMETRY_SHADER4]) + shader_addline(buffer, "#extension GL_ARB_geometry_shader4 : enable\n"); + if (gl_info->supported[ARB_SHADER_BIT_ENCODING]) + shader_addline(buffer, "#extension GL_ARB_shader_bit_encoding : enable\n"); + if (gl_info->supported[EXT_GPU_SHADER4]) + shader_addline(buffer, "#extension GL_EXT_gpu_shader4 : enable\n"); + + memset(&priv_ctx, 0, sizeof(priv_ctx)); + shader_generate_glsl_declarations(context, buffer, shader, reg_maps, &priv_ctx); + shader_generate_main(shader, buffer, reg_maps, function, &priv_ctx); + shader_addline(buffer, "}\n"); + + TRACE("Compiling shader object %u.\n", shader_id); + shader_glsl_compile(gl_info, shader_id, buffer->buffer); + + return shader_id; +} + static GLhandleARB find_glsl_pshader(const struct wined3d_context *context, struct wined3d_shader_buffer *buffer, struct wined3d_shader *shader, const struct ps_compile_args *args, const struct ps_np2fixup_info **np2fixup_info) { struct wined3d_state *state = &shader->device->stateBlock->state; + struct glsl_ps_compiled_shader *gl_shaders, *new_array; + struct glsl_shader_private *shader_data; + struct ps_np2fixup_info *np2fixup; UINT i; DWORD new_size; - struct glsl_ps_compiled_shader *new_array; - struct glsl_pshader_private *shader_data; - struct ps_np2fixup_info *np2fixup = NULL; GLhandleARB ret; if (!shader->backend_data) @@ -4197,6 +4664,7 @@ static GLhandleARB find_glsl_pshader(const struct wined3d_context *context, } } shader_data = shader->backend_data; + gl_shaders = shader_data->gl_shaders.ps; /* Usually we have very few GL shaders for each d3d shader(just 1 or maybe 2), * so a linear search is more performant than a hashmap or a binary search @@ -4204,10 +4672,11 @@ static GLhandleARB find_glsl_pshader(const struct wined3d_context *context, */ for (i = 0; i < shader_data->num_gl_shaders; ++i) { - if (!memcmp(&shader_data->gl_shaders[i].args, args, sizeof(*args))) + if (!memcmp(&gl_shaders[i].args, args, sizeof(*args))) { - if (args->np2_fixup) *np2fixup_info = &shader_data->gl_shaders[i].np2fixup; - return shader_data->gl_shaders[i].prgId; + if (args->np2_fixup) + *np2fixup_info = &gl_shaders[i].np2fixup; + return gl_shaders[i].prgId; } } @@ -4216,10 +4685,12 @@ static GLhandleARB find_glsl_pshader(const struct wined3d_context *context, if (shader_data->num_gl_shaders) { new_size = shader_data->shader_array_size + max(1, shader_data->shader_array_size / 2); - new_array = HeapReAlloc(GetProcessHeap(), 0, shader_data->gl_shaders, - new_size * sizeof(*shader_data->gl_shaders)); - } else { - new_array = HeapAlloc(GetProcessHeap(), 0, sizeof(*shader_data->gl_shaders)); + new_array = HeapReAlloc(GetProcessHeap(), 0, shader_data->gl_shaders.ps, + new_size * sizeof(*gl_shaders)); + } + else + { + new_array = HeapAlloc(GetProcessHeap(), 0, sizeof(*gl_shaders)); new_size = 1; } @@ -4227,21 +4698,22 @@ static GLhandleARB find_glsl_pshader(const struct wined3d_context *context, ERR("Out of memory\n"); return 0; } - shader_data->gl_shaders = new_array; + shader_data->gl_shaders.ps = new_array; shader_data->shader_array_size = new_size; + gl_shaders = new_array; } - shader_data->gl_shaders[shader_data->num_gl_shaders].args = *args; + gl_shaders[shader_data->num_gl_shaders].args = *args; - memset(&shader_data->gl_shaders[shader_data->num_gl_shaders].np2fixup, 0, sizeof(struct ps_np2fixup_info)); - if (args->np2_fixup) np2fixup = &shader_data->gl_shaders[shader_data->num_gl_shaders].np2fixup; + np2fixup = &gl_shaders[shader_data->num_gl_shaders].np2fixup; + memset(np2fixup, 0, sizeof(*np2fixup)); + *np2fixup_info = args->np2_fixup ? np2fixup : NULL; pixelshader_update_samplers(&shader->reg_maps, state->textures); shader_buffer_clear(buffer); ret = shader_glsl_generate_pshader(context, buffer, shader, args, np2fixup); - shader_data->gl_shaders[shader_data->num_gl_shaders++].prgId = ret; - *np2fixup_info = np2fixup; + gl_shaders[shader_data->num_gl_shaders++].prgId = ret; return ret; } @@ -4259,9 +4731,9 @@ static GLhandleARB find_glsl_vshader(const struct wined3d_context *context, { UINT i; DWORD new_size; - struct glsl_vs_compiled_shader *new_array; DWORD use_map = shader->device->strided_streams.use_map; - struct glsl_vshader_private *shader_data; + struct glsl_vs_compiled_shader *gl_shaders, *new_array; + struct glsl_shader_private *shader_data; GLhandleARB ret; if (!shader->backend_data) @@ -4274,15 +4746,16 @@ static GLhandleARB find_glsl_vshader(const struct wined3d_context *context, } } shader_data = shader->backend_data; + gl_shaders = shader_data->gl_shaders.vs; /* Usually we have very few GL shaders for each d3d shader(just 1 or maybe 2), * so a linear search is more performant than a hashmap or a binary search * (cache coherency etc) */ - for(i = 0; i < shader_data->num_gl_shaders; i++) { - if(vs_args_equal(&shader_data->gl_shaders[i].args, args, use_map)) { - return shader_data->gl_shaders[i].prgId; - } + for (i = 0; i < shader_data->num_gl_shaders; ++i) + { + if (vs_args_equal(&gl_shaders[i].args, args, use_map)) + return gl_shaders[i].prgId; } TRACE("No matching GL shader found for shader %p, compiling a new shader.\n", shader); @@ -4291,10 +4764,12 @@ static GLhandleARB find_glsl_vshader(const struct wined3d_context *context, if (shader_data->num_gl_shaders) { new_size = shader_data->shader_array_size + max(1, shader_data->shader_array_size / 2); - new_array = HeapReAlloc(GetProcessHeap(), 0, shader_data->gl_shaders, - new_size * sizeof(*shader_data->gl_shaders)); - } else { - new_array = HeapAlloc(GetProcessHeap(), 0, sizeof(*shader_data->gl_shaders)); + new_array = HeapReAlloc(GetProcessHeap(), 0, shader_data->gl_shaders.vs, + new_size * sizeof(*gl_shaders)); + } + else + { + new_array = HeapAlloc(GetProcessHeap(), 0, sizeof(*gl_shaders)); new_size = 1; } @@ -4302,50 +4777,806 @@ static GLhandleARB find_glsl_vshader(const struct wined3d_context *context, ERR("Out of memory\n"); return 0; } - shader_data->gl_shaders = new_array; + shader_data->gl_shaders.vs = new_array; shader_data->shader_array_size = new_size; + gl_shaders = new_array; } - shader_data->gl_shaders[shader_data->num_gl_shaders].args = *args; + gl_shaders[shader_data->num_gl_shaders].args = *args; shader_buffer_clear(buffer); ret = shader_glsl_generate_vshader(context, buffer, shader, args); - shader_data->gl_shaders[shader_data->num_gl_shaders++].prgId = ret; + gl_shaders[shader_data->num_gl_shaders++].prgId = ret; return ret; } -/** Sets the GLSL program ID for the given pixel and vertex shader combination. - * It sets the programId on the current StateBlock (because it should be called - * inside of the DrawPrimitive() part of the render loop). - * - * If a program for the given combination does not exist, create one, and store - * the program in the hash table. If it creates a program, it will link the - * given objects, too. - */ +static GLhandleARB find_glsl_geometry_shader(const struct wined3d_context *context, + struct wined3d_shader_buffer *buffer, struct wined3d_shader *shader) +{ + struct glsl_gs_compiled_shader *gl_shaders; + struct glsl_shader_private *shader_data; + GLhandleARB ret; -/* GL locking is done by the caller */ -static void set_glsl_shader_program(const struct wined3d_context *context, - struct wined3d_device *device, BOOL use_ps, BOOL use_vs) + if (!shader->backend_data) + { + if (!(shader->backend_data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*shader_data)))) + { + ERR("Failed to allocate backend data.\n"); + return 0; + } + } + shader_data = shader->backend_data; + gl_shaders = shader_data->gl_shaders.gs; + + if (shader_data->num_gl_shaders) + return gl_shaders[0].id; + + TRACE("No matching GL shader found for shader %p, compiling a new shader.\n", shader); + + if (!(shader_data->gl_shaders.gs = HeapAlloc(GetProcessHeap(), 0, sizeof(*gl_shaders)))) + { + ERR("Failed to allocate GL shader array.\n"); + return 0; + } + shader_data->shader_array_size = 1; + gl_shaders = shader_data->gl_shaders.gs; + + shader_buffer_clear(buffer); + ret = shader_glsl_generate_geometry_shader(context, buffer, shader); + gl_shaders[shader_data->num_gl_shaders++].id = ret; + + return ret; +} + +static const char *shader_glsl_get_ffp_fragment_op_arg(struct wined3d_shader_buffer *buffer, + DWORD argnum, unsigned int stage, DWORD arg) +{ + const char *ret; + + if (arg == ARG_UNUSED) + return ""; + + switch (arg & WINED3DTA_SELECTMASK) + { + case WINED3DTA_DIFFUSE: + ret = "gl_Color"; + break; + + case WINED3DTA_CURRENT: + if (!stage) + ret = "gl_Color"; + else + ret = "ret"; + break; + + case WINED3DTA_TEXTURE: + switch (stage) + { + case 0: ret = "tex0"; break; + case 1: ret = "tex1"; break; + case 2: ret = "tex2"; break; + case 3: ret = "tex3"; break; + case 4: ret = "tex4"; break; + case 5: ret = "tex5"; break; + case 6: ret = "tex6"; break; + case 7: ret = "tex7"; break; + default: + ret = ""; + break; + } + break; + + case WINED3DTA_TFACTOR: + ret = "tex_factor"; + break; + + case WINED3DTA_SPECULAR: + ret = "gl_SecondaryColor"; + break; + + case WINED3DTA_TEMP: + ret = "temp_reg"; + break; + + case WINED3DTA_CONSTANT: + FIXME("Per-stage constants not implemented.\n"); + switch (stage) + { + case 0: ret = "const0"; break; + case 1: ret = "const1"; break; + case 2: ret = "const2"; break; + case 3: ret = "const3"; break; + case 4: ret = "const4"; break; + case 5: ret = "const5"; break; + case 6: ret = "const6"; break; + case 7: ret = "const7"; break; + default: + ret = ""; + break; + } + break; + + default: + return ""; + } + + if (arg & WINED3DTA_COMPLEMENT) + { + shader_addline(buffer, "arg%u = vec4(1.0) - %s;\n", argnum, ret); + if (argnum == 0) + ret = "arg0"; + else if (argnum == 1) + ret = "arg1"; + else if (argnum == 2) + ret = "arg2"; + } + + if (arg & WINED3DTA_ALPHAREPLICATE) + { + shader_addline(buffer, "arg%u = vec4(%s.w);\n", argnum, ret); + if (argnum == 0) + ret = "arg0"; + else if (argnum == 1) + ret = "arg1"; + else if (argnum == 2) + ret = "arg2"; + } + + return ret; +} + +static void shader_glsl_ffp_fragment_op(struct wined3d_shader_buffer *buffer, unsigned int stage, BOOL color, + BOOL alpha, DWORD dst, DWORD op, DWORD dw_arg0, DWORD dw_arg1, DWORD dw_arg2) +{ + const char *dstmask, *dstreg, *arg0, *arg1, *arg2; + + if (color && alpha) + dstmask = ""; + else if (color) + dstmask = ".xyz"; + else + dstmask = ".w"; + + if (dst == tempreg) + dstreg = "temp_reg"; + else + dstreg = "ret"; + + arg0 = shader_glsl_get_ffp_fragment_op_arg(buffer, 0, stage, dw_arg0); + arg1 = shader_glsl_get_ffp_fragment_op_arg(buffer, 1, stage, dw_arg1); + arg2 = shader_glsl_get_ffp_fragment_op_arg(buffer, 2, stage, dw_arg2); + + switch (op) + { + case WINED3D_TOP_DISABLE: + if (!stage) + shader_addline(buffer, "%s%s = gl_Color%s;\n", dstreg, dstmask, dstmask); + break; + + case WINED3D_TOP_SELECT_ARG1: + shader_addline(buffer, "%s%s = %s%s;\n", dstreg, dstmask, arg1, dstmask); + break; + + case WINED3D_TOP_SELECT_ARG2: + shader_addline(buffer, "%s%s = %s%s;\n", dstreg, dstmask, arg2, dstmask); + break; + + case WINED3D_TOP_MODULATE: + shader_addline(buffer, "%s%s = %s%s * %s%s;\n", dstreg, dstmask, arg1, dstmask, arg2, dstmask); + break; + + case WINED3D_TOP_MODULATE_4X: + shader_addline(buffer, "%s%s = clamp(%s%s * %s%s * 4.0, 0.0, 1.0);\n", + dstreg, dstmask, arg1, dstmask, arg2, dstmask); + break; + + case WINED3D_TOP_MODULATE_2X: + shader_addline(buffer, "%s%s = clamp(%s%s * %s%s * 2.0, 0.0, 1.0);\n", + dstreg, dstmask, arg1, dstmask, arg2, dstmask); + break; + + case WINED3D_TOP_ADD: + shader_addline(buffer, "%s%s = clamp(%s%s + %s%s, 0.0, 1.0);\n", + dstreg, dstmask, arg1, dstmask, arg2, dstmask); + break; + + case WINED3D_TOP_ADD_SIGNED: + shader_addline(buffer, "%s%s = clamp(%s%s + (%s - vec4(0.5))%s, 0.0, 1.0);\n", + dstreg, dstmask, arg1, dstmask, arg2, dstmask); + break; + + case WINED3D_TOP_ADD_SIGNED_2X: + shader_addline(buffer, "%s%s = clamp((%s%s + (%s - vec4(0.5))%s) * 2.0, 0.0, 1.0);\n", + dstreg, dstmask, arg1, dstmask, arg2, dstmask); + break; + + case WINED3D_TOP_SUBTRACT: + shader_addline(buffer, "%s%s = clamp(%s%s - %s%s, 0.0, 1.0);\n", + dstreg, dstmask, arg1, dstmask, arg2, dstmask); + break; + + case WINED3D_TOP_ADD_SMOOTH: + shader_addline(buffer, "%s%s = clamp((vec4(1.0) - %s)%s * %s%s + %s%s, 0.0, 1.0);\n", + dstreg, dstmask, arg1, dstmask, arg2, dstmask, arg1, dstmask); + break; + + case WINED3D_TOP_BLEND_DIFFUSE_ALPHA: + arg0 = shader_glsl_get_ffp_fragment_op_arg(buffer, 0, stage, WINED3DTA_DIFFUSE); + shader_addline(buffer, "%s%s = mix(%s%s, %s%s, %s.w);\n", + dstreg, dstmask, arg2, dstmask, arg1, dstmask, arg0); + break; + + case WINED3D_TOP_BLEND_TEXTURE_ALPHA: + arg0 = shader_glsl_get_ffp_fragment_op_arg(buffer, 0, stage, WINED3DTA_TEXTURE); + shader_addline(buffer, "%s%s = mix(%s%s, %s%s, %s.w);\n", + dstreg, dstmask, arg2, dstmask, arg1, dstmask, arg0); + break; + + case WINED3D_TOP_BLEND_FACTOR_ALPHA: + arg0 = shader_glsl_get_ffp_fragment_op_arg(buffer, 0, stage, WINED3DTA_TFACTOR); + shader_addline(buffer, "%s%s = mix(%s%s, %s%s, %s.w);\n", + dstreg, dstmask, arg2, dstmask, arg1, dstmask, arg0); + break; + + case WINED3D_TOP_BLEND_TEXTURE_ALPHA_PM: + arg0 = shader_glsl_get_ffp_fragment_op_arg(buffer, 0, stage, WINED3DTA_TEXTURE); + shader_addline(buffer, "%s%s = clamp(%s%s * (1.0 - %s.w) + %s%s, 0.0, 1.0);\n", + dstreg, dstmask, arg2, dstmask, arg0, arg1, dstmask); + break; + + case WINED3D_TOP_BLEND_CURRENT_ALPHA: + arg0 = shader_glsl_get_ffp_fragment_op_arg(buffer, 0, stage, WINED3DTA_CURRENT); + shader_addline(buffer, "%s%s = mix(%s%s, %s%s, %s.w);\n", + dstreg, dstmask, arg2, dstmask, arg1, dstmask, arg0); + break; + + case WINED3D_TOP_MODULATE_ALPHA_ADD_COLOR: + shader_addline(buffer, "%s%s = clamp(%s%s * %s.w + %s%s, 0.0, 1.0);\n", + dstreg, dstmask, arg2, dstmask, arg1, arg1, dstmask); + break; + + case WINED3D_TOP_MODULATE_COLOR_ADD_ALPHA: + shader_addline(buffer, "%s%s = clamp(%s%s * %s%s + %s.w, 0.0, 1.0);\n", + dstreg, dstmask, arg1, dstmask, arg2, dstmask, arg1); + break; + + case WINED3D_TOP_MODULATE_INVALPHA_ADD_COLOR: + shader_addline(buffer, "%s%s = clamp(%s%s * (1.0 - %s.w) + %s%s, 0.0, 1.0);\n", + dstreg, dstmask, arg2, dstmask, arg1, arg1, dstmask); + break; + case WINED3D_TOP_MODULATE_INVCOLOR_ADD_ALPHA: + shader_addline(buffer, "%s%s = clamp((vec4(1.0) - %s)%s * %s%s + %s.w, 0.0, 1.0);\n", + dstreg, dstmask, arg1, dstmask, arg2, dstmask, arg1); + break; + + case WINED3D_TOP_BUMPENVMAP: + case WINED3D_TOP_BUMPENVMAP_LUMINANCE: + /* These are handled in the first pass, nothing to do. */ + break; + + case WINED3D_TOP_DOTPRODUCT3: + shader_addline(buffer, "%s%s = vec4(clamp(dot(%s.xyz - 0.5, %s.xyz - 0.5) * 4.0, 0.0, 1.0))%s;\n", + dstreg, dstmask, arg1, arg2, dstmask); + break; + + case WINED3D_TOP_MULTIPLY_ADD: + shader_addline(buffer, "%s%s = clamp(%s%s * %s%s + %s%s, 0.0, 1.0);\n", + dstreg, dstmask, arg1, dstmask, arg2, dstmask, arg0, dstmask); + break; + + case WINED3D_TOP_LERP: + /* MSDN isn't quite right here. */ + shader_addline(buffer, "%s%s = mix(%s%s, %s%s, %s%s);\n", + dstreg, dstmask, arg2, dstmask, arg1, dstmask, arg0, dstmask); + break; + + default: + FIXME("Unhandled operation %#x.\n", op); + break; + } +} + +/* Context activation is done by the caller. */ +static GLuint shader_glsl_generate_ffp_fragment_shader(struct wined3d_shader_buffer *buffer, + const struct ffp_frag_settings *settings, const struct wined3d_gl_info *gl_info) +{ + BOOL tempreg_used = FALSE, tfactor_used = FALSE; + BYTE lum_map = 0, bump_map = 0, tex_map = 0; + const char *final_combiner_src = "ret"; + UINT lowest_disabled_stage; + GLhandleARB shader_obj; + DWORD arg0, arg1, arg2; + unsigned int stage; + + shader_buffer_clear(buffer); + + /* Find out which textures are read */ + for (stage = 0; stage < MAX_TEXTURES; ++stage) + { + if (settings->op[stage].cop == WINED3D_TOP_DISABLE) + break; + + arg0 = settings->op[stage].carg0 & WINED3DTA_SELECTMASK; + arg1 = settings->op[stage].carg1 & WINED3DTA_SELECTMASK; + arg2 = settings->op[stage].carg2 & WINED3DTA_SELECTMASK; + + if (arg0 == WINED3DTA_TEXTURE || arg1 == WINED3DTA_TEXTURE || arg2 == WINED3DTA_TEXTURE) + tex_map |= 1 << stage; + if (arg0 == WINED3DTA_TFACTOR || arg1 == WINED3DTA_TFACTOR || arg2 == WINED3DTA_TFACTOR) + tfactor_used = TRUE; + if (arg0 == WINED3DTA_TEMP || arg1 == WINED3DTA_TEMP || arg2 == WINED3DTA_TEMP) + tempreg_used = TRUE; + if (settings->op[stage].dst == tempreg) + tempreg_used = TRUE; + + switch (settings->op[stage].cop) + { + case WINED3D_TOP_BUMPENVMAP_LUMINANCE: + lum_map |= 1 << stage; + /* fall through */ + case WINED3D_TOP_BUMPENVMAP: + bump_map |= 1 << stage; + /* fall through */ + case WINED3D_TOP_BLEND_TEXTURE_ALPHA: + case WINED3D_TOP_BLEND_TEXTURE_ALPHA_PM: + tex_map |= 1 << stage; + break; + + case WINED3D_TOP_BLEND_FACTOR_ALPHA: + tfactor_used = TRUE; + break; + + default: + break; + } + + if (settings->op[stage].aop == WINED3D_TOP_DISABLE) + continue; + + arg0 = settings->op[stage].aarg0 & WINED3DTA_SELECTMASK; + arg1 = settings->op[stage].aarg1 & WINED3DTA_SELECTMASK; + arg2 = settings->op[stage].aarg2 & WINED3DTA_SELECTMASK; + + if (arg0 == WINED3DTA_TEXTURE || arg1 == WINED3DTA_TEXTURE || arg2 == WINED3DTA_TEXTURE) + tex_map |= 1 << stage; + if (arg0 == WINED3DTA_TFACTOR || arg1 == WINED3DTA_TFACTOR || arg2 == WINED3DTA_TFACTOR) + tfactor_used = TRUE; + if (arg0 == WINED3DTA_TEMP || arg1 == WINED3DTA_TEMP || arg2 == WINED3DTA_TEMP) + tempreg_used = TRUE; + } + lowest_disabled_stage = stage; + + shader_addline(buffer, "#version 120\n"); + + shader_addline(buffer, "vec4 tmp0, tmp1;\n"); + shader_addline(buffer, "vec4 ret;\n"); + if (tempreg_used || settings->sRGB_write) + shader_addline(buffer, "vec4 temp_reg;\n"); + shader_addline(buffer, "vec4 arg0, arg1, arg2;\n"); + + for (stage = 0; stage < MAX_TEXTURES; ++stage) + { + if (!(tex_map & (1 << stage))) + continue; + + switch (settings->op[stage].tex_type) + { + case tex_1d: + shader_addline(buffer, "uniform sampler1D ps_sampler%u;\n", stage); + break; + case tex_2d: + shader_addline(buffer, "uniform sampler2D ps_sampler%u;\n", stage); + break; + case tex_3d: + shader_addline(buffer, "uniform sampler3D ps_sampler%u;\n", stage); + break; + case tex_cube: + shader_addline(buffer, "uniform samplerCube ps_sampler%u;\n", stage); + break; + case tex_rect: + shader_addline(buffer, "uniform sampler2DRect ps_sampler%u;\n", stage); + break; + default: + FIXME("Unhandled sampler type %#x.\n", settings->op[stage].tex_type); + break; + } + + shader_addline(buffer, "vec4 tex%u;\n", stage); + + if (!(bump_map & (1 << stage))) + continue; + shader_addline(buffer, "uniform mat2 bumpenv_mat%u;\n", stage); + + if (!(lum_map & (1 << stage))) + continue; + shader_addline(buffer, "uniform float bumpenv_lum_scale%u;\n", stage); + shader_addline(buffer, "uniform float bumpenv_lum_offset%u;\n", stage); + } + if (tfactor_used) + shader_addline(buffer, "uniform vec4 tex_factor;\n"); + shader_addline(buffer, "uniform vec4 specular_enable;\n"); + + if (settings->sRGB_write) + { + shader_addline(buffer, "const vec4 srgb_const0 = vec4(%.8e, %.8e, %.8e, %.8e);\n", + srgb_pow, srgb_mul_high, srgb_sub_high, srgb_mul_low); + shader_addline(buffer, "const vec4 srgb_const1 = vec4(%.8e, 0.0, 0.0, 0.0);\n", + srgb_cmp); + } + + shader_addline(buffer, "void main()\n{\n"); + + if (lowest_disabled_stage < 7 && settings->emul_clipplanes) + shader_addline(buffer, "if (any(lessThan(gl_texCoord[7], vec4(0.0)))) discard;\n"); + + /* Generate texture sampling instructions) */ + for (stage = 0; stage < MAX_TEXTURES && settings->op[stage].cop != WINED3D_TOP_DISABLE; ++stage) + { + const char *texture_function, *coord_mask; + char tex_reg_name[8]; + BOOL proj, clamp; + + if (!(tex_map & (1 << stage))) + continue; + + if (settings->op[stage].projected == proj_none) + { + proj = FALSE; + } + else if (settings->op[stage].projected == proj_count4 + || settings->op[stage].projected == proj_count3) + { + proj = TRUE; + } + else + { + FIXME("Unexpected projection mode %d\n", settings->op[stage].projected); + proj = TRUE; + } + + if (settings->op[stage].cop == WINED3D_TOP_BUMPENVMAP + || settings->op[stage].cop == WINED3D_TOP_BUMPENVMAP_LUMINANCE) + clamp = FALSE; + else + clamp = TRUE; + + switch (settings->op[stage].tex_type) + { + case tex_1d: + if (proj) + { + texture_function = "texture1DProj"; + coord_mask = "xw"; + } + else + { + texture_function = "texture1D"; + coord_mask = "x"; + } + break; + case tex_2d: + if (proj) + { + texture_function = "texture2DProj"; + coord_mask = "xyw"; + } + else + { + texture_function = "texture2D"; + coord_mask = "xy"; + } + break; + case tex_3d: + if (proj) + { + texture_function = "texture3DProj"; + coord_mask = "xyzw"; + } + else + { + texture_function = "texture3D"; + coord_mask = "xyz"; + } + break; + case tex_cube: + texture_function = "textureCube"; + coord_mask = "xyz"; + break; + case tex_rect: + if (proj) + { + texture_function = "texture2DRectProj"; + coord_mask = "xyw"; + } + else + { + texture_function = "texture2DRect"; + coord_mask = "xy"; + } + break; + default: + FIXME("Unhandled texture type %#x.\n", settings->op[stage].tex_type); + texture_function = ""; + coord_mask = "xyzw"; + break; + } + + if (stage > 0 + && (settings->op[stage - 1].cop == WINED3D_TOP_BUMPENVMAP + || settings->op[stage - 1].cop == WINED3D_TOP_BUMPENVMAP_LUMINANCE)) + { + shader_addline(buffer, "ret.xy = bumpenv_mat%u * tex%u.xy;\n", stage - 1, stage - 1); + + /* With projective textures, texbem only divides the static + * texture coord, not the displacement, so multiply the + * displacement with the dividing parameter before passing it to + * TXP. */ + if (settings->op[stage].projected != proj_none) + { + if (settings->op[stage].projected == proj_count4) + { + shader_addline(buffer, "ret.xy = (ret.xy * gl_TexCoord[%u].w) + gl_TexCoord[%u].xy;\n", + stage, stage); + shader_addline(buffer, "ret.zw = gl_TexCoord[%u].ww;\n", stage); + } + else + { + shader_addline(buffer, "ret.xy = (ret.xy * gl_TexCoord[%u].z) + gl_TexCoord[%u].xy;\n", + stage, stage); + shader_addline(buffer, "ret.zw = gl_TexCoord[%u].zz;\n", stage); + } + } + else + { + shader_addline(buffer, "ret = gl_TexCoord[%u] + ret.xyxy;\n", stage); + } + + if (clamp) + shader_addline(buffer, "tex%u = clamp(%s(ps_sampler%u, ret.%s), 0.0, 1.0);\n", + stage, texture_function, stage, coord_mask); + else + shader_addline(buffer, "tex%u = %s(ps_sampler%u, ret.%s);\n", + stage, texture_function, stage, coord_mask); + + if (settings->op[stage - 1].cop == WINED3D_TOP_BUMPENVMAP_LUMINANCE) + shader_addline(buffer, "tex%u *= clamp(tex%u.z * bumpenv_lum_scale%u + bumpenv_lum_offset%u, 0.0, 1.0);\n", + stage, stage - 1, stage - 1, stage - 1); + } + else if (settings->op[stage].projected == proj_count3) + { + if (clamp) + shader_addline(buffer, "tex%u = clamp(%s(ps_sampler%u, gl_TexCoord[%u].xyz), 0.0, 1.0);\n", + stage, texture_function, stage, stage); + else + shader_addline(buffer, "tex%u = %s(ps_sampler%u, gl_TexCoord[%u].xyz);\n", + stage, texture_function, stage, stage); + } + else + { + if (clamp) + shader_addline(buffer, "tex%u = clamp(%s(ps_sampler%u, gl_TexCoord[%u].%s), 0.0, 1.0);\n", + stage, texture_function, stage, stage, coord_mask); + else + shader_addline(buffer, "tex%u = %s(ps_sampler%u, gl_TexCoord[%u].%s);\n", + stage, texture_function, stage, stage, coord_mask); + } + + sprintf(tex_reg_name, "tex%u", stage); + shader_glsl_color_correction_ext(buffer, tex_reg_name, WINED3DSP_WRITEMASK_ALL, + settings->op[stage].color_fixup); + } + + /* Generate the main shader */ + for (stage = 0; stage < MAX_TEXTURES; ++stage) + { + BOOL op_equal; + + if (settings->op[stage].cop == WINED3D_TOP_DISABLE) + { + if (!stage) + final_combiner_src = "gl_Color"; + break; + } + + if (settings->op[stage].cop == WINED3D_TOP_SELECT_ARG1 + && settings->op[stage].aop == WINED3D_TOP_SELECT_ARG1) + op_equal = settings->op[stage].carg1 == settings->op[stage].aarg1; + else if (settings->op[stage].cop == WINED3D_TOP_SELECT_ARG1 + && settings->op[stage].aop == WINED3D_TOP_SELECT_ARG2) + op_equal = settings->op[stage].carg1 == settings->op[stage].aarg2; + else if (settings->op[stage].cop == WINED3D_TOP_SELECT_ARG2 + && settings->op[stage].aop == WINED3D_TOP_SELECT_ARG1) + op_equal = settings->op[stage].carg2 == settings->op[stage].aarg1; + else if (settings->op[stage].cop == WINED3D_TOP_SELECT_ARG2 + && settings->op[stage].aop == WINED3D_TOP_SELECT_ARG2) + op_equal = settings->op[stage].carg2 == settings->op[stage].aarg2; + else + op_equal = settings->op[stage].aop == settings->op[stage].cop + && settings->op[stage].carg0 == settings->op[stage].aarg0 + && settings->op[stage].carg1 == settings->op[stage].aarg1 + && settings->op[stage].carg2 == settings->op[stage].aarg2; + + if (settings->op[stage].aop == WINED3D_TOP_DISABLE) + { + shader_glsl_ffp_fragment_op(buffer, stage, TRUE, FALSE, settings->op[stage].dst, + settings->op[stage].cop, settings->op[stage].carg0, + settings->op[stage].carg1, settings->op[stage].carg2); + if (!stage) + shader_addline(buffer, "ret.w = gl_Color.w;\n"); + } + else if (op_equal) + { + shader_glsl_ffp_fragment_op(buffer, stage, TRUE, TRUE, settings->op[stage].dst, + settings->op[stage].cop, settings->op[stage].carg0, + settings->op[stage].carg1, settings->op[stage].carg2); + } + else + { + shader_glsl_ffp_fragment_op(buffer, stage, TRUE, FALSE, settings->op[stage].dst, + settings->op[stage].cop, settings->op[stage].carg0, + settings->op[stage].carg1, settings->op[stage].carg2); + shader_glsl_ffp_fragment_op(buffer, stage, FALSE, TRUE, settings->op[stage].dst, + settings->op[stage].aop, settings->op[stage].aarg0, + settings->op[stage].aarg1, settings->op[stage].aarg2); + } + } + + shader_addline(buffer, "gl_FragData[0] = gl_SecondaryColor * specular_enable + %s;\n", final_combiner_src); + + if (settings->sRGB_write) + shader_glsl_generate_srgb_write_correction(buffer); + + shader_glsl_generate_fog_code(buffer, settings->fog); + + shader_addline(buffer, "}\n"); + + shader_obj = GL_EXTCALL(glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB)); + shader_glsl_compile(gl_info, shader_obj, buffer->buffer); + return shader_obj; +} + +static struct glsl_ffp_fragment_shader *shader_glsl_find_ffp_fragment_shader(struct shader_glsl_priv *priv, + const struct wined3d_gl_info *gl_info, const struct ffp_frag_settings *args) +{ + struct glsl_ffp_fragment_shader *glsl_desc; + const struct ffp_frag_desc *desc; + + if ((desc = find_ffp_frag_shader(&priv->ffp_fragment_shaders, args))) + return CONTAINING_RECORD(desc, struct glsl_ffp_fragment_shader, entry); + + if (!(glsl_desc = HeapAlloc(GetProcessHeap(), 0, sizeof(*glsl_desc)))) + return NULL; + + glsl_desc->entry.settings = *args; + glsl_desc->id = shader_glsl_generate_ffp_fragment_shader(&priv->shader_buffer, args, gl_info); + list_init(&glsl_desc->linked_programs); + add_ffp_frag_shader(&priv->ffp_fragment_shaders, &glsl_desc->entry); + + return glsl_desc; +} + + +static void shader_glsl_init_vs_uniform_locations(const struct wined3d_gl_info *gl_info, + GLhandleARB program_id, struct glsl_vs_program *vs) +{ + unsigned int i; + char name[32]; + + vs->uniform_f_locations = HeapAlloc(GetProcessHeap(), 0, + sizeof(GLhandleARB) * gl_info->limits.glsl_vs_float_constants); + for (i = 0; i < gl_info->limits.glsl_vs_float_constants; ++i) + { + snprintf(name, sizeof(name), "vs_c[%u]", i); + vs->uniform_f_locations[i] = GL_EXTCALL(glGetUniformLocationARB(program_id, name)); + } + + for (i = 0; i < MAX_CONST_I; ++i) + { + snprintf(name, sizeof(name), "vs_i[%u]", i); + vs->uniform_i_locations[i] = GL_EXTCALL(glGetUniformLocationARB(program_id, name)); + } + + vs->pos_fixup_location = GL_EXTCALL(glGetUniformLocationARB(program_id, "posFixup")); +} + +static void shader_glsl_init_ps_uniform_locations(const struct wined3d_gl_info *gl_info, + GLhandleARB program_id, struct glsl_ps_program *ps) +{ + unsigned int i; + char name[32]; + + ps->uniform_f_locations = HeapAlloc(GetProcessHeap(), 0, + sizeof(GLhandleARB) * gl_info->limits.glsl_ps_float_constants); + for (i = 0; i < gl_info->limits.glsl_ps_float_constants; ++i) + { + snprintf(name, sizeof(name), "ps_c[%u]", i); + ps->uniform_f_locations[i] = GL_EXTCALL(glGetUniformLocationARB(program_id, name)); + } + + for (i = 0; i < MAX_CONST_I; ++i) + { + snprintf(name, sizeof(name), "ps_i[%u]", i); + ps->uniform_i_locations[i] = GL_EXTCALL(glGetUniformLocationARB(program_id, name)); + } + + for (i = 0; i < MAX_TEXTURES; ++i) + { + snprintf(name, sizeof(name), "bumpenv_mat%u", i); + ps->bumpenv_mat_location[i] = GL_EXTCALL(glGetUniformLocationARB(program_id, name)); + snprintf(name, sizeof(name), "bumpenv_lum_scale%u", i); + ps->bumpenv_lum_scale_location[i] = GL_EXTCALL(glGetUniformLocationARB(program_id, name)); + snprintf(name, sizeof(name), "bumpenv_lum_offset%u", i); + ps->bumpenv_lum_offset_location[i] = GL_EXTCALL(glGetUniformLocationARB(program_id, name)); + } + + ps->tex_factor_location = GL_EXTCALL(glGetUniformLocationARB(program_id, "tex_factor")); + ps->specular_enable_location = GL_EXTCALL(glGetUniformLocationARB(program_id, "specular_enable")); + ps->np2_fixup_location = GL_EXTCALL(glGetUniformLocationARB(program_id, "ps_samplerNP2Fixup")); + ps->ycorrection_location = GL_EXTCALL(glGetUniformLocationARB(program_id, "ycorrection")); +} + +/* Context activation is done by the caller. */ +static void set_glsl_shader_program(const struct wined3d_context *context, struct wined3d_device *device, + enum wined3d_shader_mode vertex_mode, enum wined3d_shader_mode fragment_mode) { const struct wined3d_state *state = &device->stateBlock->state; - struct wined3d_shader *vshader = use_vs ? state->vertex_shader : NULL; - struct wined3d_shader *pshader = use_ps ? state->pixel_shader : NULL; const struct wined3d_gl_info *gl_info = context->gl_info; + const struct ps_np2fixup_info *np2fixup_info = NULL; struct shader_glsl_priv *priv = device->shader_priv; - struct glsl_shader_prog_link *entry = NULL; + struct glsl_shader_prog_link *entry = NULL; + struct wined3d_shader *vshader = NULL; + struct wined3d_shader *gshader = NULL; + struct wined3d_shader *pshader = NULL; GLhandleARB programId = 0; GLhandleARB reorder_shader_id = 0; unsigned int i; - char glsl_name[8]; struct ps_compile_args ps_compile_args; struct vs_compile_args vs_compile_args; + GLhandleARB vs_id, gs_id, ps_id; + struct list *ps_list; - if (vshader) find_vs_compile_args(state, vshader, &vs_compile_args); - if (pshader) find_ps_compile_args(state, pshader, &ps_compile_args); + if (vertex_mode == WINED3D_SHADER_MODE_SHADER) + { + vshader = state->vertex_shader; + find_vs_compile_args(state, vshader, &vs_compile_args); + vs_id = find_glsl_vshader(context, &priv->shader_buffer, vshader, &vs_compile_args); - entry = get_glsl_program_entry(priv, vshader, pshader, &vs_compile_args, &ps_compile_args); - if (entry) + if ((gshader = state->geometry_shader)) + gs_id = find_glsl_geometry_shader(context, &priv->shader_buffer, gshader); + else + gs_id = 0; + } + else + { + vs_id = 0; + gs_id = 0; + } + + if (fragment_mode == WINED3D_SHADER_MODE_SHADER) + { + pshader = state->pixel_shader; + find_ps_compile_args(state, pshader, &ps_compile_args); + ps_id = find_glsl_pshader(context, &priv->shader_buffer, + pshader, &ps_compile_args, &np2fixup_info); + ps_list = &pshader->linked_programs; + } + else if (fragment_mode == WINED3D_SHADER_MODE_FFP && priv->fragment_pipe == &glsl_fragment_pipe) + { + struct glsl_ffp_fragment_shader *ffp_shader; + struct ffp_frag_settings settings; + + gen_ffp_frag_op(device, state, &settings, FALSE); + ffp_shader = shader_glsl_find_ffp_fragment_shader(priv, gl_info, &settings); + ps_id = ffp_shader->id; + ps_list = &ffp_shader->linked_programs; + } + else + { + ps_id = 0; + } + + if ((!vs_id && !gs_id && !ps_id) || (entry = get_glsl_program_entry(priv, vs_id, gs_id, ps_id))) { priv->glsl_program = entry; return; @@ -4358,12 +5589,11 @@ static void set_glsl_shader_program(const struct wined3d_context *context, /* Create the entry */ entry = HeapAlloc(GetProcessHeap(), 0, sizeof(struct glsl_shader_prog_link)); entry->programId = programId; - entry->vshader = vshader; - entry->pshader = pshader; - entry->vs_args = vs_compile_args; - entry->ps_args = ps_compile_args; + entry->vs.id = vs_id; + entry->gs.id = gs_id; + entry->ps.id = ps_id; entry->constant_version = 0; - entry->np2Fixup_info = NULL; + entry->ps.np2_fixup_info = np2fixup_info; /* Add the hash table entry */ add_glsl_program_entry(priv, entry); @@ -4373,7 +5603,6 @@ static void set_glsl_shader_program(const struct wined3d_context *context, /* Attach GLSL vshader */ if (vshader) { - GLhandleARB vshader_id = find_glsl_vshader(context, &priv->shader_buffer, vshader, &vs_compile_args); WORD map = vshader->reg_maps.input_registers; char tmp_name[10]; @@ -4386,8 +5615,8 @@ static void set_glsl_shader_program(const struct wined3d_context *context, */ GL_EXTCALL(glDeleteObjectARB(reorder_shader_id)); - TRACE("Attaching GLSL shader object %u to program %u\n", vshader_id, programId); - GL_EXTCALL(glAttachObjectARB(programId, vshader_id)); + TRACE("Attaching GLSL shader object %u to program %u.\n", vs_id, programId); + GL_EXTCALL(glAttachObjectARB(programId, vs_id)); checkGLcall("glAttachObjectARB"); /* Bind vertex attributes to a corresponding index number to match @@ -4403,24 +5632,43 @@ static void set_glsl_shader_program(const struct wined3d_context *context, { if (!(map & 1)) continue; - snprintf(tmp_name, sizeof(tmp_name), "attrib%u", i); + snprintf(tmp_name, sizeof(tmp_name), "vs_in%u", i); GL_EXTCALL(glBindAttribLocationARB(programId, i, tmp_name)); } checkGLcall("glBindAttribLocationARB"); - list_add_head(&vshader->linked_programs, &entry->vshader_entry); + list_add_head(&vshader->linked_programs, &entry->vs.shader_entry); + } + + if (gshader) + { + TRACE("Attaching GLSL geometry shader object %u to program %u.\n", gs_id, programId); + GL_EXTCALL(glAttachObjectARB(programId, gs_id)); + checkGLcall("glAttachObjectARB"); + + TRACE("input type %s, output type %s, vertices out %u.\n", + debug_d3dprimitivetype(gshader->u.gs.input_type), + debug_d3dprimitivetype(gshader->u.gs.output_type), + gshader->u.gs.vertices_out); + GL_EXTCALL(glProgramParameteriARB(programId, GL_GEOMETRY_INPUT_TYPE_ARB, + gl_primitive_type_from_d3d(gshader->u.gs.input_type))); + GL_EXTCALL(glProgramParameteriARB(programId, GL_GEOMETRY_OUTPUT_TYPE_ARB, + gl_primitive_type_from_d3d(gshader->u.gs.output_type))); + GL_EXTCALL(glProgramParameteriARB(programId, GL_GEOMETRY_VERTICES_OUT_ARB, + gshader->u.gs.vertices_out)); + checkGLcall("glProgramParameteriARB"); + + list_add_head(&gshader->linked_programs, &entry->gs.shader_entry); } /* Attach GLSL pshader */ - if (pshader) + if (ps_id) { - GLhandleARB pshader_id = find_glsl_pshader(context, &priv->shader_buffer, - pshader, &ps_compile_args, &entry->np2Fixup_info); - TRACE("Attaching GLSL shader object %u to program %u\n", pshader_id, programId); - GL_EXTCALL(glAttachObjectARB(programId, pshader_id)); + TRACE("Attaching GLSL shader object %u to program %u.\n", ps_id, programId); + GL_EXTCALL(glAttachObjectARB(programId, ps_id)); checkGLcall("glAttachObjectARB"); - list_add_head(&pshader->linked_programs, &entry->pshader_entry); + list_add_head(ps_list, &entry->ps.shader_entry); } /* Link the program */ @@ -4428,63 +5676,19 @@ static void set_glsl_shader_program(const struct wined3d_context *context, GL_EXTCALL(glLinkProgramARB(programId)); shader_glsl_validate_link(gl_info, programId); - entry->vuniformF_locations = HeapAlloc(GetProcessHeap(), 0, - sizeof(GLhandleARB) * gl_info->limits.glsl_vs_float_constants); - for (i = 0; i < gl_info->limits.glsl_vs_float_constants; ++i) - { - snprintf(glsl_name, sizeof(glsl_name), "VC[%i]", i); - entry->vuniformF_locations[i] = GL_EXTCALL(glGetUniformLocationARB(programId, glsl_name)); - } - for (i = 0; i < MAX_CONST_I; ++i) - { - snprintf(glsl_name, sizeof(glsl_name), "VI[%i]", i); - entry->vuniformI_locations[i] = GL_EXTCALL(glGetUniformLocationARB(programId, glsl_name)); - } - entry->puniformF_locations = HeapAlloc(GetProcessHeap(), 0, - sizeof(GLhandleARB) * gl_info->limits.glsl_ps_float_constants); - for (i = 0; i < gl_info->limits.glsl_ps_float_constants; ++i) - { - snprintf(glsl_name, sizeof(glsl_name), "PC[%i]", i); - entry->puniformF_locations[i] = GL_EXTCALL(glGetUniformLocationARB(programId, glsl_name)); - } - for (i = 0; i < MAX_CONST_I; ++i) - { - snprintf(glsl_name, sizeof(glsl_name), "PI[%i]", i); - entry->puniformI_locations[i] = GL_EXTCALL(glGetUniformLocationARB(programId, glsl_name)); - } - - if(pshader) { - char name[32]; - - for(i = 0; i < MAX_TEXTURES; i++) { - sprintf(name, "bumpenvmat%u", i); - entry->bumpenvmat_location[i] = GL_EXTCALL(glGetUniformLocationARB(programId, name)); - sprintf(name, "luminancescale%u", i); - entry->luminancescale_location[i] = GL_EXTCALL(glGetUniformLocationARB(programId, name)); - sprintf(name, "luminanceoffset%u", i); - entry->luminanceoffset_location[i] = GL_EXTCALL(glGetUniformLocationARB(programId, name)); - } - - if (ps_compile_args.np2_fixup) { - if (entry->np2Fixup_info) { - entry->np2Fixup_location = GL_EXTCALL(glGetUniformLocationARB(programId, "PsamplerNP2Fixup")); - } else { - FIXME("NP2 texcoord fixup needed for this pixelshader, but no fixup uniform found.\n"); - } - } - } - - entry->posFixup_location = GL_EXTCALL(glGetUniformLocationARB(programId, "posFixup")); - entry->ycorrection_location = GL_EXTCALL(glGetUniformLocationARB(programId, "ycorrection")); + shader_glsl_init_vs_uniform_locations(gl_info, programId, &entry->vs); + shader_glsl_init_ps_uniform_locations(gl_info, programId, &entry->ps); checkGLcall("Find glsl program uniform locations"); if (pshader && pshader->reg_maps.shader_version.major >= 3 && pshader->u.ps.declared_in_count > vec4_varyings(3, gl_info)) { TRACE("Shader %d needs vertex color clamping disabled\n", programId); - entry->vertex_color_clamp = GL_FALSE; - } else { - entry->vertex_color_clamp = GL_FIXED_ONLY_ARB; + entry->vs.vertex_color_clamp = GL_FALSE; + } + else + { + entry->vs.vertex_color_clamp = GL_FIXED_ONLY_ARB; } /* Set the shader to allow uniform loading on it */ @@ -4499,20 +5703,20 @@ static void set_glsl_shader_program(const struct wined3d_context *context, * fixed function fragment processing setups. So once the program is linked these samplers * won't change. */ - if (vshader) shader_glsl_load_vsamplers(gl_info, device->texUnitMap, programId); - if (pshader) shader_glsl_load_psamplers(gl_info, device->texUnitMap, programId); + shader_glsl_load_vsamplers(gl_info, device->texUnitMap, programId); + shader_glsl_load_psamplers(gl_info, device->texUnitMap, programId); /* If the local constants do not have to be loaded with the environment constants, * load them now to have them hardcoded in the GLSL program. This saves some CPU cycles * later */ if (pshader && !pshader->load_local_constsF) - hardcode_local_constants(pshader, gl_info, programId, 'P'); + hardcode_local_constants(pshader, gl_info, programId, "ps"); if (vshader && !vshader->load_local_constsF) - hardcode_local_constants(vshader, gl_info, programId, 'V'); + hardcode_local_constants(vshader, gl_info, programId, "vs"); } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static GLhandleARB create_glsl_blt_shader(const struct wined3d_gl_info *gl_info, enum tex_types tex_type, BOOL masked) { GLhandleARB program_id; @@ -4622,8 +5826,9 @@ static GLhandleARB create_glsl_blt_shader(const struct wined3d_gl_info *gl_info, return program_id; } -/* GL locking is done by the caller */ -static void shader_glsl_select(const struct wined3d_context *context, BOOL usePS, BOOL useVS) +/* Context activation is done by the caller. */ +static void shader_glsl_select(const struct wined3d_context *context, enum wined3d_shader_mode vertex_mode, + enum wined3d_shader_mode fragment_mode) { const struct wined3d_gl_info *gl_info = context->gl_info; struct wined3d_device *device = context->swapchain->device; @@ -4631,13 +5836,9 @@ static void shader_glsl_select(const struct wined3d_context *context, BOOL usePS GLhandleARB program_id = 0; GLenum old_vertex_color_clamp, current_vertex_color_clamp; - old_vertex_color_clamp = priv->glsl_program ? priv->glsl_program->vertex_color_clamp : GL_FIXED_ONLY_ARB; - - if (useVS || usePS) set_glsl_shader_program(context, device, usePS, useVS); - else priv->glsl_program = NULL; - - current_vertex_color_clamp = priv->glsl_program ? priv->glsl_program->vertex_color_clamp : GL_FIXED_ONLY_ARB; - + old_vertex_color_clamp = priv->glsl_program ? priv->glsl_program->vs.vertex_color_clamp : GL_FIXED_ONLY_ARB; + set_glsl_shader_program(context, device, vertex_mode, fragment_mode); + current_vertex_color_clamp = priv->glsl_program ? priv->glsl_program->vs.vertex_color_clamp : GL_FIXED_ONLY_ARB; if (old_vertex_color_clamp != current_vertex_color_clamp) { if (gl_info->supported[ARB_COLOR_BUFFER_FLOAT]) @@ -4659,13 +5860,13 @@ static void shader_glsl_select(const struct wined3d_context *context, BOOL usePS /* In case that NP2 texcoord fixup data is found for the selected program, trigger a reload of the * constants. This has to be done because it can't be guaranteed that sampler() (from state.c) is * called between selecting the shader and using it, which results in wrong fixup for some frames. */ - if (priv->glsl_program && priv->glsl_program->np2Fixup_info) + if (priv->glsl_program && priv->glsl_program->ps.np2_fixup_info) { shader_glsl_load_np2fixup_constants(priv, gl_info, &device->stateBlock->state); } } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void shader_glsl_select_depth_blt(void *shader_priv, const struct wined3d_gl_info *gl_info, enum tex_types tex_type, const SIZE *ds_mask_size) { @@ -4694,7 +5895,7 @@ static void shader_glsl_select_depth_blt(void *shader_priv, const struct wined3d } } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void shader_glsl_deselect_depth_blt(void *shader_priv, const struct wined3d_gl_info *gl_info) { struct shader_glsl_priv *priv = shader_priv; @@ -4709,103 +5910,105 @@ static void shader_glsl_deselect_depth_blt(void *shader_priv, const struct wined static void shader_glsl_destroy(struct wined3d_shader *shader) { + struct glsl_shader_private *shader_data = shader->backend_data; struct wined3d_device *device = shader->device; struct shader_glsl_priv *priv = device->shader_priv; const struct wined3d_gl_info *gl_info; const struct list *linked_programs; struct wined3d_context *context; - char pshader = shader_is_pshader_version(shader->reg_maps.shader_version.type); - - if (pshader) + if (!shader_data || !shader_data->num_gl_shaders) { - struct glsl_pshader_private *shader_data = shader->backend_data; - - if (!shader_data || !shader_data->num_gl_shaders) - { - HeapFree(GetProcessHeap(), 0, shader_data); - shader->backend_data = NULL; - return; - } - - context = context_acquire(device, NULL); - gl_info = context->gl_info; - - if (priv->glsl_program && priv->glsl_program->pshader == shader) - { - ENTER_GL(); - shader_glsl_select(context, FALSE, FALSE); - LEAVE_GL(); - } - } - else - { - struct glsl_vshader_private *shader_data = shader->backend_data; - - if (!shader_data || !shader_data->num_gl_shaders) - { - HeapFree(GetProcessHeap(), 0, shader_data); - shader->backend_data = NULL; - return; - } - - context = context_acquire(device, NULL); - gl_info = context->gl_info; - - if (priv->glsl_program && priv->glsl_program->vshader == shader) - { - ENTER_GL(); - shader_glsl_select(context, FALSE, FALSE); - LEAVE_GL(); - } + HeapFree(GetProcessHeap(), 0, shader_data); + shader->backend_data = NULL; + return; } + context = context_acquire(device, NULL); + gl_info = context->gl_info; + + TRACE("Deleting linked programs.\n"); linked_programs = &shader->linked_programs; - - TRACE("Deleting linked programs\n"); - if (linked_programs->next) { + if (linked_programs->next) + { struct glsl_shader_prog_link *entry, *entry2; - - ENTER_GL(); - if(pshader) { - LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, linked_programs, struct glsl_shader_prog_link, pshader_entry) { - delete_glsl_program_entry(priv, gl_info, entry); - } - } else { - LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, linked_programs, struct glsl_shader_prog_link, vshader_entry) { - delete_glsl_program_entry(priv, gl_info, entry); - } - } - LEAVE_GL(); - } - - if (pshader) - { - struct glsl_pshader_private *shader_data = shader->backend_data; UINT i; - ENTER_GL(); - for(i = 0; i < shader_data->num_gl_shaders; i++) { - TRACE("deleting pshader %u\n", shader_data->gl_shaders[i].prgId); - GL_EXTCALL(glDeleteObjectARB(shader_data->gl_shaders[i].prgId)); - checkGLcall("glDeleteObjectARB"); - } - LEAVE_GL(); - HeapFree(GetProcessHeap(), 0, shader_data->gl_shaders); - } - else - { - struct glsl_vshader_private *shader_data = shader->backend_data; - UINT i; + switch (shader->reg_maps.shader_version.type) + { + case WINED3D_SHADER_TYPE_PIXEL: + { + struct glsl_ps_compiled_shader *gl_shaders = shader_data->gl_shaders.ps; - ENTER_GL(); - for(i = 0; i < shader_data->num_gl_shaders; i++) { - TRACE("deleting vshader %u\n", shader_data->gl_shaders[i].prgId); - GL_EXTCALL(glDeleteObjectARB(shader_data->gl_shaders[i].prgId)); - checkGLcall("glDeleteObjectARB"); + LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, linked_programs, + struct glsl_shader_prog_link, ps.shader_entry) + { + delete_glsl_program_entry(priv, gl_info, entry); + } + + for (i = 0; i < shader_data->num_gl_shaders; ++i) + { + TRACE("Deleting pixel shader %u.\n", gl_shaders[i].prgId); + if (priv->glsl_program && priv->glsl_program->ps.id == gl_shaders[i].prgId) + shader_glsl_select(context, WINED3D_SHADER_MODE_NONE, WINED3D_SHADER_MODE_NONE); + GL_EXTCALL(glDeleteObjectARB(gl_shaders[i].prgId)); + checkGLcall("glDeleteObjectARB"); + } + HeapFree(GetProcessHeap(), 0, shader_data->gl_shaders.ps); + + break; + } + + case WINED3D_SHADER_TYPE_VERTEX: + { + struct glsl_vs_compiled_shader *gl_shaders = shader_data->gl_shaders.vs; + + LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, linked_programs, + struct glsl_shader_prog_link, vs.shader_entry) + { + delete_glsl_program_entry(priv, gl_info, entry); + } + + for (i = 0; i < shader_data->num_gl_shaders; ++i) + { + TRACE("Deleting vertex shader %u.\n", gl_shaders[i].prgId); + if (priv->glsl_program && priv->glsl_program->vs.id == gl_shaders[i].prgId) + shader_glsl_select(context, WINED3D_SHADER_MODE_NONE, WINED3D_SHADER_MODE_NONE); + GL_EXTCALL(glDeleteObjectARB(gl_shaders[i].prgId)); + checkGLcall("glDeleteObjectARB"); + } + HeapFree(GetProcessHeap(), 0, shader_data->gl_shaders.vs); + + break; + } + + case WINED3D_SHADER_TYPE_GEOMETRY: + { + struct glsl_gs_compiled_shader *gl_shaders = shader_data->gl_shaders.gs; + + LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, linked_programs, + struct glsl_shader_prog_link, gs.shader_entry) + { + delete_glsl_program_entry(priv, gl_info, entry); + } + + for (i = 0; i < shader_data->num_gl_shaders; ++i) + { + TRACE("Deleting geometry shader %u.\n", gl_shaders[i].id); + if (priv->glsl_program && priv->glsl_program->gs.id == gl_shaders[i].id) + shader_glsl_select(context, WINED3D_SHADER_MODE_NONE, WINED3D_SHADER_MODE_NONE); + GL_EXTCALL(glDeleteObjectARB(gl_shaders[i].id)); + checkGLcall("glDeleteObjectARB"); + } + HeapFree(GetProcessHeap(), 0, shader_data->gl_shaders.gs); + + break; + } + + default: + ERR("Unhandled shader type %#x.\n", shader->reg_maps.shader_version.type); + break; } - LEAVE_GL(); - HeapFree(GetProcessHeap(), 0, shader_data->gl_shaders); } HeapFree(GetProcessHeap(), 0, shader->backend_data); @@ -4819,16 +6022,15 @@ static int glsl_program_key_compare(const void *key, const struct wine_rb_entry const struct glsl_program_key *k = key; const struct glsl_shader_prog_link *prog = WINE_RB_ENTRY_VALUE(entry, const struct glsl_shader_prog_link, program_lookup_entry); - int cmp; - if (k->vshader > prog->vshader) return 1; - else if (k->vshader < prog->vshader) return -1; + if (k->vs_id > prog->vs.id) return 1; + else if (k->vs_id < prog->vs.id) return -1; - if (k->pshader > prog->pshader) return 1; - else if (k->pshader < prog->pshader) return -1; + if (k->gs_id > prog->gs.id) return 1; + else if (k->gs_id < prog->gs.id) return -1; - if (k->vshader && (cmp = memcmp(&k->vs_args, &prog->vs_args, sizeof(prog->vs_args)))) return cmp; - if (k->pshader && (cmp = memcmp(&k->ps_args, &prog->ps_args, sizeof(prog->ps_args)))) return cmp; + if (k->ps_id > prog->ps.id) return 1; + else if (k->ps_id < prog->ps.id) return -1; return 0; } @@ -4865,12 +6067,21 @@ static const struct wine_rb_functions wined3d_glsl_program_rb_functions = glsl_program_key_compare, }; -static HRESULT shader_glsl_alloc(struct wined3d_device *device) +static HRESULT shader_glsl_alloc(struct wined3d_device *device, const struct fragment_pipeline *fragment_pipe) { const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; struct shader_glsl_priv *priv = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct shader_glsl_priv)); SIZE_T stack_size = wined3d_log2i(max(gl_info->limits.glsl_vs_float_constants, gl_info->limits.glsl_ps_float_constants)) + 1; + struct fragment_caps fragment_caps; + void *fragment_priv; + + if (!(fragment_priv = fragment_pipe->alloc_private(&glsl_shader_backend, priv))) + { + ERR("Failed to initialize fragment pipe.\n"); + HeapFree(GetProcessHeap(), 0, priv); + return E_FAIL; + } if (!shader_buffer_init(&priv->shader_buffer)) { @@ -4904,6 +6115,10 @@ static HRESULT shader_glsl_alloc(struct wined3d_device *device) } priv->next_constant_version = 1; + fragment_pipe->get_caps(gl_info, &fragment_caps); + priv->ffp_proj_control = fragment_caps.wined3d_caps & WINED3D_FRAGMENT_CAP_PROJ_CONTROL; + device->fragment_priv = fragment_priv; + priv->fragment_pipe = fragment_pipe; device->shader_priv = priv; return WINED3D_OK; @@ -4913,6 +6128,7 @@ fail: constant_heap_free(&priv->vconst_heap); HeapFree(GetProcessHeap(), 0, priv->stack); shader_buffer_free(&priv->shader_buffer); + fragment_pipe->free_private(device); HeapFree(GetProcessHeap(), 0, priv); return E_OUTOFMEMORY; } @@ -4924,7 +6140,6 @@ static void shader_glsl_free(struct wined3d_device *device) struct shader_glsl_priv *priv = device->shader_priv; int i; - ENTER_GL(); for (i = 0; i < tex_type_count; ++i) { if (priv->depth_blt_program_full[i]) @@ -4936,13 +6151,13 @@ static void shader_glsl_free(struct wined3d_device *device) GL_EXTCALL(glDeleteObjectARB(priv->depth_blt_program_masked[i])); } } - LEAVE_GL(); wine_rb_destroy(&priv->program_lookup, NULL, NULL); constant_heap_free(&priv->pconst_heap); constant_heap_free(&priv->vconst_heap); HeapFree(GetProcessHeap(), 0, priv->stack); shader_buffer_free(&priv->shader_buffer); + priv->fragment_pipe->free_private(device); HeapFree(GetProcessHeap(), 0, device->shader_priv); device->shader_priv = NULL; @@ -4952,27 +6167,26 @@ static void shader_glsl_context_destroyed(void *shader_priv, const struct wined3 static void shader_glsl_get_caps(const struct wined3d_gl_info *gl_info, struct shader_caps *caps) { - if (gl_info->supported[EXT_GPU_SHADER4] && gl_info->supported[ARB_GEOMETRY_SHADER4] - && gl_info->glsl_version >= MAKEDWORD_VERSION(1, 50)) - { - caps->VertexShaderVersion = 4; - caps->PixelShaderVersion = 4; - } + UINT shader_model; + + if (gl_info->supported[EXT_GPU_SHADER4] && gl_info->supported[ARB_SHADER_BIT_ENCODING] + && gl_info->supported[ARB_GEOMETRY_SHADER4] && gl_info->glsl_version >= MAKEDWORD_VERSION(1, 50) + && gl_info->supported[ARB_DRAW_ELEMENTS_BASE_VERTEX] && gl_info->supported[ARB_DRAW_INSTANCED]) + shader_model = 4; /* ARB_shader_texture_lod or EXT_gpu_shader4 is required for the SM3 * texldd and texldl instructions. */ else if (gl_info->supported[ARB_SHADER_TEXTURE_LOD] || gl_info->supported[EXT_GPU_SHADER4]) - { - caps->VertexShaderVersion = 3; - caps->PixelShaderVersion = 3; - } + shader_model = 3; else - { - caps->VertexShaderVersion = 2; - caps->PixelShaderVersion = 2; - } + shader_model = 2; + TRACE("Shader model %u.\n", shader_model); - caps->MaxVertexShaderConst = gl_info->limits.glsl_vs_float_constants; - caps->MaxPixelShaderConst = gl_info->limits.glsl_ps_float_constants; + caps->vs_version = min(wined3d_settings.max_sm_vs, shader_model); + caps->gs_version = min(wined3d_settings.max_sm_gs, shader_model); + caps->ps_version = min(wined3d_settings.max_sm_ps, shader_model); + + caps->vs_uniform_count = gl_info->limits.glsl_vs_float_constants; + caps->ps_uniform_count = gl_info->limits.glsl_ps_float_constants; /* FIXME: The following line is card dependent. -8.0 to 8.0 is the * Direct3D minimum requirement. @@ -4986,12 +6200,13 @@ static void shader_glsl_get_caps(const struct wined3d_gl_info *gl_info, struct s * the shader will generate incorrect results too. Unfortunately, GL deliberately doesn't * offer a way to query this. */ - caps->PixelShader1xMaxValue = 8.0; + caps->ps_1x_max_value = 8.0; - caps->VSClipping = TRUE; - - TRACE("Hardware vertex shader version %u enabled (GLSL).\n", caps->VertexShaderVersion); - TRACE("Hardware pixel shader version %u enabled (GLSL).\n", caps->PixelShaderVersion); + /* Ideally we'd only set caps like sRGB writes here if supported by both + * the shader backend and the fragment pipe, but we can get called before + * shader_glsl_alloc(). */ + caps->wined3d_caps = WINED3D_SHADER_CAP_VS_CLIPPING + | WINED3D_SHADER_CAP_SRGB_WRITE; } static BOOL shader_glsl_color_fixup_supported(struct color_fixup_desc fixup) @@ -5015,113 +6230,117 @@ static BOOL shader_glsl_color_fixup_supported(struct color_fixup_desc fixup) static const SHADER_HANDLER shader_glsl_instruction_handler_table[WINED3DSIH_TABLE_SIZE] = { - /* WINED3DSIH_ABS */ shader_glsl_map2gl, - /* WINED3DSIH_ADD */ shader_glsl_arith, - /* WINED3DSIH_AND */ NULL, - /* WINED3DSIH_BEM */ shader_glsl_bem, - /* WINED3DSIH_BREAK */ shader_glsl_break, - /* WINED3DSIH_BREAKC */ shader_glsl_breakc, - /* WINED3DSIH_BREAKP */ NULL, - /* WINED3DSIH_CALL */ shader_glsl_call, - /* WINED3DSIH_CALLNZ */ shader_glsl_callnz, - /* WINED3DSIH_CMP */ shader_glsl_cmp, - /* WINED3DSIH_CND */ shader_glsl_cnd, - /* WINED3DSIH_CRS */ shader_glsl_cross, - /* WINED3DSIH_CUT */ NULL, - /* WINED3DSIH_DCL */ NULL, - /* WINED3DSIH_DEF */ NULL, - /* WINED3DSIH_DEFB */ NULL, - /* WINED3DSIH_DEFI */ NULL, - /* WINED3DSIH_DIV */ NULL, - /* WINED3DSIH_DP2ADD */ shader_glsl_dp2add, - /* WINED3DSIH_DP3 */ shader_glsl_dot, - /* WINED3DSIH_DP4 */ shader_glsl_dot, - /* WINED3DSIH_DST */ shader_glsl_dst, - /* WINED3DSIH_DSX */ shader_glsl_map2gl, - /* WINED3DSIH_DSY */ shader_glsl_map2gl, - /* WINED3DSIH_ELSE */ shader_glsl_else, - /* WINED3DSIH_EMIT */ NULL, - /* WINED3DSIH_ENDIF */ shader_glsl_end, - /* WINED3DSIH_ENDLOOP */ shader_glsl_end, - /* WINED3DSIH_ENDREP */ shader_glsl_end, - /* WINED3DSIH_EQ */ NULL, - /* WINED3DSIH_EXP */ shader_glsl_map2gl, - /* WINED3DSIH_EXPP */ shader_glsl_expp, - /* WINED3DSIH_FRC */ shader_glsl_map2gl, - /* WINED3DSIH_FTOI */ NULL, - /* WINED3DSIH_GE */ NULL, - /* WINED3DSIH_IADD */ NULL, - /* WINED3DSIH_IEQ */ NULL, - /* WINED3DSIH_IF */ shader_glsl_if, - /* WINED3DSIH_IFC */ shader_glsl_ifc, - /* WINED3DSIH_IGE */ NULL, - /* WINED3DSIH_IMUL */ NULL, - /* WINED3DSIH_ITOF */ NULL, - /* WINED3DSIH_LABEL */ shader_glsl_label, - /* WINED3DSIH_LD */ NULL, - /* WINED3DSIH_LIT */ shader_glsl_lit, - /* WINED3DSIH_LOG */ shader_glsl_log, - /* WINED3DSIH_LOGP */ shader_glsl_log, - /* WINED3DSIH_LOOP */ shader_glsl_loop, - /* WINED3DSIH_LRP */ shader_glsl_lrp, - /* WINED3DSIH_LT */ NULL, - /* WINED3DSIH_M3x2 */ shader_glsl_mnxn, - /* WINED3DSIH_M3x3 */ shader_glsl_mnxn, - /* WINED3DSIH_M3x4 */ shader_glsl_mnxn, - /* WINED3DSIH_M4x3 */ shader_glsl_mnxn, - /* WINED3DSIH_M4x4 */ shader_glsl_mnxn, - /* WINED3DSIH_MAD */ shader_glsl_mad, - /* WINED3DSIH_MAX */ shader_glsl_map2gl, - /* WINED3DSIH_MIN */ shader_glsl_map2gl, - /* WINED3DSIH_MOV */ shader_glsl_mov, - /* WINED3DSIH_MOVA */ shader_glsl_mov, - /* WINED3DSIH_MOVC */ NULL, - /* WINED3DSIH_MUL */ shader_glsl_arith, - /* WINED3DSIH_NOP */ NULL, - /* WINED3DSIH_NRM */ shader_glsl_nrm, - /* WINED3DSIH_PHASE */ NULL, - /* WINED3DSIH_POW */ shader_glsl_pow, - /* WINED3DSIH_RCP */ shader_glsl_rcp, - /* WINED3DSIH_REP */ shader_glsl_rep, - /* WINED3DSIH_RET */ shader_glsl_ret, - /* WINED3DSIH_ROUND_NI */ NULL, - /* WINED3DSIH_RSQ */ shader_glsl_rsq, - /* WINED3DSIH_SAMPLE */ NULL, - /* WINED3DSIH_SAMPLE_GRAD */ NULL, - /* WINED3DSIH_SAMPLE_LOD */ NULL, - /* WINED3DSIH_SETP */ NULL, - /* WINED3DSIH_SGE */ shader_glsl_compare, - /* WINED3DSIH_SGN */ shader_glsl_sgn, - /* WINED3DSIH_SINCOS */ shader_glsl_sincos, - /* WINED3DSIH_SLT */ shader_glsl_compare, - /* WINED3DSIH_SQRT */ NULL, - /* WINED3DSIH_SUB */ shader_glsl_arith, - /* WINED3DSIH_TEX */ shader_glsl_tex, - /* WINED3DSIH_TEXBEM */ shader_glsl_texbem, - /* WINED3DSIH_TEXBEML */ shader_glsl_texbem, - /* WINED3DSIH_TEXCOORD */ shader_glsl_texcoord, - /* WINED3DSIH_TEXDEPTH */ shader_glsl_texdepth, - /* WINED3DSIH_TEXDP3 */ shader_glsl_texdp3, - /* WINED3DSIH_TEXDP3TEX */ shader_glsl_texdp3tex, - /* WINED3DSIH_TEXKILL */ shader_glsl_texkill, - /* WINED3DSIH_TEXLDD */ shader_glsl_texldd, - /* WINED3DSIH_TEXLDL */ shader_glsl_texldl, - /* WINED3DSIH_TEXM3x2DEPTH */ shader_glsl_texm3x2depth, - /* WINED3DSIH_TEXM3x2PAD */ shader_glsl_texm3x2pad, - /* WINED3DSIH_TEXM3x2TEX */ shader_glsl_texm3x2tex, - /* WINED3DSIH_TEXM3x3 */ shader_glsl_texm3x3, - /* WINED3DSIH_TEXM3x3DIFF */ NULL, - /* WINED3DSIH_TEXM3x3PAD */ shader_glsl_texm3x3pad, - /* WINED3DSIH_TEXM3x3SPEC */ shader_glsl_texm3x3spec, - /* WINED3DSIH_TEXM3x3TEX */ shader_glsl_texm3x3tex, - /* WINED3DSIH_TEXM3x3VSPEC */ shader_glsl_texm3x3vspec, - /* WINED3DSIH_TEXREG2AR */ shader_glsl_texreg2ar, - /* WINED3DSIH_TEXREG2GB */ shader_glsl_texreg2gb, - /* WINED3DSIH_TEXREG2RGB */ shader_glsl_texreg2rgb, - /* WINED3DSIH_UDIV */ NULL, - /* WINED3DSIH_USHR */ NULL, - /* WINED3DSIH_UTOF */ NULL, - /* WINED3DSIH_XOR */ NULL, + /* WINED3DSIH_ABS */ shader_glsl_map2gl, + /* WINED3DSIH_ADD */ shader_glsl_binop, + /* WINED3DSIH_AND */ shader_glsl_binop, + /* WINED3DSIH_BEM */ shader_glsl_bem, + /* WINED3DSIH_BREAK */ shader_glsl_break, + /* WINED3DSIH_BREAKC */ shader_glsl_breakc, + /* WINED3DSIH_BREAKP */ shader_glsl_breakp, + /* WINED3DSIH_CALL */ shader_glsl_call, + /* WINED3DSIH_CALLNZ */ shader_glsl_callnz, + /* WINED3DSIH_CMP */ shader_glsl_conditional_move, + /* WINED3DSIH_CND */ shader_glsl_cnd, + /* WINED3DSIH_CRS */ shader_glsl_cross, + /* WINED3DSIH_CUT */ shader_glsl_cut, + /* WINED3DSIH_DCL */ shader_glsl_nop, + /* WINED3DSIH_DCL_CONSTANT_BUFFER */ shader_glsl_nop, + /* WINED3DSIH_DCL_INPUT_PRIMITIVE */ shader_glsl_nop, + /* WINED3DSIH_DCL_OUTPUT_TOPOLOGY */ shader_glsl_nop, + /* WINED3DSIH_DCL_VERTICES_OUT */ shader_glsl_nop, + /* WINED3DSIH_DEF */ shader_glsl_nop, + /* WINED3DSIH_DEFB */ shader_glsl_nop, + /* WINED3DSIH_DEFI */ shader_glsl_nop, + /* WINED3DSIH_DIV */ shader_glsl_binop, + /* WINED3DSIH_DP2ADD */ shader_glsl_dp2add, + /* WINED3DSIH_DP3 */ shader_glsl_dot, + /* WINED3DSIH_DP4 */ shader_glsl_dot, + /* WINED3DSIH_DST */ shader_glsl_dst, + /* WINED3DSIH_DSX */ shader_glsl_map2gl, + /* WINED3DSIH_DSY */ shader_glsl_map2gl, + /* WINED3DSIH_ELSE */ shader_glsl_else, + /* WINED3DSIH_EMIT */ shader_glsl_emit, + /* WINED3DSIH_ENDIF */ shader_glsl_end, + /* WINED3DSIH_ENDLOOP */ shader_glsl_end, + /* WINED3DSIH_ENDREP */ shader_glsl_end, + /* WINED3DSIH_EQ */ shader_glsl_relop, + /* WINED3DSIH_EXP */ shader_glsl_map2gl, + /* WINED3DSIH_EXPP */ shader_glsl_expp, + /* WINED3DSIH_FRC */ shader_glsl_map2gl, + /* WINED3DSIH_FTOI */ shader_glsl_to_int, + /* WINED3DSIH_GE */ shader_glsl_relop, + /* WINED3DSIH_IADD */ shader_glsl_binop, + /* WINED3DSIH_IEQ */ NULL, + /* WINED3DSIH_IF */ shader_glsl_if, + /* WINED3DSIH_IFC */ shader_glsl_ifc, + /* WINED3DSIH_IGE */ shader_glsl_relop, + /* WINED3DSIH_IMUL */ shader_glsl_imul, + /* WINED3DSIH_ITOF */ shader_glsl_to_float, + /* WINED3DSIH_LABEL */ shader_glsl_label, + /* WINED3DSIH_LD */ NULL, + /* WINED3DSIH_LIT */ shader_glsl_lit, + /* WINED3DSIH_LOG */ shader_glsl_log, + /* WINED3DSIH_LOGP */ shader_glsl_log, + /* WINED3DSIH_LOOP */ shader_glsl_loop, + /* WINED3DSIH_LRP */ shader_glsl_lrp, + /* WINED3DSIH_LT */ shader_glsl_relop, + /* WINED3DSIH_M3x2 */ shader_glsl_mnxn, + /* WINED3DSIH_M3x3 */ shader_glsl_mnxn, + /* WINED3DSIH_M3x4 */ shader_glsl_mnxn, + /* WINED3DSIH_M4x3 */ shader_glsl_mnxn, + /* WINED3DSIH_M4x4 */ shader_glsl_mnxn, + /* WINED3DSIH_MAD */ shader_glsl_mad, + /* WINED3DSIH_MAX */ shader_glsl_map2gl, + /* WINED3DSIH_MIN */ shader_glsl_map2gl, + /* WINED3DSIH_MOV */ shader_glsl_mov, + /* WINED3DSIH_MOVA */ shader_glsl_mov, + /* WINED3DSIH_MOVC */ shader_glsl_conditional_move, + /* WINED3DSIH_MUL */ shader_glsl_binop, + /* WINED3DSIH_NOP */ shader_glsl_nop, + /* WINED3DSIH_NRM */ shader_glsl_nrm, + /* WINED3DSIH_PHASE */ shader_glsl_nop, + /* WINED3DSIH_POW */ shader_glsl_pow, + /* WINED3DSIH_RCP */ shader_glsl_rcp, + /* WINED3DSIH_REP */ shader_glsl_rep, + /* WINED3DSIH_RET */ shader_glsl_ret, + /* WINED3DSIH_ROUND_NI */ shader_glsl_map2gl, + /* WINED3DSIH_RSQ */ shader_glsl_rsq, + /* WINED3DSIH_SAMPLE */ NULL, + /* WINED3DSIH_SAMPLE_GRAD */ NULL, + /* WINED3DSIH_SAMPLE_LOD */ NULL, + /* WINED3DSIH_SETP */ NULL, + /* WINED3DSIH_SGE */ shader_glsl_compare, + /* WINED3DSIH_SGN */ shader_glsl_sgn, + /* WINED3DSIH_SINCOS */ shader_glsl_sincos, + /* WINED3DSIH_SLT */ shader_glsl_compare, + /* WINED3DSIH_SQRT */ NULL, + /* WINED3DSIH_SUB */ shader_glsl_binop, + /* WINED3DSIH_TEX */ shader_glsl_tex, + /* WINED3DSIH_TEXBEM */ shader_glsl_texbem, + /* WINED3DSIH_TEXBEML */ shader_glsl_texbem, + /* WINED3DSIH_TEXCOORD */ shader_glsl_texcoord, + /* WINED3DSIH_TEXDEPTH */ shader_glsl_texdepth, + /* WINED3DSIH_TEXDP3 */ shader_glsl_texdp3, + /* WINED3DSIH_TEXDP3TEX */ shader_glsl_texdp3tex, + /* WINED3DSIH_TEXKILL */ shader_glsl_texkill, + /* WINED3DSIH_TEXLDD */ shader_glsl_texldd, + /* WINED3DSIH_TEXLDL */ shader_glsl_texldl, + /* WINED3DSIH_TEXM3x2DEPTH */ shader_glsl_texm3x2depth, + /* WINED3DSIH_TEXM3x2PAD */ shader_glsl_texm3x2pad, + /* WINED3DSIH_TEXM3x2TEX */ shader_glsl_texm3x2tex, + /* WINED3DSIH_TEXM3x3 */ shader_glsl_texm3x3, + /* WINED3DSIH_TEXM3x3DIFF */ NULL, + /* WINED3DSIH_TEXM3x3PAD */ shader_glsl_texm3x3pad, + /* WINED3DSIH_TEXM3x3SPEC */ shader_glsl_texm3x3spec, + /* WINED3DSIH_TEXM3x3TEX */ shader_glsl_texm3x3tex, + /* WINED3DSIH_TEXM3x3VSPEC */ shader_glsl_texm3x3vspec, + /* WINED3DSIH_TEXREG2AR */ shader_glsl_texreg2ar, + /* WINED3DSIH_TEXREG2GB */ shader_glsl_texreg2gb, + /* WINED3DSIH_TEXREG2RGB */ shader_glsl_texreg2rgb, + /* WINED3DSIH_UDIV */ shader_glsl_udiv, + /* WINED3DSIH_USHR */ shader_glsl_binop, + /* WINED3DSIH_UTOF */ shader_glsl_to_float, + /* WINED3DSIH_XOR */ shader_glsl_binop, }; static void shader_glsl_handle_instruction(const struct wined3d_shader_instruction *ins) { @@ -5141,6 +6360,13 @@ static void shader_glsl_handle_instruction(const struct wined3d_shader_instructi shader_glsl_add_instruction_modifiers(ins); } +static BOOL shader_glsl_has_ffp_proj_control(void *shader_priv) +{ + struct shader_glsl_priv *priv = shader_priv; + + return priv->ffp_proj_control; +} + const struct wined3d_shader_backend_ops glsl_shader_backend = { shader_glsl_handle_instruction, @@ -5157,4 +6383,309 @@ const struct wined3d_shader_backend_ops glsl_shader_backend = shader_glsl_context_destroyed, shader_glsl_get_caps, shader_glsl_color_fixup_supported, + shader_glsl_has_ffp_proj_control, +}; + +static void glsl_fragment_pipe_enable(const struct wined3d_gl_info *gl_info, BOOL enable) +{ + /* Nothing to do. */ +} + +static void glsl_fragment_pipe_get_caps(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps) +{ + caps->wined3d_caps = WINED3D_FRAGMENT_CAP_PROJ_CONTROL + | WINED3D_FRAGMENT_CAP_SRGB_WRITE; + caps->PrimitiveMiscCaps = WINED3DPMISCCAPS_TSSARGTEMP; + caps->TextureOpCaps = WINED3DTEXOPCAPS_DISABLE + | WINED3DTEXOPCAPS_SELECTARG1 + | WINED3DTEXOPCAPS_SELECTARG2 + | WINED3DTEXOPCAPS_MODULATE4X + | WINED3DTEXOPCAPS_MODULATE2X + | WINED3DTEXOPCAPS_MODULATE + | WINED3DTEXOPCAPS_ADDSIGNED2X + | WINED3DTEXOPCAPS_ADDSIGNED + | WINED3DTEXOPCAPS_ADD + | WINED3DTEXOPCAPS_SUBTRACT + | WINED3DTEXOPCAPS_ADDSMOOTH + | WINED3DTEXOPCAPS_BLENDCURRENTALPHA + | WINED3DTEXOPCAPS_BLENDFACTORALPHA + | WINED3DTEXOPCAPS_BLENDTEXTUREALPHA + | WINED3DTEXOPCAPS_BLENDDIFFUSEALPHA + | WINED3DTEXOPCAPS_BLENDTEXTUREALPHAPM + | WINED3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR + | WINED3DTEXOPCAPS_MODULATECOLOR_ADDALPHA + | WINED3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA + | WINED3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR + | WINED3DTEXOPCAPS_DOTPRODUCT3 + | WINED3DTEXOPCAPS_MULTIPLYADD + | WINED3DTEXOPCAPS_LERP + | WINED3DTEXOPCAPS_BUMPENVMAP + | WINED3DTEXOPCAPS_BUMPENVMAPLUMINANCE; + caps->MaxTextureBlendStages = 8; + caps->MaxSimultaneousTextures = min(gl_info->limits.fragment_samplers, 8); +} + +static void *glsl_fragment_pipe_alloc(const struct wined3d_shader_backend_ops *shader_backend, void *shader_priv) +{ + struct shader_glsl_priv *priv; + + if (shader_backend == &glsl_shader_backend) + { + priv = shader_priv; + + if (wine_rb_init(&priv->ffp_fragment_shaders, &wined3d_ffp_frag_program_rb_functions) == -1) + { + ERR("Failed to initialize rbtree.\n"); + return NULL; + } + + return priv; + } + + FIXME("GLSL fragment pipe without GLSL shader backend not implemented.\n"); + + return NULL; +} + +struct glsl_ffp_destroy_ctx +{ + struct shader_glsl_priv *priv; + const struct wined3d_gl_info *gl_info; +}; + +static void shader_glsl_free_ffp_fragment_shader(struct wine_rb_entry *entry, void *context) +{ + struct glsl_ffp_fragment_shader *shader = WINE_RB_ENTRY_VALUE(entry, + struct glsl_ffp_fragment_shader, entry.entry); + struct glsl_shader_prog_link *program, *program2; + struct glsl_ffp_destroy_ctx *ctx = context; + + LIST_FOR_EACH_ENTRY_SAFE(program, program2, &shader->linked_programs, + struct glsl_shader_prog_link, ps.shader_entry) + { + delete_glsl_program_entry(ctx->priv, ctx->gl_info, program); + } + ctx->gl_info->gl_ops.ext.p_glDeleteObjectARB(shader->id); + HeapFree(GetProcessHeap(), 0, shader); +} + +/* Context activation is done by the caller. */ +static void glsl_fragment_pipe_free(struct wined3d_device *device) +{ + struct shader_glsl_priv *priv = device->fragment_priv; + struct glsl_ffp_destroy_ctx ctx; + + ctx.priv = priv; + ctx.gl_info = &device->adapter->gl_info; + wine_rb_destroy(&priv->ffp_fragment_shaders, shader_glsl_free_ffp_fragment_shader, &ctx); +} + +static void glsl_fragment_pipe_shader(struct wined3d_context *context, + const struct wined3d_state *state, DWORD state_id) +{ + context->last_was_pshader = use_ps(state); + + context->select_shader = 1; + context->load_constants = 1; +} + +static void glsl_fragment_pipe_fog(struct wined3d_context *context, + const struct wined3d_state *state, DWORD state_id) +{ + BOOL use_vshader = use_vs(state); + enum fogsource new_source; + + context->select_shader = 1; + context->load_constants = 1; + + if (!state->render_states[WINED3D_RS_FOGENABLE]) + return; + + if (state->render_states[WINED3D_RS_FOGTABLEMODE] == WINED3D_FOG_NONE) + { + if (use_vshader) + new_source = FOGSOURCE_VS; + else if (state->render_states[WINED3D_RS_FOGVERTEXMODE] == WINED3D_FOG_NONE || context->last_was_rhw) + new_source = FOGSOURCE_COORD; + else + new_source = FOGSOURCE_FFP; + } + else + { + new_source = FOGSOURCE_FFP; + } + + if (new_source != context->fog_source) + { + context->fog_source = new_source; + state_fogstartend(context, state, STATE_RENDER(WINED3D_RS_FOGSTART)); + } +} + +static void glsl_fragment_pipe_tex_transform(struct wined3d_context *context, + const struct wined3d_state *state, DWORD state_id) +{ + context->select_shader = 1; + context->load_constants = 1; +} + +static void glsl_fragment_pipe_invalidate_constants(struct wined3d_context *context, + const struct wined3d_state *state, DWORD state_id) +{ + context->load_constants = 1; +} + +static const struct StateEntryTemplate glsl_fragment_pipe_state_template[] = +{ + {STATE_RENDER(WINED3D_RS_TEXTUREFACTOR), {STATE_RENDER(WINED3D_RS_TEXTUREFACTOR), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(0, WINED3D_TSS_COLOR_OP), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(0, WINED3D_TSS_COLOR_ARG1), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(0, WINED3D_TSS_COLOR_ARG2), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(0, WINED3D_TSS_COLOR_ARG0), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(0, WINED3D_TSS_ALPHA_OP), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(0, WINED3D_TSS_ALPHA_ARG1), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(0, WINED3D_TSS_ALPHA_ARG2), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(0, WINED3D_TSS_ALPHA_ARG0), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(0, WINED3D_TSS_RESULT_ARG), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(0, WINED3D_TSS_BUMPENV_MAT00), {STATE_TEXTURESTAGE(0, WINED3D_TSS_BUMPENV_MAT00), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(0, WINED3D_TSS_BUMPENV_MAT01), {STATE_TEXTURESTAGE(0, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(0, WINED3D_TSS_BUMPENV_MAT10), {STATE_TEXTURESTAGE(0, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(0, WINED3D_TSS_BUMPENV_MAT11), {STATE_TEXTURESTAGE(0, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(0, WINED3D_TSS_BUMPENV_LSCALE), {STATE_TEXTURESTAGE(0, WINED3D_TSS_BUMPENV_LSCALE), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(0, WINED3D_TSS_BUMPENV_LOFFSET), {STATE_TEXTURESTAGE(0, WINED3D_TSS_BUMPENV_LSCALE), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(1, WINED3D_TSS_COLOR_OP), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(1, WINED3D_TSS_COLOR_ARG1), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(1, WINED3D_TSS_COLOR_ARG2), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(1, WINED3D_TSS_COLOR_ARG0), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(1, WINED3D_TSS_ALPHA_OP), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(1, WINED3D_TSS_ALPHA_ARG1), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(1, WINED3D_TSS_ALPHA_ARG2), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(1, WINED3D_TSS_ALPHA_ARG0), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(1, WINED3D_TSS_RESULT_ARG), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(1, WINED3D_TSS_BUMPENV_MAT00), {STATE_TEXTURESTAGE(1, WINED3D_TSS_BUMPENV_MAT00), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(1, WINED3D_TSS_BUMPENV_MAT01), {STATE_TEXTURESTAGE(1, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(1, WINED3D_TSS_BUMPENV_MAT10), {STATE_TEXTURESTAGE(1, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(1, WINED3D_TSS_BUMPENV_MAT11), {STATE_TEXTURESTAGE(1, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(1, WINED3D_TSS_BUMPENV_LSCALE), {STATE_TEXTURESTAGE(1, WINED3D_TSS_BUMPENV_LSCALE), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(1, WINED3D_TSS_BUMPENV_LOFFSET), {STATE_TEXTURESTAGE(1, WINED3D_TSS_BUMPENV_LSCALE), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(2, WINED3D_TSS_COLOR_OP), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(2, WINED3D_TSS_COLOR_ARG1), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(2, WINED3D_TSS_COLOR_ARG2), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(2, WINED3D_TSS_COLOR_ARG0), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(2, WINED3D_TSS_ALPHA_OP), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(2, WINED3D_TSS_ALPHA_ARG1), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(2, WINED3D_TSS_ALPHA_ARG2), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(2, WINED3D_TSS_ALPHA_ARG0), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(2, WINED3D_TSS_RESULT_ARG), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(2, WINED3D_TSS_BUMPENV_MAT00), {STATE_TEXTURESTAGE(2, WINED3D_TSS_BUMPENV_MAT00), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(2, WINED3D_TSS_BUMPENV_MAT01), {STATE_TEXTURESTAGE(2, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(2, WINED3D_TSS_BUMPENV_MAT10), {STATE_TEXTURESTAGE(2, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(2, WINED3D_TSS_BUMPENV_MAT11), {STATE_TEXTURESTAGE(2, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(2, WINED3D_TSS_BUMPENV_LSCALE), {STATE_TEXTURESTAGE(2, WINED3D_TSS_BUMPENV_LSCALE), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(2, WINED3D_TSS_BUMPENV_LOFFSET), {STATE_TEXTURESTAGE(2, WINED3D_TSS_BUMPENV_LSCALE), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(3, WINED3D_TSS_COLOR_OP), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(3, WINED3D_TSS_COLOR_ARG1), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(3, WINED3D_TSS_COLOR_ARG2), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(3, WINED3D_TSS_COLOR_ARG0), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(3, WINED3D_TSS_ALPHA_OP), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(3, WINED3D_TSS_ALPHA_ARG1), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(3, WINED3D_TSS_ALPHA_ARG2), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(3, WINED3D_TSS_ALPHA_ARG0), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(3, WINED3D_TSS_RESULT_ARG), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(3, WINED3D_TSS_BUMPENV_MAT00), {STATE_TEXTURESTAGE(3, WINED3D_TSS_BUMPENV_MAT00), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(3, WINED3D_TSS_BUMPENV_MAT01), {STATE_TEXTURESTAGE(3, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(3, WINED3D_TSS_BUMPENV_MAT10), {STATE_TEXTURESTAGE(3, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(3, WINED3D_TSS_BUMPENV_MAT11), {STATE_TEXTURESTAGE(3, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(3, WINED3D_TSS_BUMPENV_LSCALE), {STATE_TEXTURESTAGE(3, WINED3D_TSS_BUMPENV_LSCALE), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(3, WINED3D_TSS_BUMPENV_LOFFSET), {STATE_TEXTURESTAGE(3, WINED3D_TSS_BUMPENV_LSCALE), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(4, WINED3D_TSS_COLOR_OP), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(4, WINED3D_TSS_COLOR_ARG1), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(4, WINED3D_TSS_COLOR_ARG2), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(4, WINED3D_TSS_COLOR_ARG0), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(4, WINED3D_TSS_ALPHA_OP), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(4, WINED3D_TSS_ALPHA_ARG1), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(4, WINED3D_TSS_ALPHA_ARG2), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(4, WINED3D_TSS_ALPHA_ARG0), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(4, WINED3D_TSS_RESULT_ARG), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(4, WINED3D_TSS_BUMPENV_MAT00), {STATE_TEXTURESTAGE(4, WINED3D_TSS_BUMPENV_MAT00), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(4, WINED3D_TSS_BUMPENV_MAT01), {STATE_TEXTURESTAGE(4, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(4, WINED3D_TSS_BUMPENV_MAT10), {STATE_TEXTURESTAGE(4, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(4, WINED3D_TSS_BUMPENV_MAT11), {STATE_TEXTURESTAGE(4, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(4, WINED3D_TSS_BUMPENV_LSCALE), {STATE_TEXTURESTAGE(4, WINED3D_TSS_BUMPENV_LSCALE), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(4, WINED3D_TSS_BUMPENV_LOFFSET), {STATE_TEXTURESTAGE(4, WINED3D_TSS_BUMPENV_LSCALE), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(5, WINED3D_TSS_COLOR_OP), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(5, WINED3D_TSS_COLOR_ARG1), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(5, WINED3D_TSS_COLOR_ARG2), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(5, WINED3D_TSS_COLOR_ARG0), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(5, WINED3D_TSS_ALPHA_OP), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(5, WINED3D_TSS_ALPHA_ARG1), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(5, WINED3D_TSS_ALPHA_ARG2), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(5, WINED3D_TSS_ALPHA_ARG0), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(5, WINED3D_TSS_RESULT_ARG), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(5, WINED3D_TSS_BUMPENV_MAT00), {STATE_TEXTURESTAGE(5, WINED3D_TSS_BUMPENV_MAT00), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(5, WINED3D_TSS_BUMPENV_MAT01), {STATE_TEXTURESTAGE(5, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(5, WINED3D_TSS_BUMPENV_MAT10), {STATE_TEXTURESTAGE(5, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(5, WINED3D_TSS_BUMPENV_MAT11), {STATE_TEXTURESTAGE(5, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(5, WINED3D_TSS_BUMPENV_LSCALE), {STATE_TEXTURESTAGE(5, WINED3D_TSS_BUMPENV_LSCALE), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(5, WINED3D_TSS_BUMPENV_LOFFSET), {STATE_TEXTURESTAGE(5, WINED3D_TSS_BUMPENV_LSCALE), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(6, WINED3D_TSS_COLOR_OP), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(6, WINED3D_TSS_COLOR_ARG1), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(6, WINED3D_TSS_COLOR_ARG2), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(6, WINED3D_TSS_COLOR_ARG0), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(6, WINED3D_TSS_ALPHA_OP), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(6, WINED3D_TSS_ALPHA_ARG1), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(6, WINED3D_TSS_ALPHA_ARG2), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(6, WINED3D_TSS_ALPHA_ARG0), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(6, WINED3D_TSS_RESULT_ARG), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(6, WINED3D_TSS_BUMPENV_MAT00), {STATE_TEXTURESTAGE(6, WINED3D_TSS_BUMPENV_MAT00), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(6, WINED3D_TSS_BUMPENV_MAT01), {STATE_TEXTURESTAGE(6, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(6, WINED3D_TSS_BUMPENV_MAT10), {STATE_TEXTURESTAGE(6, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(6, WINED3D_TSS_BUMPENV_MAT11), {STATE_TEXTURESTAGE(6, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(6, WINED3D_TSS_BUMPENV_LSCALE), {STATE_TEXTURESTAGE(6, WINED3D_TSS_BUMPENV_LSCALE), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(6, WINED3D_TSS_BUMPENV_LOFFSET), {STATE_TEXTURESTAGE(6, WINED3D_TSS_BUMPENV_LSCALE), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(7, WINED3D_TSS_COLOR_OP), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(7, WINED3D_TSS_COLOR_ARG1), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(7, WINED3D_TSS_COLOR_ARG2), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(7, WINED3D_TSS_COLOR_ARG0), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(7, WINED3D_TSS_ALPHA_OP), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(7, WINED3D_TSS_ALPHA_ARG1), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(7, WINED3D_TSS_ALPHA_ARG2), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(7, WINED3D_TSS_ALPHA_ARG0), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(7, WINED3D_TSS_RESULT_ARG), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(7, WINED3D_TSS_BUMPENV_MAT00), {STATE_TEXTURESTAGE(7, WINED3D_TSS_BUMPENV_MAT00), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(7, WINED3D_TSS_BUMPENV_MAT01), {STATE_TEXTURESTAGE(7, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(7, WINED3D_TSS_BUMPENV_MAT10), {STATE_TEXTURESTAGE(7, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(7, WINED3D_TSS_BUMPENV_MAT11), {STATE_TEXTURESTAGE(7, WINED3D_TSS_BUMPENV_MAT00), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(7, WINED3D_TSS_BUMPENV_LSCALE), {STATE_TEXTURESTAGE(7, WINED3D_TSS_BUMPENV_LSCALE), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(7, WINED3D_TSS_BUMPENV_LOFFSET), {STATE_TEXTURESTAGE(7, WINED3D_TSS_BUMPENV_LSCALE), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_PIXELSHADER, {STATE_PIXELSHADER, glsl_fragment_pipe_shader }, WINED3D_GL_EXT_NONE }, + {STATE_RENDER(WINED3D_RS_FOGENABLE), {STATE_RENDER(WINED3D_RS_FOGENABLE), glsl_fragment_pipe_fog }, WINED3D_GL_EXT_NONE }, + {STATE_RENDER(WINED3D_RS_FOGTABLEMODE), {STATE_RENDER(WINED3D_RS_FOGENABLE), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_RENDER(WINED3D_RS_FOGVERTEXMODE), {STATE_RENDER(WINED3D_RS_FOGENABLE), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_RENDER(WINED3D_RS_FOGSTART), {STATE_RENDER(WINED3D_RS_FOGSTART), state_fogstartend }, WINED3D_GL_EXT_NONE }, + {STATE_RENDER(WINED3D_RS_FOGEND), {STATE_RENDER(WINED3D_RS_FOGSTART), NULL }, WINED3D_GL_EXT_NONE }, + {STATE_RENDER(WINED3D_RS_SRGBWRITEENABLE), {STATE_RENDER(WINED3D_RS_SRGBWRITEENABLE), state_srgbwrite }, ARB_FRAMEBUFFER_SRGB}, + {STATE_RENDER(WINED3D_RS_SRGBWRITEENABLE), {STATE_PIXELSHADER, NULL }, WINED3D_GL_EXT_NONE }, + {STATE_RENDER(WINED3D_RS_FOGCOLOR), {STATE_RENDER(WINED3D_RS_FOGCOLOR), state_fogcolor }, WINED3D_GL_EXT_NONE }, + {STATE_RENDER(WINED3D_RS_FOGDENSITY), {STATE_RENDER(WINED3D_RS_FOGDENSITY), state_fogdensity }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(0,WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), {STATE_TEXTURESTAGE(0, WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), glsl_fragment_pipe_tex_transform }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(1,WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), {STATE_TEXTURESTAGE(1, WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), glsl_fragment_pipe_tex_transform }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(2,WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), {STATE_TEXTURESTAGE(2, WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), glsl_fragment_pipe_tex_transform }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(3,WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), {STATE_TEXTURESTAGE(3, WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), glsl_fragment_pipe_tex_transform }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(4,WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), {STATE_TEXTURESTAGE(4, WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), glsl_fragment_pipe_tex_transform }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(5,WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), {STATE_TEXTURESTAGE(5, WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), glsl_fragment_pipe_tex_transform }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(6,WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), {STATE_TEXTURESTAGE(6, WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), glsl_fragment_pipe_tex_transform }, WINED3D_GL_EXT_NONE }, + {STATE_TEXTURESTAGE(7,WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), {STATE_TEXTURESTAGE(7, WINED3D_TSS_TEXTURE_TRANSFORM_FLAGS), glsl_fragment_pipe_tex_transform }, WINED3D_GL_EXT_NONE }, + {STATE_RENDER(WINED3D_RS_SPECULARENABLE), {STATE_RENDER(WINED3D_RS_SPECULARENABLE), glsl_fragment_pipe_invalidate_constants}, WINED3D_GL_EXT_NONE }, + {0 /* Terminate */, {0, 0 }, WINED3D_GL_EXT_NONE }, +}; + +const struct fragment_pipeline glsl_fragment_pipe = +{ + glsl_fragment_pipe_enable, + glsl_fragment_pipe_get_caps, + glsl_fragment_pipe_alloc, + glsl_fragment_pipe_free, + shader_glsl_color_fixup_supported, + glsl_fragment_pipe_state_template, }; diff --git a/dll/directx/wine/wined3d/nvidia_texture_shader.c b/dll/directx/wine/wined3d/nvidia_texture_shader.c index 015e3684892..adf092523f1 100644 --- a/dll/directx/wine/wined3d/nvidia_texture_shader.c +++ b/dll/directx/wine/wined3d/nvidia_texture_shader.c @@ -29,7 +29,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d); -/* GL locking for state handlers is done by the caller. */ +/* Context activation for state handlers is done by the caller. */ static void nvts_activate_dimensions(const struct wined3d_state *state, DWORD stage, struct wined3d_context *context) { @@ -446,23 +446,26 @@ void set_tex_op_nvrc(const struct wined3d_gl_info *gl_info, const struct wined3d case WINED3D_TOP_BUMPENVMAP_LUMINANCE: case WINED3D_TOP_BUMPENVMAP: - if (gl_info->supported[NV_TEXTURE_SHADER]) + if (!gl_info->supported[NV_TEXTURE_SHADER]) { - /* The bump map stage itself isn't exciting, just read the texture. But tell the next stage to - * perform bump mapping and source from the current stage. Pretty much a SELECTARG2. - * ARG2 is passed through unmodified(apps will most likely use D3DTA_CURRENT for arg2, arg1 - * (which will most likely be D3DTA_TEXTURE) is available as a texture shader input for the next stage - */ - GL_EXTCALL(glCombinerInputNV(target, portion, GL_VARIABLE_A_NV, - tex_op_args.input[1], tex_op_args.mapping[1], tex_op_args.component_usage[1])); - GL_EXTCALL(glCombinerInputNV(target, portion, GL_VARIABLE_B_NV, - GL_ZERO, GL_UNSIGNED_INVERT_NV, portion)); - /* Always pass through to CURRENT, ignore temp arg */ - GL_EXTCALL(glCombinerOutputNV(target, portion, GL_SPARE0_NV, GL_DISCARD_NV, - GL_DISCARD_NV, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE)); + WARN("BUMPENVMAP requires GL_NV_texture_shader in this codepath\n"); break; } + /* The bump map stage itself isn't exciting, just read the texture. But tell the next stage to + * perform bump mapping and source from the current stage. Pretty much a SELECTARG2. + * ARG2 is passed through unmodified(apps will most likely use D3DTA_CURRENT for arg2, arg1 + * (which will most likely be D3DTA_TEXTURE) is available as a texture shader input for the + * next stage */ + GL_EXTCALL(glCombinerInputNV(target, portion, GL_VARIABLE_A_NV, + tex_op_args.input[1], tex_op_args.mapping[1], tex_op_args.component_usage[1])); + GL_EXTCALL(glCombinerInputNV(target, portion, GL_VARIABLE_B_NV, + GL_ZERO, GL_UNSIGNED_INVERT_NV, portion)); + /* Always pass through to CURRENT, ignore temp arg */ + GL_EXTCALL(glCombinerOutputNV(target, portion, GL_SPARE0_NV, GL_DISCARD_NV, + GL_DISCARD_NV, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE)); + break; + default: FIXME("Unhandled texture op: stage %d, is_alpha %d, op %s (%#x), arg1 %#x, arg2 %#x, arg3 %#x, texture_idx %d.\n", stage, is_alpha, debug_d3dtop(op), op, arg1, arg2, arg3, texture_idx); @@ -649,7 +652,7 @@ static void nvrc_enable(const struct wined3d_gl_info *gl_info, BOOL enable) } } -/* Context activation and GL locking are done by the caller. */ +/* Context activation is done by the caller. */ static void nvts_enable(const struct wined3d_gl_info *gl_info, BOOL enable) { nvrc_enable(gl_info, enable); @@ -667,6 +670,7 @@ static void nvts_enable(const struct wined3d_gl_info *gl_info, BOOL enable) static void nvrc_fragment_get_caps(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps) { + caps->wined3d_caps = 0; caps->PrimitiveMiscCaps = WINED3DPMISCCAPS_TSSARGTEMP; /* The caps below can be supported but aren't handled yet in utils.c @@ -720,7 +724,11 @@ static void nvrc_fragment_get_caps(const struct wined3d_gl_info *gl_info, struct caps->MaxSimultaneousTextures = gl_info->limits.textures; } -static HRESULT nvrc_fragment_alloc(struct wined3d_device *device) { return WINED3D_OK; } +static void *nvrc_fragment_alloc(const struct wined3d_shader_backend_ops *shader_backend, void *shader_priv) +{ + return shader_priv; +} + /* Context activation is done by the caller. */ static void nvrc_fragment_free(struct wined3d_device *device) {} @@ -891,7 +899,6 @@ const struct fragment_pipeline nvts_fragment_pipeline = { nvrc_fragment_free, nvts_color_fixup_supported, nvrc_fragmentstate_template, - FALSE /* we cannot disable projected textures. The vertex pipe has to do it */ }; const struct fragment_pipeline nvrc_fragment_pipeline = { @@ -901,5 +908,4 @@ const struct fragment_pipeline nvrc_fragment_pipeline = { nvrc_fragment_free, nvts_color_fixup_supported, nvrc_fragmentstate_template, - FALSE /* we cannot disable projected textures. The vertex pipe has to do it */ }; diff --git a/dll/directx/wine/wined3d/palette.c b/dll/directx/wine/wined3d/palette.c index 1d1220380f7..43988da98c8 100644 --- a/dll/directx/wine/wined3d/palette.c +++ b/dll/directx/wine/wined3d/palette.c @@ -199,10 +199,7 @@ HRESULT CDECL wined3d_palette_create(struct wined3d_device *device, DWORD flags, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate palette memory.\n"); return E_OUTOFMEMORY; - } hr = wined3d_palette_init(object, device, flags, entries, parent); if (FAILED(hr)) diff --git a/dll/directx/wine/wined3d/query.c b/dll/directx/wine/wined3d/query.c index 25a67f48b65..1d280c88f57 100644 --- a/dll/directx/wine/wined3d/query.c +++ b/dll/directx/wine/wined3d/query.c @@ -61,8 +61,6 @@ static enum wined3d_event_query_result wined3d_event_query_test(const struct win context = context_acquire(device, query->context->current_rt); gl_info = context->gl_info; - ENTER_GL(); - if (gl_info->supported[ARB_SYNC]) { GLenum gl_ret = GL_EXTCALL(glClientWaitSync(query->object.sync, 0, 0)); @@ -105,8 +103,6 @@ static enum wined3d_event_query_result wined3d_event_query_test(const struct win ret = WINED3D_EVENT_QUERY_ERROR; } - LEAVE_GL(); - context_release(context); return ret; } @@ -138,10 +134,12 @@ enum wined3d_event_query_result wined3d_event_query_finish(const struct wined3d_ context = context_acquire(device, query->context->current_rt); - ENTER_GL(); if (gl_info->supported[ARB_SYNC]) { - GLenum gl_ret = GL_EXTCALL(glClientWaitSync(query->object.sync, 0, ~(GLuint64)0)); + /* Apple seems to be into arbitrary limits, and timeouts larger than + * 0xfffffffffffffbff immediately return GL_TIMEOUT_EXPIRED. We don't + * really care and can live with waiting a few μs less. (OS X 10.7.4). */ + GLenum gl_ret = GL_EXTCALL(glClientWaitSync(query->object.sync, GL_SYNC_FLUSH_COMMANDS_BIT, ~(GLuint64)0xffff)); checkGLcall("glClientWaitSync"); switch (gl_ret) @@ -174,7 +172,6 @@ enum wined3d_event_query_result wined3d_event_query_finish(const struct wined3d_ ERR("Event query created without GL support\n"); ret = WINED3D_EVENT_QUERY_ERROR; } - LEAVE_GL(); context_release(context); return ret; @@ -206,8 +203,6 @@ void wined3d_event_query_issue(struct wined3d_event_query *query, const struct w gl_info = context->gl_info; - ENTER_GL(); - if (gl_info->supported[ARB_SYNC]) { if (query->object.sync) GL_EXTCALL(glDeleteSync(query->object.sync)); @@ -226,8 +221,6 @@ void wined3d_event_query_issue(struct wined3d_event_query *query, const struct w checkGLcall("glSetFenceNV"); } - LEAVE_GL(); - context_release(context); } @@ -342,8 +335,6 @@ static HRESULT wined3d_occlusion_query_ops_get_data(struct wined3d_query *query, context = context_acquire(query->device, oq->context->current_rt); - ENTER_GL(); - GL_EXTCALL(glGetQueryObjectuivARB(oq->id, GL_QUERY_RESULT_AVAILABLE_ARB, &available)); checkGLcall("glGetQueryObjectuivARB(GL_QUERY_RESULT_AVAILABLE)"); TRACE("available %#x.\n", available); @@ -364,8 +355,6 @@ static HRESULT wined3d_occlusion_query_ops_get_data(struct wined3d_query *query, res = S_FALSE; } - LEAVE_GL(); - context_release(context); return res; @@ -477,10 +466,8 @@ static HRESULT wined3d_occlusion_query_ops_issue(struct wined3d_query *query, DW { context = context_acquire(query->device, oq->context->current_rt); - ENTER_GL(); GL_EXTCALL(glEndQueryARB(GL_SAMPLES_PASSED_ARB)); checkGLcall("glEndQuery()"); - LEAVE_GL(); } } else @@ -490,10 +477,8 @@ static HRESULT wined3d_occlusion_query_ops_issue(struct wined3d_query *query, DW context_alloc_occlusion_query(context, oq); } - ENTER_GL(); GL_EXTCALL(glBeginQueryARB(GL_SAMPLES_PASSED_ARB, oq->id)); checkGLcall("glBeginQuery()"); - LEAVE_GL(); context_release(context); } @@ -513,10 +498,8 @@ static HRESULT wined3d_occlusion_query_ops_issue(struct wined3d_query *query, DW { context = context_acquire(query->device, oq->context->current_rt); - ENTER_GL(); GL_EXTCALL(glEndQueryARB(GL_SAMPLES_PASSED_ARB)); checkGLcall("glEndQuery()"); - LEAVE_GL(); context_release(context); } @@ -627,10 +610,7 @@ HRESULT CDECL wined3d_query_create(struct wined3d_device *device, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate query memory.\n"); return E_OUTOFMEMORY; - } hr = query_init(object, device, type); if (FAILED(hr)) diff --git a/dll/directx/wine/wined3d/sampler.c b/dll/directx/wine/wined3d/sampler.c new file mode 100644 index 00000000000..06e3a31f453 --- /dev/null +++ b/dll/directx/wine/wined3d/sampler.c @@ -0,0 +1,76 @@ +/* + * Copyright 2012 Henri Verbeet for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + */ + +#include +#include + +#include "wined3d_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(d3d); + +ULONG CDECL wined3d_sampler_incref(struct wined3d_sampler *sampler) +{ + ULONG refcount = InterlockedIncrement(&sampler->refcount); + + TRACE("%p increasing refcount to %u.\n", sampler, refcount); + + return refcount; +} + +ULONG CDECL wined3d_sampler_decref(struct wined3d_sampler *sampler) +{ + ULONG refcount = InterlockedDecrement(&sampler->refcount); + + TRACE("%p decreasing refcount to %u.\n", sampler, refcount); + + if (!refcount) + HeapFree(GetProcessHeap(), 0, sampler); + + return refcount; +} + +void * CDECL wined3d_sampler_get_parent(const struct wined3d_sampler *sampler) +{ + TRACE("sampler %p.\n", sampler); + + return sampler->parent; +} + +static void wined3d_sampler_init(struct wined3d_sampler *sampler, void *parent) +{ + sampler->refcount = 1; + sampler->parent = parent; +} + +HRESULT CDECL wined3d_sampler_create(void *parent, struct wined3d_sampler **sampler) +{ + struct wined3d_sampler *object; + + TRACE("parent %p, sampler %p.\n", parent, sampler); + + if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)))) + return E_OUTOFMEMORY; + + wined3d_sampler_init(object, parent); + + TRACE("Created sampler %p.\n", object); + *sampler = object; + + return WINED3D_OK; +} diff --git a/dll/directx/wine/wined3d/shader.c b/dll/directx/wine/wined3d/shader.c index 78afef43f3d..38a74bbc0d8 100644 --- a/dll/directx/wine/wined3d/shader.c +++ b/dll/directx/wine/wined3d/shader.c @@ -32,117 +32,120 @@ #include "wined3d_private.h" WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader); -WINE_DECLARE_DEBUG_CHANNEL(d3d); static const char * const shader_opcode_names[] = { - /* WINED3DSIH_ABS */ "abs", - /* WINED3DSIH_ADD */ "add", - /* WINED3DSIH_AND */ "and", - /* WINED3DSIH_BEM */ "bem", - /* WINED3DSIH_BREAK */ "break", - /* WINED3DSIH_BREAKC */ "breakc", - /* WINED3DSIH_BREAKP */ "breakp", - /* WINED3DSIH_CALL */ "call", - /* WINED3DSIH_CALLNZ */ "callnz", - /* WINED3DSIH_CMP */ "cmp", - /* WINED3DSIH_CND */ "cnd", - /* WINED3DSIH_CRS */ "crs", - /* WINED3DSIH_CUT */ "cut", - /* WINED3DSIH_DCL */ "dcl", - /* WINED3DSIH_DEF */ "def", - /* WINED3DSIH_DEFB */ "defb", - /* WINED3DSIH_DEFI */ "defi", - /* WINED3DSIH_DIV */ "div", - /* WINED3DSIH_DP2ADD */ "dp2add", - /* WINED3DSIH_DP3 */ "dp3", - /* WINED3DSIH_DP4 */ "dp4", - /* WINED3DSIH_DST */ "dst", - /* WINED3DSIH_DSX */ "dsx", - /* WINED3DSIH_DSY */ "dsy", - /* WINED3DSIH_ELSE */ "else", - /* WINED3DSIH_EMIT */ "emit", - /* WINED3DSIH_ENDIF */ "endif", - /* WINED3DSIH_ENDLOOP */ "endloop", - /* WINED3DSIH_ENDREP */ "endrep", - /* WINED3DSIH_EQ */ "eq", - /* WINED3DSIH_EXP */ "exp", - /* WINED3DSIH_EXPP */ "expp", - /* WINED3DSIH_FRC */ "frc", - /* WINED3DSIH_FTOI */ "ftoi", - /* WINED3DSIH_GE */ "ge", - /* WINED3DSIH_IADD */ "iadd", - /* WINED3DSIH_IEQ */ "ieq", - /* WINED3DSIH_IF */ "if", - /* WINED3DSIH_IFC */ "ifc", - /* WINED3DSIH_IGE */ "ige", - /* WINED3DSIH_IMUL */ "imul", - /* WINED3DSIH_ITOF */ "itof", - /* WINED3DSIH_LABEL */ "label", - /* WINED3DSIH_LD */ "ld", - /* WINED3DSIH_LIT */ "lit", - /* WINED3DSIH_LOG */ "log", - /* WINED3DSIH_LOGP */ "logp", - /* WINED3DSIH_LOOP */ "loop", - /* WINED3DSIH_LRP */ "lrp", - /* WINED3DSIH_LT */ "lt", - /* WINED3DSIH_M3x2 */ "m3x2", - /* WINED3DSIH_M3x3 */ "m3x3", - /* WINED3DSIH_M3x4 */ "m3x4", - /* WINED3DSIH_M4x3 */ "m4x3", - /* WINED3DSIH_M4x4 */ "m4x4", - /* WINED3DSIH_MAD */ "mad", - /* WINED3DSIH_MAX */ "max", - /* WINED3DSIH_MIN */ "min", - /* WINED3DSIH_MOV */ "mov", - /* WINED3DSIH_MOVA */ "mova", - /* WINED3DSIH_MOVC */ "movc", - /* WINED3DSIH_MUL */ "mul", - /* WINED3DSIH_NOP */ "nop", - /* WINED3DSIH_NRM */ "nrm", - /* WINED3DSIH_PHASE */ "phase", - /* WINED3DSIH_POW */ "pow", - /* WINED3DSIH_RCP */ "rcp", - /* WINED3DSIH_REP */ "rep", - /* WINED3DSIH_RET */ "ret", - /* WINED3DSIH_ROUND_NI */ "round_ni", - /* WINED3DSIH_RSQ */ "rsq", - /* WINED3DSIH_SAMPLE */ "sample", - /* WINED3DSIH_SAMPLE_GRAD */ "sample_d", - /* WINED3DSIH_SAMPLE_LOD */ "sample_l", - /* WINED3DSIH_SETP */ "setp", - /* WINED3DSIH_SGE */ "sge", - /* WINED3DSIH_SGN */ "sgn", - /* WINED3DSIH_SINCOS */ "sincos", - /* WINED3DSIH_SLT */ "slt", - /* WINED3DSIH_SQRT */ "sqrt", - /* WINED3DSIH_SUB */ "sub", - /* WINED3DSIH_TEX */ "texld", - /* WINED3DSIH_TEXBEM */ "texbem", - /* WINED3DSIH_TEXBEML */ "texbeml", - /* WINED3DSIH_TEXCOORD */ "texcrd", - /* WINED3DSIH_TEXDEPTH */ "texdepth", - /* WINED3DSIH_TEXDP3 */ "texdp3", - /* WINED3DSIH_TEXDP3TEX */ "texdp3tex", - /* WINED3DSIH_TEXKILL */ "texkill", - /* WINED3DSIH_TEXLDD */ "texldd", - /* WINED3DSIH_TEXLDL */ "texldl", - /* WINED3DSIH_TEXM3x2DEPTH */ "texm3x2depth", - /* WINED3DSIH_TEXM3x2PAD */ "texm3x2pad", - /* WINED3DSIH_TEXM3x2TEX */ "texm3x2tex", - /* WINED3DSIH_TEXM3x3 */ "texm3x3", - /* WINED3DSIH_TEXM3x3DIFF */ "texm3x3diff", - /* WINED3DSIH_TEXM3x3PAD */ "texm3x3pad", - /* WINED3DSIH_TEXM3x3SPEC */ "texm3x3spec", - /* WINED3DSIH_TEXM3x3TEX */ "texm3x3tex", - /* WINED3DSIH_TEXM3x3VSPEC */ "texm3x3vspec", - /* WINED3DSIH_TEXREG2AR */ "texreg2ar", - /* WINED3DSIH_TEXREG2GB */ "texreg2gb", - /* WINED3DSIH_TEXREG2RGB */ "texreg2rgb", - /* WINED3DSIH_UDIV */ "udiv", - /* WINED3DSIH_USHR */ "ushr", - /* WINED3DSIH_UTOF */ "utof", - /* WINED3DSIH_XOR */ "xor", + /* WINED3DSIH_ABS */ "abs", + /* WINED3DSIH_ADD */ "add", + /* WINED3DSIH_AND */ "and", + /* WINED3DSIH_BEM */ "bem", + /* WINED3DSIH_BREAK */ "break", + /* WINED3DSIH_BREAKC */ "breakc", + /* WINED3DSIH_BREAKP */ "breakp", + /* WINED3DSIH_CALL */ "call", + /* WINED3DSIH_CALLNZ */ "callnz", + /* WINED3DSIH_CMP */ "cmp", + /* WINED3DSIH_CND */ "cnd", + /* WINED3DSIH_CRS */ "crs", + /* WINED3DSIH_CUT */ "cut", + /* WINED3DSIH_DCL */ "dcl", + /* WINED3DSIH_DCL_CONSTANT_BUFFER */ "dcl_constantBuffer", + /* WINED3DSIH_DCL_INPUT_PRIMITIVE */ "dcl_inputPrimitive", + /* WINED3DSIH_DCL_OUTPUT_TOPOLOGY */ "dcl_outputTopology", + /* WINED3DSIH_DCL_VERTICES_OUT */ "dcl_maxOutputVertexCount", + /* WINED3DSIH_DEF */ "def", + /* WINED3DSIH_DEFB */ "defb", + /* WINED3DSIH_DEFI */ "defi", + /* WINED3DSIH_DIV */ "div", + /* WINED3DSIH_DP2ADD */ "dp2add", + /* WINED3DSIH_DP3 */ "dp3", + /* WINED3DSIH_DP4 */ "dp4", + /* WINED3DSIH_DST */ "dst", + /* WINED3DSIH_DSX */ "dsx", + /* WINED3DSIH_DSY */ "dsy", + /* WINED3DSIH_ELSE */ "else", + /* WINED3DSIH_EMIT */ "emit", + /* WINED3DSIH_ENDIF */ "endif", + /* WINED3DSIH_ENDLOOP */ "endloop", + /* WINED3DSIH_ENDREP */ "endrep", + /* WINED3DSIH_EQ */ "eq", + /* WINED3DSIH_EXP */ "exp", + /* WINED3DSIH_EXPP */ "expp", + /* WINED3DSIH_FRC */ "frc", + /* WINED3DSIH_FTOI */ "ftoi", + /* WINED3DSIH_GE */ "ge", + /* WINED3DSIH_IADD */ "iadd", + /* WINED3DSIH_IEQ */ "ieq", + /* WINED3DSIH_IF */ "if", + /* WINED3DSIH_IFC */ "ifc", + /* WINED3DSIH_IGE */ "ige", + /* WINED3DSIH_IMUL */ "imul", + /* WINED3DSIH_ITOF */ "itof", + /* WINED3DSIH_LABEL */ "label", + /* WINED3DSIH_LD */ "ld", + /* WINED3DSIH_LIT */ "lit", + /* WINED3DSIH_LOG */ "log", + /* WINED3DSIH_LOGP */ "logp", + /* WINED3DSIH_LOOP */ "loop", + /* WINED3DSIH_LRP */ "lrp", + /* WINED3DSIH_LT */ "lt", + /* WINED3DSIH_M3x2 */ "m3x2", + /* WINED3DSIH_M3x3 */ "m3x3", + /* WINED3DSIH_M3x4 */ "m3x4", + /* WINED3DSIH_M4x3 */ "m4x3", + /* WINED3DSIH_M4x4 */ "m4x4", + /* WINED3DSIH_MAD */ "mad", + /* WINED3DSIH_MAX */ "max", + /* WINED3DSIH_MIN */ "min", + /* WINED3DSIH_MOV */ "mov", + /* WINED3DSIH_MOVA */ "mova", + /* WINED3DSIH_MOVC */ "movc", + /* WINED3DSIH_MUL */ "mul", + /* WINED3DSIH_NOP */ "nop", + /* WINED3DSIH_NRM */ "nrm", + /* WINED3DSIH_PHASE */ "phase", + /* WINED3DSIH_POW */ "pow", + /* WINED3DSIH_RCP */ "rcp", + /* WINED3DSIH_REP */ "rep", + /* WINED3DSIH_RET */ "ret", + /* WINED3DSIH_ROUND_NI */ "round_ni", + /* WINED3DSIH_RSQ */ "rsq", + /* WINED3DSIH_SAMPLE */ "sample", + /* WINED3DSIH_SAMPLE_GRAD */ "sample_d", + /* WINED3DSIH_SAMPLE_LOD */ "sample_l", + /* WINED3DSIH_SETP */ "setp", + /* WINED3DSIH_SGE */ "sge", + /* WINED3DSIH_SGN */ "sgn", + /* WINED3DSIH_SINCOS */ "sincos", + /* WINED3DSIH_SLT */ "slt", + /* WINED3DSIH_SQRT */ "sqrt", + /* WINED3DSIH_SUB */ "sub", + /* WINED3DSIH_TEX */ "texld", + /* WINED3DSIH_TEXBEM */ "texbem", + /* WINED3DSIH_TEXBEML */ "texbeml", + /* WINED3DSIH_TEXCOORD */ "texcrd", + /* WINED3DSIH_TEXDEPTH */ "texdepth", + /* WINED3DSIH_TEXDP3 */ "texdp3", + /* WINED3DSIH_TEXDP3TEX */ "texdp3tex", + /* WINED3DSIH_TEXKILL */ "texkill", + /* WINED3DSIH_TEXLDD */ "texldd", + /* WINED3DSIH_TEXLDL */ "texldl", + /* WINED3DSIH_TEXM3x2DEPTH */ "texm3x2depth", + /* WINED3DSIH_TEXM3x2PAD */ "texm3x2pad", + /* WINED3DSIH_TEXM3x2TEX */ "texm3x2tex", + /* WINED3DSIH_TEXM3x3 */ "texm3x3", + /* WINED3DSIH_TEXM3x3DIFF */ "texm3x3diff", + /* WINED3DSIH_TEXM3x3PAD */ "texm3x3pad", + /* WINED3DSIH_TEXM3x3SPEC */ "texm3x3spec", + /* WINED3DSIH_TEXM3x3TEX */ "texm3x3tex", + /* WINED3DSIH_TEXM3x3VSPEC */ "texm3x3vspec", + /* WINED3DSIH_TEXREG2AR */ "texreg2ar", + /* WINED3DSIH_TEXREG2GB */ "texreg2gb", + /* WINED3DSIH_TEXREG2RGB */ "texreg2rgb", + /* WINED3DSIH_UDIV */ "udiv", + /* WINED3DSIH_USHR */ "ushr", + /* WINED3DSIH_UTOF */ "utof", + /* WINED3DSIH_XOR */ "xor", }; static const char * const semantic_names[] = @@ -198,7 +201,7 @@ static void shader_signature_from_semantic(struct wined3d_shader_signature_eleme e->semantic_idx = s->usage_idx; e->sysval_semantic = 0; e->component_type = 0; - e->register_idx = s->reg.reg.idx; + e->register_idx = s->reg.reg.idx[0].offset; e->mask = s->reg.write_mask; } @@ -361,18 +364,20 @@ static void shader_record_register_usage(struct wined3d_shader *shader, struct w switch (reg->type) { case WINED3DSPR_TEXTURE: /* WINED3DSPR_ADDR */ - if (shader_type == WINED3D_SHADER_TYPE_PIXEL) reg_maps->texcoord |= 1 << reg->idx; - else reg_maps->address |= 1 << reg->idx; + if (shader_type == WINED3D_SHADER_TYPE_PIXEL) + reg_maps->texcoord |= 1 << reg->idx[0].offset; + else + reg_maps->address |= 1 << reg->idx[0].offset; break; case WINED3DSPR_TEMP: - reg_maps->temporary |= 1 << reg->idx; + reg_maps->temporary |= 1 << reg->idx[0].offset; break; case WINED3DSPR_INPUT: if (shader_type == WINED3D_SHADER_TYPE_PIXEL) { - if (reg->rel_addr) + if (reg->idx[0].rel_addr) { /* If relative addressing is used, we must assume that all registers * are used. Even if it is a construct like v3[aL], we can't assume @@ -385,51 +390,58 @@ static void shader_record_register_usage(struct wined3d_shader *shader, struct w } else { - shader->u.ps.input_reg_used[reg->idx] = TRUE; + shader->u.ps.input_reg_used[reg->idx[0].offset] = TRUE; } } - else reg_maps->input_registers |= 1 << reg->idx; + else + reg_maps->input_registers |= 1 << reg->idx[0].offset; break; case WINED3DSPR_RASTOUT: - if (reg->idx == 1) reg_maps->fog = 1; + if (reg->idx[0].offset == 1) + reg_maps->fog = 1; break; case WINED3DSPR_MISCTYPE: if (shader_type == WINED3D_SHADER_TYPE_PIXEL) { - if (!reg->idx) reg_maps->vpos = 1; - else if (reg->idx == 1) reg_maps->usesfacing = 1; + if (!reg->idx[0].offset) + reg_maps->vpos = 1; + else if (reg->idx[0].offset == 1) + reg_maps->usesfacing = 1; } break; case WINED3DSPR_CONST: - if (reg->rel_addr) + if (reg->idx[0].rel_addr) { - if (reg->idx < reg_maps->min_rel_offset) reg_maps->min_rel_offset = reg->idx; - if (reg->idx > reg_maps->max_rel_offset) reg_maps->max_rel_offset = reg->idx; + if (reg->idx[0].offset < reg_maps->min_rel_offset) + reg_maps->min_rel_offset = reg->idx[0].offset; + if (reg->idx[0].offset > reg_maps->max_rel_offset) + reg_maps->max_rel_offset = reg->idx[0].offset; reg_maps->usesrelconstF = TRUE; } else { - set_bitmap_bit(reg_maps->constf, reg->idx); + set_bitmap_bit(reg_maps->constf, reg->idx[0].offset); } break; case WINED3DSPR_CONSTINT: - reg_maps->integer_constants |= (1 << reg->idx); + reg_maps->integer_constants |= (1 << reg->idx[0].offset); break; case WINED3DSPR_CONSTBOOL: - reg_maps->boolean_constants |= (1 << reg->idx); + reg_maps->boolean_constants |= (1 << reg->idx[0].offset); break; case WINED3DSPR_COLOROUT: - reg_maps->rt_mask |= (1 << reg->idx); + reg_maps->rt_mask |= (1 << reg->idx[0].offset); break; default: - TRACE("Not recording register of type %#x and idx %u\n", reg->type, reg->idx); + TRACE("Not recording register of type %#x and [%#x][%#x].\n", + reg->type, reg->idx[0].offset, reg->idx[1].offset); break; } } @@ -481,71 +493,87 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st while (!fe->shader_is_end(fe_data, &ptr)) { struct wined3d_shader_instruction ins; - const char *comment; - UINT comment_size; - UINT param_size; - - /* Skip comments. */ - fe->shader_read_comment(&ptr, &comment, &comment_size); - if (comment) continue; /* Fetch opcode. */ - fe->shader_read_opcode(fe_data, &ptr, &ins, ¶m_size); + fe->shader_read_instruction(fe_data, &ptr, &ins); /* Unhandled opcode, and its parameters. */ if (ins.handler_idx == WINED3DSIH_TABLE_SIZE) { TRACE("Skipping unrecognized instruction.\n"); - ptr += param_size; continue; } /* Handle declarations. */ if (ins.handler_idx == WINED3DSIH_DCL) { - struct wined3d_shader_semantic semantic; + struct wined3d_shader_semantic *semantic = &ins.declaration.semantic; - fe->shader_read_semantic(&ptr, &semantic); - - switch (semantic.reg.reg.type) + switch (semantic->reg.reg.type) { /* Mark input registers used. */ case WINED3DSPR_INPUT: - reg_maps->input_registers |= 1 << semantic.reg.reg.idx; - shader_signature_from_semantic(&input_signature[semantic.reg.reg.idx], &semantic); + reg_maps->input_registers |= 1 << semantic->reg.reg.idx[0].offset; + shader_signature_from_semantic(&input_signature[semantic->reg.reg.idx[0].offset], semantic); break; /* Vertex shader: mark 3.0 output registers used, save token. */ case WINED3DSPR_OUTPUT: - reg_maps->output_registers |= 1 << semantic.reg.reg.idx; - shader_signature_from_semantic(&output_signature[semantic.reg.reg.idx], &semantic); - if (semantic.usage == WINED3D_DECL_USAGE_FOG) + reg_maps->output_registers |= 1 << semantic->reg.reg.idx[0].offset; + shader_signature_from_semantic(&output_signature[semantic->reg.reg.idx[0].offset], semantic); + if (semantic->usage == WINED3D_DECL_USAGE_FOG) reg_maps->fog = 1; break; /* Save sampler usage token. */ case WINED3DSPR_SAMPLER: - reg_maps->sampler_type[semantic.reg.reg.idx] = semantic.sampler_type; + reg_maps->sampler_type[semantic->reg.reg.idx[0].offset] = semantic->sampler_type; break; default: - TRACE("Not recording DCL register type %#x.\n", semantic.reg.reg.type); + TRACE("Not recording DCL register type %#x.\n", semantic->reg.reg.type); break; } } + else if (ins.handler_idx == WINED3DSIH_DCL_CONSTANT_BUFFER) + { + struct wined3d_shader_register *reg = &ins.declaration.src.reg; + if (reg->idx[0].offset >= WINED3D_MAX_CBS) + ERR("Invalid CB index %u.\n", reg->idx[0].offset); + else + reg_maps->cb_sizes[reg->idx[0].offset] = reg->idx[1].offset; + } + else if (ins.handler_idx == WINED3DSIH_DCL_INPUT_PRIMITIVE) + { + if (shader_version.type == WINED3D_SHADER_TYPE_GEOMETRY) + shader->u.gs.input_type = ins.declaration.primitive_type; + else + FIXME("Invalid instruction %#x for shader type %#x.\n", + ins.handler_idx, shader_version.type); + } + else if (ins.handler_idx == WINED3DSIH_DCL_OUTPUT_TOPOLOGY) + { + if (shader_version.type == WINED3D_SHADER_TYPE_GEOMETRY) + shader->u.gs.output_type = ins.declaration.primitive_type; + else + FIXME("Invalid instruction %#x for shader type %#x.\n", + ins.handler_idx, shader_version.type); + } + else if (ins.handler_idx == WINED3DSIH_DCL_VERTICES_OUT) + { + if (shader_version.type == WINED3D_SHADER_TYPE_GEOMETRY) + shader->u.gs.vertices_out = ins.declaration.count; + else + FIXME("Invalid instruction %#x for shader type %#x.\n", + ins.handler_idx, shader_version.type); + } else if (ins.handler_idx == WINED3DSIH_DEF) { - struct wined3d_shader_src_param rel_addr; - struct wined3d_shader_dst_param dst; - struct wined3d_shader_lconst *lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(*lconst)); if (!lconst) return E_OUTOFMEMORY; - fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr); - lconst->idx = dst.reg.idx; - - memcpy(lconst->value, ptr, 4 * sizeof(DWORD)); - ptr += 4; + lconst->idx = ins.dst[0].reg.idx[0].offset; + memcpy(lconst->value, ins.src[0].reg.immconst_data, 4 * sizeof(DWORD)); /* In pixel shader 1.X shaders, the constants are clamped between [-1;1] */ if (shader_version.major == 1 && shader_version.type == WINED3D_SHADER_TYPE_PIXEL) @@ -565,51 +593,36 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st } else if (ins.handler_idx == WINED3DSIH_DEFI) { - struct wined3d_shader_src_param rel_addr; - struct wined3d_shader_dst_param dst; - struct wined3d_shader_lconst *lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(*lconst)); if (!lconst) return E_OUTOFMEMORY; - fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr); - lconst->idx = dst.reg.idx; - - memcpy(lconst->value, ptr, 4 * sizeof(DWORD)); - ptr += 4; + lconst->idx = ins.dst[0].reg.idx[0].offset; + memcpy(lconst->value, ins.src[0].reg.immconst_data, 4 * sizeof(DWORD)); list_add_head(&shader->constantsI, &lconst->entry); - reg_maps->local_int_consts |= (1 << dst.reg.idx); + reg_maps->local_int_consts |= (1 << lconst->idx); } else if (ins.handler_idx == WINED3DSIH_DEFB) { - struct wined3d_shader_src_param rel_addr; - struct wined3d_shader_dst_param dst; - struct wined3d_shader_lconst *lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(*lconst)); if (!lconst) return E_OUTOFMEMORY; - fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr); - lconst->idx = dst.reg.idx; - - memcpy(lconst->value, ptr, sizeof(DWORD)); - ++ptr; + lconst->idx = ins.dst[0].reg.idx[0].offset; + memcpy(lconst->value, ins.src[0].reg.immconst_data, sizeof(DWORD)); list_add_head(&shader->constantsB, &lconst->entry); - reg_maps->local_bool_consts |= (1 << dst.reg.idx); + reg_maps->local_bool_consts |= (1 << lconst->idx); } /* For subroutine prototypes. */ else if (ins.handler_idx == WINED3DSIH_LABEL) { - struct wined3d_shader_src_param src, rel_addr; - - fe->shader_read_src_param(fe_data, &ptr, &src, &rel_addr); - reg_maps->labels |= 1 << src.reg.idx; + reg_maps->labels |= 1 << ins.src[0].reg.idx[0].offset; } /* Set texture, address, temporary registers. */ else { BOOL color0_mov = FALSE; - unsigned int i, limit; + unsigned int i; /* This will loop over all the registers and try to * make a bitmask of the ones we're interested in. @@ -619,21 +632,16 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st * they are initialized (required by spec). */ for (i = 0; i < ins.dst_count; ++i) { - struct wined3d_shader_src_param dst_rel_addr; - struct wined3d_shader_dst_param dst_param; - - fe->shader_read_dst_param(fe_data, &ptr, &dst_param, &dst_rel_addr); - - shader_record_register_usage(shader, reg_maps, &dst_param.reg, shader_version.type); + shader_record_register_usage(shader, reg_maps, &ins.dst[i].reg, shader_version.type); /* WINED3DSPR_TEXCRDOUT is the same as WINED3DSPR_OUTPUT. _OUTPUT can be > MAX_REG_TEXCRD and * is used in >= 3.0 shaders. Filter 3.0 shaders to prevent overflows, and also filter pixel * shaders because TECRDOUT isn't used in them, but future register types might cause issues */ if (shader_version.type == WINED3D_SHADER_TYPE_VERTEX && shader_version.major < 3) { - UINT idx = dst_param.reg.idx; + UINT idx = ins.dst[i].reg.idx[0].offset; - switch (dst_param.reg.type) + switch (ins.dst[i].reg.type) { case WINED3DSPR_RASTOUT: switch (idx) @@ -664,29 +672,29 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st idx += 8; if (reg_maps->output_registers & (1 << idx)) { - output_signature[idx].mask |= dst_param.write_mask; + output_signature[idx].mask |= ins.dst[i].write_mask; } else { reg_maps->output_registers |= 1 << idx; shader_signature_from_usage(&output_signature[idx], - WINED3D_DECL_USAGE_COLOR, idx - 8, idx, dst_param.write_mask); + WINED3D_DECL_USAGE_COLOR, idx - 8, idx, ins.dst[i].write_mask); } } break; case WINED3DSPR_TEXCRDOUT: - reg_maps->texcoord_mask[idx] |= dst_param.write_mask; + reg_maps->texcoord_mask[idx] |= ins.dst[i].write_mask; if (reg_maps->output_registers & (1 << idx)) { - output_signature[idx].mask |= dst_param.write_mask; + output_signature[idx].mask |= ins.dst[i].write_mask; } else { reg_maps->output_registers |= 1 << idx; shader_signature_from_usage(&output_signature[idx], - WINED3D_DECL_USAGE_TEXCOORD, idx, idx, dst_param.write_mask); + WINED3D_DECL_USAGE_TEXCOORD, idx, idx, ins.dst[i].write_mask); } break; @@ -697,7 +705,7 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st if (shader_version.type == WINED3D_SHADER_TYPE_PIXEL) { - if (dst_param.reg.type == WINED3DSPR_COLOROUT && !dst_param.reg.idx) + if (ins.dst[i].reg.type == WINED3DSPR_COLOROUT && !ins.dst[i].reg.idx[0].offset) { /* Many 2.0 and 3.0 pixel shaders end with a MOV from a temp register to * COLOROUT 0. If we know this in advance, the ARB shader backend can skip @@ -708,7 +716,7 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st * COLOROUT 0 is overwritten partially later, the marker is dropped again. */ shader->u.ps.color0_mov = FALSE; if (ins.handler_idx == WINED3DSIH_MOV - && dst_param.write_mask == WINED3DSP_WRITEMASK_ALL) + && ins.dst[i].write_mask == WINED3DSP_WRITEMASK_ALL) { /* Used later when the source register is read. */ color0_mov = TRUE; @@ -717,8 +725,8 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st /* Also drop the MOV marker if the source register is overwritten prior to the shader * end */ - else if (dst_param.reg.type == WINED3DSPR_TEMP - && dst_param.reg.idx == shader->u.ps.color0_reg) + else if (ins.dst[i].reg.type == WINED3DSPR_TEMP + && ins.dst[i].reg.idx[0].offset == shader->u.ps.color0_reg) { shader->u.ps.color0_mov = FALSE; } @@ -739,7 +747,7 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st || ins.handler_idx == WINED3DSIH_TEXREG2RGB)) { /* Fake sampler usage, only set reserved bit and type. */ - DWORD sampler_code = dst_param.reg.idx; + DWORD sampler_code = ins.dst[i].reg.idx[0].offset; TRACE("Setting fake 2D sampler for 1.x pixelshader.\n"); reg_maps->sampler_type[sampler_code] = WINED3DSTT_2D; @@ -748,16 +756,16 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st if (ins.handler_idx == WINED3DSIH_TEXBEM || ins.handler_idx == WINED3DSIH_TEXBEML) { - reg_maps->bumpmat |= 1 << dst_param.reg.idx; + reg_maps->bumpmat |= 1 << ins.dst[i].reg.idx[0].offset; if (ins.handler_idx == WINED3DSIH_TEXBEML) { - reg_maps->luminanceparams |= 1 << dst_param.reg.idx; + reg_maps->luminanceparams |= 1 << ins.dst[i].reg.idx[0].offset; } } } else if (ins.handler_idx == WINED3DSIH_BEM) { - reg_maps->bumpmat |= 1 << dst_param.reg.idx; + reg_maps->bumpmat |= 1 << ins.dst[i].reg.idx[0].offset; } } @@ -781,30 +789,29 @@ static HRESULT shader_get_registers_used(struct wined3d_shader *shader, const st || ins.handler_idx == WINED3DSIH_ENDREP) --cur_loop_depth; - limit = ins.src_count + (ins.predicate ? 1 : 0); - for (i = 0; i < limit; ++i) + if (ins.predicate) + shader_record_register_usage(shader, reg_maps, &ins.predicate->reg, shader_version.type); + + for (i = 0; i < ins.src_count; ++i) { - struct wined3d_shader_src_param src_param, src_rel_addr; - unsigned int count; + unsigned int count = get_instr_extra_regcount(ins.handler_idx, i); + struct wined3d_shader_register reg = ins.src[i].reg; - fe->shader_read_src_param(fe_data, &ptr, &src_param, &src_rel_addr); - count = get_instr_extra_regcount(ins.handler_idx, i); - - shader_record_register_usage(shader, reg_maps, &src_param.reg, shader_version.type); + shader_record_register_usage(shader, reg_maps, &ins.src[i].reg, shader_version.type); while (count) { - ++src_param.reg.idx; - shader_record_register_usage(shader, reg_maps, &src_param.reg, shader_version.type); + ++reg.idx[0].offset; + shader_record_register_usage(shader, reg_maps, ®, shader_version.type); --count; } if (color0_mov) { - if (src_param.reg.type == WINED3DSPR_TEMP - && src_param.swizzle == WINED3DSP_NOSWIZZLE) + if (ins.src[i].reg.type == WINED3DSPR_TEMP + && ins.src[i].swizzle == WINED3DSP_NOSWIZZLE) { shader->u.ps.color0_mov = TRUE; - shader->u.ps.color0_reg = src_param.reg.idx; + shader->u.ps.color0_reg = ins.src[i].reg.idx[0].offset; } } } @@ -922,7 +929,7 @@ static void shader_dump_register(const struct wined3d_shader_register *reg, { static const char * const rastout_reg_names[] = {"oPos", "oFog", "oPts"}; static const char * const misctype_reg_names[] = {"vPos", "vFace"}; - UINT offset = reg->idx; + UINT offset = reg->idx[0].offset; switch (reg->type) { @@ -939,7 +946,7 @@ static void shader_dump_register(const struct wined3d_shader_register *reg, case WINED3DSPR_CONST3: case WINED3DSPR_CONST4: TRACE("c"); - offset = shader_get_float_offset(reg->type, reg->idx); + offset = shader_get_float_offset(reg->type, offset); break; case WINED3DSPR_TEXTURE: /* vs: case WINED3DSPR_ADDR */ @@ -947,7 +954,7 @@ static void shader_dump_register(const struct wined3d_shader_register *reg, break; case WINED3DSPR_RASTOUT: - TRACE("%s", rastout_reg_names[reg->idx]); + TRACE("%s", rastout_reg_names[offset]); break; case WINED3DSPR_COLOROUT: @@ -990,8 +997,10 @@ static void shader_dump_register(const struct wined3d_shader_register *reg, break; case WINED3DSPR_MISCTYPE: - if (reg->idx > 1) FIXME("Unhandled misctype register %u.\n", reg->idx); - else TRACE("%s", misctype_reg_names[reg->idx]); + if (offset > 1) + FIXME("Unhandled misctype register %u.\n", offset); + else + TRACE("%s", misctype_reg_names[offset]); break; case WINED3DSPR_PREDICATE: @@ -1006,6 +1015,10 @@ static void shader_dump_register(const struct wined3d_shader_register *reg, TRACE("cb"); break; + case WINED3DSPR_PRIMID: + TRACE("primID"); + break; + case WINED3DSPR_NULL: TRACE("null"); break; @@ -1025,13 +1038,49 @@ static void shader_dump_register(const struct wined3d_shader_register *reg, switch (reg->immconst_type) { case WINED3D_IMMCONST_SCALAR: - TRACE("%.8e", *(const float *)reg->immconst_data); + switch (reg->data_type) + { + case WINED3D_DATA_FLOAT: + TRACE("%.8e", *(const float *)reg->immconst_data); + break; + case WINED3D_DATA_INT: + TRACE("%d", reg->immconst_data[0]); + break; + case WINED3D_DATA_RESOURCE: + case WINED3D_DATA_SAMPLER: + case WINED3D_DATA_UINT: + TRACE("%u", reg->immconst_data[0]); + break; + default: + TRACE("", reg->data_type); + break; + } break; case WINED3D_IMMCONST_VEC4: - TRACE("%.8e, %.8e, %.8e, %.8e", - *(const float *)®->immconst_data[0], *(const float *)®->immconst_data[1], - *(const float *)®->immconst_data[2], *(const float *)®->immconst_data[3]); + switch (reg->data_type) + { + case WINED3D_DATA_FLOAT: + TRACE("%.8e, %.8e, %.8e, %.8e", + *(const float *)®->immconst_data[0], *(const float *)®->immconst_data[1], + *(const float *)®->immconst_data[2], *(const float *)®->immconst_data[3]); + break; + case WINED3D_DATA_INT: + TRACE("%d, %d, %d, %d", + reg->immconst_data[0], reg->immconst_data[1], + reg->immconst_data[2], reg->immconst_data[3]); + break; + case WINED3D_DATA_RESOURCE: + case WINED3D_DATA_SAMPLER: + case WINED3D_DATA_UINT: + TRACE("%u, %u, %u, %u", + reg->immconst_data[0], reg->immconst_data[1], + reg->immconst_data[2], reg->immconst_data[3]); + break; + default: + TRACE("", reg->data_type); + break; + } break; default: @@ -1044,26 +1093,26 @@ static void shader_dump_register(const struct wined3d_shader_register *reg, && reg->type != WINED3DSPR_MISCTYPE && reg->type != WINED3DSPR_NULL) { - if (reg->array_idx != ~0U) + if (offset != ~0U) { - TRACE("%u[%u", offset, reg->array_idx); - if (reg->rel_addr) + TRACE("["); + if (reg->idx[0].rel_addr) { + shader_dump_src_param(reg->idx[0].rel_addr, shader_version); TRACE(" + "); - shader_dump_src_param(reg->rel_addr, shader_version); } - TRACE("]"); - } - else - { - if (reg->rel_addr) + TRACE("%u]", offset); + + if (reg->idx[1].offset != ~0U) { TRACE("["); - shader_dump_src_param(reg->rel_addr, shader_version); - TRACE(" + "); + if (reg->idx[1].rel_addr) + { + shader_dump_src_param(reg->idx[1].rel_addr, shader_version); + TRACE(" + "); + } + TRACE("%u]", reg->idx[1].offset); } - TRACE("%u", offset); - if (reg->rel_addr) TRACE("]"); } } } @@ -1161,17 +1210,12 @@ void shader_generate_main(const struct wined3d_shader *shader, struct wined3d_sh struct wined3d_device *device = shader->device; const struct wined3d_shader_frontend *fe = shader->frontend; void *fe_data = shader->frontend_data; - struct wined3d_shader_src_param dst_rel_addr[2]; - struct wined3d_shader_src_param src_rel_addr[4]; - struct wined3d_shader_dst_param dst_param[2]; - struct wined3d_shader_src_param src_param[4]; struct wined3d_shader_version shader_version; struct wined3d_shader_loop_state loop_state; struct wined3d_shader_instruction ins; struct wined3d_shader_tex_mx tex_mx; struct wined3d_shader_context ctx; const DWORD *ptr = byte_code; - DWORD i; /* Initialize current parsing state. */ tex_mx.current_row = 0; @@ -1185,64 +1229,24 @@ void shader_generate_main(const struct wined3d_shader *shader, struct wined3d_sh ctx.tex_mx = &tex_mx; ctx.loop_state = &loop_state; ctx.backend_data = backend_ctx; - ins.ctx = &ctx; - ins.dst = dst_param; - ins.src = src_param; fe->shader_read_header(fe_data, &ptr, &shader_version); while (!fe->shader_is_end(fe_data, &ptr)) { - const char *comment; - UINT comment_size; - UINT param_size; - - /* Skip comment tokens. */ - fe->shader_read_comment(&ptr, &comment, &comment_size); - if (comment) continue; - /* Read opcode. */ - fe->shader_read_opcode(fe_data, &ptr, &ins, ¶m_size); + fe->shader_read_instruction(fe_data, &ptr, &ins); /* Unknown opcode and its parameters. */ if (ins.handler_idx == WINED3DSIH_TABLE_SIZE) { TRACE("Skipping unrecognized instruction.\n"); - ptr += param_size; continue; } - /* Nothing to do. */ - if (ins.handler_idx == WINED3DSIH_DCL - || ins.handler_idx == WINED3DSIH_NOP - || ins.handler_idx == WINED3DSIH_DEF - || ins.handler_idx == WINED3DSIH_DEFI - || ins.handler_idx == WINED3DSIH_DEFB - || ins.handler_idx == WINED3DSIH_PHASE) - { - ptr += param_size; - continue; - } - - /* Destination tokens */ - for (i = 0; i < ins.dst_count; ++i) - { - fe->shader_read_dst_param(fe_data, &ptr, &dst_param[i], &dst_rel_addr[i]); - } - - /* Predication token */ if (ins.predicate) - { FIXME("Predicates not implemented.\n"); - ins.predicate = *ptr++; - } - - /* Other source tokens */ - for (i = 0; i < ins.src_count; ++i) - { - fe->shader_read_src_param(fe_data, &ptr, &src_param[i], &src_rel_addr[i]); - } /* Call appropriate function for output target */ device->shader_backend->shader_handle_instruction(&ins); @@ -1273,6 +1277,49 @@ static void shader_dump_ins_modifiers(const struct wined3d_shader_dst_param *dst if (mmask) FIXME("_unrecognized_modifier(%#x)", mmask); } +static void shader_dump_primitive_type(enum wined3d_primitive_type primitive_type) +{ + switch (primitive_type) + { + case WINED3D_PT_UNDEFINED: + TRACE("undefined"); + break; + case WINED3D_PT_POINTLIST: + TRACE("pointlist"); + break; + case WINED3D_PT_LINELIST: + TRACE("linelist"); + break; + case WINED3D_PT_LINESTRIP: + TRACE("linestrip"); + break; + case WINED3D_PT_TRIANGLELIST: + TRACE("trianglelist"); + break; + case WINED3D_PT_TRIANGLESTRIP: + TRACE("trianglestrip"); + break; + case WINED3D_PT_TRIANGLEFAN: + TRACE("trianglefan"); + break; + case WINED3D_PT_LINELIST_ADJ: + TRACE("linelist_adj"); + break; + case WINED3D_PT_LINESTRIP_ADJ: + TRACE("linestrip_adj"); + break; + case WINED3D_PT_TRIANGLELIST_ADJ: + TRACE("trianglelist_adj"); + break; + case WINED3D_PT_TRIANGLESTRIP_ADJ: + TRACE("trianglestrip_adj"); + break; + default: + TRACE("", primitive_type); + break; + } +} + static void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data, const DWORD *byte_code) { struct wined3d_shader_version shader_version; @@ -1309,114 +1356,64 @@ static void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe while (!fe->shader_is_end(fe_data, &ptr)) { struct wined3d_shader_instruction ins; - const char *comment; - UINT comment_size; - UINT param_size; - /* comment */ - fe->shader_read_comment(&ptr, &comment, &comment_size); - if (comment) - { - if (comment_size > 4 && *(const DWORD *)comment == WINEMAKEFOURCC('T', 'E', 'X', 'T')) - { - const char *end = comment + comment_size; - const char *ptr = comment + 4; - const char *line = ptr; - - TRACE("// TEXT\n"); - while (ptr != end) - { - if (*ptr == '\n') - { - UINT len = ptr - line; - if (len && *(ptr - 1) == '\r') --len; - TRACE("// %s\n", debugstr_an(line, len)); - line = ++ptr; - } - else ++ptr; - } - if (line != ptr) TRACE("// %s\n", debugstr_an(line, ptr - line)); - } - else TRACE("// %s\n", debugstr_an(comment, comment_size)); - continue; - } - - fe->shader_read_opcode(fe_data, &ptr, &ins, ¶m_size); + fe->shader_read_instruction(fe_data, &ptr, &ins); if (ins.handler_idx == WINED3DSIH_TABLE_SIZE) { TRACE("Skipping unrecognized instruction.\n"); - ptr += param_size; continue; } if (ins.handler_idx == WINED3DSIH_DCL) { - struct wined3d_shader_semantic semantic; - - fe->shader_read_semantic(&ptr, &semantic); - - shader_dump_decl_usage(&semantic, &shader_version); - shader_dump_ins_modifiers(&semantic.reg); + shader_dump_decl_usage(&ins.declaration.semantic, &shader_version); + shader_dump_ins_modifiers(&ins.declaration.semantic.reg); TRACE(" "); - shader_dump_dst_param(&semantic.reg, &shader_version); + shader_dump_dst_param(&ins.declaration.semantic.reg, &shader_version); + } + else if (ins.handler_idx == WINED3DSIH_DCL_CONSTANT_BUFFER) + { + TRACE("%s ", shader_opcode_names[ins.handler_idx]); + shader_dump_src_param(&ins.declaration.src, &shader_version); + TRACE(", %s", ins.flags & WINED3DSI_INDEXED_DYNAMIC ? "dynamicIndexed" : "immediateIndexed"); + } + else if (ins.handler_idx == WINED3DSIH_DCL_INPUT_PRIMITIVE + || ins.handler_idx == WINED3DSIH_DCL_OUTPUT_TOPOLOGY) + { + TRACE("%s ", shader_opcode_names[ins.handler_idx]); + shader_dump_primitive_type(ins.declaration.primitive_type); + } + else if (ins.handler_idx == WINED3DSIH_DCL_VERTICES_OUT) + { + TRACE("%s %u", shader_opcode_names[ins.handler_idx], ins.declaration.count); } else if (ins.handler_idx == WINED3DSIH_DEF) { - struct wined3d_shader_src_param rel_addr; - struct wined3d_shader_dst_param dst; - - fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr); - - TRACE("def c%u = %f, %f, %f, %f", shader_get_float_offset(dst.reg.type, dst.reg.idx), - *(const float *)(ptr), - *(const float *)(ptr + 1), - *(const float *)(ptr + 2), - *(const float *)(ptr + 3)); - ptr += 4; + TRACE("def c%u = %f, %f, %f, %f", shader_get_float_offset(ins.dst[0].reg.type, + ins.dst[0].reg.idx[0].offset), + *(const float *)&ins.src[0].reg.immconst_data[0], + *(const float *)&ins.src[0].reg.immconst_data[1], + *(const float *)&ins.src[0].reg.immconst_data[2], + *(const float *)&ins.src[0].reg.immconst_data[3]); } else if (ins.handler_idx == WINED3DSIH_DEFI) { - struct wined3d_shader_src_param rel_addr; - struct wined3d_shader_dst_param dst; - - fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr); - - TRACE("defi i%u = %d, %d, %d, %d", dst.reg.idx, - *(ptr), - *(ptr + 1), - *(ptr + 2), - *(ptr + 3)); - ptr += 4; + TRACE("defi i%u = %d, %d, %d, %d", ins.dst[0].reg.idx[0].offset, + ins.src[0].reg.immconst_data[0], + ins.src[0].reg.immconst_data[1], + ins.src[0].reg.immconst_data[2], + ins.src[0].reg.immconst_data[3]); } else if (ins.handler_idx == WINED3DSIH_DEFB) { - struct wined3d_shader_src_param rel_addr; - struct wined3d_shader_dst_param dst; - - fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr); - - TRACE("defb b%u = %s", dst.reg.idx, *ptr ? "true" : "false"); - ++ptr; + TRACE("defb b%u = %s", ins.dst[0].reg.idx[0].offset, ins.src[0].reg.immconst_data[0] ? "true" : "false"); } else { - struct wined3d_shader_src_param dst_rel_addr[2]; - struct wined3d_shader_src_param src_rel_addr; - struct wined3d_shader_dst_param dst_param[2]; - struct wined3d_shader_src_param src_param; - - for (i = 0; i < ins.dst_count; ++i) - { - fe->shader_read_dst_param(fe_data, &ptr, &dst_param[i], &dst_rel_addr[i]); - } - - /* Print out predication source token first - it follows - * the destination token. */ if (ins.predicate) { - fe->shader_read_src_param(fe_data, &ptr, &src_param, &src_rel_addr); TRACE("("); - shader_dump_src_param(&src_param, &shader_version); + shader_dump_src_param(ins.predicate, &shader_version); TRACE(") "); } @@ -1446,20 +1443,18 @@ static void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe TRACE("p"); } - /* We already read the destination tokens, print them. */ for (i = 0; i < ins.dst_count; ++i) { - shader_dump_ins_modifiers(&dst_param[i]); + shader_dump_ins_modifiers(&ins.dst[i]); TRACE(!i ? " " : ", "); - shader_dump_dst_param(&dst_param[i], &shader_version); + shader_dump_dst_param(&ins.dst[i], &shader_version); } /* Other source tokens */ for (i = ins.dst_count; i < (ins.dst_count + ins.src_count); ++i) { - fe->shader_read_src_param(fe_data, &ptr, &src_param, &src_rel_addr); TRACE(!i ? " " : ", "); - shader_dump_src_param(&src_param, &shader_version); + shader_dump_src_param(&ins.src[i - ins.dst_count], &shader_version); } } TRACE("\n"); @@ -1480,49 +1475,91 @@ static void shader_cleanup(struct wined3d_shader *shader) shader->frontend->shader_free(shader->frontend_data); } +struct shader_none_priv +{ + const struct fragment_pipeline *fragment_pipe; + BOOL ffp_proj_control; +}; + static void shader_none_handle_instruction(const struct wined3d_shader_instruction *ins) {} -static void shader_none_select(const struct wined3d_context *context, BOOL usePS, BOOL useVS) {} static void shader_none_select_depth_blt(void *shader_priv, const struct wined3d_gl_info *gl_info, enum tex_types tex_type, const SIZE *ds_mask_size) {} static void shader_none_deselect_depth_blt(void *shader_priv, const struct wined3d_gl_info *gl_info) {} static void shader_none_update_float_vertex_constants(struct wined3d_device *device, UINT start, UINT count) {} static void shader_none_update_float_pixel_constants(struct wined3d_device *device, UINT start, UINT count) {} -static void shader_none_load_constants(const struct wined3d_context *context, char usePS, char useVS) {} +static void shader_none_load_constants(const struct wined3d_context *context, BOOL usePS, BOOL useVS) {} static void shader_none_load_np2fixup_constants(void *shader_priv, const struct wined3d_gl_info *gl_info, const struct wined3d_state *state) {} static void shader_none_destroy(struct wined3d_shader *shader) {} -static HRESULT shader_none_alloc(struct wined3d_device *device) {return WINED3D_OK;} -static void shader_none_free(struct wined3d_device *device) {} static void shader_none_context_destroyed(void *shader_priv, const struct wined3d_context *context) {} +static void shader_none_select(const struct wined3d_context *context, enum wined3d_shader_mode vertex_mode, + enum wined3d_shader_mode fragment_mode) +{ + const struct wined3d_gl_info *gl_info = context->gl_info; + struct wined3d_device *device = context->swapchain->device; + struct shader_none_priv *priv = device->shader_priv; + + priv->fragment_pipe->enable_extension(gl_info, fragment_mode == WINED3D_SHADER_MODE_FFP); +} + +static HRESULT shader_none_alloc(struct wined3d_device *device, const struct fragment_pipeline *fragment_pipe) +{ + struct fragment_caps fragment_caps; + struct shader_none_priv *priv; + void *fragment_priv; + + if (!(priv = HeapAlloc(GetProcessHeap(), 0, sizeof(*priv)))) + return E_OUTOFMEMORY; + + if (!(fragment_priv = fragment_pipe->alloc_private(&none_shader_backend, priv))) + { + ERR("Failed to initialize fragment pipe.\n"); + HeapFree(GetProcessHeap(), 0, priv); + return E_FAIL; + } + + fragment_pipe->get_caps(&device->adapter->gl_info, &fragment_caps); + priv->ffp_proj_control = fragment_caps.wined3d_caps & WINED3D_FRAGMENT_CAP_PROJ_CONTROL; + device->fragment_priv = fragment_priv; + priv->fragment_pipe = fragment_pipe; + device->shader_priv = priv; + + return WINED3D_OK; +} + +static void shader_none_free(struct wined3d_device *device) +{ + struct shader_none_priv *priv = device->shader_priv; + + priv->fragment_pipe->free_private(device); + HeapFree(GetProcessHeap(), 0, priv); +} + static void shader_none_get_caps(const struct wined3d_gl_info *gl_info, struct shader_caps *caps) { /* Set the shader caps to 0 for the none shader backend */ - caps->VertexShaderVersion = 0; - caps->MaxVertexShaderConst = 0; - caps->PixelShaderVersion = 0; - caps->PixelShader1xMaxValue = 0.0f; - caps->MaxPixelShaderConst = 0; - caps->VSClipping = FALSE; + caps->vs_version = 0; + caps->gs_version = 0; + caps->ps_version = 0; + caps->vs_uniform_count = 0; + caps->ps_uniform_count = 0; + caps->ps_1x_max_value = 0.0f; + caps->wined3d_caps = 0; } static BOOL shader_none_color_fixup_supported(struct color_fixup_desc fixup) { - if (TRACE_ON(d3d_shader) && TRACE_ON(d3d)) - { - TRACE("Checking support for fixup:\n"); - dump_color_fixup_desc(fixup); - } + /* We "support" every possible fixup, since we don't support any shader + * model, and will never have to actually sample a texture. */ + return TRUE; +} - /* Faked to make some apps happy. */ - if (!is_complex_fixup(fixup)) - { - TRACE("[OK]\n"); - return TRUE; - } +static BOOL shader_none_has_ffp_proj_control(void *shader_priv) +{ + struct shader_none_priv *priv = shader_priv; - TRACE("[FAILED]\n"); - return FALSE; + return priv->ffp_proj_control; } const struct wined3d_shader_backend_ops none_shader_backend = @@ -1541,6 +1578,7 @@ const struct wined3d_shader_backend_ops none_shader_backend = shader_none_context_destroyed, shader_none_get_caps, shader_none_color_fixup_supported, + shader_none_has_ffp_proj_control, }; static HRESULT shader_set_function(struct wined3d_shader *shader, const DWORD *byte_code, @@ -1597,10 +1635,13 @@ static HRESULT shader_set_function(struct wined3d_shader *shader, const DWORD *b switch (type) { case WINED3D_SHADER_TYPE_VERTEX: - backend_version = shader->device->vshader_version; + backend_version = shader->device->vs_version; + break; + case WINED3D_SHADER_TYPE_GEOMETRY: + backend_version = shader->device->gs_version; break; case WINED3D_SHADER_TYPE_PIXEL: - backend_version = shader->device->pshader_version; + backend_version = shader->device->ps_version; break; default: FIXME("No backend version-checking for this shader type\n"); @@ -1758,21 +1799,16 @@ static void vertexshader_set_limits(struct wined3d_shader *shader) shader->reg_maps.shader_version.minor); struct wined3d_device *device = shader->device; - shader->limits.texcoord = 0; - shader->limits.attributes = 16; shader->limits.packed_input = 0; switch (shader_version) { case WINED3D_SHADER_VERSION(1, 0): case WINED3D_SHADER_VERSION(1, 1): - shader->limits.temporary = 12; shader->limits.constant_bool = 0; shader->limits.constant_int = 0; - shader->limits.address = 1; shader->limits.packed_output = 12; shader->limits.sampler = 0; - shader->limits.label = 0; /* TODO: vs_1_1 has a minimum of 96 constants. What happens when * a vs_1_1 shader is used on a vs_3_0 capable card that has 256 * constants? */ @@ -1781,28 +1817,18 @@ static void vertexshader_set_limits(struct wined3d_shader *shader) case WINED3D_SHADER_VERSION(2, 0): case WINED3D_SHADER_VERSION(2, 1): - shader->limits.temporary = 12; shader->limits.constant_bool = 16; shader->limits.constant_int = 16; - shader->limits.address = 1; shader->limits.packed_output = 12; shader->limits.sampler = 0; - shader->limits.label = 16; shader->limits.constant_float = min(256, device->d3d_vshader_constantF); break; - case WINED3D_SHADER_VERSION(4, 0): - FIXME("Using 3.0 limits for 4.0 shader.\n"); - /* Fall through. */ - case WINED3D_SHADER_VERSION(3, 0): - shader->limits.temporary = 32; - shader->limits.constant_bool = 32; - shader->limits.constant_int = 32; - shader->limits.address = 1; + shader->limits.constant_bool = 16; + shader->limits.constant_int = 16; shader->limits.packed_output = 12; shader->limits.sampler = 4; - shader->limits.label = 16; /* FIXME: 2048 */ /* DX10 cards on Windows advertise a d3d9 constant limit of 256 * even though they are capable of supporting much more (GL * drivers advertise 1024). d3d9.dll and d3d8.dll clamp the @@ -1811,14 +1837,20 @@ static void vertexshader_set_limits(struct wined3d_shader *shader) shader->limits.constant_float = min(256, device->d3d_vshader_constantF); break; + case WINED3D_SHADER_VERSION(4, 0): + shader->limits.sampler = 16; /* FIXME: 128 resources, 16 sampler states */ + shader->limits.constant_int = 0; + shader->limits.constant_float = 0; + shader->limits.constant_bool = 0; + shader->limits.packed_output = 16; + shader->limits.packed_input = 0; + break; + default: - shader->limits.temporary = 12; shader->limits.constant_bool = 16; shader->limits.constant_int = 16; - shader->limits.address = 1; shader->limits.packed_output = 12; shader->limits.sampler = 0; - shader->limits.label = 16; shader->limits.constant_float = min(256, device->d3d_vshader_constantF); FIXME("Unrecognized vertex shader version \"%u.%u\".\n", shader->reg_maps.shader_version.major, @@ -1876,6 +1908,30 @@ static HRESULT vertexshader_init(struct wined3d_shader *shader, struct wined3d_d return WINED3D_OK; } +static void geometryshader_set_limits(struct wined3d_shader *shader) +{ + DWORD shader_version = WINED3D_SHADER_VERSION(shader->reg_maps.shader_version.major, + shader->reg_maps.shader_version.minor); + + switch (shader_version) + { + case WINED3D_SHADER_VERSION(4, 0): + shader->limits.sampler = 16; /* FIXME: 128 resources, 16 sampler states */ + shader->limits.constant_int = 0; + shader->limits.constant_float = 0; + shader->limits.constant_bool = 0; + shader->limits.packed_output = 32; + shader->limits.packed_input = 16; + break; + + default: + memset(&shader->limits, 0, sizeof(shader->limits)); + FIXME("Unhandled geometry shader version \"%u.%u\".\n", + shader->reg_maps.shader_version.major, + shader->reg_maps.shader_version.minor); + } +} + static HRESULT geometryshader_init(struct wined3d_shader *shader, struct wined3d_device *device, const DWORD *byte_code, const struct wined3d_shader_signature *output_signature, void *parent, const struct wined3d_parent_ops *parent_ops, unsigned int max_version) @@ -1892,6 +1948,8 @@ static HRESULT geometryshader_init(struct wined3d_shader *shader, struct wined3d return hr; } + geometryshader_set_limits(shader); + shader->load_local_constsF = FALSE; return WINED3D_OK; @@ -2051,8 +2109,6 @@ static void pixelshader_set_limits(struct wined3d_shader *shader) DWORD shader_version = WINED3D_SHADER_VERSION(shader->reg_maps.shader_version.major, shader->reg_maps.shader_version.minor); - shader->limits.attributes = 0; - shader->limits.address = 0; shader->limits.packed_output = 0; switch (shader_version) @@ -2061,73 +2117,60 @@ static void pixelshader_set_limits(struct wined3d_shader *shader) case WINED3D_SHADER_VERSION(1, 1): case WINED3D_SHADER_VERSION(1, 2): case WINED3D_SHADER_VERSION(1, 3): - shader->limits.temporary = 2; shader->limits.constant_float = 8; shader->limits.constant_int = 0; shader->limits.constant_bool = 0; - shader->limits.texcoord = 4; shader->limits.sampler = 4; shader->limits.packed_input = 0; - shader->limits.label = 0; break; case WINED3D_SHADER_VERSION(1, 4): - shader->limits.temporary = 6; shader->limits.constant_float = 8; shader->limits.constant_int = 0; shader->limits.constant_bool = 0; - shader->limits.texcoord = 6; shader->limits.sampler = 6; shader->limits.packed_input = 0; - shader->limits.label = 0; break; /* FIXME: Temporaries must match D3DPSHADERCAPS2_0.NumTemps. */ case WINED3D_SHADER_VERSION(2, 0): - shader->limits.temporary = 32; shader->limits.constant_float = 32; shader->limits.constant_int = 16; shader->limits.constant_bool = 16; - shader->limits.texcoord = 8; shader->limits.sampler = 16; shader->limits.packed_input = 0; break; case WINED3D_SHADER_VERSION(2, 1): - shader->limits.temporary = 32; shader->limits.constant_float = 32; shader->limits.constant_int = 16; shader->limits.constant_bool = 16; - shader->limits.texcoord = 8; shader->limits.sampler = 16; shader->limits.packed_input = 0; - shader->limits.label = 16; break; - case WINED3D_SHADER_VERSION(4, 0): - FIXME("Using 3.0 limits for 4.0 shader.\n"); - /* Fall through. */ - case WINED3D_SHADER_VERSION(3, 0): - shader->limits.temporary = 32; shader->limits.constant_float = 224; shader->limits.constant_int = 16; shader->limits.constant_bool = 16; - shader->limits.texcoord = 0; shader->limits.sampler = 16; shader->limits.packed_input = 12; - shader->limits.label = 16; /* FIXME: 2048 */ + break; + + case WINED3D_SHADER_VERSION(4, 0): + shader->limits.sampler = 16; /* FIXME: 128 resources, 16 sampler states */ + shader->limits.constant_int = 0; + shader->limits.constant_float = 0; + shader->limits.constant_bool = 0; + shader->limits.packed_input = 32; break; default: - shader->limits.temporary = 32; shader->limits.constant_float = 32; shader->limits.constant_int = 16; shader->limits.constant_bool = 16; - shader->limits.texcoord = 8; shader->limits.sampler = 16; shader->limits.packed_input = 0; - shader->limits.label = 0; FIXME("Unrecognized pixel shader version %u.%u\n", shader->reg_maps.shader_version.major, shader->reg_maps.shader_version.minor); @@ -2257,10 +2300,7 @@ HRESULT CDECL wined3d_shader_create_gs(struct wined3d_device *device, const DWOR object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate shader memory.\n"); return E_OUTOFMEMORY; - } hr = geometryshader_init(object, device, byte_code, output_signature, parent, parent_ops, max_version); if (FAILED(hr)) @@ -2286,15 +2326,9 @@ HRESULT CDECL wined3d_shader_create_ps(struct wined3d_device *device, const DWOR TRACE("device %p, byte_code %p, output_signature %p, parent %p, parent_ops %p, shader %p.\n", device, byte_code, output_signature, parent, parent_ops, shader); - if (device->ps_selected_mode == SHADER_NONE) - return WINED3DERR_INVALIDCALL; - object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate shader memory.\n"); return E_OUTOFMEMORY; - } hr = pixelshader_init(object, device, byte_code, output_signature, parent, parent_ops, max_version); if (FAILED(hr)) @@ -2320,15 +2354,9 @@ HRESULT CDECL wined3d_shader_create_vs(struct wined3d_device *device, const DWOR TRACE("device %p, byte_code %p, output_signature %p, parent %p, parent_ops %p, shader %p.\n", device, byte_code, output_signature, parent, parent_ops, shader); - if (device->vs_selected_mode == SHADER_NONE) - return WINED3DERR_INVALIDCALL; - object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate shader memory.\n"); return E_OUTOFMEMORY; - } hr = vertexshader_init(object, device, byte_code, output_signature, parent, parent_ops, max_version); if (FAILED(hr)) diff --git a/dll/directx/wine/wined3d/shader_sm1.c b/dll/directx/wine/wined3d/shader_sm1.c index 350f540b64f..6ccf11106dc 100644 --- a/dll/directx/wine/wined3d/shader_sm1.c +++ b/dll/directx/wine/wined3d/shader_sm1.c @@ -204,6 +204,13 @@ struct wined3d_sm1_data { struct wined3d_shader_version shader_version; const struct wined3d_sm1_opcode_info *opcode_table; + + struct wined3d_shader_src_param src_rel_addr[4]; + struct wined3d_shader_src_param pred_rel_addr; + struct wined3d_shader_src_param dst_rel_addr; + struct wined3d_shader_src_param src_param[4]; + struct wined3d_shader_src_param pred_param; + struct wined3d_shader_dst_param dst_param; }; /* This table is not order or position dependent. */ @@ -440,11 +447,13 @@ static void shader_parse_src_param(DWORD param, const struct wined3d_shader_src_ { src->reg.type = ((param & WINED3DSP_REGTYPE_MASK) >> WINED3DSP_REGTYPE_SHIFT) | ((param & WINED3DSP_REGTYPE_MASK2) >> WINED3DSP_REGTYPE_SHIFT2); - src->reg.idx = param & WINED3DSP_REGNUM_MASK; - src->reg.array_idx = ~0U; + src->reg.data_type = WINED3D_DATA_FLOAT; + src->reg.idx[0].offset = param & WINED3DSP_REGNUM_MASK; + src->reg.idx[0].rel_addr = rel_addr; + src->reg.idx[1].offset = ~0U; + src->reg.idx[1].rel_addr = NULL; src->swizzle = (param & WINED3DSP_SWIZZLE_MASK) >> WINED3DSP_SWIZZLE_SHIFT; src->modifiers = (param & WINED3DSP_SRCMOD_MASK) >> WINED3DSP_SRCMOD_SHIFT; - src->reg.rel_addr = rel_addr; } static void shader_parse_dst_param(DWORD param, const struct wined3d_shader_src_param *rel_addr, @@ -452,12 +461,14 @@ static void shader_parse_dst_param(DWORD param, const struct wined3d_shader_src_ { dst->reg.type = ((param & WINED3DSP_REGTYPE_MASK) >> WINED3DSP_REGTYPE_SHIFT) | ((param & WINED3DSP_REGTYPE_MASK2) >> WINED3DSP_REGTYPE_SHIFT2); - dst->reg.idx = param & WINED3DSP_REGNUM_MASK; - dst->reg.array_idx = ~0U; + dst->reg.data_type = WINED3D_DATA_FLOAT; + dst->reg.idx[0].offset = param & WINED3DSP_REGNUM_MASK; + dst->reg.idx[0].rel_addr = rel_addr; + dst->reg.idx[1].offset = ~0U; + dst->reg.idx[1].rel_addr = NULL; dst->write_mask = (param & WINED3D_SM1_WRITEMASK_MASK) >> WINED3D_SM1_WRITEMASK_SHIFT; dst->modifiers = (param & WINED3DSP_DSTMOD_MASK) >> WINED3DSP_DSTMOD_SHIFT; dst->shift = (param & WINED3DSP_DSTSHIFT_MASK) >> WINED3DSP_DSTSHIFT_SHIFT; - dst->reg.rel_addr = rel_addr; } /* Read the parameters of an unrecognized opcode from the input stream @@ -519,10 +530,7 @@ static void *shader_sm1_init(const DWORD *byte_code, const struct wined3d_shader priv = HeapAlloc(GetProcessHeap(), 0, sizeof(*priv)); if (!priv) - { - ERR("Failed to allocate private data\n"); return NULL; - } if (output_signature) { @@ -568,36 +576,9 @@ static void shader_sm1_read_header(void *data, const DWORD **ptr, struct wined3d *shader_version = priv->shader_version; } -static void shader_sm1_read_opcode(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins, - UINT *param_size) +static void shader_sm1_read_src_param(struct wined3d_sm1_data *priv, const DWORD **ptr, + struct wined3d_shader_src_param *src_param, struct wined3d_shader_src_param *src_rel_addr) { - struct wined3d_sm1_data *priv = data; - const struct wined3d_sm1_opcode_info *opcode_info; - DWORD opcode_token; - - opcode_token = *(*ptr)++; - opcode_info = shader_get_opcode(priv, opcode_token); - if (!opcode_info) - { - FIXME("Unrecognized opcode: token=0x%08x\n", opcode_token); - ins->handler_idx = WINED3DSIH_TABLE_SIZE; - *param_size = shader_skip_unrecognized(priv, *ptr); - return; - } - - ins->handler_idx = opcode_info->handler_idx; - ins->flags = (opcode_token & WINED3D_OPCODESPECIFICCONTROL_MASK) >> WINED3D_OPCODESPECIFICCONTROL_SHIFT; - ins->coissue = opcode_token & WINED3DSI_COISSUE; - ins->predicate = opcode_token & WINED3DSHADER_INSTRUCTION_PREDICATED; - ins->dst_count = opcode_info->dst_count ? 1 : 0; - ins->src_count = opcode_info->param_count - opcode_info->dst_count; - *param_size = shader_skip_opcode(priv, opcode_info, opcode_token); -} - -static void shader_sm1_read_src_param(void *data, const DWORD **ptr, struct wined3d_shader_src_param *src_param, - struct wined3d_shader_src_param *src_rel_addr) -{ - struct wined3d_sm1_data *priv = data; DWORD token, addr_token; *ptr += shader_get_param(priv, *ptr, &token, &addr_token); @@ -612,10 +593,9 @@ static void shader_sm1_read_src_param(void *data, const DWORD **ptr, struct wine } } -static void shader_sm1_read_dst_param(void *data, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param, - struct wined3d_shader_src_param *dst_rel_addr) +static void shader_sm1_read_dst_param(struct wined3d_sm1_data *priv, const DWORD **ptr, + struct wined3d_shader_dst_param *dst_param, struct wined3d_shader_src_param *dst_rel_addr) { - struct wined3d_sm1_data *priv = data; DWORD token, addr_token; *ptr += shader_get_param(priv, *ptr, &token, &addr_token); @@ -641,25 +621,138 @@ static void shader_sm1_read_semantic(const DWORD **ptr, struct wined3d_shader_se shader_parse_dst_param(dst_token, NULL, &semantic->reg); } -static void shader_sm1_read_comment(const DWORD **ptr, const char **comment, UINT *comment_size) +static void shader_sm1_read_immconst(const DWORD **ptr, struct wined3d_shader_src_param *src_param, + enum wined3d_immconst_type type, enum wined3d_data_type data_type) +{ + UINT count = type == WINED3D_IMMCONST_VEC4 ? 4 : 1; + src_param->reg.type = WINED3DSPR_IMMCONST; + src_param->reg.data_type = data_type; + src_param->reg.idx[0].offset = ~0U; + src_param->reg.idx[0].rel_addr = NULL; + src_param->reg.idx[1].offset = ~0U; + src_param->reg.idx[1].rel_addr = NULL; + src_param->reg.immconst_type = type; + memcpy(src_param->reg.immconst_data, *ptr, count * sizeof(DWORD)); + src_param->swizzle = WINED3DSP_NOSWIZZLE; + src_param->modifiers = 0; + + *ptr += count; +} + +static void shader_sm1_read_comment(const DWORD **ptr) { DWORD token = **ptr; + const char *comment; UINT size; - if ((token & WINED3DSI_OPCODE_MASK) != WINED3D_SM1_OP_COMMENT) + while ((token & WINED3DSI_OPCODE_MASK) == WINED3D_SM1_OP_COMMENT) { - *comment = NULL; + size = (token & WINED3DSI_COMMENTSIZE_MASK) >> WINED3DSI_COMMENTSIZE_SHIFT; + comment = (const char *)++(*ptr); + *ptr += size; + + if (size > 1 && *(const DWORD *)comment == WINEMAKEFOURCC('T', 'E', 'X', 'T')) + { + const char *end = comment + size * sizeof(token); + const char *p = comment + sizeof(token); + const char *line = p; + + TRACE("// TEXT\n"); + while (p != end) + { + if (*p == '\n') + { + UINT len = p - line; + if (len && *(p - 1) == '\r') --len; + TRACE("// %s\n", debugstr_an(line, len)); + line = ++p; + } + else ++p; + } + if (line != p) + TRACE("// %s\n", debugstr_an(line, p - line)); + } + else if (size) + TRACE("// %s\n", debugstr_an(comment, size * sizeof(token))); + else + break; + + token = **ptr; + } +} + +static void shader_sm1_read_instruction(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins) +{ + const struct wined3d_sm1_opcode_info *opcode_info; + struct wined3d_sm1_data *priv = data; + DWORD opcode_token; + unsigned int i; + const DWORD *p; + + shader_sm1_read_comment(ptr); + + opcode_token = *(*ptr)++; + if (!(opcode_info = shader_get_opcode(priv, opcode_token))) + { + FIXME("Unrecognized opcode: token=0x%08x.\n", opcode_token); + ins->handler_idx = WINED3DSIH_TABLE_SIZE; + *ptr += shader_skip_unrecognized(priv, *ptr); return; } - size = (token & WINED3DSI_COMMENTSIZE_MASK) >> WINED3DSI_COMMENTSIZE_SHIFT; - *comment = (const char *)++(*ptr); - *comment_size = size * sizeof(DWORD); - *ptr += size; + ins->handler_idx = opcode_info->handler_idx; + ins->flags = (opcode_token & WINED3D_OPCODESPECIFICCONTROL_MASK) >> WINED3D_OPCODESPECIFICCONTROL_SHIFT; + ins->coissue = opcode_token & WINED3DSI_COISSUE; + ins->predicate = opcode_token & WINED3DSHADER_INSTRUCTION_PREDICATED ? &priv->pred_param : NULL; + ins->dst_count = opcode_info->dst_count ? 1 : 0; + ins->dst = &priv->dst_param; + ins->src_count = opcode_info->param_count - opcode_info->dst_count; + ins->src = priv->src_param; + + p = *ptr; + *ptr += shader_skip_opcode(priv, opcode_info, opcode_token); + + if (ins->handler_idx == WINED3DSIH_DCL) + { + shader_sm1_read_semantic(&p, &ins->declaration.semantic); + } + else if (ins->handler_idx == WINED3DSIH_DEF) + { + shader_sm1_read_dst_param(priv, &p, &priv->dst_param, &priv->dst_rel_addr); + shader_sm1_read_immconst(&p, &priv->src_param[0], WINED3D_IMMCONST_VEC4, WINED3D_DATA_FLOAT); + } + else if (ins->handler_idx == WINED3DSIH_DEFI) + { + shader_sm1_read_dst_param(priv, &p, &priv->dst_param, &priv->dst_rel_addr); + shader_sm1_read_immconst(&p, &priv->src_param[0], WINED3D_IMMCONST_VEC4, WINED3D_DATA_INT); + } + else if (ins->handler_idx == WINED3DSIH_DEFB) + { + shader_sm1_read_dst_param(priv, &p, &priv->dst_param, &priv->dst_rel_addr); + shader_sm1_read_immconst(&p, &priv->src_param[0], WINED3D_IMMCONST_SCALAR, WINED3D_DATA_UINT); + } + else + { + /* Destination token */ + if (ins->dst_count) + shader_sm1_read_dst_param(priv, &p, &priv->dst_param, &priv->dst_rel_addr); + + /* Predication token */ + if (ins->predicate) + shader_sm1_read_src_param(priv, &p, &priv->pred_param, &priv->pred_rel_addr); + + /* Other source tokens */ + for (i = 0; i < ins->src_count; ++i) + { + shader_sm1_read_src_param(priv, &p, &priv->src_param[i], &priv->src_rel_addr[i]); + } + } } static BOOL shader_sm1_is_end(void *data, const DWORD **ptr) { + shader_sm1_read_comment(ptr); + if (**ptr == WINED3DSP_END) { ++(*ptr); @@ -674,10 +767,6 @@ const struct wined3d_shader_frontend sm1_shader_frontend = shader_sm1_init, shader_sm1_free, shader_sm1_read_header, - shader_sm1_read_opcode, - shader_sm1_read_src_param, - shader_sm1_read_dst_param, - shader_sm1_read_semantic, - shader_sm1_read_comment, + shader_sm1_read_instruction, shader_sm1_is_end, }; diff --git a/dll/directx/wine/wined3d/shader_sm4.c b/dll/directx/wine/wined3d/shader_sm4.c index 5285ae95bbb..5f4d7694f6f 100644 --- a/dll/directx/wine/wined3d/shader_sm4.c +++ b/dll/directx/wine/wined3d/shader_sm4.c @@ -22,22 +22,38 @@ #include "wined3d_private.h" WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader); +WINE_DECLARE_DEBUG_CHANNEL(d3d_bytecode); #define WINED3D_SM4_INSTRUCTION_MODIFIER (1 << 31) #define WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT 24 #define WINED3D_SM4_INSTRUCTION_LENGTH_MASK (0xf << WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT) +#define WINED3D_SM4_PRIMITIVE_TYPE_SHIFT 11 +#define WINED3D_SM4_PRIMITIVE_TYPE_MASK (0x7 << WINED3D_SM4_PRIMITIVE_TYPE_SHIFT) + +#define WINED3D_SM4_INDEX_TYPE_SHIFT 11 +#define WINED3D_SM4_INDEX_TYPE_MASK (0x1 << WINED3D_SM4_INDEX_TYPE_SHIFT) + #define WINED3D_SM4_OPCODE_MASK 0xff #define WINED3D_SM4_REGISTER_MODIFIER (1 << 31) +#define WINED3D_SM4_ADDRESSING_SHIFT1 25 +#define WINED3D_SM4_ADDRESSING_MASK1 (0x3 << WINED3D_SM4_ADDRESSING_SHIFT1) + +#define WINED3D_SM4_ADDRESSING_SHIFT0 22 +#define WINED3D_SM4_ADDRESSING_MASK0 (0x3 << WINED3D_SM4_ADDRESSING_SHIFT0) + #define WINED3D_SM4_REGISTER_ORDER_SHIFT 20 #define WINED3D_SM4_REGISTER_ORDER_MASK (0x3 << WINED3D_SM4_REGISTER_ORDER_SHIFT) #define WINED3D_SM4_REGISTER_TYPE_SHIFT 12 #define WINED3D_SM4_REGISTER_TYPE_MASK (0xf << WINED3D_SM4_REGISTER_TYPE_SHIFT) +#define WINED3D_SM4_SWIZZLE_TYPE_SHIFT 2 +#define WINED3D_SM4_SWIZZLE_TYPE_MASK (0x3 << WINED3D_SM4_SWIZZLE_TYPE_SHIFT) + #define WINED3D_SM4_IMMCONST_TYPE_SHIFT 0 #define WINED3D_SM4_IMMCONST_TYPE_MASK (0x3 << WINED3D_SM4_IMMCONST_TYPE_SHIFT) @@ -50,54 +66,61 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader); #define WINED3D_SM4_VERSION_MAJOR(version) (((version) >> 4) & 0xf) #define WINED3D_SM4_VERSION_MINOR(version) (((version) >> 0) & 0xf) +#define WINED3D_SM4_ADDRESSING_RELATIVE 0x2 +#define WINED3D_SM4_ADDRESSING_OFFSET 0x1 + enum wined3d_sm4_opcode { - WINED3D_SM4_OP_ADD = 0x00, - WINED3D_SM4_OP_AND = 0x01, - WINED3D_SM4_OP_BREAK = 0x02, - WINED3D_SM4_OP_BREAKC = 0x03, - WINED3D_SM4_OP_CUT = 0x09, - WINED3D_SM4_OP_DERIV_RTX = 0x0b, - WINED3D_SM4_OP_DERIV_RTY = 0x0c, - WINED3D_SM4_OP_DIV = 0x0e, - WINED3D_SM4_OP_DP3 = 0x10, - WINED3D_SM4_OP_DP4 = 0x11, - WINED3D_SM4_OP_EMIT = 0x13, - WINED3D_SM4_OP_ENDIF = 0x15, - WINED3D_SM4_OP_ENDLOOP = 0x16, - WINED3D_SM4_OP_EQ = 0x18, - WINED3D_SM4_OP_EXP = 0x19, - WINED3D_SM4_OP_FRC = 0x1a, - WINED3D_SM4_OP_FTOI = 0x1b, - WINED3D_SM4_OP_GE = 0x1d, - WINED3D_SM4_OP_IADD = 0x1e, - WINED3D_SM4_OP_IF = 0x1f, - WINED3D_SM4_OP_IEQ = 0x20, - WINED3D_SM4_OP_IGE = 0x21, - WINED3D_SM4_OP_IMUL = 0x26, - WINED3D_SM4_OP_ITOF = 0x2b, - WINED3D_SM4_OP_LD = 0x2d, - WINED3D_SM4_OP_LOG = 0x2f, - WINED3D_SM4_OP_LOOP = 0x30, - WINED3D_SM4_OP_LT = 0x31, - WINED3D_SM4_OP_MAD = 0x32, - WINED3D_SM4_OP_MIN = 0x33, - WINED3D_SM4_OP_MAX = 0x34, - WINED3D_SM4_OP_MOV = 0x36, - WINED3D_SM4_OP_MOVC = 0x37, - WINED3D_SM4_OP_MUL = 0x38, - WINED3D_SM4_OP_RET = 0x3e, - WINED3D_SM4_OP_ROUND_NI = 0x41, - WINED3D_SM4_OP_RSQ = 0x44, - WINED3D_SM4_OP_SAMPLE = 0x45, - WINED3D_SM4_OP_SAMPLE_LOD = 0x48, - WINED3D_SM4_OP_SAMPLE_GRAD = 0x49, - WINED3D_SM4_OP_SQRT = 0x4b, - WINED3D_SM4_OP_SINCOS = 0x4d, - WINED3D_SM4_OP_UDIV = 0x4e, - WINED3D_SM4_OP_USHR = 0x55, - WINED3D_SM4_OP_UTOF = 0x56, - WINED3D_SM4_OP_XOR = 0x57, + WINED3D_SM4_OP_ADD = 0x00, + WINED3D_SM4_OP_AND = 0x01, + WINED3D_SM4_OP_BREAK = 0x02, + WINED3D_SM4_OP_BREAKC = 0x03, + WINED3D_SM4_OP_CUT = 0x09, + WINED3D_SM4_OP_DERIV_RTX = 0x0b, + WINED3D_SM4_OP_DERIV_RTY = 0x0c, + WINED3D_SM4_OP_DIV = 0x0e, + WINED3D_SM4_OP_DP3 = 0x10, + WINED3D_SM4_OP_DP4 = 0x11, + WINED3D_SM4_OP_EMIT = 0x13, + WINED3D_SM4_OP_ENDIF = 0x15, + WINED3D_SM4_OP_ENDLOOP = 0x16, + WINED3D_SM4_OP_EQ = 0x18, + WINED3D_SM4_OP_EXP = 0x19, + WINED3D_SM4_OP_FRC = 0x1a, + WINED3D_SM4_OP_FTOI = 0x1b, + WINED3D_SM4_OP_GE = 0x1d, + WINED3D_SM4_OP_IADD = 0x1e, + WINED3D_SM4_OP_IF = 0x1f, + WINED3D_SM4_OP_IEQ = 0x20, + WINED3D_SM4_OP_IGE = 0x21, + WINED3D_SM4_OP_IMUL = 0x26, + WINED3D_SM4_OP_ITOF = 0x2b, + WINED3D_SM4_OP_LD = 0x2d, + WINED3D_SM4_OP_LOG = 0x2f, + WINED3D_SM4_OP_LOOP = 0x30, + WINED3D_SM4_OP_LT = 0x31, + WINED3D_SM4_OP_MAD = 0x32, + WINED3D_SM4_OP_MIN = 0x33, + WINED3D_SM4_OP_MAX = 0x34, + WINED3D_SM4_OP_MOV = 0x36, + WINED3D_SM4_OP_MOVC = 0x37, + WINED3D_SM4_OP_MUL = 0x38, + WINED3D_SM4_OP_RET = 0x3e, + WINED3D_SM4_OP_ROUND_NI = 0x41, + WINED3D_SM4_OP_RSQ = 0x44, + WINED3D_SM4_OP_SAMPLE = 0x45, + WINED3D_SM4_OP_SAMPLE_LOD = 0x48, + WINED3D_SM4_OP_SAMPLE_GRAD = 0x49, + WINED3D_SM4_OP_SQRT = 0x4b, + WINED3D_SM4_OP_SINCOS = 0x4d, + WINED3D_SM4_OP_UDIV = 0x4e, + WINED3D_SM4_OP_USHR = 0x55, + WINED3D_SM4_OP_UTOF = 0x56, + WINED3D_SM4_OP_XOR = 0x57, + WINED3D_SM4_OP_DCL_CONSTANT_BUFFER = 0x59, + WINED3D_SM4_OP_DCL_OUTPUT_TOPOLOGY = 0x5c, + WINED3D_SM4_OP_DCL_INPUT_PRIMITIVE = 0x5d, + WINED3D_SM4_OP_DCL_VERTICES_OUT = 0x5e, }; enum wined3d_sm4_register_type @@ -108,28 +131,62 @@ enum wined3d_sm4_register_type WINED3D_SM4_RT_IMMCONST = 0x4, WINED3D_SM4_RT_SAMPLER = 0x6, WINED3D_SM4_RT_CONSTBUFFER = 0x8, + WINED3D_SM4_RT_PRIMID = 0xb, WINED3D_SM4_RT_NULL = 0xd, }; +enum wined3d_sm4_output_primitive_type +{ + WINED3D_SM4_OUTPUT_PT_POINTLIST = 0x1, + WINED3D_SM4_OUTPUT_PT_LINELIST = 0x3, + WINED3D_SM4_OUTPUT_PT_TRIANGLESTRIP = 0x5, +}; + +enum wined3d_sm4_input_primitive_type +{ + WINED3D_SM4_INPUT_PT_POINT = 0x1, + WINED3D_SM4_INPUT_PT_LINE = 0x2, + WINED3D_SM4_INPUT_PT_TRIANGLE = 0x3, + WINED3D_SM4_INPUT_PT_LINEADJ = 0x6, + WINED3D_SM4_INPUT_PT_TRIANGLEADJ = 0x7, +}; + +enum wined3d_sm4_swizzle_type +{ + WINED3D_SM4_SWIZZLE_VEC4 = 0x1, + WINED3D_SM4_SWIZZLE_SCALAR = 0x2, +}; + enum wined3d_sm4_immconst_type { WINED3D_SM4_IMMCONST_SCALAR = 0x1, WINED3D_SM4_IMMCONST_VEC4 = 0x2, }; +struct wined3d_shader_src_param_entry +{ + struct list entry; + struct wined3d_shader_src_param param; +}; + struct wined3d_sm4_data { struct wined3d_shader_version shader_version; const DWORD *end; const struct wined3d_shader_signature *output_signature; + + struct wined3d_shader_src_param src_param[5]; + struct wined3d_shader_dst_param dst_param[2]; + struct list src_free; + struct list src; }; struct wined3d_sm4_opcode_info { enum wined3d_sm4_opcode opcode; enum WINED3D_SHADER_INSTRUCTION_HANDLER handler_idx; - UINT dst_count; - UINT src_count; + const char *dst_info; + const char *src_info; }; struct sysval_map @@ -139,54 +196,65 @@ struct sysval_map UINT register_idx; }; +/* + * F -> WINED3D_DATA_FLOAT + * I -> WINED3D_DATA_INT + * R -> WINED3D_DATA_RESOURCE + * S -> WINED3D_DATA_SAMPLER + * U -> WINED3D_DATA_UINT + */ static const struct wined3d_sm4_opcode_info opcode_table[] = { - {WINED3D_SM4_OP_ADD, WINED3DSIH_ADD, 1, 2}, - {WINED3D_SM4_OP_AND, WINED3DSIH_AND, 1, 2}, - {WINED3D_SM4_OP_BREAK, WINED3DSIH_BREAK, 0, 0}, - {WINED3D_SM4_OP_BREAKC, WINED3DSIH_BREAKP, 0, 1}, - {WINED3D_SM4_OP_CUT, WINED3DSIH_CUT, 0, 0}, - {WINED3D_SM4_OP_DERIV_RTX, WINED3DSIH_DSX, 1, 1}, - {WINED3D_SM4_OP_DERIV_RTY, WINED3DSIH_DSY, 1, 1}, - {WINED3D_SM4_OP_DIV, WINED3DSIH_DIV, 1, 2}, - {WINED3D_SM4_OP_DP3, WINED3DSIH_DP3, 1, 2}, - {WINED3D_SM4_OP_DP4, WINED3DSIH_DP4, 1, 2}, - {WINED3D_SM4_OP_EMIT, WINED3DSIH_EMIT, 0, 0}, - {WINED3D_SM4_OP_ENDIF, WINED3DSIH_ENDIF, 0, 0}, - {WINED3D_SM4_OP_ENDLOOP, WINED3DSIH_ENDLOOP, 0, 0}, - {WINED3D_SM4_OP_EQ, WINED3DSIH_EQ, 1, 2}, - {WINED3D_SM4_OP_EXP, WINED3DSIH_EXP, 1, 1}, - {WINED3D_SM4_OP_FRC, WINED3DSIH_FRC, 1, 1}, - {WINED3D_SM4_OP_FTOI, WINED3DSIH_FTOI, 1, 1}, - {WINED3D_SM4_OP_GE, WINED3DSIH_GE, 1, 2}, - {WINED3D_SM4_OP_IADD, WINED3DSIH_IADD, 1, 2}, - {WINED3D_SM4_OP_IF, WINED3DSIH_IF, 0, 1}, - {WINED3D_SM4_OP_IEQ, WINED3DSIH_IEQ, 1, 2}, - {WINED3D_SM4_OP_IGE, WINED3DSIH_IGE, 1, 2}, - {WINED3D_SM4_OP_IMUL, WINED3DSIH_IMUL, 2, 2}, - {WINED3D_SM4_OP_ITOF, WINED3DSIH_ITOF, 1, 1}, - {WINED3D_SM4_OP_LD, WINED3DSIH_LD, 1, 2}, - {WINED3D_SM4_OP_LOG, WINED3DSIH_LOG, 1, 1}, - {WINED3D_SM4_OP_LOOP, WINED3DSIH_LOOP, 0, 0}, - {WINED3D_SM4_OP_LT, WINED3DSIH_LT, 1, 2}, - {WINED3D_SM4_OP_MAD, WINED3DSIH_MAD, 1, 3}, - {WINED3D_SM4_OP_MIN, WINED3DSIH_MIN, 1, 2}, - {WINED3D_SM4_OP_MAX, WINED3DSIH_MAX, 1, 2}, - {WINED3D_SM4_OP_MOV, WINED3DSIH_MOV, 1, 1}, - {WINED3D_SM4_OP_MOVC, WINED3DSIH_MOVC, 1, 3}, - {WINED3D_SM4_OP_MUL, WINED3DSIH_MUL, 1, 2}, - {WINED3D_SM4_OP_RET, WINED3DSIH_RET, 0, 0}, - {WINED3D_SM4_OP_ROUND_NI, WINED3DSIH_ROUND_NI, 1, 1}, - {WINED3D_SM4_OP_RSQ, WINED3DSIH_RSQ, 1, 1}, - {WINED3D_SM4_OP_SAMPLE, WINED3DSIH_SAMPLE, 1, 3}, - {WINED3D_SM4_OP_SAMPLE_LOD, WINED3DSIH_SAMPLE_LOD, 1, 4}, - {WINED3D_SM4_OP_SAMPLE_GRAD,WINED3DSIH_SAMPLE_GRAD, 1, 5}, - {WINED3D_SM4_OP_SQRT, WINED3DSIH_SQRT, 1, 1}, - {WINED3D_SM4_OP_SINCOS, WINED3DSIH_SINCOS, 2, 1}, - {WINED3D_SM4_OP_UDIV, WINED3DSIH_UDIV, 2, 2}, - {WINED3D_SM4_OP_USHR, WINED3DSIH_USHR, 1, 2}, - {WINED3D_SM4_OP_UTOF, WINED3DSIH_UTOF, 1, 1}, - {WINED3D_SM4_OP_XOR, WINED3DSIH_XOR, 1, 2}, + {WINED3D_SM4_OP_ADD, WINED3DSIH_ADD, "F", "FF"}, + {WINED3D_SM4_OP_AND, WINED3DSIH_AND, "U", "UU"}, + {WINED3D_SM4_OP_BREAK, WINED3DSIH_BREAK, "", ""}, + {WINED3D_SM4_OP_BREAKC, WINED3DSIH_BREAKP, "", "U"}, + {WINED3D_SM4_OP_CUT, WINED3DSIH_CUT, "", ""}, + {WINED3D_SM4_OP_DERIV_RTX, WINED3DSIH_DSX, "F", "F"}, + {WINED3D_SM4_OP_DERIV_RTY, WINED3DSIH_DSY, "F", "F"}, + {WINED3D_SM4_OP_DIV, WINED3DSIH_DIV, "F", "FF"}, + {WINED3D_SM4_OP_DP3, WINED3DSIH_DP3, "F", "FF"}, + {WINED3D_SM4_OP_DP4, WINED3DSIH_DP4, "F", "FF"}, + {WINED3D_SM4_OP_EMIT, WINED3DSIH_EMIT, "", ""}, + {WINED3D_SM4_OP_ENDIF, WINED3DSIH_ENDIF, "", ""}, + {WINED3D_SM4_OP_ENDLOOP, WINED3DSIH_ENDLOOP, "", ""}, + {WINED3D_SM4_OP_EQ, WINED3DSIH_EQ, "U", "FF"}, + {WINED3D_SM4_OP_EXP, WINED3DSIH_EXP, "F", "F"}, + {WINED3D_SM4_OP_FRC, WINED3DSIH_FRC, "F", "F"}, + {WINED3D_SM4_OP_FTOI, WINED3DSIH_FTOI, "I", "F"}, + {WINED3D_SM4_OP_GE, WINED3DSIH_GE, "U", "FF"}, + {WINED3D_SM4_OP_IADD, WINED3DSIH_IADD, "I", "II"}, + {WINED3D_SM4_OP_IF, WINED3DSIH_IF, "", "U"}, + {WINED3D_SM4_OP_IEQ, WINED3DSIH_IEQ, "U", "II"}, + {WINED3D_SM4_OP_IGE, WINED3DSIH_IGE, "U", "II"}, + {WINED3D_SM4_OP_IMUL, WINED3DSIH_IMUL, "II", "II"}, + {WINED3D_SM4_OP_ITOF, WINED3DSIH_ITOF, "F", "I"}, + {WINED3D_SM4_OP_LD, WINED3DSIH_LD, "U", "FR"}, + {WINED3D_SM4_OP_LOG, WINED3DSIH_LOG, "F", "F"}, + {WINED3D_SM4_OP_LOOP, WINED3DSIH_LOOP, "", ""}, + {WINED3D_SM4_OP_LT, WINED3DSIH_LT, "U", "FF"}, + {WINED3D_SM4_OP_MAD, WINED3DSIH_MAD, "F", "FFF"}, + {WINED3D_SM4_OP_MIN, WINED3DSIH_MIN, "F", "FF"}, + {WINED3D_SM4_OP_MAX, WINED3DSIH_MAX, "F", "FF"}, + {WINED3D_SM4_OP_MOV, WINED3DSIH_MOV, "F", "F"}, + {WINED3D_SM4_OP_MOVC, WINED3DSIH_MOVC, "F", "UFF"}, + {WINED3D_SM4_OP_MUL, WINED3DSIH_MUL, "F", "FF"}, + {WINED3D_SM4_OP_RET, WINED3DSIH_RET, "", ""}, + {WINED3D_SM4_OP_ROUND_NI, WINED3DSIH_ROUND_NI, "F", "F"}, + {WINED3D_SM4_OP_RSQ, WINED3DSIH_RSQ, "F", "F"}, + {WINED3D_SM4_OP_SAMPLE, WINED3DSIH_SAMPLE, "U", "FRS"}, + {WINED3D_SM4_OP_SAMPLE_LOD, WINED3DSIH_SAMPLE_LOD, "U", "FRSF"}, + {WINED3D_SM4_OP_SAMPLE_GRAD, WINED3DSIH_SAMPLE_GRAD, "U", "FRSFF"}, + {WINED3D_SM4_OP_SQRT, WINED3DSIH_SQRT, "F", "F"}, + {WINED3D_SM4_OP_SINCOS, WINED3DSIH_SINCOS, "FF", "F"}, + {WINED3D_SM4_OP_UDIV, WINED3DSIH_UDIV, "UU", "UU"}, + {WINED3D_SM4_OP_USHR, WINED3DSIH_USHR, "U", "UU"}, + {WINED3D_SM4_OP_UTOF, WINED3DSIH_UTOF, "F", "U"}, + {WINED3D_SM4_OP_XOR, WINED3DSIH_XOR, "U", "UU"}, + {WINED3D_SM4_OP_DCL_CONSTANT_BUFFER, WINED3DSIH_DCL_CONSTANT_BUFFER, "", ""}, + {WINED3D_SM4_OP_DCL_OUTPUT_TOPOLOGY, WINED3DSIH_DCL_OUTPUT_TOPOLOGY, "", ""}, + {WINED3D_SM4_OP_DCL_INPUT_PRIMITIVE, WINED3DSIH_DCL_INPUT_PRIMITIVE, "", ""}, + {WINED3D_SM4_OP_DCL_VERTICES_OUT, WINED3DSIH_DCL_VERTICES_OUT, "", ""}, }; static const enum wined3d_shader_register_type register_type_table[] = @@ -202,11 +270,33 @@ static const enum wined3d_shader_register_type register_type_table[] = /* WINED3D_SM4_RT_CONSTBUFFER */ WINED3DSPR_CONSTBUFFER, /* UNKNOWN */ 0, /* UNKNOWN */ 0, - /* UNKNOWN */ 0, + /* WINED3D_SM4_RT_PRIMID */ WINED3DSPR_PRIMID, /* UNKNOWN */ 0, /* WINED3D_SM4_RT_NULL */ WINED3DSPR_NULL, }; +static const enum wined3d_primitive_type output_primitive_type_table[] = +{ + /* UNKNOWN */ WINED3D_PT_UNDEFINED, + /* WINED3D_SM4_OUTPUT_PT_POINTLIST */ WINED3D_PT_POINTLIST, + /* UNKNOWN */ WINED3D_PT_UNDEFINED, + /* WINED3D_SM4_OUTPUT_PT_LINELIST */ WINED3D_PT_LINELIST, + /* UNKNOWN */ WINED3D_PT_UNDEFINED, + /* WINED3D_SM4_OUTPUT_PT_TRIANGLESTRIP */ WINED3D_PT_TRIANGLESTRIP, +}; + +static const enum wined3d_primitive_type input_primitive_type_table[] = +{ + /* UNKNOWN */ WINED3D_PT_UNDEFINED, + /* WINED3D_SM4_INPUT_PT_POINT */ WINED3D_PT_POINTLIST, + /* WINED3D_SM4_INPUT_PT_LINE */ WINED3D_PT_LINELIST, + /* WINED3D_SM4_INPUT_PT_TRIANGLE */ WINED3D_PT_TRIANGLELIST, + /* UNKNOWN */ WINED3D_PT_UNDEFINED, + /* UNKNOWN */ WINED3D_PT_UNDEFINED, + /* WINED3D_SM4_INPUT_PT_LINEADJ */ WINED3D_PT_LINELIST_ADJ, + /* WINED3D_SM4_INPUT_PT_TRIANGLEADJ */ WINED3D_PT_TRIANGLELIST_ADJ, +}; + static const struct sysval_map sysval_map[] = { {WINED3D_SV_DEPTH, WINED3DSPR_DEPTHOUT, 0}, @@ -220,6 +310,9 @@ static const struct sysval_map sysval_map[] = {WINED3D_SV_TARGET7, WINED3DSPR_COLOROUT, 7}, }; +static BOOL shader_sm4_read_src_param(struct wined3d_sm4_data *priv, const DWORD **ptr, + enum wined3d_data_type data_type, struct wined3d_shader_src_param *src_param); + static const struct wined3d_sm4_opcode_info *get_opcode_info(enum wined3d_sm4_opcode opcode) { unsigned int i; @@ -241,7 +334,7 @@ static void map_sysval(enum wined3d_sysval_semantic sysval, struct wined3d_shade if (sysval == sysval_map[i].sysval) { reg->type = sysval_map[i].register_type; - reg->idx = sysval_map[i].register_idx; + reg->idx[0].offset = sysval_map[i].register_idx; } } } @@ -264,7 +357,7 @@ static void map_register(const struct wined3d_sm4_data *priv, struct wined3d_sha for (i = 0; i < s->element_count; ++i) { - if (s->elements[i].register_idx == reg->idx) + if (s->elements[i].register_idx == reg->idx[0].offset) { map_sysval(s->elements[i].sysval_semantic, reg); break; @@ -278,6 +371,26 @@ static void map_register(const struct wined3d_sm4_data *priv, struct wined3d_sha } } +static enum wined3d_data_type map_data_type(char t) +{ + switch (t) + { + case 'F': + return WINED3D_DATA_FLOAT; + case 'I': + return WINED3D_DATA_INT; + case 'R': + return WINED3D_DATA_RESOURCE; + case 'S': + return WINED3D_DATA_SAMPLER; + case 'U': + return WINED3D_DATA_UINT; + default: + ERR("Invalid data type '%c'.\n", t); + return WINED3D_DATA_FLOAT; + } +} + static void *shader_sm4_init(const DWORD *byte_code, const struct wined3d_shader_signature *output_signature) { struct wined3d_sm4_data *priv = HeapAlloc(GetProcessHeap(), 0, sizeof(*priv)); @@ -288,13 +401,45 @@ static void *shader_sm4_init(const DWORD *byte_code, const struct wined3d_shader } priv->output_signature = output_signature; + list_init(&priv->src_free); + list_init(&priv->src); return priv; } static void shader_sm4_free(void *data) { - HeapFree(GetProcessHeap(), 0, data); + struct wined3d_shader_src_param_entry *e1, *e2; + struct wined3d_sm4_data *priv = data; + + list_move_head(&priv->src_free, &priv->src); + LIST_FOR_EACH_ENTRY_SAFE(e1, e2, &priv->src_free, struct wined3d_shader_src_param_entry, entry) + { + HeapFree(GetProcessHeap(), 0, e1); + } + HeapFree(GetProcessHeap(), 0, priv); +} + +static struct wined3d_shader_src_param *get_src_param(struct wined3d_sm4_data *priv) +{ + struct wined3d_shader_src_param_entry *e; + struct list *elem; + + if (!list_empty(&priv->src_free)) + { + elem = list_head(&priv->src_free); + list_remove(elem); + } + else + { + if (!(e = HeapAlloc(GetProcessHeap(), 0, sizeof(*e)))) + return NULL; + elem = &e->entry; + } + + list_add_tail(&priv->src, elem); + e = LIST_ENTRY(elem, struct wined3d_shader_src_param_entry, entry); + return &e->param; } static void shader_sm4_read_header(void *data, const DWORD **ptr, struct wined3d_shader_version *shader_version) @@ -333,175 +478,316 @@ static void shader_sm4_read_header(void *data, const DWORD **ptr, struct wined3d *shader_version = priv->shader_version; } -static void shader_sm4_read_opcode(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins, - UINT *param_size) +static BOOL shader_sm4_read_reg_idx(struct wined3d_sm4_data *priv, const DWORD **ptr, + DWORD addressing, struct wined3d_shader_register_index *reg_idx) +{ + if (addressing & WINED3D_SM4_ADDRESSING_RELATIVE) + { + struct wined3d_shader_src_param *rel_addr = get_src_param(priv); + + if (!(reg_idx->rel_addr = rel_addr)) + { + ERR("Failed to get src param for relative addressing.\n"); + return FALSE; + } + + if (addressing & WINED3D_SM4_ADDRESSING_OFFSET) + reg_idx->offset = *(*ptr)++; + else + reg_idx->offset = 0; + shader_sm4_read_src_param(priv, ptr, WINED3D_DATA_INT, rel_addr); + } + else + { + reg_idx->rel_addr = NULL; + reg_idx->offset = *(*ptr)++; + } + + return TRUE; +} + +static BOOL shader_sm4_read_param(struct wined3d_sm4_data *priv, const DWORD **ptr, + enum wined3d_data_type data_type, struct wined3d_shader_register *param, + enum wined3d_shader_src_modifier *modifier) +{ + enum wined3d_sm4_register_type register_type; + DWORD token = *(*ptr)++; + DWORD order; + + register_type = (token & WINED3D_SM4_REGISTER_TYPE_MASK) >> WINED3D_SM4_REGISTER_TYPE_SHIFT; + if (register_type >= sizeof(register_type_table) / sizeof(*register_type_table)) + { + FIXME("Unhandled register type %#x.\n", register_type); + param->type = WINED3DSPR_TEMP; + } + else + { + param->type = register_type_table[register_type]; + } + param->data_type = data_type; + + if (token & WINED3D_SM4_REGISTER_MODIFIER) + { + DWORD m = *(*ptr)++; + + /* FIXME: This will probably break down at some point. The SM4 + * modifiers look like flags, while wined3d currently has an enum + * with possible combinations, e.g. WINED3DSPSM_ABSNEG. */ + switch (m) + { + case 0x41: + *modifier = WINED3DSPSM_NEG; + break; + + case 0x81: + *modifier = WINED3DSPSM_ABS; + break; + + default: + FIXME("Skipping modifier 0x%08x.\n", m); + *modifier = WINED3DSPSM_NONE; + break; + } + } + else + { + *modifier = WINED3DSPSM_NONE; + } + + order = (token & WINED3D_SM4_REGISTER_ORDER_MASK) >> WINED3D_SM4_REGISTER_ORDER_SHIFT; + + if (order < 1) + param->idx[0].offset = ~0U; + else + { + DWORD addressing = (token & WINED3D_SM4_ADDRESSING_MASK0) >> WINED3D_SM4_ADDRESSING_SHIFT0; + if (!(shader_sm4_read_reg_idx(priv, ptr, addressing, ¶m->idx[0]))) + { + ERR("Failed to read register index.\n"); + return FALSE; + } + } + + if (order < 2) + param->idx[1].offset = ~0U; + else + { + DWORD addressing = (token & WINED3D_SM4_ADDRESSING_MASK1) >> WINED3D_SM4_ADDRESSING_SHIFT1; + if (!(shader_sm4_read_reg_idx(priv, ptr, addressing, ¶m->idx[1]))) + { + ERR("Failed to read register index.\n"); + return FALSE; + } + } + + if (order > 2) + FIXME("Unhandled order %u.\n", order); + + if (register_type == WINED3D_SM4_RT_IMMCONST) + { + enum wined3d_sm4_immconst_type immconst_type = + (token & WINED3D_SM4_IMMCONST_TYPE_MASK) >> WINED3D_SM4_IMMCONST_TYPE_SHIFT; + + switch (immconst_type) + { + case WINED3D_SM4_IMMCONST_SCALAR: + param->immconst_type = WINED3D_IMMCONST_SCALAR; + memcpy(param->immconst_data, *ptr, 1 * sizeof(DWORD)); + *ptr += 1; + break; + + case WINED3D_SM4_IMMCONST_VEC4: + param->immconst_type = WINED3D_IMMCONST_VEC4; + memcpy(param->immconst_data, *ptr, 4 * sizeof(DWORD)); + *ptr += 4; + break; + + default: + FIXME("Unhandled immediate constant type %#x.\n", immconst_type); + break; + } + } + + map_register(priv, param); + + return TRUE; +} + +static BOOL shader_sm4_read_src_param(struct wined3d_sm4_data *priv, const DWORD **ptr, + enum wined3d_data_type data_type, struct wined3d_shader_src_param *src_param) +{ + DWORD token = **ptr; + + if (!shader_sm4_read_param(priv, ptr, data_type, &src_param->reg, &src_param->modifiers)) + { + ERR("Failed to read parameter.\n"); + return FALSE; + } + + if (src_param->reg.type == WINED3DSPR_IMMCONST) + { + src_param->swizzle = WINED3DSP_NOSWIZZLE; + } + else + { + enum wined3d_sm4_swizzle_type swizzle_type = + (token & WINED3D_SM4_SWIZZLE_TYPE_MASK) >> WINED3D_SM4_SWIZZLE_TYPE_SHIFT; + + switch (swizzle_type) + { + case WINED3D_SM4_SWIZZLE_SCALAR: + src_param->swizzle = (token & WINED3D_SM4_SWIZZLE_MASK) >> WINED3D_SM4_SWIZZLE_SHIFT; + src_param->swizzle = (src_param->swizzle & 0x3) * 0x55; + break; + + case WINED3D_SM4_SWIZZLE_VEC4: + src_param->swizzle = (token & WINED3D_SM4_SWIZZLE_MASK) >> WINED3D_SM4_SWIZZLE_SHIFT; + break; + + default: + FIXME("Unhandled swizzle type %#x.\n", swizzle_type); + break; + } + } + + return TRUE; +} + +static BOOL shader_sm4_read_dst_param(struct wined3d_sm4_data *priv, const DWORD **ptr, + enum wined3d_data_type data_type, struct wined3d_shader_dst_param *dst_param) +{ + enum wined3d_shader_src_modifier modifier; + DWORD token = **ptr; + + if (!shader_sm4_read_param(priv, ptr, data_type, &dst_param->reg, &modifier)) + { + ERR("Failed to read parameter.\n"); + return FALSE; + } + + if (modifier != WINED3DSPSM_NONE) + { + ERR("Invalid source modifier %#x on destination register.\n", modifier); + return FALSE; + } + + dst_param->write_mask = (token & WINED3D_SM4_WRITEMASK_MASK) >> WINED3D_SM4_WRITEMASK_SHIFT; + dst_param->modifiers = 0; + dst_param->shift = 0; + + return TRUE; +} + +static void shader_sm4_read_instruction(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins) { const struct wined3d_sm4_opcode_info *opcode_info; - DWORD token = *(*ptr)++; - DWORD opcode = token & WINED3D_SM4_OPCODE_MASK; + struct wined3d_sm4_data *priv = data; + DWORD opcode_token, opcode; + const DWORD *p; + UINT i, len; - *param_size = ((token & WINED3D_SM4_INSTRUCTION_LENGTH_MASK) >> WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT) - 1; + list_move_head(&priv->src_free, &priv->src); - opcode_info = get_opcode_info(opcode); - if (!opcode_info) + opcode_token = *(*ptr)++; + opcode = opcode_token & WINED3D_SM4_OPCODE_MASK; + len = ((opcode_token & WINED3D_SM4_INSTRUCTION_LENGTH_MASK) >> WINED3D_SM4_INSTRUCTION_LENGTH_SHIFT) - 1; + + if (TRACE_ON(d3d_bytecode)) { - FIXME("Unrecognized opcode %#x, token 0x%08x\n", opcode, token); + TRACE_(d3d_bytecode)("[ %08x ", opcode_token); + for (i = 0; i < len; ++i) + { + TRACE_(d3d_bytecode)("%08x ", (*ptr)[i]); + } + TRACE_(d3d_bytecode)("]\n"); + } + + if (!(opcode_info = get_opcode_info(opcode))) + { + FIXME("Unrecognized opcode %#x, opcode_token 0x%08x.\n", opcode, opcode_token); ins->handler_idx = WINED3DSIH_TABLE_SIZE; + *ptr += len; return; } ins->handler_idx = opcode_info->handler_idx; ins->flags = 0; ins->coissue = 0; - ins->predicate = 0; - ins->dst_count = opcode_info->dst_count; - ins->src_count = opcode_info->src_count; + ins->predicate = NULL; + ins->dst_count = strlen(opcode_info->dst_info); + ins->dst = priv->dst_param; + ins->src_count = strlen(opcode_info->src_info); + ins->src = priv->src_param; - if (token & WINED3D_SM4_INSTRUCTION_MODIFIER) + p = *ptr; + *ptr += len; + + if (opcode_token & WINED3D_SM4_INSTRUCTION_MODIFIER) { - DWORD modifier = *(*ptr)++; + DWORD modifier = *p++; FIXME("Skipping modifier 0x%08x.\n", modifier); } -} -static void shader_sm4_read_src_param(void *data, const DWORD **ptr, struct wined3d_shader_src_param *src_param, - struct wined3d_shader_src_param *src_rel_addr) -{ - struct wined3d_sm4_data *priv = data; - DWORD token = *(*ptr)++; - enum wined3d_sm4_register_type register_type; - DWORD order; - - register_type = (token & WINED3D_SM4_REGISTER_TYPE_MASK) >> WINED3D_SM4_REGISTER_TYPE_SHIFT; - if (register_type >= sizeof(register_type_table) / sizeof(*register_type_table)) + if (opcode == WINED3D_SM4_OP_DCL_CONSTANT_BUFFER) { - FIXME("Unhandled register type %#x\n", register_type); - src_param->reg.type = WINED3DSPR_TEMP; + shader_sm4_read_src_param(priv, &p, WINED3D_DATA_FLOAT, &ins->declaration.src); + if (opcode_token & WINED3D_SM4_INDEX_TYPE_MASK) + ins->flags |= WINED3DSI_INDEXED_DYNAMIC; } - else + else if (opcode == WINED3D_SM4_OP_DCL_OUTPUT_TOPOLOGY) { - src_param->reg.type = register_type_table[register_type]; - } + enum wined3d_sm4_output_primitive_type primitive_type; - if (token & WINED3D_SM4_REGISTER_MODIFIER) - { - DWORD modifier = *(*ptr)++; - - /* FIXME: This will probably break down at some point. The SM4 - * modifiers look like flags, while wined3d currently has an enum - * with possible combinations, e.g. WINED3DSPSM_ABSNEG. */ - switch (modifier) + primitive_type = (opcode_token & WINED3D_SM4_PRIMITIVE_TYPE_MASK) >> WINED3D_SM4_PRIMITIVE_TYPE_SHIFT; + if (primitive_type >= sizeof(output_primitive_type_table) / sizeof(*output_primitive_type_table)) { - case 0x41: - src_param->modifiers = WINED3DSPSM_NEG; - break; - - case 0x81: - src_param->modifiers = WINED3DSPSM_ABS; - break; - - default: - FIXME("Skipping modifier 0x%08x.\n", modifier); - src_param->modifiers = WINED3DSPSM_NONE; - break; + FIXME("Unhandled output primitive type %#x.\n", primitive_type); + ins->declaration.primitive_type = WINED3D_PT_UNDEFINED; + } + else + { + ins->declaration.primitive_type = output_primitive_type_table[primitive_type]; } } - else + else if (opcode == WINED3D_SM4_OP_DCL_INPUT_PRIMITIVE) { - src_param->modifiers = WINED3DSPSM_NONE; - } + enum wined3d_sm4_input_primitive_type primitive_type; - order = (token & WINED3D_SM4_REGISTER_ORDER_MASK) >> WINED3D_SM4_REGISTER_ORDER_SHIFT; - - if (order < 1) src_param->reg.idx = ~0U; - else src_param->reg.idx = *(*ptr)++; - - if (order < 2) src_param->reg.array_idx = ~0U; - else src_param->reg.array_idx = *(*ptr)++; - - if (order > 2) FIXME("Unhandled order %u.\n", order); - - if (register_type == WINED3D_SM4_RT_IMMCONST) - { - enum wined3d_sm4_immconst_type immconst_type = - (token & WINED3D_SM4_IMMCONST_TYPE_MASK) >> WINED3D_SM4_IMMCONST_TYPE_SHIFT; - src_param->swizzle = WINED3DSP_NOSWIZZLE; - - switch(immconst_type) + primitive_type = (opcode_token & WINED3D_SM4_PRIMITIVE_TYPE_MASK) >> WINED3D_SM4_PRIMITIVE_TYPE_SHIFT; + if (primitive_type >= sizeof(input_primitive_type_table) / sizeof(*input_primitive_type_table)) { - case WINED3D_SM4_IMMCONST_SCALAR: - src_param->reg.immconst_type = WINED3D_IMMCONST_SCALAR; - memcpy(src_param->reg.immconst_data, *ptr, 1 * sizeof(DWORD)); - *ptr += 1; - break; - - case WINED3D_SM4_IMMCONST_VEC4: - src_param->reg.immconst_type = WINED3D_IMMCONST_VEC4; - memcpy(src_param->reg.immconst_data, *ptr, 4 * sizeof(DWORD)); - *ptr += 4; - break; - - default: - FIXME("Unhandled immediate constant type %#x\n", immconst_type); - break; + FIXME("Unhandled input primitive type %#x.\n", primitive_type); + ins->declaration.primitive_type = WINED3D_PT_UNDEFINED; + } + else + { + ins->declaration.primitive_type = input_primitive_type_table[primitive_type]; } } - else + else if (opcode == WINED3D_SM4_OP_DCL_VERTICES_OUT) { - src_param->swizzle = (token & WINED3D_SM4_SWIZZLE_MASK) >> WINED3D_SM4_SWIZZLE_SHIFT; - } - - src_param->reg.rel_addr = NULL; - - map_register(priv, &src_param->reg); -} - -static void shader_sm4_read_dst_param(void *data, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param, - struct wined3d_shader_src_param *dst_rel_addr) -{ - struct wined3d_sm4_data *priv = data; - DWORD token = *(*ptr)++; - enum wined3d_sm4_register_type register_type; - DWORD order; - - register_type = (token & WINED3D_SM4_REGISTER_TYPE_MASK) >> WINED3D_SM4_REGISTER_TYPE_SHIFT; - if (register_type >= sizeof(register_type_table) / sizeof(*register_type_table)) - { - FIXME("Unhandled register type %#x\n", register_type); - dst_param->reg.type = WINED3DSPR_TEMP; + ins->declaration.count = *p++; } else { - dst_param->reg.type = register_type_table[register_type]; + for (i = 0; i < ins->dst_count; ++i) + { + if (!(shader_sm4_read_dst_param(priv, &p, map_data_type(opcode_info->dst_info[i]), &priv->dst_param[i]))) + { + ins->handler_idx = WINED3DSIH_TABLE_SIZE; + return; + } + } + + for (i = 0; i < ins->src_count; ++i) + { + if (!(shader_sm4_read_src_param(priv, &p, map_data_type(opcode_info->src_info[i]), &priv->src_param[i]))) + { + ins->handler_idx = WINED3DSIH_TABLE_SIZE; + return; + } + } } - - order = (token & WINED3D_SM4_REGISTER_ORDER_MASK) >> WINED3D_SM4_REGISTER_ORDER_SHIFT; - - if (order < 1) dst_param->reg.idx = ~0U; - else dst_param->reg.idx = *(*ptr)++; - - if (order < 2) dst_param->reg.array_idx = ~0U; - else dst_param->reg.array_idx = *(*ptr)++; - - if (order > 2) FIXME("Unhandled order %u.\n", order); - - dst_param->write_mask = (token & WINED3D_SM4_WRITEMASK_MASK) >> WINED3D_SM4_WRITEMASK_SHIFT; - dst_param->modifiers = 0; - dst_param->shift = 0; - dst_param->reg.rel_addr = NULL; - - map_register(priv, &dst_param->reg); -} - -static void shader_sm4_read_semantic(const DWORD **ptr, struct wined3d_shader_semantic *semantic) -{ - FIXME("ptr %p, semantic %p stub!\n", ptr, semantic); -} - -static void shader_sm4_read_comment(const DWORD **ptr, const char **comment, UINT *comment_size) -{ - FIXME("ptr %p, comment %p, comment_size %p stub!\n", ptr, comment, comment_size); - *comment = NULL; } static BOOL shader_sm4_is_end(void *data, const DWORD **ptr) @@ -515,10 +801,6 @@ const struct wined3d_shader_frontend sm4_shader_frontend = shader_sm4_init, shader_sm4_free, shader_sm4_read_header, - shader_sm4_read_opcode, - shader_sm4_read_src_param, - shader_sm4_read_dst_param, - shader_sm4_read_semantic, - shader_sm4_read_comment, + shader_sm4_read_instruction, shader_sm4_is_end, }; diff --git a/dll/directx/wine/wined3d/state.c b/dll/directx/wine/wined3d/state.c index 310388fb8bf..7dff243f2e9 100644 --- a/dll/directx/wine/wined3d/state.c +++ b/dll/directx/wine/wined3d/state.c @@ -38,7 +38,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d); WINE_DECLARE_DEBUG_CHANNEL(d3d_shader); -/* GL locking for state handlers is done by the caller. */ +/* Context activation for state handler is done by the caller. */ static void state_undefined(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { @@ -599,15 +599,7 @@ static void state_alpha(struct wined3d_context *context, const struct wined3d_st static void shaderconstant(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { - const struct wined3d_device *device = context->swapchain->device; - - /* Vertex and pixel shader states will call a shader upload, don't do - * anything as long one of them has an update pending. */ - if (isStateDirty(context, STATE_VDECL) - || isStateDirty(context, STATE_PIXELSHADER)) - return; - - device->shader_backend->shader_load_constants(context, use_ps(state), use_vs(state)); + context->load_constants = 1; } static void state_clipping(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) @@ -640,12 +632,8 @@ static void state_clipping(struct wined3d_context *context, const struct wined3d /* glEnable(GL_CLIP_PLANEx) doesn't apply to vertex shaders. The enabled / disabled planes are * hardcoded into the shader. Update the shader to update the enabled clipplanes */ - if (!isStateDirty(context, context->state_table[STATE_VSHADER].representative)) - { - device->shader_backend->shader_select(context, use_ps(state), TRUE); - if (!isStateDirty(context, STATE_VERTEXSHADERCONSTANT)) - shaderconstant(context, state, STATE_VERTEXSHADERCONSTANT); - } + context->select_shader = 1; + context->load_constants = 1; } /* TODO: Keep track of previously enabled clipplanes to avoid unnecessary resetting @@ -2640,6 +2628,8 @@ static void set_tex_op(const struct wined3d_gl_info *gl_info, const struct wined case WINED3D_TOP_BUMPENVMAP: case WINED3D_TOP_BUMPENVMAP_LUMINANCE: FIXME("Implement bump environment mapping in GL_NV_texture_env_combine4 path\n"); + Handled = FALSE; + break; default: Handled = FALSE; @@ -3102,6 +3092,9 @@ static void set_tex_op(const struct wined3d_gl_info *gl_info, const struct wined */ FIXME("Implement bump mapping with GL_NV_texture_shader in non register combiner path\n"); } + Handled = FALSE; + break; + default: Handled = FALSE; } @@ -3348,7 +3341,7 @@ static void transform_texture(struct wined3d_context *context, const struct wine device->strided_streams.use_map & (1 << (WINED3D_FFP_TEXCOORD0 + coordIdx)) ? device->strided_streams.elements[WINED3D_FFP_TEXCOORD0 + coordIdx].format->id : WINED3DFMT_UNKNOWN, - device->frag_pipe->ffp_proj_control); + device->shader_backend->shader_has_ffp_proj_control(device->shader_priv)); /* The sampler applying function calls us if this changes */ if ((context->lastWasPow2Texture & (1 << texUnit)) && state->textures[texUnit]) @@ -3618,14 +3611,9 @@ static void tex_bumpenvlscale(struct wined3d_context *context, const struct wine DWORD stage = (state_id - STATE_TEXTURESTAGE(0, 0)) / (WINED3D_HIGHEST_TEXTURE_STATE + 1); const struct wined3d_shader *ps = state->pixel_shader; + /* The pixel shader has to know the luminance scale. Do a constants update. */ if (ps && stage && (ps->reg_maps.luminanceparams & (1 << stage))) - { - /* The pixel shader has to know the luminance scale. Do a constants - * update if it isn't scheduled anyway. */ - if (!isStateDirty(context, STATE_PIXELSHADERCONSTANT) - && !isStateDirty(context, STATE_PIXELSHADER)) - shaderconstant(context, state, STATE_PIXELSHADERCONSTANT); - } + context->load_constants = 1; } static void sampler_texmatrix(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) @@ -3738,12 +3726,9 @@ static void sampler(struct wined3d_context *context, const struct wined3d_state void apply_pixelshader(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { - const struct wined3d_device *device = context->swapchain->device; - BOOL use_vshader = use_vs(state); - BOOL use_pshader = use_ps(state); unsigned int i; - if (use_pshader) + if (use_ps(state)) { if (!context->last_was_pshader) { @@ -3776,13 +3761,13 @@ void apply_pixelshader(struct wined3d_context *context, const struct wined3d_sta context->last_was_pshader = FALSE; } - if (!isStateDirty(context, context->state_table[STATE_VSHADER].representative)) - { - device->shader_backend->shader_select(context, use_pshader, use_vshader); + context->select_shader = 1; + context->load_constants = 1; +} - if (!isStateDirty(context, STATE_VERTEXSHADERCONSTANT) && (use_vshader || use_pshader)) - shaderconstant(context, state, STATE_VERTEXSHADERCONSTANT); - } +static void state_geometry_shader(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) +{ + context->select_shader = 1; } static void shader_bumpenvmat(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) @@ -3790,14 +3775,9 @@ static void shader_bumpenvmat(struct wined3d_context *context, const struct wine DWORD stage = (state_id - STATE_TEXTURESTAGE(0, 0)) / (WINED3D_HIGHEST_TEXTURE_STATE + 1); const struct wined3d_shader *ps = state->pixel_shader; + /* The pixel shader has to know the bump env matrix. Do a constants update. */ if (ps && stage && (ps->reg_maps.bumpmat & (1 << stage))) - { - /* The pixel shader has to know the bump env matrix. Do a constants - * update if it isn't scheduled anyway. */ - if (!isStateDirty(context, STATE_PIXELSHADERCONSTANT) - && !isStateDirty(context, STATE_PIXELSHADER)) - shaderconstant(context, state, STATE_PIXELSHADERCONSTANT); - } + context->load_constants = 1; } static void transform_world(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) @@ -4121,6 +4101,8 @@ static inline void unload_numbered_array(struct wined3d_context *context, int i) GL_EXTCALL(glDisableVertexAttribArrayARB(i)); checkGLcall("glDisableVertexAttribArrayARB(reg)"); + if (gl_info->supported[ARB_INSTANCED_ARRAYS]) + GL_EXTCALL(glVertexAttribDivisorARB(i, 0)); context->numbered_array_mask &= ~(1 << i); } @@ -4146,7 +4128,7 @@ static void load_numbered_arrays(struct wined3d_context *context, int i; /* Default to no instancing */ - device->instancedDraw = FALSE; + device->instance_count = 0; for (i = 0; i < MAX_ATTRIBS; i++) { @@ -4163,12 +4145,25 @@ static void load_numbered_arrays(struct wined3d_context *context, stream = &state->streams[stream_info->elements[i].stream_idx]; - /* Do not load instance data. It will be specified using glTexCoord by drawprim */ if (stream->flags & WINED3DSTREAMSOURCE_INSTANCEDATA) { - if (context->numbered_array_mask & (1 << i)) unload_numbered_array(context, i); - device->instancedDraw = TRUE; - continue; + if (!device->instance_count) + device->instance_count = state->streams[0].frequency ? state->streams[0].frequency : 1; + + if (!gl_info->supported[ARB_INSTANCED_ARRAYS]) + { + /* Unload instanced arrays, they will be loaded using + * immediate mode instead. */ + if (context->numbered_array_mask & (1 << i)) + unload_numbered_array(context, i); + continue; + } + + GL_EXTCALL(glVertexAttribDivisorARB(i, 1)); + } + else if (gl_info->supported[ARB_INSTANCED_ARRAYS]) + { + GL_EXTCALL(glVertexAttribDivisorARB(i, 0)); } TRACE_(d3d_shader)("Loading array %u [VBO=%u]\n", i, stream_info->elements[i].data.buffer_object); @@ -4310,7 +4305,7 @@ static void load_vertex_data(const struct wined3d_context *context, TRACE("Using fast vertex array code\n"); /* This is fixed function pipeline only, and the fixed function pipeline doesn't do instancing */ - device->instancedDraw = FALSE; + device->instance_count = 0; /* Blend Data ---------------------------------------------- */ if ((si->use_map & (1 << WINED3D_FFP_BLENDWEIGHT)) @@ -4580,7 +4575,6 @@ static void vertexdeclaration(struct wined3d_context *context, const struct wine const struct wined3d_device *device = context->swapchain->device; const struct wined3d_gl_info *gl_info = context->gl_info; BOOL useVertexShaderFunction = use_vs(state); - BOOL usePixelShaderFunction = use_ps(state); BOOL updateFog = FALSE; BOOL transformed; BOOL wasrhw = context->last_was_rhw; @@ -4684,18 +4678,9 @@ static void vertexdeclaration(struct wined3d_context *context, const struct wine } } - /* Vertex and pixel shaders are applied together, so let the last dirty - * state do the application. */ - if (!isStateDirty(context, STATE_PIXELSHADER)) - { - device->shader_backend->shader_select(context, usePixelShaderFunction, useVertexShaderFunction); - - if (!isStateDirty(context, STATE_VERTEXSHADERCONSTANT) - && (useVertexShaderFunction || usePixelShaderFunction)) - shaderconstant(context, state, STATE_VERTEXSHADERCONSTANT); - } - context->last_was_vshader = useVertexShaderFunction; + context->select_shader = 1; + context->load_constants = 1; if (updateFog) context_apply_state(context, state, STATE_RENDER(WINED3D_RS_FOGVERTEXMODE)); @@ -4753,8 +4738,7 @@ static void viewport_vertexpart(struct wined3d_context *context, const struct wi if (!isStateDirty(context, STATE_RENDER(WINED3D_RS_POINTSCALEENABLE))) state_pscale(context, state, STATE_RENDER(WINED3D_RS_POINTSCALEENABLE)); /* Update the position fixup. */ - if (!isStateDirty(context, STATE_VERTEXSHADERCONSTANT)) - shaderconstant(context, state, STATE_VERTEXSHADERCONSTANT); + context->load_constants = 1; } static void light(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) @@ -4913,7 +4897,7 @@ static void indexbuffer(struct wined3d_context *context, const struct wined3d_st const struct wined3d_stream_info *stream_info = &context->swapchain->device->strided_streams; const struct wined3d_gl_info *gl_info = context->gl_info; - if (state->user_stream || !state->index_buffer || !stream_info->all_vbo) + if (!state->index_buffer || !stream_info->all_vbo) { GL_EXTCALL(glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0)); } @@ -4963,6 +4947,20 @@ static void psorigin(struct wined3d_context *context, const struct wined3d_state } } +void state_srgbwrite(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) +{ + const struct wined3d_gl_info *gl_info = context->gl_info; + const struct wined3d_surface *rt = state->fb->render_targets[0]; + + TRACE("context %p, state %p, state_id %#x.\n", context, state, state_id); + + if (state->render_states[WINED3D_RS_SRGBWRITEENABLE] + && rt->resource.format->flags & WINED3DFMT_FLAG_SRGB_WRITE) + gl_info->gl_ops.gl.p_glEnable(GL_FRAMEBUFFER_SRGB); + else + gl_info->gl_ops.gl.p_glDisable(GL_FRAMEBUFFER_SRGB); +} + const struct StateEntryTemplate misc_state_template[] = { { STATE_RENDER(WINED3D_RS_SRCBLEND), { STATE_RENDER(WINED3D_RS_ALPHABLENDENABLE), NULL }, WINED3D_GL_EXT_NONE }, { STATE_RENDER(WINED3D_RS_DESTBLEND), { STATE_RENDER(WINED3D_RS_ALPHABLENDENABLE), NULL }, WINED3D_GL_EXT_NONE }, @@ -5156,6 +5154,7 @@ const struct StateEntryTemplate misc_state_template[] = { { STATE_BASEVERTEXINDEX, { STATE_STREAMSRC, NULL, }, WINED3D_GL_EXT_NONE }, { STATE_FRAMEBUFFER, { STATE_FRAMEBUFFER, context_state_fb }, WINED3D_GL_EXT_NONE }, { STATE_PIXELSHADER, { STATE_PIXELSHADER, context_state_drawbuf},WINED3D_GL_EXT_NONE }, + { STATE_GEOMETRY_SHADER, { STATE_GEOMETRY_SHADER, state_geometry_shader}, WINED3D_GL_EXT_NONE }, {0 /* Terminate */, { 0, 0 }, WINED3D_GL_EXT_NONE }, }; @@ -5658,11 +5657,12 @@ static const struct StateEntryTemplate ffp_fragmentstate_template[] = { {0 /* Terminate */, { 0, 0 }, WINED3D_GL_EXT_NONE }, }; -/* Context activation and GL locking are done by the caller. */ +/* Context activation is done by the caller. */ static void ffp_enable(const struct wined3d_gl_info *gl_info, BOOL enable) {} static void ffp_fragment_get_caps(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps) { + caps->wined3d_caps = 0; caps->PrimitiveMiscCaps = 0; caps->TextureOpCaps = WINED3DTEXOPCAPS_ADD | WINED3DTEXOPCAPS_ADDSIGNED @@ -5701,7 +5701,11 @@ static void ffp_fragment_get_caps(const struct wined3d_gl_info *gl_info, struct caps->MaxSimultaneousTextures = gl_info->limits.textures; } -static HRESULT ffp_fragment_alloc(struct wined3d_device *device) { return WINED3D_OK; } +static void *ffp_fragment_alloc(const struct wined3d_shader_backend_ops *shader_backend, void *shader_priv) +{ + return shader_priv; +} + static void ffp_fragment_free(struct wined3d_device *device) {} static BOOL ffp_color_fixup_supported(struct color_fixup_desc fixup) { @@ -5729,7 +5733,35 @@ const struct fragment_pipeline ffp_fragment_pipeline = { ffp_fragment_free, ffp_color_fixup_supported, ffp_fragmentstate_template, - FALSE /* we cannot disable projected textures. The vertex pipe has to do it */ +}; + +static void fp_none_enable(const struct wined3d_gl_info *gl_info, BOOL enable) {} + +static void fp_none_get_caps(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps) +{ + memset(caps, 0, sizeof(*caps)); +} + +static void *fp_none_alloc(const struct wined3d_shader_backend_ops *shader_backend, void *shader_priv) +{ + return shader_priv; +} + +static void fp_none_free(struct wined3d_device *device) {} + +static BOOL fp_none_color_fixup_supported(struct color_fixup_desc fixup) +{ + return is_identity_fixup(fixup); +} + +const struct fragment_pipeline none_fragment_pipe = +{ + fp_none_enable, + fp_none_get_caps, + fp_none_alloc, + fp_none_free, + fp_none_color_fixup_supported, + NULL, }; static unsigned int num_handlers(const APPLYSTATEFUNC *funcs) @@ -5812,6 +5844,7 @@ static void validate_state_table(struct StateEntry *state_table) STATE_VERTEXSHADERCONSTANT, STATE_PIXELSHADERCONSTANT, STATE_VSHADER, + STATE_GEOMETRY_SHADER, STATE_PIXELSHADER, STATE_VIEWPORT, STATE_SCISSORRECT, diff --git a/dll/directx/wine/wined3d/stateblock.c b/dll/directx/wine/wined3d/stateblock.c index 8066fd0848e..fe028d36456 100644 --- a/dll/directx/wine/wined3d/stateblock.c +++ b/dll/directx/wine/wined3d/stateblock.c @@ -471,6 +471,7 @@ void stateblock_unbind_resources(struct wined3d_stateblock *stateblock) { struct wined3d_state *state = &stateblock->state; struct wined3d_vertex_declaration *decl; + struct wined3d_sampler *sampler; struct wined3d_texture *texture; struct wined3d_buffer *buffer; struct wined3d_shader *shader; @@ -491,6 +492,15 @@ void stateblock_unbind_resources(struct wined3d_stateblock *stateblock) } } + for (i = 0; i < MAX_STREAM_OUT; ++i) + { + if ((buffer = state->stream_output[i].buffer)) + { + state->stream_output[i].buffer = NULL; + wined3d_buffer_decref(buffer); + } + } + for (i = 0; i < MAX_STREAMS; ++i) { if ((buffer = state->streams[i].buffer)) @@ -512,11 +522,71 @@ void stateblock_unbind_resources(struct wined3d_stateblock *stateblock) wined3d_shader_decref(shader); } + for (i = 0; i < MAX_CONSTANT_BUFFERS; ++i) + { + if ((buffer = state->vs_cb[i])) + { + state->vs_cb[i] = NULL; + wined3d_buffer_decref(buffer); + } + } + + for (i = 0; i < MAX_SAMPLER_OBJECTS; ++i) + { + if ((sampler = state->vs_sampler[i])) + { + state->vs_sampler[i] = NULL; + wined3d_sampler_decref(sampler); + } + } + + if ((shader = state->geometry_shader)) + { + state->geometry_shader = NULL; + wined3d_shader_decref(shader); + } + + for (i = 0; i < MAX_CONSTANT_BUFFERS; ++i) + { + if ((buffer = state->gs_cb[i])) + { + state->gs_cb[i] = NULL; + wined3d_buffer_decref(buffer); + } + } + + for (i = 0; i < MAX_SAMPLER_OBJECTS; ++i) + { + if ((sampler = state->gs_sampler[i])) + { + state->gs_sampler[i] = NULL; + wined3d_sampler_decref(sampler); + } + } + if ((shader = state->pixel_shader)) { state->pixel_shader = NULL; wined3d_shader_decref(shader); } + + for (i = 0; i < MAX_SAMPLER_OBJECTS; ++i) + { + if ((sampler = state->ps_sampler[i])) + { + state->ps_sampler[i] = NULL; + wined3d_sampler_decref(sampler); + } + } + + for (i = 0; i < MAX_CONSTANT_BUFFERS; ++i) + { + if ((buffer = state->ps_cb[i])) + { + state->ps_cb[i] = NULL; + wined3d_buffer_decref(buffer); + } + } } ULONG CDECL wined3d_stateblock_decref(struct wined3d_stateblock *stateblock) @@ -611,7 +681,7 @@ static void wined3d_state_record_lights(struct wined3d_state *dst_state, const s } } -HRESULT CDECL wined3d_stateblock_capture(struct wined3d_stateblock *stateblock) +void CDECL wined3d_stateblock_capture(struct wined3d_stateblock *stateblock) { const struct wined3d_state *src_state = &stateblock->device->stateBlock->state; unsigned int i; @@ -897,8 +967,6 @@ HRESULT CDECL wined3d_stateblock_capture(struct wined3d_stateblock *stateblock) wined3d_state_record_lights(&stateblock->state, src_state); TRACE("Capture done.\n"); - - return WINED3D_OK; } static void apply_lights(struct wined3d_device *device, const struct wined3d_state *state) @@ -919,7 +987,7 @@ static void apply_lights(struct wined3d_device *device, const struct wined3d_sta } } -HRESULT CDECL wined3d_stateblock_apply(const struct wined3d_stateblock *stateblock) +void CDECL wined3d_stateblock_apply(const struct wined3d_stateblock *stateblock) { struct wined3d_device *device = stateblock->device; unsigned int i; @@ -1074,8 +1142,6 @@ HRESULT CDECL wined3d_stateblock_apply(const struct wined3d_stateblock *stateblo } TRACE("Applied stateblock %p.\n", stateblock); - - return WINED3D_OK; } void stateblock_init_default_state(struct wined3d_stateblock *stateblock) @@ -1095,7 +1161,6 @@ void stateblock_init_default_state(struct wined3d_stateblock *stateblock) unsigned int i; struct wined3d_swapchain *swapchain; struct wined3d_surface *backbuffer; - HRESULT hr; TRACE("stateblock %p.\n", stateblock); @@ -1103,11 +1168,11 @@ void stateblock_init_default_state(struct wined3d_stateblock *stateblock) memset(stateblock->changed.vertexShaderConstantsF, 0, device->d3d_vshader_constantF * sizeof(BOOL)); /* Set some of the defaults for lights, transforms etc */ - memcpy(&state->transforms[WINED3D_TS_PROJECTION], &identity, sizeof(identity)); - memcpy(&state->transforms[WINED3D_TS_VIEW], &identity, sizeof(identity)); + state->transforms[WINED3D_TS_PROJECTION] = identity; + state->transforms[WINED3D_TS_VIEW] = identity; for (i = 0; i < 256; ++i) { - memcpy(&state->transforms[WINED3D_TS_WORLD_MATRIX(i)], &identity, sizeof(identity)); + state->transforms[WINED3D_TS_WORLD_MATRIX(i)] = identity; } state->fb = &device->fb; @@ -1248,7 +1313,7 @@ void stateblock_init_default_state(struct wined3d_stateblock *stateblock) for (i = 0; i < MAX_TEXTURES; ++i) { TRACE("Setting up default texture states for texture Stage %u.\n", i); - memcpy(&state->transforms[WINED3D_TS_TEXTURE0 + i], &identity, sizeof(identity)); + state->transforms[WINED3D_TS_TEXTURE0 + i] = identity; state->texture_states[i][WINED3D_TSS_COLOR_OP] = i ? WINED3D_TOP_DISABLE : WINED3D_TOP_MODULATE; state->texture_states[i][WINED3D_TSS_COLOR_ARG1] = WINED3DTA_TEXTURE; state->texture_states[i][WINED3D_TSS_COLOR_ARG2] = WINED3DTA_CURRENT; @@ -1296,16 +1361,13 @@ void stateblock_init_default_state(struct wined3d_stateblock *stateblock) } /* check the return values, because the GetBackBuffer call isn't valid for ddraw */ - hr = wined3d_device_get_swapchain(device, 0, &swapchain); - if (SUCCEEDED(hr) && swapchain) + if ((swapchain = wined3d_device_get_swapchain(device, 0))) { - hr = wined3d_swapchain_get_back_buffer(swapchain, 0, WINED3D_BACKBUFFER_TYPE_MONO, &backbuffer); - if (SUCCEEDED(hr) && backbuffer) + if ((backbuffer = wined3d_swapchain_get_back_buffer(swapchain, 0, WINED3D_BACKBUFFER_TYPE_MONO))) { struct wined3d_resource_desc desc; wined3d_resource_get_desc(&backbuffer->resource, &desc); - wined3d_surface_decref(backbuffer); /* Set the default scissor rect values */ state->scissor_rect.left = 0; @@ -1321,8 +1383,6 @@ void stateblock_init_default_state(struct wined3d_stateblock *stateblock) state->viewport.height = swapchain->desc.backbuffer_height; state->viewport.min_z = 0.0f; state->viewport.max_z = 1.0f; - - wined3d_swapchain_decref(swapchain); } TRACE("Done.\n"); @@ -1391,10 +1451,7 @@ HRESULT CDECL wined3d_stateblock_create(struct wined3d_device *device, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate stateblock memory.\n"); return E_OUTOFMEMORY; - } hr = stateblock_init(object, device, type); if (FAILED(hr)) diff --git a/dll/directx/wine/wined3d/surface.c b/dll/directx/wine/wined3d/surface.c index 9bc153ab048..12f29a472be 100644 --- a/dll/directx/wine/wined3d/surface.c +++ b/dll/directx/wine/wined3d/surface.c @@ -57,8 +57,6 @@ static void surface_cleanup(struct wined3d_surface *surface) context = context_acquire(surface->resource.device, NULL); gl_info = context->gl_info; - ENTER_GL(); - if (surface->texture_name) { TRACE("Deleting texture %u.\n", surface->texture_name); @@ -90,8 +88,6 @@ static void surface_cleanup(struct wined3d_surface *surface) HeapFree(GetProcessHeap(), 0, entry); } - LEAVE_GL(); - context_release(context); } @@ -313,7 +309,7 @@ static void surface_get_rect(const struct wined3d_surface *surface, const RECT * } } -/* GL locking and context activation is done by the caller */ +/* Context activation is done by the caller. */ void draw_textured_quad(const struct wined3d_surface *src_surface, struct wined3d_context *context, const RECT *src_rect, const RECT *dst_rect, enum wined3d_texture_filter_type filter) { @@ -532,7 +528,6 @@ static void surface_load_pbo(struct wined3d_surface *surface, const struct wined GLenum error; context = context_acquire(surface->resource.device, NULL); - ENTER_GL(); GL_EXTCALL(glGenBuffersARB(1, &surface->pbo)); error = gl_info->gl_ops.gl.p_glGetError(); @@ -559,7 +554,6 @@ static void surface_load_pbo(struct wined3d_surface *surface, const struct wined } surface->resource.allocatedMemory = NULL; surface->flags |= SFLAG_PBO; - LEAVE_GL(); context_release(context); } @@ -622,8 +616,6 @@ static void surface_bind(struct wined3d_surface *surface, struct wined3d_context if (srgb) ERR("Trying to bind standalone surface %p as sRGB.\n", surface); - ENTER_GL(); - if (!surface->texture_name) { gl_info->gl_ops.gl.p_glGenTextures(1, &surface->texture_name); @@ -643,8 +635,6 @@ static void surface_bind(struct wined3d_surface *surface, struct wined3d_context { context_bind_texture(context, surface->texture_target, surface->texture_name); } - - LEAVE_GL(); } } @@ -681,7 +671,6 @@ static void surface_release_client_storage(struct wined3d_surface *surface) struct wined3d_context *context = context_acquire(surface->resource.device, NULL); const struct wined3d_gl_info *gl_info = context->gl_info; - ENTER_GL(); gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_FALSE); if (surface->texture_name) { @@ -696,7 +685,6 @@ static void surface_release_client_storage(struct wined3d_surface *surface) GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); } gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE); - LEAVE_GL(); context_release(context); @@ -922,7 +910,6 @@ static void surface_map(struct wined3d_surface *surface, const RECT *rect, DWORD context = context_acquire(device, NULL); gl_info = context->gl_info; - ENTER_GL(); GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, surface->pbo)); checkGLcall("glBindBufferARB"); @@ -939,7 +926,6 @@ static void surface_map(struct wined3d_surface *surface, const RECT *rect, DWORD GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0)); checkGLcall("glBindBufferARB"); - LEAVE_GL(); context_release(context); } @@ -981,12 +967,10 @@ static void surface_unmap(struct wined3d_surface *surface) context = context_acquire(device, NULL); gl_info = context->gl_info; - ENTER_GL(); GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, surface->pbo)); GL_EXTCALL(glUnmapBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB)); GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0)); checkGLcall("glUnmapBufferARB"); - LEAVE_GL(); context_release(context); surface->resource.allocatedMemory = NULL; @@ -1108,8 +1092,6 @@ static void wined3d_surface_depth_blt_fbo(const struct wined3d_device *device, s gl_info = context->gl_info; - ENTER_GL(); - context_apply_fbo_state_blit(context, GL_READ_FRAMEBUFFER, NULL, src_surface, SFLAG_INTEXTURE); gl_info->gl_ops.gl.p_glReadBuffer(GL_NONE); checkGLcall("glReadBuffer()"); @@ -1143,8 +1125,6 @@ static void wined3d_surface_depth_blt_fbo(const struct wined3d_device *device, s dst_rect->left, dst_rect->top, dst_rect->right, dst_rect->bottom, gl_mask, GL_NEAREST); checkGLcall("glBlitFramebuffer()"); - LEAVE_GL(); - if (wined3d_settings.strict_draw_ordering) gl_info->gl_ops.gl.p_glFlush(); /* Flush to ensure ordering across contexts. */ @@ -1226,12 +1206,10 @@ static void surface_blt_fbo(const struct wined3d_device *device, enum wined3d_te buffer = GL_COLOR_ATTACHMENT0; } - ENTER_GL(); context_apply_fbo_state_blit(context, GL_READ_FRAMEBUFFER, src_surface, NULL, src_location); gl_info->gl_ops.gl.p_glReadBuffer(buffer); checkGLcall("glReadBuffer()"); context_check_fbo_status(context, GL_READ_FRAMEBUFFER); - LEAVE_GL(); if (dst_location == SFLAG_INDRAWABLE) { @@ -1245,7 +1223,6 @@ static void surface_blt_fbo(const struct wined3d_device *device, enum wined3d_te buffer = GL_COLOR_ATTACHMENT0; } - ENTER_GL(); context_apply_fbo_state_blit(context, GL_DRAW_FRAMEBUFFER, dst_surface, NULL, dst_location); context_set_draw_buffer(context, buffer); context_check_fbo_status(context, GL_DRAW_FRAMEBUFFER); @@ -1264,8 +1241,6 @@ static void surface_blt_fbo(const struct wined3d_device *device, enum wined3d_te dst_rect.left, dst_rect.top, dst_rect.right, dst_rect.bottom, GL_COLOR_BUFFER_BIT, gl_filter); checkGLcall("glBlitFramebuffer()"); - LEAVE_GL(); - if (wined3d_settings.strict_draw_ordering || (dst_location == SFLAG_INDRAWABLE && dst_surface->container.u.swapchain->front_buffer == dst_surface)) @@ -1791,7 +1766,6 @@ static void surface_remove_pbo(struct wined3d_surface *surface, const struct win + (RESOURCE_ALIGNMENT - 1)) & ~(RESOURCE_ALIGNMENT - 1)); } - ENTER_GL(); GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, surface->pbo)); checkGLcall("glBindBufferARB(GL_PIXEL_UNPACK_BUFFER, surface->pbo)"); GL_EXTCALL(glGetBufferSubDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0, @@ -1799,7 +1773,6 @@ static void surface_remove_pbo(struct wined3d_surface *surface, const struct win checkGLcall("glGetBufferSubDataARB"); GL_EXTCALL(glDeleteBuffersARB(1, &surface->pbo)); checkGLcall("glDeleteBuffersARB"); - LEAVE_GL(); surface->pbo = 0; surface->flags &= ~SFLAG_PBO; @@ -1891,17 +1864,13 @@ static void surface_unload(struct wined3d_resource *resource) */ LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, &surface->renderbuffers, struct wined3d_renderbuffer_entry, entry) { - ENTER_GL(); gl_info->fbo_ops.glDeleteRenderbuffers(1, &entry->id); - LEAVE_GL(); list_remove(&entry->entry); HeapFree(GetProcessHeap(), 0, entry); } list_init(&surface->renderbuffers); surface->current_renderbuffer = NULL; - ENTER_GL(); - /* If we're in a texture, the texture name belongs to the texture. * Otherwise, destroy it. */ if (surface->container.type != WINED3D_CONTAINER_TEXTURE) @@ -1922,8 +1891,6 @@ static void surface_unload(struct wined3d_resource *resource) surface->rb_resolved = 0; } - LEAVE_GL(); - context_release(context); resource_unload(resource); @@ -2104,7 +2071,7 @@ void surface_set_texture_name(struct wined3d_surface *surface, GLuint new_name, surface_force_reload(surface); } -void surface_set_texture_target(struct wined3d_surface *surface, GLenum target) +void surface_set_texture_target(struct wined3d_surface *surface, GLenum target, GLint level) { TRACE("surface %p, target %#x.\n", surface, target); @@ -2120,6 +2087,7 @@ void surface_set_texture_target(struct wined3d_surface *surface, GLenum target) } } surface->texture_target = target; + surface->texture_level = level; surface_force_reload(surface); } @@ -2137,8 +2105,6 @@ static void surface_download_data(struct wined3d_surface *surface, const struct return; } - ENTER_GL(); - if (format->flags & WINED3DFMT_FLAG_COMPRESSED) { TRACE("(%p) : Calling glGetCompressedTexImageARB level %d, format %#x, type %#x, data %p.\n", @@ -2160,8 +2126,6 @@ static void surface_download_data(struct wined3d_surface *surface, const struct surface->texture_level, surface->resource.allocatedMemory)); checkGLcall("glGetCompressedTexImageARB"); } - - LEAVE_GL(); } else { @@ -2212,7 +2176,6 @@ static void surface_download_data(struct wined3d_surface *surface, const struct gl_format, gl_type, mem); checkGLcall("glGetTexImage"); } - LEAVE_GL(); if (surface->flags & SFLAG_NONPOW2) { @@ -2313,8 +2276,6 @@ static void surface_upload_data(struct wined3d_surface *surface, const struct wi update_h /= format->height_scale.denominator; } - ENTER_GL(); - if (data->buffer_object) { GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, data->buffer_object)); @@ -2387,8 +2348,6 @@ static void surface_upload_data(struct wined3d_surface *surface, const struct wi checkGLcall("glBindBufferARB"); } - LEAVE_GL(); - if (wined3d_settings.strict_draw_ordering) gl_info->gl_ops.gl.p_glFlush(); @@ -2704,8 +2663,6 @@ static void surface_allocate_surface(struct wined3d_surface *surface, const stru surface, surface->texture_target, surface->texture_level, debug_d3dformat(format->id), internal, width, height, format->glFormat, format->glType); - ENTER_GL(); - if (gl_info->supported[APPLE_CLIENT_STORAGE]) { if (surface->flags & (SFLAG_NONPOW2 | SFLAG_DIBSECTION | SFLAG_CONVERTED) @@ -2752,13 +2709,12 @@ static void surface_allocate_surface(struct wined3d_surface *surface, const stru gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE); checkGLcall("glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE)"); } - LEAVE_GL(); } /* In D3D the depth stencil dimensions have to be greater than or equal to the * render target dimensions. With FBOs, the dimensions have to be an exact match. */ /* TODO: We should synchronize the renderbuffer's content with the texture's content. */ -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ void surface_set_compatible_renderbuffer(struct wined3d_surface *surface, const struct wined3d_surface *rt) { const struct wined3d_gl_info *gl_info = &surface->resource.device->adapter->gl_info; @@ -3150,14 +3106,14 @@ HRESULT CDECL wined3d_surface_restore(struct wined3d_surface *surface) return WINED3D_OK; } -HRESULT CDECL wined3d_surface_set_palette(struct wined3d_surface *surface, struct wined3d_palette *palette) +void CDECL wined3d_surface_set_palette(struct wined3d_surface *surface, struct wined3d_palette *palette) { TRACE("surface %p, palette %p.\n", surface, palette); if (surface->palette == palette) { TRACE("Nop palette change.\n"); - return WINED3D_OK; + return; } if (surface->palette && (surface->resource.usage & WINED3DUSAGE_RENDERTARGET)) @@ -3172,8 +3128,6 @@ HRESULT CDECL wined3d_surface_set_palette(struct wined3d_surface *surface, struc surface->surface_ops->surface_realize_palette(surface); } - - return WINED3D_OK; } HRESULT CDECL wined3d_surface_set_color_key(struct wined3d_surface *surface, @@ -3766,12 +3720,10 @@ static struct wined3d_surface *surface_convert_format(struct wined3d_surface *so return NULL; } - wined3d_surface_create(source->resource.device, source->resource.width, - source->resource.height, to_fmt, 0 /* level */, 0 /* usage */, WINED3D_POOL_SCRATCH, - WINED3D_MULTISAMPLE_NONE /* TODO: Multisampled conversion */, 0 /* MultiSampleQuality */, - source->surface_type, WINED3D_SURFACE_MAPPABLE | WINED3D_SURFACE_DISCARD, - NULL /* parent */, &wined3d_null_parent_ops, &ret); - if (!ret) + /* FIXME: Multisampled conversion? */ + if (FAILED(hr = wined3d_surface_create(source->resource.device, source->resource.width, source->resource.height, + to_fmt, 0, WINED3D_POOL_SCRATCH, WINED3D_MULTISAMPLE_NONE, 0, + WINED3D_SURFACE_MAPPABLE | WINED3D_SURFACE_DISCARD, NULL, &wined3d_null_parent_ops, &ret))) { ERR("Failed to create a destination surface for conversion.\n"); return NULL; @@ -4159,9 +4111,7 @@ void surface_internal_preload(struct wined3d_surface *surface, enum WINED3DSRGB /* Tell opengl to try and keep this texture in video ram (well mostly) */ GLclampf tmp; tmp = 0.9f; - ENTER_GL(); context->gl_info->gl_ops.gl.p_glPrioritizeTextures(1, &surface->texture_name, &tmp); - LEAVE_GL(); } context_release(context); @@ -4190,8 +4140,6 @@ static void read_from_framebuffer(struct wined3d_surface *surface, const RECT *r context_apply_blit_state(context, device); gl_info = context->gl_info; - ENTER_GL(); - /* Select the correct read buffer, and give some debug output. * There is no need to keep track of the current read buffer or reset it, every part of the code * that reads sets the read buffer as desired. @@ -4258,7 +4206,6 @@ static void read_from_framebuffer(struct wined3d_surface *surface, const RECT *r if (!mem) { ERR("Out of memory\n"); - LEAVE_GL(); return; } bpp = surface->resource.format->byte_count * 3; @@ -4347,7 +4294,6 @@ static void read_from_framebuffer(struct wined3d_surface *surface, const RECT *r ERR("Out of memory\n"); if (surface->resource.format->id == WINED3DFMT_P8_UINT) HeapFree(GetProcessHeap(), 0, mem); - LEAVE_GL(); return; } @@ -4370,7 +4316,6 @@ static void read_from_framebuffer(struct wined3d_surface *surface, const RECT *r } } - LEAVE_GL(); context_release(context); /* For P8 textures we need to perform an inverse palette lookup. This is @@ -4435,8 +4380,6 @@ void surface_load_fb_texture(struct wined3d_surface *surface, BOOL srgb) TRACE("Reading back offscreen render target %p.\n", surface); - ENTER_GL(); - if (surface_is_offscreen(surface)) gl_info->gl_ops.gl.p_glReadBuffer(device->offscreenBuffer); else @@ -4447,8 +4390,6 @@ void surface_load_fb_texture(struct wined3d_surface *surface, BOOL srgb) 0, 0, 0, 0, surface->resource.width, surface->resource.height); checkGLcall("glCopyTexSubImage2D"); - LEAVE_GL(); - context_release(context); } @@ -4542,8 +4483,6 @@ static void flush_to_framebuffer_drawpixels(struct wined3d_surface *surface, context_apply_blit_state(context, device); gl_info = context->gl_info; - ENTER_GL(); - if (!surface_is_offscreen(surface)) { GLenum buffer = surface_get_gl_buffer(surface); @@ -4586,8 +4525,6 @@ static void flush_to_framebuffer_drawpixels(struct wined3d_surface *surface, gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); checkGLcall("glPixelStorei(GL_UNPACK_ROW_LENGTH, 0)"); - LEAVE_GL(); - if (wined3d_settings.strict_draw_ordering || (surface->container.type == WINED3D_CONTAINER_SWAPCHAIN && surface->container.u.swapchain->front_buffer == surface)) @@ -4926,7 +4863,6 @@ static void fb_copy_to_texture_direct(struct wined3d_surface *dst_surface, struc gl_info = context->gl_info; context_apply_blit_state(context, device); surface_internal_preload(dst_surface, SRGB_RGB); - ENTER_GL(); /* Bind the target texture */ context_bind_texture(context, dst_target, dst_surface->texture_name); @@ -5002,7 +4938,6 @@ static void fb_copy_to_texture_direct(struct wined3d_surface *dst_surface, struc } checkGLcall("glCopyTexSubImage2D"); - LEAVE_GL(); context_release(context); /* The texture is now most up to date - If the surface is a render target and has a drawable, this @@ -5044,7 +4979,6 @@ static void fb_copy_to_texture_hwstretch(struct wined3d_surface *dst_surface, st /* Get it a description */ surface_internal_preload(src_surface, SRGB_RGB); } - ENTER_GL(); /* Try to use an aux buffer for drawing the rectangle. This way it doesn't need restoring. * This way we don't have to wait for the 2nd readback to finish to leave this function. @@ -5277,8 +5211,6 @@ static void fb_copy_to_texture_hwstretch(struct wined3d_surface *dst_surface, st checkGLcall("glDeleteTextures(1, &backup)"); } - LEAVE_GL(); - if (wined3d_settings.strict_draw_ordering) gl_info->gl_ops.gl.p_glFlush(); /* Flush to ensure ordering across contexts. */ @@ -5346,8 +5278,6 @@ static void surface_blt_to_drawable(const struct wined3d_device *device, device->blitter->set_shader(device->blit_priv, context, src_surface); - ENTER_GL(); - if (color_key) { gl_info->gl_ops.gl.p_glEnable(GL_ALPHA_TEST); @@ -5378,8 +5308,6 @@ static void surface_blt_to_drawable(const struct wined3d_device *device, checkGLcall("glDisable(GL_ALPHA_TEST)"); } - LEAVE_GL(); - /* Leave the opengl state valid for blitting */ device->blitter->unset_shader(context->gl_info); @@ -5600,7 +5528,7 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(struct wined3d_surface *dst_surfa return WINED3DERR_INVALIDCALL; } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void surface_depth_blt(const struct wined3d_surface *surface, struct wined3d_context *context, GLuint texture, GLint x, GLint y, GLsizei w, GLsizei h, GLenum target) { @@ -5769,8 +5697,6 @@ void surface_load_ds_location(struct wined3d_surface *surface, struct wined3d_co TRACE("Copying onscreen depth buffer to depth texture.\n"); - ENTER_GL(); - if (!device->depth_blt_texture) gl_info->gl_ops.gl.p_glGenTextures(1, &device->depth_blt_texture); @@ -5816,8 +5742,6 @@ void surface_load_ds_location(struct wined3d_surface *surface, struct wined3d_co context_invalidate_state(context, STATE_FRAMEBUFFER); - LEAVE_GL(); - if (wined3d_settings.strict_draw_ordering) gl_info->gl_ops.gl.p_glFlush(); /* Flush to ensure ordering across contexts. */ } @@ -5825,8 +5749,6 @@ void surface_load_ds_location(struct wined3d_surface *surface, struct wined3d_co { TRACE("Copying depth texture to onscreen depth buffer.\n"); - ENTER_GL(); - context_apply_fbo_state_blit(context, GL_FRAMEBUFFER, context->swapchain->front_buffer, NULL, SFLAG_INDRAWABLE); surface_depth_blt(surface, context, surface->texture_name, @@ -5835,8 +5757,6 @@ void surface_load_ds_location(struct wined3d_surface *surface, struct wined3d_co context_invalidate_state(context, STATE_FRAMEBUFFER); - LEAVE_GL(); - if (wined3d_settings.strict_draw_ordering) gl_info->gl_ops.gl.p_glFlush(); /* Flush to ensure ordering across contexts. */ } @@ -6369,9 +6289,7 @@ static void ffp_blit_p8_upload_palette(const struct wined3d_surface *surface, co d3dfmt_p8_init_palette(surface, table, colorkey_active); TRACE("Using GL_EXT_PALETTED_TEXTURE for 8-bit paletted texture support\n"); - ENTER_GL(); GL_EXTCALL(glColorTableEXT(target, GL_RGBA, 256, GL_RGBA, GL_UNSIGNED_BYTE, table)); - LEAVE_GL(); } /* Context activation is done by the caller. */ @@ -6393,17 +6311,15 @@ static HRESULT ffp_blit_set(void *blit_priv, struct wined3d_context *context, co && gl_info->supported[EXT_PALETTED_TEXTURE]) ffp_blit_p8_upload_palette(surface, gl_info); - ENTER_GL(); gl_info->gl_ops.gl.p_glEnable(target); checkGLcall("glEnable(target)"); - LEAVE_GL(); + return WINED3D_OK; } /* Context activation is done by the caller. */ static void ffp_blit_unset(const struct wined3d_gl_info *gl_info) { - ENTER_GL(); gl_info->gl_ops.gl.p_glDisable(GL_TEXTURE_2D); checkGLcall("glDisable(GL_TEXTURE_2D)"); if (gl_info->supported[ARB_TEXTURE_CUBE_MAP]) @@ -6416,7 +6332,6 @@ static void ffp_blit_unset(const struct wined3d_gl_info *gl_info) gl_info->gl_ops.gl.p_glDisable(GL_TEXTURE_RECTANGLE_ARB); checkGLcall("glDisable(GL_TEXTURE_RECTANGLE_ARB)"); } - LEAVE_GL(); } static BOOL ffp_blit_supported(const struct wined3d_gl_info *gl_info, enum wined3d_blit_op blit_op, @@ -7188,9 +7103,9 @@ const struct blit_shader cpu_blit = { cpu_blit_depth_fill, }; -static HRESULT surface_init(struct wined3d_surface *surface, enum wined3d_surface_type surface_type, UINT alignment, - UINT width, UINT height, UINT level, enum wined3d_multisample_type multisample_type, - UINT multisample_quality, struct wined3d_device *device, DWORD usage, enum wined3d_format_id format_id, +static HRESULT surface_init(struct wined3d_surface *surface, UINT alignment, UINT width, UINT height, + enum wined3d_multisample_type multisample_type, UINT multisample_quality, + struct wined3d_device *device, DWORD usage, enum wined3d_format_id format_id, enum wined3d_pool pool, DWORD flags, void *parent, const struct wined3d_parent_ops *parent_ops) { const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; @@ -7249,22 +7164,10 @@ static HRESULT surface_init(struct wined3d_surface *surface, enum wined3d_surfac if (!resource_size) return WINED3DERR_INVALIDCALL; - surface->surface_type = surface_type; - - switch (surface_type) - { - case WINED3D_SURFACE_TYPE_OPENGL: - surface->surface_ops = &surface_ops; - break; - - case WINED3D_SURFACE_TYPE_GDI: - surface->surface_ops = &gdi_surface_ops; - break; - - default: - ERR("Requested unknown surface implementation %#x.\n", surface_type); - return WINED3DERR_INVALIDCALL; - } + if (device->wined3d->flags & WINED3D_NO3D) + surface->surface_ops = &gdi_surface_ops; + else + surface->surface_ops = &surface_ops; hr = resource_init(&surface->resource, device, WINED3D_RTYPE_SURFACE, format, multisample_type, multisample_quality, usage, pool, width, height, 1, @@ -7278,7 +7181,6 @@ static HRESULT surface_init(struct wined3d_surface *surface, enum wined3d_surfac /* "Standalone" surface. */ surface_set_container(surface, WINED3D_CONTAINER_NONE, NULL); - surface->texture_level = level; list_init(&surface->overlays); /* Flags */ @@ -7330,36 +7232,25 @@ static HRESULT surface_init(struct wined3d_surface *surface, enum wined3d_surfac } HRESULT CDECL wined3d_surface_create(struct wined3d_device *device, UINT width, UINT height, - enum wined3d_format_id format_id, UINT level, DWORD usage, enum wined3d_pool pool, - enum wined3d_multisample_type multisample_type, DWORD multisample_quality, - enum wined3d_surface_type surface_type, DWORD flags, void *parent, - const struct wined3d_parent_ops *parent_ops, struct wined3d_surface **surface) + enum wined3d_format_id format_id, DWORD usage, enum wined3d_pool pool, + enum wined3d_multisample_type multisample_type, DWORD multisample_quality, DWORD flags, + void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_surface **surface) { struct wined3d_surface *object; HRESULT hr; - TRACE("device %p, width %u, height %u, format %s, level %u\n", - device, width, height, debug_d3dformat(format_id), level); + TRACE("device %p, width %u, height %u, format %s\n", + device, width, height, debug_d3dformat(format_id)); TRACE("surface %p, usage %s (%#x), pool %s, multisample_type %#x, multisample_quality %u\n", surface, debug_d3dusage(usage), usage, debug_d3dpool(pool), multisample_type, multisample_quality); - TRACE("surface_type %#x, flags %#x, parent %p, parent_ops %p.\n", surface_type, flags, parent, parent_ops); - - if (surface_type == WINED3D_SURFACE_TYPE_OPENGL && !device->adapter) - { - ERR("OpenGL surfaces are not available without OpenGL.\n"); - return WINED3DERR_NOTAVAILABLE; - } + TRACE("flags %#x, parent %p, parent_ops %p.\n", flags, parent, parent_ops); object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate surface memory.\n"); return WINED3DERR_OUTOFVIDEOMEMORY; - } - hr = surface_init(object, surface_type, device->surface_alignment, width, height, level, - multisample_type, multisample_quality, device, usage, format_id, pool, flags, parent, parent_ops); - if (FAILED(hr)) + if (FAILED(hr = surface_init(object, device->surface_alignment, width, height, multisample_type, + multisample_quality, device, usage, format_id, pool, flags, parent, parent_ops))) { WARN("Failed to initialize surface, returning %#x.\n", hr); HeapFree(GetProcessHeap(), 0, object); diff --git a/dll/directx/wine/wined3d/swapchain.c b/dll/directx/wine/wined3d/swapchain.c index 379b2687b51..7f8f3397604 100644 --- a/dll/directx/wine/wined3d/swapchain.c +++ b/dll/directx/wine/wined3d/swapchain.c @@ -42,7 +42,8 @@ static void swapchain_cleanup(struct wined3d_swapchain *swapchain) * is the last buffer to be destroyed, FindContext() depends on that. */ if (swapchain->front_buffer) { - surface_set_container(swapchain->front_buffer, WINED3D_CONTAINER_NONE, NULL); + if (swapchain->front_buffer->container.type == WINED3D_CONTAINER_SWAPCHAIN) + surface_set_container(swapchain->front_buffer, WINED3D_CONTAINER_NONE, NULL); if (wined3d_surface_decref(swapchain->front_buffer)) WARN("Something's still holding the front buffer (%p).\n", swapchain->front_buffer); swapchain->front_buffer = NULL; @@ -54,7 +55,8 @@ static void swapchain_cleanup(struct wined3d_swapchain *swapchain) while (i--) { - surface_set_container(swapchain->back_buffers[i], WINED3D_CONTAINER_NONE, NULL); + if (swapchain->back_buffers[i]->container.type == WINED3D_CONTAINER_SWAPCHAIN) + surface_set_container(swapchain->back_buffers[i], WINED3D_CONTAINER_NONE, NULL); if (wined3d_surface_decref(swapchain->back_buffers[i])) WARN("Something's still holding back buffer %u (%p).\n", i, swapchain->back_buffers[i]); } @@ -128,18 +130,16 @@ void * CDECL wined3d_swapchain_get_parent(const struct wined3d_swapchain *swapch return swapchain->parent; } -HRESULT CDECL wined3d_swapchain_set_window(struct wined3d_swapchain *swapchain, HWND window) +void CDECL wined3d_swapchain_set_window(struct wined3d_swapchain *swapchain, HWND window) { if (!window) window = swapchain->device_window; if (window == swapchain->win_handle) - return WINED3D_OK; + return; TRACE("Setting swapchain %p window from %p to %p.\n", swapchain, swapchain->win_handle, window); swapchain->win_handle = window; - - return WINED3D_OK; } HRESULT CDECL wined3d_swapchain_present(struct wined3d_swapchain *swapchain, @@ -188,11 +188,11 @@ HRESULT CDECL wined3d_swapchain_get_front_buffer_data(const struct wined3d_swapc return wined3d_surface_blt(dst_surface, &dst_rect, src_surface, &src_rect, 0, NULL, WINED3D_TEXF_POINT); } -HRESULT CDECL wined3d_swapchain_get_back_buffer(const struct wined3d_swapchain *swapchain, - UINT back_buffer_idx, enum wined3d_backbuffer_type type, struct wined3d_surface **back_buffer) +struct wined3d_surface * CDECL wined3d_swapchain_get_back_buffer(const struct wined3d_swapchain *swapchain, + UINT back_buffer_idx, enum wined3d_backbuffer_type type) { - TRACE("swapchain %p, back_buffer_idx %u, type %#x, back_buffer %p.\n", - swapchain, back_buffer_idx, type, back_buffer); + TRACE("swapchain %p, back_buffer_idx %u, type %#x.\n", + swapchain, back_buffer_idx, type); /* Return invalid if there is no backbuffer array, otherwise it will * crash when ddraw is used (there swapchain->back_buffers is always @@ -204,17 +204,12 @@ HRESULT CDECL wined3d_swapchain_get_back_buffer(const struct wined3d_swapchain * WARN("Invalid back buffer index.\n"); /* Native d3d9 doesn't set NULL here, just as wine's d3d9. But set it * here in wined3d to avoid problems in other libs. */ - *back_buffer = NULL; - return WINED3DERR_INVALIDCALL; + return NULL; } - *back_buffer = swapchain->back_buffers[back_buffer_idx]; - if (*back_buffer) - wined3d_surface_incref(*back_buffer); + TRACE("Returning back buffer %p.\n", swapchain->back_buffers[back_buffer_idx]); - TRACE("Returning back buffer %p.\n", *back_buffer); - - return WINED3D_OK; + return swapchain->back_buffers[back_buffer_idx]; } HRESULT CDECL wined3d_swapchain_get_raster_status(const struct wined3d_swapchain *swapchain, @@ -249,14 +244,12 @@ struct wined3d_device * CDECL wined3d_swapchain_get_device(const struct wined3d_ return swapchain->device; } -HRESULT CDECL wined3d_swapchain_get_desc(const struct wined3d_swapchain *swapchain, +void CDECL wined3d_swapchain_get_desc(const struct wined3d_swapchain *swapchain, struct wined3d_swapchain_desc *desc) { TRACE("swapchain %p, desc %p.\n", swapchain, desc); *desc = swapchain->desc; - - return WINED3D_OK; } HRESULT CDECL wined3d_swapchain_set_gamma_ramp(const struct wined3d_swapchain *swapchain, @@ -323,7 +316,6 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain, surface_load_location(backbuffer, location, NULL); } - ENTER_GL(); context_apply_fbo_state_blit(context, GL_READ_FRAMEBUFFER, backbuffer, NULL, location); gl_info->gl_ops.gl.p_glReadBuffer(GL_COLOR_ATTACHMENT0); context_check_fbo_status(context, GL_READ_FRAMEBUFFER); @@ -346,7 +338,6 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain, dst_rect->left, win_h - dst_rect->top, dst_rect->right, win_h - dst_rect->bottom, GL_COLOR_BUFFER_BIT, gl_filter); checkGLcall("Swapchain present blit(EXT_framebuffer_blit)\n"); - LEAVE_GL(); } else { @@ -371,8 +362,8 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain, if (is_complex_fixup(backbuffer->resource.format->color_fixup)) gl_filter = GL_NEAREST; - ENTER_GL(); context_apply_fbo_state_blit(context2, GL_FRAMEBUFFER, swapchain->front_buffer, NULL, SFLAG_INDRAWABLE); + context_bind_texture(context2, backbuffer->texture_target, backbuffer->texture_name); /* Set up the texture. The surface is not in a wined3d_texture * container, so there are no D3D texture settings to dirtify. */ @@ -420,7 +411,6 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain, device->blitter->unset_shader(context->gl_info); checkGLcall("Swapchain present blit(manual)\n"); - LEAVE_GL(); context_release(context2); } @@ -566,7 +556,9 @@ static void swapchain_gl_present(struct wined3d_swapchain *swapchain, const RECT if (swapchain->num_contexts > 1) gl_info->gl_ops.gl.p_glFinish(); - SwapBuffers(context->hdc); /* TODO: cycle through the swapchain buffers */ + + /* call wglSwapBuffers through the gl table to avoid confusing the Steam overlay */ + gl_info->gl_ops.wgl.p_wglSwapBuffers(context->hdc); /* TODO: cycle through the swapchain buffers */ TRACE("SwapBuffers called, Starting new frame\n"); /* FPS support */ @@ -823,9 +815,8 @@ void swapchain_update_render_to_fbo(struct wined3d_swapchain *swapchain) } /* Do not call while under the GL lock. */ -static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, enum wined3d_surface_type surface_type, - struct wined3d_device *device, struct wined3d_swapchain_desc *desc, - void *parent, const struct wined3d_parent_ops *parent_ops) +static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, struct wined3d_device *device, + struct wined3d_swapchain_desc *desc, void *parent, const struct wined3d_parent_ops *parent_ops) { const struct wined3d_adapter *adapter = device->adapter; const struct wined3d_format *format; @@ -849,20 +840,10 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, enum wined3d_ "Please configure the application to use double buffering (1 back buffer) if possible.\n"); } - switch (surface_type) - { - case WINED3D_SURFACE_TYPE_GDI: - swapchain->swapchain_ops = &swapchain_gdi_ops; - break; - - case WINED3D_SURFACE_TYPE_OPENGL: - swapchain->swapchain_ops = &swapchain_gl_ops; - break; - - default: - ERR("Invalid surface type %#x.\n", surface_type); - return WINED3DERR_INVALIDCALL; - } + if (device->wined3d->flags & WINED3D_NO3D) + swapchain->swapchain_ops = &swapchain_gdi_ops; + else + swapchain->swapchain_ops = &swapchain_gl_ops; window = desc->device_window ? desc->device_window : device->create_parms.focus_window; @@ -917,8 +898,9 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, enum wined3d_ goto err; } - surface_set_container(swapchain->front_buffer, WINED3D_CONTAINER_SWAPCHAIN, swapchain); - if (surface_type == WINED3D_SURFACE_TYPE_OPENGL) + if (swapchain->front_buffer->container.type == WINED3D_CONTAINER_NONE) + surface_set_container(swapchain->front_buffer, WINED3D_CONTAINER_SWAPCHAIN, swapchain); + if (!(device->wined3d->flags & WINED3D_NO3D)) surface_modify_location(swapchain->front_buffer, SFLAG_INDRAWABLE, TRUE); /* MSDN says we're only allowed a single fullscreen swapchain per device, @@ -944,7 +926,7 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, enum wined3d_ displaymode_set = TRUE; } - if (surface_type == WINED3D_SURFACE_TYPE_OPENGL) + if (!(device->wined3d->flags & WINED3D_NO3D)) { static const enum wined3d_format_id formats[] = { @@ -1025,13 +1007,13 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, enum wined3d_ WARN("Failed to create back buffer %u, hr %#x.\n", i, hr); goto err; } - - surface_set_container(swapchain->back_buffers[i], WINED3D_CONTAINER_SWAPCHAIN, swapchain); + if (swapchain->back_buffers[i]->container.type == WINED3D_CONTAINER_NONE) + surface_set_container(swapchain->back_buffers[i], WINED3D_CONTAINER_SWAPCHAIN, swapchain); } } /* Swapchains share the depth/stencil buffer, so only create a single depthstencil surface. */ - if (desc->enable_auto_depth_stencil && surface_type == WINED3D_SURFACE_TYPE_OPENGL) + if (desc->enable_auto_depth_stencil && !(device->wined3d->flags & WINED3D_NO3D)) { TRACE("Creating depth/stencil buffer.\n"); if (!device->auto_depth_stencil) @@ -1105,25 +1087,20 @@ err: } /* Do not call while under the GL lock. */ -HRESULT CDECL wined3d_swapchain_create(struct wined3d_device *device, - struct wined3d_swapchain_desc *desc, enum wined3d_surface_type surface_type, - void *parent, const struct wined3d_parent_ops *parent_ops, - struct wined3d_swapchain **swapchain) +HRESULT CDECL wined3d_swapchain_create(struct wined3d_device *device, struct wined3d_swapchain_desc *desc, + void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_swapchain **swapchain) { struct wined3d_swapchain *object; HRESULT hr; - TRACE("device %p, desc %p, swapchain %p, parent %p, surface_type %#x.\n", - device, desc, swapchain, parent, surface_type); + TRACE("device %p, desc %p, parent %p, parent_ops %p, swapchain %p.\n", + device, desc, parent, parent_ops, swapchain); object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate swapchain memory.\n"); return E_OUTOFMEMORY; - } - hr = swapchain_init(object, surface_type, device, desc, parent, parent_ops); + hr = swapchain_init(object, device, desc, parent, parent_ops); if (FAILED(hr)) { WARN("Failed to initialize swapchain, hr %#x.\n", hr); diff --git a/dll/directx/wine/wined3d/texture.c b/dll/directx/wine/wined3d/texture.c index 3d148fbf8aa..c025892d5c4 100644 --- a/dll/directx/wine/wined3d/texture.c +++ b/dll/directx/wine/wined3d/texture.c @@ -77,9 +77,7 @@ static HRESULT wined3d_texture_init(struct wined3d_texture *texture, const struc /* A GL context is provided by the caller */ static void gltexture_delete(const struct wined3d_gl_info *gl_info, struct gl_texture *tex) { - ENTER_GL(); gl_info->gl_ops.gl.p_glDeleteTextures(1, &tex->name); - LEAVE_GL(); tex->name = 0; } @@ -153,7 +151,6 @@ static HRESULT wined3d_texture_bind(struct wined3d_texture *texture, gl_tex = wined3d_texture_get_gl_texture(texture, context->gl_info, srgb); target = texture->target; - ENTER_GL(); /* Generate a texture name if we don't already have one. */ if (!gl_tex->name) { @@ -233,11 +230,10 @@ static HRESULT wined3d_texture_bind(struct wined3d_texture *texture, hr = WINED3DERR_INVALIDCALL; } - LEAVE_GL(); return hr; } -/* GL locking is done by the caller */ +/* Context activation is done by the caller. */ static void apply_wrap(const struct wined3d_gl_info *gl_info, GLenum target, enum wined3d_texture_address d3d_wrap, GLenum param, BOOL cond_np2) { @@ -261,7 +257,7 @@ static void apply_wrap(const struct wined3d_gl_info *gl_info, GLenum target, checkGLcall("glTexParameteri(target, param, gl_wrap)"); } -/* GL locking is done by the caller (state handler) */ +/* Context activation is done by the caller (state handler). */ void wined3d_texture_apply_state_changes(struct wined3d_texture *texture, const DWORD sampler_states[WINED3D_HIGHEST_SAMPLER_STATE + 1], const struct wined3d_gl_info *gl_info) @@ -628,7 +624,6 @@ static HRESULT texture2d_bind(struct wined3d_texture *texture, { GLenum target = texture->target; - ENTER_GL(); gl_info->gl_ops.gl.p_glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); checkGLcall("glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)"); gl_info->gl_ops.gl.p_glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); @@ -637,7 +632,6 @@ static HRESULT texture2d_bind(struct wined3d_texture *texture, checkGLcall("glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST)"); gl_info->gl_ops.gl.p_glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); checkGLcall("glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST)"); - LEAVE_GL(); gl_tex->states[WINED3DTEXSTA_ADDRESSU] = WINED3D_TADDRESS_CLAMP; gl_tex->states[WINED3DTEXSTA_ADDRESSV] = WINED3D_TADDRESS_CLAMP; gl_tex->states[WINED3DTEXSTA_MAGFILTER] = WINED3D_TEXF_POINT; @@ -720,7 +714,7 @@ static void texture2d_sub_resource_cleanup(struct wined3d_resource *sub_resource * surface doesn't try and release it. */ surface_set_texture_name(surface, 0, TRUE); surface_set_texture_name(surface, 0, FALSE); - surface_set_texture_target(surface, 0); + surface_set_texture_target(surface, 0, 0); surface_set_container(surface, WINED3D_CONTAINER_NONE, NULL); wined3d_surface_decref(surface); } @@ -859,8 +853,8 @@ static HRESULT cubetexture_init(struct wined3d_texture *texture, UINT edge_lengt UINT idx = j * texture->level_count + i; struct wined3d_surface *surface; - if (FAILED(hr = device->device_parent->ops->create_texture_surface(device->device_parent, parent, - tmp_w, tmp_w, format_id, usage, pool, i /* Level */, j, &surface))) + if (FAILED(hr = device->device_parent->ops->create_texture_surface(device->device_parent, + parent, tmp_w, tmp_w, format_id, usage, pool, idx, &surface))) { FIXME("(%p) Failed to create surface, hr %#x.\n", texture, hr); wined3d_texture_cleanup(texture); @@ -868,7 +862,7 @@ static HRESULT cubetexture_init(struct wined3d_texture *texture, UINT edge_lengt } surface_set_container(surface, WINED3D_CONTAINER_TEXTURE, texture); - surface_set_texture_target(surface, cube_targets[j]); + surface_set_texture_target(surface, cube_targets[j], i); texture->sub_resources[idx] = &surface->resource; TRACE("Created surface level %u @ %p.\n", i, surface); } @@ -1014,8 +1008,8 @@ static HRESULT texture_init(struct wined3d_texture *texture, UINT width, UINT he struct wined3d_surface *surface; /* Use the callback to create the texture surface. */ - if (FAILED(hr = device->device_parent->ops->create_texture_surface(device->device_parent, parent, - tmp_w, tmp_h, format->id, usage, pool, i, 0, &surface))) + if (FAILED(hr = device->device_parent->ops->create_texture_surface(device->device_parent, + parent, tmp_w, tmp_h, format->id, usage, pool, i, &surface))) { FIXME("Failed to create surface %p, hr %#x\n", texture, hr); wined3d_texture_cleanup(texture); @@ -1023,7 +1017,7 @@ static HRESULT texture_init(struct wined3d_texture *texture, UINT width, UINT he } surface_set_container(surface, WINED3D_CONTAINER_TEXTURE, texture); - surface_set_texture_target(surface, texture->target); + surface_set_texture_target(surface, texture->target, i); texture->sub_resources[i] = &surface->resource; TRACE("Created surface level %u @ %p.\n", i, surface); /* Calculate the next mipmap level. */ @@ -1257,7 +1251,6 @@ HRESULT CDECL wined3d_texture_create_2d(struct wined3d_device *device, UINT widt object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) { - ERR("Out of memory.\n"); *texture = NULL; return WINED3DERR_OUTOFVIDEOMEMORY; } @@ -1293,7 +1286,6 @@ HRESULT CDECL wined3d_texture_create_3d(struct wined3d_device *device, UINT widt object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) { - ERR("Out of memory\n"); *texture = NULL; return WINED3DERR_OUTOFVIDEOMEMORY; } @@ -1329,7 +1321,6 @@ HRESULT CDECL wined3d_texture_create_cube(struct wined3d_device *device, UINT ed object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) { - ERR("Out of memory\n"); *texture = NULL; return WINED3DERR_OUTOFVIDEOMEMORY; } diff --git a/dll/directx/wine/wined3d/utils.c b/dll/directx/wine/wined3d/utils.c index f2328c921ea..807ff02cba0 100644 --- a/dll/directx/wine/wined3d/utils.c +++ b/dll/directx/wine/wined3d/utils.c @@ -124,6 +124,7 @@ static const struct wined3d_format_channels formats[] = /* Vendor-specific formats */ {WINED3DFMT_ATI2N, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}, {WINED3DFMT_NVDB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {WINED3DFMT_INST, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {WINED3DFMT_INTZ, 0, 0, 0, 0, 0, 0, 0, 0, 4, 24, 8}, {WINED3DFMT_NVHU, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0}, {WINED3DFMT_NVHS, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0}, @@ -555,6 +556,29 @@ static void convert_s8_uint_d24_float(const BYTE *src, BYTE *dst, UINT pitch, UI } } +/* The following formats explicitly don't have WINED3DFMT_FLAG_TEXTURE set: + * + * These are never supported on native. + * WINED3DFMT_B8G8R8_UNORM + * WINED3DFMT_B2G3R3_UNORM + * WINED3DFMT_L4A4_UNORM + * WINED3DFMT_S1_UINT_D15_UNORM + * WINED3DFMT_S4X4_UINT_D24_UNORM + * + * Only some Geforce/Voodoo3/G400 cards offer 8-bit textures in case of ddraw. + * Since it is not widely available, don't offer it. Further no Windows driver + * offers WINED3DFMT_P8_UINT_A8_NORM, so don't offer it either. + * WINED3DFMT_P8_UINT + * WINED3DFMT_P8_UINT_A8_UNORM + * + * These formats seem to be similar to the HILO formats in + * GL_NV_texture_shader. NVHU is said to be GL_UNSIGNED_HILO16, + * NVHS GL_SIGNED_HILO16. Rumours say that D3D computes a 3rd channel + * similarly to D3DFMT_CxV8U8 (So NVHS could be called D3DFMT_CxV16U16). ATI + * refused to support formats which can easily be emulated with pixel shaders, + * so applications have to deal with not having NVHS and NVHU. + * WINED3DFMT_NVHU + * WINED3DFMT_NVHS */ static const struct wined3d_format_texture_info format_texture_info[] = { /* format id internal srgbInternal rtInternal @@ -573,16 +597,16 @@ static const struct wined3d_format_texture_info format_texture_info[] = WINED3DFMT_FLAG_FILTERING, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_UYVY, GL_RGB, GL_RGB, 0, - GL_YCBCR_422_APPLE, UNSIGNED_SHORT_8_8_APPLE, 0, - WINED3DFMT_FLAG_FILTERING, + GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, 0, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_FILTERING, APPLE_YCBCR_422, NULL}, {WINED3DFMT_YUY2, GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, 0, WINED3DFMT_FLAG_FILTERING, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_YUY2, GL_RGB, GL_RGB, 0, - GL_YCBCR_422_APPLE, UNSIGNED_SHORT_8_8_REV_APPLE, 0, - WINED3DFMT_FLAG_FILTERING, + GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_REV_APPLE, 0, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_FILTERING, APPLE_YCBCR_422, NULL}, {WINED3DFMT_YV12, GL_ALPHA, GL_ALPHA, 0, GL_ALPHA, GL_UNSIGNED_BYTE, 0, @@ -590,70 +614,71 @@ static const struct wined3d_format_texture_info format_texture_info[] = WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_DXT1, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_SRGB_READ - | WINED3DFMT_FLAG_COMPRESSED, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_SRGB_READ | WINED3DFMT_FLAG_COMPRESSED, EXT_TEXTURE_COMPRESSION_S3TC, NULL}, {WINED3DFMT_DXT2, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_SRGB_READ - | WINED3DFMT_FLAG_COMPRESSED, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_SRGB_READ | WINED3DFMT_FLAG_COMPRESSED, EXT_TEXTURE_COMPRESSION_S3TC, NULL}, {WINED3DFMT_DXT3, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_SRGB_READ - | WINED3DFMT_FLAG_COMPRESSED, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_SRGB_READ | WINED3DFMT_FLAG_COMPRESSED, EXT_TEXTURE_COMPRESSION_S3TC, NULL}, {WINED3DFMT_DXT4, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_SRGB_READ - | WINED3DFMT_FLAG_COMPRESSED, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_SRGB_READ | WINED3DFMT_FLAG_COMPRESSED, EXT_TEXTURE_COMPRESSION_S3TC, NULL}, {WINED3DFMT_DXT5, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_SRGB_READ - | WINED3DFMT_FLAG_COMPRESSED, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_SRGB_READ | WINED3DFMT_FLAG_COMPRESSED, EXT_TEXTURE_COMPRESSION_S3TC, NULL}, /* IEEE formats */ {WINED3DFMT_R32_FLOAT, GL_RGB32F_ARB, GL_RGB32F_ARB, 0, GL_RED, GL_FLOAT, 0, - WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, ARB_TEXTURE_FLOAT, NULL}, {WINED3DFMT_R32_FLOAT, GL_R32F, GL_R32F, 0, GL_RED, GL_FLOAT, 0, - WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, ARB_TEXTURE_RG, NULL}, {WINED3DFMT_R32G32_FLOAT, GL_RGB32F_ARB, GL_RGB32F_ARB, 0, GL_RGB, GL_FLOAT, 12, - WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, ARB_TEXTURE_FLOAT, convert_r32g32_float}, {WINED3DFMT_R32G32_FLOAT, GL_RG32F, GL_RG32F, 0, GL_RG, GL_FLOAT, 0, - WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, ARB_TEXTURE_RG, NULL}, {WINED3DFMT_R32G32B32A32_FLOAT, GL_RGBA32F_ARB, GL_RGBA32F_ARB, 0, GL_RGBA, GL_FLOAT, 0, - WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, ARB_TEXTURE_FLOAT, NULL}, /* Float */ {WINED3DFMT_R16_FLOAT, GL_RGB16F_ARB, GL_RGB16F_ARB, 0, GL_RED, GL_HALF_FLOAT_ARB, 0, - WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, ARB_TEXTURE_FLOAT, NULL}, {WINED3DFMT_R16_FLOAT, GL_R16F, GL_R16F, 0, GL_RED, GL_HALF_FLOAT_ARB, 0, - WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, ARB_TEXTURE_RG, NULL}, {WINED3DFMT_R16G16_FLOAT, GL_RGB16F_ARB, GL_RGB16F_ARB, 0, GL_RGB, GL_HALF_FLOAT_ARB, 6, - WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, ARB_TEXTURE_FLOAT, convert_r16g16}, {WINED3DFMT_R16G16_FLOAT, GL_RG16F, GL_RG16F, 0, GL_RG, GL_HALF_FLOAT_ARB, 0, - WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, ARB_TEXTURE_RG, NULL}, {WINED3DFMT_R16G16B16A16_FLOAT, GL_RGBA16F_ARB, GL_RGBA16F_ARB, 0, GL_RGBA, GL_HALF_FLOAT_ARB, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_VTF, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_RENDERTARGET + | WINED3DFMT_FLAG_VTF, ARB_TEXTURE_FLOAT, NULL}, /* Palettized formats */ {WINED3DFMT_P8_UINT, GL_RGBA, GL_RGBA, 0, @@ -671,29 +696,32 @@ static const struct wined3d_format_texture_info format_texture_info[] = WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_B8G8R8A8_UNORM, GL_RGBA8, GL_SRGB8_ALPHA8_EXT, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_RENDERTARGET - | WINED3DFMT_FLAG_SRGB_READ | WINED3DFMT_FLAG_SRGB_WRITE | WINED3DFMT_FLAG_VTF, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_SRGB_READ | WINED3DFMT_FLAG_SRGB_WRITE + | WINED3DFMT_FLAG_VTF, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_B8G8R8X8_UNORM, GL_RGB8, GL_SRGB8_EXT, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_RENDERTARGET - | WINED3DFMT_FLAG_SRGB_READ | WINED3DFMT_FLAG_SRGB_WRITE, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_RENDERTARGET | WINED3DFMT_FLAG_SRGB_READ | WINED3DFMT_FLAG_SRGB_WRITE, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_B5G6R5_UNORM, GL_RGB5, GL_RGB5, GL_RGB8, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_RENDERTARGET, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_RENDERTARGET, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_B5G5R5X1_UNORM, GL_RGB5, GL_RGB5_A1, 0, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_B5G5R5A1_UNORM, GL_RGB5_A1, GL_RGB5_A1, 0, GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_B4G4R4A4_UNORM, GL_RGBA4, GL_SRGB8_ALPHA8_EXT, 0, GL_BGRA, GL_UNSIGNED_SHORT_4_4_4_4_REV, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_SRGB_READ, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_SRGB_READ, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_B2G3R3_UNORM, GL_R3_G3_B2, GL_R3_G3_B2, 0, GL_RGB, GL_UNSIGNED_BYTE_3_3_2, 0, @@ -701,48 +729,54 @@ static const struct wined3d_format_texture_info format_texture_info[] = WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_A8_UNORM, GL_ALPHA8, GL_ALPHA8, 0, GL_ALPHA, GL_UNSIGNED_BYTE, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_B4G4R4X4_UNORM, GL_RGB4, GL_RGB4, 0, GL_BGRA, GL_UNSIGNED_SHORT_4_4_4_4_REV, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_R10G10B10A2_UNORM, GL_RGB10_A2, GL_RGB10_A2, 0, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_RENDERTARGET, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_RENDERTARGET, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_R8G8B8A8_UNORM, GL_RGBA8, GL_RGBA8, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_R8G8B8X8_UNORM, GL_RGB8, GL_RGB8, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_R16G16_UNORM, GL_RGB16, GL_RGB16, GL_RGBA16, GL_RGB, GL_UNSIGNED_SHORT, 6, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING, WINED3D_GL_EXT_NONE, convert_r16g16}, {WINED3DFMT_R16G16_UNORM, GL_RG16, GL_RG16, 0, GL_RG, GL_UNSIGNED_SHORT, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_RENDERTARGET, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_RENDERTARGET, ARB_TEXTURE_RG, NULL}, {WINED3DFMT_B10G10R10A2_UNORM, GL_RGB10_A2, GL_RGB10_A2, 0, GL_BGRA, GL_UNSIGNED_INT_2_10_10_10_REV, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_RENDERTARGET, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_RENDERTARGET, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_R16G16B16A16_UNORM, GL_RGBA16, GL_RGBA16, 0, GL_RGBA, GL_UNSIGNED_SHORT, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_RENDERTARGET, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_RENDERTARGET, WINED3D_GL_EXT_NONE, NULL}, /* Luminance */ {WINED3DFMT_L8_UNORM, GL_LUMINANCE8, GL_SLUMINANCE8_EXT, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_SRGB_READ, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_SRGB_READ, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_L8A8_UNORM, GL_LUMINANCE8_ALPHA8, GL_SLUMINANCE8_ALPHA8_EXT, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_SRGB_READ, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_SRGB_READ, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_L4A4_UNORM, GL_LUMINANCE4_ALPHA4, GL_LUMINANCE4_ALPHA4, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, 2, @@ -751,52 +785,62 @@ static const struct wined3d_format_texture_info format_texture_info[] = /* Bump mapping stuff */ {WINED3DFMT_R8G8_SNORM, GL_RGB8, GL_RGB8, 0, GL_BGR, GL_UNSIGNED_BYTE, 3, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_BUMPMAP, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_BUMPMAP, WINED3D_GL_EXT_NONE, convert_r8g8_snorm}, {WINED3DFMT_R8G8_SNORM, GL_DSDT8_NV, GL_DSDT8_NV, 0, GL_DSDT_NV, GL_BYTE, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_BUMPMAP, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_BUMPMAP, NV_TEXTURE_SHADER, NULL}, {WINED3DFMT_R5G5_SNORM_L6_UNORM, GL_RGB5, GL_RGB5, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, 2, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_BUMPMAP, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_BUMPMAP, WINED3D_GL_EXT_NONE, convert_r5g5_snorm_l6_unorm}, {WINED3DFMT_R5G5_SNORM_L6_UNORM, GL_DSDT8_MAG8_NV, GL_DSDT8_MAG8_NV, 0, GL_DSDT_MAG_NV, GL_BYTE, 3, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_BUMPMAP, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_BUMPMAP, NV_TEXTURE_SHADER, convert_r5g5_snorm_l6_unorm_nv}, {WINED3DFMT_R8G8_SNORM_L8X8_UNORM, GL_RGB8, GL_RGB8, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, 4, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_BUMPMAP, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_BUMPMAP, WINED3D_GL_EXT_NONE, convert_r8g8_snorm_l8x8_unorm}, {WINED3DFMT_R8G8_SNORM_L8X8_UNORM, GL_DSDT8_MAG8_INTENSITY8_NV, GL_DSDT8_MAG8_INTENSITY8_NV, 0, GL_DSDT_MAG_VIB_NV, GL_UNSIGNED_INT_8_8_S8_S8_REV_NV, 4, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_BUMPMAP, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_BUMPMAP, NV_TEXTURE_SHADER, convert_r8g8_snorm_l8x8_unorm_nv}, {WINED3DFMT_R8G8B8A8_SNORM, GL_RGBA8, GL_RGBA8, 0, GL_BGRA, GL_UNSIGNED_BYTE, 4, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_BUMPMAP, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_BUMPMAP, WINED3D_GL_EXT_NONE, convert_r8g8b8a8_snorm}, {WINED3DFMT_R8G8B8A8_SNORM, GL_SIGNED_RGBA8_NV, GL_SIGNED_RGBA8_NV, 0, GL_RGBA, GL_BYTE, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_BUMPMAP, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_BUMPMAP, NV_TEXTURE_SHADER, NULL}, {WINED3DFMT_R16G16_SNORM, GL_RGB16, GL_RGB16, 0, GL_BGR, GL_UNSIGNED_SHORT, 6, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_BUMPMAP, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_BUMPMAP, WINED3D_GL_EXT_NONE, convert_r16g16_snorm}, {WINED3DFMT_R16G16_SNORM, GL_SIGNED_HILO16_NV, GL_SIGNED_HILO16_NV, 0, GL_HILO_NV, GL_SHORT, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_BUMPMAP, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_BUMPMAP, NV_TEXTURE_SHADER, NULL}, /* Depth stencil formats */ {WINED3DFMT_D16_LOCKABLE, GL_DEPTH_COMPONENT24_ARB, GL_DEPTH_COMPONENT24_ARB, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, 0, - WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_SHADOW, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_SHADOW, ARB_DEPTH_TEXTURE, NULL}, {WINED3DFMT_D32_UNORM, GL_DEPTH_COMPONENT32_ARB, GL_DEPTH_COMPONENT32_ARB, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0, - WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_SHADOW, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_SHADOW, ARB_DEPTH_TEXTURE, NULL}, {WINED3DFMT_S1_UINT_D15_UNORM, GL_DEPTH_COMPONENT24_ARB, GL_DEPTH_COMPONENT24_ARB, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, 0, @@ -812,23 +856,23 @@ static const struct wined3d_format_texture_info format_texture_info[] = ARB_FRAMEBUFFER_OBJECT, convert_s1_uint_d15_unorm}, {WINED3DFMT_D24_UNORM_S8_UINT, GL_DEPTH_COMPONENT24_ARB, GL_DEPTH_COMPONENT24_ARB, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_DEPTH - | WINED3DFMT_FLAG_SHADOW, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_SHADOW, ARB_DEPTH_TEXTURE, NULL}, {WINED3DFMT_D24_UNORM_S8_UINT, GL_DEPTH24_STENCIL8_EXT, GL_DEPTH24_STENCIL8_EXT, 0, GL_DEPTH_STENCIL_EXT, GL_UNSIGNED_INT_24_8_EXT, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_DEPTH - | WINED3DFMT_FLAG_STENCIL | WINED3DFMT_FLAG_SHADOW, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL | WINED3DFMT_FLAG_SHADOW, EXT_PACKED_DEPTH_STENCIL, NULL}, {WINED3DFMT_D24_UNORM_S8_UINT, GL_DEPTH24_STENCIL8, GL_DEPTH24_STENCIL8, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_DEPTH - | WINED3DFMT_FLAG_STENCIL | WINED3DFMT_FLAG_SHADOW, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL | WINED3DFMT_FLAG_SHADOW, ARB_FRAMEBUFFER_OBJECT, NULL}, {WINED3DFMT_X8D24_UNORM, GL_DEPTH_COMPONENT24_ARB, GL_DEPTH_COMPONENT24_ARB, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_DEPTH - | WINED3DFMT_FLAG_SHADOW, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_SHADOW, ARB_DEPTH_TEXTURE, NULL}, {WINED3DFMT_S4X4_UINT_D24_UNORM, GL_DEPTH_COMPONENT24_ARB, GL_DEPTH_COMPONENT24_ARB, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0, @@ -844,43 +888,45 @@ static const struct wined3d_format_texture_info format_texture_info[] = ARB_FRAMEBUFFER_OBJECT, convert_s4x4_uint_d24_unorm}, {WINED3DFMT_D16_UNORM, GL_DEPTH_COMPONENT24_ARB, GL_DEPTH_COMPONENT24_ARB, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_DEPTH - | WINED3DFMT_FLAG_SHADOW, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_SHADOW, ARB_DEPTH_TEXTURE, NULL}, {WINED3DFMT_L16_UNORM, GL_LUMINANCE16, GL_LUMINANCE16, 0, GL_LUMINANCE, GL_UNSIGNED_SHORT, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING, WINED3D_GL_EXT_NONE, NULL}, {WINED3DFMT_D32_FLOAT, GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT32F, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0, - WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_SHADOW, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_SHADOW, ARB_DEPTH_BUFFER_FLOAT, NULL}, {WINED3DFMT_S8_UINT_D24_FLOAT, GL_DEPTH32F_STENCIL8, GL_DEPTH32F_STENCIL8, 0, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, 8, - WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL | WINED3DFMT_FLAG_SHADOW, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL | WINED3DFMT_FLAG_SHADOW, ARB_DEPTH_BUFFER_FLOAT, convert_s8_uint_d24_float}, /* Vendor-specific formats */ {WINED3DFMT_ATI2N, GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI, GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_COMPRESSED, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_COMPRESSED, ATI_TEXTURE_COMPRESSION_3DC, NULL}, - {WINED3DFMT_ATI2N, GL_COMPRESSED_RED_GREEN_RGTC2, GL_COMPRESSED_RED_GREEN_RGTC2, 0, + {WINED3DFMT_ATI2N, GL_COMPRESSED_RG_RGTC2, GL_COMPRESSED_RG_RGTC2, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_COMPRESSED, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_COMPRESSED, ARB_TEXTURE_COMPRESSION_RGTC, NULL}, {WINED3DFMT_INTZ, GL_DEPTH24_STENCIL8_EXT, GL_DEPTH24_STENCIL8_EXT, 0, GL_DEPTH_STENCIL_EXT, GL_UNSIGNED_INT_24_8_EXT, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_DEPTH - | WINED3DFMT_FLAG_STENCIL, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL, EXT_PACKED_DEPTH_STENCIL, NULL}, {WINED3DFMT_INTZ, GL_DEPTH24_STENCIL8, GL_DEPTH24_STENCIL8, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, 0, - WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_DEPTH - | WINED3DFMT_FLAG_STENCIL, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING + | WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL, ARB_FRAMEBUFFER_OBJECT, NULL}, {WINED3DFMT_NULL, GL_RGBA8, GL_RGBA8, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, 0, - WINED3DFMT_FLAG_RENDERTARGET, + WINED3DFMT_FLAG_TEXTURE | WINED3DFMT_FLAG_RENDERTARGET, ARB_FRAMEBUFFER_OBJECT, NULL}, }; @@ -991,8 +1037,6 @@ static void check_fbo_compat(const struct wined3d_gl_info *gl_info, struct wined GLenum status; GLuint tex; - ENTER_GL(); - while (gl_info->gl_ops.gl.p_glGetError()); gl_info->gl_ops.gl.p_glDisable(GL_BLEND); @@ -1070,10 +1114,10 @@ static void check_fbo_compat(const struct wined3d_gl_info *gl_info, struct wined && format->glFormat != GL_LUMINANCE && format->glFormat != GL_LUMINANCE_ALPHA && (format->red_size || format->alpha_size)) { - GLuint rb, tex2; DWORD readback[16 * 16], color, r_range, a_range; BYTE r, a; BOOL match = TRUE; + GLuint rb; if (gl_info->supported[ARB_FRAMEBUFFER_OBJECT] || gl_info->supported[EXT_PACKED_DEPTH_STENCIL]) @@ -1127,10 +1171,9 @@ static void check_fbo_compat(const struct wined3d_gl_info *gl_info, struct wined gl_info->gl_ops.gl.p_glEnd(); gl_info->gl_ops.gl.p_glDisable(GL_BLEND); - gl_info->gl_ops.gl.p_glGenTextures(1, &tex2); - gl_info->gl_ops.gl.p_glBindTexture(GL_TEXTURE_2D, tex2); - gl_info->gl_ops.gl.p_glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, 16, 16, 0); + /* Rebinding texture to workaround a fglrx bug. */ + gl_info->gl_ops.gl.p_glBindTexture(GL_TEXTURE_2D, tex); gl_info->gl_ops.gl.p_glGetTexImage(GL_TEXTURE_2D, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, readback); checkGLcall("Post-pixelshader blending check"); @@ -1138,9 +1181,9 @@ static void check_fbo_compat(const struct wined3d_gl_info *gl_info, struct wined a = color >> 24; r = (color & 0x00ff0000) >> 16; - r_range = format->red_size < 8 ? 1 << (8 - format->red_size - 1) : 1; - a_range = format->alpha_size < 8 ? 1 << (8 - format->alpha_size - 1) : 1; - if (format->red_size && (r < 0x80 - r_range || r > 0x80 + r_range)) + r_range = format->red_size < 8 ? 1 << (8 - format->red_size) : 1; + a_range = format->alpha_size < 8 ? 1 << (8 - format->alpha_size) : 1; + if (format->red_size && (r < 0x7f - r_range || r > 0x7f + r_range)) match = FALSE; else if (format->alpha_size > 1 && (a < 0xbf - a_range || a > 0xbf + a_range)) match = FALSE; @@ -1156,9 +1199,6 @@ static void check_fbo_compat(const struct wined3d_gl_info *gl_info, struct wined TRACE("Color output: %#x\n", color); format->flags |= WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING; } - - gl_info->gl_ops.gl.p_glBindTexture(GL_TEXTURE_2D, tex); - gl_info->gl_ops.gl.p_glDeleteTextures(1, &tex2); } if (gl_info->supported[ARB_FRAMEBUFFER_OBJECT] @@ -1194,8 +1234,6 @@ static void check_fbo_compat(const struct wined3d_gl_info *gl_info, struct wined format->flags |= WINED3DFMT_FLAG_FBO_ATTACHABLE_SRGB; gl_info->gl_ops.gl.p_glDeleteTextures(1, &tex); - - LEAVE_GL(); } /* Context activation is done by the caller. */ @@ -1206,14 +1244,10 @@ static void init_format_fbo_compat_info(struct wined3d_gl_info *gl_info) if (wined3d_settings.offscreen_rendering_mode == ORM_FBO) { - ENTER_GL(); - gl_info->fbo_ops.glGenFramebuffers(1, &fbo); gl_info->fbo_ops.glBindFramebuffer(GL_FRAMEBUFFER, fbo); gl_info->gl_ops.gl.p_glDrawBuffer(GL_COLOR_ATTACHMENT0); gl_info->gl_ops.gl.p_glReadBuffer(GL_COLOR_ATTACHMENT0); - - LEAVE_GL(); } for (i = 0; i < sizeof(formats) / sizeof(*formats); ++i) @@ -1248,19 +1282,21 @@ static void init_format_fbo_compat_info(struct wined3d_gl_info *gl_info) } if (wined3d_settings.offscreen_rendering_mode == ORM_FBO) - { - ENTER_GL(); - gl_info->fbo_ops.glDeleteFramebuffers(1, &fbo); - - LEAVE_GL(); - } } -static BOOL init_format_texture_info(struct wined3d_gl_info *gl_info) +static BOOL init_format_texture_info(struct wined3d_adapter *adapter, struct wined3d_gl_info *gl_info) { + struct fragment_caps fragment_caps; + struct shader_caps shader_caps; + BOOL srgb_write; unsigned int i; + adapter->fragment_pipe->get_caps(gl_info, &fragment_caps); + adapter->shader_backend->shader_get_caps(gl_info, &shader_caps); + srgb_write = (fragment_caps.wined3d_caps & WINED3D_FRAGMENT_CAP_SRGB_WRITE) + && (shader_caps.wined3d_caps & WINED3D_SHADER_CAP_SRGB_WRITE); + for (i = 0; i < sizeof(format_texture_info) / sizeof(*format_texture_info); ++i) { int fmt_idx = getFmtIdx(format_texture_info[i].id); @@ -1293,6 +1329,14 @@ static BOOL init_format_texture_info(struct wined3d_gl_info *gl_info) format->height_scale.numerator = 1; format->height_scale.denominator = 1; + if (!gl_info->limits.vertex_samplers) + format->flags &= ~WINED3DFMT_FLAG_VTF; + + if (!(gl_info->quirks & WINED3D_QUIRK_LIMITED_TEX_FILTERING)) + format->flags |= WINED3DFMT_FLAG_FILTERING; + else if (format->id != WINED3DFMT_R32G32B32A32_FLOAT && format->id != WINED3DFMT_R32_FLOAT) + format->flags &= ~WINED3DFMT_FLAG_VTF; + if (format->glGammaInternal != format->glInternal) { /* Filter sRGB capabilities if EXT_texture_sRGB is not supported. */ @@ -1307,6 +1351,9 @@ static BOOL init_format_texture_info(struct wined3d_gl_info *gl_info) } } + if ((format->flags & WINED3DFMT_FLAG_SRGB_WRITE) && !srgb_write) + format->flags &= ~WINED3DFMT_FLAG_SRGB_WRITE; + /* Texture conversion stuff */ format->convert = format_texture_info[i].convert; format->conv_byte_count = format_texture_info[i].conv_byte_count; @@ -1345,7 +1392,6 @@ static BOOL check_filter(const struct wined3d_gl_info *gl_info, GLenum internal) * than Wine. The Linux binary <= r500 driver is not maintained any more anyway */ - ENTER_GL(); while (gl_info->gl_ops.gl.p_glGetError()); gl_info->gl_ops.gl.p_glGenTextures(1, &buffer); @@ -1423,7 +1469,7 @@ static BOOL check_filter(const struct wined3d_gl_info *gl_info, GLenum internal) FIXME("Error during filtering test for format %x, returning no filtering\n", internal); ret = FALSE; } - LEAVE_GL(); + return ret; } @@ -1488,8 +1534,9 @@ static void init_format_filter_info(struct wined3d_gl_info *gl_info, enum wined3 } } -static void apply_format_fixups(struct wined3d_gl_info *gl_info) +static void apply_format_fixups(struct wined3d_adapter *adapter, struct wined3d_gl_info *gl_info) { + unsigned int i; int idx; idx = getFmtIdx(WINED3DFMT_R16_FLOAT); @@ -1615,6 +1662,67 @@ static void apply_format_fixups(struct wined3d_gl_info *gl_info) idx = getFmtIdx(WINED3DFMT_R16G16B16A16_FLOAT); gl_info->formats[idx].gl_vtx_type = GL_HALF_FLOAT; } + + if (!gl_info->supported[ARB_HALF_FLOAT_PIXEL]) + { + idx = getFmtIdx(WINED3DFMT_R16_FLOAT); + gl_info->formats[idx].flags &= ~WINED3DFMT_FLAG_TEXTURE; + + idx = getFmtIdx(WINED3DFMT_R16G16_FLOAT); + gl_info->formats[idx].flags &= ~WINED3DFMT_FLAG_TEXTURE; + + idx = getFmtIdx(WINED3DFMT_R16G16B16A16_FLOAT); + gl_info->formats[idx].flags &= ~WINED3DFMT_FLAG_TEXTURE; + } + + if (gl_info->quirks & WINED3D_QUIRK_BROKEN_RGBA16) + { + idx = getFmtIdx(WINED3DFMT_R16G16B16A16_UNORM); + gl_info->formats[idx].flags &= ~WINED3DFMT_FLAG_TEXTURE; + } + + /* ATI instancing hack: Although ATI cards do not support Shader Model + * 3.0, they support instancing. To query if the card supports instancing + * CheckDeviceFormat() with the special format MAKEFOURCC('I','N','S','T') + * is used. Should an application check for this, provide a proper return + * value. We can do instancing with all shader versions, but we need + * vertex shaders. + * + * Additionally applications have to set the D3DRS_POINTSIZE render state + * to MAKEFOURCC('I','N','S','T') once to enable instancing. Wined3d + * doesn't need that and just ignores it. + * + * With Shader Model 3.0 capable cards Instancing 'just works' in Windows. */ + /* FIXME: This should just check the shader backend caps. */ + if (gl_info->supported[ARB_VERTEX_PROGRAM] || gl_info->supported[ARB_VERTEX_SHADER]) + { + idx = getFmtIdx(WINED3DFMT_INST); + gl_info->formats[idx].flags |= WINED3DFMT_FLAG_TEXTURE; + } + + /* Depth bound test. To query if the card supports it CheckDeviceFormat() + * with the special format MAKEFOURCC('N','V','D','B') is used. It is + * enabled by setting D3DRS_ADAPTIVETESS_X render state to + * MAKEFOURCC('N','V','D','B') and then controlled by setting + * D3DRS_ADAPTIVETESS_Z (zMin) and D3DRS_ADAPTIVETESS_W (zMax) to test + * value. */ + if (gl_info->supported[EXT_DEPTH_BOUNDS_TEST]) + { + idx = getFmtIdx(WINED3DFMT_NVDB); + gl_info->formats[idx].flags |= WINED3DFMT_FLAG_TEXTURE; + } + + for (i = 0; i < sizeof(formats) / sizeof(*formats); ++i) + { + struct wined3d_format *format = &gl_info->formats[idx]; + + if (!(format->flags & WINED3DFMT_FLAG_TEXTURE)) + continue; + + if (!adapter->shader_backend->shader_color_fixup_supported(format->color_fixup) + || !adapter->fragment_pipe->color_fixup_supported(format->color_fixup)) + format->flags &= ~WINED3DFMT_FLAG_TEXTURE; + } } static BOOL init_format_vertex_info(struct wined3d_gl_info *gl_info) @@ -1660,17 +1768,19 @@ BOOL initPixelFormatsNoGL(struct wined3d_gl_info *gl_info) } /* Context activation is done by the caller. */ -BOOL initPixelFormats(struct wined3d_gl_info *gl_info, enum wined3d_pci_vendor vendor) +BOOL wined3d_adapter_init_format_info(struct wined3d_adapter *adapter) { + struct wined3d_gl_info *gl_info = &adapter->gl_info; + if (!init_format_base_info(gl_info)) return FALSE; if (!init_format_block_info(gl_info)) goto fail; - if (!init_format_texture_info(gl_info)) goto fail; + if (!init_format_texture_info(adapter, gl_info)) goto fail; if (!init_format_vertex_info(gl_info)) goto fail; - apply_format_fixups(gl_info); + apply_format_fixups(adapter, gl_info); init_format_fbo_compat_info(gl_info); - init_format_filter_info(gl_info, vendor); + init_format_filter_info(gl_info, adapter->driver_info.vendor); return TRUE; @@ -2335,6 +2445,8 @@ const char *debug_d3dstate(DWORD state) return "STATE_VDECL"; if (STATE_IS_VSHADER(state)) return "STATE_VSHADER"; + if (STATE_IS_GEOMETRY_SHADER(state)) + return "STATE_GEOMETRY_SHADER"; if (STATE_IS_VIEWPORT(state)) return "STATE_VIEWPORT"; if (STATE_IS_VERTEXSHADERCONSTANT(state)) @@ -2415,29 +2527,6 @@ const char *debug_glerror(GLenum error) { } } -const char *debug_d3dbasis(enum wined3d_basis_type basis) -{ - switch (basis) - { - case WINED3D_BASIS_BEZIER: return "WINED3D_BASIS_BEZIER"; - case WINED3D_BASIS_BSPLINE: return "WINED3D_BASIS_BSPLINE"; - case WINED3D_BASIS_INTERPOLATE: return "WINED3D_BASIS_INTERPOLATE"; - default: return "unrecognized"; - } -} - -const char *debug_d3ddegree(enum wined3d_degree_type degree) -{ - switch (degree) - { - case WINED3D_DEGREE_LINEAR: return "WINED3D_DEGREE_LINEAR"; - case WINED3D_DEGREE_QUADRATIC: return "WINED3D_DEGREE_QUADRATIC"; - case WINED3D_DEGREE_CUBIC: return "WINED3D_DEGREE_CUBIC"; - case WINED3D_DEGREE_QUINTIC: return "WINED3D_DEGREE_QUINTIC"; - default: return "unrecognized"; - } -} - static const char *debug_fixup_channel_source(enum fixup_channel_source source) { switch(source) @@ -2522,8 +2611,8 @@ BOOL is_invalid_op(const struct wined3d_state *state, int stage, return FALSE; } -/* Setup this textures matrix according to the texture flags*/ -/* GL locking is done by the caller (state handler) */ +/* Setup this textures matrix according to the texture flags. */ +/* Context activation is done by the caller (state handler). */ void set_texture_matrix(const struct wined3d_gl_info *gl_info, const float *smat, DWORD flags, BOOL calculatedCoords, BOOL transformed, enum wined3d_format_id vtx_fmt, BOOL ffp_proj_control) { @@ -3172,11 +3261,10 @@ void add_ffp_frag_shader(struct wine_rb_tree *shaders, struct ffp_frag_desc *des } } -/* Activates the texture dimension according to the bound D3D texture. - * Does not care for the colorop or correct gl texture unit(when using nvrc) - * Requires the caller to activate the correct unit before - */ -/* GL locking is done by the caller (state handler) */ +/* Activates the texture dimension according to the bound D3D texture. Does + * not care for the colorop or correct gl texture unit (when using nvrc). + * Requires the caller to activate the correct unit. */ +/* Context activation is done by the caller (state handler). */ void texture_activate_dimensions(const struct wined3d_texture *texture, const struct wined3d_gl_info *gl_info) { if (texture) @@ -3263,7 +3351,7 @@ void texture_activate_dimensions(const struct wined3d_texture *texture, const st } } -/* GL locking is done by the caller (state handler) */ +/* Context activation is done by the caller (state handler). */ void sampler_texdim(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { DWORD sampler = state_id - STATE_SAMPLER(0); @@ -3339,31 +3427,6 @@ UINT wined3d_log2i(UINT32 x) return (i = x >> 16) ? (x = i >> 8) ? l[x] + 24 : l[i] + 16 : (i = x >> 8) ? l[i] + 8 : l[x]; } -/* Set the shader type for this device, depending on the given capabilities - * and the user preferences in wined3d_settings. */ -void select_shader_mode(const struct wined3d_gl_info *gl_info, int *ps_selected, int *vs_selected) -{ - BOOL glsl = wined3d_settings.glslRequested && gl_info->glsl_version >= MAKEDWORD_VERSION(1, 20); - - if (wined3d_settings.vs_mode == VS_NONE) *vs_selected = SHADER_NONE; - else if (gl_info->supported[ARB_VERTEX_SHADER] && glsl) - { - /* Geforce4 cards support GLSL but for vertex shaders only. Further its reported GLSL caps are - * wrong. This combined with the fact that glsl won't offer more features or performance, use ARB - * shaders only on this card. */ - if (gl_info->supported[NV_VERTEX_PROGRAM] && !gl_info->supported[NV_VERTEX_PROGRAM2]) *vs_selected = SHADER_ARB; - else *vs_selected = SHADER_GLSL; - } - else if (gl_info->supported[ARB_VERTEX_PROGRAM]) *vs_selected = SHADER_ARB; - else *vs_selected = SHADER_NONE; - - if (wined3d_settings.ps_mode == PS_NONE) *ps_selected = SHADER_NONE; - else if (gl_info->supported[ARB_FRAGMENT_SHADER] && glsl) *ps_selected = SHADER_GLSL; - else if (gl_info->supported[ARB_FRAGMENT_PROGRAM]) *ps_selected = SHADER_ARB; - else if (gl_info->supported[ATI_FRAGMENT_SHADER]) *ps_selected = SHADER_ATI; - else *ps_selected = SHADER_NONE; -} - const struct blit_shader *wined3d_select_blitter(const struct wined3d_gl_info *gl_info, enum wined3d_blit_op blit_op, const RECT *src_rect, DWORD src_usage, enum wined3d_pool src_pool, const struct wined3d_format *src_format, const RECT *dst_rect, DWORD dst_usage, enum wined3d_pool dst_pool, const struct wined3d_format *dst_format) diff --git a/dll/directx/wine/wined3d/vertexdeclaration.c b/dll/directx/wine/wined3d/vertexdeclaration.c index 2e47bcd95ad..af1d78a7f36 100644 --- a/dll/directx/wine/wined3d/vertexdeclaration.c +++ b/dll/directx/wine/wined3d/vertexdeclaration.c @@ -252,10 +252,7 @@ HRESULT CDECL wined3d_vertex_declaration_create(struct wined3d_device *device, object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if(!object) - { - ERR("Failed to allocate vertex declaration memory.\n"); return E_OUTOFMEMORY; - } hr = vertexdeclaration_init(object, device, elements, element_count, parent, parent_ops); if (FAILED(hr)) diff --git a/dll/directx/wine/wined3d/view.c b/dll/directx/wine/wined3d/view.c index 3d06208052d..ef0896e8757 100644 --- a/dll/directx/wine/wined3d/view.c +++ b/dll/directx/wine/wined3d/view.c @@ -77,10 +77,7 @@ HRESULT CDECL wined3d_rendertarget_view_create(struct wined3d_resource *resource object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) - { - ERR("Failed to allocate memory\n"); return E_OUTOFMEMORY; - } wined3d_rendertarget_view_init(object, resource, parent); diff --git a/dll/directx/wine/wined3d/volume.c b/dll/directx/wine/wined3d/volume.c index ad38d5e2e67..7de40bc08c9 100644 --- a/dll/directx/wine/wined3d/volume.c +++ b/dll/directx/wine/wined3d/volume.c @@ -88,12 +88,10 @@ void volume_load(const struct wined3d_volume *volume, struct wined3d_context *co volume_bind_and_dirtify(volume, context); - ENTER_GL(); GL_EXTCALL(glTexImage3DEXT(GL_TEXTURE_3D, level, format->glInternal, volume->resource.width, volume->resource.height, volume->resource.depth, 0, format->glFormat, format->glType, volume->resource.allocatedMemory)); checkGLcall("glTexImage3D"); - LEAVE_GL(); /* When adding code releasing volume->resource.allocatedMemory to save * data keep in mind that GL_UNPACK_CLIENT_STORAGE_APPLE is enabled by @@ -314,7 +312,6 @@ HRESULT CDECL wined3d_volume_create(struct wined3d_device *device, UINT width, U object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) { - ERR("Out of memory\n"); *volume = NULL; return WINED3DERR_OUTOFVIDEOMEMORY; } diff --git a/dll/directx/wine/wined3d/wined3d.spec b/dll/directx/wine/wined3d/wined3d.spec index eed1174605c..0f7e70313fd 100644 --- a/dll/directx/wine/wined3d/wined3d.spec +++ b/dll/directx/wine/wined3d/wined3d.spec @@ -2,7 +2,7 @@ @ stdcall wined3d_mutex_unlock() @ cdecl wined3d_check_depth_stencil_match(ptr long long long long long) -@ cdecl wined3d_check_device_format(ptr long long long long long long long) +@ cdecl wined3d_check_device_format(ptr long long long long long long) @ cdecl wined3d_check_device_format_conversion(ptr long long long long) @ cdecl wined3d_check_device_multisample_type(ptr long long long long long ptr) @ cdecl wined3d_check_device_type(ptr long long long long long) @@ -41,15 +41,9 @@ @ cdecl wined3d_device_color_fill(ptr ptr ptr ptr) @ cdecl wined3d_device_create(ptr long long ptr long long ptr ptr) @ cdecl wined3d_device_decref(ptr) -@ cdecl wined3d_device_delete_patch(ptr long) @ cdecl wined3d_device_draw_indexed_primitive(ptr long long) -@ cdecl wined3d_device_draw_indexed_primitive_strided(ptr long ptr long ptr long) -@ cdecl wined3d_device_draw_indexed_primitive_up(ptr long ptr long ptr long) +@ cdecl wined3d_device_draw_indexed_primitive_instanced(ptr long long long long) @ cdecl wined3d_device_draw_primitive(ptr long long) -@ cdecl wined3d_device_draw_primitive_strided(ptr long ptr) -@ cdecl wined3d_device_draw_primitive_up(ptr long ptr long) -@ cdecl wined3d_device_draw_rect_patch(ptr long ptr ptr) -@ cdecl wined3d_device_draw_tri_patch(ptr long ptr ptr) @ cdecl wined3d_device_end_scene(ptr) @ cdecl wined3d_device_end_stateblock(ptr ptr) @ cdecl wined3d_device_evict_managed_resources(ptr) @@ -59,11 +53,14 @@ @ cdecl wined3d_device_get_clip_plane(ptr long ptr) @ cdecl wined3d_device_get_clip_status(ptr ptr) @ cdecl wined3d_device_get_creation_parameters(ptr ptr) -@ cdecl wined3d_device_get_depth_stencil(ptr ptr) +@ cdecl wined3d_device_get_depth_stencil(ptr) @ cdecl wined3d_device_get_device_caps(ptr ptr) @ cdecl wined3d_device_get_display_mode(ptr long ptr ptr) @ cdecl wined3d_device_get_front_buffer_data(ptr long ptr) @ cdecl wined3d_device_get_gamma_ramp(ptr long ptr) +@ cdecl wined3d_device_get_geometry_shader(ptr) +@ cdecl wined3d_device_get_gs_cb(ptr long) +@ cdecl wined3d_device_get_gs_sampler(ptr long) @ cdecl wined3d_device_get_index_buffer(ptr ptr) @ cdecl wined3d_device_get_light(ptr long ptr) @ cdecl wined3d_device_get_light_enable(ptr long ptr) @@ -71,30 +68,34 @@ @ cdecl wined3d_device_get_npatch_mode(ptr) @ cdecl wined3d_device_get_pixel_shader(ptr) @ cdecl wined3d_device_get_primitive_type(ptr ptr) +@ cdecl wined3d_device_get_ps_cb(ptr long) @ cdecl wined3d_device_get_ps_consts_b(ptr long ptr long) @ cdecl wined3d_device_get_ps_consts_f(ptr long ptr long) @ cdecl wined3d_device_get_ps_consts_i(ptr long ptr long) +@ cdecl wined3d_device_get_ps_sampler(ptr long) @ cdecl wined3d_device_get_raster_status(ptr long ptr) -@ cdecl wined3d_device_get_render_state(ptr long ptr) -@ cdecl wined3d_device_get_render_target(ptr long ptr) -@ cdecl wined3d_device_get_sampler_state(ptr long long ptr) +@ cdecl wined3d_device_get_render_state(ptr long) +@ cdecl wined3d_device_get_render_target(ptr long) +@ cdecl wined3d_device_get_sampler_state(ptr long long) @ cdecl wined3d_device_get_scissor_rect(ptr ptr) @ cdecl wined3d_device_get_software_vertex_processing(ptr) +@ cdecl wined3d_device_get_stream_output(ptr long ptr) @ cdecl wined3d_device_get_stream_source(ptr long ptr ptr ptr) @ cdecl wined3d_device_get_stream_source_freq(ptr long ptr) -@ cdecl wined3d_device_get_surface_from_dc(ptr ptr ptr) -@ cdecl wined3d_device_get_swapchain(ptr long ptr) +@ cdecl wined3d_device_get_surface_from_dc(ptr ptr) +@ cdecl wined3d_device_get_swapchain(ptr long) @ cdecl wined3d_device_get_swapchain_count(ptr) -@ cdecl wined3d_device_get_texture(ptr long ptr) -@ cdecl wined3d_device_get_texture_stage_state(ptr long long ptr) +@ cdecl wined3d_device_get_texture(ptr long) +@ cdecl wined3d_device_get_texture_stage_state(ptr long long) @ cdecl wined3d_device_get_transform(ptr long ptr) -@ cdecl wined3d_device_get_vertex_declaration(ptr ptr) +@ cdecl wined3d_device_get_vertex_declaration(ptr) @ cdecl wined3d_device_get_vertex_shader(ptr) @ cdecl wined3d_device_get_viewport(ptr ptr) +@ cdecl wined3d_device_get_vs_cb(ptr long) @ cdecl wined3d_device_get_vs_consts_b(ptr long ptr long) @ cdecl wined3d_device_get_vs_consts_f(ptr long ptr long) @ cdecl wined3d_device_get_vs_consts_i(ptr long ptr long) -@ cdecl wined3d_device_get_wined3d(ptr ptr) +@ cdecl wined3d_device_get_vs_sampler(ptr long) @ cdecl wined3d_device_incref(ptr) @ cdecl wined3d_device_init_3d(ptr ptr) @ cdecl wined3d_device_init_gdi(ptr ptr) @@ -102,7 +103,7 @@ @ cdecl wined3d_device_present(ptr ptr ptr ptr ptr long) @ cdecl wined3d_device_process_vertices(ptr long long long ptr ptr long long) @ cdecl wined3d_device_release_focus_window(ptr) -@ cdecl wined3d_device_reset(ptr ptr ptr ptr) +@ cdecl wined3d_device_reset(ptr ptr ptr ptr long) @ cdecl wined3d_device_restore_fullscreen_window(ptr ptr) @ cdecl wined3d_device_set_base_vertex_index(ptr long) @ cdecl wined3d_device_set_clip_plane(ptr long ptr) @@ -112,6 +113,9 @@ @ cdecl wined3d_device_set_depth_stencil(ptr ptr) @ cdecl wined3d_device_set_dialog_box_mode(ptr long) @ cdecl wined3d_device_set_gamma_ramp(ptr long long ptr) +@ cdecl wined3d_device_set_geometry_shader(ptr ptr) +@ cdecl wined3d_device_set_gs_cb(ptr long ptr) +@ cdecl wined3d_device_set_gs_sampler(ptr long ptr) @ cdecl wined3d_device_set_index_buffer(ptr ptr long) @ cdecl wined3d_device_set_light(ptr long ptr) @ cdecl wined3d_device_set_light_enable(ptr long long) @@ -120,14 +124,17 @@ @ cdecl wined3d_device_set_npatch_mode(ptr float) @ cdecl wined3d_device_set_pixel_shader(ptr ptr) @ cdecl wined3d_device_set_primitive_type(ptr long) +@ cdecl wined3d_device_set_ps_cb(ptr long ptr) @ cdecl wined3d_device_set_ps_consts_b(ptr long ptr long) @ cdecl wined3d_device_set_ps_consts_f(ptr long ptr long) @ cdecl wined3d_device_set_ps_consts_i(ptr long ptr long) +@ cdecl wined3d_device_set_ps_sampler(ptr long ptr) @ cdecl wined3d_device_set_render_state(ptr long long) @ cdecl wined3d_device_set_render_target(ptr long ptr long) @ cdecl wined3d_device_set_sampler_state(ptr long long long) @ cdecl wined3d_device_set_scissor_rect(ptr ptr) @ cdecl wined3d_device_set_software_vertex_processing(ptr long) +@ cdecl wined3d_device_set_stream_output(ptr long ptr long) @ cdecl wined3d_device_set_stream_source(ptr long ptr long long) @ cdecl wined3d_device_set_stream_source_freq(ptr long long) @ cdecl wined3d_device_set_texture(ptr long ptr) @@ -136,9 +143,11 @@ @ cdecl wined3d_device_set_vertex_declaration(ptr ptr) @ cdecl wined3d_device_set_vertex_shader(ptr ptr) @ cdecl wined3d_device_set_viewport(ptr ptr) +@ cdecl wined3d_device_set_vs_cb(ptr long ptr) @ cdecl wined3d_device_set_vs_consts_b(ptr long ptr long) @ cdecl wined3d_device_set_vs_consts_f(ptr long ptr long) @ cdecl wined3d_device_set_vs_consts_i(ptr long ptr long) +@ cdecl wined3d_device_set_vs_sampler(ptr long ptr) @ cdecl wined3d_device_setup_fullscreen_window(ptr ptr long long) @ cdecl wined3d_device_show_cursor(ptr long) @ cdecl wined3d_device_uninit_3d(ptr) @@ -175,6 +184,11 @@ @ cdecl wined3d_rendertarget_view_get_resource(ptr) @ cdecl wined3d_rendertarget_view_incref(ptr) +@ cdecl wined3d_sampler_create(ptr ptr) +@ cdecl wined3d_sampler_decref(ptr) +@ cdecl wined3d_sampler_get_parent(ptr) +@ cdecl wined3d_sampler_incref(ptr) + @ cdecl wined3d_shader_create_gs(ptr ptr ptr ptr ptr ptr long) @ cdecl wined3d_shader_create_ps(ptr ptr ptr ptr ptr ptr long) @ cdecl wined3d_shader_create_vs(ptr ptr ptr ptr ptr ptr long) @@ -191,7 +205,7 @@ @ cdecl wined3d_stateblock_incref(ptr) @ cdecl wined3d_surface_blt(ptr ptr ptr ptr long ptr long) -@ cdecl wined3d_surface_create(ptr long long long long long long long long long long ptr ptr ptr) +@ cdecl wined3d_surface_create(ptr long long long long long long long long ptr ptr ptr) @ cdecl wined3d_surface_decref(ptr) @ cdecl wined3d_surface_flip(ptr ptr long) @ cdecl wined3d_surface_from_resource(ptr) @@ -221,9 +235,9 @@ @ cdecl wined3d_surface_update_overlay(ptr ptr ptr ptr long ptr) @ cdecl wined3d_surface_update_overlay_z_order(ptr long ptr) -@ cdecl wined3d_swapchain_create(ptr ptr long ptr ptr ptr) +@ cdecl wined3d_swapchain_create(ptr ptr ptr ptr ptr) @ cdecl wined3d_swapchain_decref(ptr) -@ cdecl wined3d_swapchain_get_back_buffer(ptr long long ptr) +@ cdecl wined3d_swapchain_get_back_buffer(ptr long long) @ cdecl wined3d_swapchain_get_device(ptr) @ cdecl wined3d_swapchain_get_display_mode(ptr ptr ptr) @ cdecl wined3d_swapchain_get_front_buffer_data(ptr ptr) diff --git a/dll/directx/wine/wined3d/wined3d_gl.h b/dll/directx/wine/wined3d/wined3d_gl.h index 128937a5cde..06b527467ea 100644 --- a/dll/directx/wine/wined3d/wined3d_gl.h +++ b/dll/directx/wine/wined3d/wined3d_gl.h @@ -19,899 +19,18 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - * - * - * Most OpenGL 1.0/1.1/1.2/1.3 constants/types come from the Mesa-project: - * Copyright (C) 1999-2006 Brian Paul - * - * From the Mesa-license: - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN - * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef __WINE_WINED3D_GL_H #define __WINE_WINED3D_GL_H -/**************************************************** - * OpenGL 1.0/1.1/1.2/1.3 - * types, #defines and function pointers - ****************************************************/ +#include "wine/wgl.h" -/* Types */ -typedef unsigned int GLbitfield; -typedef unsigned char GLboolean; -typedef signed char GLbyte; -typedef unsigned char GLubyte; -typedef short GLshort; -typedef unsigned short GLushort; -typedef int GLint; -typedef unsigned int GLuint; -typedef unsigned int GLenum; -typedef float GLfloat; -typedef int GLsizei; -typedef float GLclampf; -typedef double GLdouble; -typedef double GLclampd; -typedef void GLvoid; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef INT64 GLint64; -typedef UINT64 GLuint64; -typedef struct __GLsync *GLsync; - -/* Booleans */ -#define GL_FALSE 0x0 -#define GL_TRUE 0x1 - -/* Data types */ -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_INT 0x1404 -#define GL_UNSIGNED_INT 0x1405 -#define GL_FLOAT 0x1406 -#define GL_DOUBLE 0x140A -#define GL_2_BYTES 0x1407 -#define GL_3_BYTES 0x1408 -#define GL_4_BYTES 0x1409 - -/* Errors */ -#define GL_NO_ERROR 0x0 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_OPERATION 0x0502 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 -#define GL_OUT_OF_MEMORY 0x0505 - -/* Utility */ -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 - -/* Accumulation buffer */ -#define GL_ACCUM_RED_BITS 0x0D58 -#define GL_ACCUM_GREEN_BITS 0x0D59 -#define GL_ACCUM_BLUE_BITS 0x0D5A -#define GL_ACCUM_ALPHA_BITS 0x0D5B -#define GL_ACCUM_CLEAR_VALUE 0x0B80 -#define GL_ACCUM 0x0100 -#define GL_ADD 0x0104 -#define GL_LOAD 0x0101 -#define GL_MULT 0x0103 -#define GL_RETURN 0x0102 - -/* Alpha testing */ -#define GL_ALPHA_TEST 0x0BC0 -#define GL_ALPHA_TEST_REF 0x0BC2 -#define GL_ALPHA_TEST_FUNC 0x0BC1 - -/* Blending */ -#define GL_BLEND 0x0BE2 -#define GL_BLEND_SRC 0x0BE1 -#define GL_BLEND_DST 0x0BE0 -#define GL_ZERO 0x0 -#define GL_ONE 0x1 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 - -/* Buffers, Pixel Drawing/Reading */ -#define GL_NONE 0x0 -#define GL_FRONT_LEFT 0x0400 -#define GL_FRONT_RIGHT 0x0401 -#define GL_BACK_LEFT 0x0402 -#define GL_BACK_RIGHT 0x0403 -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_LEFT 0x0406 -#define GL_RIGHT 0x0407 -#define GL_FRONT_AND_BACK 0x0408 -#define GL_AUX0 0x0409 -#define GL_AUX1 0x040A -#define GL_AUX2 0x040B -#define GL_AUX3 0x040C -#define GL_COLOR_INDEX 0x1900 -#define GL_RED 0x1903 -#define GL_GREEN 0x1904 -#define GL_BLUE 0x1905 -#define GL_ALPHA 0x1906 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A -#define GL_ALPHA_BITS 0x0D55 -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_INDEX_BITS 0x0D51 -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_AUX_BUFFERS 0x0C00 -#define GL_READ_BUFFER 0x0C02 -#define GL_DRAW_BUFFER 0x0C01 -#define GL_DOUBLEBUFFER 0x0C32 -#define GL_STEREO 0x0C33 -#define GL_BITMAP 0x1A00 -#define GL_COLOR 0x1800 -#define GL_DEPTH 0x1801 -#define GL_STENCIL 0x1802 -#define GL_DITHER 0x0BD0 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 - -/* Clipping */ -#define GL_CLIP_PLANE0 0x3000 -#define GL_CLIP_PLANE1 0x3001 -#define GL_CLIP_PLANE2 0x3002 -#define GL_CLIP_PLANE3 0x3003 -#define GL_CLIP_PLANE4 0x3004 -#define GL_CLIP_PLANE5 0x3005 - -/* Depth buffer */ -#define GL_NEVER 0x0200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 -#define GL_DEPTH_TEST 0x0B71 -#define GL_DEPTH_BITS 0x0D56 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_COMPONENT 0x1902 - -/* Evaluators */ -#define GL_AUTO_NORMAL 0x0D80 -#define GL_MAP1_COLOR_4 0x0D90 -#define GL_MAP1_GRID_DOMAIN 0x0DD0 -#define GL_MAP1_GRID_SEGMENTS 0x0DD1 -#define GL_MAP1_INDEX 0x0D91 -#define GL_MAP1_NORMAL 0x0D92 -#define GL_MAP1_TEXTURE_COORD_1 0x0D93 -#define GL_MAP1_TEXTURE_COORD_2 0x0D94 -#define GL_MAP1_TEXTURE_COORD_3 0x0D95 -#define GL_MAP1_TEXTURE_COORD_4 0x0D96 -#define GL_MAP1_VERTEX_3 0x0D97 -#define GL_MAP1_VERTEX_4 0x0D98 -#define GL_MAP2_COLOR_4 0x0DB0 -#define GL_MAP2_GRID_DOMAIN 0x0DD2 -#define GL_MAP2_GRID_SEGMENTS 0x0DD3 -#define GL_MAP2_INDEX 0x0DB1 -#define GL_MAP2_NORMAL 0x0DB2 -#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 -#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 -#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 -#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 -#define GL_MAP2_VERTEX_3 0x0DB7 -#define GL_MAP2_VERTEX_4 0x0DB8 -#define GL_COEFF 0x0A00 -#define GL_DOMAIN 0x0A02 -#define GL_ORDER 0x0A01 - -/* Feedback */ -#define GL_2D 0x0600 -#define GL_3D 0x0601 -#define GL_3D_COLOR 0x0602 -#define GL_3D_COLOR_TEXTURE 0x0603 -#define GL_4D_COLOR_TEXTURE 0x0604 -#define GL_POINT_TOKEN 0x0701 -#define GL_LINE_TOKEN 0x0702 -#define GL_LINE_RESET_TOKEN 0x0707 -#define GL_POLYGON_TOKEN 0x0703 -#define GL_BITMAP_TOKEN 0x0704 -#define GL_DRAW_PIXEL_TOKEN 0x0705 -#define GL_COPY_PIXEL_TOKEN 0x0706 -#define GL_PASS_THROUGH_TOKEN 0x0700 -#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 -#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 -#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 - -/* Fog */ -#define GL_FOG 0x0B60 -#define GL_FOG_MODE 0x0B65 -#define GL_FOG_DENSITY 0x0B62 -#define GL_FOG_COLOR 0x0B66 -#define GL_FOG_INDEX 0x0B61 -#define GL_FOG_START 0x0B63 -#define GL_FOG_END 0x0B64 -#define GL_LINEAR 0x2601 -#define GL_EXP 0x0800 -#define GL_EXP2 0x0801 - -/* Gets */ -#define GL_ATTRIB_STACK_DEPTH 0x0BB0 -#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_CURRENT_INDEX 0x0B01 -#define GL_CURRENT_COLOR 0x0B00 -#define GL_CURRENT_NORMAL 0x0B02 -#define GL_CURRENT_RASTER_COLOR 0x0B04 -#define GL_CURRENT_RASTER_DISTANCE 0x0B09 -#define GL_CURRENT_RASTER_INDEX 0x0B05 -#define GL_CURRENT_RASTER_POSITION 0x0B07 -#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 -#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 -#define GL_CURRENT_TEXTURE_COORDS 0x0B03 -#define GL_INDEX_CLEAR_VALUE 0x0C20 -#define GL_INDEX_MODE 0x0C30 -#define GL_INDEX_WRITEMASK 0x0C21 -#define GL_MODELVIEW_MATRIX 0x0BA6 -#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 -#define GL_NAME_STACK_DEPTH 0x0D70 -#define GL_PROJECTION_MATRIX 0x0BA7 -#define GL_PROJECTION_STACK_DEPTH 0x0BA4 -#define GL_RENDER_MODE 0x0C40 -#define GL_RGBA_MODE 0x0C31 -#define GL_TEXTURE_MATRIX 0x0BA8 -#define GL_TEXTURE_STACK_DEPTH 0x0BA5 -#define GL_VIEWPORT 0x0BA2 - -/* Hints */ -#define GL_FOG_HINT 0x0C54 -#define GL_LINE_SMOOTH_HINT 0x0C52 -#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 -#define GL_POINT_SMOOTH_HINT 0x0C51 -#define GL_POLYGON_SMOOTH_HINT 0x0C53 -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 - -/* Implementation limits */ -#define GL_MAX_LIST_NESTING 0x0B31 -#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 -#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 -#define GL_MAX_NAME_STACK_DEPTH 0x0D37 -#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 -#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 -#define GL_MAX_EVAL_ORDER 0x0D30 -#define GL_MAX_LIGHTS 0x0D31 -#define GL_MAX_CLIP_PLANES 0x0D32 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B - -/* Lighting */ -#define GL_LIGHTING 0x0B50 -#define GL_LIGHT0 0x4000 -#define GL_LIGHT1 0x4001 -#define GL_LIGHT2 0x4002 -#define GL_LIGHT3 0x4003 -#define GL_LIGHT4 0x4004 -#define GL_LIGHT5 0x4005 -#define GL_LIGHT6 0x4006 -#define GL_LIGHT7 0x4007 -#define GL_SPOT_EXPONENT 0x1205 -#define GL_SPOT_CUTOFF 0x1206 -#define GL_CONSTANT_ATTENUATION 0x1207 -#define GL_LINEAR_ATTENUATION 0x1208 -#define GL_QUADRATIC_ATTENUATION 0x1209 -#define GL_AMBIENT 0x1200 -#define GL_DIFFUSE 0x1201 -#define GL_SPECULAR 0x1202 -#define GL_SHININESS 0x1601 -#define GL_EMISSION 0x1600 -#define GL_POSITION 0x1203 -#define GL_SPOT_DIRECTION 0x1204 -#define GL_AMBIENT_AND_DIFFUSE 0x1602 -#define GL_COLOR_INDEXES 0x1603 -#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 -#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 -#define GL_LIGHT_MODEL_AMBIENT 0x0B53 -#define GL_FRONT_AND_BACK 0x0408 -#define GL_SHADE_MODEL 0x0B54 -#define GL_FLAT 0x1D00 -#define GL_SMOOTH 0x1D01 -#define GL_COLOR_MATERIAL 0x0B57 -#define GL_COLOR_MATERIAL_FACE 0x0B55 -#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 -#define GL_NORMALIZE 0x0BA1 - -/* Lines */ -#define GL_LINE_SMOOTH 0x0B20 -#define GL_LINE_STIPPLE 0x0B24 -#define GL_LINE_STIPPLE_PATTERN 0x0B25 -#define GL_LINE_STIPPLE_REPEAT 0x0B26 -#define GL_LINE_WIDTH 0x0B21 -#define GL_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_LINE_WIDTH_RANGE 0x0B22 - -/* Logic Ops */ -#define GL_LOGIC_OP 0x0BF1 -#define GL_INDEX_LOGIC_OP 0x0BF1 -#define GL_COLOR_LOGIC_OP 0x0BF2 -#define GL_LOGIC_OP_MODE 0x0BF0 -#define GL_CLEAR 0x1500 -#define GL_SET 0x150F -#define GL_COPY 0x1503 -#define GL_COPY_INVERTED 0x150C -#define GL_NOOP 0x1505 -#define GL_INVERT 0x150A -#define GL_AND 0x1501 -#define GL_NAND 0x150E -#define GL_OR 0x1507 -#define GL_NOR 0x1508 -#define GL_XOR 0x1506 -#define GL_EQUIV 0x1509 -#define GL_AND_REVERSE 0x1502 -#define GL_AND_INVERTED 0x1504 -#define GL_OR_REVERSE 0x150B -#define GL_OR_INVERTED 0x150D - -/* Matrix Mode */ -#define GL_MATRIX_MODE 0x0BA0 -#define GL_MODELVIEW 0x1700 -#define GL_PROJECTION 0x1701 -#define GL_TEXTURE 0x1702 - -/* Pixel Mode / Transfer */ -#define GL_MAP_COLOR 0x0D10 -#define GL_MAP_STENCIL 0x0D11 -#define GL_INDEX_SHIFT 0x0D12 -#define GL_INDEX_OFFSET 0x0D13 -#define GL_RED_SCALE 0x0D14 -#define GL_RED_BIAS 0x0D15 -#define GL_GREEN_SCALE 0x0D18 -#define GL_GREEN_BIAS 0x0D19 -#define GL_BLUE_SCALE 0x0D1A -#define GL_BLUE_BIAS 0x0D1B -#define GL_ALPHA_SCALE 0x0D1C -#define GL_ALPHA_BIAS 0x0D1D -#define GL_DEPTH_SCALE 0x0D1E -#define GL_DEPTH_BIAS 0x0D1F -#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 -#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 -#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 -#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 -#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 -#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 -#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 -#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 -#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 -#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 -#define GL_PIXEL_MAP_S_TO_S 0x0C71 -#define GL_PIXEL_MAP_I_TO_I 0x0C70 -#define GL_PIXEL_MAP_I_TO_R 0x0C72 -#define GL_PIXEL_MAP_I_TO_G 0x0C73 -#define GL_PIXEL_MAP_I_TO_B 0x0C74 -#define GL_PIXEL_MAP_I_TO_A 0x0C75 -#define GL_PIXEL_MAP_R_TO_R 0x0C76 -#define GL_PIXEL_MAP_G_TO_G 0x0C77 -#define GL_PIXEL_MAP_B_TO_B 0x0C78 -#define GL_PIXEL_MAP_A_TO_A 0x0C79 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_PACK_LSB_FIRST 0x0D01 -#define GL_PACK_ROW_LENGTH 0x0D02 -#define GL_PACK_SKIP_PIXELS 0x0D04 -#define GL_PACK_SKIP_ROWS 0x0D03 -#define GL_PACK_SWAP_BYTES 0x0D00 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_UNPACK_LSB_FIRST 0x0CF1 -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#define GL_UNPACK_SKIP_PIXELS 0x0CF4 -#define GL_UNPACK_SKIP_ROWS 0x0CF3 -#define GL_UNPACK_SWAP_BYTES 0x0CF0 -#define GL_ZOOM_X 0x0D16 -#define GL_ZOOM_Y 0x0D17 - -/* Points */ -#define GL_POINT_SMOOTH 0x0B10 -#define GL_POINT_SIZE 0x0B11 -#define GL_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_POINT_SIZE_RANGE 0x0B12 - -/* Polygons */ -#define GL_POINT 0x1B00 -#define GL_LINE 0x1B01 -#define GL_FILL 0x1B02 -#define GL_CW 0x0900 -#define GL_CCW 0x0901 -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_POLYGON_MODE 0x0B40 -#define GL_POLYGON_SMOOTH 0x0B41 -#define GL_POLYGON_STIPPLE 0x0B42 -#define GL_EDGE_FLAG 0x0B43 -#define GL_CULL_FACE 0x0B44 -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -#define GL_POLYGON_OFFSET_POINT 0x2A01 -#define GL_POLYGON_OFFSET_LINE 0x2A02 -#define GL_POLYGON_OFFSET_FILL 0x8037 - -/* Primitives */ -#define GL_POINTS 0x0000 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_LINE_STRIP 0x0003 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 -#define GL_QUADS 0x0007 -#define GL_QUAD_STRIP 0x0008 -#define GL_POLYGON 0x0009 - -/* Push/Pop bits */ -#define GL_CURRENT_BIT 0x00000001 -#define GL_POINT_BIT 0x00000002 -#define GL_LINE_BIT 0x00000004 -#define GL_POLYGON_BIT 0x00000008 -#define GL_POLYGON_STIPPLE_BIT 0x00000010 -#define GL_PIXEL_MODE_BIT 0x00000020 -#define GL_LIGHTING_BIT 0x00000040 -#define GL_FOG_BIT 0x00000080 -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_ACCUM_BUFFER_BIT 0x00000200 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_VIEWPORT_BIT 0x00000800 -#define GL_TRANSFORM_BIT 0x00001000 -#define GL_ENABLE_BIT 0x00002000 -#define GL_COLOR_BUFFER_BIT 0x00004000 -#define GL_HINT_BIT 0x00008000 -#define GL_EVAL_BIT 0x00010000 -#define GL_LIST_BIT 0x00020000 -#define GL_TEXTURE_BIT 0x00040000 -#define GL_SCISSOR_BIT 0x00080000 -#define GL_ALL_ATTRIB_BITS 0x000FFFFF - -/* Render Mode */ -#define GL_FEEDBACK 0x1C01 -#define GL_RENDER 0x1C00 -#define GL_SELECT 0x1C02 - -/* Scissor box */ -#define GL_SCISSOR_TEST 0x0C11 -#define GL_SCISSOR_BOX 0x0C10 - -/* Stencil */ -#define GL_STENCIL_TEST 0x0B90 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_STENCIL_BITS 0x0D57 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_INDEX 0x1901 -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 - -/* Texture mapping */ -#define GL_TEXTURE_ENV 0x2300 -#define GL_TEXTURE_ENV_MODE 0x2200 -#define GL_TEXTURE_1D 0x0DE0 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_ENV_COLOR 0x2201 -#define GL_TEXTURE_GEN_S 0x0C60 -#define GL_TEXTURE_GEN_T 0x0C61 -#define GL_TEXTURE_GEN_MODE 0x2500 -#define GL_TEXTURE_BORDER_COLOR 0x1004 -#define GL_TEXTURE_WIDTH 0x1000 -#define GL_TEXTURE_HEIGHT 0x1001 -#define GL_TEXTURE_BORDER 0x1005 -#define GL_TEXTURE_COMPONENTS 0x1003 -#define GL_TEXTURE_RED_SIZE 0x805C -#define GL_TEXTURE_GREEN_SIZE 0x805D -#define GL_TEXTURE_BLUE_SIZE 0x805E -#define GL_TEXTURE_ALPHA_SIZE 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE 0x8061 -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 -#define GL_OBJECT_LINEAR 0x2401 -#define GL_OBJECT_PLANE 0x2501 -#define GL_EYE_LINEAR 0x2400 -#define GL_EYE_PLANE 0x2502 -#define GL_SPHERE_MAP 0x2402 -#define GL_DECAL 0x2101 -#define GL_MODULATE 0x2100 -#define GL_NEAREST 0x2600 -#define GL_REPEAT 0x2901 -#define GL_CLAMP 0x2900 -#define GL_S 0x2000 -#define GL_T 0x2001 -#define GL_R 0x2002 -#define GL_Q 0x2003 -#define GL_TEXTURE_GEN_R 0x0C62 -#define GL_TEXTURE_GEN_Q 0x0C63 - -/* Vertex Arrays */ -#define GL_VERTEX_ARRAY 0x8074 -#define GL_NORMAL_ARRAY 0x8075 -#define GL_COLOR_ARRAY 0x8076 -#define GL_INDEX_ARRAY 0x8077 -#define GL_TEXTURE_COORD_ARRAY 0x8078 -#define GL_EDGE_FLAG_ARRAY 0x8079 -#define GL_VERTEX_ARRAY_SIZE 0x807A -#define GL_VERTEX_ARRAY_TYPE 0x807B -#define GL_VERTEX_ARRAY_STRIDE 0x807C -#define GL_NORMAL_ARRAY_TYPE 0x807E -#define GL_NORMAL_ARRAY_STRIDE 0x807F -#define GL_COLOR_ARRAY_SIZE 0x8081 -#define GL_COLOR_ARRAY_TYPE 0x8082 -#define GL_COLOR_ARRAY_STRIDE 0x8083 -#define GL_INDEX_ARRAY_TYPE 0x8085 -#define GL_INDEX_ARRAY_STRIDE 0x8086 -#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A -#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C -#define GL_VERTEX_ARRAY_POINTER 0x808E -#define GL_NORMAL_ARRAY_POINTER 0x808F -#define GL_COLOR_ARRAY_POINTER 0x8090 -#define GL_INDEX_ARRAY_POINTER 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 -#define GL_V2F 0x2A20 -#define GL_V3F 0x2A21 -#define GL_C4UB_V2F 0x2A22 -#define GL_C4UB_V3F 0x2A23 -#define GL_C3F_V3F 0x2A24 -#define GL_N3F_V3F 0x2A25 -#define GL_C4F_N3F_V3F 0x2A26 -#define GL_T2F_V3F 0x2A27 -#define GL_T4F_V4F 0x2A28 -#define GL_T2F_C4UB_V3F 0x2A29 -#define GL_T2F_C3F_V3F 0x2A2A -#define GL_T2F_N3F_V3F 0x2A2B -#define GL_T2F_C4F_N3F_V3F 0x2A2C -#define GL_T4F_C4F_N3F_V4F 0x2A2D - -/* OpenGL 1.1 */ -#define GL_PROXY_TEXTURE_1D 0x8063 -#define GL_PROXY_TEXTURE_2D 0x8064 -#define GL_TEXTURE_PRIORITY 0x8066 -#define GL_TEXTURE_RESIDENT 0x8067 -#define GL_TEXTURE_BINDING_1D 0x8068 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 -#define GL_ALPHA4 0x803B -#define GL_ALPHA8 0x803C -#define GL_ALPHA12 0x803D -#define GL_ALPHA16 0x803E -#define GL_LUMINANCE4 0x803F -#define GL_LUMINANCE8 0x8040 -#define GL_LUMINANCE12 0x8041 -#define GL_LUMINANCE16 0x8042 -#define GL_LUMINANCE4_ALPHA4 0x8043 -#define GL_LUMINANCE6_ALPHA2 0x8044 -#define GL_LUMINANCE8_ALPHA8 0x8045 -#define GL_LUMINANCE12_ALPHA4 0x8046 -#define GL_LUMINANCE12_ALPHA12 0x8047 -#define GL_LUMINANCE16_ALPHA16 0x8048 -#define GL_INTENSITY 0x8049 -#define GL_INTENSITY4 0x804A -#define GL_INTENSITY8 0x804B -#define GL_INTENSITY12 0x804C -#define GL_INTENSITY16 0x804D -#define GL_R3_G3_B2 0x2A10 -#define GL_RGB4 0x804F -#define GL_RGB5 0x8050 -#define GL_RGB8 0x8051 -#define GL_RGB10 0x8052 -#define GL_RGB12 0x8053 -#define GL_RGB16 0x8054 -#define GL_RGBA2 0x8055 -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGBA8 0x8058 -#define GL_RGB10_A2 0x8059 -#define GL_RGBA12 0x805A -#define GL_RGBA16 0x805B -#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 -#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 -#define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFFF -#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF - -/* OpenGL 1.2 constants */ -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_RESCALE_NORMAL 0x803A -#define GL_TEXTURE_BINDING_3D 0x806A -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E - -/* OpenGL 1.3 constants */ -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 -#define GL_MAX_TEXTURE_UNITS 0x84E2 -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_NORMAL_MAP 0x8511 -#define GL_REFLECTION_MAP 0x8512 -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#define GL_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -#define GL_SOURCE0_RGB 0x8580 -#define GL_SOURCE1_RGB 0x8581 -#define GL_SOURCE2_RGB 0x8582 -#define GL_SOURCE0_ALPHA 0x8588 -#define GL_SOURCE1_ALPHA 0x8589 -#define GL_SOURCE2_ALPHA 0x858A -#define GL_OPERAND0_RGB 0x8590 -#define GL_OPERAND1_RGB 0x8591 -#define GL_OPERAND2_RGB 0x8592 -#define GL_OPERAND0_ALPHA 0x8598 -#define GL_OPERAND1_ALPHA 0x8599 -#define GL_OPERAND2_ALPHA 0x859A -#define GL_SUBTRACT 0x84E7 -#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 -#define GL_COMPRESSED_ALPHA 0x84E9 -#define GL_COMPRESSED_LUMINANCE 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#define GL_COMPRESSED_INTENSITY 0x84EC -#define GL_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -#define GL_CLAMP_TO_BORDER 0x812D -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_MULTISAMPLE_BIT 0x20000000 - -/* GL_VERSION_2_0 */ -#ifndef GL_VERSION_2_0 -#define GL_VERSION_2_0 1 -#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_MAX_DRAW_BUFFERS 0x8824 -#define GL_DRAW_BUFFER0 0x8825 -#define GL_DRAW_BUFFER1 0x8826 -#define GL_DRAW_BUFFER2 0x8827 -#define GL_DRAW_BUFFER3 0x8828 -#define GL_DRAW_BUFFER4 0x8829 -#define GL_DRAW_BUFFER5 0x882a -#define GL_DRAW_BUFFER6 0x882b -#define GL_DRAW_BUFFER7 0x882c -#define GL_DRAW_BUFFER8 0x882d -#define GL_DRAW_BUFFER9 0x882e -#define GL_DRAW_BUFFER10 0x882f -#define GL_DRAW_BUFFER11 0x8830 -#define GL_DRAW_BUFFER12 0x8831 -#define GL_DRAW_BUFFER13 0x8832 -#define GL_DRAW_BUFFER14 0x8833 -#define GL_DRAW_BUFFER15 0x8834 -#define GL_BLEND_EQUATION_ALPHA 0x883d -#define GL_POINT_SPRITE 0x8861 -#define GL_COORD_REPLACE 0x8862 -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886a -#define GL_MAX_TEXTURE_COORDS 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_FRAGMENT_SHADER 0x8b30 -#define GL_VERTEX_SHADER 0x8b31 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8b49 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8b4a -#define GL_MAX_VARYING_FLOATS 0x8b4b -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8b4c -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8b4d -#define GL_SHADER_TYPE 0x8b4f -#define GL_FLOAT_VEC2 0x8b50 -#define GL_FLOAT_VEC3 0x8b51 -#define GL_FLOAT_VEC4 0x8b52 -#define GL_INT_VEC2 0x8b53 -#define GL_INT_VEC3 0x8b54 -#define GL_INT_VEC4 0x8b55 -#define GL_BOOL 0x8b56 -#define GL_BOOL_VEC2 0x8b57 -#define GL_BOOL_VEC3 0x8b58 -#define GL_BOOL_VEC4 0x8b59 -#define GL_FLOAT_MAT2 0x8b5a -#define GL_FLOAT_MAT3 0x8b5b -#define GL_FLOAT_MAT4 0x8b5c -#define GL_SAMPLER_1D 0x8b5d -#define GL_SAMPLER_2D 0x8b5e -#define GL_SAMPLER_3D 0x8b5f -#define GL_SAMPLER_CUBE 0x8b60 -#define GL_SAMPLER_1D_SHADOW 0x8b61 -#define GL_SAMPLER_2D_SHADOW 0x8b62 -#define GL_DELETE_STATUS 0x8b80 -#define GL_COMPILE_STATUS 0x8b81 -#define GL_LINK_STATUS 0x8b82 -#define GL_VALIDATE_STATUS 0x8b83 -#define GL_INFO_LOG_LENGTH 0x8b84 -#define GL_ATTACHED_SHADERS 0x8b85 -#define GL_ACTIVE_UNIFORMS 0x8b86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8b87 -#define GL_SHADER_SOURCE_LENGTH 0x8b88 -#define GL_ACTIVE_ATTRIBUTES 0x8b89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8b8a -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8b8b -#define GL_SHADING_LANGUAGE_VERSION 0x8b8c -#define GL_CURRENT_PROGRAM 0x8b8d -#define GL_POINT_SPRITE_COORD_ORIGIN 0x8ca0 -#define GL_LOWER_LEFT 0x8ca1 -#define GL_UPPER_LEFT 0x8ca2 -#define GL_STENCIL_BACK_REF 0x8ca3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8ca4 -#define GL_STENCIL_BACK_WRITEMASK 0x8ca5 -typedef char GLchar; -#endif +#define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 /* not in the gl spec */ void (WINE_GLAPI *glDisableWINE)(GLenum cap) DECLSPEC_HIDDEN; void (WINE_GLAPI *glEnableWINE)(GLenum cap) DECLSPEC_HIDDEN; -/* WGL functions */ -HGLRC (WINAPI *pwglCreateContext)(HDC) DECLSPEC_HIDDEN; -BOOL (WINAPI *pwglDeleteContext)(HGLRC) DECLSPEC_HIDDEN; -HGLRC (WINAPI *pwglGetCurrentContext)(void) DECLSPEC_HIDDEN; -HDC (WINAPI *pwglGetCurrentDC)(void) DECLSPEC_HIDDEN; -PROC (WINAPI *pwglGetProcAddress)(LPCSTR) DECLSPEC_HIDDEN; -BOOL (WINAPI *pwglMakeCurrent)(HDC, HGLRC) DECLSPEC_HIDDEN; -BOOL (WINAPI *pwglShareLists)(HGLRC, HGLRC) DECLSPEC_HIDDEN; - -#define WGL_FUNCS_GEN \ - USE_WGL_FUNC(wglCreateContext) \ - USE_WGL_FUNC(wglDeleteContext) \ - USE_WGL_FUNC(wglGetCurrentContext) \ - USE_WGL_FUNC(wglGetCurrentDC) \ - USE_WGL_FUNC(wglGetProcAddress) \ - USE_WGL_FUNC(wglMakeCurrent) \ - USE_WGL_FUNC(wglShareLists) - /* OpenGL extensions. */ enum wined3d_gl_extension { @@ -930,6 +49,7 @@ enum wined3d_gl_extension ARB_DEPTH_TEXTURE, ARB_DRAW_BUFFERS, ARB_DRAW_ELEMENTS_BASE_VERTEX, + ARB_DRAW_INSTANCED, ARB_FRAGMENT_PROGRAM, ARB_FRAGMENT_SHADER, ARB_FRAMEBUFFER_OBJECT, @@ -937,6 +57,7 @@ enum wined3d_gl_extension ARB_GEOMETRY_SHADER4, ARB_HALF_FLOAT_PIXEL, ARB_HALF_FLOAT_VERTEX, + ARB_INSTANCED_ARRAYS, ARB_MAP_BUFFER_ALIGNMENT, ARB_MAP_BUFFER_RANGE, ARB_MULTISAMPLE, @@ -946,6 +67,7 @@ enum wined3d_gl_extension ARB_POINT_PARAMETERS, ARB_POINT_SPRITE, ARB_PROVOKING_VERTEX, + ARB_SHADER_BIT_ENCODING, ARB_SHADER_OBJECTS, ARB_SHADER_TEXTURE_LOD, ARB_SHADING_LANGUAGE_100, @@ -1040,1396 +162,6 @@ enum wined3d_gl_extension WINED3D_GL_EXT_COUNT, }; -/* GL_APPLE_client_storage */ -#ifndef GL_APPLE_client_storage -#define GL_APPLE_client_storage 1 -#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85b2 -#endif - -/* GL_APPLE_fence */ -#ifndef GL_APPLE_fence -#define GL_APPLE_fence 1 -#define GL_DRAW_PIXELS_APPLE 0x8a0a -#define GL_FENCE_APPLE 0x8a0b -#endif - -/* GL_APPLE_float_pixels */ -#ifndef GL_APPLE_float_pixels -#define GL_APPLE_float_pixels 1 -#define GL_HALF_APPLE 0x140b -#define GL_COLOR_FLOAT_APPLE 0x8a0f -#define GL_RGBA_FLOAT32_APPLE 0x8814 -#define GL_RGB_FLOAT32_APPLE 0x8815 -#define GL_ALPHA_FLOAT32_APPLE 0x8816 -#define GL_INTENSITY_FLOAT32_APPLE 0x8817 -#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 -#define GL_RGBA_FLOAT16_APPLE 0x881a -#define GL_RGB_FLOAT16_APPLE 0x881b -#define GL_ALPHA_FLOAT16_APPLE 0x881c -#define GL_INTENSITY_FLOAT16_APPLE 0x881d -#define GL_LUMINANCE_FLOAT16_APPLE 0x881e -#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881f -#endif - -/* GL_APPLE_flush_buffer_range */ -#ifndef GL_APPLE_flush_buffer_range -#define GL_APPLE_flush_buffer_range 1 -#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8a12 -#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8a13 -#endif - -/* GL_APPLE_ycbcr_422 */ -#ifndef GL_APPLE_ycbcr_422 -#define GL_APPLE_ycbcr_422 1 -#define GL_YCBCR_422_APPLE 0x85b9 -#define UNSIGNED_SHORT_8_8_APPLE 0x85ba -#define UNSIGNED_SHORT_8_8_REV_APPLE 0x85bb -#endif - -/* GL_ARB_color_buffer_float */ -#ifndef GL_ARB_color_buffer_float -#define GL_ARB_color_buffer_float 1 -#define GL_RGBA_FLOAT_MODE_ARB 0x8820 -#define GL_CLAMP_VERTEX_COLOR_ARB 0x891a -#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891b -#define GL_CLAMP_READ_COLOR_ARB 0x891c -#define GL_FIXED_ONLY_ARB 0x891d -#endif - -/* GL_ARB_depth_buffer_float */ -#ifndef GL_ARB_depth_buffer_float -#define GL_ARB_depth_buffer_float 1 -#define GL_DEPTH_COMPONENT32F 0x8cac -#define GL_DEPTH32F_STENCIL8 0x8cad -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8dad -#endif - -/* GL_ARB_depth_clamp */ -#ifndef GL_ARB_depth_clamp -#define GL_ARB_depth_clamp 1 -#define GL_DEPTH_CLAMP 0x864f -#endif - -/* GL_ARB_depth_texture */ -#ifndef GL_ARB_depth_texture -#define GL_ARB_depth_texture 1 -#define GL_DEPTH_COMPONENT16_ARB 0x81a5 -#define GL_DEPTH_COMPONENT24_ARB 0x81a6 -#define GL_DEPTH_COMPONENT32_ARB 0x81a7 -#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884a -#define GL_DEPTH_TEXTURE_MODE_ARB 0x884b -#endif - -/* GL_ARB_draw_buffers */ -#ifndef GL_ARB_draw_buffers -#define GL_ARB_draw_buffers 1 -#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 -#define GL_DRAW_BUFFER0_ARB 0x8825 -#define GL_DRAW_BUFFER1_ARB 0x8826 -#define GL_DRAW_BUFFER2_ARB 0x8827 -#define GL_DRAW_BUFFER3_ARB 0x8828 -#define GL_DRAW_BUFFER4_ARB 0x8829 -#define GL_DRAW_BUFFER5_ARB 0x882a -#define GL_DRAW_BUFFER6_ARB 0x882b -#define GL_DRAW_BUFFER7_ARB 0x882c -#define GL_DRAW_BUFFER8_ARB 0x882d -#define GL_DRAW_BUFFER9_ARB 0x882e -#define GL_DRAW_BUFFER10_ARB 0x882f -#define GL_DRAW_BUFFER11_ARB 0x8830 -#define GL_DRAW_BUFFER12_ARB 0x8831 -#define GL_DRAW_BUFFER13_ARB 0x8832 -#define GL_DRAW_BUFFER14_ARB 0x8833 -#define GL_DRAW_BUFFER15_ARB 0x8834 -#endif - -/* GL_ARB_draw_elements_base_vertex */ -#ifndef GL_ARB_draw_elements_base_vertex -#define GL_ARB_draw_elements_base_vertex 1 -#endif - -/* GL_ARB_fragment_program */ -#ifndef GL_ARB_fragment_program -#define GL_ARB_fragment_program 1 -#define GL_FRAGMENT_PROGRAM_ARB 0x8804 -#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 -#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 -#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 -#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 -#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 -#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880a -#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880b -#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880c -#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880d -#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880e -#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880f -#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 -#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 -/* All ARB_fragment_program entry points are shared with ARB_vertex_program. */ -#endif - -/* GL_ARB_fragment_shader */ -#ifndef GL_ARB_fragment_shader -#define GL_ARB_fragment_shader 1 -#define GL_FRAGMENT_SHADER_ARB 0x8b30 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8b49 -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8b8b -#endif - -/* GL_ARB_framebuffer_object */ -#ifndef GL_ARB_framebuffer_object -#define GL_ARB_framebuffer_object 1 -#define GL_FRAMEBUFFER 0x8d40 -#define GL_READ_FRAMEBUFFER 0x8ca8 -#define GL_DRAW_FRAMEBUFFER 0x8ca9 -#define GL_RENDERBUFFER 0x8d41 -#define GL_STENCIL_INDEX1 0x8d46 -#define GL_STENCIL_INDEX4 0x8d47 -#define GL_STENCIL_INDEX8 0x8d48 -#define GL_STENCIL_INDEX16 0x8d49 -#define GL_RENDERBUFFER_WIDTH 0x8d42 -#define GL_RENDERBUFFER_HEIGHT 0x8d43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8d44 -#define GL_RENDERBUFFER_RED_SIZE 0x8d50 -#define GL_RENDERBUFFER_GREEN_SIZE 0x8d51 -#define GL_RENDERBUFFER_BLUE_SIZE 0x8d52 -#define GL_RENDERBUFFER_ALPHA_SIZE 0x8d53 -#define GL_RENDERBUFFER_DEPTH_SIZE 0x8d54 -#define GL_RENDERBUFFER_STENCIL_SIZE 0x8d55 -#define GL_RENDERBUFFER_SAMPLES 0x8cab -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8cd0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8cd1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8cd2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8cd3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8cd4 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 -#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 -#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 -#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 -#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 -#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 -#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 -#define GL_SRGB 0x8c40 -#define GL_UNSIGNED_NORMALIZED 0x8c17 -#define GL_FRAMEBUFFER_DEFAULT 0x8218 -#define GL_INDEX 0x8222 -#define GL_COLOR_ATTACHMENT0 0x8ce0 -#define GL_COLOR_ATTACHMENT1 0x8ce1 -#define GL_COLOR_ATTACHMENT2 0x8ce2 -#define GL_COLOR_ATTACHMENT3 0x8ce3 -#define GL_COLOR_ATTACHMENT4 0x8ce4 -#define GL_COLOR_ATTACHMENT5 0x8ce5 -#define GL_COLOR_ATTACHMENT6 0x8ce6 -#define GL_COLOR_ATTACHMENT7 0x8ce7 -#define GL_COLOR_ATTACHMENT8 0x8ce8 -#define GL_COLOR_ATTACHMENT9 0x8ce9 -#define GL_COLOR_ATTACHMENT10 0x8cea -#define GL_COLOR_ATTACHMENT11 0x8ceb -#define GL_COLOR_ATTACHMENT12 0x8cec -#define GL_COLOR_ATTACHMENT13 0x8ced -#define GL_COLOR_ATTACHMENT14 0x8cee -#define GL_COLOR_ATTACHMENT15 0x8cef -#define GL_DEPTH_ATTACHMENT 0x8d00 -#define GL_STENCIL_ATTACHMENT 0x8d20 -#define GL_DEPTH_STENCIL_ATTACHMENT 0x821a -#define GL_MAX_SAMPLES 0x8d57 -#define GL_FRAMEBUFFER_COMPLETE 0x8cd5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8cd6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8cd7 -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8cdb -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8cdc -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8cdd -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8d56 -#define GL_FRAMEBUFFER_UNDEFINED 0x8219 -#define GL_FRAMEBUFFER_BINDING 0x8ca6 -#define GL_DRAW_FRAMEBUFFER_BINDING 0x8ca6 -#define GL_READ_FRAMEBUFFER_BINDING 0x8caa -#define GL_RENDERBUFFER_BINDING 0x8ca7 -#define GL_MAX_COLOR_ATTACHMENTS 0x8cdf -#define GL_MAX_RENDERBUFFER_SIZE 0x84e8 -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 -#define GL_DEPTH_STENCIL 0x84f9 -#define GL_UNSIGNED_INT_24_8 0x84fa -#define GL_DEPTH24_STENCIL8 0x88f0 -#define GL_TEXTURE_STENCIL_SIZE 0x88f1 -#endif - -/* GL_ARB_framebuffer_sRGB */ -#ifndef GL_ARB_framebuffer_sRGB -#define GL_ARB_framebuffer_sRGB 1 -#define GL_FRAMEBUFFER_SRGB 0x8db9 -#endif - -/* GL_ARB_geometry_shader4 */ -#ifndef GL_ARB_geometry_shader4 -#define GL_ARB_geometry_shader4 1 -#define GL_GEOMETRY_SHADER_ARB 0x8dd9 -#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8dda -#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8ddb -#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8ddc -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8c29 -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8ddd -#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8dde -#define GL_MAX_VARYING_COMPONENTS_ARB 0x8b4b -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8ddf -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8de0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8de1 -#define GL_LINES_ADJACENCY_ARB 0x000a -#define GL_LINE_STRIP_ADJACENCY_ARB 0x000b -#define GL_TRIANGLES_ADJACENCY_ARB 0x000c -#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000d -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8da8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8da9 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8da7 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8cd4 -#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 -#endif - -/* GL_ARB_half_float_pixel */ -#ifndef GL_ARB_half_float_pixel -#define GL_ARB_half_float_pixel 1 -#define GL_HALF_FLOAT_ARB 0x140b -#endif - -/* GL_ARB_half_float_vertex */ -#ifndef GL_ARB_half_float_vertex -#define GL_ARB_half_float_vertex 1 -/* No _ARB, see extension spec */ -#define GL_HALF_FLOAT 0x140b -#endif - -/* GL_ARB_map_buffer_alignment */ -#ifndef GL_ARB_map_buffer_alignment -#define GL_ARB_map_buffer_alignment 1 -#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90bc -#endif - -/* GL_ARB_map_buffer_range */ -#ifndef GL_ARB_map_buffer_range -#define GL_ARB_map_buffer_range 1 -#define GL_MAP_READ_BIT 0x0001 -#define GL_MAP_WRITE_BIT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 -#endif - -/* GL_ARB_multisample */ -#ifndef GL_ARB_multisample -#define GL_ARB_multisample 1 -#define GL_MULTISAMPLE_ARB 0x809d -#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809e -#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809f -#define GL_SAMPLE_COVERAGE_ARB 0x80a0 -#define GL_SAMPLE_BUFFERS_ARB 0x80a8 -#define GL_SAMPLES_ARB 0x80a9 -#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80aa -#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80ab -#define GL_MULTISAMPLE_BIT_ARB 0x20000000 -#endif - -/* GL_ARB_multitexture */ -#ifndef GL_ARB_multitexture -#define GL_ARB_multitexture 1 -#define GL_TEXTURE0_ARB 0x84c0 -#define GL_TEXTURE1_ARB 0x84c1 -#define GL_TEXTURE2_ARB 0x84c2 -#define GL_TEXTURE3_ARB 0x84c3 -#define GL_TEXTURE4_ARB 0x84c4 -#define GL_TEXTURE5_ARB 0x84c5 -#define GL_TEXTURE6_ARB 0x84c6 -#define GL_TEXTURE7_ARB 0x84c7 -#define GL_TEXTURE8_ARB 0x84c8 -#define GL_TEXTURE9_ARB 0x84c9 -#define GL_TEXTURE10_ARB 0x84ca -#define GL_TEXTURE11_ARB 0x84cb -#define GL_TEXTURE12_ARB 0x84cc -#define GL_TEXTURE13_ARB 0x84cd -#define GL_TEXTURE14_ARB 0x84ce -#define GL_TEXTURE15_ARB 0x84cf -#define GL_TEXTURE16_ARB 0x84d0 -#define GL_TEXTURE17_ARB 0x84d1 -#define GL_TEXTURE18_ARB 0x84d2 -#define GL_TEXTURE19_ARB 0x84d3 -#define GL_TEXTURE20_ARB 0x84d4 -#define GL_TEXTURE21_ARB 0x84d5 -#define GL_TEXTURE22_ARB 0x84d6 -#define GL_TEXTURE23_ARB 0x84d7 -#define GL_TEXTURE24_ARB 0x84d8 -#define GL_TEXTURE25_ARB 0x84d9 -#define GL_TEXTURE26_ARB 0x84da -#define GL_TEXTURE27_ARB 0x84db -#define GL_TEXTURE28_ARB 0x84dc -#define GL_TEXTURE29_ARB 0x84dd -#define GL_TEXTURE30_ARB 0x84de -#define GL_TEXTURE31_ARB 0x84df -#define GL_ACTIVE_TEXTURE_ARB 0x84e0 -#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84e1 -#define GL_MAX_TEXTURE_UNITS_ARB 0x84e2 -#endif - -/* GL_ARB_occlusion_query */ -#ifndef GL_ARB_occlusion_query -#define GL_ARB_occlusion_query 1 -#define GL_SAMPLES_PASSED_ARB 0x8914 -#define GL_QUERY_COUNTER_BITS_ARB 0x8864 -#define GL_CURRENT_QUERY_ARB 0x8865 -#define GL_QUERY_RESULT_ARB 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 -#endif - -/* GL_ARB_pixel_buffer_object */ -#ifndef GL_ARB_pixel_buffer_object -#define GL_ARB_pixel_buffer_object 1 -#define GL_PIXEL_PACK_BUFFER_ARB 0x88eb -#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88ec -#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ed -#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88ef -#endif - -/* GL_ARB_point_parameters */ -#ifndef GL_ARB_point_parameters -#define GL_ARB_point_parameters 1 -#define GL_POINT_SIZE_MIN_ARB 0x8126 -#define GL_POINT_SIZE_MAX_ARB 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 -#endif - -/* GL_ARB_point_sprite */ -#ifndef GL_ARB_point_sprite -#define GL_ARB_point_sprite 1 -#define GL_POINT_SPRITE_ARB 0x8861 -#define GL_COORD_REPLACE_ARB 0x8862 -#endif - -/* GL_ARB_provoking_vertex */ -#ifndef GL_ARB_provoking_vertex -#define GL_ARB_provoking_vertex 1 -#define GL_FIRST_VERTEX_CONVENTION 0x8e4d -#define GL_LAST_VERTEX_CONVENTION 0x8e4e -#define GL_PROVOKING_VERTEX 0x8e4f -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8e4c -#endif - -/* GL_ARB_shader_objects */ -#ifndef GL_ARB_shader_objects -#define GL_ARB_shader_objects 1 -typedef char GLcharARB; -typedef unsigned int GLhandleARB; -#define GL_PROGRAM_OBJECT_ARB 0x8b40 -#define GL_OBJECT_TYPE_ARB 0x8b4e -#define GL_OBJECT_SUBTYPE_ARB 0x8b4f -#define GL_OBJECT_DELETE_STATUS_ARB 0x8b80 -#define GL_OBJECT_COMPILE_STATUS_ARB 0x8b81 -#define GL_OBJECT_LINK_STATUS_ARB 0x8b82 -#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8b83 -#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8b84 -#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8b85 -#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8b86 -#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8b87 -#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8b88 -#define GL_SHADER_OBJECT_ARB 0x8b48 -#define GL_FLOAT_VEC2_ARB 0x8b50 -#define GL_FLOAT_VEC3_ARB 0x8b51 -#define GL_FLOAT_VEC4_ARB 0x8b52 -#define GL_INT_VEC2_ARB 0x8b53 -#define GL_INT_VEC3_ARB 0x8b54 -#define GL_INT_VEC4_ARB 0x8b55 -#define GL_BOOL_ARB 0x8b56 -#define GL_BOOL_VEC2_ARB 0x8b57 -#define GL_BOOL_VEC3_ARB 0x8b58 -#define GL_BOOL_VEC4_ARB 0x8b59 -#define GL_FLOAT_MAT2_ARB 0x8b5a -#define GL_FLOAT_MAT3_ARB 0x8b5b -#define GL_FLOAT_MAT4_ARB 0x8b5c -#define GL_SAMPLER_1D_ARB 0x8b5d -#define GL_SAMPLER_2D_ARB 0x8b5e -#define GL_SAMPLER_3D_ARB 0x8b5f -#define GL_SAMPLER_CUBE_ARB 0x8b60 -#define GL_SAMPLER_1D_SHADOW_ARB 0x8b61 -#define GL_SAMPLER_2D_SHADOW_ARB 0x8b62 -#define GL_SAMPLER_2D_RECT_ARB 0x8b63 -#define GL_SAMPELR_2D_RECT_SHADOW_ARB 0x8b64 -#endif - -/* GL_ARB_shading_language_100 */ -#ifndef GL_ARB_shading_language_100 -#define GL_ARB_shading_language_100 1 -#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8b8c -#endif - -/* GL_ARB_shadow */ -#ifndef GL_ARB_shadow -#define GL_ARB_shadow 1 -#define GL_TEXTURE_COMPARE_MODE_ARB 0x884c -#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884d -#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884e -#endif - -/* GL_ARB_sync */ -#ifndef GL_ARB_sync -#define GL_ARB_sync 1 -#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 -#define GL_OBJECT_TYPE 0x9112 -#define GL_SYNC_CONDITION 0x9113 -#define GL_SYNC_STATUS 0x9114 -#define GL_SYNC_FLAGS 0x9115 -#define GL_SYNC_FENCE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 -#define GL_UNSIGNALED 0x9118 -#define GL_SIGNALED 0x9119 -#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 -#define GL_TIMEOUT_IGNORED 0xffffffffffffffffULL -#define GL_ALREADY_SIGNALED 0x911a -#define GL_TIMEOUT_EXPIRED 0x911b -#define GL_CONDITION_SATISFIED 0x911c -#define GL_WAIT_FAILED 0x911d -#endif - -/* GL_ARB_texture_border_clamp */ -#ifndef GL_ARB_texture_border_clamp -#define GL_ARB_texture_border_clamp 1 -#define GL_CLAMP_TO_BORDER_ARB 0x812d -#endif - -/* GL_ARB_texture_compression_rgtc */ -#ifndef GL_ARB_texture_compression_rgtc -#define GL_ARB_texture_compression_rgtc 1 -#define GL_COMPRESSED_RED_RGTC1 0x8dbb -#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8dbc -#define GL_COMPRESSED_RED_GREEN_RGTC2 0x8dbd -#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2 0x8dbe -#endif - -/* GL_ARB_texture_cube_map */ -#ifndef GL_ARB_texture_cube_map -#define GL_ARB_texture_cube_map 1 -#define GL_NORMAL_MAP_ARB 0x8511 -#define GL_REFLECTION_MAP_ARB 0x8512 -#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851a -#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851b -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851c -#endif - -/* GL_ARB_texture_env_dot3 */ -#ifndef GL_ARB_texture_env_dot3 -#define GL_ARB_texture_env_dot3 1 -#define GL_DOT3_RGB_ARB 0x86ae -#define GL_DOT3_RGBA_ARB 0x86af -#endif - -/* GL_ARB_texture_float */ -#ifndef GL_ARB_texture_float -#define GL_ARB_texture_float 1 -#define GL_RGBA32F_ARB 0x8814 -#define GL_RGB32F_ARB 0x8815 -#define GL_RGBA16F_ARB 0x881a -#define GL_RGB16F_ARB 0x881b -#endif - -/* GL_ARB_texture_mirrored_repeat */ -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_ARB_texture_mirrored_repeat 1 -#define GL_MIRRORED_REPEAT_ARB 0x8370 -#endif - -/* GL_ARB_texture_rectangle */ -#ifndef GL_ARB_texture_rectangle -#define GL_ARB_texture_rectangle 1 -#define GL_TEXTURE_RECTANGLE_ARB 0x84f5 -#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84f6 -#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84f7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84f8 -#define GL_SAMPLER_2D_RECT_ARB 0x8b63 -#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8b64 -#endif - -/* GL_ARB_texture_rg */ -#ifndef GL_ARB_texture_rg -#define GL_ARB_texture_rg 1 -#define GL_RG 0x8227 -#define GL_RG_INTEGER 0x8228 -#define GL_R8 0x8229 -#define GL_R16 0x822a -#define GL_RG8 0x822b -#define GL_RG16 0x822c -#define GL_R16F 0x822d -#define GL_R32F 0x822e -#define GL_RG16F 0x822f -#define GL_RG32F 0x8230 -#define GL_R8I 0x8231 -#define GL_R8UI 0x8232 -#define GL_R16I 0x8233 -#define GL_R16UI 0x8234 -#define GL_R32I 0x8235 -#define GL_R32UI 0x8236 -#define GL_RG8I 0x8237 -#define GL_RG8UI 0x8238 -#define GL_RG16I 0x8239 -#define GL_RG16UI 0x823a -#define GL_RG32I 0x823b -#define GL_RG32UI 0x823c -#endif - -/* GL_ARB_vertex_blend */ -#ifndef GL_ARB_vertex_blend -#define GL_ARB_vertex_blend 1 -#define GL_MAX_VERTEX_UNITS_ARB 0x86a4 -#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86a5 -#define GL_WEIGHT_SUM_UNITY_ARB 0x86a6 -#define GL_VERTEX_BLEND_ARB 0x86a7 -#define GL_CURRENT_WEIGHT_ARB 0x86a8 -#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86a9 -#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86aa -#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86ab -#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86ac -#define GL_WEIGHT_ARRAY_ARB 0x86ad -#define GL_MODELVIEW0_ARB 0x1700 -#define GL_MODELVIEW1_ARB 0x850a -#define GL_MODELVIEW2_ARB 0x8722 -#define GL_MODELVIEW3_ARB 0x8723 -#define GL_MODELVIEW4_ARB 0x8724 -#define GL_MODELVIEW5_ARB 0x8725 -#define GL_MODELVIEW6_ARB 0x8726 -#define GL_MODELVIEW7_ARB 0x8727 -#define GL_MODELVIEW8_ARB 0x8728 -#define GL_MODELVIEW9_ARB 0x8729 -#define GL_MODELVIEW10_ARB 0x872a -#define GL_MODELVIEW11_ARB 0x872b -#define GL_MODELVIEW12_ARB 0x872c -#define GL_MODELVIEW13_ARB 0x872d -#define GL_MODELVIEW14_ARB 0x872e -#define GL_MODELVIEW15_ARB 0x872f -#define GL_MODELVIEW16_ARB 0x8730 -#define GL_MODELVIEW17_ARB 0x8731 -#define GL_MODELVIEW18_ARB 0x8732 -#define GL_MODELVIEW19_ARB 0x8733 -#define GL_MODELVIEW20_ARB 0x8734 -#define GL_MODELVIEW21_ARB 0x8735 -#define GL_MODELVIEW22_ARB 0x8736 -#define GL_MODELVIEW23_ARB 0x8737 -#define GL_MODELVIEW24_ARB 0x8738 -#define GL_MODELVIEW25_ARB 0x8739 -#define GL_MODELVIEW26_ARB 0x873a -#define GL_MODELVIEW27_ARB 0x873b -#define GL_MODELVIEW28_ARB 0x873c -#define GL_MODELVIEW29_ARB 0x873d -#define GL_MODELVIEW30_ARB 0x873e -#define GL_MODELVIEW31_ARB 0x873f -#endif - -/* GL_ARB_vertex_buffer_object */ -#ifndef GL_ARB_vertex_buffer_object -#define GL_ARB_vertex_buffer_object 1 -#define GL_BUFFER_SIZE_ARB 0x8764 -#define GL_BUFFER_USAGE_ARB 0x8765 -#define GL_ARRAY_BUFFER_ARB 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 -#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889a -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889b -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889c -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889d -#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889e -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889f -#define GL_READ_ONLY_ARB 0x88b8 -#define GL_WRITE_ONLY_ARB 0x88b9 -#define GL_READ_WRITE_ARB 0x88ba -#define GL_BUFFER_ACCESS_ARB 0x88bb -#define GL_BUFFER_MAPPED_ARB 0x88bc -#define GL_BUFFER_MAP_POINTER_ARB 0x88bd -#define GL_STREAM_DRAW_ARB 0x88e0 -#define GL_STREAM_READ_ARB 0x88e1 -#define GL_STREAM_COPY_ARB 0x88e2 -#define GL_STATIC_DRAW_ARB 0x88e4 -#define GL_STATIC_READ_ARB 0x88e5 -#define GL_STATIC_COPY_ARB 0x88e6 -#define GL_DYNAMIC_DRAW_ARB 0x88e8 -#define GL_DYNAMIC_READ_ARB 0x88e9 -#define GL_DYNAMIC_COPY_ARB 0x88ea -#endif - -/* GL_ARB_vertex_program */ -#ifndef GL_ARB_vertex_program -#define GL_ARB_vertex_program 1 -#define GL_VERTEX_PROGRAM_ARB 0x8620 -#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 -#define GL_COLOR_SUM_ARB 0x8458 -#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886a -#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 -#define GL_PROGRAM_LENGTH_ARB 0x8627 -#define GL_PROGRAM_FORMAT_ARB 0x8876 -#define GL_PROGRAM_BINDING_ARB 0x8677 -#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88a0 -#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88a1 -#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88a2 -#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88a3 -#define GL_PROGRAM_TEMPORARIES_ARB 0x88a4 -#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88a5 -#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88a6 -#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88a7 -#define GL_PROGRAM_PARAMETERS_ARB 0x88a8 -#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88a9 -#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88aa -#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88ab -#define GL_PROGRAM_ATTRIBS_ARB 0x88ac -#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88ad -#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88ae -#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88af -#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88b0 -#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88b1 -#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88b2 -#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88b3 -#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88b4 -#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88b5 -#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88b6 -#define GL_PROGRAM_STRING_ARB 0x8628 -#define GL_PROGRAM_ERROR_POSITION_ARB 0x864b -#define GL_CURRENT_MATRIX_ARB 0x8641 -#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88b7 -#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 -#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 -#define GL_MAX_PROGRAM_MATRICES_ARB 0x862f -#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862e -#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 -#define GL_MATRIX0_ARB 0x88c0 -#define GL_MATRIX1_ARB 0x88c1 -#define GL_MATRIX2_ARB 0x88c2 -#define GL_MATRIX3_ARB 0x88c3 -#define GL_MATRIX4_ARB 0x88c4 -#define GL_MATRIX5_ARB 0x88c5 -#define GL_MATRIX6_ARB 0x88c6 -#define GL_MATRIX7_ARB 0x88c7 -#define GL_MATRIX8_ARB 0x88c8 -#define GL_MATRIX9_ARB 0x88c9 -#define GL_MATRIX10_ARB 0x88ca -#define GL_MATRIX11_ARB 0x88cb -#define GL_MATRIX12_ARB 0x88cc -#define GL_MATRIX13_ARB 0x88cd -#define GL_MATRIX14_ARB 0x88ce -#define GL_MATRIX15_ARB 0x88cf -#define GL_MATRIX16_ARB 0x88d0 -#define GL_MATRIX17_ARB 0x88d1 -#define GL_MATRIX18_ARB 0x88d2 -#define GL_MATRIX19_ARB 0x88d3 -#define GL_MATRIX20_ARB 0x88d4 -#define GL_MATRIX21_ARB 0x88d5 -#define GL_MATRIX22_ARB 0x88d6 -#define GL_MATRIX23_ARB 0x88d7 -#define GL_MATRIX24_ARB 0x88d8 -#define GL_MATRIX25_ARB 0x88d9 -#define GL_MATRIX26_ARB 0x88da -#define GL_MATRIX27_ARB 0x88db -#define GL_MATRIX28_ARB 0x88dc -#define GL_MATRIX29_ARB 0x88dd -#define GL_MATRIX30_ARB 0x88de -#define GL_MATRIX31_ARB 0x88df -#endif - -/* GL_ARB_vertex_shader */ -#ifndef GL_ARB_vertex_shader -#define GL_ARB_vertex_shader 1 -#define GL_VERTEX_SHADER_ARB 0x8b31 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8b4a -#define GL_MAX_VARYING_FLOATS_ARB 0x8b4b -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8b4c -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8b4d -#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8b89 -#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8b8a -#endif - -/* GL_ATI_fragment_shader */ -#ifndef GL_ATI_fragment_shader -#define GL_ATI_fragment_shader 1 -#define GL_FRAGMENT_SHADER_ATI 0x8920 -#define GL_REG_0_ATI 0x8921 -#define GL_REG_1_ATI 0x8922 -#define GL_REG_2_ATI 0x8923 -#define GL_REG_3_ATI 0x8924 -#define GL_REG_4_ATI 0x8925 -#define GL_REG_5_ATI 0x8926 -#define GL_CON_0_ATI 0x8941 -#define GL_CON_1_ATI 0x8942 -#define GL_CON_2_ATI 0x8943 -#define GL_CON_3_ATI 0x8944 -#define GL_CON_4_ATI 0x8945 -#define GL_CON_5_ATI 0x8946 -#define GL_CON_6_ATI 0x8947 -#define GL_CON_7_ATI 0x8948 -#define GL_MOV_ATI 0x8961 -#define GL_ADD_ATI 0x8963 -#define GL_MUL_ATI 0x8964 -#define GL_SUB_ATI 0x8965 -#define GL_DOT3_ATI 0x8966 -#define GL_DOT4_ATI 0x8967 -#define GL_MAD_ATI 0x8968 -#define GL_LERP_ATI 0x8969 -#define GL_CND_ATI 0x896a -#define GL_CND0_ATI 0x896b -#define GL_DOT2_ADD_ATI 0x896c -#define GL_SECONDARY_INTERPOLATOR_ATI 0x896d -#define GL_SWIZZLE_STR_ATI 0x8976 -#define GL_SWIZZLE_STQ_ATI 0x8977 -#define GL_SWIZZLE_STR_DR_ATI 0x8978 -#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 -#define GL_RED_BIT_ATI 0x00000001 -#define GL_GREEN_BIT_ATI 0x00000002 -#define GL_BLUE_BIT_ATI 0x00000004 -#define GL_2X_BIT_ATI 0x00000001 -#define GL_4X_BIT_ATI 0x00000002 -#define GL_8X_BIT_ATI 0x00000004 -#define GL_HALF_BIT_ATI 0x00000008 -#define GL_QUARTER_BIT_ATI 0x00000010 -#define GL_EIGHTH_BIT_ATI 0x00000020 -#define GL_SATURATE_BIT_ATI 0x00000040 -#define GL_COMP_BIT_ATI 0x00000002 -#define GL_NEGATE_BIT_ATI 0x00000004 -#define GL_BIAS_BIT_ATI 0x00000008 -#endif - -/* GL_ATI_separate_stencil */ -#ifndef GL_ATI_separate_stencil -#define GL_ATI_separate_stencil 1 -#define GL_STENCIL_BACK_FUNC_ATI 0x8800 -#define GL_STENCIL_BACK_FAIL_ATI 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 -#endif - -/* GL_ATI_texture_compression_3dc */ -#ifndef GL_ATI_texture_compression_3dc -#define GL_ATI_texture_compression_3dc 1 -#define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 -#endif - -/* GL_ATI_texture_env_combine3 */ -#ifndef GL_ATI_texture_env_combine3 -#define GL_ATI_texture_env_combine3 1 -#define GL_MODULATE_ADD_ATI 0x8744 -#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 -#define GL_MODULATE_SUBTRACT_ATI 0x8746 -/* #define ONE */ -/* #define ZERO */ -#endif - -/* GL_ATI_texture_mirror_once */ -#ifndef GL_ATI_texture_mirror_once -#define GL_ATI_texture_mirror_once 1 -#define GL_MIRROR_CLAMP_ATI 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 -#endif - -/* GL_EXT_blend_color */ -#ifndef GL_EXT_blend_color -#define GL_EXT_blend_color 1 -#define GL_CONSTANT_COLOR_EXT 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 -#define GL_CONSTANT_ALPHA_EXT 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 -#define GL_BLEND_COLOR_EXT 0x8005 -#endif - -/* GL_EXT_blend_func_separate */ -#ifndef GL_EXT_blend_func_separate -#define GL_EXT_blend_func_separate 1 -#define GL_BLEND_DST_RGB_EXT 0x80c8 -#define GL_BLEND_SRC_RGB_EXT 0x80c9 -#define GL_BLEND_DST_ALPHA_EXT 0x80ca -#define GL_BLEND_SRC_ALPHA_EXT 0x80cb -#endif - -/* GL_EXT_blend_minmax */ -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -#define GL_FUNC_ADD_EXT 0x8006 -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#define GL_BLEND_EQUATION_EXT 0x8009 -#endif - -/* GL_EXT_blend_subtract */ -#ifndef GL_EXT_blend_subtract -#define GL_EXT_blend_subtract 1 -#define GL_FUNC_SUBTRACT_EXT 0x800a -#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800b -#endif - -/* GL_EXT_depth_bounds_test */ -#ifndef GL_EXT_depth_bounds_test -#define GL_EXT_depth_bounds_test 1 -#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 -#define GL_DEPTH_BOUNDS_EXT 0x8891 -#endif - -/* GL_EXT_fog_coord */ -#ifndef GL_EXT_fog_coord -#define GL_EXT_fog_coord 1 -#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 -#define GL_FOG_COORDINATE_EXT 0x8451 -#define GL_FRAGMENT_DEPTH_EXT 0x8452 -#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 -#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 -#endif - -/* GL_EXT_framebuffer_blit */ -#ifndef GL_EXT_framebuffer_blit -#define GL_EXT_framebuffer_blit 1 -#define GL_READ_FRAMEBUFFER_EXT 0x8ca8 -#define GL_DRAW_FRAMEBUFFER_EXT 0x8ca9 -#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8ca6 -#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8caa -#endif - -/* GL_EXT_framebuffer_multisample */ -#ifndef GL_EXT_framebuffer_multisample -#define GL_EXT_framebuffer_multisample 1 -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8cab -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8d56 -#define GL_MAX_SAMPLES_EXT 0x8d57 -#endif - -/* GL_EXT_framebuffer_object */ -#ifndef GL_EXT_framebuffer_object -#define GL_EXT_framebuffer_object 1 -#define GL_FRAMEBUFFER_EXT 0x8d40 -#define GL_RENDERBUFFER_EXT 0x8d41 -#define GL_STENCIL_INDEX1_EXT 0x8d46 -#define GL_STENCIL_INDEX4_EXT 0x8d47 -#define GL_STENCIL_INDEX8_EXT 0x8d48 -#define GL_STENCIL_INDEX16_EXT 0x8d49 -#define GL_RENDERBUFFER_WIDTH_EXT 0x8d42 -#define GL_RENDERBUFFER_HEIGHT_EXT 0x8d43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8d44 -#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8d50 -#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8d51 -#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8d52 -#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8d53 -#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8d54 -#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8d55 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8cd0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8cd1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8cd2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8cd3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8cd4 -#define GL_COLOR_ATTACHMENT0_EXT 0x8ce0 -#define GL_COLOR_ATTACHMENT1_EXT 0x8ce1 -#define GL_COLOR_ATTACHMENT2_EXT 0x8ce2 -#define GL_COLOR_ATTACHMENT3_EXT 0x8ce3 -#define GL_COLOR_ATTACHMENT4_EXT 0x8ce4 -#define GL_COLOR_ATTACHMENT5_EXT 0x8ce5 -#define GL_COLOR_ATTACHMENT6_EXT 0x8ce6 -#define GL_COLOR_ATTACHMENT7_EXT 0x8ce7 -#define GL_COLOR_ATTACHMENT8_EXT 0x8ce8 -#define GL_COLOR_ATTACHMENT9_EXT 0x8ce9 -#define GL_COLOR_ATTACHMENT10_EXT 0x8cea -#define GL_COLOR_ATTACHMENT11_EXT 0x8ceb -#define GL_COLOR_ATTACHMENT12_EXT 0x8cec -#define GL_COLOR_ATTACHMENT13_EXT 0x8ced -#define GL_COLOR_ATTACHMENT14_EXT 0x8cee -#define GL_COLOR_ATTACHMENT15_EXT 0x8cef -#define GL_DEPTH_ATTACHMENT_EXT 0x8d00 -#define GL_STENCIL_ATTACHMENT_EXT 0x8d20 -#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8cd5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8cd6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8cd7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8cd9 -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8cda -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8cdb -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8cdc -#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8cdd -#define GL_FRAMEBUFFER_BINDING_EXT 0x8ca6 -#define GL_RENDERBUFFER_BINDING_EXT 0x8ca7 -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8cdF -#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84e8 -#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 -#endif - -/* GL_EXT_gpu_program_parameters */ -#ifndef GL_EXT_gpu_program_parameters -#define GL_EXT_gpu_program_parameters 1 -#endif - -/* GL_EXT_gpu_shader4 */ -#ifndef GL_EXT_gpu_shader4 -#define GL_EXT_gpu_shader4 1 -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88fd -#define GL_SAMPLER_1D_ARRAY_EXT 0x8dc0 -#define GL_SAMPLER_2D_ARRAY_EXT 0x8dc1 -#define GL_SAMPLER_BUFFER_EXT 0x8dc2 -#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8dc3 -#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8dc4 -#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8dc5 -#define GL_UNSIGNED_INT_VEC2_EXT 0x8dc6 -#define GL_UNSIGNED_INT_VEC3_EXT 0x8dc7 -#define GL_UNSIGNED_INT_VEC4_EXT 0x8dc8 -#define GL_INT_SAMPLER_1D_EXT 0x8dc9 -#define GL_INT_SAMPLER_2D_EXT 0x8dca -#define GL_INT_SAMPLER_3D_EXT 0x8dcb -#define GL_INT_SAMPLER_CUBE_EXT 0x8dcc -#define GL_INT_SAMPLER_2D_RECT_EXT 0x8dcd -#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8dce -#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8dcf -#define GL_INT_SAMPLER_BUFFER_EXT 0x8dd0 -#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8dd1 -#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8dd2 -#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8dd3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8dd4 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8dd5 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8dd6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8dd7 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8dd8 -#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 -#endif - -/* GL_EXT_packed_depth_stencil */ -#ifndef GL_EXT_packed_depth_stencil -#define GL_EXT_packed_depth_stencil 1 -#define GL_DEPTH_STENCIL_EXT 0x84f9 -#define GL_UNSIGNED_INT_24_8_EXT 0x84fa -#define GL_DEPTH24_STENCIL8_EXT 0x88f0 -#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88f1 -#endif - -/* GL_EXT_paletted_texture */ -#ifndef GL_EXT_paletted_texture -#define GL_EXT_paletted_texture 1 -#define GL_COLOR_INDEX1_EXT 0x80e2 -#define GL_COLOR_INDEX2_EXT 0x80e3 -#define GL_COLOR_INDEX4_EXT 0x80e4 -#define GL_COLOR_INDEX8_EXT 0x80e5 -#define GL_COLOR_INDEX12_EXT 0x80e6 -#define GL_COLOR_INDEX16_EXT 0x80e7 -#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ed -#endif - -/* GL_EXT_point_parameters */ -#ifndef GL_EXT_point_parameters -#define GL_EXT_point_parameters 1 -#define GL_POINT_SIZE_MIN_EXT 0x8126 -#define GL_POINT_SIZE_MAX_EXT 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 -#define GL_DISTANCE_ATTENUATION_EXT 0x8129 -#endif - -/* GL_EXT_provoking_vertex */ -#ifndef GL_EXT_provoking_vertex -#define GL_EXT_provoking_vertex 1 -#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8e4d -#define GL_LAST_VERTEX_CONVENTION_EXT 0x8e4e -#define GL_PROVOKING_VERTEX_EXT 0x8e4f -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8e4c -#endif - -/* GL_EXT_secondary_color */ -#ifndef GL_EXT_secondary_color -#define GL_EXT_secondary_color 1 -#define GL_COLOR_SUM_EXT 0x8458 -#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845a -#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845b -#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845c -#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845d -#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845e -#endif - -/* GL_EXT_stencil_two_side */ -#ifndef GL_EXT_stencil_two_side -#define GL_EXT_stencil_two_side 1 -#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 -#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 -#endif - -/* GL_EXT_stencil_wrap */ -#ifndef GL_EXT_stencil_wrap -#define GL_EXT_stencil_wrap 1 -#define GL_INCR_WRAP_EXT 0x8507 -#define GL_DECR_WRAP_EXT 0x8508 -#endif - -/* GL_EXT_texture3D */ -#ifndef GL_EXT_texture3D -#define GL_EXT_texture3D 1 -#define GL_PACK_SKIP_IMAGES_EXT 0x806b -#define GL_PACK_IMAGE_HEIGHT_EXT 0x806c -#define GL_UNPACK_SKIP_IMAGES_EXT 0x806d -#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806e -#define GL_TEXTURE_3D_EXT 0x806f -#define GL_PROXY_TEXTURE_3D_EXT 0x8070 -#define GL_TEXTURE_DEPTH_EXT 0x8071 -#define GL_TEXTURE_WRAP_R_EXT 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 -#endif - -/* GL_EXT_texture_compression_rgtc */ -#ifndef GL_EXT_texture_compression_rgtc -#define GL_EXT_texture_compression_rgtc 1 -#define GL_COMPRESSED_RED_RGTC1_EXT 0x8dbb -#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8dbc -#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8dbd -#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8dbe -#endif - -/* GL_EXT_texture_compression_s3tc */ -#ifndef GL_EXT_texture_compression_s3tc -#define GL_EXT_texture_compression_s3tc 1 -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83f0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83f1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83f2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83f3 -#endif - -/* GL_EXT_texture_env_combine */ -#ifndef GL_EXT_texture_env_combine -#define GL_EXT_texture_env_combine 1 -#define GL_COMBINE_EXT 0x8570 -#define GL_COMBINE_RGB_EXT 0x8571 -#define GL_COMBINE_ALPHA_EXT 0x8572 -#define GL_RGB_SCALE_EXT 0x8573 -#define GL_ADD_SIGNED_EXT 0x8574 -#define GL_INTERPOLATE_EXT 0x8575 -#define GL_SUBTRACT_EXT 0x84e7 -#define GL_CONSTANT_EXT 0x8576 -#define GL_PRIMARY_COLOR_EXT 0x8577 -#define GL_PREVIOUS_EXT 0x8578 -#define GL_SOURCE0_RGB_EXT 0x8580 -#define GL_SOURCE1_RGB_EXT 0x8581 -#define GL_SOURCE2_RGB_EXT 0x8582 -#define GL_SOURCE3_RGB_EXT 0x8583 -#define GL_SOURCE4_RGB_EXT 0x8584 -#define GL_SOURCE5_RGB_EXT 0x8585 -#define GL_SOURCE6_RGB_EXT 0x8586 -#define GL_SOURCE7_RGB_EXT 0x8587 -#define GL_SOURCE0_ALPHA_EXT 0x8588 -#define GL_SOURCE1_ALPHA_EXT 0x8589 -#define GL_SOURCE2_ALPHA_EXT 0x858a -#define GL_SOURCE3_ALPHA_EXT 0x858b -#define GL_SOURCE4_ALPHA_EXT 0x858c -#define GL_SOURCE5_ALPHA_EXT 0x858d -#define GL_SOURCE6_ALPHA_EXT 0x858e -#define GL_SOURCE7_ALPHA_EXT 0x858f -#define GL_OPERAND0_RGB_EXT 0x8590 -#define GL_OPERAND1_RGB_EXT 0x8591 -#define GL_OPERAND2_RGB_EXT 0x8592 -#define GL_OPERAND3_RGB_EXT 0x8593 -#define GL_OPERAND4_RGB_EXT 0x8594 -#define GL_OPERAND5_RGB_EXT 0x8595 -#define GL_OPERAND6_RGB_EXT 0x8596 -#define GL_OPERAND7_RGB_EXT 0x8597 -#define GL_OPERAND0_ALPHA_EXT 0x8598 -#define GL_OPERAND1_ALPHA_EXT 0x8599 -#define GL_OPERAND2_ALPHA_EXT 0x859a -#define GL_OPERAND3_ALPHA_EXT 0x859b -#define GL_OPERAND4_ALPHA_EXT 0x859c -#define GL_OPERAND5_ALPHA_EXT 0x859d -#define GL_OPERAND6_ALPHA_EXT 0x859e -#define GL_OPERAND7_ALPHA_EXT 0x859f -#endif - -/* GL_EXT_texture_env_dot3 */ -#ifndef GL_EXT_texture_env_dot3 -#define GL_EXT_texture_env_dot3 1 -#define GL_DOT3_RGB_EXT 0x8740 -#define GL_DOT3_RGBA_EXT 0x8741 -#endif - -/* GL_EXT_texture_filter_anisotropic */ -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84fe -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84ff -#endif - -/* GL_EXT_texture_lod_bias */ -#ifndef GL_EXT_texture_lod_bias -#define GL_EXT_texture_lod_bias 1 -#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84fd -#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 -#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 -#endif - -/* GL_EXT_texture_sRGB */ -#ifndef GL_EXT_texture_sRGB -#define GL_EXT_texture_sRGB 1 -#define GL_SRGB_EXT 0x8c40 -#define GL_SRGB8_EXT 0x8c41 -#define GL_SRGB_ALPHA_EXT 0x8c42 -#define GL_SRGB8_ALPHA8_EXT 0x8c43 -#define GL_SLUMINANCE_ALPHA_EXT 0x8c44 -#define GL_SLUMINANCE8_ALPHA8_EXT 0x8c45 -#define GL_SLUMINANCE_EXT 0x8c46 -#define GL_SLUMINANCE8_EXT 0x8c47 -#define GL_COMPRESSED_SRGB_EXT 0x8c48 -#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8c49 -#define GL_COMPRESSED_SLUMINANCE_EXT 0x8c4a -#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8c4b -#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8c4c -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8c4d -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8c4e -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8c4f -#endif - -/* GL_EXT_texture_sRGB_decode */ -#ifndef GL_EXT_texture_sRGB_decode -#define GL_EXT_texture_sRGB_decode 1 -#define GL_TEXTURE_SRGB_DECODE_EXT 0x8a48 -#define GL_DECODE_EXT 0x8a49 -#define GL_SKIP_DECODE_EXT 0x8a4a -#endif - -/* GL_NV_depth_clamp */ -#ifndef GL_NV_depth_clamp -#define GL_NV_depth_clamp 1 -#define GL_DEPTH_CLAMP_NV 0x864f -#endif - -/* GL_NV_fence */ -#ifndef GL_NV_fence -#define GL_NV_fence 1 -#define GL_ALL_COMPLETED_NV 0x84f2 -#define GL_FENCE_STATUS_NV 0x84f3 -#define GL_FENCE_CONDITION_NV 0x84f4 -#endif - -/* GL_NV_fog_distance */ -#ifndef GL_NV_fog_distance -#define GL_NV_fog_distance 1 -#define GL_FOG_DISTANCE_MODE_NV 0x855a -#define GL_EYE_RADIAL_NV 0x855b -#define GL_EYE_PLANE_ABSOLUTE_NV 0x855c -/* reuse GL_EYE_PLANE */ -#endif - -/* GL_NV_half_float */ -#ifndef GL_NV_half_float -#define GL_NV_half_float 1 -typedef unsigned short GLhalfNV; -#define GL_HALF_FLOAT_NV 0x140b -#endif - -/* GL_NV_light_max_exponent */ -#ifndef GL_NV_light_max_exponent -#define GL_NV_light_max_exponent 1 -#define GL_MAX_SHININESS_NV 0x8504 -#define GL_MAX_SPOT_EXPONENT_NV 0x8505 -#endif - -/* GL_NV_point_sprite */ -#ifndef GL_NV_point_sprite -#define GL_NV_point_sprite 1 -#define GL_NV_POINT_SPRITE_NV 0x8861 -#define GL_NV_COORD_REPLACE_NV 0x8862 -#define GL_NV_POINT_SPRITE_R_MODE_NV 0x8863 -#endif - -/* GL_NV_register_combiners */ -#ifndef GL_NV_register_combiners -#define GL_NV_register_combiners 1 -#define GL_REGISTER_COMBINERS_NV 0x8522 -#define GL_VARIABLE_A_NV 0x8523 -#define GL_VARIABLE_B_NV 0x8524 -#define GL_VARIABLE_C_NV 0x8525 -#define GL_VARIABLE_D_NV 0x8526 -#define GL_VARIABLE_E_NV 0x8527 -#define GL_VARIABLE_F_NV 0x8528 -#define GL_VARIABLE_G_NV 0x8529 -#define GL_CONSTANT_COLOR0_NV 0x852a -#define GL_CONSTANT_COLOR1_NV 0x852b -#define GL_PRIMARY_COLOR_NV 0x852c -#define GL_SECONDARY_COLOR_NV 0x852d -#define GL_SPARE0_NV 0x852e -#define GL_SPARE1_NV 0x852f -#define GL_DISCARD_NV 0x8530 -#define GL_E_TIMES_F_NV 0x8531 -#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 -#define GL_UNSIGNED_IDENTITY_NV 0x8536 -#define GL_UNSIGNED_INVERT_NV 0x8537 -#define GL_EXPAND_NORMAL_NV 0x8538 -#define GL_EXPAND_NEGATE_NV 0x8539 -#define GL_HALF_BIAS_NORMAL_NV 0x853a -#define GL_HALF_BIAS_NEGATE_NV 0x853b -#define GL_SIGNED_IDENTITY_NV 0x853c -#define GL_SIGNED_NEGATE_NV 0x853d -#define GL_SCALE_BY_TWO_NV 0x853e -#define GL_SCALE_BY_FOUR_NV 0x853f -#define GL_SCALE_BY_ONE_HALF_NV 0x8540 -#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 -#define GL_COMBINER_INPUT_NV 0x8542 -#define GL_COMBINER_MAPPING_NV 0x8543 -#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 -#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 -#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 -#define GL_COMBINER_MUX_SUM_NV 0x8547 -#define GL_COMBINER_SCALE_NV 0x8548 -#define GL_COMBINER_BIAS_NV 0x8549 -#define GL_COMBINER_AB_OUTPUT_NV 0x854a -#define GL_COMBINER_CD_OUTPUT_NV 0x854b -#define GL_COMBINER_SUM_OUTPUT_NV 0x854c -#define GL_MAX_GENERAL_COMBINERS_NV 0x854d -#define GL_NUM_GENERAL_COMBINERS_NV 0x854e -#define GL_COLOR_SUM_CLAMP_NV 0x854f -#define GL_COMBINER0_NV 0x8550 -#define GL_COMBINER1_NV 0x8551 -#define GL_COMBINER2_NV 0x8552 -#define GL_COMBINER3_NV 0x8553 -#define GL_COMBINER4_NV 0x8554 -#define GL_COMBINER5_NV 0x8555 -#define GL_COMBINER6_NV 0x8556 -#define GL_COMBINER7_NV 0x8557 -/* reuse GL_TEXTURE0_ARB */ -/* reuse GL_TEXTURE1_ARB */ -/* reuse GL_ZERO */ -/* reuse GL_NONE */ -/* reuse GL_FOG */ -#endif - -/* GL_NV_register_combiners2 */ -#ifndef GL_NV_register_combiners2 -#define GL_NV_register_combiners2 1 -#define GL_PER_STAGE_CONSTANTS_NV 0x8535 -#endif - -/* GL_NV_texgen_reflection */ -#ifndef GL_NV_texgen_reflection -#define GL_NV_texgen_reflection 1 -#define GL_NORMAL_MAP_NV 0x8511 -#define GL_REFLECTION_MAP_NV 0x8512 -#endif - -/* GL_NV_texture_env_combine4 */ -#ifndef GL_NV_texture_env_combine4 -#define GL_NV_texture_env_combine4 1 -#define GL_COMBINE4_NV 0x8503 -#define GL_SOURCE3_RGB_NV 0x8583 -#define GL_SOURCE3_ALPHA_NV 0x858b -#define GL_OPERAND3_RGB_NV 0x8593 -#define GL_OPERAND3_ALPHA_NV 0x859b -#endif - -/* GL_NV_texture_shader */ -#ifndef GL_NV_texture_shader -#define GL_NV_texture_shader 1 -#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864c -#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864d -#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864e -#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86d9 -#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86da -#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86db -#define GL_DSDT_MAG_INTENSITY_NV 0x86dc -#define GL_SHADER_CONSISTENT_NV 0x86dd -#define GL_TEXTURE_SHADER_NV 0x86de -#define GL_SHADER_OPERATION_NV 0x86df -#define GL_CULL_MODES_NV 0x86e0 -#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86e1 -#define GL_OFFSET_TEXTURE_SCALE_NV 0x86e2 -#define GL_OFFSET_TEXTURE_BIAS_NV 0x86e3 -#define GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV -#define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV -#define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV -#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86e4 -#define GL_CONST_EYE_NV 0x86e5 -#define GL_PASS_THROUGH_NV 0x86e6 -#define GL_CULL_FRAGMENT_NV 0x86e7 -#define GL_OFFSET_TEXTURE_2D_NV 0x86e8 -#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86e9 -#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86ea -#define GL_DOT_PRODUCT_NV 0x86ec -#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ed -#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86ee -#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86f0 -#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86f1 -#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86f2 -#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86f3 -#define GL_HILO_NV 0x86f4 -#define GL_DSDT_NV 0x86f5 -#define GL_DSDT_MAG_NV 0x86f6 -#define GL_DSDT_MAG_VIB_NV 0x86f7 -#define GL_HILO16_NV 0x86f8 -#define GL_SIGNED_HILO_NV 0x86f9 -#define GL_SIGNED_HILO16_NV 0x86fa -#define GL_SIGNED_RGBA_NV 0x86fb -#define GL_SIGNED_RGBA8_NV 0x86fc -#define GL_SIGNED_RGB_NV 0x86fe -#define GL_SIGNED_RGB8_NV 0x86ff -#define GL_SIGNED_LUMINANCE_NV 0x8701 -#define GL_SIGNED_LUMINANCE8_NV 0x8702 -#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 -#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 -#define GL_SIGNED_ALPHA_NV 0x8705 -#define GL_SIGNED_ALPHA8_NV 0x8706 -#define GL_SIGNED_INTENSITY_NV 0x8707 -#define GL_SIGNED_INTENSITY8_NV 0x8708 -#define GL_DSDT8_NV 0x8709 -#define GL_DSDT8_MAG8_NV 0x870a -#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870b -#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870c -#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870d -#define GL_HI_SCALE_NV 0x870e -#define GL_LO_SCALE_NV 0x870f -#define GL_DS_SCALE_NV 0x8710 -#define GL_DT_SCALE_NV 0x8711 -#define GL_MAGNITUDE_SCALE_NV 0x8712 -#define GL_VIBRANCE_SCALE_NV 0x8713 -#define GL_HI_BIAS_NV 0x8714 -#define GL_LO_BIAS_NV 0x8715 -#define GL_DS_BIAS_NV 0x8716 -#define GL_DT_BIAS_NV 0x8717 -#define GL_MAGNITUDE_BIAS_NV 0x8718 -#define GL_VIBRANCE_BIAS_NV 0x8719 -#define GL_TEXTURE_BORDER_VALUES_NV 0x871a -#define GL_TEXTURE_HI_SIZE_NV 0x871b -#define GL_TEXTURE_LO_SIZE_NV 0x871c -#define GL_TEXTURE_DS_SIZE_NV 0x871d -#define GL_TEXTURE_DT_SIZE_NV 0x871e -#define GL_TEXTURE_MAG_SIZE_NV 0x871f -#endif - -/* GL_NV_texture_shader2 */ -#ifndef GL_NV_texture_shader2 -#define GL_NV_texture_shader2 1 -#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86ef -#endif - -/* GL_NV_vertex_program2_option */ -#ifndef GL_NV_vertex_program2_option -#define GL_NV_vertex_program2_option 1 -#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88f4 -#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88f5 -#endif - -/* GL_SGIS_generate_mipmap */ -#ifndef GL_SGIS_generate_mipmap -#define GL_SGIS_generate_mipmap 1 -#define GL_GENERATE_MIPMAP_SGIS 0x8191 -#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 -#endif - #include "wine/wglext.h" #define GL_EXT_FUNCS_GEN \ @@ -2454,6 +186,9 @@ typedef unsigned short GLhalfNV; USE_GL_FUNC(glDrawElementsInstancedBaseVertex) \ USE_GL_FUNC(glDrawRangeElementsBaseVertex) \ USE_GL_FUNC(glMultiDrawElementsBaseVertex) \ + /* GL_ARB_draw_instanced */ \ + USE_GL_FUNC(glDrawArraysInstancedARB) \ + USE_GL_FUNC(glDrawElementsInstancedARB) \ /* GL_ARB_framebuffer_object */ \ USE_GL_FUNC(glBindFramebuffer) \ USE_GL_FUNC(glBindRenderbuffer) \ @@ -2480,6 +215,8 @@ typedef unsigned short GLhalfNV; USE_GL_FUNC(glFramebufferTextureFaceARB) \ USE_GL_FUNC(glFramebufferTextureLayerARB) \ USE_GL_FUNC(glProgramParameteriARB) \ + /* GL_ARB_instanced_arrays */ \ + USE_GL_FUNC(glVertexAttribDivisorARB) \ /* GL_ARB_map_buffer_range */ \ USE_GL_FUNC(glFlushMappedBufferRange) \ USE_GL_FUNC(glMapBufferRange) \ diff --git a/dll/directx/wine/wined3d/wined3d_main.c b/dll/directx/wine/wined3d/wined3d_main.c index 01a4071c6e6..cb2b0c49cba 100644 --- a/dll/directx/wine/wined3d/wined3d_main.c +++ b/dll/directx/wine/wined3d/wined3d_main.c @@ -72,8 +72,6 @@ static CRITICAL_SECTION wined3d_wndproc_cs = {&wined3d_wndproc_cs_debug, -1, 0, * where appropriate. */ struct wined3d_settings wined3d_settings = { - VS_HW, /* Hardware by default */ - PS_HW, /* Hardware by default */ TRUE, /* Use of GLSL enabled by default */ ORM_FBO, /* Use FBOs to do offscreen rendering */ RTL_READTEX, /* Default render target locking method */ @@ -84,6 +82,9 @@ struct wined3d_settings wined3d_settings = TRUE, /* Multisampling enabled by default. */ FALSE, /* No strict draw ordering. */ TRUE, /* Don't try to render onscreen by default. */ + ~0U, /* No VS shader model limit by default. */ + ~0U, /* No GS shader model limit by default. */ + ~0U, /* No PS shader model limit by default. */ }; /* Do not call while under the GL lock. */ @@ -196,27 +197,6 @@ static BOOL wined3d_dll_init(HINSTANCE hInstDLL) if (hkey || appkey) { - if ( !get_config_key( hkey, appkey, "VertexShaderMode", buffer, size) ) - { - if (!strcmp(buffer,"none")) - { - TRACE("Disable vertex shaders\n"); - wined3d_settings.vs_mode = VS_NONE; - } - } - if ( !get_config_key( hkey, appkey, "PixelShaderMode", buffer, size) ) - { - if (!strcmp(buffer,"enabled")) - { - TRACE("Allow pixel shaders\n"); - wined3d_settings.ps_mode = PS_HW; - } - if (!strcmp(buffer,"disabled")) - { - TRACE("Disable pixel shaders\n"); - wined3d_settings.ps_mode = PS_NONE; - } - } if ( !get_config_key( hkey, appkey, "UseGLSL", buffer, size) ) { if (!strcmp(buffer,"disabled")) @@ -323,13 +303,13 @@ static BOOL wined3d_dll_init(HINSTANCE hInstDLL) TRACE("Not always rendering backbuffers offscreen.\n"); wined3d_settings.always_offscreen = FALSE; } + if (!get_config_key_dword(hkey, appkey, "MaxShaderModelVS", &wined3d_settings.max_sm_vs)) + TRACE("Limiting VS shader model to %u.\n", wined3d_settings.max_sm_vs); + if (!get_config_key_dword(hkey, appkey, "MaxShaderModelGS", &wined3d_settings.max_sm_gs)) + TRACE("Limiting GS shader model to %u.\n", wined3d_settings.max_sm_gs); + if (!get_config_key_dword(hkey, appkey, "MaxShaderModelPS", &wined3d_settings.max_sm_ps)) + TRACE("Limiting PS shader model to %u.\n", wined3d_settings.max_sm_ps); } - if (wined3d_settings.vs_mode == VS_HW) - TRACE("Allow HW vertex shaders\n"); - if (wined3d_settings.ps_mode == PS_NONE) - TRACE("Disable pixel shaders\n"); - if (wined3d_settings.glslRequested) - TRACE("If supported by your system, GL Shading Language will be used\n"); if (appkey) RegCloseKey( appkey ); if (hkey) RegCloseKey( hkey ); diff --git a/dll/directx/wine/wined3d/wined3d_private.h b/dll/directx/wine/wined3d/wined3d_private.h index 4963e960374..e57a1e752bb 100644 --- a/dll/directx/wine/wined3d/wined3d_private.h +++ b/dll/directx/wine/wined3d/wined3d_private.h @@ -35,7 +35,7 @@ #endif #include -//#include +#include //#include #define NONAMELESSUNION #define NONAMELESSSTRUCT @@ -158,6 +158,7 @@ void wined3d_rb_free(void *ptr) DECLSPEC_HIDDEN; /* Device caps */ #define MAX_PALETTES 65536 +#define MAX_STREAM_OUT 4 #define MAX_STREAMS 16 #define MAX_TEXTURES 8 #define MAX_FRAGMENT_SAMPLERS 16 @@ -165,6 +166,8 @@ void wined3d_rb_free(void *ptr) DECLSPEC_HIDDEN; #define MAX_COMBINED_SAMPLERS (MAX_FRAGMENT_SAMPLERS + MAX_VERTEX_SAMPLERS) #define MAX_ACTIVE_LIGHTS 8 #define MAX_CLIPPLANES WINED3DMAXUSERCLIPPLANES +#define MAX_CONSTANT_BUFFERS 15 +#define MAX_SAMPLER_OBJECTS 16 struct min_lookup { @@ -238,26 +241,9 @@ static inline float float_24_to_32(DWORD in) } } -/** - * Settings - */ -#define VS_NONE 0 -#define VS_HW 1 - -#define PS_NONE 0 -#define PS_HW 1 - -#define VBO_NONE 0 -#define VBO_HW 1 - #define ORM_BACKBUFFER 0 #define ORM_FBO 1 -#define SHADER_ARB 1 -#define SHADER_GLSL 2 -#define SHADER_ATI 3 -#define SHADER_NONE 4 - #define RTL_READDRAW 1 #define RTL_READTEX 2 @@ -268,9 +254,6 @@ static inline float float_24_to_32(DWORD in) * values in wined3d_main.c as well. */ struct wined3d_settings { - /* vertex and pixel shader modes */ - int vs_mode; - int ps_mode; /* Ideally, we don't want the user to have to request GLSL. If the * hardware supports GLSL, we should use it. However, until it's fully * implemented, we'll leave it as a registry setting for developers. */ @@ -285,6 +268,9 @@ struct wined3d_settings int allow_multisampling; BOOL strict_draw_ordering; BOOL always_offscreen; + unsigned int max_sm_vs; + unsigned int max_sm_gs; + unsigned int max_sm_ps; }; extern struct wined3d_settings wined3d_settings DECLSPEC_HIDDEN; @@ -324,10 +310,20 @@ enum wined3d_shader_register_type WINED3DSPR_PREDICATE = 19, WINED3DSPR_IMMCONST, WINED3DSPR_CONSTBUFFER, + WINED3DSPR_PRIMID, WINED3DSPR_NULL, WINED3DSPR_RESOURCE, }; +enum wined3d_data_type +{ + WINED3D_DATA_FLOAT, + WINED3D_DATA_INT, + WINED3D_DATA_RESOURCE, + WINED3D_DATA_SAMPLER, + WINED3D_DATA_UINT, +}; + enum wined3d_immconst_type { WINED3D_IMMCONST_SCALAR, @@ -369,8 +365,9 @@ enum wined3d_shader_dst_modifier }; /* Undocumented opcode control to identify projective texture lookups in ps 2.0 and later */ -#define WINED3DSI_TEXLD_PROJECT 1 -#define WINED3DSI_TEXLD_BIAS 2 +#define WINED3DSI_TEXLD_PROJECT 0x1 +#define WINED3DSI_TEXLD_BIAS 0x2 +#define WINED3DSI_INDEXED_DYNAMIC 0x4 enum wined3d_shader_rel_op { @@ -399,10 +396,11 @@ enum wined3d_shader_rel_op #define MAX_REG_ADDR 1 #define MAX_REG_TEMP 32 #define MAX_REG_TEXCRD 8 -#define MAX_REG_INPUT 12 -#define MAX_REG_OUTPUT 12 +#define MAX_REG_INPUT 32 +#define MAX_REG_OUTPUT 32 #define MAX_CONST_I 16 #define MAX_CONST_B 16 +#define WINED3D_MAX_CBS 15 /* FIXME: This needs to go up to 2048 for * Shader model 3 according to msdn (and for software shaders) */ @@ -434,6 +432,10 @@ enum WINED3D_SHADER_INSTRUCTION_HANDLER WINED3DSIH_CRS, WINED3DSIH_CUT, WINED3DSIH_DCL, + WINED3DSIH_DCL_CONSTANT_BUFFER, + WINED3DSIH_DCL_INPUT_PRIMITIVE, + WINED3DSIH_DCL_OUTPUT_TOPOLOGY, + WINED3DSIH_DCL_VERTICES_OUT, WINED3DSIH_DEF, WINED3DSIH_DEFB, WINED3DSIH_DEFI, @@ -555,12 +557,13 @@ struct wined3d_shader_reg_maps DWORD temporary; /* MAX_REG_TEMP, 32 */ DWORD *constf; /* pixel, vertex */ DWORD texcoord_mask[MAX_REG_TEXCRD]; /* vertex < 3.0 */ - WORD input_registers; /* max(MAX_REG_INPUT, MAX_ATTRIBS), 16 */ - WORD output_registers; /* MAX_REG_OUTPUT, 12 */ + DWORD input_registers; /* max(MAX_REG_INPUT, MAX_ATTRIBS), 32 */ + DWORD output_registers; /* MAX_REG_OUTPUT, 32 */ WORD integer_constants; /* MAX_CONST_I, 16 */ WORD boolean_constants; /* MAX_CONST_B, 16 */ WORD local_int_consts; /* MAX_CONST_I, 16 */ WORD local_bool_consts; /* MAX_CONST_B, 16 */ + UINT cb_sizes[WINED3D_MAX_CBS]; enum wined3d_sampler_texture_type sampler_type[max(MAX_FRAGMENT_SAMPLERS, MAX_VERTEX_SAMPLERS)]; BYTE bumpmat; /* MAX_TEXTURES, 8 */ @@ -613,12 +616,17 @@ struct wined3d_shader_context void *backend_data; }; +struct wined3d_shader_register_index +{ + const struct wined3d_shader_src_param *rel_addr; + unsigned int offset; +}; + struct wined3d_shader_register { enum wined3d_shader_register_type type; - UINT idx; - UINT array_idx; - const struct wined3d_shader_src_param *rel_addr; + enum wined3d_data_type data_type; + struct wined3d_shader_register_index idx[2]; enum wined3d_immconst_type immconst_type; DWORD immconst_data[4]; }; @@ -638,19 +646,6 @@ struct wined3d_shader_src_param enum wined3d_shader_src_modifier modifiers; }; -struct wined3d_shader_instruction -{ - const struct wined3d_shader_context *ctx; - enum WINED3D_SHADER_INSTRUCTION_HANDLER handler_idx; - DWORD flags; - BOOL coissue; - DWORD predicate; - UINT dst_count; - const struct wined3d_shader_dst_param *dst; - UINT src_count; - const struct wined3d_shader_src_param *src; -}; - struct wined3d_shader_semantic { enum wined3d_decl_usage usage; @@ -659,6 +654,26 @@ struct wined3d_shader_semantic struct wined3d_shader_dst_param reg; }; +struct wined3d_shader_instruction +{ + const struct wined3d_shader_context *ctx; + enum WINED3D_SHADER_INSTRUCTION_HANDLER handler_idx; + DWORD flags; + BOOL coissue; + const struct wined3d_shader_src_param *predicate; + UINT dst_count; + const struct wined3d_shader_dst_param *dst; + UINT src_count; + const struct wined3d_shader_src_param *src; + union + { + struct wined3d_shader_semantic semantic; + enum wined3d_primitive_type primitive_type; + struct wined3d_shader_src_param src; + UINT count; + } declaration; +}; + struct wined3d_shader_attribute { enum wined3d_decl_usage usage; @@ -677,13 +692,7 @@ struct wined3d_shader_frontend void *(*shader_init)(const DWORD *ptr, const struct wined3d_shader_signature *output_signature); void (*shader_free)(void *data); void (*shader_read_header)(void *data, const DWORD **ptr, struct wined3d_shader_version *shader_version); - void (*shader_read_opcode)(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins, UINT *param_size); - void (*shader_read_src_param)(void *data, const DWORD **ptr, struct wined3d_shader_src_param *src_param, - struct wined3d_shader_src_param *src_rel_addr); - void (*shader_read_dst_param)(void *data, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param, - struct wined3d_shader_src_param *dst_rel_addr); - void (*shader_read_semantic)(const DWORD **ptr, struct wined3d_shader_semantic *semantic); - void (*shader_read_comment)(const DWORD **ptr, const char **comment, UINT *comment_size); + void (*shader_read_instruction)(void *data, const DWORD **ptr, struct wined3d_shader_instruction *ins); BOOL (*shader_is_end)(void *data, const DWORD **ptr); }; @@ -692,15 +701,20 @@ extern const struct wined3d_shader_frontend sm4_shader_frontend DECLSPEC_HIDDEN; typedef void (*SHADER_HANDLER)(const struct wined3d_shader_instruction *); -struct shader_caps { - DWORD VertexShaderVersion; - DWORD MaxVertexShaderConst; +#define WINED3D_SHADER_CAP_VS_CLIPPING 0x00000001 +#define WINED3D_SHADER_CAP_SRGB_WRITE 0x00000002 - DWORD PixelShaderVersion; - float PixelShader1xMaxValue; - DWORD MaxPixelShaderConst; +struct shader_caps +{ + UINT vs_version; + UINT gs_version; + UINT ps_version; - BOOL VSClipping; + DWORD vs_uniform_count; + DWORD ps_uniform_count; + float ps_1x_max_value; + + DWORD wined3d_caps; }; enum tex_types @@ -761,42 +775,43 @@ struct vs_compile_args { WORD swizzle_map; /* MAX_ATTRIBS, 16 */ }; +enum wined3d_shader_mode +{ + WINED3D_SHADER_MODE_NONE, + WINED3D_SHADER_MODE_FFP, + WINED3D_SHADER_MODE_SHADER, +}; + struct wined3d_context; struct wined3d_state; +struct fragment_pipeline; struct wined3d_shader_backend_ops { void (*shader_handle_instruction)(const struct wined3d_shader_instruction *); - void (*shader_select)(const struct wined3d_context *context, BOOL usePS, BOOL useVS); + void (*shader_select)(const struct wined3d_context *context, enum wined3d_shader_mode vertex_mode, + enum wined3d_shader_mode fragment_mode); void (*shader_select_depth_blt)(void *shader_priv, const struct wined3d_gl_info *gl_info, enum tex_types tex_type, const SIZE *ds_mask_size); void (*shader_deselect_depth_blt)(void *shader_priv, const struct wined3d_gl_info *gl_info); void (*shader_update_float_vertex_constants)(struct wined3d_device *device, UINT start, UINT count); void (*shader_update_float_pixel_constants)(struct wined3d_device *device, UINT start, UINT count); - void (*shader_load_constants)(const struct wined3d_context *context, char usePS, char useVS); + void (*shader_load_constants)(const struct wined3d_context *context, BOOL usePS, BOOL useVS); void (*shader_load_np2fixup_constants)(void *shader_priv, const struct wined3d_gl_info *gl_info, const struct wined3d_state *state); void (*shader_destroy)(struct wined3d_shader *shader); - HRESULT (*shader_alloc_private)(struct wined3d_device *device); + HRESULT (*shader_alloc_private)(struct wined3d_device *device, const struct fragment_pipeline *fragment_pipe); void (*shader_free_private)(struct wined3d_device *device); void (*shader_context_destroyed)(void *shader_priv, const struct wined3d_context *context); void (*shader_get_caps)(const struct wined3d_gl_info *gl_info, struct shader_caps *caps); BOOL (*shader_color_fixup_supported)(struct color_fixup_desc fixup); + BOOL (*shader_has_ffp_proj_control)(void *shader_priv); }; extern const struct wined3d_shader_backend_ops glsl_shader_backend DECLSPEC_HIDDEN; extern const struct wined3d_shader_backend_ops arb_program_shader_backend DECLSPEC_HIDDEN; extern const struct wined3d_shader_backend_ops none_shader_backend DECLSPEC_HIDDEN; -#define ENTER_GL() do {} while(0) -#define LEAVE_GL() do {} while(0) - -/***************************************************************************** - * Defines - */ - -/* GL related defines */ -/* ------------------ */ #define GL_EXTCALL(f) (gl_info->gl_ops.ext.p_##f) #define D3DCOLOR_B_R(dw) (((dw) >> 16) & 0xff) @@ -912,13 +927,8 @@ struct wined3d_stream_info WORD use_map; /* MAX_ATTRIBS, 16 */ }; -/***************************************************************************** - * Prototypes - */ - -/* Routine common to the draw primitive and draw indexed primitive routines */ -void drawPrimitive(struct wined3d_device *device, UINT index_count, - UINT start_idx, BOOL indexed, const void *idxData) DECLSPEC_HIDDEN; +void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_count, + UINT start_instance, UINT instance_count, BOOL indexed, const void *idx_data) DECLSPEC_HIDDEN; DWORD get_flexible_vertex_size(DWORD d3dvtVertexType) DECLSPEC_HIDDEN; typedef void (WINE_GLAPI *glAttribFunc)(const void *data); @@ -964,7 +974,10 @@ extern glMultiTexCoordFunc multi_texcoord_funcs[WINED3D_FFP_EMIT_COUNT] DECLSPEC #define STATE_VSHADER (STATE_VDECL + 1) #define STATE_IS_VSHADER(a) ((a) == STATE_VSHADER) -#define STATE_VIEWPORT (STATE_VSHADER + 1) +#define STATE_GEOMETRY_SHADER (STATE_VSHADER + 1) +#define STATE_IS_GEOMETRY_SHADER(a) ((a) == STATE_GEOMETRY_SHADER) + +#define STATE_VIEWPORT (STATE_GEOMETRY_SHADER + 1) #define STATE_IS_VIEWPORT(a) ((a) == STATE_VIEWPORT) #define STATE_VERTEXSHADERCONSTANT (STATE_VIEWPORT + 1) @@ -1060,21 +1073,23 @@ struct wined3d_context DWORD tid; /* Thread ID which owns this context at the moment */ /* Stores some information about the context state for optimization */ - WORD render_offscreen : 1; - WORD last_was_rhw : 1; /* true iff last draw_primitive was in xyzrhw mode */ - WORD last_was_pshader : 1; - WORD last_was_vshader : 1; - WORD namedArraysLoaded : 1; - WORD numberedArraysLoaded : 1; - WORD last_was_blit : 1; - WORD last_was_ckey : 1; - WORD fog_coord : 1; - WORD fog_enabled : 1; - WORD num_untracked_materials : 2; /* Max value 2 */ - WORD current : 1; - WORD destroyed : 1; - WORD valid : 1; - WORD padding : 1; + DWORD render_offscreen : 1; + DWORD last_was_rhw : 1; /* true iff last draw_primitive was in xyzrhw mode */ + DWORD last_was_pshader : 1; + DWORD last_was_vshader : 1; + DWORD namedArraysLoaded : 1; + DWORD numberedArraysLoaded : 1; + DWORD last_was_blit : 1; + DWORD last_was_ckey : 1; + DWORD fog_coord : 1; + DWORD fog_enabled : 1; + DWORD num_untracked_materials : 2; /* Max value 2 */ + DWORD current : 1; + DWORD destroyed : 1; + DWORD valid : 1; + DWORD select_shader : 1; + DWORD load_constants : 1; + DWORD padding : 15; BYTE texShaderBumpMap; /* MAX_TEXTURES, 8 */ BYTE lastWasPow2Texture; /* MAX_TEXTURES, 8 */ DWORD numbered_array_mask; @@ -1147,8 +1162,12 @@ struct StateEntryTemplate enum wined3d_gl_extension extension; }; +#define WINED3D_FRAGMENT_CAP_PROJ_CONTROL 0x00000001 +#define WINED3D_FRAGMENT_CAP_SRGB_WRITE 0x00000002 + struct fragment_caps { + DWORD wined3d_caps; DWORD PrimitiveMiscCaps; DWORD TextureOpCaps; DWORD MaxTextureBlendStages; @@ -1159,20 +1178,21 @@ struct fragment_pipeline { void (*enable_extension)(const struct wined3d_gl_info *gl_info, BOOL enable); void (*get_caps)(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps); - HRESULT (*alloc_private)(struct wined3d_device *device); + void *(*alloc_private)(const struct wined3d_shader_backend_ops *shader_backend, void *shader_priv); void (*free_private)(struct wined3d_device *device); BOOL (*color_fixup_supported)(struct color_fixup_desc fixup); const struct StateEntryTemplate *states; - BOOL ffp_proj_control; }; extern const struct StateEntryTemplate misc_state_template[] DECLSPEC_HIDDEN; extern const struct StateEntryTemplate ffp_vertexstate_template[] DECLSPEC_HIDDEN; +extern const struct fragment_pipeline none_fragment_pipe DECLSPEC_HIDDEN; extern const struct fragment_pipeline ffp_fragment_pipeline DECLSPEC_HIDDEN; extern const struct fragment_pipeline atifs_fragment_pipeline DECLSPEC_HIDDEN; extern const struct fragment_pipeline arbfp_fragment_pipeline DECLSPEC_HIDDEN; extern const struct fragment_pipeline nvts_fragment_pipeline DECLSPEC_HIDDEN; extern const struct fragment_pipeline nvrc_fragment_pipeline DECLSPEC_HIDDEN; +extern const struct fragment_pipeline glsl_fragment_pipe DECLSPEC_HIDDEN; /* "Base" state table */ HRESULT compile_state_table(struct StateEntry *StateTable, APPLYSTATEFUNC **dev_multistate_funcs, @@ -1331,6 +1351,8 @@ enum wined3d_pci_device CARD_AMD_RADEON_HD6700 = 0x68ba, CARD_AMD_RADEON_HD6800 = 0x6739, CARD_AMD_RADEON_HD6900 = 0x6719, + CARD_AMD_RADEON_HD7700 = 0x683d, + CARD_AMD_RADEON_HD7800 = 0x6819, CARD_AMD_RADEON_HD7900 = 0x679a, CARD_NVIDIA_RIVA_128 = 0x0018, @@ -1361,6 +1383,7 @@ enum wined3d_pci_device CARD_NVIDIA_GEFORCE_8800GTS = 0x0193, CARD_NVIDIA_GEFORCE_8800GTX = 0x0191, CARD_NVIDIA_GEFORCE_9200 = 0x086d, + CARD_NVIDIA_GEFORCE_9300 = 0x086c, CARD_NVIDIA_GEFORCE_9400M = 0x0863, CARD_NVIDIA_GEFORCE_9400GT = 0x042c, CARD_NVIDIA_GEFORCE_9500GT = 0x0640, @@ -1386,6 +1409,7 @@ enum wined3d_pci_device CARD_NVIDIA_GEFORCE_GTX465 = 0x06c4, CARD_NVIDIA_GEFORCE_GTX470 = 0x06cd, CARD_NVIDIA_GEFORCE_GTX480 = 0x06c0, + CARD_NVIDIA_GEFORCE_GT520 = 0x1040, CARD_NVIDIA_GEFORCE_GT540M = 0x0df4, CARD_NVIDIA_GEFORCE_GTX550 = 0x1244, CARD_NVIDIA_GEFORCE_GT555M = 0x04b8, @@ -1393,7 +1417,14 @@ enum wined3d_pci_device CARD_NVIDIA_GEFORCE_GTX560 = 0x1201, CARD_NVIDIA_GEFORCE_GTX570 = 0x1081, CARD_NVIDIA_GEFORCE_GTX580 = 0x1080, + CARD_NVIDIA_GEFORCE_GT610 = 0x104a, CARD_NVIDIA_GEFORCE_GT630M = 0x0de9, + CARD_NVIDIA_GEFORCE_GT640M = 0x0fd2, + CARD_NVIDIA_GEFORCE_GT650M = 0x0fd1, + CARD_NVIDIA_GEFORCE_GTX650 = 0x0fc6, + CARD_NVIDIA_GEFORCE_GTX650TI = 0x11c6, + CARD_NVIDIA_GEFORCE_GTX660 = 0x11c0, + CARD_NVIDIA_GEFORCE_GTX660TI = 0x1183, CARD_NVIDIA_GEFORCE_GTX670 = 0x1189, CARD_NVIDIA_GEFORCE_GTX680 = 0x1180, @@ -1505,7 +1536,7 @@ struct wined3d_gl_info { DWORD glsl_version; struct wined3d_gl_limits limits; - DWORD reserved_glsl_constants; + DWORD reserved_glsl_constants, reserved_arb_constants; DWORD quirks; BOOL supported[WINED3D_GL_EXT_COUNT]; GLint wrap_lookup[WINED3D_TADDRESS_MIRROR_ONCE - WINED3D_TADDRESS_WRAP + 1]; @@ -1531,8 +1562,6 @@ struct wined3d_driver_info struct wined3d_adapter { UINT ordinal; - BOOL opengl; - POINT monitorPoint; enum wined3d_format_id screen_format; @@ -1550,28 +1579,12 @@ struct wined3d_adapter const struct blit_shader *blitter; }; +BOOL wined3d_adapter_init_format_info(struct wined3d_adapter *adapter) DECLSPEC_HIDDEN; unsigned int adapter_adjust_memory(struct wined3d_adapter *adapter, int amount) DECLSPEC_HIDDEN; -BOOL initPixelFormats(struct wined3d_gl_info *gl_info, enum wined3d_pci_vendor vendor) DECLSPEC_HIDDEN; BOOL initPixelFormatsNoGL(struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN; extern void add_gl_compat_wrappers(struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN; -/***************************************************************************** - * High order patch management - */ -struct wined3d_rect_patch -{ - UINT Handle; - float *mem; - struct wined3d_strided_data strided; - struct wined3d_rect_patch_info rect_patch_info; - float numSegs[4]; - char has_normals, has_texcoords; - struct list entry; -}; - -HRESULT tesselate_rectpatch(struct wined3d_device *device, struct wined3d_rect_patch *patch) DECLSPEC_HIDDEN; - enum projection_types { proj_none = 0, @@ -1669,9 +1682,6 @@ struct wined3d_device /* X and GL Information */ GLenum offscreenBuffer; - /* Selected capabilities */ - int vs_selected_mode; - int ps_selected_mode; const struct wined3d_shader_backend_ops *shader_backend; void *shader_priv; void *fragment_priv; @@ -1679,13 +1689,13 @@ struct wined3d_device struct StateEntry StateTable[STATE_HIGHEST + 1]; /* Array of functions for states which are handled by more than one pipeline part */ APPLYSTATEFUNC *multistate_funcs[STATE_HIGHEST + 1]; - const struct fragment_pipeline *frag_pipe; const struct blit_shader *blitter; unsigned int max_ffp_textures; - DWORD vshader_version, pshader_version; + UINT vs_version, gs_version, ps_version; DWORD d3d_vshader_constantF, d3d_pshader_constantF; /* Advertised d3d caps, not GL ones */ DWORD vs_clipping; + UINT instance_count; WORD view_ident : 1; /* true iff view matrix is identity */ WORD vertexBlendUsed : 1; /* To avoid needless setting of the blend matrices */ @@ -1696,9 +1706,8 @@ struct wined3d_device WORD inScene : 1; /* A flag to check for proper BeginScene / EndScene call pairs */ WORD softwareVertexProcessing : 1; /* process vertex shaders using software or hardware */ WORD useDrawStridedSlow : 1; - WORD instancedDraw : 1; WORD filter_messages : 1; - WORD padding : 5; + WORD padding : 6; BYTE fixed_function_usage_map; /* MAX_TEXTURES, 8 */ @@ -1753,18 +1762,12 @@ struct wined3d_device /* Stream source management */ struct wined3d_stream_info strided_streams; - const struct wined3d_strided_data *up_strided; struct wined3d_event_query *buffer_queries[MAX_ATTRIBS]; unsigned int num_buffer_queries; /* Context management */ struct wined3d_context **contexts; UINT context_count; - - /* High level patch management */ -#define PATCHMAP_SIZE 43 -#define PATCHMAP_HASHFUNC(x) ((x) % PATCHMAP_SIZE) /* Primitive and simple function */ - struct list patches[PATCHMAP_SIZE]; }; void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, const struct wined3d_fb_state *fb, @@ -1780,8 +1783,6 @@ LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL UINT message, WPARAM wparam, LPARAM lparam, WNDPROC proc) DECLSPEC_HIDDEN; void device_resource_add(struct wined3d_device *device, struct wined3d_resource *resource) DECLSPEC_HIDDEN; void device_resource_released(struct wined3d_device *device, struct wined3d_resource *resource) DECLSPEC_HIDDEN; -void device_stream_info_from_declaration(struct wined3d_device *device, - struct wined3d_stream_info *stream_info) DECLSPEC_HIDDEN; void device_switch_onscreen_ds(struct wined3d_device *device, struct wined3d_context *context, struct wined3d_surface *depth_stencil) DECLSPEC_HIDDEN; void device_update_stream_info(struct wined3d_device *device, const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN; @@ -2016,7 +2017,6 @@ struct wined3d_surface DWORD flags; - enum wined3d_surface_type surface_type; UINT pow2Width; UINT pow2Height; @@ -2096,7 +2096,7 @@ void surface_set_compatible_renderbuffer(struct wined3d_surface *surface, void surface_set_container(struct wined3d_surface *surface, enum wined3d_container_type type, void *container) DECLSPEC_HIDDEN; void surface_set_texture_name(struct wined3d_surface *surface, GLuint name, BOOL srgb_name) DECLSPEC_HIDDEN; -void surface_set_texture_target(struct wined3d_surface *surface, GLenum target) DECLSPEC_HIDDEN; +void surface_set_texture_target(struct wined3d_surface *surface, GLenum target, GLint level) DECLSPEC_HIDDEN; void surface_translate_drawable_coords(const struct wined3d_surface *surface, HWND window, RECT *rect) DECLSPEC_HIDDEN; void surface_update_draw_binding(struct wined3d_surface *surface) DECLSPEC_HIDDEN; HRESULT surface_upload_from_surface(struct wined3d_surface *dst_surface, const POINT *dst_point, @@ -2172,6 +2172,12 @@ enum wined3d_conversion_type void d3dfmt_p8_init_palette(const struct wined3d_surface *surface, BYTE table[256][4], BOOL colorkey) DECLSPEC_HIDDEN; +struct wined3d_sampler +{ + LONG refcount; + void *parent; +}; + struct wined3d_vertex_declaration_element { const struct wined3d_format *format; @@ -2232,6 +2238,12 @@ struct StageState { DWORD state; }; +struct wined3d_stream_output +{ + struct wined3d_buffer *buffer; + UINT offset; +}; + struct wined3d_stream_state { struct wined3d_buffer *buffer; @@ -2246,8 +2258,8 @@ struct wined3d_state const struct wined3d_fb_state *fb; struct wined3d_vertex_declaration *vertex_declaration; + struct wined3d_stream_output stream_output[MAX_STREAM_OUT]; struct wined3d_stream_state streams[MAX_STREAMS + 1 /* tesselated pseudo-stream */]; - BOOL user_stream; struct wined3d_buffer *index_buffer; enum wined3d_format_id index_format; INT base_vertex_index; @@ -2255,11 +2267,19 @@ struct wined3d_state GLenum gl_primitive_type; struct wined3d_shader *vertex_shader; + struct wined3d_buffer *vs_cb[MAX_CONSTANT_BUFFERS]; + struct wined3d_sampler *vs_sampler[MAX_SAMPLER_OBJECTS]; BOOL vs_consts_b[MAX_CONST_B]; INT vs_consts_i[MAX_CONST_I * 4]; float *vs_consts_f; + struct wined3d_shader *geometry_shader; + struct wined3d_buffer *gs_cb[MAX_CONSTANT_BUFFERS]; + struct wined3d_sampler *gs_sampler[MAX_SAMPLER_OBJECTS]; + struct wined3d_shader *pixel_shader; + struct wined3d_buffer *ps_cb[MAX_CONSTANT_BUFFERS]; + struct wined3d_sampler *ps_sampler[MAX_SAMPLER_OBJECTS]; BOOL ps_consts_b[MAX_CONST_B]; INT ps_consts_i[MAX_CONST_I * 4]; float *ps_consts_f; @@ -2479,8 +2499,6 @@ const char *debug_d3dtstype(enum wined3d_transform_state tstype) DECLSPEC_HIDDEN const char *debug_d3dpool(enum wined3d_pool pool) DECLSPEC_HIDDEN; const char *debug_fbostatus(GLenum status) DECLSPEC_HIDDEN; const char *debug_glerror(GLenum error) DECLSPEC_HIDDEN; -const char *debug_d3dbasis(enum wined3d_basis_type basis) DECLSPEC_HIDDEN; -const char *debug_d3ddegree(enum wined3d_degree_type order) DECLSPEC_HIDDEN; const char *debug_d3dtop(enum wined3d_texture_op d3dtop) DECLSPEC_HIDDEN; void dump_color_fixup_desc(struct color_fixup_desc fixup) DECLSPEC_HIDDEN; const char *debug_surflocation(DWORD flag) DECLSPEC_HIDDEN; @@ -2509,11 +2527,14 @@ void state_fogstartend(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN; void state_fog_fragpart(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN; +void state_srgbwrite(struct wined3d_context *context, + const struct wined3d_state *state, DWORD state_id) DECLSPEC_HIDDEN; BOOL getColorBits(const struct wined3d_format *format, BYTE *redSize, BYTE *greenSize, BYTE *blueSize, BYTE *alphaSize, BYTE *totalSize) DECLSPEC_HIDDEN; BOOL getDepthStencilBits(const struct wined3d_format *format, BYTE *depthSize, BYTE *stencilSize) DECLSPEC_HIDDEN; +GLenum gl_primitive_type_from_d3d(enum wined3d_primitive_type primitive_type) DECLSPEC_HIDDEN; /* Math utils */ void multiply_matrix(struct wined3d_matrix *dest, const struct wined3d_matrix *src1, @@ -2521,8 +2542,6 @@ void multiply_matrix(struct wined3d_matrix *dest, const struct wined3d_matrix *s UINT wined3d_log2i(UINT32 x) DECLSPEC_HIDDEN; unsigned int count_bits(unsigned int mask) DECLSPEC_HIDDEN; -void select_shader_mode(const struct wined3d_gl_info *gl_info, int *ps_selected, int *vs_selected) DECLSPEC_HIDDEN; - struct wined3d_shader_lconst { struct list entry; @@ -2532,17 +2551,12 @@ struct wined3d_shader_lconst struct wined3d_shader_limits { - unsigned int temporary; - unsigned int texcoord; unsigned int sampler; unsigned int constant_int; unsigned int constant_float; unsigned int constant_bool; - unsigned int address; unsigned int packed_output; unsigned int packed_input; - unsigned int attributes; - unsigned int label; }; #ifdef __GNUC__ @@ -2564,6 +2578,13 @@ struct wined3d_vertex_shader struct wined3d_shader_attribute attributes[MAX_ATTRIBS]; }; +struct wined3d_geometry_shader +{ + enum wined3d_primitive_type input_type; + enum wined3d_primitive_type output_type; + UINT vertices_out; +}; + struct wined3d_pixel_shader { /* Pixel shader input semantics */ @@ -2609,6 +2630,7 @@ struct wined3d_shader union { struct wined3d_vertex_shader vs; + struct wined3d_geometry_shader gs; struct wined3d_pixel_shader ps; } u; }; @@ -2634,23 +2656,14 @@ void shader_generate_main(const struct wined3d_shader *shader, struct wined3d_sh const struct wined3d_shader_reg_maps *reg_maps, const DWORD *byte_code, void *backend_ctx) DECLSPEC_HIDDEN; BOOL shader_match_semantic(const char *semantic_name, enum wined3d_decl_usage usage) DECLSPEC_HIDDEN; -static inline BOOL shader_is_pshader_version(enum wined3d_shader_type type) -{ - return type == WINED3D_SHADER_TYPE_PIXEL; -} - -static inline BOOL shader_is_vshader_version(enum wined3d_shader_type type) -{ - return type == WINED3D_SHADER_TYPE_VERTEX; -} - static inline BOOL shader_is_scalar(const struct wined3d_shader_register *reg) { switch (reg->type) { case WINED3DSPR_RASTOUT: /* oFog & oPts */ - if (reg->idx) return TRUE; + if (reg->idx[0].offset) + return TRUE; /* oPos */ return FALSE; @@ -2658,10 +2671,11 @@ static inline BOOL shader_is_scalar(const struct wined3d_shader_register *reg) case WINED3DSPR_CONSTBOOL: /* b# */ case WINED3DSPR_LOOP: /* aL */ case WINED3DSPR_PREDICATE: /* p0 */ + case WINED3DSPR_PRIMID: /* primID */ return TRUE; case WINED3DSPR_MISCTYPE: - switch(reg->idx) + switch (reg->idx[0].offset) { case 0: /* vPos */ return FALSE; @@ -2776,6 +2790,7 @@ extern enum wined3d_format_id pixelformat_for_depth(DWORD depth) DECLSPEC_HIDDEN #define WINED3DFMT_FLAG_BROKEN_PITCH 0x00010000 #define WINED3DFMT_FLAG_BLOCKS 0x00020000 #define WINED3DFMT_FLAG_HEIGHT_SCALE 0x00040000 +#define WINED3DFMT_FLAG_TEXTURE 0x00080000 struct wined3d_rational { diff --git a/dll/keyboard/kbdheb/kbdheb.c b/dll/keyboard/kbdheb/kbdheb.c index 703809310b3..6d2df0c1156 100644 --- a/dll/keyboard/kbdheb/kbdheb.c +++ b/dll/keyboard/kbdheb/kbdheb.c @@ -332,7 +332,7 @@ ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = { { 'E', 0, {QOF, QOF, 0x05, 0x05} }, { 'F', 0, {KAF, KAF, 0x06, 0x06} }, { 'G', 0, {AYIN, AYIN, 0x07, 0x07} }, - { 'H', 0, {QOF, QOF, 0x08, 0x08} }, + { 'H', 0, {YUD, YUD, 0x08, 0x08} }, { 'I', 0, {NUN_SOFIT, NUN_SOFIT, 0x09, 0x09} }, { 'J', 0, {HET, HET, 0x0a, 0x0a} }, { 'K', 0, {LAMED, LAMED, 0x0b, 0x0b} }, diff --git a/dll/opengl/Mesa_for_ReactOS.txt b/dll/opengl/Mesa_for_ReactOS.txt index 5830746e8c5..0356cb37624 100644 --- a/dll/opengl/Mesa_for_ReactOS.txt +++ b/dll/opengl/Mesa_for_ReactOS.txt @@ -39,4 +39,4 @@ directory structure for the sake of ease of maintainability. ___________________ Those files were written using the Sconscript and source list files as reference. I think that diff-ing them between two -versions would permit to easily update the cmake configuration files. \ No newline at end of file +versions would permit to easily update the cmake configuration files. diff --git a/dll/opengl/mesa/src/gallium/CMakeLists.txt b/dll/opengl/mesa/src/gallium/CMakeLists.txt index 467780209c1..39d1ac24590 100644 --- a/dll/opengl/mesa/src/gallium/CMakeLists.txt +++ b/dll/opengl/mesa/src/gallium/CMakeLists.txt @@ -3,4 +3,4 @@ add_subdirectory(auxiliary) add_subdirectory(drivers/softpipe) add_subdirectory(state_trackers/wgl) add_subdirectory(targets/libgl-gdi) -add_subdirectory(winsys/sw/gdi) \ No newline at end of file +add_subdirectory(winsys/sw/gdi) diff --git a/dll/opengl/mesa/src/gallium/drivers/softpipe/CMakeLists.txt b/dll/opengl/mesa/src/gallium/drivers/softpipe/CMakeLists.txt index 2a58690c997..48b16d39c5f 100644 --- a/dll/opengl/mesa/src/gallium/drivers/softpipe/CMakeLists.txt +++ b/dll/opengl/mesa/src/gallium/drivers/softpipe/CMakeLists.txt @@ -28,4 +28,4 @@ add_library(gallium_softpipe STATIC EXCLUDE_FROM_ALL sp_tex_sample.c sp_tex_tile_cache.c sp_texture.c - sp_tile_cache.c) \ No newline at end of file + sp_tile_cache.c) diff --git a/dll/opengl/mesa/src/gallium/winsys/sw/gdi/CMakeLists.txt b/dll/opengl/mesa/src/gallium/winsys/sw/gdi/CMakeLists.txt index 7ecc5a5c121..da7eb5f7dca 100644 --- a/dll/opengl/mesa/src/gallium/winsys/sw/gdi/CMakeLists.txt +++ b/dll/opengl/mesa/src/gallium/winsys/sw/gdi/CMakeLists.txt @@ -1,4 +1,4 @@ add_definitions(-DWIN32_LEAN_AND_MEAN) -add_library(gallium_ws_gdi STATIC EXCLUDE_FROM_ALL gdi_sw_winsys.c) \ No newline at end of file +add_library(gallium_ws_gdi STATIC EXCLUDE_FROM_ALL gdi_sw_winsys.c) diff --git a/dll/opengl/mesa/src/mesa/x86-64/calling_convention.txt b/dll/opengl/mesa/src/mesa/x86-64/calling_convention.txt index 4147f7eba91..5c244de4826 100644 --- a/dll/opengl/mesa/src/mesa/x86-64/calling_convention.txt +++ b/dll/opengl/mesa/src/mesa/x86-64/calling_convention.txt @@ -47,4 +47,4 @@ fs Reserved for system use (as thread specific data register) *) must be preserved across function calls Integer arguments from list: rdi,rsi,rdx,rcx,r8,r9,stack -Floating point arguments from list: xmm0-xmm7 \ No newline at end of file +Floating point arguments from list: xmm0-xmm7 diff --git a/dll/shellext/deskadp/lang/he-IL.rc b/dll/shellext/deskadp/lang/he-IL.rc index 6844d9c91b3..d0197e57095 100644 --- a/dll/shellext/deskadp/lang/he-IL.rc +++ b/dll/shellext/deskadp/lang/he-IL.rc @@ -19,7 +19,7 @@ BEGIN LTEXT "", IDC_ADAPTERSTRING, 71, 104, 160, 8, SS_NOPREFIX LTEXT "מידע BIOS:", -1, 13, 116, 58, 8 LTEXT "", IDC_BIOSINFORMATION, 71, 116, 160, 8, SS_NOPREFIX - PUSHBUTTON "פרט את כל המצבים...", IDC_LISTALLMODES, 7, 139, 75, 14 + PUSHBUTTON "פרט את כל המצבים...", IDC_LISTALLMODES, 7, 139, 84, 14 END IDD_LISTALLMODES DIALOGEX 0, 0, 225, 135 @@ -35,8 +35,8 @@ END STRINGTABLE BEGIN - IDS_MODEFMT "%d by %d, %s, %s" - IDS_DEFREFRESHRATE "Default Refresh" + IDS_MODEFMT "%d על %d, %s, %s" + IDS_DEFREFRESHRATE "קצב רענון ברירת מחדל" IDES_REFRESHRATEFMT "%d הרץ" IDS_4BPP "16 צבעים" IDS_8BPP "256 צבעים" diff --git a/dll/win32/CMakeLists.txt b/dll/win32/CMakeLists.txt index 0f5f3bdb315..48680a6b427 100644 --- a/dll/win32/CMakeLists.txt +++ b/dll/win32/CMakeLists.txt @@ -107,6 +107,7 @@ add_subdirectory(msrle32) add_subdirectory(mssign32) add_subdirectory(mssip32) add_subdirectory(mstask) +add_subdirectory(msv1_0) add_subdirectory(msvcrt) add_subdirectory(msvcrt20) add_subdirectory(msvcrt40) diff --git a/dll/win32/advapi32/advapi32.spec b/dll/win32/advapi32/advapi32.spec index 1b3cd09c208..9c9932967e9 100644 --- a/dll/win32/advapi32/advapi32.spec +++ b/dll/win32/advapi32/advapi32.spec @@ -391,7 +391,6 @@ @ stdcall LsaQuerySecurityObject(ptr long ptr) @ stdcall LsaQueryTrustedDomainInfo(ptr ptr long ptr) @ stdcall LsaQueryTrustedDomainInfoByName(ptr ptr long ptr) -@ stdcall LsaRegisterPolicyChangeNotification(long long) @ stdcall LsaRemoveAccountRights(ptr ptr long ptr long) @ stdcall LsaRemovePrivilegesFromAccount(ptr long ptr) @ stdcall LsaRetrievePrivateData(ptr ptr ptr) @@ -406,7 +405,6 @@ @ stdcall LsaSetTrustedDomainInfoByName(ptr ptr long ptr) @ stdcall LsaSetTrustedDomainInformation(ptr ptr long ptr) @ stdcall LsaStorePrivateData(ptr ptr ptr) -@ stdcall LsaUnregisterPolicyChangeNotification(long long) @ stdcall MD4Final(ptr) @ stdcall MD4Init(ptr) @ stdcall MD4Update(ptr ptr long) diff --git a/dll/win32/advapi32/sec/lsa.c b/dll/win32/advapi32/sec/lsa.c index 48a2e9f39d3..e899859350b 100644 --- a/dll/win32/advapi32/sec/lsa.c +++ b/dll/win32/advapi32/sec/lsa.c @@ -1594,20 +1594,6 @@ LsaQueryTrustedDomainInfoByName(IN LSA_HANDLE PolicyHandle, } -/* - * @unimplemented - */ -NTSTATUS -WINAPI -LsaRegisterPolicyChangeNotification(IN POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass, - IN HANDLE NotificationEventHandle) -{ - FIXME("LsaRegisterPolicyChangeNotification(%d %p) stub\n", - InformationClass, NotificationEventHandle); - return STATUS_UNSUCCESSFUL; -} - - /* * @implemented */ @@ -2026,18 +2012,4 @@ LsaStorePrivateData(IN LSA_HANDLE PolicyHandle, return STATUS_OBJECT_NAME_NOT_FOUND; } - -/* - * @unimplemented - */ -NTSTATUS -WINAPI -LsaUnregisterPolicyChangeNotification(IN POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass, - IN HANDLE NotificationEventHandle) -{ - FIXME("(%d %p) stub\n", - InformationClass, NotificationEventHandle); - return STATUS_SUCCESS; -} - /* EOF */ diff --git a/dll/win32/advapi32/service/scm.c b/dll/win32/advapi32/service/scm.c index dceb296d13c..f8cc95a7310 100644 --- a/dll/win32/advapi32/service/scm.c +++ b/dll/win32/advapi32/service/scm.c @@ -165,6 +165,8 @@ ChangeServiceConfig2A(SC_HANDLE hService, TRACE("ChangeServiceConfig2A() called\n"); + if (lpInfo == NULL) return TRUE; + /* Fill relevent field of the Info structure */ Info.dwInfoLevel = dwInfoLevel; switch (dwInfoLevel) @@ -184,9 +186,6 @@ ChangeServiceConfig2A(SC_HANDLE hService, return FALSE; } - if (lpInfo == NULL) - return TRUE; - RpcTryExcept { dwError = RChangeServiceConfig2A((SC_RPC_HANDLE)hService, @@ -224,6 +223,8 @@ ChangeServiceConfig2W(SC_HANDLE hService, TRACE("ChangeServiceConfig2W() called\n"); + if (lpInfo == NULL) return TRUE; + /* Fill relevent field of the Info structure */ Info.dwInfoLevel = dwInfoLevel; switch (dwInfoLevel) @@ -242,9 +243,6 @@ ChangeServiceConfig2W(SC_HANDLE hService, return FALSE; } - if (lpInfo == NULL) - return TRUE; - RpcTryExcept { dwError = RChangeServiceConfig2W((SC_RPC_HANDLE)hService, @@ -926,6 +924,12 @@ EnumServiceGroupW(SC_HANDLE hSCManager, return FALSE; } + if (pcbBytesNeeded == NULL || lpServicesReturned == NULL) + { + SetLastError(ERROR_INVALID_ADDRESS); + return FALSE; + } + if (lpServices == NULL || cbBufSize < sizeof(ENUM_SERVICE_STATUSW)) { lpStatusPtr = &ServiceStatus; @@ -1027,6 +1031,12 @@ EnumServicesStatusA(SC_HANDLE hSCManager, return FALSE; } + if (pcbBytesNeeded == NULL || lpServicesReturned == NULL) + { + SetLastError(ERROR_INVALID_ADDRESS); + return FALSE; + } + if (lpServices == NULL || cbBufSize < sizeof(ENUM_SERVICE_STATUSA)) { lpStatusPtr = &ServiceStatus; @@ -1113,6 +1123,12 @@ EnumServicesStatusW(SC_HANDLE hSCManager, return FALSE; } + if (pcbBytesNeeded == NULL || lpServicesReturned == NULL) + { + SetLastError(ERROR_INVALID_ADDRESS); + return FALSE; + } + if (lpServices == NULL || cbBufSize < sizeof(ENUM_SERVICE_STATUSW)) { lpStatusPtr = &ServiceStatus; @@ -1207,8 +1223,13 @@ EnumServicesStatusExA(SC_HANDLE hSCManager, return FALSE; } - if (lpServices == NULL || - cbBufSize < sizeof(ENUM_SERVICE_STATUS_PROCESSA)) + if (pcbBytesNeeded == NULL || lpServicesReturned == NULL) + { + SetLastError(ERROR_INVALID_ADDRESS); + return FALSE; + } + + if (lpServices == NULL || cbBufSize < sizeof(ENUM_SERVICE_STATUS_PROCESSA)) { lpStatusPtr = &ServiceStatus; dwBufferSize = sizeof(ENUM_SERVICE_STATUS_PROCESSA); @@ -1307,8 +1328,13 @@ EnumServicesStatusExW(SC_HANDLE hSCManager, return FALSE; } - if (lpServices == NULL || - cbBufSize < sizeof(ENUM_SERVICE_STATUS_PROCESSW)) + if (pcbBytesNeeded == NULL || lpServicesReturned == NULL) + { + SetLastError(ERROR_INVALID_ADDRESS); + return FALSE; + } + + if (lpServices == NULL || cbBufSize < sizeof(ENUM_SERVICE_STATUS_PROCESSW)) { lpStatusPtr = &ServiceStatus; dwBufferSize = sizeof(ENUM_SERVICE_STATUS_PROCESSW); diff --git a/dll/win32/beepmidi/CMakeLists.txt b/dll/win32/beepmidi/CMakeLists.txt index 2c51255d764..c8d0dbb603d 100644 --- a/dll/win32/beepmidi/CMakeLists.txt +++ b/dll/win32/beepmidi/CMakeLists.txt @@ -7,9 +7,9 @@ list(APPEND SOURCE add_library(beepmidi SHARED ${SOURCE}) -set_module_type(beepmidi win32dll ENTRYPOINT 0 UNICODE) +set_module_type(beepmidi win32dll UNICODE) -add_importlibs(beepmidi winmm kernel32 ntdll msvcrt) +add_importlibs(beepmidi winmm msvcrt kernel32 ntdll) add_dependencies(beepmidi psdk) diff --git a/dll/win32/browseui/browseui.rc b/dll/win32/browseui/browseui.rc index 6cec9e56396..5579102ba68 100644 --- a/dll/win32/browseui/browseui.rc +++ b/dll/win32/browseui/browseui.rc @@ -3,8 +3,6 @@ * * Copyright 2009 Andrew Hill * - * Translated by Baruch Rutman - * * 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 diff --git a/dll/win32/browseui/lang/he-IL.rc b/dll/win32/browseui/lang/he-IL.rc index 0b8e4eeca7f..68d3f84cbeb 100644 --- a/dll/win32/browseui/lang/he-IL.rc +++ b/dll/win32/browseui/lang/he-IL.rc @@ -24,7 +24,7 @@ LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT // // Menus // - +#pragma code_page(65001) IDM_CABINET_CONTEXTMENU MENUEX BEGIN POPUP "", 264,MFT_STRING,MFS_ENABLED diff --git a/dll/win32/cabinet/CMakeLists.txt b/dll/win32/cabinet/CMakeLists.txt index 6bfab8023a4..4d76fc886ef 100644 --- a/dll/win32/cabinet/CMakeLists.txt +++ b/dll/win32/cabinet/CMakeLists.txt @@ -19,7 +19,7 @@ list(APPEND SOURCE add_library(cabinet SHARED ${SOURCE}) -set_module_type(cabinet win32dll ENTRYPOINT 0) +set_module_type(cabinet win32dll) target_link_libraries(cabinet wine zlib) add_importlibs(cabinet msvcrt kernel32 ntdll) diff --git a/dll/win32/cfgmgr32/CMakeLists.txt b/dll/win32/cfgmgr32/CMakeLists.txt index 54cadb935f3..16d1d92f06c 100644 --- a/dll/win32/cfgmgr32/CMakeLists.txt +++ b/dll/win32/cfgmgr32/CMakeLists.txt @@ -8,7 +8,7 @@ list(APPEND SOURCE add_library(cfgmgr32 SHARED ${SOURCE}) -set_module_type(cfgmgr32 win32dll ENTRYPOINT 0 ) -add_importlibs(cfgmgr32 setupapi kernel32 ntdll) +set_module_type(cfgmgr32 win32dll) +add_importlibs(cfgmgr32 msvcrt setupapi kernel32 ntdll) add_dependencies(cfgmgr32 psdk) add_cd_file(TARGET cfgmgr32 DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/comcat/CMakeLists.txt b/dll/win32/comcat/CMakeLists.txt index 765307d6bf1..969a6c3dc8c 100644 --- a/dll/win32/comcat/CMakeLists.txt +++ b/dll/win32/comcat/CMakeLists.txt @@ -15,11 +15,11 @@ list(APPEND SOURCE add_library(comcat SHARED ${SOURCE}) -set_module_type(comcat win32dll ENTRYPOINT 0 ) +set_module_type(comcat win32dll) target_link_libraries(comcat uuid wine) -add_importlibs(comcat ole32 user32 advapi32 ntdll) +add_importlibs(comcat msvcrt ole32 user32 advapi32 kernel32 ntdll) add_dependencies(comcat psdk) add_cd_file(TARGET comcat DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/comctl32/comctl_He.rc b/dll/win32/comctl32/comctl_He.rc index 13852c113f5..3ed9771b3a4 100644 --- a/dll/win32/comctl32/comctl_He.rc +++ b/dll/win32/comctl32/comctl_He.rc @@ -71,7 +71,7 @@ BEGIN PUSHBUTTON "עזרה", IDHELP,235,138,55,14,WS_GROUP LTEXT "", IDC_SUNKEN_LINE,7,129,278,1,SS_SUNKEN CONTROL "", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS | WS_DISABLED,7,7,258,5 - LTEXT "", IDC_SUNKEN_LINEHEADER,0,35,290,1,SS_LEFT | SS_SUNKEN | WS_CHILD | WS_VISIBLE + LTEXT "", IDC_SUNKEN_LINEHEADER,0,35,290,1,SS_LEFT | SS_SUNKEN | WS_CHILD | WS_VISIBLE END diff --git a/dll/win32/cryptdlg/cryptdlg.rc b/dll/win32/cryptdlg/cryptdlg.rc index d1410a96dd3..efa6f51f291 100644 --- a/dll/win32/cryptdlg/cryptdlg.rc +++ b/dll/win32/cryptdlg/cryptdlg.rc @@ -45,7 +45,7 @@ #ifdef LANGUAGE_FR_FR #include "cryptdlg_Fr.rc" #endif -#ifdef LANGAUE_HE_IL +#ifdef LANGUAGE_HE_IL #include "cryptdlg_He.rc" #endif #ifdef LANGUAGE_HU_HU diff --git a/dll/win32/cryptui/cryptui.rc b/dll/win32/cryptui/cryptui.rc index 89b64364a8b..b82e34c4683 100644 --- a/dll/win32/cryptui/cryptui.rc +++ b/dll/win32/cryptui/cryptui.rc @@ -64,9 +64,6 @@ IDB_CERT_HEADER BITMAP certheader.bmp #ifdef LANGUAGE_FR_FR #include "cryptui_Fr.rc" #endif -#ifdef LANGUAGE_HE_IL - #include "cryptui_He.rc" -#endif #ifdef LANGUAGE_IT_IT #include "cryptui_It.rc" #endif diff --git a/dll/win32/dnsapi/CMakeLists.txt b/dll/win32/dnsapi/CMakeLists.txt index 4e392b0de73..d3c8873a902 100644 --- a/dll/win32/dnsapi/CMakeLists.txt +++ b/dll/win32/dnsapi/CMakeLists.txt @@ -21,7 +21,7 @@ list(APPEND SOURCE add_library(dnsapi SHARED ${SOURCE}) -set_module_type(dnsapi win32dll ENTRYPOINT 0 ) +set_module_type(dnsapi win32dll) target_link_libraries(dnsapi adns) add_importlibs(dnsapi user32 ws2_32 iphlpapi msvcrt kernel32 ntdll) add_pch(dnsapi dnsapi/precomp.h) diff --git a/dll/win32/imaadp32.acm/CMakeLists.txt b/dll/win32/imaadp32.acm/CMakeLists.txt index 030eeaddee2..fa7a0667067 100644 --- a/dll/win32/imaadp32.acm/CMakeLists.txt +++ b/dll/win32/imaadp32.acm/CMakeLists.txt @@ -10,7 +10,7 @@ list(APPEND SOURCE add_library(imaadp32.acm SHARED ${SOURCE}) -set_module_type(imaadp32.acm win32dll ENTRYPOINT 0 ) +set_module_type(imaadp32.acm win32dll) set_target_properties(imaadp32.acm PROPERTIES SUFFIX "") target_link_libraries(imaadp32.acm wine) add_importlibs(imaadp32.acm winmm user32 msvcrt kernel32 ntdll) diff --git a/dll/win32/imm32/imm.c b/dll/win32/imm32/imm.c index b787e6e01ca..74dafdebf50 100644 --- a/dll/win32/imm32/imm.c +++ b/dll/win32/imm32/imm.c @@ -52,6 +52,7 @@ typedef struct _tagImmHkl{ IMEINFO imeInfo; WCHAR imeClassName[17]; /* 16 character max */ ULONG uSelected; + HWND UIWnd; /* Function Pointers */ MAKE_FUNCPTR(ImeInquire); @@ -79,7 +80,6 @@ typedef struct tagInputContextData INPUTCONTEXT IMC; ImmHkl *immKbd; - HWND imeWnd; UINT lastVK; } InputContextData; @@ -112,6 +112,10 @@ static const WCHAR szImeFileW[] = {'I','m','e',' ','F','i','l','e',0}; static const WCHAR szLayoutTextW[] = {'L','a','y','o','u','t',' ','T','e','x','t',0}; static const WCHAR szImeRegFmt[] = {'S','y','s','t','e','m','\\','C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\','C','o','n','t','r','o','l','\\','K','e','y','b','o','a','r','d',' ','L','a','y','o','u','t','s','\\','%','0','8','l','x',0}; +static const WCHAR szwIME[] = {'I','M','E',0}; + +static LRESULT WINAPI DefIME_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, + LPARAM lParam); #define is_himc_ime_unicode(p) (p->immKbd->imeInfo.fdwProperty & IME_PROP_UNICODE) #define is_kbd_ime_unicode(p) (p->imeInfo.fdwProperty & IME_PROP_UNICODE) @@ -359,6 +363,8 @@ static void IMM_FreeAllImmHkl(void) ptr->pImeDestroy(1); FreeLibrary(ptr->hIME); } + if (ptr->UIWnd) + DestroyWindow(ptr->UIWnd); HeapFree(GetProcessHeap(),0,ptr); } } @@ -374,6 +380,21 @@ static void IMM_RegisterMessages(void) WM_MSIME_DOCUMENTFEED = RegisterWindowMessageA("MSIMEDocumentFeed"); } +static void IMM_RegisterIMEClass(void) +{ + WNDCLASSW wndClass; + + ZeroMemory(&wndClass, sizeof(WNDCLASSW)); + + wndClass.style = CS_GLOBALCLASS; + wndClass.lpfnWndProc = (WNDPROC) DefIME_WindowProc; + wndClass.cbWndExtra = 2 * sizeof(LONG_PTR); + wndClass.hCursor = LoadCursorW(NULL, (LPWSTR)IDC_ARROW); + wndClass.lpszClassName = szwIME; + + RegisterClassW(&wndClass); +} + BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpReserved) { TRACE("%p, %x, %p\n",hInstDLL,fdwReason,lpReserved); @@ -384,6 +405,7 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpReserved) tlsIndex = TlsAlloc(); if (tlsIndex == TLS_OUT_OF_INDEXES) return FALSE; + IMM_RegisterIMEClass(); break; case DLL_THREAD_ATTACH: break; @@ -394,6 +416,7 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpReserved) IMM_FreeThreadData(); IMM_FreeAllImmHkl(); TlsFree(tlsIndex); + UnregisterClassW(szwIME, NULL); break; } return TRUE; @@ -680,10 +703,6 @@ static BOOL IMM_DestroyContext(HIMC hIMC) data->immKbd->pImeSelect(hIMC, FALSE); SendMessageW(data->IMC.hWnd, WM_IME_SELECT, FALSE, (LPARAM)GetKeyboardLayout(0)); - if (IMM_GetThreadData()->hwndDefault == data->imeWnd) - IMM_GetThreadData()->hwndDefault = NULL; - DestroyWindow(data->imeWnd); - ImmDestroyIMCC(data->IMC.hCompStr); ImmDestroyIMCC(data->IMC.hCandInfo); ImmDestroyIMCC(data->IMC.hGuideLine); @@ -1492,6 +1511,9 @@ BOOL WINAPI ImmGetConversionStatus( */ HWND WINAPI ImmGetDefaultIMEWnd(HWND hWnd) { + if (IMM_GetThreadData()->hwndDefault == NULL) + IMM_GetThreadData()->hwndDefault = CreateWindowExW( WS_EX_TOOLWINDOW, + szwIME, NULL, WS_POPUP, 0, 0, 1, 1, 0, 0, 0, 0); TRACE("Default is %p\n",IMM_GetThreadData()->hwndDefault); return IMM_GetThreadData()->hwndDefault; } @@ -2264,16 +2286,16 @@ BOOL WINAPI ImmSetCompositionWindow( data->IMC.cfCompForm = *lpCompForm; - if (IsWindowVisible(IMM_GetThreadData()->hwndDefault)) + if (IsWindowVisible(data->immKbd->UIWnd)) { reshow = TRUE; - ShowWindow(IMM_GetThreadData()->hwndDefault,SW_HIDE); + ShowWindow(data->immKbd->UIWnd,SW_HIDE); } /* FIXME: this is a partial stub */ if (reshow) - ShowWindow(IMM_GetThreadData()->hwndDefault,SW_SHOWNOACTIVATE); + ShowWindow(data->immKbd->UIWnd,SW_SHOWNOACTIVATE); ImmInternalSendIMENotify(data, IMN_SETCOMPOSITIONWINDOW, 0); return TRUE; @@ -2323,15 +2345,16 @@ BOOL WINAPI ImmSetOpenStatus(HIMC hIMC, BOOL fOpen) if (!data) return FALSE; - if (data->imeWnd == NULL) + if (data->immKbd->UIWnd == NULL) { /* create the ime window */ - data->imeWnd = CreateWindowExW( WS_EX_TOOLWINDOW, + data->immKbd->UIWnd = CreateWindowExW( WS_EX_TOOLWINDOW, data->immKbd->imeClassName, NULL, WS_POPUP, 0, 0, 1, 1, 0, 0, data->immKbd->hIME, 0); - SetWindowLongPtrW(data->imeWnd, IMMGWL_IMC, (LONG_PTR)data); - IMM_GetThreadData()->hwndDefault = data->imeWnd; + SetWindowLongPtrW(data->immKbd->UIWnd, IMMGWL_IMC, (LONG_PTR)data); } + else if (fOpen) + SetWindowLongPtrW(data->immKbd->UIWnd, IMMGWL_IMC, (LONG_PTR)data); if (!fOpen != !data->IMC.fOpen) { @@ -2857,3 +2880,53 @@ BOOL WINAPI ImmGetHotKey(DWORD hotkey, UINT *modifiers, UINT *key, HKL hkl) FIXME("%x, %p, %p, %p: stub\n", hotkey, modifiers, key, hkl); return FALSE; } + + +/* + * Window Proc for the Default IME window class + */ +static LRESULT WINAPI DefIME_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, + LPARAM lParam) +{ + switch (uMsg) + { + case WM_CREATE: + case WM_NCCREATE: + return TRUE; + case WM_IME_STARTCOMPOSITION: + case WM_IME_ENDCOMPOSITION: + case WM_IME_COMPOSITION: + case WM_IME_SETCONTEXT: + case WM_IME_NOTIFY: + case WM_IME_CONTROL: + case WM_IME_COMPOSITIONFULL: + case WM_IME_SELECT: + case WM_IME_CHAR: + case WM_IME_REQUEST: + case WM_IME_KEYDOWN: + case WM_IME_KEYUP: + { + ImmHkl *immHkl = IMM_GetImmHkl(GetKeyboardLayout(0)); + if (immHkl->UIWnd) + return SendMessageW(immHkl->UIWnd,uMsg,wParam,lParam); + else + return FALSE; + } + default: + if ((uMsg == WM_MSIME_RECONVERTOPTIONS) || + (uMsg == WM_MSIME_SERVICE) || + (uMsg == WM_MSIME_MOUSE) || + (uMsg == WM_MSIME_RECONVERTREQUEST) || + (uMsg == WM_MSIME_RECONVERT) || + (uMsg == WM_MSIME_QUERYPOSITION) || + (uMsg == WM_MSIME_DOCUMENTFEED)) + { + ImmHkl *immHkl = IMM_GetImmHkl(GetKeyboardLayout(0)); + if (immHkl->UIWnd) + return SendMessageW(immHkl->UIWnd,uMsg,wParam,lParam); + else + return FALSE; + } + return DefWindowProcW(hwnd, uMsg, wParam, lParam); + } +} diff --git a/dll/win32/lsasrv/CMakeLists.txt b/dll/win32/lsasrv/CMakeLists.txt index ba3b44933e7..9804adaaca3 100644 --- a/dll/win32/lsasrv/CMakeLists.txt +++ b/dll/win32/lsasrv/CMakeLists.txt @@ -8,6 +8,7 @@ add_rpc_files(server ${REACTOS_SOURCE_DIR}/include/reactos/idl/lsa.idl) spec2def(lsasrv.dll lsasrv.spec ADD_IMPORTLIB) list(APPEND SOURCE + authpackage.c authport.c database.c lookup.c @@ -23,7 +24,7 @@ list(APPEND SOURCE ${CMAKE_CURRENT_BINARY_DIR}/lsa_s.c) add_library(lsasrv SHARED ${SOURCE}) -set_module_type(lsasrv win32dll ENTRYPOINT 0 UNICODE) +set_module_type(lsasrv win32dll UNICODE) target_link_libraries(lsasrv wine ${PSEH_LIB}) add_importlibs(lsasrv samsrv rpcrt4 msvcrt kernel32 advapi32 ntdll) add_pch(lsasrv lsasrv.h) diff --git a/dll/win32/lsasrv/authpackage.c b/dll/win32/lsasrv/authpackage.c new file mode 100644 index 00000000000..62199b0e9aa --- /dev/null +++ b/dll/win32/lsasrv/authpackage.c @@ -0,0 +1,663 @@ +/* + * PROJECT: Local Security Authority Server DLL + * LICENSE: GPL - See COPYING in the top level directory + * FILE: dll/win32/lsasrv/authpackage.c + * PURPOSE: Authenticaton package management routines + * COPYRIGHT: Copyright 2013 Eric Kohl + */ + +/* INCLUDES ****************************************************************/ + +#include "lsasrv.h" + +WINE_DEFAULT_DEBUG_CHANNEL(lsasrv); + +typedef enum _LSA_TOKEN_INFORMATION_TYPE +{ + LsaTokenInformationNull, + LsaTokenInformationV1 +} LSA_TOKEN_INFORMATION_TYPE, *PLSA_TOKEN_INFORMATION_TYPE; + +typedef PVOID PLSA_CLIENT_REQUEST; + +typedef PVOID (NTAPI *PLSA_ALLOCATE_LSA_HEAP)(ULONG); +typedef VOID (NTAPI *PLSA_FREE_LSA_HEAP)(PVOID); +typedef NTSTATUS (NTAPI *PLSA_ALLOCATE_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, ULONG, PVOID*); +typedef NTSTATUS (NTAPI *PLSA_FREE_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, PVOID); +typedef NTSTATUS (NTAPI *PLSA_COPY_TO_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, ULONG, + PVOID, PVOID); +typedef NTSTATUS (NTAPI *PLSA_COPY_FROM_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, + ULONG, PVOID, PVOID); + +typedef struct LSA_DISPATCH_TABLE +{ + PVOID /*PLSA_CREATE_LOGON_SESSION */ CreateLogonSession; + PVOID /*PLSA_DELETE_LOGON_SESSION */ DeleteLogonSession; + PVOID /*PLSA_ADD_CREDENTIAL */ AddCredential; + PVOID /*PLSA_GET_CREDENTIALS */ GetCredentials; + PVOID /*PLSA_DELETE_CREDENTIAL */ DeleteCredential; + PLSA_ALLOCATE_LSA_HEAP AllocateLsaHeap; + PLSA_FREE_LSA_HEAP FreeLsaHeap; + PLSA_ALLOCATE_CLIENT_BUFFER AllocateClientBuffer; + PLSA_FREE_CLIENT_BUFFER FreeClientBuffer; + PLSA_COPY_TO_CLIENT_BUFFER CopyToClientBuffer; + PLSA_COPY_FROM_CLIENT_BUFFER CopyFromClientBuffer; +} LSA_DISPATCH_TABLE, *PLSA_DISPATCH_TABLE; + + +typedef NTSTATUS (NTAPI *PLSA_AP_INITIALIZE_PACKAGE)(ULONG, PLSA_DISPATCH_TABLE, + PLSA_STRING, PLSA_STRING, PLSA_STRING *); +typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE_INTERNAL)(PLSA_CLIENT_REQUEST, PVOID, PVOID, + ULONG, PVOID *, PULONG, PNTSTATUS); +typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE_PASSTHROUGH)(PLSA_CLIENT_REQUEST, + PVOID, PVOID, ULONG, PVOID *, PULONG, PNTSTATUS); +typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE_UNTRUSTED)(PLSA_CLIENT_REQUEST, + PVOID, PVOID, ULONG, PVOID *, PULONG, PNTSTATUS); +typedef VOID (NTAPI *PLSA_AP_LOGON_TERMINATED)(PLUID); +typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER_EX2)(PLSA_CLIENT_REQUEST, + SECURITY_LOGON_TYPE, PVOID, PVOID, ULONG, PVOID *, PULONG, PLUID, PNTSTATUS, + PLSA_TOKEN_INFORMATION_TYPE, PVOID *, PUNICODE_STRING *, PUNICODE_STRING *, + PUNICODE_STRING *, PVOID /*PSECPKG_PRIMARY_CRED*/, PVOID /*PSECPKG_SUPPLEMENTAL_CRED_ARRAY **/); +typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER_EX)(PLSA_CLIENT_REQUEST, + SECURITY_LOGON_TYPE, PVOID, PVOID, ULONG, PVOID *, PULONG, PLUID, PNTSTATUS, + PLSA_TOKEN_INFORMATION_TYPE, PVOID *, PUNICODE_STRING *, PUNICODE_STRING *, + PUNICODE_STRING *); + +typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER_INTERNAL)(PLSA_CLIENT_REQUEST, SECURITY_LOGON_TYPE, + PVOID, PVOID, ULONG, PVOID *, PULONG, PLUID, PNTSTATUS, PLSA_TOKEN_INFORMATION_TYPE, + PVOID *, PUNICODE_STRING *, PUNICODE_STRING *); + +typedef struct _AUTH_PACKAGE +{ + LIST_ENTRY Entry; + PSTRING Name; + ULONG Id; + PVOID ModuleHandle; + + PLSA_AP_INITIALIZE_PACKAGE LsaApInitializePackage; + PLSA_AP_CALL_PACKAGE_INTERNAL LsaApCallPackage; + PLSA_AP_CALL_PACKAGE_PASSTHROUGH LsaApCallPackagePassthrough; + PLSA_AP_CALL_PACKAGE_UNTRUSTED LsaApCallPackageUntrusted; + PLSA_AP_LOGON_TERMINATED LsaApLogonTerminated; + PLSA_AP_LOGON_USER_EX2 LsaApLogonUserEx2; + PLSA_AP_LOGON_USER_EX LsaApLogonUserEx; + PLSA_AP_LOGON_USER_INTERNAL LsaApLogonUser; +} AUTH_PACKAGE, *PAUTH_PACKAGE; + + +/* GLOBALS *****************************************************************/ + +static LIST_ENTRY PackageListHead; +static ULONG PackageId; +static LSA_DISPATCH_TABLE DispatchTable; + + +/* FUNCTIONS ***************************************************************/ + +static +NTSTATUS +NTAPI +LsapAddAuthPackage(IN PWSTR ValueName, + IN ULONG ValueType, + IN PVOID ValueData, + IN ULONG ValueLength, + IN PVOID Context, + IN PVOID EntryContext) +{ + PAUTH_PACKAGE Package = NULL; + UNICODE_STRING PackageName; + STRING ProcName; + PULONG Id; + NTSTATUS Status = STATUS_SUCCESS; + + TRACE("LsapAddAuthPackage()\n"); + + PackageName.Length = (USHORT)ValueLength - sizeof(WCHAR); + PackageName.MaximumLength = (USHORT)ValueLength; + PackageName.Buffer = ValueData; + + Id = (PULONG)Context; + + Package = RtlAllocateHeap(RtlGetProcessHeap(), + HEAP_ZERO_MEMORY, + sizeof(AUTH_PACKAGE)); + if (Package == NULL) + return STATUS_INSUFFICIENT_RESOURCES; + + Status = LdrLoadDll(NULL, + NULL, + &PackageName, + &Package->ModuleHandle); + if (!NT_SUCCESS(Status)) + { + TRACE("LdrLoadDll failed (Status 0x%08lx)\n", Status); + goto done; + } + + RtlInitAnsiString(&ProcName, "LsaApInitializePackage"); + Status = LdrGetProcedureAddress(Package->ModuleHandle, + &ProcName, + 0, + (PVOID *)&Package->LsaApInitializePackage); + if (!NT_SUCCESS(Status)) + { + TRACE("LdrGetProcedureAddress() failed (Status 0x%08lx)\n", Status); + goto done; + } + + RtlInitAnsiString(&ProcName, "LsaApCallPackage"); + Status = LdrGetProcedureAddress(Package->ModuleHandle, + &ProcName, + 0, + (PVOID *)&Package->LsaApCallPackage); + if (!NT_SUCCESS(Status)) + { + TRACE("LdrGetProcedureAddress() failed (Status 0x%08lx)\n", Status); + goto done; + } + + RtlInitAnsiString(&ProcName, "LsaApCallPackagePassthrough"); + Status = LdrGetProcedureAddress(Package->ModuleHandle, + &ProcName, + 0, + (PVOID *)&Package->LsaApCallPackagePassthrough); + if (!NT_SUCCESS(Status)) + { + TRACE("LdrGetProcedureAddress() failed (Status 0x%08lx)\n", Status); + goto done; + } + + RtlInitAnsiString(&ProcName, "LsaApCallPackageUntrusted"); + Status = LdrGetProcedureAddress(Package->ModuleHandle, + &ProcName, + 0, + (PVOID *)&Package->LsaApCallPackageUntrusted); + if (!NT_SUCCESS(Status)) + { + TRACE("LdrGetProcedureAddress() failed (Status 0x%08lx)\n", Status); + goto done; + } + + RtlInitAnsiString(&ProcName, "LsaApLogonTerminated"); + Status = LdrGetProcedureAddress(Package->ModuleHandle, + &ProcName, + 0, + (PVOID *)&Package->LsaApLogonTerminated); + if (!NT_SUCCESS(Status)) + { + TRACE("LdrGetProcedureAddress() failed (Status 0x%08lx)\n", Status); + goto done; + } + + RtlInitAnsiString(&ProcName, "LsaApLogonUserEx2"); + Status = LdrGetProcedureAddress(Package->ModuleHandle, + &ProcName, + 0, + (PVOID *)&Package->LsaApLogonUserEx2); + if (!NT_SUCCESS(Status)) + { + RtlInitAnsiString(&ProcName, "LsaApLogonUserEx"); + Status = LdrGetProcedureAddress(Package->ModuleHandle, + &ProcName, + 0, + (PVOID *)&Package->LsaApLogonUserEx); + if (!NT_SUCCESS(Status)) + { + RtlInitAnsiString(&ProcName, "LsaApLogonUser"); + Status = LdrGetProcedureAddress(Package->ModuleHandle, + &ProcName, + 0, + (PVOID *)&Package->LsaApLogonUser); + if (!NT_SUCCESS(Status)) + { + TRACE("LdrGetProcedureAddress() failed (Status 0x%08lx)\n", Status); + goto done; + } + } + } + + /* Initialize the current package */ + Status = Package->LsaApInitializePackage(*Id, + &DispatchTable, + NULL, + NULL, + &Package->Name); + if (!NT_SUCCESS(Status)) + { + TRACE("Package->LsaApInitializePackage() failed (Status 0x%08lx)\n", Status); + goto done; + } + + TRACE("Package Name: %s\n", Package->Name->Buffer); + + Package->Id = *Id; + *Id++; + + InsertTailList(&PackageListHead, &Package->Entry); + +done: + if (!NT_SUCCESS(Status)) + { + if (Package != NULL) + { + if (Package->ModuleHandle != NULL) + LdrUnloadDll(Package->ModuleHandle); + + if (Package->Name != NULL) + { + if (Package->Name->Buffer != NULL) + RtlFreeHeap(RtlGetProcessHeap(), 0, Package->Name->Buffer); + + RtlFreeHeap(RtlGetProcessHeap(), 0, Package->Name); + } + + RtlFreeHeap(RtlGetProcessHeap(), 0, Package); + } + } + + return Status; +} + + +static +PAUTH_PACKAGE +LsapGetAuthenticationPackage(IN ULONG PackageId) +{ + PLIST_ENTRY ListEntry; + PAUTH_PACKAGE Package; + + ListEntry = PackageListHead.Flink; + while (ListEntry != &PackageListHead) + { + Package = CONTAINING_RECORD(ListEntry, AUTH_PACKAGE, Entry); + + if (Package->Id == PackageId) + { + return Package; + } + + ListEntry = ListEntry->Flink; + } + + return NULL; +} + + +static +PVOID +NTAPI +LsapAllocateHeap(IN ULONG Length) +{ + return RtlAllocateHeap(RtlGetProcessHeap(), + HEAP_ZERO_MEMORY, + Length); +} + + +static +VOID +NTAPI +LsapFreeHeap(IN PVOID Base) +{ + RtlFreeHeap(RtlGetProcessHeap(), + 0, + Base); +} + + +static +NTSTATUS +NTAPI +LsapAllocateClientBuffer(IN PLSA_CLIENT_REQUEST ClientRequest, + IN ULONG LengthRequired, + OUT PVOID *ClientBaseAddress) +{ + PLSAP_LOGON_CONTEXT LogonContext; + ULONG Length; + + *ClientBaseAddress = NULL; + + LogonContext = (PLSAP_LOGON_CONTEXT)ClientRequest; + + Length = LengthRequired; + return NtAllocateVirtualMemory(LogonContext->ClientProcessHandle, + ClientBaseAddress, + 0, + &Length, + MEM_COMMIT, + PAGE_READWRITE); +} + + +static +NTSTATUS +NTAPI +LsapFreeClientBuffer(IN PLSA_CLIENT_REQUEST ClientRequest, + IN PVOID ClientBaseAddress) +{ + PLSAP_LOGON_CONTEXT LogonContext; + ULONG Length; + + if (ClientBaseAddress == NULL) + return STATUS_SUCCESS; + + LogonContext = (PLSAP_LOGON_CONTEXT)ClientRequest; + + Length = 0; + return NtFreeVirtualMemory(LogonContext->ClientProcessHandle, + &ClientBaseAddress, + &Length, + MEM_RELEASE); +} + + +static +NTSTATUS +NTAPI +LsapCopyToClientBuffer(IN PLSA_CLIENT_REQUEST ClientRequest, + IN ULONG Length, + IN PVOID ClientBaseAddress, + IN PVOID BufferToCopy) +{ + PLSAP_LOGON_CONTEXT LogonContext; + + LogonContext = (PLSAP_LOGON_CONTEXT)ClientRequest; + + return NtWriteVirtualMemory(LogonContext->ClientProcessHandle, + ClientBaseAddress, + BufferToCopy, + Length, + NULL); +} + + +static +NTSTATUS +NTAPI +LsapCopyFromClientBuffer(IN PLSA_CLIENT_REQUEST ClientRequest, + IN ULONG Length, + IN PVOID BufferToCopy, + IN PVOID ClientBaseAddress) +{ + PLSAP_LOGON_CONTEXT LogonContext; + + LogonContext = (PLSAP_LOGON_CONTEXT)ClientRequest; + + return NtReadVirtualMemory(LogonContext->ClientProcessHandle, + ClientBaseAddress, + BufferToCopy, + Length, + NULL); +} + + +NTSTATUS +LsapInitAuthPackages(VOID) +{ + RTL_QUERY_REGISTRY_TABLE AuthPackageTable[] = { + {LsapAddAuthPackage, 0, L"Authentication Packages", NULL, REG_NONE, NULL, 0}, + {NULL, 0, NULL, NULL, REG_NONE, NULL, 0}}; + + NTSTATUS Status; + + InitializeListHead(&PackageListHead); + PackageId = 0; + + /* Initialize the dispatch table */ + DispatchTable.CreateLogonSession = NULL; + DispatchTable.DeleteLogonSession = NULL; + DispatchTable.AddCredential = NULL; + DispatchTable.GetCredentials = NULL; + DispatchTable.DeleteCredential = NULL; + DispatchTable.AllocateLsaHeap = &LsapAllocateHeap; + DispatchTable.FreeLsaHeap = &LsapFreeHeap; + DispatchTable.AllocateClientBuffer = &LsapAllocateClientBuffer; + DispatchTable.FreeClientBuffer = &LsapFreeClientBuffer; + DispatchTable.CopyToClientBuffer = &LsapCopyToClientBuffer; + DispatchTable.CopyFromClientBuffer = &LsapCopyFromClientBuffer; + + /* Add registered authentication packages */ + Status = RtlQueryRegistryValues(RTL_REGISTRY_CONTROL, + L"Lsa", + AuthPackageTable, + &PackageId, + NULL); + + + return STATUS_SUCCESS; +} + + +NTSTATUS +LsapLookupAuthenticationPackage(PLSA_API_MSG RequestMsg, + PLSAP_LOGON_CONTEXT LogonContext) +{ + PLIST_ENTRY ListEntry; + PAUTH_PACKAGE Package; + ULONG PackageNameLength; + PCHAR PackageName; + + TRACE("(%p %p)\n", RequestMsg, LogonContext); + + PackageNameLength = RequestMsg->LookupAuthenticationPackage.Request.PackageNameLength; + PackageName = RequestMsg->LookupAuthenticationPackage.Request.PackageName; + + TRACE("PackageName: %s\n", PackageName); + + ListEntry = PackageListHead.Flink; + while (ListEntry != &PackageListHead) + { + Package = CONTAINING_RECORD(ListEntry, AUTH_PACKAGE, Entry); + + if ((PackageNameLength == Package->Name->Length) && + (_strnicmp(PackageName, Package->Name->Buffer, Package->Name->Length) == 0)) + { + RequestMsg->LookupAuthenticationPackage.Reply.Package = Package->Id; + return STATUS_SUCCESS; + } + + ListEntry = ListEntry->Flink; + } + + return STATUS_NO_SUCH_PACKAGE; +} + + +NTSTATUS +LsapCallAuthenticationPackage(PLSA_API_MSG RequestMsg, + PLSAP_LOGON_CONTEXT LogonContext) +{ + PAUTH_PACKAGE Package; + PVOID LocalBuffer = NULL; + ULONG PackageId; + NTSTATUS Status; + + TRACE("(%p %p)\n", RequestMsg, LogonContext); + + PackageId = RequestMsg->CallAuthenticationPackage.Request.AuthenticationPackage; + + /* Get the right authentication package */ + Package = LsapGetAuthenticationPackage(PackageId); + if (Package == NULL) + { + TRACE("LsapGetAuthenticationPackage() failed to find a package\n"); + return STATUS_NO_SUCH_PACKAGE; + } + + if (RequestMsg->CallAuthenticationPackage.Request.SubmitBufferLength > 0) + { + LocalBuffer = RtlAllocateHeap(RtlGetProcessHeap(), + HEAP_ZERO_MEMORY, + RequestMsg->CallAuthenticationPackage.Request.SubmitBufferLength); + if (LocalBuffer == NULL) + { + return STATUS_INSUFFICIENT_RESOURCES; + } + + Status = NtReadVirtualMemory(LogonContext->ClientProcessHandle, + RequestMsg->CallAuthenticationPackage.Request.ProtocolSubmitBuffer, + LocalBuffer, + RequestMsg->CallAuthenticationPackage.Request.SubmitBufferLength, + NULL); + if (!NT_SUCCESS(Status)) + { + TRACE("NtReadVirtualMemory() failed (Status 0x%08lx)\n", Status); + RtlFreeHeap(RtlGetProcessHeap(), 0, LocalBuffer); + return Status; + } + } + + Status = Package->LsaApCallPackage((PLSA_CLIENT_REQUEST)LogonContext, + LocalBuffer, + RequestMsg->CallAuthenticationPackage.Request.ProtocolSubmitBuffer, + RequestMsg->CallAuthenticationPackage.Request.SubmitBufferLength, + &RequestMsg->CallAuthenticationPackage.Reply.ProtocolReturnBuffer, + &RequestMsg->CallAuthenticationPackage.Reply.ReturnBufferLength, + &RequestMsg->CallAuthenticationPackage.Reply.ProtocolStatus); + if (!NT_SUCCESS(Status)) + { + TRACE("Package->LsaApCallPackage() failed (Status 0x%08lx)\n", Status); + } + + if (LocalBuffer != NULL) + RtlFreeHeap(RtlGetProcessHeap(), 0, LocalBuffer); + + return Status; +} + + +NTSTATUS +LsapLogonUser(PLSA_API_MSG RequestMsg, + PLSAP_LOGON_CONTEXT LogonContext) +{ + PAUTH_PACKAGE Package; + ULONG PackageId; + NTSTATUS Status; + + LSA_TOKEN_INFORMATION_TYPE TokenInformationType; + PVOID TokenInformation = NULL; + PUNICODE_STRING AccountName = NULL; + PUNICODE_STRING AuthenticatingAuthority = NULL; + PUNICODE_STRING MachineName = NULL; + + PVOID LocalAuthInfo = NULL; + + TRACE("(%p %p)\n", RequestMsg, LogonContext); + + PackageId = RequestMsg->LogonUser.Request.AuthenticationPackage; + + /* Get the right authentication package */ + Package = LsapGetAuthenticationPackage(PackageId); + if (Package == NULL) + { + TRACE("LsapGetAuthenticationPackage() failed to find a package\n"); + return STATUS_NO_SUCH_PACKAGE; + } + + if (RequestMsg->LogonUser.Request.AuthenticationInformationLength > 0) + { + /* Allocat the local authentication info buffer */ + LocalAuthInfo = RtlAllocateHeap(RtlGetProcessHeap(), + HEAP_ZERO_MEMORY, + RequestMsg->LogonUser.Request.AuthenticationInformationLength); + if (LocalAuthInfo == NULL) + { + TRACE("RtlAllocateHeap() failed\n"); + return STATUS_INSUFFICIENT_RESOURCES; + } + + /* Read the authentication info from the callers adress space */ + Status = NtReadVirtualMemory(LogonContext->ClientProcessHandle, + RequestMsg->LogonUser.Request.AuthenticationInformation, + LocalAuthInfo, + RequestMsg->LogonUser.Request.AuthenticationInformationLength, + NULL); + if (!NT_SUCCESS(Status)) + { + TRACE("NtReadVirtualMemory() failed (Status 0x%08lx)\n", Status); + RtlFreeHeap(RtlGetProcessHeap(), 0, LocalAuthInfo); + return Status; + } + } + + if (Package->LsaApLogonUserEx2 != NULL) + { + Status = Package->LsaApLogonUserEx2((PLSA_CLIENT_REQUEST)LogonContext, + RequestMsg->LogonUser.Request.LogonType, + LocalAuthInfo, + RequestMsg->LogonUser.Request.AuthenticationInformation, + RequestMsg->LogonUser.Request.AuthenticationInformationLength, + &RequestMsg->LogonUser.Reply.ProfileBuffer, + &RequestMsg->LogonUser.Reply.ProfileBufferLength, + &RequestMsg->LogonUser.Reply.LogonId, + &RequestMsg->LogonUser.Reply.SubStatus, + &TokenInformationType, + &TokenInformation, + &AccountName, + &AuthenticatingAuthority, + &MachineName, + NULL, /* FIXME: PSECPKG_PRIMARY_CRED PrimaryCredentials */ + NULL); /* FIXME: PSECPKG_SUPPLEMENTAL_CRED_ARRAY *SupplementalCredentials */ + } + else if (Package->LsaApLogonUserEx != NULL) + { + Status = Package->LsaApLogonUserEx((PLSA_CLIENT_REQUEST)LogonContext, + RequestMsg->LogonUser.Request.LogonType, + LocalAuthInfo, + RequestMsg->LogonUser.Request.AuthenticationInformation, + RequestMsg->LogonUser.Request.AuthenticationInformationLength, + &RequestMsg->LogonUser.Reply.ProfileBuffer, + &RequestMsg->LogonUser.Reply.ProfileBufferLength, + &RequestMsg->LogonUser.Reply.LogonId, + &RequestMsg->LogonUser.Reply.SubStatus, + &TokenInformationType, + &TokenInformation, + &AccountName, + &AuthenticatingAuthority, + &MachineName); + } + else + { + Status = Package->LsaApLogonUser((PLSA_CLIENT_REQUEST)LogonContext, + RequestMsg->LogonUser.Request.LogonType, + LocalAuthInfo, + RequestMsg->LogonUser.Request.AuthenticationInformation, + RequestMsg->LogonUser.Request.AuthenticationInformationLength, + &RequestMsg->LogonUser.Reply.ProfileBuffer, + &RequestMsg->LogonUser.Reply.ProfileBufferLength, + &RequestMsg->LogonUser.Reply.LogonId, + &RequestMsg->LogonUser.Reply.SubStatus, + &TokenInformationType, + &TokenInformation, + &AccountName, + &AuthenticatingAuthority); + } + + /* Free the local authentication info buffer */ + if (LocalAuthInfo != NULL) + RtlFreeHeap(RtlGetProcessHeap(), 0, LocalAuthInfo); + + if (TokenInformation != NULL) + { + + } + + if (AuthenticatingAuthority != NULL) + { + + } + + if (AccountName != NULL) + { + + } + + if (MachineName != NULL) + { + + } + + return Status; +} + +/* EOF */ diff --git a/dll/win32/lsasrv/authport.c b/dll/win32/lsasrv/authport.c index 3d3633ba4b5..61f27b3bae8 100644 --- a/dll/win32/lsasrv/authport.c +++ b/dll/win32/lsasrv/authport.c @@ -14,23 +14,149 @@ WINE_DEFAULT_DEBUG_CHANNEL(lsasrv); +static LIST_ENTRY LsapLogonContextList; + static HANDLE PortThreadHandle = NULL; static HANDLE AuthPortHandle = NULL; /* FUNCTIONS ***************************************************************/ +static NTSTATUS +LsapDeregisterLogonProcess(PLSA_API_MSG RequestMsg, + PLSAP_LOGON_CONTEXT LogonContext) +{ + TRACE("(%p %p)\n", RequestMsg, LogonContext); + + RemoveHeadList(&LogonContext->Entry); + + NtClose(LogonContext->ClientProcessHandle); + NtClose(LogonContext->ConnectionHandle); + + RtlFreeHeap(RtlGetProcessHeap(), 0, LogonContext); + + return STATUS_SUCCESS; +} + + +static NTSTATUS +LsapCheckLogonProcess(PLSA_API_MSG RequestMsg, + PLSAP_LOGON_CONTEXT *LogonContext) +{ + OBJECT_ATTRIBUTES ObjectAttributes; + HANDLE ProcessHandle = NULL; + PLSAP_LOGON_CONTEXT Context = NULL; + NTSTATUS Status; + + TRACE("(%p)\n", RequestMsg); + + TRACE("Client ID: %p %p\n", RequestMsg->h.ClientId.UniqueProcess, RequestMsg->h.ClientId.UniqueThread); + + InitializeObjectAttributes(&ObjectAttributes, + NULL, + 0, + NULL, + NULL); + + Status = NtOpenProcess(&ProcessHandle, + PROCESS_VM_READ, + &ObjectAttributes, + &RequestMsg->h.ClientId); + if (!NT_SUCCESS(Status)) + { + TRACE("NtOpenProcess() failed (Status %lx)\n", Status); + return Status; + } + + /* Allocate the logon context */ + Context = RtlAllocateHeap(RtlGetProcessHeap(), + HEAP_ZERO_MEMORY, + sizeof(LSAP_LOGON_CONTEXT)); + if (Context == NULL) + { + NtClose(ProcessHandle); + return STATUS_INSUFFICIENT_RESOURCES; + } + + TRACE("New LogonContext: %p\n", Context); + + Context->ClientProcessHandle = ProcessHandle; + + *LogonContext = Context; + + return STATUS_SUCCESS; +} + + +static NTSTATUS +LsapHandlePortConnection(PLSA_API_MSG RequestMsg) +{ + PLSAP_LOGON_CONTEXT LogonContext = NULL; + HANDLE ConnectionHandle = NULL; + BOOLEAN Accept; + REMOTE_PORT_VIEW RemotePortView; + NTSTATUS Status; + + TRACE("(%p)\n", RequestMsg); + + TRACE("Logon Process Name: %s\n", RequestMsg->ConnectInfo.LogonProcessNameBuffer); + + Status = LsapCheckLogonProcess(RequestMsg, + &LogonContext); + + RequestMsg->ConnectInfo.OperationalMode = 0x43218765; + + RequestMsg->ConnectInfo.Status = Status; + + if (NT_SUCCESS(Status)) + { + Accept = TRUE; + } + else + { + Accept = FALSE; + } + + RemotePortView.Length = sizeof(REMOTE_PORT_VIEW); + Status = NtAcceptConnectPort(&ConnectionHandle, + (PVOID*)LogonContext, + &RequestMsg->h, + Accept, + NULL, + &RemotePortView); + if (!NT_SUCCESS(Status)) + { + ERR("NtAcceptConnectPort failed (Status 0x%lx)\n", Status); + return Status; + } + + if (Accept == TRUE) + { + LogonContext->ConnectionHandle = ConnectionHandle; + + InsertHeadList(&LsapLogonContextList, + &LogonContext->Entry); + + Status = NtCompleteConnectPort(ConnectionHandle); + if (!NT_SUCCESS(Status)) + { + ERR("NtCompleteConnectPort failed (Status 0x%lx)\n", Status); + return Status; + } + } + + return Status; +} + + NTSTATUS WINAPI AuthPortThreadRoutine(PVOID Param) { - LSASS_REQUEST Request; - PPORT_MESSAGE Reply = NULL; + PLSAP_LOGON_CONTEXT LogonContext; + PLSA_API_MSG ReplyMsg = NULL; + LSA_API_MSG RequestMsg; NTSTATUS Status; - HANDLE ConnectionHandle = NULL; - PVOID Context = NULL; - BOOLEAN Accept; - TRACE("AuthPortThreadRoutine() called\n"); Status = STATUS_SUCCESS; @@ -38,9 +164,9 @@ AuthPortThreadRoutine(PVOID Param) for (;;) { Status = NtReplyWaitReceivePort(AuthPortHandle, - 0, - Reply, - &Request.Header); + (PVOID*)&LogonContext, + &ReplyMsg->h, + &RequestMsg.h); if (!NT_SUCCESS(Status)) { TRACE("NtReplyWaitReceivePort() failed (Status %lx)\n", Status); @@ -49,42 +175,71 @@ AuthPortThreadRoutine(PVOID Param) TRACE("Received message\n"); - if (Request.Header.u2.s2.Type == LPC_CONNECTION_REQUEST) + switch (RequestMsg.h.u2.s2.Type) { - TRACE("Port connection request\n"); + case LPC_CONNECTION_REQUEST: + TRACE("Port connection request\n"); + Status = LsapHandlePortConnection(&RequestMsg); + ReplyMsg = NULL; + break; - Accept = TRUE; - NtAcceptConnectPort(&ConnectionHandle, - &Context, - &Request.Header, - Accept, - NULL, - NULL); + case LPC_PORT_CLOSED: + TRACE("Port closed\n"); + ReplyMsg = NULL; + break; + case LPC_CLIENT_DIED: + TRACE("Client died\n"); + ReplyMsg = NULL; + break; - NtCompleteConnectPort(ConnectionHandle); + default: + TRACE("Received request (ApiNumber: %lu)\n", RequestMsg.ApiNumber); - } - else if (Request.Header.u2.s2.Type == LPC_PORT_CLOSED || - Request.Header.u2.s2.Type == LPC_CLIENT_DIED) - { - TRACE("Port closed or client died request\n"); + switch (RequestMsg.ApiNumber) + { + case LSASS_REQUEST_CALL_AUTHENTICATION_PACKAGE: + RequestMsg.Status = LsapCallAuthenticationPackage(&RequestMsg, + LogonContext); + ReplyMsg = &RequestMsg; + break; -// return STATUS_UNSUCCESSFUL; - } - else if (Request.Header.u2.s2.Type == LPC_REQUEST) - { - TRACE("Received request (Type: %lu)\n", Request.Type); + case LSASS_REQUEST_DEREGISTER_LOGON_PROCESS: - } - else if (Request.Header.u2.s2.Type == LPC_DATAGRAM) - { - TRACE("Received datagram\n"); + ReplyMsg = &RequestMsg; + RequestMsg.Status = STATUS_SUCCESS; + Status = NtReplyPort(AuthPortHandle, + &ReplyMsg->h); + LsapDeregisterLogonProcess(&RequestMsg, + LogonContext); + + ReplyMsg = NULL; + break; + + case LSASS_REQUEST_LOGON_USER: + RequestMsg.Status = LsapLogonUser(&RequestMsg, + LogonContext); + ReplyMsg = &RequestMsg; + break; + + case LSASS_REQUEST_LOOKUP_AUTHENTICATION_PACKAGE: + RequestMsg.Status = LsapLookupAuthenticationPackage(&RequestMsg, + LogonContext); + ReplyMsg = &RequestMsg; + break; + + default: + RequestMsg.Status = STATUS_SUCCESS; /* FIXME */ + ReplyMsg = &RequestMsg; + break; + } + + break; } } - return Status; + return STATUS_SUCCESS; } @@ -96,6 +251,9 @@ StartAuthenticationPort(VOID) DWORD ThreadId; NTSTATUS Status; + /* Initialize the logon context list */ + InitializeListHead(&LsapLogonContextList); + RtlInitUnicodeString(&PortName, L"\\LsaAuthenticationPort"); @@ -107,9 +265,9 @@ StartAuthenticationPort(VOID) Status = NtCreatePort(&AuthPortHandle, &ObjectAttributes, - 0, - 0x100, - 0x2000); + sizeof(LSA_CONNECTION_INFO), + sizeof(LSA_API_MSG), + sizeof(LSA_API_MSG) * 32); if (!NT_SUCCESS(Status)) { TRACE("NtCreatePort() failed (Status %lx)\n", Status); diff --git a/dll/win32/lsasrv/lsasrv.c b/dll/win32/lsasrv/lsasrv.c index 6398e999d5a..53198aa06fc 100644 --- a/dll/win32/lsasrv/lsasrv.c +++ b/dll/win32/lsasrv/lsasrv.c @@ -20,6 +20,7 @@ LsapInitLsa(VOID) { HANDLE hEvent; DWORD dwError; + NTSTATUS Status; TRACE("LsapInitLsa() called\n"); @@ -29,6 +30,22 @@ LsapInitLsa(VOID) /* Initialize the LSA database */ LsapInitDatabase(); + /* Initialize registered authentication packages */ + Status = LsapInitAuthPackages(); + if (!NT_SUCCESS(Status)) + { + ERR("LsapInitAuthPackages() failed (Status 0x%08lx)\n", Status); + return Status; + } + + /* Start the authentication port thread */ + Status = StartAuthenticationPort(); + if (!NT_SUCCESS(Status)) + { + ERR("StartAuthenticationPort() failed (Status 0x%08lx)\n", Status); + return Status; + } + /* Start the RPC server */ LsarStartRpcServer(); @@ -61,8 +78,6 @@ LsapInitLsa(VOID) /* NOTE: Do not close the event handle!!!! */ - StartAuthenticationPort(); - return STATUS_SUCCESS; } diff --git a/dll/win32/lsasrv/lsasrv.h b/dll/win32/lsasrv/lsasrv.h index d75a19106ad..b4d048cd8a7 100644 --- a/dll/win32/lsasrv/lsasrv.h +++ b/dll/win32/lsasrv/lsasrv.h @@ -19,9 +19,12 @@ #include #include #include +#include #include +#include #include #include +#include #include #include @@ -66,6 +69,12 @@ typedef struct _LSAP_POLICY_AUDIT_EVENTS_DATA DWORD AuditEvents[0]; } LSAP_POLICY_AUDIT_EVENTS_DATA, *PLSAP_POLICY_AUDIT_EVENTS_DATA; +typedef struct _LSAP_LOGON_CONTEXT +{ + LIST_ENTRY Entry; + HANDLE ClientProcessHandle; + HANDLE ConnectionHandle; +} LSAP_LOGON_CONTEXT, *PLSAP_LOGON_CONTEXT; extern SID_IDENTIFIER_AUTHORITY NullSidAuthority; extern SID_IDENTIFIER_AUTHORITY WorldSidAuthority; @@ -78,6 +87,21 @@ extern UNICODE_STRING BuiltinDomainName; extern PSID AccountDomainSid; extern UNICODE_STRING AccountDomainName; +/* authpackage.c */ +NTSTATUS +LsapInitAuthPackages(VOID); + +NTSTATUS +LsapLookupAuthenticationPackage(PLSA_API_MSG RequestMsg, + PLSAP_LOGON_CONTEXT LogonContext); + +NTSTATUS +LsapCallAuthenticationPackage(PLSA_API_MSG RequestMsg, + PLSAP_LOGON_CONTEXT LogonContext); + +NTSTATUS +LsapLogonUser(PLSA_API_MSG RequestMsg, + PLSAP_LOGON_CONTEXT LogonContext); /* authport.c */ NTSTATUS diff --git a/dll/win32/mcicda/CMakeLists.txt b/dll/win32/mcicda/CMakeLists.txt index d94e9013766..23a1f5a0672 100644 --- a/dll/win32/mcicda/CMakeLists.txt +++ b/dll/win32/mcicda/CMakeLists.txt @@ -10,8 +10,8 @@ list(APPEND SOURCE add_library(mcicda SHARED ${SOURCE}) -set_module_type(mcicda win32dll ENTRYPOINT 0 ) +set_module_type(mcicda win32dll) target_link_libraries(mcicda wine) -add_importlibs(mcicda winmm user32 kernel32 ntdll) +add_importlibs(mcicda msvcrt winmm user32 kernel32 ntdll) add_dependencies(mcicda psdk) add_cd_file(TARGET mcicda DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/mciseq/CMakeLists.txt b/dll/win32/mciseq/CMakeLists.txt index 5b9fc45467a..e02ae601935 100644 --- a/dll/win32/mciseq/CMakeLists.txt +++ b/dll/win32/mciseq/CMakeLists.txt @@ -10,10 +10,10 @@ list(APPEND SOURCE add_library(mciseq SHARED ${SOURCE}) -set_module_type(mciseq win32dll ENTRYPOINT 0) +set_module_type(mciseq win32dll) target_link_libraries(mciseq wine) -add_importlibs(mciseq winmm user32 kernel32 ntdll msvcrt) +add_importlibs(mciseq msvcrt winmm user32 kernel32 ntdll) add_dependencies(mciseq psdk) add_cd_file(TARGET mciseq DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/mciwave/CMakeLists.txt b/dll/win32/mciwave/CMakeLists.txt index 8a29a83caaa..67856b81ae9 100644 --- a/dll/win32/mciwave/CMakeLists.txt +++ b/dll/win32/mciwave/CMakeLists.txt @@ -13,7 +13,7 @@ list(APPEND SOURCE add_library(mciwave SHARED ${SOURCE}) -set_module_type(mciwave win32dll ENTRYPOINT 0) +set_module_type(mciwave win32dll) target_link_libraries(mciwave wine) add_importlibs(mciwave user32 winmm msvcrt kernel32 ntdll) diff --git a/dll/win32/mmdrv/CMakeLists.txt b/dll/win32/mmdrv/CMakeLists.txt index cffd8b46795..c5ff0b12648 100644 --- a/dll/win32/mmdrv/CMakeLists.txt +++ b/dll/win32/mmdrv/CMakeLists.txt @@ -15,8 +15,8 @@ list(APPEND SOURCE ${CMAKE_CURRENT_BINARY_DIR}/mmdrv.def) add_library(mmdrv SHARED ${SOURCE}) -set_module_type(mmdrv win32dll ENTRYPOINT 0 UNICODE) +set_module_type(mmdrv win32dll UNICODE) -add_importlibs(mmdrv winmm user32 kernel32 ntdll) +add_importlibs(mmdrv msvcrt winmm user32 kernel32 ntdll) add_dependencies(mmdrv psdk) add_cd_file(TARGET mmdrv DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/msacm32/msacm32.drv/CMakeLists.txt b/dll/win32/msacm32/msacm32.drv/CMakeLists.txt index d707e4893aa..407d47dde53 100644 --- a/dll/win32/msacm32/msacm32.drv/CMakeLists.txt +++ b/dll/win32/msacm32/msacm32.drv/CMakeLists.txt @@ -7,12 +7,12 @@ spec2def(msacm32.drv msacm32.drv.spec) add_library(msacm32.drv SHARED wavemap.c wavemap.rc ${CMAKE_CURRENT_BINARY_DIR}/msacm32.def) -set_module_type(msacm32.drv win32dll ENTRYPOINT 0 UNICODE) +set_module_type(msacm32.drv win32dll UNICODE) set_target_properties(msacm32.drv PROPERTIES SUFFIX "") target_link_libraries(msacm32.drv wine) -add_importlibs(msacm32.drv msacm32 user32 winmm advapi32 kernel32 ntdll) +add_importlibs(msacm32.drv msvcrt msacm32 user32 winmm advapi32 kernel32 ntdll) add_dependencies(msacm32.drv psdk) -add_cd_file(TARGET msacm32.drv DESTINATION reactos/system32 FOR all) \ No newline at end of file +add_cd_file(TARGET msacm32.drv DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/msadp32.acm/CMakeLists.txt b/dll/win32/msadp32.acm/CMakeLists.txt index 9e8bcfe9135..6625923a03e 100644 --- a/dll/win32/msadp32.acm/CMakeLists.txt +++ b/dll/win32/msadp32.acm/CMakeLists.txt @@ -10,7 +10,7 @@ list(APPEND SOURCE add_library(msadp32.acm SHARED ${SOURCE}) -set_module_type(msadp32.acm win32dll ENTRYPOINT 0 ) +set_module_type(msadp32.acm win32dll) set_target_properties(msadp32.acm PROPERTIES SUFFIX "") target_link_libraries(msadp32.acm wine) add_importlibs(msadp32.acm winmm user32 msvcrt kernel32 ntdll) diff --git a/dll/win32/msg711.acm/CMakeLists.txt b/dll/win32/msg711.acm/CMakeLists.txt index 47cd1366a8b..619a2988bf6 100644 --- a/dll/win32/msg711.acm/CMakeLists.txt +++ b/dll/win32/msg711.acm/CMakeLists.txt @@ -10,7 +10,7 @@ list(APPEND SOURCE add_library(msg711.acm SHARED ${SOURCE}) -set_module_type(msg711.acm win32dll ENTRYPOINT 0 ) +set_module_type(msg711.acm win32dll) set_target_properties(msg711.acm PROPERTIES SUFFIX "") target_link_libraries(msg711.acm wine) add_importlibs(msg711.acm winmm user32 msvcrt kernel32 ntdll) diff --git a/dll/win32/msgina/gui.c b/dll/win32/msgina/gui.c index 06e40aa0f26..23adb8913b1 100644 --- a/dll/win32/msgina/gui.c +++ b/dll/win32/msgina/gui.c @@ -59,23 +59,35 @@ StatusMessageWindowProc( static DWORD WINAPI StartupWindowThread(LPVOID lpParam) { - HDESK OldDesk; + HDESK hDesk; PDISPLAYSTATUSMSG msg = (PDISPLAYSTATUSMSG)lpParam; - OldDesk = GetThreadDesktop(GetCurrentThreadId()); - - if(!SetThreadDesktop(msg->hDesktop)) + /* When SetThreadDesktop is called the system closes the desktop handle when needed + so we have to create a new handle because this handle may still be in use by winlogon */ + if (!DuplicateHandle ( GetCurrentProcess(), + msg->hDesktop, + GetCurrentProcess(), + (HANDLE*)&hDesk, + 0, + FALSE, + DUPLICATE_SAME_ACCESS)) { HeapFree(GetProcessHeap(), 0, lpParam); return FALSE; } + + if(!SetThreadDesktop(hDesk)) + { + HeapFree(GetProcessHeap(), 0, lpParam); + return FALSE; + } + DialogBoxParam( hDllInstance, MAKEINTRESOURCE(IDD_STATUSWINDOW_DLG), GetDesktopWindow(), StatusMessageWindowProc, (LPARAM)lpParam); - SetThreadDesktop(OldDesk); HeapFree(GetProcessHeap(), 0, lpParam); return TRUE; @@ -217,6 +229,35 @@ GetTextboxText( return TRUE; } +static VOID +OnInitSecurityDlg(HWND hwnd, + PGINA_CONTEXT pgContext) +{ + WCHAR Buffer1[256]; + WCHAR Buffer2[256]; + WCHAR Buffer3[256]; + WCHAR Buffer4[512]; + + LoadStringW(pgContext->hDllInstance, IDS_LOGONMSG, Buffer1, 256); + + wsprintfW(Buffer2, L"%s\\%s", pgContext->Domain, pgContext->UserName); + wsprintfW(Buffer4, Buffer1, Buffer2); + + SetDlgItemTextW(hwnd, IDC_LOGONMSG, Buffer4); + + LoadStringW(pgContext->hDllInstance, IDS_LOGONDATE, Buffer1, 256); + + GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, + (SYSTEMTIME*)&pgContext->LogonTime, NULL, Buffer2, 256); + + GetTimeFormatW(LOCALE_USER_DEFAULT, 0, + (SYSTEMTIME*)&pgContext->LogonTime, NULL, Buffer3, 256); + + wsprintfW(Buffer4, Buffer1, Buffer2, Buffer3); + + SetDlgItemTextW(hwnd, IDC_LOGONDATE, Buffer4); +} + static INT_PTR CALLBACK LoggedOnWindowProc( IN HWND hwndDlg, @@ -224,10 +265,15 @@ LoggedOnWindowProc( IN WPARAM wParam, IN LPARAM lParam) { - UNREFERENCED_PARAMETER(lParam); - switch (uMsg) { + case WM_INITDIALOG: + { + OnInitSecurityDlg(hwndDlg, (PGINA_CONTEXT)lParam); + SetFocus(GetDlgItem(hwndDlg, IDNO)); + return TRUE; + } + case WM_COMMAND: { switch (LOWORD(wParam)) @@ -250,11 +296,6 @@ LoggedOnWindowProc( } break; } - case WM_INITDIALOG: - { - SetFocus(GetDlgItem(hwndDlg, IDNO)); - return TRUE; - } case WM_CLOSE: { EndDialog(hwndDlg, WLX_SAS_ACTION_NONE); @@ -413,6 +454,84 @@ GUILockedSAS( return WLX_SAS_ACTION_UNLOCK_WKSTA; } + +static VOID +OnInitLockedDlg(HWND hwnd, + PGINA_CONTEXT pgContext) +{ + WCHAR Buffer1[256]; + WCHAR Buffer2[256]; + WCHAR Buffer3[512]; + + LoadStringW(pgContext->hDllInstance, IDS_LOCKMSG, Buffer1, 256); + + wsprintfW(Buffer2, L"%s\\%s", pgContext->Domain, pgContext->UserName); + wsprintfW(Buffer3, Buffer1, Buffer2); + + SetDlgItemTextW(hwnd, IDC_LOCKMSG, Buffer3); +} + + +static INT_PTR CALLBACK +LockedWindowProc( + IN HWND hwndDlg, + IN UINT uMsg, + IN WPARAM wParam, + IN LPARAM lParam) +{ + PGINA_CONTEXT pgContext; + + pgContext = (PGINA_CONTEXT)GetWindowLongPtr(hwndDlg, GWL_USERDATA); + + switch (uMsg) + { + case WM_INITDIALOG: + { + pgContext = (PGINA_CONTEXT)lParam; + SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)pgContext); + + pgContext->hBitmap = LoadImage(hDllInstance, MAKEINTRESOURCE(IDI_ROSLOGO), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); + OnInitLockedDlg(hwndDlg, pgContext); + return TRUE; + } + case WM_PAINT: + { + PAINTSTRUCT ps; + HDC hdc; + if (pgContext->hBitmap) + { + hdc = BeginPaint(hwndDlg, &ps); + DrawStateW(hdc, NULL, NULL, (LPARAM)pgContext->hBitmap, (WPARAM)0, 0, 0, 0, 0, DST_BITMAP); + EndPaint(hwndDlg, &ps); + } + return TRUE; + } + case WM_DESTROY: + { + DeleteObject(pgContext->hBitmap); + return TRUE; + } + } + + return FALSE; +} + + +static VOID +GUIDisplayLockedNotice( + IN OUT PGINA_CONTEXT pgContext) +{ + TRACE("GUIdisplayLockedNotice()\n"); + + pgContext->pWlxFuncs->WlxDialogBoxParam( + pgContext->hWlx, + pgContext->hDllInstance, + MAKEINTRESOURCEW(IDD_LOCKED_DLG), + GetDesktopWindow(), + LockedWindowProc, + (LPARAM)pgContext); +} + GINA_UI GinaGraphicalUI = { GUIInitialize, GUIDisplayStatusMessage, @@ -421,4 +540,5 @@ GINA_UI GinaGraphicalUI = { GUILoggedOnSAS, GUILoggedOutSAS, GUILockedSAS, + GUIDisplayLockedNotice, }; diff --git a/dll/win32/msgina/lang/bg-BG.rc b/dll/win32/msgina/lang/bg-BG.rc index 8e327a3d256..32f0e21a63c 100644 --- a/dll/win32/msgina/lang/bg-BG.rc +++ b/dll/win32/msgina/lang/bg-BG.rc @@ -33,18 +33,50 @@ BEGIN PUSHBUTTON "Изключване",IDC_SHUTDOWN,179,122,50,14 END -IDD_LOGGEDON_DLG DIALOGEX 0,0,275,116 -STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +IDD_LOGGEDON_DLG DIALOGEX 0,0,275,175 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP CAPTION "Сигурност" FONT 8,"MS Shell Dlg",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "Какво желаете?",IDC_STATIC,86,60,87,8 - PUSHBUTTON "Заключване на компютъра",IDC_LOCK,25,95,99,14 - PUSHBUTTON "Изход",IDC_LOGOFF,90,76,75,14 - PUSHBUTTON "Изключване",IDC_SHUTDOWN,170,76,75,14 - PUSHBUTTON "Задачен управител",IDC_TASKMGR,10,76,75,14 - PUSHBUTTON "Отказ",IDCANCEL,130,95,99,14 + GROUPBOX "Logon Information",IDC_STATIC,7,61,261,52 + LTEXT "",IDC_LOGONMSG,15,73,245,18 + LTEXT "",IDC_LOGONDATE,15,94,245,8 + CTEXT "Какво желаете?",IDC_STATIC,10,119,255,8 + PUSHBUTTON "Заключване на компютъра",IDC_LOCK,25,154,99,14 + PUSHBUTTON "Изход",IDC_LOGOFF,90,135,75,14 + PUSHBUTTON "Изключване",IDC_SHUTDOWN,170,135,75,14 + PUSHBUTTON "Задачен управител",IDC_TASKMGR,10,135,75,14 + PUSHBUTTON "Отказ",IDCANCEL,130,154,99,14 +END + +IDD_LOCKED_DLG DIALOGEX 0,0,275,121 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Computer Locked" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,37,61,231,8 + LTEXT "Message",IDC_LOCKMSG,37,75,231,26 + LTEXT "Press Ctrl-Alt-Del to unlock this computer.",IDC_STATIC,37,106,231,8 +END + +IDD_UNLOCK_DLG DIALOGEX 0,0,275,179 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Unlock Computer" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,36,61,232,8 + LTEXT "Message",IDC_LOCKMSG,36,75,232,26 + LTEXT "Username:",IDC_STATIC,36,107,40,8 + EDITTEXT IDC_USERNAME,84,104,119,14,ES_AUTOHSCROLL + LTEXT "Password:",IDC_STATIC,36,125,42,8 + EDITTEXT IDC_PASSWORD,84,123,119,14,ES_AUTOHSCROLL | ES_PASSWORD + PUSHBUTTON "OK",IDOK,80,154,50,14,BS_DEFPUSHBUTTON + PUSHBUTTON "Cancel",IDCANCEL,144,154,50,14 END STRINGTABLE @@ -55,4 +87,6 @@ BEGIN IDS_ASKFORUSER "Потребителско име: " IDS_ASKFORPASSWORD "Парола: " IDS_FORCELOGOFF "Така текущият потребител ще излезе и ще изгуби всички несъхранени данни. Да продължа ли?" -END + IDS_LOCKMSG "Only %s or an Administrator can unlock this computer." + IDS_LOGONDATE "Logon date: %s %s" + END diff --git a/dll/win32/msgina/lang/cs-CZ.rc b/dll/win32/msgina/lang/cs-CZ.rc index e43ff0f458d..022643ace94 100644 --- a/dll/win32/msgina/lang/cs-CZ.rc +++ b/dll/win32/msgina/lang/cs-CZ.rc @@ -1,4 +1,5 @@ -/* FILE: dll/win32/msgina/lang/cs-CZ.rc +/* + * FILE: dll/win32/msgina/lang/cs-CZ.rc * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) * UPDATED: 2008-06-24 */ @@ -38,18 +39,50 @@ BEGIN PUSHBUTTON "Vypnout",IDC_SHUTDOWN,179,122,50,14 END -IDD_LOGGEDON_DLG DIALOGEX 0,0,275,116 -STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +IDD_LOGGEDON_DLG DIALOGEX 0,0,275,175 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP CAPTION "Bezpečnost" FONT 8,"MS Shell Dlg",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "Co chcete udělat?",IDC_STATIC,86,60,87,8 - PUSHBUTTON "Uzamknout počítač",IDC_LOCK,10,76,70,14 - PUSHBUTTON "Odhlásit",IDC_LOGOFF,90,76,70,14 - PUSHBUTTON "Vypnout",IDC_SHUTDOWN,170,76,70,14 - PUSHBUTTON "Správce úloh",IDC_TASKMGR,90,95,70,14 - PUSHBUTTON "Storno",IDCANCEL,170,95,70,14 + GROUPBOX "Logon Information",IDC_STATIC,7,61,261,52 + LTEXT "",IDC_LOGONMSG,15,73,245,18 + LTEXT "",IDC_LOGONDATE,15,94,245,8 + CTEXT "Co chcete udělat?",IDC_STATIC,10,119,255,8 + PUSHBUTTON "Uzamknout počítač",IDC_LOCK,10,135,70,14 + PUSHBUTTON "Odhlásit",IDC_LOGOFF,90,135,70,14 + PUSHBUTTON "Vypnout",IDC_SHUTDOWN,170,135,70,14 + PUSHBUTTON "Správce úloh",IDC_TASKMGR,90,154,70,14 + PUSHBUTTON "Storno",IDCANCEL,170,154,70,14 +END + +IDD_LOCKED_DLG DIALOGEX 0,0,275,121 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Computer Locked" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,37,61,231,8 + LTEXT "Message",IDC_LOCKMSG,37,75,231,26 + LTEXT "Press Ctrl-Alt-Del to unlock this computer.",IDC_STATIC,37,106,231,8 +END + +IDD_UNLOCK_DLG DIALOGEX 0,0,275,179 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Unlock Computer" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,36,61,232,8 + LTEXT "Message",IDC_LOCKMSG,36,75,232,26 + LTEXT "Username:",IDC_STATIC,36,107,40,8 + EDITTEXT IDC_USERNAME,84,104,119,14,ES_AUTOHSCROLL + LTEXT "Password:",IDC_STATIC,36,125,42,8 + EDITTEXT IDC_PASSWORD,84,123,119,14,ES_AUTOHSCROLL | ES_PASSWORD + PUSHBUTTON "OK",IDOK,80,154,50,14,BS_DEFPUSHBUTTON + PUSHBUTTON "Cancel",IDCANCEL,144,154,50,14 END STRINGTABLE @@ -60,4 +93,6 @@ BEGIN IDS_ASKFORUSER "Uživatelské jméno: " IDS_ASKFORPASSWORD "Heslo: " IDS_FORCELOGOFF "Současný uživatel bude odhlášen a všechna jeho neuložená data ztracena. Pokračovat?" + IDS_LOCKMSG "Only %s or an Administrator can unlock this computer." + IDS_LOGONDATE "Logon date: %s %s" END diff --git a/dll/win32/msgina/lang/de-DE.rc b/dll/win32/msgina/lang/de-DE.rc index fc74a035347..f33574f4b9b 100644 --- a/dll/win32/msgina/lang/de-DE.rc +++ b/dll/win32/msgina/lang/de-DE.rc @@ -24,27 +24,59 @@ CAPTION "Logon" FONT 8,"MS Shell Dlg",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "Benutzername:",IDC_STATIC,26, 75, 54, 8 - EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL - LTEXT "Passwort:",IDC_STATIC,43, 93, 38, 8 - EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD + LTEXT "Benutzername:",IDC_STATIC,36, 75, 54, 8 + EDITTEXT IDC_USERNAME,92,72,119,14,ES_AUTOHSCROLL + LTEXT "Passwort:",IDC_STATIC,36, 93, 42, 8 + EDITTEXT IDC_PASSWORD,92,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD PUSHBUTTON "OK",IDOK,41, 122, 50, 14,BS_DEFPUSHBUTTON PUSHBUTTON "Abbrechen",IDCANCEL,103, 122, 50, 14 PUSHBUTTON "Herunterfahren",IDC_SHUTDOWN,165, 122, 64, 14 END -IDD_LOGGEDON_DLG DIALOGEX 0,0,275,116 -STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +IDD_LOGGEDON_DLG DIALOGEX 0,0,275,175 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP CAPTION "Sicherheit" FONT 8,"MS Shell Dlg",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "Was wollen Sie tun?",IDC_STATIC,86,60,87,8 - PUSHBUTTON "Computer sperren",IDC_LOCK,10,76,70,14 - PUSHBUTTON "Abmelden",IDC_LOGOFF,90,76,70,14 - PUSHBUTTON "Herunterfahren",IDC_SHUTDOWN,170,76,70,14 - PUSHBUTTON "Taskmanager",IDC_TASKMGR,90,95,70,14 - PUSHBUTTON "Abbrechen",IDCANCEL,170,95,70,14 + GROUPBOX "Anmeldeinformation",IDC_STATIC,7,61,261,52 + LTEXT "",IDC_LOGONMSG,15,73,245,18 + LTEXT "",IDC_LOGONDATE,15,94,245,8 + CTEXT "Was wollen Sie tun?",IDC_STATIC,10,119,255,8 + PUSHBUTTON "Computer sperren",IDC_LOCK,10,135,76,14 + PUSHBUTTON "Abmelden",IDC_LOGOFF,100,135,75,14 + PUSHBUTTON "Herunterfahren",IDC_SHUTDOWN,189,135,76,14 + PUSHBUTTON "Taskmanager",IDC_TASKMGR,100,154,75,14 + PUSHBUTTON "Abbrechen",IDCANCEL,189,154,76,14 +END + +IDD_LOCKED_DLG DIALOGEX 0,0,275,121 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Computer gesperrt" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "Dieser Computer wird verwendet und ist gesperrt.",IDC_STATIC,37,61,231,8 + LTEXT "Message",IDC_LOCKMSG,37,75,231,26 + LTEXT "Drücken Sie Strg+Alt+Entf um den Computer zu entsperren.",IDC_STATIC,37,106,231,8 +END + +IDD_UNLOCK_DLG DIALOGEX 0,0,275,179 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Unlock Computer" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "Dieser Computer wird verwendet und ist gesperrt.",IDC_STATIC,36,61,232,8 + LTEXT "Message",IDC_LOCKMSG,36,75,232,26 + LTEXT "Benutzername:",IDC_STATIC,36,107,54,8 + EDITTEXT IDC_USERNAME,92,104,119,14,ES_AUTOHSCROLL + LTEXT "Passwort:",IDC_STATIC,36,125,42,8 + EDITTEXT IDC_PASSWORD,92,123,119,14,ES_AUTOHSCROLL | ES_PASSWORD + PUSHBUTTON "OK",IDOK,80,154,50,14,BS_DEFPUSHBUTTON + PUSHBUTTON "Abbrechen",IDCANCEL,144,154,50,14 END STRINGTABLE @@ -55,4 +87,6 @@ BEGIN IDS_ASKFORUSER "Benutzername: " IDS_ASKFORPASSWORD "Passwort: " IDS_FORCELOGOFF "Dies wird den derzeitigen Benutzer abmelden. Alle ungespeicherten Daten gehen verloren. Fortsetzen?" + IDS_LOCKMSG "Nur %s oder ein Administrator kann den Computer entsperren." + IDS_LOGONDATE "Anmeldedatum: %s %s" END diff --git a/dll/win32/msgina/lang/en-US.rc b/dll/win32/msgina/lang/en-US.rc index 27a2d634587..32d22874039 100644 --- a/dll/win32/msgina/lang/en-US.rc +++ b/dll/win32/msgina/lang/en-US.rc @@ -33,18 +33,50 @@ BEGIN PUSHBUTTON "Shutdown",IDC_SHUTDOWN,179,122,50,14 END -IDD_LOGGEDON_DLG DIALOGEX 0,0,275,116 -STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +IDD_LOGGEDON_DLG DIALOGEX 0,0,275,175 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP CAPTION "Security" FONT 8,"MS Shell Dlg",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "What do you want to do?",IDC_STATIC,86,60,87,8 - PUSHBUTTON "Lock computer",IDC_LOCK,10,76,70,14 - PUSHBUTTON "Log off",IDC_LOGOFF,90,76,70,14 - PUSHBUTTON "Shutdown",IDC_SHUTDOWN,170,76,70,14 - PUSHBUTTON "Task manager",IDC_TASKMGR,90,95,70,14 - PUSHBUTTON "Cancel",IDCANCEL,170,95,70,14 + GROUPBOX "Logon Information",IDC_STATIC,7,61,261,52 + LTEXT "",IDC_LOGONMSG,15,73,245,18 + LTEXT "",IDC_LOGONDATE,15,94,245,8 + CTEXT "What do you want to do?",IDC_STATIC,10,119,255,8 + PUSHBUTTON "Lock computer",IDC_LOCK,10,135,76,14 + PUSHBUTTON "Log off",IDC_LOGOFF,100,135,75,14 + PUSHBUTTON "Shutdown",IDC_SHUTDOWN,189,135,76,14 + PUSHBUTTON "Task manager",IDC_TASKMGR,100,154,75,14 + PUSHBUTTON "Cancel",IDCANCEL,189,154,76,14 +END + +IDD_LOCKED_DLG DIALOGEX 0,0,275,121 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Computer Locked" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,36,61,232,8 + LTEXT "Message",IDC_LOCKMSG,37,75,231,26 + LTEXT "Press Ctrl-Alt-Del to unlock this computer.",IDC_STATIC,36,106,232,8 +END + +IDD_UNLOCK_DLG DIALOGEX 0,0,275,179 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Unlock Computer" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,36,61,232,8 + LTEXT "Message",IDC_LOCKMSG,36,75,232,26 + LTEXT "Username:",IDC_STATIC,36,107,40,8 + EDITTEXT IDC_USERNAME,84,104,119,14,ES_AUTOHSCROLL + LTEXT "Password:",IDC_STATIC,36,125,42,8 + EDITTEXT IDC_PASSWORD,84,123,119,14,ES_AUTOHSCROLL | ES_PASSWORD + PUSHBUTTON "OK",IDOK,80,154,50,14,BS_DEFPUSHBUTTON + PUSHBUTTON "Cancel",IDCANCEL,144,154,50,14 END STRINGTABLE @@ -55,4 +87,7 @@ BEGIN IDS_ASKFORUSER "User name: " IDS_ASKFORPASSWORD "Password: " IDS_FORCELOGOFF "This will log out the current user and lose all unsaved data. Continue?" + IDS_LOCKMSG "Only %s or an Administrator can unlock this computer." + IDS_LOGONMSG "You are logged on as %s." + IDS_LOGONDATE "Logon date: %s %s" END diff --git a/dll/win32/msgina/lang/es-ES.rc b/dll/win32/msgina/lang/es-ES.rc index ef9081caf8c..cb817e6f270 100644 --- a/dll/win32/msgina/lang/es-ES.rc +++ b/dll/win32/msgina/lang/es-ES.rc @@ -38,18 +38,50 @@ BEGIN PUSHBUTTON "Cerrar",IDC_SHUTDOWN,179,122,50,14 END -IDD_LOGGEDON_DLG DIALOGEX 0, 0, 275, 116 -STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +IDD_LOGGEDON_DLG DIALOGEX 0, 0, 275, 175 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP CAPTION "Seguridad" FONT 8,"MS Shell Dlg",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "¿Qué quieres hacer?",IDC_STATIC, 94, 60, 87, 8 - PUSHBUTTON "Bloquear computadora",IDC_LOCK, 4, 76, 83, 14 - PUSHBUTTON "Salir",IDC_LOGOFF, 92, 76, 88, 14 - PUSHBUTTON "Cerrar",IDC_SHUTDOWN, 186, 76, 70, 14 - PUSHBUTTON "Administrador de tareas",IDC_TASKMGR, 92, 95, 88, 14 - PUSHBUTTON "Cancelar",IDCANCEL, 186, 95, 70, 14 + GROUPBOX "Logon Information",IDC_STATIC,7,61,261,52 + LTEXT "",IDC_LOGONMSG,15,73,245,18 + LTEXT "",IDC_LOGONDATE,15,94,245,8 + CTEXT "¿Qué quieres hacer?",IDC_STATIC,10,119,255,8 + PUSHBUTTON "Bloquear computadora",IDC_LOCK, 4,135, 83, 14 + PUSHBUTTON "Salir",IDC_LOGOFF, 92,135, 88, 14 + PUSHBUTTON "Cerrar",IDC_SHUTDOWN, 186,135, 70, 14 + PUSHBUTTON "Administrador de tareas",IDC_TASKMGR, 92,154, 88, 14 + PUSHBUTTON "Cancelar",IDCANCEL, 186,154, 70, 14 +END + +IDD_LOCKED_DLG DIALOGEX 0,0,275,121 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Computer Locked" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,37,61,231,8 + LTEXT "Message",IDC_LOCKMSG,37,75,231,26 + LTEXT "Press Ctrl-Alt-Del to unlock this computer.",IDC_STATIC,37,106,231,8 +END + +IDD_UNLOCK_DLG DIALOGEX 0,0,275,179 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Unlock Computer" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,36,61,232,8 + LTEXT "Message",IDC_LOCKMSG,36,75,232,26 + LTEXT "Username:",IDC_STATIC,36,107,40,8 + EDITTEXT IDC_USERNAME,84,104,119,14,ES_AUTOHSCROLL + LTEXT "Password:",IDC_STATIC,36,125,42,8 + EDITTEXT IDC_PASSWORD,84,123,119,14,ES_AUTOHSCROLL | ES_PASSWORD + PUSHBUTTON "OK",IDOK,80,154,50,14,BS_DEFPUSHBUTTON + PUSHBUTTON "Cancel",IDCANCEL,144,154,50,14 END STRINGTABLE @@ -60,4 +92,6 @@ BEGIN IDS_ASKFORUSER "Usuario: " IDS_ASKFORPASSWORD "Contraseña: " IDS_FORCELOGOFF "Esto cerrará al usuario actual y perderá todos los datos no guardados. ¿Desea Continuar?" + IDS_LOCKMSG "Only %s or an Administrator can unlock this computer." + IDS_LOGONDATE "Logon date: %s %s" END diff --git a/dll/win32/msgina/lang/fr-FR.rc b/dll/win32/msgina/lang/fr-FR.rc index 67a2214684c..aafa24687a6 100644 --- a/dll/win32/msgina/lang/fr-FR.rc +++ b/dll/win32/msgina/lang/fr-FR.rc @@ -24,35 +24,69 @@ CAPTION "Connexion" FONT 8,"MS Shell Dlg",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "Utilisateur:",IDC_STATIC,36,75,40,8 + LTEXT "Utilisateur :",IDC_STATIC,36,75,40,8 EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL - LTEXT "Mot de passe:",IDC_STATIC,36,93,42,8 + LTEXT "Mot de passe :",IDC_STATIC,36,93,42,8 EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD PUSHBUTTON "OK",IDOK,51,122,50,14,BS_DEFPUSHBUTTON PUSHBUTTON "Annuler",IDCANCEL,115,122,50,14 PUSHBUTTON "Éteindre",IDC_SHUTDOWN,179,122,50,14 END -IDD_LOGGEDON_DLG DIALOGEX 0, 0, 275, 116 -STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +IDD_LOGGEDON_DLG DIALOGEX 0, 0, 275, 175 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP CAPTION "Sécurité" FONT 8,"MS Shell Dlg",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "Que voulez vous faire?",IDC_STATIC, 94, 60, 87, 8 - PUSHBUTTON "Verrouiller l'ordinateur",IDC_LOCK, 4, 76, 82, 14 - PUSHBUTTON "Déconnecter",IDC_LOGOFF, 93, 76, 85, 14 - PUSHBUTTON "Éteindre",IDC_SHUTDOWN, 184, 76, 70, 14 - PUSHBUTTON "Gestionnaire de tâches",IDC_TASKMGR, 93, 95, 85, 14 - PUSHBUTTON "Annuler",IDCANCEL, 184, 95, 70, 14 + GROUPBOX "Logon Information",IDC_STATIC,7,61,261,52 + LTEXT "",IDC_LOGONMSG,15,73,245,18 + LTEXT "",IDC_LOGONDATE,15,94,245,8 + CTEXT "Que voulez-vous faire ?",IDC_STATIC,10,119,255,8 + PUSHBUTTON "Verrouiller l'ordinateur",IDC_LOCK, 4,135, 82, 14 + PUSHBUTTON "Déconnecter",IDC_LOGOFF, 93,135, 85, 14 + PUSHBUTTON "Éteindre",IDC_SHUTDOWN, 184,135, 70, 14 + PUSHBUTTON "Gestionnaire de tâches",IDC_TASKMGR, 93,154, 85, 14 + PUSHBUTTON "Annuler",IDCANCEL, 184,154, 70, 14 +END + +IDD_LOCKED_DLG DIALOGEX 0,0,275,121 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Ordinateur verrouillé" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "Cet ordinateur est utilisé et a été verrouillé.",IDC_STATIC,37,61,231,8 + LTEXT "Message",IDC_LOCKMSG,37,75,231,26 + LTEXT "Appuyez sur les touches Ctrl-Alt-Suppr pour déverrouiller l'ordinateur.",IDC_STATIC,37,106,231,8 +END + +IDD_UNLOCK_DLG DIALOGEX 0,0,275,179 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Unlock Computer" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,36,61,232,8 + LTEXT "Message",IDC_LOCKMSG,36,75,232,26 + LTEXT "Username:",IDC_STATIC,36,107,40,8 + EDITTEXT IDC_USERNAME,84,104,119,14,ES_AUTOHSCROLL + LTEXT "Password:",IDC_STATIC,36,125,42,8 + EDITTEXT IDC_PASSWORD,84,123,119,14,ES_AUTOHSCROLL | ES_PASSWORD + PUSHBUTTON "OK",IDOK,80,154,50,14,BS_DEFPUSHBUTTON + PUSHBUTTON "Cancel",IDCANCEL,144,154,50,14 END STRINGTABLE BEGIN IDS_LOGGEDOUTSAS "Bienvenue!" IDS_LOCKEDSAS "Cet ordinateur est actuellement verrouillé." - IDS_PRESSCTRLALTDELETE "Presser Control+Alt+Suppr pour vous connecter." - IDS_ASKFORUSER "Utilisateur: " - IDS_ASKFORPASSWORD "Mot de passe: " - IDS_FORCELOGOFF "Cela déconnectera l'utilisateur en cours et perdra les données non sauvées. Continuer?" + IDS_PRESSCTRLALTDELETE "Appuyez sur Ctrl-Alt-Suppr pour vous connecter." + IDS_ASKFORUSER "Utilisateur : " + IDS_ASKFORPASSWORD "Mot de passe : " + IDS_FORCELOGOFF "Cela déconnectera l'utilisateur en cours et perdra les données non sauvées. Continuer ?" + IDS_LOCKMSG "Seulement %s ou bien un Administrateur peut déverrouiller cet ordinateur." + IDS_LOGONDATE "Logon date: %s %s" END diff --git a/dll/win32/msgina/lang/he-IL.rc b/dll/win32/msgina/lang/he-IL.rc index 109127259bd..300db7a185d 100644 --- a/dll/win32/msgina/lang/he-IL.rc +++ b/dll/win32/msgina/lang/he-IL.rc @@ -33,13 +33,16 @@ BEGIN PUSHBUTTON "כיבוי",IDC_SHUTDOWN,179,122,50,14 END -IDD_LOGGEDON_DLG DIALOGEX 0,0,275,116 -STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +IDD_LOGGEDON_DLG DIALOGEX 0,0,275,175 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP CAPTION "אבטחה" FONT 8,"MS Shell Dlg",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "מה ברצונך לעשות?",IDC_STATIC,86,60,87,8 + GROUPBOX "מידע כניסה",IDC_STATIC,7,61,261,52 + LTEXT "",IDC_LOGONMSG,15,73,245,18 + LTEXT "",IDC_LOGONDATE,15,94,245,8 + CTEXT "מה ברצונך לעשות?",IDC_STATIC,86,60,87,8 PUSHBUTTON "לנעול את המחשב",IDC_LOCK,10,76,70,14 PUSHBUTTON "להתנתק",IDC_LOGOFF,90,76,70,14 PUSHBUTTON "לכבות",IDC_SHUTDOWN,170,76,70,14 @@ -47,6 +50,35 @@ BEGIN PUSHBUTTON "ביטול",IDCANCEL,170,95,70,14 END +IDD_LOCKED_DLG DIALOGEX 0,0,275,121 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "המחשב נעול" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "מחשב זה היה בשימוש וננעל.",IDC_STATIC,37,61,231,8 + LTEXT "Message",IDC_LOCKMSG,37,75,231,26 + LTEXT "לחץ על Ctrl-Alt-Del כדי לשחרר את המחשב.",IDC_STATIC,37,106,231,8 +END + +IDD_UNLOCK_DLG DIALOGEX 0,0,275,179 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "ביטול הנעילה" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "מחשב זה היה בשימוש וננעל.",IDC_STATIC,36,61,232,8 + LTEXT "Message",IDC_LOCKMSG,36,75,232,26 + LTEXT "שם משתמש:",IDC_STATIC,36,107,40,8 + EDITTEXT IDC_USERNAME,84,104,119,14,ES_AUTOHSCROLL + LTEXT "סיסמה:",IDC_STATIC,36,125,42,8 + EDITTEXT IDC_PASSWORD,84,123,119,14,ES_AUTOHSCROLL | ES_PASSWORD + PUSHBUTTON "אישור",IDOK,80,154,50,14,BS_DEFPUSHBUTTON + PUSHBUTTON "ביטול",IDCANCEL,144,154,50,14 +END + STRINGTABLE BEGIN IDS_LOGGEDOUTSAS "ברוכים הבאים!" @@ -55,4 +87,6 @@ BEGIN IDS_ASKFORUSER "שם משתמש: " IDS_ASKFORPASSWORD "סיסמה: " IDS_FORCELOGOFF "זה יגרום להתנתקות המשתמש הנוכחי ולאבד את כל המידע שאינו נשמר. להמשיך?" + IDS_LOCKMSG "רק %s או מנהל יכולים לשחרר את המחשב הזה." + IDS_LOGONDATE "תאריך כניסה: %s %s" END diff --git a/dll/win32/msgina/lang/id-ID.rc b/dll/win32/msgina/lang/id-ID.rc index 42352671ec3..62e6dd788c1 100644 --- a/dll/win32/msgina/lang/id-ID.rc +++ b/dll/win32/msgina/lang/id-ID.rc @@ -33,18 +33,50 @@ BEGIN PUSHBUTTON "Matikan",IDC_SHUTDOWN,179,122,50,14 END -IDD_LOGGEDON_DLG DIALOGEX 0,0,275,116 -STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +IDD_LOGGEDON_DLG DIALOGEX 0,0,275,175 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP CAPTION "Keamanan" FONT 8,"MS Shell Dlg",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "Apa yang ingin anda lakukan?",IDC_STATIC,86,60,87,8 - PUSHBUTTON "Kunci komputer",IDC_LOCK,10,76,70,14 - PUSHBUTTON "Keluar",IDC_LOGOFF,90,76,70,14 - PUSHBUTTON "Matikan",IDC_SHUTDOWN,170,76,70,14 - PUSHBUTTON "Manager Tugas",IDC_TASKMGR,90,95,70,14 - PUSHBUTTON "Batal",IDCANCEL,170,95,70,14 + GROUPBOX "Logon Information",IDC_STATIC,7,61,261,52 + LTEXT "",IDC_LOGONMSG,15,73,245,18 + LTEXT "",IDC_LOGONDATE,15,94,245,8 + CTEXT "Apa yang ingin anda lakukan?",IDC_STATIC,10,119,255,8 + PUSHBUTTON "Kunci komputer",IDC_LOCK,10,135,70,14 + PUSHBUTTON "Keluar",IDC_LOGOFF,90,135,70,14 + PUSHBUTTON "Matikan",IDC_SHUTDOWN,170,135,70,14 + PUSHBUTTON "Manager Tugas",IDC_TASKMGR,90,154,70,14 + PUSHBUTTON "Batal",IDCANCEL,170,154,70,14 +END + +IDD_LOCKED_DLG DIALOGEX 0,0,275,121 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Computer Locked" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,37,61,231,8 + LTEXT "Message",IDC_LOCKMSG,37,75,231,26 + LTEXT "Press Ctrl-Alt-Del to unlock this computer.",IDC_STATIC,37,106,231,8 +END + +IDD_UNLOCK_DLG DIALOGEX 0,0,275,179 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Unlock Computer" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,36,61,232,8 + LTEXT "Message",IDC_LOCKMSG,36,75,232,26 + LTEXT "Username:",IDC_STATIC,36,107,40,8 + EDITTEXT IDC_USERNAME,84,104,119,14,ES_AUTOHSCROLL + LTEXT "Password:",IDC_STATIC,36,125,42,8 + EDITTEXT IDC_PASSWORD,84,123,119,14,ES_AUTOHSCROLL | ES_PASSWORD + PUSHBUTTON "OK",IDOK,80,154,50,14,BS_DEFPUSHBUTTON + PUSHBUTTON "Cancel",IDCANCEL,144,154,50,14 END STRINGTABLE @@ -55,4 +87,6 @@ BEGIN IDS_ASKFORUSER "Nama Pengguna: " IDS_ASKFORPASSWORD "Kata sandi: " IDS_FORCELOGOFF "Ini akan mengeluarkan pengguna saat ini dan kehilangan data yang belum disimpan. Lanjutkan?" + IDS_LOCKMSG "Only %s or an Administrator can unlock this computer." + IDS_LOGONDATE "Logon date: %s %s" END diff --git a/dll/win32/msgina/lang/it-IT.rc b/dll/win32/msgina/lang/it-IT.rc index 911360511be..5f285264970 100644 --- a/dll/win32/msgina/lang/it-IT.rc +++ b/dll/win32/msgina/lang/it-IT.rc @@ -41,18 +41,50 @@ BEGIN PUSHBUTTON "Spegnimento",IDC_SHUTDOWN,179,122,50,14 END -IDD_LOGGEDON_DLG DIALOGEX 0,0,275,116 -STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +IDD_LOGGEDON_DLG DIALOGEX 0,0,275,175 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP CAPTION "Sicurezza" FONT 8,"MS Shell Dlg",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "Cosa volete fare?",IDC_STATIC,86,60,87,8 - PUSHBUTTON "Bloccare il computer",IDC_LOCK,10,76,70,14 - PUSHBUTTON "Fine sessione",IDC_LOGOFF,90,76,70,14 - PUSHBUTTON "Spegnimento",IDC_SHUTDOWN,170,76,70,14 - PUSHBUTTON "Task manager",IDC_TASKMGR,90,95,70,14 - PUSHBUTTON "Annulla",IDCANCEL,170,95,70,14 + GROUPBOX "Logon Information",IDC_STATIC,7,61,261,52 + LTEXT "",IDC_LOGONMSG,15,73,245,18 + LTEXT "",IDC_LOGONDATE,15,94,245,8 + CTEXT "Cosa volete fare?",IDC_STATIC,10,119,255,8 + PUSHBUTTON "Bloccare il computer",IDC_LOCK,10,135,70,14 + PUSHBUTTON "Fine sessione",IDC_LOGOFF,90,135,70,14 + PUSHBUTTON "Spegnimento",IDC_SHUTDOWN,170,135,70,14 + PUSHBUTTON "Task manager",IDC_TASKMGR,90,154,70,14 + PUSHBUTTON "Annulla",IDCANCEL,170,154,70,14 +END + +IDD_LOCKED_DLG DIALOGEX 0,0,275,121 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Computer Locked" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,37,61,231,8 + LTEXT "Message",IDC_LOCKMSG,37,75,231,26 + LTEXT "Press Ctrl-Alt-Del to unlock this computer.",IDC_STATIC,37,106,231,8 +END + +IDD_UNLOCK_DLG DIALOGEX 0,0,275,179 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Unlock Computer" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,36,61,232,8 + LTEXT "Message",IDC_LOCKMSG,36,75,232,26 + LTEXT "Username:",IDC_STATIC,36,107,40,8 + EDITTEXT IDC_USERNAME,84,104,119,14,ES_AUTOHSCROLL + LTEXT "Password:",IDC_STATIC,36,125,42,8 + EDITTEXT IDC_PASSWORD,84,123,119,14,ES_AUTOHSCROLL | ES_PASSWORD + PUSHBUTTON "OK",IDOK,80,154,50,14,BS_DEFPUSHBUTTON + PUSHBUTTON "Cancel",IDCANCEL,144,154,50,14 END STRINGTABLE @@ -63,4 +95,6 @@ BEGIN IDS_ASKFORUSER "Nome utente: " IDS_ASKFORPASSWORD "Password: " IDS_FORCELOGOFF "Verrà terminata la sessione dell'utente attuale e tutti i dati non salvati verranno persi. Volete procedere?" + IDS_LOCKMSG "Only %s or an Administrator can unlock this computer." + IDS_LOGONDATE "Logon date: %s %s" END diff --git a/dll/win32/msgina/lang/ja-JP.rc b/dll/win32/msgina/lang/ja-JP.rc index 187a3b164bd..79d4399b463 100644 --- a/dll/win32/msgina/lang/ja-JP.rc +++ b/dll/win32/msgina/lang/ja-JP.rc @@ -33,18 +33,50 @@ BEGIN PUSHBUTTON "シャットダウン",IDC_SHUTDOWN,179,122,50,14 END -IDD_LOGGEDON_DLG DIALOGEX 0,0,275,116 -STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +IDD_LOGGEDON_DLG DIALOGEX 0,0,275,175 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP CAPTION "セキュリティ" FONT 9, "MS UI Gothic",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "何をしますか?",IDC_STATIC,86,60,87,8 - PUSHBUTTON "コンピュータのロック",IDC_LOCK,10,76,70,14 - PUSHBUTTON "ログオフ",IDC_LOGOFF,90,76,70,14 - PUSHBUTTON "シャットダウン",IDC_SHUTDOWN,170,76,70,14 - PUSHBUTTON "タスク マネージャ",IDC_TASKMGR,90,95,70,14 - PUSHBUTTON "キャンセル",IDCANCEL,170,95,70,14 + GROUPBOX "Logon Information",IDC_STATIC,7,61,261,52 + LTEXT "",IDC_LOGONMSG,15,73,245,18 + LTEXT "",IDC_LOGONDATE,15,94,245,8 + CTEXT "何をしますか?",IDC_STATIC,10,119,255,8 + PUSHBUTTON "コンピュータのロック",IDC_LOCK,10,135,70,14 + PUSHBUTTON "ログオフ",IDC_LOGOFF,90,135,70,14 + PUSHBUTTON "シャットダウン",IDC_SHUTDOWN,170,135,70,14 + PUSHBUTTON "タスク マネージャ",IDC_TASKMGR,90,154,70,14 + PUSHBUTTON "キャンセル",IDCANCEL,170,154,70,14 +END + +IDD_LOCKED_DLG DIALOGEX 0,0,275,121 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Computer Locked" +FONT 9,"MS UI Gothic",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,37,61,231,8 + LTEXT "Message",IDC_LOCKMSG,37,75,231,26 + LTEXT "Press Ctrl-Alt-Del to unlock this computer.",IDC_STATIC,37,106,231,8 +END + +IDD_UNLOCK_DLG DIALOGEX 0,0,275,179 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Unlock Computer" +FONT 9,"MS UI Gothic",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,36,61,232,8 + LTEXT "Message",IDC_LOCKMSG,36,75,232,26 + LTEXT "Username:",IDC_STATIC,36,107,40,8 + EDITTEXT IDC_USERNAME,84,104,119,14,ES_AUTOHSCROLL + LTEXT "Password:",IDC_STATIC,36,125,42,8 + EDITTEXT IDC_PASSWORD,84,123,119,14,ES_AUTOHSCROLL | ES_PASSWORD + PUSHBUTTON "OK",IDOK,80,154,50,14,BS_DEFPUSHBUTTON + PUSHBUTTON "Cancel",IDCANCEL,144,154,50,14 END STRINGTABLE @@ -55,4 +87,6 @@ BEGIN IDS_ASKFORUSER "ユーザー名: " IDS_ASKFORPASSWORD "パスワード: " IDS_FORCELOGOFF "現在のユーザーをログアウトします。保存されていないデータはすべて失われます。 続行しますか?" + IDS_LOCKMSG "Only %s or an Administrator can unlock this computer." + IDS_LOGONDATE "Logon date: %s %s" END diff --git a/dll/win32/msgina/lang/no-NO.rc b/dll/win32/msgina/lang/no-NO.rc index 46b827e0793..00d6ff1b3e8 100644 --- a/dll/win32/msgina/lang/no-NO.rc +++ b/dll/win32/msgina/lang/no-NO.rc @@ -33,18 +33,50 @@ BEGIN PUSHBUTTON "Avslutt",IDC_SHUTDOWN,179,122,50,14 END -IDD_LOGGEDON_DLG DIALOGEX 0, 0, 275, 116 -STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +IDD_LOGGEDON_DLG DIALOGEX 0, 0, 275, 175 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP CAPTION "ReactOS-sikkerhet" FONT 8,"MS Shell Dlg",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "Hva vil du gjøre?",IDC_STATIC, 92, 60, 87, 8 - PUSHBUTTON "Lås datamaskinen...",IDC_LOCK, 7, 76, 74, 14 - PUSHBUTTON "Logg av...",IDC_LOGOFF, 86, 76, 78, 14 - PUSHBUTTON "Avslutt...",IDC_SHUTDOWN, 170, 76, 70, 14 - PUSHBUTTON "Oppgavebehandling...",IDC_TASKMGR, 86, 95, 78, 14 - PUSHBUTTON "Avbryt",IDCANCEL, 170, 95, 70, 14 + GROUPBOX "Logon Information",IDC_STATIC,7,61,261,52 + LTEXT "",IDC_LOGONMSG,15,73,245,18 + LTEXT "",IDC_LOGONDATE,15,94,245,8 + CTEXT "Hva vil du gjøre?",IDC_STATIC,10,119,255,8 + PUSHBUTTON "Lås datamaskinen...",IDC_LOCK, 7, 135, 74, 14 + PUSHBUTTON "Logg av...",IDC_LOGOFF, 86, 135, 78, 14 + PUSHBUTTON "Avslutt...",IDC_SHUTDOWN, 170, 135, 70, 14 + PUSHBUTTON "Oppgavebehandling...",IDC_TASKMGR, 86, 154, 78, 14 + PUSHBUTTON "Avbryt",IDCANCEL, 170, 154, 70, 14 +END + +IDD_LOCKED_DLG DIALOGEX 0,0,275,121 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Computer Locked" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,37,61,231,8 + LTEXT "Message",IDC_LOCKMSG,37,75,231,26 + LTEXT "Press Ctrl-Alt-Del to unlock this computer.",IDC_STATIC,37,106,231,8 +END + +IDD_UNLOCK_DLG DIALOGEX 0,0,275,179 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Unlock Computer" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,36,61,232,8 + LTEXT "Message",IDC_LOCKMSG,36,75,232,26 + LTEXT "Username:",IDC_STATIC,36,107,40,8 + EDITTEXT IDC_USERNAME,84,104,119,14,ES_AUTOHSCROLL + LTEXT "Password:",IDC_STATIC,36,125,42,8 + EDITTEXT IDC_PASSWORD,84,123,119,14,ES_AUTOHSCROLL | ES_PASSWORD + PUSHBUTTON "OK",IDOK,80,154,50,14,BS_DEFPUSHBUTTON + PUSHBUTTON "Cancel",IDCANCEL,144,154,50,14 END STRINGTABLE @@ -55,4 +87,6 @@ BEGIN IDS_ASKFORUSER "Brukernavn: " IDS_ASKFORPASSWORD "Passord: " IDS_FORCELOGOFF "Dette vil logge av gjeldende bruker, alle ulagrede data vil gå tapt. Fortsette?" + IDS_LOCKMSG "Only %s or an Administrator can unlock this computer." + IDS_LOGONDATE "Logon date: %s %s" END diff --git a/dll/win32/msgina/lang/pl-PL.rc b/dll/win32/msgina/lang/pl-PL.rc index a539dc39a06..46e5ca5dd16 100644 --- a/dll/win32/msgina/lang/pl-PL.rc +++ b/dll/win32/msgina/lang/pl-PL.rc @@ -41,18 +41,50 @@ BEGIN PUSHBUTTON "Wyłącz",IDC_SHUTDOWN,179,122,50,14 END -IDD_LOGGEDON_DLG DIALOGEX 0,0,275,116 -STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +IDD_LOGGEDON_DLG DIALOGEX 0,0,275,175 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP CAPTION "Bezpieczeństwo" FONT 8,"MS Shell Dlg",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "Co chcesz teraz zrobić?",IDC_STATIC,86,60,87,8 - PUSHBUTTON "Blokada komputera",IDC_LOCK,10,76,70,14 - PUSHBUTTON "Wyloguj",IDC_LOGOFF,90,76,70,14 - PUSHBUTTON "Wyłącz",IDC_SHUTDOWN,170,76,70,14 - PUSHBUTTON "Menedżer zadań",IDC_TASKMGR,90,95,70,14 - PUSHBUTTON "Anuluj",IDCANCEL,170,95,70,14 + GROUPBOX "Logon Information",IDC_STATIC,7,61,261,52 + LTEXT "",IDC_LOGONMSG,15,73,245,18 + LTEXT "",IDC_LOGONDATE,15,94,245,8 + CTEXT "Co chcesz teraz zrobić?",IDC_STATIC,10,119,255,8 + PUSHBUTTON "Blokada komputera",IDC_LOCK,10,135,70,14 + PUSHBUTTON "Wyloguj",IDC_LOGOFF,90,135,70,14 + PUSHBUTTON "Wyłącz",IDC_SHUTDOWN,170,135,70,14 + PUSHBUTTON "Menedżer zadań",IDC_TASKMGR,90,154,70,14 + PUSHBUTTON "Anuluj",IDCANCEL,170,154,70,14 +END + +IDD_LOCKED_DLG DIALOGEX 0,0,275,121 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Computer Locked" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,37,61,231,8 + LTEXT "Message",IDC_LOCKMSG,37,75,231,26 + LTEXT "Press Ctrl-Alt-Del to unlock this computer.",IDC_STATIC,37,106,231,8 +END + +IDD_UNLOCK_DLG DIALOGEX 0,0,275,179 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Unlock Computer" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,36,61,232,8 + LTEXT "Message",IDC_LOCKMSG,36,75,232,26 + LTEXT "Username:",IDC_STATIC,36,107,40,8 + EDITTEXT IDC_USERNAME,84,104,119,14,ES_AUTOHSCROLL + LTEXT "Password:",IDC_STATIC,36,125,42,8 + EDITTEXT IDC_PASSWORD,84,123,119,14,ES_AUTOHSCROLL | ES_PASSWORD + PUSHBUTTON "OK",IDOK,80,154,50,14,BS_DEFPUSHBUTTON + PUSHBUTTON "Cancel",IDCANCEL,144,154,50,14 END STRINGTABLE @@ -63,4 +95,6 @@ BEGIN IDS_ASKFORUSER "Nazwa użytkownika: " IDS_ASKFORPASSWORD "Hasło: " IDS_FORCELOGOFF "To wyloguje aktualnego użytkownika i straci on wszystkie niezapisane dane. Kontynuować?" + IDS_LOCKMSG "Only %s or an Administrator can unlock this computer." + IDS_LOGONDATE "Logon date: %s %s" END diff --git a/dll/win32/msgina/lang/ro-RO.rc b/dll/win32/msgina/lang/ro-RO.rc index 06aa1215c8d..05ea99e5ab1 100644 --- a/dll/win32/msgina/lang/ro-RO.rc +++ b/dll/win32/msgina/lang/ro-RO.rc @@ -1,4 +1,4 @@ -//2011.12.10 - Fulea Ștefan: minor changes (corrections) +// 2011.12.10 - Fulea Ștefan: minor changes (corrections) LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL IDD_STATUSWINDOW_DLG DIALOGEX 0,0,275,80 @@ -34,18 +34,50 @@ BEGIN PUSHBUTTON "&Oprește", IDC_SHUTDOWN,179,122,50,14 END -IDD_LOGGEDON_DLG DIALOGEX 0,0,275,116 -STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +IDD_LOGGEDON_DLG DIALOGEX 0,0,275,175 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP CAPTION "Securitate" FONT 8,"MS Shell Dlg",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "Ce acțiune preferați?", IDC_STATIC,86,60,87,8 - PUSHBUTTON "&Blochează calculatorul", IDC_LOCK,10,76,70,14 - PUSHBUTTON "&Deautentifică-mă", IDC_LOGOFF,90,76,70,14 - PUSHBUTTON "Închid&ere calculatorul", IDC_SHUTDOWN,170,76,70,14 - PUSHBUTTON "Gestionar de &activități", IDC_TASKMGR,90,95,70,14 - PUSHBUTTON "A&nulează", IDCANCEL,170,95,70,14 + GROUPBOX "Logon Information",IDC_STATIC,7,61,261,52 + LTEXT "",IDC_LOGONMSG,15,73,245,18 + LTEXT "",IDC_LOGONDATE,15,94,245,8 + CTEXT "Ce acțiune preferați?", IDC_STATIC,10,119,255,8 + PUSHBUTTON "&Blochează calculatorul", IDC_LOCK,10,135,70,14 + PUSHBUTTON "&Deautentifică-mă", IDC_LOGOFF,90,135,70,14 + PUSHBUTTON "Închid&ere calculatorul", IDC_SHUTDOWN,170,135,70,14 + PUSHBUTTON "Gestionar de &activități", IDC_TASKMGR,90,154,70,14 + PUSHBUTTON "A&nulează", IDCANCEL,170,154,70,14 +END + +IDD_LOCKED_DLG DIALOGEX 0,0,275,121 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Computer Locked" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,37,61,231,8 + LTEXT "Message",IDC_LOCKMSG,37,75,231,26 + LTEXT "Press Ctrl-Alt-Del to unlock this computer.",IDC_STATIC,37,106,231,8 +END + +IDD_UNLOCK_DLG DIALOGEX 0,0,275,179 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Unlock Computer" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,36,61,232,8 + LTEXT "Message",IDC_LOCKMSG,36,75,232,26 + LTEXT "Username:",IDC_STATIC,36,107,40,8 + EDITTEXT IDC_USERNAME,84,104,119,14,ES_AUTOHSCROLL + LTEXT "Password:",IDC_STATIC,36,125,42,8 + EDITTEXT IDC_PASSWORD,84,123,119,14,ES_AUTOHSCROLL | ES_PASSWORD + PUSHBUTTON "OK",IDOK,80,154,50,14,BS_DEFPUSHBUTTON + PUSHBUTTON "Cancel",IDCANCEL,144,154,50,14 END STRINGTABLE @@ -56,4 +88,6 @@ BEGIN IDS_ASKFORUSER "Nume utilizator: " IDS_ASKFORPASSWORD "Parolă: " IDS_FORCELOGOFF "Această acțiune va deautentifica utilizatorului curent cu posibile pierderi ale datelor nepăstrate. Continuați?" + IDS_LOCKMSG "Only %s or an Administrator can unlock this computer." + IDS_LOGONDATE "Logon date: %s %s" END diff --git a/dll/win32/msgina/lang/ru-RU.rc b/dll/win32/msgina/lang/ru-RU.rc index 38b1e6907a0..cc6b6ea3274 100644 --- a/dll/win32/msgina/lang/ru-RU.rc +++ b/dll/win32/msgina/lang/ru-RU.rc @@ -1,4 +1,4 @@ -//Russian language file. (Dmitry Chapyshev, 2007.06.17) +// Russian language file. (Dmitry Chapyshev, 2007.06.17) LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT @@ -35,18 +35,50 @@ BEGIN PUSHBUTTON "Выключение", IDC_SHUTDOWN, 171, 122, 58, 14 END -IDD_LOGGEDON_DLG DIALOGEX 0, 0, 275, 116 -STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +IDD_LOGGEDON_DLG DIALOGEX 0, 0, 275, 175 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP CAPTION "Безопасность" FONT 8,"MS Shell Dlg",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "Выберите необходимое действие:", IDC_STATIC, 7, 60, 123, 8 - PUSHBUTTON "Заблокировать", IDC_LOCK, 7, 76, 86, 14 - PUSHBUTTON "Завершение сеанса", IDC_LOGOFF, 102, 76, 86, 14 - PUSHBUTTON "Выключение",IDC_SHUTDOWN, 198, 76, 70, 14 - PUSHBUTTON "Диспетчер задач",IDC_TASKMGR, 102, 95, 86, 14 - PUSHBUTTON "Отмена", IDCANCEL, 198, 95, 70, 14 + GROUPBOX "Logon Information",IDC_STATIC,7,61,261,52 + LTEXT "",IDC_LOGONMSG,15,73,245,18 + LTEXT "",IDC_LOGONDATE,15,94,245,8 + CTEXT "Выберите необходимое действие:", IDC_STATIC,10,119,255,8 + PUSHBUTTON "Заблокировать", IDC_LOCK, 7,135, 86, 14 + PUSHBUTTON "Завершение сеанса", IDC_LOGOFF, 102,135, 86, 14 + PUSHBUTTON "Выключение",IDC_SHUTDOWN, 198,135, 70, 14 + PUSHBUTTON "Диспетчер задач",IDC_TASKMGR, 102,154, 86, 14 + PUSHBUTTON "Отмена", IDCANCEL, 198,154, 70, 14 +END + +IDD_LOCKED_DLG DIALOGEX 0,0,275,121 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Computer Locked" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,37,61,231,8 + LTEXT "Message",IDC_LOCKMSG,37,75,231,26 + LTEXT "Press Ctrl-Alt-Del to unlock this computer.",IDC_STATIC,37,106,231,8 +END + +IDD_UNLOCK_DLG DIALOGEX 0,0,275,179 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Unlock Computer" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,36,61,232,8 + LTEXT "Message",IDC_LOCKMSG,36,75,232,26 + LTEXT "Username:",IDC_STATIC,36,107,40,8 + EDITTEXT IDC_USERNAME,84,104,119,14,ES_AUTOHSCROLL + LTEXT "Password:",IDC_STATIC,36,125,42,8 + EDITTEXT IDC_PASSWORD,84,123,119,14,ES_AUTOHSCROLL | ES_PASSWORD + PUSHBUTTON "OK",IDOK,80,154,50,14,BS_DEFPUSHBUTTON + PUSHBUTTON "Cancel",IDCANCEL,144,154,50,14 END STRINGTABLE @@ -57,4 +89,6 @@ BEGIN IDS_ASKFORUSER "Имя пользователя: " IDS_ASKFORPASSWORD "Пароль: " IDS_FORCELOGOFF "При регистрации нового пользователя все несохраненные данные будут утеряны. Продолжить?" + IDS_LOCKMSG "Only %s or an Administrator can unlock this computer." + IDS_LOGONDATE "Logon date: %s %s" END diff --git a/dll/win32/msgina/lang/sk-SK.rc b/dll/win32/msgina/lang/sk-SK.rc index 2266f5acb76..6cff12f04e5 100644 --- a/dll/win32/msgina/lang/sk-SK.rc +++ b/dll/win32/msgina/lang/sk-SK.rc @@ -1,4 +1,5 @@ -/* TRANSLATOR: Mário Kačmár /Mario Kacmar/ aka Kario (kario@szm.sk) +/* + * TRANSLATOR: Mário Kačmár / Mario Kacmar / aka Kario (kario@szm.sk) * DATE OF TR: 09-02-2008 */ @@ -37,18 +38,50 @@ BEGIN PUSHBUTTON "Vypnúť",IDC_SHUTDOWN,179,122,50,14 END -IDD_LOGGEDON_DLG DIALOGEX 0,0,275,116 -STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +IDD_LOGGEDON_DLG DIALOGEX 0,0,275,175 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP CAPTION "Bezpečnosť" FONT 8,"MS Shell Dlg",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "Čo chcete urobiť?",IDC_STATIC,86,60,87,8 - PUSHBUTTON "Uzamknúť počítač",IDC_LOCK,10,76,70,14 - PUSHBUTTON "Odhlásiť",IDC_LOGOFF,90,76,70,14 - PUSHBUTTON "Vypnúť",IDC_SHUTDOWN,170,76,70,14 - PUSHBUTTON "Správca úloh",IDC_TASKMGR,90,95,70,14 - PUSHBUTTON "Zrušiť",IDCANCEL,170,95,70,14 + GROUPBOX "Logon Information",IDC_STATIC,7,61,261,52 + LTEXT "",IDC_LOGONMSG,15,73,245,18 + LTEXT "",IDC_LOGONDATE,15,94,245,8 + CTEXT "Čo chcete urobiť?",IDC_STATIC,10,119,255,8 + PUSHBUTTON "Uzamknúť počítač",IDC_LOCK,10,135,70,14 + PUSHBUTTON "Odhlásiť",IDC_LOGOFF,90,135,70,14 + PUSHBUTTON "Vypnúť",IDC_SHUTDOWN,170,135,70,14 + PUSHBUTTON "Správca úloh",IDC_TASKMGR,90,154,70,14 + PUSHBUTTON "Zrušiť",IDCANCEL,170,154,70,14 +END + +IDD_LOCKED_DLG DIALOGEX 0,0,275,121 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Computer Locked" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,37,61,231,8 + LTEXT "Message",IDC_LOCKMSG,37,75,231,26 + LTEXT "Press Ctrl-Alt-Del to unlock this computer.",IDC_STATIC,37,106,231,8 +END + +IDD_UNLOCK_DLG DIALOGEX 0,0,275,179 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Unlock Computer" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,36,61,232,8 + LTEXT "Message",IDC_LOCKMSG,36,75,232,26 + LTEXT "Username:",IDC_STATIC,36,107,40,8 + EDITTEXT IDC_USERNAME,84,104,119,14,ES_AUTOHSCROLL + LTEXT "Password:",IDC_STATIC,36,125,42,8 + EDITTEXT IDC_PASSWORD,84,123,119,14,ES_AUTOHSCROLL | ES_PASSWORD + PUSHBUTTON "OK",IDOK,80,154,50,14,BS_DEFPUSHBUTTON + PUSHBUTTON "Cancel",IDCANCEL,144,154,50,14 END STRINGTABLE @@ -59,4 +92,6 @@ BEGIN IDS_ASKFORUSER "Meno používateľa: " IDS_ASKFORPASSWORD "Heslo: " IDS_FORCELOGOFF "Toto spôsobí odhlásenie aktuálneho používateľa a stratu všetkých neuložených údajov. Chcete pokračovať?" + IDS_LOCKMSG "Only %s or an Administrator can unlock this computer." + IDS_LOGONDATE "Logon date: %s %s" END diff --git a/dll/win32/msgina/lang/uk-UA.rc b/dll/win32/msgina/lang/uk-UA.rc index 31de3767d77..11f1e204457 100644 --- a/dll/win32/msgina/lang/uk-UA.rc +++ b/dll/win32/msgina/lang/uk-UA.rc @@ -41,18 +41,50 @@ BEGIN PUSHBUTTON "Завершення роботи...",IDC_SHUTDOWN,148, 122, 86, 14 END -IDD_LOGGEDON_DLG DIALOGEX 0, 0, 275, 116 -STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU +IDD_LOGGEDON_DLG DIALOGEX 0, 0, 275, 175 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP CAPTION "Безпека" FONT 8,"MS Shell Dlg",400,0,1 BEGIN CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 - LTEXT "Що Ви хочете зробити?",IDC_STATIC, 86, 60, 87, 8 - PUSHBUTTON "Блокування",IDC_LOCK, 6, 76, 70, 14 - PUSHBUTTON "Вихід із системи...",IDC_LOGOFF, 80, 76, 80, 14 - PUSHBUTTON "Завершення роботи...",IDC_SHUTDOWN, 165, 76, 86, 14 - PUSHBUTTON "Диспетчер завдань",IDC_TASKMGR, 80, 95, 80, 14 - PUSHBUTTON "Скасувати",IDCANCEL, 165, 95, 86, 14 + GROUPBOX "Logon Information",IDC_STATIC,7,61,261,52 + LTEXT "",IDC_LOGONMSG,15,73,245,18 + LTEXT "",IDC_LOGONDATE,15,94,245,8 + CTEXT "Що Ви хочете зробити?",IDC_STATIC,10,119,255,8 + PUSHBUTTON "Блокування",IDC_LOCK, 6,135, 70, 14 + PUSHBUTTON "Вихід із системи...",IDC_LOGOFF, 80,135, 80, 14 + PUSHBUTTON "Завершення роботи...",IDC_SHUTDOWN, 165,135, 86, 14 + PUSHBUTTON "Диспетчер завдань",IDC_TASKMGR, 80,154, 80, 14 + PUSHBUTTON "Скасувати",IDCANCEL, 165,154, 86, 14 +END + +IDD_LOCKED_DLG DIALOGEX 0,0,275,121 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Computer Locked" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,37,61,231,8 + LTEXT "Message",IDC_LOCKMSG,37,75,231,26 + LTEXT "Press Ctrl-Alt-Del to unlock this computer.",IDC_STATIC,37,106,231,8 +END + +IDD_UNLOCK_DLG DIALOGEX 0,0,275,179 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "Unlock Computer" +FONT 8,"MS Shell Dlg",400,0,1 +BEGIN + CONTROL IDI_ROSLOGO,IDC_ROSLOGO,"Static",SS_BITMAP,0,0,275,54 + ICON IDI_LOCKICON,-1,7,59,20,20 + LTEXT "This computer is in use and has been locked.",IDC_STATIC,36,61,232,8 + LTEXT "Message",IDC_LOCKMSG,36,75,232,26 + LTEXT "Username:",IDC_STATIC,36,107,40,8 + EDITTEXT IDC_USERNAME,84,104,119,14,ES_AUTOHSCROLL + LTEXT "Password:",IDC_STATIC,36,125,42,8 + EDITTEXT IDC_PASSWORD,84,123,119,14,ES_AUTOHSCROLL | ES_PASSWORD + PUSHBUTTON "OK",IDOK,80,154,50,14,BS_DEFPUSHBUTTON + PUSHBUTTON "Cancel",IDCANCEL,144,154,50,14 END STRINGTABLE @@ -63,4 +95,6 @@ BEGIN IDS_ASKFORUSER "Користувач: " IDS_ASKFORPASSWORD "Пароль: " IDS_FORCELOGOFF "Це завершить сеанс поточного користувача і всі незбережені дані будуть загублені. Продовжити?" + IDS_LOCKMSG "Only %s or an Administrator can unlock this computer." + IDS_LOGONDATE "Logon date: %s %s" END diff --git a/dll/win32/msgina/msgina.c b/dll/win32/msgina/msgina.c index 94198392d24..b44773f666e 100644 --- a/dll/win32/msgina/msgina.c +++ b/dll/win32/msgina/msgina.c @@ -186,6 +186,67 @@ WlxInitialize( return pGinaUI->Initialize(pgContext); } +/* + * @implemented + */ +BOOL +WINAPI +WlxScreenSaverNotify( + PVOID pWlxContext, + BOOL *pSecure) +{ +#if 0 + WCHAR szBuffer[2]; + HKEY hKey; + DWORD bufferSize = sizeof(szBuffer); + DWORD varType = REG_SZ; + LONG rc; + + TRACE("(%p %p)\n", pWlxContext, pSecure); + + *pSecure = TRUE; + + /* + * Policy setting: + * HKLM\Software\Policies\Microsoft\Windows\Control Panel\Desktop : ScreenSaverIsSecure + * User setting: + * HKCU\Control Panel\Desktop : ScreenSaverIsSecure + */ + + rc = RegOpenKeyExW(HKEY_CURRENT_USER, + L"Control Panel\\Desktop", + 0, + KEY_QUERY_VALUE, + &hKey); + TRACE("RegOpenKeyExW: %ld\n", rc); + if (rc == ERROR_SUCCESS) + { + rc = RegQueryValueExW(hKey, + L"ScreenSaverIsSecure", + NULL, + &varType, + (LPBYTE)szBuffer, + &bufferSize); + + TRACE("RegQueryValueExW: %ld\n", rc); + + if (rc == ERROR_SUCCESS) + { + TRACE("szBuffer: \"%S\"\n", szBuffer); + *pSecure = _wtoi(szBuffer); + } + + RegCloseKey(hKey); + } + + TRACE("*pSecure: %ld\n", *pSecure); +#endif + + *pSecure = FALSE; + + return TRUE; +} + /* * @implemented */ @@ -416,6 +477,7 @@ DoLoginTasks( TOKEN_STATISTICS Stats; PWLX_PROFILE_V2_0 pProfile = NULL; DWORD cbStats, cbSize; + DWORD dwLength; BOOL bResult; if (!LogonUserW(UserName, Domain, Password, @@ -427,6 +489,21 @@ DoLoginTasks( goto cleanup; } + /* Store the logon time in the context */ + GetLocalTime(&pgContext->LogonTime); + + /* Store user and domain in the context */ + wcscpy(pgContext->UserName, UserName); + if (Domain == NULL || wcslen(Domain) == 0) + { + dwLength = 256; + GetComputerNameW(pgContext->Domain, &dwLength); + } + else + { + wcscpy(pgContext->Domain, Domain); + } + /* Get profile path */ cbSize = 0; bResult = GetProfilesDirectoryW(NULL, &cbSize); @@ -456,13 +533,15 @@ DoLoginTasks( pProfile->dwType = WLX_PROFILE_TYPE_V2_0; pProfile->pszProfile = ProfilePath; - lpEnvironment = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 32 * sizeof(WCHAR)); + lpEnvironment = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, + (wcslen(pgContext->Domain)+ 14 + 1) * sizeof(WCHAR)); if (!lpEnvironment) { WARN("HeapAlloc() failed\n"); goto cleanup; } - wcscpy(lpEnvironment, L"LOGONSERVER=\\\\Test"); + + wsprintfW(lpEnvironment, L"LOGONSERVER=\\\\%s", pgContext->Domain); pProfile->pszEnvironment = lpEnvironment; @@ -681,6 +760,22 @@ WlxWkstaLockedSAS( return pGinaUI->LockedSAS(pgContext); } + +/* + * @implemented + */ +VOID +WINAPI +WlxDisplayLockedNotice(PVOID pWlxContext) +{ + PGINA_CONTEXT pgContext = (PGINA_CONTEXT)pWlxContext; + + TRACE("WlxDisplayLockedNotice()\n"); + + pGinaUI->DisplayLockedNotice(pgContext); +} + + /* * @implemented */ diff --git a/dll/win32/msgina/msgina.h b/dll/win32/msgina/msgina.h index ac26591771b..a9ab3e4fcc6 100644 --- a/dll/win32/msgina/msgina.h +++ b/dll/win32/msgina/msgina.h @@ -1,11 +1,13 @@ #define WIN32_NO_STATUS #include +#include #include #include #include #include #include +#include #include #include #include @@ -29,6 +31,9 @@ typedef struct DWORD AutoLogonState; /* Informations to be filled during logon */ + WCHAR UserName[256]; + WCHAR Domain[256]; + SYSTEMTIME LogonTime; HANDLE UserToken; PLUID pAuthenticationId; PDWORD pdwOptions; @@ -48,6 +53,8 @@ typedef VOID (*PFGINA_DISPLAYSASNOTICE)(PGINA_CONTEXT); typedef INT (*PFGINA_LOGGEDONSAS)(PGINA_CONTEXT, DWORD); typedef INT (*PFGINA_LOGGEDOUTSAS)(PGINA_CONTEXT); typedef INT (*PFGINA_LOCKEDSAS)(PGINA_CONTEXT); +typedef VOID (*PFGINA_DISPLAYLOCKEDNOTICE)(PGINA_CONTEXT); + typedef struct _GINA_UI { PFGINA_INITIALIZE Initialize; @@ -57,6 +64,7 @@ typedef struct _GINA_UI PFGINA_LOGGEDONSAS LoggedOnSAS; PFGINA_LOGGEDOUTSAS LoggedOutSAS; PFGINA_LOCKEDSAS LockedSAS; + PFGINA_DISPLAYLOCKEDNOTICE DisplayLockedNotice; } GINA_UI, *PGINA_UI; /* msgina.c */ diff --git a/dll/win32/msgina/resource.h b/dll/win32/msgina/resource.h index 4b5c4d8ec23..ef06d5b2173 100644 --- a/dll/win32/msgina/resource.h +++ b/dll/win32/msgina/resource.h @@ -6,6 +6,7 @@ #define IDD_LOGGEDON_DLG 102 #define IDD_LOGGEDOUT_DLG 103 #define IDD_LOCKED_DLG 104 +#define IDD_UNLOCK_DLG 105 #define IDC_LOGOFF 1001 #define IDC_USERNAME 1002 @@ -15,6 +16,9 @@ #define IDC_LOCK 1006 #define IDC_ROSLOGO 1007 #define IDC_TASKMGR 1008 +#define IDC_LOCKMSG 1009 +#define IDC_LOGONMSG 1010 +#define IDC_LOGONDATE 1011 #define IDI_ROSLOGO 20000 @@ -26,5 +30,8 @@ #define IDS_ASKFORUSER 40003 #define IDS_ASKFORPASSWORD 40004 #define IDS_FORCELOGOFF 40005 +#define IDS_LOCKMSG 40006 +#define IDS_LOGONMSG 40007 +#define IDS_LOGONDATE 40008 /* EOF */ diff --git a/dll/win32/msgina/stubs.c b/dll/win32/msgina/stubs.c index be4d9d7daa5..581991b5e48 100644 --- a/dll/win32/msgina/stubs.c +++ b/dll/win32/msgina/stubs.c @@ -40,19 +40,6 @@ ShellShutdownDialog( } -/* - * @unimplemented - */ -VOID WINAPI -WlxDisplayLockedNotice( - PVOID pWlxContext) -{ - UNREFERENCED_PARAMETER(pWlxContext); - - UNIMPLEMENTED; -} - - /* * @unimplemented */ @@ -95,23 +82,6 @@ WlxShutdown( } -/* - * @unimplemented - */ -BOOL WINAPI -WlxScreenSaverNotify( - PVOID pWlxContext, - BOOL *pSecure) -{ - UNREFERENCED_PARAMETER(pWlxContext); - UNREFERENCED_PARAMETER(pSecure); - - //HKLM\Software\Policies\Microsoft\Windows\Control Panel\Desktop : ScreenSaverIsSecure - UNIMPLEMENTED; - return TRUE; -} - - /* * @unimplemented */ diff --git a/dll/win32/msgina/tui.c b/dll/win32/msgina/tui.c index a94393a97a9..6ddb8da6114 100644 --- a/dll/win32/msgina/tui.c +++ b/dll/win32/msgina/tui.c @@ -247,6 +247,12 @@ TUILockedSAS( return WLX_SAS_ACTION_UNLOCK_WKSTA; } +static VOID +TUIDisplayLockedNotice( + IN OUT PGINA_CONTEXT pgContext) +{ +} + GINA_UI GinaTextUI = { TUIInitialize, TUIDisplayStatusMessage, @@ -255,4 +261,5 @@ GINA_UI GinaTextUI = { TUILoggedOnSAS, TUILoggedOutSAS, TUILockedSAS, + TUIDisplayLockedNotice, }; diff --git a/dll/win32/msgsm32.acm/CMakeLists.txt b/dll/win32/msgsm32.acm/CMakeLists.txt index aecf1e1d880..7ef640c3462 100644 --- a/dll/win32/msgsm32.acm/CMakeLists.txt +++ b/dll/win32/msgsm32.acm/CMakeLists.txt @@ -10,7 +10,7 @@ list(APPEND SOURCE add_library(msgsm32.acm SHARED ${SOURCE}) -set_module_type(msgsm32.acm win32dll ENTRYPOINT 0 ) +set_module_type(msgsm32.acm win32dll) set_target_properties(msgsm32.acm PROPERTIES SUFFIX "") target_link_libraries(msgsm32.acm wine) add_importlibs(msgsm32.acm winmm user32 msvcrt kernel32 ntdll) diff --git a/dll/win32/msi/suminfo.c b/dll/win32/msi/suminfo.c index 6c92473f4e4..373192d7296 100644 --- a/dll/win32/msi/suminfo.c +++ b/dll/win32/msi/suminfo.c @@ -34,12 +34,14 @@ //#include "shlwapi.h" #include #include -//#include "msi.h" -//#include "msiquery.h" -//#include "msidefs.h" -#include "msipriv.h" +#include //#include "objidl.h" #include +//#include "msi.h" +//#include "msiquery.h" +#include +#include "msipriv.h" + #include WINE_DEFAULT_DEBUG_CHANNEL(msi); diff --git a/dll/win32/msv1_0/CMakeLists.txt b/dll/win32/msv1_0/CMakeLists.txt new file mode 100644 index 00000000000..b98a4792ceb --- /dev/null +++ b/dll/win32/msv1_0/CMakeLists.txt @@ -0,0 +1,19 @@ + +#include_directories( +# ${CMAKE_CURRENT_BINARY_DIR}) + +spec2def(msv1_0.dll msv1_0.spec) + +list(APPEND SOURCE + msv1_0.c + msv1_0.rc + ${CMAKE_CURRENT_BINARY_DIR}/msv1_0_stubs.c + ${CMAKE_CURRENT_BINARY_DIR}/msv1_0.def) + +add_library(msv1_0 SHARED ${SOURCE}) +set_module_type(msv1_0 win32dll UNICODE ENTRYPOINT 0) +target_link_libraries(msv1_0 wine ${PSEH_LIB}) +add_importlibs(msv1_0 kernel32 ntdll) +add_pch(msv1_0 msv1_0.h) +add_dependencies(msv1_0 psdk) +add_cd_file(TARGET msv1_0 DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/msv1_0/msv1_0.c b/dll/win32/msv1_0/msv1_0.c new file mode 100644 index 00000000000..84f1b43da2d --- /dev/null +++ b/dll/win32/msv1_0/msv1_0.c @@ -0,0 +1,156 @@ +/* + * PROJECT: Authentication Package DLL + * LICENSE: GPL - See COPYING in the top level directory + * FILE: dll/win32/msv1_0/msv1_0.c + * PURPOSE: Main file + * COPYRIGHT: Copyright 2013 Eric Kohl + */ + +/* INCLUDES ****************************************************************/ + +#include "msv1_0.h" + +WINE_DEFAULT_DEBUG_CHANNEL(msv1_0); + + +/* GLOBALS *****************************************************************/ + +LSA_DISPATCH_TABLE DispatchTable; + + +/* FUNCTIONS ***************************************************************/ + +/* + * @unimplemented + */ +NTSTATUS +NTAPI +LsaApCallPackage(IN PLSA_CLIENT_REQUEST ClientRequest, + IN PVOID ProtocolSubmitBuffer, + IN PVOID ClientBufferBase, + IN ULONG SubmitBufferLength, + OUT PVOID *ProtocolReturnBuffer, + OUT PULONG ReturnBufferLength, + OUT PNTSTATUS ProtocolStatus) +{ + TRACE("()\n"); + return STATUS_NOT_IMPLEMENTED; +} + + +/* + * @unimplemented + */ +NTSTATUS +NTAPI +LsaApCallPackagePassthrough(IN PLSA_CLIENT_REQUEST ClientRequest, + IN PVOID ProtocolSubmitBuffer, + IN PVOID ClientBufferBase, + IN ULONG SubmitBufferLength, + OUT PVOID *ProtocolReturnBuffer, + OUT PULONG ReturnBufferLength, + OUT PNTSTATUS ProtocolStatus) +{ + TRACE("()\n"); + return STATUS_NOT_IMPLEMENTED; +} + + +/* + * @unimplemented + */ +NTSTATUS +NTAPI +LsaApCallPackageUntrusted(IN PLSA_CLIENT_REQUEST ClientRequest, + IN PVOID ProtocolSubmitBuffer, + IN PVOID ClientBufferBase, + IN ULONG SubmitBufferLength, + OUT PVOID *ProtocolReturnBuffer, + OUT PULONG ReturnBufferLength, + OUT PNTSTATUS ProtocolStatus) +{ + TRACE("()\n"); + return STATUS_NOT_IMPLEMENTED; +} + + +/* + * @unimplemented + */ +NTSTATUS +NTAPI +LsaApInitializePackage(IN ULONG AuthenticationPackageId, + IN PLSA_DISPATCH_TABLE LsaDispatchTable, + IN PLSA_STRING Database OPTIONAL, + IN PLSA_STRING Confidentiality OPTIONAL, + OUT PLSA_STRING *AuthenticationPackageName) +{ + PANSI_STRING NameString; + PCHAR NameBuffer; + + TRACE("(%lu %p %p %p %p)\n", + AuthenticationPackageId, LsaDispatchTable, Database, + Confidentiality, AuthenticationPackageName); + + /* Get the dispatch table entries */ + DispatchTable.AllocateLsaHeap = LsaDispatchTable->AllocateLsaHeap; + DispatchTable.FreeLsaHeap = LsaDispatchTable->FreeLsaHeap; + + + /* Return the package name */ + NameString = DispatchTable.AllocateLsaHeap(sizeof(LSA_STRING)); + if (NameString == NULL) + return STATUS_INSUFFICIENT_RESOURCES; + + NameBuffer = DispatchTable.AllocateLsaHeap(sizeof(MSV1_0_PACKAGE_NAME)); + if (NameBuffer == NULL) + { + DispatchTable.FreeLsaHeap(NameString); + return STATUS_INSUFFICIENT_RESOURCES; + } + + strcpy(NameBuffer, MSV1_0_PACKAGE_NAME); + + RtlInitAnsiString(NameString, NameBuffer); + + *AuthenticationPackageName = (PLSA_STRING)NameString; + + return STATUS_SUCCESS; +} + + +/* + * @unimplemented + */ +VOID +NTAPI +LsaApLogonTerminated(IN PLUID LogonId) +{ + TRACE("()\n"); +} + + +/* + * @unimplemented + */ +NTSTATUS +NTAPI +LsaApLogonUser(IN PLSA_CLIENT_REQUEST ClientRequest, + IN SECURITY_LOGON_TYPE LogonType, + IN PVOID AuthenticationInformation, + IN PVOID ClientAuthenticationBase, + IN ULONG AuthenticationInformationLength, + OUT PVOID *ProfileBuffer, + OUT PULONG ProfileBufferLength, + OUT PLUID LogonId, + OUT PNTSTATUS SubStatus, + OUT PLSA_TOKEN_INFORMATION_TYPE TokenInformationType, + OUT PVOID *TokenInformation, + OUT PLSA_UNICODE_STRING *AccountName, + OUT PLSA_UNICODE_STRING *AuthenticatingAuthority) +{ + TRACE("()\n"); + return STATUS_NOT_IMPLEMENTED; +} + +/* EOF */ diff --git a/dll/win32/msv1_0/msv1_0.h b/dll/win32/msv1_0/msv1_0.h new file mode 100644 index 00000000000..4c9c9181cbc --- /dev/null +++ b/dll/win32/msv1_0/msv1_0.h @@ -0,0 +1,33 @@ +/* + * PROJECT: Authentication Package DLL + * LICENSE: GPL - See COPYING in the top level directory + * FILE: dll/win32/msv1_0/msv1_0.h + * PURPOSE: Common header file + * COPYRIGHT: Copyright 2013 Eric Kohl + */ + +#define WIN32_NO_STATUS +#define _INC_WINDOWS +#define COM_NO_WINDOWS_H +#include +#include +#include +#include +#define NTOS_MODE_USER +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +/* EOF */ diff --git a/dll/win32/msv1_0/msv1_0.rc b/dll/win32/msv1_0/msv1_0.rc new file mode 100644 index 00000000000..7bee7055d2c --- /dev/null +++ b/dll/win32/msv1_0/msv1_0.rc @@ -0,0 +1,7 @@ +#include + +#define REACTOS_VERSION_DLL +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Authentication Package\0" +#define REACTOS_STR_INTERNAL_NAME "msv1_0\0" +#define REACTOS_STR_ORIGINAL_FILENAME "msv1_0.dll\0" +#include diff --git a/dll/win32/msv1_0/msv1_0.spec b/dll/win32/msv1_0/msv1_0.spec new file mode 100644 index 00000000000..31a19adf71e --- /dev/null +++ b/dll/win32/msv1_0/msv1_0.spec @@ -0,0 +1,18 @@ +@ stdcall LsaApCallPackage(ptr ptr ptr long ptr ptr ptr) +@ stdcall LsaApCallPackagePassthrough(ptr ptr ptr long ptr ptr ptr) +@ stdcall LsaApCallPackageUntrusted(ptr ptr ptr long ptr ptr ptr) +@ stdcall LsaApInitializePackage(long ptr ptr ptr ptr) +@ stdcall LsaApLogonTerminated(ptr) +@ stdcall LsaApLogonUser(ptr long ptr ptr long ptr ptr ptr ptr ptr ptr ptr ptr) +@ stub LsaApLogonUserEx +@ stub LsaApLogonUserEx2 +@ stub Msv1_0ExportSubAuthenticationRoutine +@ stub Msv1_0SubAuthenticationPresent +@ stub MsvGetLogonAttemptCount +@ stub MsvSamLogoff +@ stub MsvSamValidate +@ stub MsvValidateTarget +@ stub SpInitialize +@ stub SpInstanceInit +@ stub SpLsaModeInitiaize +@ stub SpUserModeInitiaize diff --git a/dll/win32/nddeapi/CMakeLists.txt b/dll/win32/nddeapi/CMakeLists.txt index b62840a2b83..bdc2c194497 100644 --- a/dll/win32/nddeapi/CMakeLists.txt +++ b/dll/win32/nddeapi/CMakeLists.txt @@ -10,10 +10,10 @@ list(APPEND SOURCE ${CMAKE_CURRENT_BINARY_DIR}/nddeapi.def) add_library(nddeapi SHARED ${SOURCE}) -set_module_type(nddeapi win32dll ENTRYPOINT 0 ) +set_module_type(nddeapi win32dll) target_link_libraries(nddeapi wine) -add_importlibs(nddeapi kernel32 ntdll) +add_importlibs(nddeapi msvcrt kernel32 ntdll) add_dependencies(nddeapi psdk) -add_cd_file(TARGET nddeapi DESTINATION reactos/system32 FOR all) \ No newline at end of file +add_cd_file(TARGET nddeapi DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/netevent/CMakeLists.txt b/dll/win32/netevent/CMakeLists.txt index ef1aab10cde..2a28c72b1cc 100644 --- a/dll/win32/netevent/CMakeLists.txt +++ b/dll/win32/netevent/CMakeLists.txt @@ -1,6 +1,6 @@ include_directories(${REACTOS_BINARY_DIR}/include/reactos) add_library(netevent SHARED netevt.rc) -set_module_type(netevent win32dll ENTRYPOINT 0 UNICODE) +set_module_type(netevent win32dll UNICODE ENTRYPOINT 0) add_dependencies(netevent neteventmsg) add_cd_file(TARGET netevent DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/odbc32/README.txt b/dll/win32/odbc32/README.txt index 8c6b0790e20..43f1acbb4c8 100644 --- a/dll/win32/odbc32/README.txt +++ b/dll/win32/odbc32/README.txt @@ -1,3 +1,3 @@ This stub odbc32.dll is based on the WINE odbc32 implementation except ours doesnt work. Someone will need to import Unix-ODBC in to ReactOS CVS and merge it with this implemenation. -I only created this because MFC depends on odbc32.dll \ No newline at end of file +I only created this because MFC depends on odbc32.dll diff --git a/dll/win32/odbccp32/CMakeLists.txt b/dll/win32/odbccp32/CMakeLists.txt index 03e8107212d..6905e458364 100644 --- a/dll/win32/odbccp32/CMakeLists.txt +++ b/dll/win32/odbccp32/CMakeLists.txt @@ -11,7 +11,7 @@ list(APPEND SOURCE add_library(odbccp32 SHARED ${SOURCE}) -set_module_type(odbccp32 win32dll ENTRYPOINT 0 ) +set_module_type(odbccp32 win32dll) target_link_libraries(odbccp32 uuid wine) add_importlibs(odbccp32 diff --git a/dll/win32/olecli32/CMakeLists.txt b/dll/win32/olecli32/CMakeLists.txt index 1d8debfe937..2d456883e62 100644 --- a/dll/win32/olecli32/CMakeLists.txt +++ b/dll/win32/olecli32/CMakeLists.txt @@ -9,8 +9,8 @@ list(APPEND SOURCE ${CMAKE_CURRENT_BINARY_DIR}/olecli32.def) add_library(olecli32 SHARED ${SOURCE}) -set_module_type(olecli32 win32dll ENTRYPOINT 0 ) +set_module_type(olecli32 win32dll) target_link_libraries(olecli32 wine) -add_importlibs(olecli32 ole32 gdi32 kernel32 ntdll) +add_importlibs(olecli32 msvcrt ole32 gdi32 kernel32 ntdll) add_dependencies(olecli32 psdk) add_cd_file(TARGET olecli32 DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/oledlg/oledlg_He.rc b/dll/win32/oledlg/oledlg_He.rc new file mode 100644 index 00000000000..febec8b3425 --- /dev/null +++ b/dll/win32/oledlg/oledlg_He.rc @@ -0,0 +1,99 @@ +/* + * Copyright 2003 Ulrich Czekalla for CodeWeavers + * + * Translated by Baruch Rutman + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "resource.h" + +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + +UIINSERTOBJECT DIALOG 0, 0, 294, 151 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "הכנסת עצם" +FONT 8, "MS Shell Dlg" +BEGIN + LISTBOX IDC_OBJTYPELIST,82,19,131,66,LBS_SORT | + LBS_NOINTEGRALHEIGHT | WS_VISIBLE | WS_VSCROLL | + WS_TABSTOP + LTEXT "סוג עצם:",IDC_OBJTYPELBL,82,7,53,8,WS_VISIBLE + DEFPUSHBUTTON "אישור",IDOK,221,7,66,14 + PUSHBUTTON "ביטול",IDCANCEL,221,24,66,14 + GROUPBOX "תוצאה",IDC_RESULT,7,103,208,41 + CONTROL "צור חדש",IDC_CREATENEW,"Button",BS_AUTORADIOBUTTON | + WS_GROUP,7,20,62,10 + CONTROL "צור בקר",IDC_CREATECONTROL,"Button", + BS_AUTORADIOBUTTON | NOT WS_VISIBLE,7,54,62,10 + CONTROL "צור מקובץ",IDC_CREATEFROMFILE,"Button", + BS_AUTORADIOBUTTON,7,37,67,10 + LTEXT "",IDC_RESULTDESC,49,112,159,23 + PUSHBUTTON "הוספת בקר...",IDC_ADDCONTROL,81,88,63,14,NOT WS_VISIBLE + CONTROL "הצג כסמל",IDC_ASICON,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP | NOT WS_VISIBLE,223,58,64,10 + PUSHBUTTON "סייר...",IDC_BROWSE,83,53,50,14,NOT WS_VISIBLE + LTEXT "קובץ:",IDC_FILELBL,83,27,20,8, NOT WS_VISIBLE + EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE +END + +STRINGTABLE +{ + IDS_RESULTOBJDESC "Insert a new %s object into your document" + IDS_RESULTFILEOBJDESC "Insert the contents of the file as an object into your document so that you may activate it using the program which created it." + IDS_BROWSE "סייר" + IDS_NOTOLEMOD "File does not appear to be a valid OLE module. Unable to register OLE control." + IDS_NOTOLEMODCAPTION "הוספת בקר" +} + +IDD_PASTESPECIAL4 DIALOG 3, 15, 293, 140 +STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Paste Special" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "מקור:", -1, 6, 9, 30, 8, WS_VISIBLE | WS_GROUP + CONTROL "הדבק", IDC_PS_PASTE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE, + 6, 38, 55, 10 + CONTROL "הדבק קישור", IDC_PS_PASTELINK, "Button", BS_AUTORADIOBUTTON | WS_VISIBLE, + 6, 63, 55, 10 + LTEXT "כ:", -1, 65, 25, 16, 8, WS_VISIBLE | WS_GROUP + LISTBOX IDC_PS_PASTELIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE + LISTBOX IDC_PS_PASTELINKLIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE + LISTBOX IDC_PS_DISPLAYLIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | WS_VISIBLE + CONTROL "אישור", IDOK, "Button", BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE, 224, 6, 66, 14 + CONTROL "ביטול", IDCANCEL, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 23, 66, 14 + CONTROL "&עזרה", IDC_OLEUIHELP, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 42, 66, 14 + CONTROL "הצג כסמל", IDC_PS_DISPLAYASICON, "Button", BS_AUTOCHECKBOX | WS_TABSTOP | WS_VISIBLE, 224, 59, 66, 14 + CONTROL "", IDC_PS_ICONDISPLAY, "Static", SS_ICON | WS_VISIBLE, 224, 75, 66, 44 + CONTROL "שנה סמל...", IDC_PS_CHANGEICON, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 123, 66, 14 + CONTROL "", IDC_PS_RESULTIMAGE, "Static", SS_ICON | WS_VISIBLE, 8, 101, 42, 34 + CONTROL "<< result text goes here >>", IDC_PS_RESULTTEXT, "Static", SS_NOPREFIX | WS_VISIBLE, 54, 100, 159, 35 + CONTROL "תוצאה", -1, "Button", BS_GROUPBOX | WS_GROUP | WS_VISIBLE, 6, 90, 212, 48 + CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 +END + +STRINGTABLE +{ + IDS_PS_PASTE_DATA "Inserts the contents of the clipboard into your document as %s." + IDS_PS_PASTE_OBJECT "Inserts the contents of the clipboard into your document so that you can activate it using %s." + IDS_PS_PASTE_OBJECT_AS_ICON "Inserts the contents of the clipboard into your document so that you can activate it using %s. It will be displayed as an icon." + IDS_PS_PASTE_LINK_DATA "Inserts the contents of the clipboard into your document as %s. The data is linked to the source file so that changes to the file will be reflected in your document." + IDS_PS_PASTE_LINK_OBJECT "Inserts a picture of the clipboard contents into your document. The picture is linked to the source file so that changes to the file will be reflected in your document." + IDS_PS_PASTE_LINK_OBJECT_AS_ICON "Inserts a shortcut which points to the location of the clipboard contents. The shortcut is linked to the source file so that changes to the file will be reflected in your document." + IDS_PS_NON_OLE "Inserts the contents of the clipboard into your document." + IDS_PS_UNKNOWN_TYPE "סוג לא ידוע" + IDS_PS_UNKNOWN_SRC "מקור לא ידוע" + IDS_PS_UNKNOWN_APP "the program which created it" +} diff --git a/dll/win32/oledlg/rsrc.rc b/dll/win32/oledlg/rsrc.rc index 39349dcadbe..3f21f90de3f 100644 --- a/dll/win32/oledlg/rsrc.rc +++ b/dll/win32/oledlg/rsrc.rc @@ -72,6 +72,9 @@ #ifdef LANGUAGE_FR_FR #include "oledlg_Fr.rc" #endif +#ifdef LANGUAGE_HE_IL + #include "oledlg_He.rc" +#endif #ifdef LANGUAGE_HU_HU #include "oledlg_Hu.rc" #endif diff --git a/dll/win32/olepro32/CMakeLists.txt b/dll/win32/olepro32/CMakeLists.txt index 4c83b168938..e29383e01b1 100644 --- a/dll/win32/olepro32/CMakeLists.txt +++ b/dll/win32/olepro32/CMakeLists.txt @@ -11,11 +11,12 @@ list(APPEND SOURCE add_library(olepro32 SHARED ${SOURCE}) -set_module_type(olepro32 win32dll ENTRYPOINT 0 ) +set_module_type(olepro32 win32dll) target_link_libraries(olepro32 wine) add_importlibs(olepro32 + msvcrt oleaut32 kernel32 ntdll) diff --git a/dll/win32/olesvr32/CMakeLists.txt b/dll/win32/olesvr32/CMakeLists.txt index 3521cb66ff2..cb27dd109d8 100644 --- a/dll/win32/olesvr32/CMakeLists.txt +++ b/dll/win32/olesvr32/CMakeLists.txt @@ -11,10 +11,10 @@ list(APPEND SOURCE add_library(olesvr32 SHARED ${SOURCE}) -set_module_type(olesvr32 win32dll ENTRYPOINT 0 ) +set_module_type(olesvr32 win32dll) target_link_libraries(olesvr32 wine) -add_importlibs(olesvr32 kernel32 ntdll) +add_importlibs(olesvr32 msvcrt kernel32 ntdll) add_dependencies(olesvr32 psdk) add_cd_file(TARGET olesvr32 DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/pdh/CMakeLists.txt b/dll/win32/pdh/CMakeLists.txt index 5bfeb1e5544..9d456268d69 100644 --- a/dll/win32/pdh/CMakeLists.txt +++ b/dll/win32/pdh/CMakeLists.txt @@ -14,11 +14,11 @@ list(APPEND SOURCE ${CMAKE_CURRENT_BINARY_DIR}/pdh.def) add_library(pdh SHARED ${SOURCE}) -set_module_type(pdh win32dll ENTRYPOINT 0 ) +set_module_type(pdh win32dll) target_link_libraries(pdh wine) -add_importlibs(pdh kernel32 ntdll msvcrt) +add_importlibs(pdh msvcrt kernel32 ntdll) add_cd_file(TARGET pdh DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/rasapi32/CMakeLists.txt b/dll/win32/rasapi32/CMakeLists.txt index 7da5e10b675..18c4baa8e58 100644 --- a/dll/win32/rasapi32/CMakeLists.txt +++ b/dll/win32/rasapi32/CMakeLists.txt @@ -10,8 +10,8 @@ list(APPEND SOURCE ${CMAKE_CURRENT_BINARY_DIR}/rasapi32.def) add_library(rasapi32 SHARED ${SOURCE}) -set_module_type(rasapi32 win32dll ENTRYPOINT 0 ) +set_module_type(rasapi32 win32dll) target_link_libraries(rasapi32 wine) -add_importlibs(rasapi32 kernel32 ntdll) +add_importlibs(rasapi32 msvcrt kernel32 ntdll) add_dependencies(rasapi32 psdk) add_cd_file(TARGET rasapi32 DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/rasdlg/lang/he-IL.rc b/dll/win32/rasdlg/lang/he-IL.rc new file mode 100644 index 00000000000..4a052c07214 --- /dev/null +++ b/dll/win32/rasdlg/lang/he-IL.rc @@ -0,0 +1,2373 @@ +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + +102 DIALOGEX 0, 0, 255, 265 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "מספרי טלפון חלופיים" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Specify alternate phone numbers you want to use to make this connection.", 1018, 7, 5, 243, 16 + LTEXT "מספרי טלפון:", 1019, 7, 27, 238, 8 + CONTROL "", 1012, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000848D, 7, 38, 217, 144 + PUSHBUTTON "הזז למעלה", 1017, 230, 40, 18, 16, BS_ICON + PUSHBUTTON "הזז למטה", 1015, 230, 61, 18, 16, BS_ICON + PUSHBUTTON "הוסף...", 1013, 7, 187, 70, 14 + PUSHBUTTON "ערוך...", 1016, 81, 187, 70, 14 + PUSHBUTTON "מחק", 1014, 154, 187, 70, 14 + AUTOCHECKBOX "אם המספר זה נכשל, עבור למספר הבא", 1011, 8, 210, 243, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "העבר מספר מוצלח לראש הרשימה", 1010, 8, 228, 243, 10, BS_TOP | BS_MULTILINE + DEFPUSHBUTTON "אישור", 1, 122, 245, 60, 14 + PUSHBUTTON "ביטול", 2, 188, 245, 60, 14 +END + +103 DIALOGEX 6, 18, 250, 170 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "חיבורי רשת" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", 1029, 5, 5, 241, 35, NOT WS_GROUP + LTEXT "חיבורים:", -1, 5, 46, 238, 10 + CONTROL "List1", 1677, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000440D, 5, 57, 240, 57 + AUTOCHECKBOX "&Don't ask me again until the next time I log on", 1022, 8, 125, 235, 10 + PUSHBUTTON "הגדרות", 1026, 7, 149, 60, 14 + DEFPUSHBUTTON "התחבר...", 1024, 117, 149, 60, 14 + PUSHBUTTON "ביטול", 1025, 183, 149, 60, 14 +END + +104 DIALOGEX 6, 18, 269, 263 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Line Bundling Errors" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 32516, 1031, 7, 7, 20, 20 + LTEXT "One or more additional lines did not connect. ", 1033, 37, 8, 216, 20 + CONTROL "", 1032, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x00008401, 37, 83, 224, 136 + AUTOCHECKBOX "&Do not attempt failed lines in the future", 1030, 38, 226, 222, 10 + DEFPUSHBUTTON "מסכים", 1, 135, 242, 60, 14 + PUSHBUTTON "נתק", 2, 201, 242, 60, 14 + LTEXT "If only a single line connected, the server may not be configured to accept multi-link calls. Check 'Do not attempt failed lines' to avoid unnecessary connection charges in such a case.", -1, 37, 36, 224, 44 +END + +105 DIALOGEX 0, 0, 261, 253 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "הגדרות אבטחה מתקדמות" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "אבטחת כניסה", 1547, 7, 33, 246, 191 + LTEXT "הצפנת מידע:", 1546, 7, 5, 247, 10 + COMBOBOX 1495, 7, 17, 247, 76, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + AUTORADIOBUTTON "Use &Extensible Authentication Protocol (EAP)", 1544, 17, 47, 226, 8, WS_GROUP + LTEXT "סוג EAP", -1, 18, 64, 35, 8, NOT WS_VISIBLE | NOT WS_GROUP + COMBOBOX 1034, 53, 62, 191, 42, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "מאפיינים", 1035, 184, 77, 60, 14 + AUTORADIOBUTTON "אפשר את הפרוטוקולים הבאים", 1545, 17, 92, 224, 10 + AUTOCHECKBOX "&Unencrypted password (PAP)", 1491, 28, 105, 215, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTOCHECKBOX "&Shiva Password Authentication Protocol (SPAP)", 1496, 28, 119, 214, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Challenge Handshake Authentication Protocol (CHAP)", 1494, 28, 133, 215, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&MS CHAP (MS-CHAP)", 1493, 28, 148, 212, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Allow older MS-CHAP version for &Win 95 servers", 200, 46, 162, 198, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "M&icrosoft CHAP Version 2 (MS-CHAP v2)", 1492, 28, 176, 200, 10, BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 28, 189, 208, 1 + AUTOCHECKBOX "&For MS-CHAP based protocols, automatically use my ReactOS logon name and password (and domain if any)", 1549, 28, 195, 213, 24, BS_TOP | BS_MULTILINE + DEFPUSHBUTTON "אישור", 1, 127, 232, 60, 14 + PUSHBUTTON "ביטול", 2, 192, 232, 60, 14 +END + +106 DIALOGEX 6, 18, 255, 109 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "ההתחברות הושלמה" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "אישור", 1, 97, 91, 60, 14 + ICON 563, 1046, 7, 7, 20, 20 + LTEXT "'Connection name' עכשיו מחובר.", 1047, 40, 7, 212, 16 + LTEXT "To check the status of this connection or disconnect, right-click its icon in the Network Connections folder, or click its icon on the taskbar (if present).", -1, 40, 30, 212, 34 + AUTOCHECKBOX "אל תראה הודעה זו שוב", 1045, 40, 69, 212, 10, BS_TOP | BS_MULTILINE +END + +107 DIALOGEX 0, 0, 258, 167 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "מספר טלפון", 1053, 7, 5, 243, 92 + LTEXT "&Area code:", 1055, 18, 17, 54, 8 + COMBOBOX 1049, 17, 30, 55, 129, CBS_DROPDOWN | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "מספר טלפון:", 1057, 77, 17, 166, 8, NOT WS_GROUP + EDITTEXT 1051, 77, 30, 163, 14, ES_AUTOHSCROLL + LTEXT "קידומת מדינה/אזור:", 1056, 18, 48, 221, 8, NOT WS_GROUP + COMBOBOX 1054, 17, 61, 224, 93, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "השתמש בחוקי חיוג", 1048, 20, 81, 219, 10, BS_TOP | BS_MULTILINE + GROUPBOX "Co&mment", 1052, 7, 102, 243, 36 + EDITTEXT 1050, 17, 115, 224, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "אישור", 1, 127, 147, 60, 14 + PUSHBUTTON "ביטול", 2, 191, 147, 60, 14 +END + +108 DIALOGEX 6, 18, 222, 104 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "שינוי סיסמה" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Your password on the remote network has expired. Enter passwords, then press OK to set a new one.", 1062, 7, 5, 210, 24 + LTEXT "סיסמה חדשה:", 1064, 8, 43, 108, 8 + EDITTEXT 1060, 118, 38, 98, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "אישור סיסמה חדשה:", 1061, 8, 61, 102, 8 + EDITTEXT 1058, 118, 57, 98, 14, ES_PASSWORD | ES_AUTOHSCROLL + DEFPUSHBUTTON "אישור", 1, 90, 84, 60, 14, WS_GROUP + PUSHBUTTON "ביטול", 2, 154, 84, 60, 14 +END + +109 DIALOGEX 6, 18, 223, 122 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "שינוי סיסמה" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Your password on the remote network has expired. Enter passwords, then press OK to set a new one.", 1062, 7, 5, 212, 29 + LTEXT "סיסמה ישנה:", 1063, 7, 42, 108, 8 + EDITTEXT 1059, 116, 38, 100, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "סיסמה חדשה:", 1064, 7, 60, 108, 8 + EDITTEXT 1060, 116, 56, 100, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "אישור סיסמה חדשה:", 1061, 7, 78, 108, 8 + EDITTEXT 1058, 116, 74, 100, 14, ES_PASSWORD | ES_AUTOHSCROLL + DEFPUSHBUTTON "אישור", 1, 92, 101, 60, 14, WS_GROUP + PUSHBUTTON "ביטול", 2, 156, 101, 60, 14 +END + +110 DIALOGEX 12, 16, 230, 105 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Callback" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "You have 'Set By Caller' callback privilege on the server. Press OK and the server will call you back at the number below. Press Cancel to skip callback.", 1066, 5, 5, 221, 39, SS_NOPREFIX + LTEXT "&Enter your modem's phone number:", 1067, 5, 46, 222, 8, NOT WS_GROUP + EDITTEXT 1065, 5, 57, 221, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "אישור", 1, 100, 85, 60, 14, WS_GROUP + PUSHBUTTON "ביטול", 2, 164, 85, 60, 14 +END + +111 DIALOGEX 6, 19, 265, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "שגיאה בהתחברות אל %1" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 32515, 1068, 7, 7, 20, 20, WS_GROUP + LTEXT "", 1070, 34, 7, 226, 105 + DEFPUSHBUTTON "Do not dial=88", 1, 4, 117, 128, 14, WS_GROUP + PUSHBUTTON "ביטול", 2, 136, 117, 60, 14 + PUSHBUTTON "מידע נוסף...", 1069, 200, 117, 60, 14 +END + +112 DIALOGEX 6, 18, 263, 219 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "חיוג וניתוק אוטומטי" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS can automatically dial and hang up devices depending on how much information is being sent and received.", 1085, 9, 7, 253, 30 + GROUPBOX "חיוג אוטומטי", -1, 6, 38, 249, 71 + LTEXT "Dial another line when this connection meets both of the following conditions:", 1083, 16, 51, 237, 16, NOT WS_GROUP + LTEXT "פעיל לפחות:", -1, 16, 73, 100, 8 + COMBOBOX 1079, 117, 70, 60, 100, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "משך זמן לפחות:", 1084, 16, 92, 99, 8, NOT WS_GROUP + COMBOBOX 1080, 117, 89, 90, 162, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "ניתוק אוטומטי", -1, 6, 113, 248, 81 + LTEXT "Hang up any device used for this connection when it meets both of the following conditions:", 1086, 16, 127, 230, 18, NOT WS_GROUP + LTEXT "פעיל לא יותר מ:", -1, 16, 150, 92, 8 + COMBOBOX 1081, 115, 146, 60, 100, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "משך זמן לפחות:", 1087, 16, 168, 92, 8, NOT WS_GROUP + COMBOBOX 1082, 115, 166, 90, 151, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + DEFPUSHBUTTON "אישור", 1, 131, 199, 60, 14, WS_GROUP + PUSHBUTTON "ביטול", 2, 194, 199, 60, 14 +END + +113 DIALOGEX 21, 46, 225, 65 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "מתחבר אל %1..." +FONT 8, "MS Shell Dlg" +BEGIN + ICON 563, 1417, 7, 7, 20, 20 + LTEXT "", 1097, 36, 7, 185, 35, SS_NOPREFIX + PUSHBUTTON "ביטול", 2, 83, 47, 60, 14 +END + +114 DIALOGEX 6, 18, 225, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "חיבור בחיוג" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 563, 1098, 7, 6, 20, 20, WS_GROUP + LTEXT "The autodial attempt failed. Do you want to disable autodial from this location?", 1099, 40, 6, 181, 34, NOT WS_GROUP + PUSHBUTTON "כן", 1, 60, 42, 50, 14 + DEFPUSHBUTTON "לא", 2, 115, 42, 50, 14 +END + +115 DIALOGEX 0, 0, 263, 124 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "התחבר אל %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 263, 50 + LTEXT "חייג:", 1412, 9, 60, 68, 8 + COMBOBOX 1416, 88, 56, 165, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "חיוג מ:", 1415, 9, 77, 71, 8 + COMBOBOX 1414, 88, 75, 89, 112, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "חוקי חיוג", 1108, 181, 75, 72, 14 + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 8, 96, 245, 1 + DEFPUSHBUTTON "חיוג", 1590, 8, 103, 61, 14 + PUSHBUTTON "ביטול", 1591, 70, 103, 60, 14 + PUSHBUTTON "מאפיינים", 1107, 132, 103, 60, 14 + PUSHBUTTON "עזרה", 1592, 194, 103, 60, 14 +END + +116 DIALOGEX 0, 0, 265, 176 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "שם משתמש:", 1413, 8, 60, 88, 8 + EDITTEXT 1104, 103, 57, 154, 14, ES_AUTOHSCROLL + LTEXT "סיסמה:", 1112, 8, 79, 88, 8 + EDITTEXT 1103, 103, 76, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 8, 97, 248, 1 + AUTOCHECKBOX "שמור את שם המשתמש והסיסמה למשתמשים הבאים:", 1101, 14, 105, 239, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "רק לעצמי", 1622, 26, 120, 226, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "לכל מי שמשתמש במחשב זה", 1623, 26, 134, 229, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 8, 149, 248, 1 + DEFPUSHBUTTON "חייג", 1590, 8, 156, 60, 14, WS_GROUP + PUSHBUTTON "ביטול", 1591, 71, 156, 60, 14 + PUSHBUTTON "מאפיינים", 1107, 133, 156, 60, 14 + PUSHBUTTON "עזרה", 1592, 195, 156, 60, 14 +END + +117 DIALOGEX 0, 0, 263, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "שם משתמש:", 1413, 9, 61, 92, 8 + EDITTEXT 1104, 102, 57, 154, 14, ES_AUTOHSCROLL + LTEXT "סיסמה:", 1112, 9, 80, 92, 8 + EDITTEXT 1103, 102, 76, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "שם מתחם:", 1110, 9, 99, 91, 8 + EDITTEXT 1102, 102, 95, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 9, 116, 247, 1 + AUTOCHECKBOX "שמור את שם המשתמש והסיסמה למשתמשים הבאים:", 1101, 12, 123, 243, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "רק לעצמי", 1622, 25, 137, 229, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "לכל מי שמתשמש במחשב זה", 1623, 25, 151, 230, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 9, 167, 247, 1 + DEFPUSHBUTTON "חייג", 1590, 8, 173, 60, 14, WS_GROUP + PUSHBUTTON "ביטול", 1591, 71, 173, 60, 14 + PUSHBUTTON "מאפיינים", 1107, 133, 173, 60, 14 + PUSHBUTTON "עזרה", 1592, 195, 173, 60, 14 +END + +118 DIALOGEX 0, 0, 265, 220 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "שם משתמש:", 1413, 10, 61, 92, 8 + EDITTEXT 1104, 104, 57, 154, 14, ES_AUTOHSCROLL + LTEXT "סיסמה:", 1112, 10, 80, 92, 8 + EDITTEXT 1103, 104, 76, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "שם מתחם:", 1110, 10, 100, 92, 8 + EDITTEXT 1102, 104, 95, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 11, 116, 247, 1 + AUTOCHECKBOX "שמור את שם המשתמש והסיסמה למשתמשים הבאים:", 1101, 16, 124, 239, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "רק לעצמי", 1622, 29, 139, 225, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "לכל מי שמתשמש במחשב זה", 1623, 29, 152, 225, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 167, 247, 1 + LTEXT "חייג:", 1412, 10, 177, 90, 8 + COMBOBOX 1416, 102, 173, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 192, 247, 1 + DEFPUSHBUTTON "חייג", 1590, 10, 199, 60, 14, WS_GROUP + PUSHBUTTON "ביטול", 1591, 72, 199, 60, 14 + PUSHBUTTON "מאפיינים", 1107, 134, 199, 60, 14 + PUSHBUTTON "עזרה", 1592, 196, 199, 60, 14 +END + +119 DIALOGEX 0, 0, 265, 200 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "שם משתמש:", 1413, 10, 62, 91, 8 + EDITTEXT 1104, 104, 58, 154, 14, ES_AUTOHSCROLL + LTEXT "סיסמה:", 1112, 10, 81, 92, 8 + EDITTEXT 1103, 104, 77, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 10, 97, 247, 1 + AUTOCHECKBOX "שמור את שם המשתמש והסיסמה למשתמשים הבאים:", 1101, 12, 103, 243, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "רק לעצמי", 1622, 24, 117, 229, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "לכל מי שמתשמש במחשב זה", 1623, 24, 132, 229, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 147, 247, 1 + LTEXT "חייג:", 1412, 13, 157, 88, 8 + COMBOBOX 1416, 103, 154, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 173, 247, 1 + DEFPUSHBUTTON "חייג", 1590, 10, 180, 60, 14, WS_GROUP + PUSHBUTTON "ביטול", 1591, 72, 180, 60, 14 + PUSHBUTTON "מאפיינים", 1107, 134, 180, 60, 14 + PUSHBUTTON "עזרה", 1592, 197, 180, 60, 14 +END + +121 DIALOGEX 6, 18, 230, 131 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "ISDN הגדרת" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "סוג קו:", 1155, 9, 9, 65, 8 + COMBOBOX 1153, 76, 7, 148, 42, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + AUTOCHECKBOX "&Negotiate line type", 1150, 23, 26, 199, 10, BS_TOP | BS_MULTILINE | WS_GROUP + GROUPBOX " ", 1152, 8, 48, 214, 51, WS_GROUP + AUTOCHECKBOX "&Use old proprietary protocol", 1149, 17, 48, 102, 10, BS_TOP | BS_MULTILINE + LTEXT "&Channels to use:", 1154, 16, 65, 100, 8, NOT WS_GROUP + EDITTEXT 1151, 119, 61, 94, 14, ES_AUTOHSCROLL + AUTOCHECKBOX "&Enable hardware compression", 1148, 16, 82, 198, 10, BS_TOP | BS_MULTILINE + PUSHBUTTON "אישור", 1, 99, 109, 60, 14, WS_GROUP + PUSHBUTTON "ביטול", 2, 163, 109, 60, 14 +END + +122 DIALOGEX 6, 18, 220, 68 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "ISDN הגדרת" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "סוג קו:", 1155, 9, 11, 55, 8 + COMBOBOX 1153, 67, 7, 148, 43, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + AUTOCHECKBOX "&Negotiate line type", 1150, 21, 28, 194, 10, BS_TOP | BS_MULTILINE | WS_GROUP + PUSHBUTTON "אישור", 1, 90, 49, 60, 14, WS_GROUP + PUSHBUTTON "ביטול", 2, 154, 49, 60, 14 +END + +123 DIALOGEX 11, 20, 350, 275 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + EDITTEXT 1161, 5, 5, 338, 236, ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | WS_GROUP + LTEXT "כתובת IP:", 1163, 7, 253, 68, 8 + CONTROL "", 1160, "RASIPADDRESS", WS_TABSTOP, 76, 250, 117, 14 + DEFPUSHBUTTON "", 1162, 197, 252, 16, 13, NOT WS_VISIBLE | WS_GROUP | NOT WS_TABSTOP + PUSHBUTTON "סיים", 1, 219, 252, 60, 14, WS_GROUP + PUSHBUTTON "ביטול", 2, 283, 252, 60, 14 +END + +124 DIALOGEX 6, 17, 350, 266 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + EDITTEXT 1161, 5, 4, 340, 236, ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | WS_GROUP + DEFPUSHBUTTON "", 1162, 7, 247, 50, 14, NOT WS_VISIBLE | WS_GROUP | NOT WS_TABSTOP + PUSHBUTTON "סיים", 1, 222, 247, 60, 14, WS_GROUP + PUSHBUTTON "ביטול", 2, 286, 247, 60, 14 +END + +125 DIALOGEX 12, 16, 261, 190 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "הגדרת מודם" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 15102, 1238, 7, 7, 20, 20 + LTEXT "מודם:", -1, 25, 27, 24, 8, NOT WS_VISIBLE | NOT WS_GROUP + EDITTEXT 1235, 40, 7, 214, 16, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER + LTEXT "מהירות מרבית (סיביות לשניה):", 1243, 7, 36, 110, 8 + COMBOBOX 1239, 119, 34, 136, 186, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Modem &protocol", 1244, 7, 52, 111, 8 + COMBOBOX 1245, 119, 50, 136, 186, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "תכונות חומרה", 1237, 6, 70, 248, 61, WS_GROUP + AUTOCHECKBOX "E&nable hardware flow control", 1232, 19, 82, 217, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "En&able modem error control", 1231, 19, 98, 217, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Enable m&odem compression", 1229, 19, 115, 217, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Show terminal window", 1234, 8, 136, 246, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Enable mo&dem speaker", 1230, 8, 151, 247, 10, BS_TOP | BS_MULTILINE | WS_GROUP + DEFPUSHBUTTON "אישור", 1, 129, 171, 60, 14, WS_GROUP + PUSHBUTTON "ביטול", 2, 194, 171, 60, 14 +END + +126 DIALOGEX 0, 0, 270, 117 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Select Network Component Type" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Click the type of network component you want to install:", -1, 8, 7, 258, 8 + CONTROL "", 1251, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 8, 20, 188, 58 + GROUPBOX "", -1, 8, 81, 188, 30 + LTEXT "", 1250, 12, 90, 177, 17 + DEFPUSHBUTTON "הוסף...", 1252, 205, 20, 60, 14 + PUSHBUTTON "ביטול", 2, 205, 38, 60, 14 +END + +127 DIALOGEX 16, 20, 260, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "NetWare or Compatible Connections" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 32515, 1278, 7, 7, 21, 20, WS_GROUP + LTEXT "You have connections to a NetWare compatible network. These connections will be closed when the PPP IPX connection is established.", 1279, 42, 7, 215, 37 + LTEXT "Before dialing, to avoid data loss, either close all files using these connections or uncheck IPX on this entry's Network Protocol settings.", 1280, 42, 46, 215, 38, NOT WS_GROUP + AUTOCHECKBOX "&Do not display this message in the future", 1277, 42, 86, 215, 10, BS_TOP | BS_MULTILINE | WS_GROUP + DEFPUSHBUTTON "אישור", 1, 65, 112, 60, 14, WS_GROUP + PUSHBUTTON "ביטול", 2, 134, 112, 60, 14 +END + +128 DIALOGEX 7, 22, 236, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "חיוג ידני" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Pick up the handset and dial (or ask the operator to dial). After dialing is complete, click OK. Listen to handset until silent, and then hang up.", 1281, 8, 8, 219, 32 + LTEXT "מספר טלפון:", 1282, 8, 46, 91, 8 + LTEXT "", 1283, 103, 46, 126, 8, NOT WS_GROUP + DEFPUSHBUTTON "אישור", 1, 104, 70, 60, 14, WS_GROUP + PUSHBUTTON "ביטול", 2, 168, 70, 60, 14 +END + +129 DIALOGEX 6, 20, 260, 85 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Network Protocol Connection Result" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 32516, 1328, 7, 7, 21, 20, WS_GROUP + LTEXT "", 1329, 38, 7, 216, 24, NOT WS_GROUP + AUTOCHECKBOX "&Do not request the failed protocols next time", 1327, 40, 44, 215, 10, BS_TOP | BS_MULTILINE | WS_GROUP + PUSHBUTTON "הסכמה", 1, 129, 64, 60, 14 + PUSHBUTTON "נתק", 2, 193, 64, 60, 14 +END + +133 DIALOGEX 6, 18, 231, 211 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "X.25 הגדרות כניסה" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select your X.25 network provider and type the X.121 address of the remote server:", 1408, 7, 4, 220, 27 + LTEXT "רשת:", 1410, 9, 35, 213, 8, NOT WS_GROUP + COMBOBOX 1406, 9, 46, 215, 125, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "X.121&address:", 1407, 9, 66, 213, 8, NOT WS_GROUP + EDITTEXT 1402, 8, 77, 215, 14, ES_AUTOHSCROLL + GROUPBOX "Optional", 1405, 8, 95, 215, 79 + LTEXT "&User data:", 1411, 19, 109, 182, 8, NOT WS_GROUP + EDITTEXT 1404, 19, 120, 193, 14, ES_AUTOHSCROLL + LTEXT "&Facilities:", 1409, 19, 138, 182, 8, NOT WS_GROUP + EDITTEXT 1403, 19, 149, 193, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "אישור", 1, 100, 189, 60, 14 + PUSHBUTTON "ביטול", 2, 164, 189, 60, 14 +END + +146 DIALOGEX 6, 18, 230, 210 +STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE | WS_CAPTION +CAPTION "חיוג עצמי" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "If you are disconnected from a network, autodial attempts to connect to a network whenever you try to access remote information.", -1, 7, 4, 219, 32 + LTEXT "&Enable autodial by location:", 1006, 8, 42, 213, 8 + CONTROL "", 1004, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000C401, 7, 53, 216, 109 + AUTOCHECKBOX "Al&ways ask me before autodialing", 1496, 8, 170, 218, 9, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Disable autodial while I am logged on", 1550, 8, 185, 217, 9, BS_TOP | BS_MULTILINE +END + +147 DIALOGEX 6, 18, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE | WS_CAPTION +CAPTION "חיוג" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "These preferences apply to 'Login using Dial-Up Networking' at Ctrl-Alt-Del login. You, as an administrator, have access to this sheet.", 1007, 7, 4, 221, 40, NOT WS_GROUP + LTEXT "&Number of redial attempts:", 1005, 7, 55, 154, 8 + EDITTEXT 1001, 164, 52, 60, 14, ES_AUTOHSCROLL + LTEXT "&Seconds between redial attempts:", 1009, 7, 73, 156, 8, NOT WS_GROUP + EDITTEXT 1003, 164, 70, 60, 14, ES_AUTOHSCROLL + LTEXT "I&dle seconds before hanging up:", 1008, 7, 91, 154, 8, NOT WS_GROUP + EDITTEXT 1002, 164, 88, 60, 14, ES_AUTOHSCROLL +END + +148 DIALOGEX 6, 18, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE | WS_CAPTION +CAPTION "Callback" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "When you dial into a server, it may offer to call you back to reduce your phone charges. Specify whether you want callback. (Callback is not supported for virtual private network (VPN) connections.)", 1043, 8, 4, 219, 43 + AUTORADIOBUTTON "&No callback", 1041, 7, 48, 219, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "A&sk me during dialing when the server offers", 1040, 7, 61, 219, 10, BS_TOP | BS_MULTILINE + AUTORADIOBUTTON "Al&ways call me back at the number(s) below:", 1042, 7, 74, 219, 10, BS_TOP | BS_MULTILINE + CONTROL "", 1037, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x00008401, 16, 88, 204, 94 + PUSHBUTTON "ערוך...", 1039, 96, 190, 60, 14 + PUSHBUTTON "מחק", 1038, 159, 190, 60, 14 +END + +149 DIALOGEX 6, 18, 317, 142 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "You need to set the dial-in credentials that remote routers will use when connecting to this interface. A user account will be created on this router with the information that you enter here.", 1094, 8, 5, 307, 35 + LTEXT "שם משתמש:", 1078, 8, 47, 124, 8, NOT WS_GROUP + EDITTEXT 1074, 135, 45, 175, 12, ES_AUTOHSCROLL | WS_DISABLED + LTEXT "סיסמה:", 1077, 8, 68, 124, 8, NOT WS_GROUP + EDITTEXT 1073, 135, 66, 175, 12, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "אישור סיסמה:", 1075, 8, 90, 124, 8, NOT WS_GROUP + EDITTEXT 1071, 135, 87, 175, 12, ES_PASSWORD | ES_AUTOHSCROLL +END + +150 DIALOGEX 6, 18, 321, 144 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "You need to set the dial out credentials that this interface will use when connecting to the remote router. These credentials must match the dial in credentials configured on the remote router.", 1094, 8, 5, 308, 33 + LTEXT "שם משתמש:", 1096, 8, 43, 130, 8, NOT WS_GROUP + EDITTEXT 1091, 140, 40, 175, 12, ES_AUTOHSCROLL + LTEXT "שם מתחם:", 1093, 8, 63, 130, 8, NOT WS_GROUP + EDITTEXT 1089, 140, 60, 175, 12, ES_UPPERCASE | ES_AUTOHSCROLL + LTEXT "סיסמה:", 1095, 8, 81, 130, 8, NOT WS_GROUP + EDITTEXT 1090, 140, 78, 175, 12, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "אישור סיסמה:", 1092, 8, 99, 130, 8, NOT WS_GROUP + EDITTEXT 1088, 140, 96, 175, 12, ES_PASSWORD | ES_AUTOHSCROLL +END + +153 DIALOGEX 0, 0, 315, 140 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type a name you want for this connection:", -1, 8, 4, 190, 8 + EDITTEXT 1114, 8, 17, 190, 12, ES_AUTOHSCROLL + LTEXT "Click Finish to save it in the Network Connections folder.", -1, 8, 38, 193, 8 + LTEXT "To edit this connection later, select it, click the File menu, and then click Properties.", -1, 8, 58, 193, 16 +END + +155 DIALOGEX 0, 0, 231, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "כללי" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "התחבר באמצעות:", 1124, 7, 5, 219, 8 + CONTROL "", 1128, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x00004C0D, 7, 17, 198, 44, WS_EX_CLIENTEDGE + PUSHBUTTON "הזז למעלה", 1132, 210, 18, 16, 14, BS_ICON + PUSHBUTTON "הזז למטה", 1131, 210, 36, 16, 14, BS_ICON + AUTOCHECKBOX "A&ll devices call the same numbers", 1119, 9, 66, 133, 14, BS_TOP | BS_MULTILINE + PUSHBUTTON "C&onfigure...", 1130, 144, 66, 60, 14 + GROUPBOX "Sample type", 1125, 8, 84, 215, 100, WS_GROUP + LTEXT "Ar&ea code:", 1133, 17, 102, 52, 8 + COMBOBOX 1122, 17, 112, 52, 110, CBS_DROPDOWN | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Phone number:", 1135, 71, 102, 139, 8 + EDITTEXT 1123, 73, 112, 79, 14, ES_AUTOHSCROLL + PUSHBUTTON "Alter&nates", 1129, 154, 112, 60, 14 + LTEXT "Country/re&gion code:", 1134, 17, 132, 197, 8 + COMBOBOX 1126, 17, 143, 193, 130, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "U&se dialing rules", 1121, 17, 163, 132, 14, BS_TOP | BS_MULTILINE + PUSHBUTTON "Dialing &Rules", 1136, 151, 161, 60, 14 + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 10, 192, 214, 19, BS_TOP | BS_MULTILINE +END + +156 DIALOGEX 0, 0, 231, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "כללי" +FONT 8, "MS Shell Dlg" +BEGIN + PUSHBUTTON "C&onfigure...", 1130, 164, 38, 60, 14 + GROUPBOX "Sample text", 1125, 8, 55, 217, 100, WS_GROUP + LTEXT "Ar&ea code:", 1133, 17, 72, 48, 8 + COMBOBOX 1122, 17, 83, 48, 119, CBS_DROPDOWN | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Phone number:", 1135, 71, 72, 146, 8 + EDITTEXT 1123, 71, 83, 81, 14, ES_AUTOHSCROLL + PUSHBUTTON "Alter&nates", 1129, 155, 83, 63, 14 + LTEXT "Country/re&gion code:", 1134, 17, 103, 193, 8 + COMBOBOX 1126, 17, 114, 201, 130, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "U&se dialing rules", 1121, 19, 134, 136, 12, BS_TOP | BS_MULTILINE + PUSHBUTTON "Dialing &Rules", 1136, 157, 132, 60, 14 + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 12, 164, 209, 18, BS_TOP | BS_MULTILINE + LTEXT "Connect using:", 1124, 8, 5, 217, 8 + CONTROL "", 1127, "SYSLISTVIEW32", WS_DISABLED | WS_BORDER | 0x0000EC0D, 7, 18, 217, 15 +END + +157 DIALOGEX 6, 18, 235, 160 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Appearance" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "&Preview phone numbers before dialing", 1142, 8, 10, 224, 10, WS_GROUP + AUTOCHECKBOX "Show &location setting before dialing", 1139, 8, 27, 224, 10 + AUTOCHECKBOX "Allo&w location edits during login", 1140, 21, 43, 212, 10 + AUTOCHECKBOX "Show &connection progress while dialing", 1143, 8, 59, 224, 10 + AUTOCHECKBOX "Clo&se on dial", 1137, 8, 76, 224, 10 + AUTOCHECKBOX "All&ow phonebook edits during login", 1141, 8, 94, 224, 10 + AUTOCHECKBOX "&Use wizard to create new phonebook entries", 1144, 22, 111, 210, 10 +END + +158 DIALOGEX 6, 18, 235, 160 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Appearance" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "&Preview phone numbers before dialing", 1142, 8, 10, 223, 10, WS_GROUP + AUTOCHECKBOX "Show &location setting before dialing", 1139, 8, 27, 206, 10 + AUTOCHECKBOX "Start dial-up networking &monitor before dialing", 1138, 8, 44, 226, 10 + AUTOCHECKBOX "Show &connection progress while dialing", 1143, 8, 61, 224, 10 + AUTOCHECKBOX "Clo&se on dial", 1137, 8, 79, 220, 10 + AUTOCHECKBOX "&Use wizard to create new phonebook entries", 1144, 8, 97, 220, 10 + AUTOCHECKBOX "Always prompt &before auto-dialing", 1136, 8, 114, 220, 10 +END + +160 DIALOGEX 6, 18, 320, 145 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CHILD | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select a name for this demand dial interface. A common practice is to name interfaces after the network or router to which they connect.", 1158, 7, 5, 309, 29 + LTEXT "&Interface name:", 1159, 17, 41, 285, 8, NOT WS_GROUP + EDITTEXT 1157, 17, 53, 284, 12, ES_AUTOHSCROLL + AUTOCHECKBOX "I &know all about demand-dial interfaces and would rather edit the properties directly", 1156, 24, 100, 258, 31, BS_TOP | BS_MULTILINE | NOT WS_VISIBLE | WS_DISABLED +END + +162 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Security" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Security options", 1580, 8, 3, 215, 139 + AUTORADIOBUTTON "&Typical (recommended settings)", 1540, 14, 16, 201, 9, BS_NOTIFY | WS_GROUP + AUTORADIOBUTTON "A&dvanced (custom settings)", 1541, 14, 102, 198, 8, BS_NOTIFY + LTEXT "&Validate my identity as follows:", 1537, 26, 29, 187, 8, NOT WS_GROUP + COMBOBOX 1178, 26, 40, 184, 78, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "A&utomatically use my ReactOS logon name and password (and domain if any)", 1174, 26, 58, 184, 20, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Requ&ire data encryption (disconnect if none)", 1169, 26, 82, 183, 10, BS_TOP | BS_MULTILINE + LTEXT "Using these settings requires a knowledge of security protocols.", 1539, 15, 114, 134, 20 + PUSHBUTTON "&Settings...", 1180, 151, 115, 60, 14 + GROUPBOX "Interactive logon and scripting", 1177, 8, 146, 215, 62, WS_GROUP + AUTOCHECKBOX "S&how terminal window", 1173, 14, 159, 198, 11, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Run script:", 1172, 14, 172, 57, 10, BS_TOP | BS_MULTILINE + COMBOBOX 1179, 72, 171, 140, 104, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "&Edit...", 1182, 87, 187, 60, 14 + PUSHBUTTON "&Browse...", 1181, 151, 187, 60, 14 +END + +163 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "You have more than one dial-up device on your computer.", -1, 6, 3, 307, 13 + LTEXT "&Select the devices to use in this connection:", -1, 6, 15, 307, 11 + CONTROL "", 1228, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C415, 7, 28, 304, 77 +END + +165 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Networking" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Typ&e of dial-up server I am calling:", 1583, 7, 4, 219, 8 + COMBOBOX 1418, 7, 17, 215, 46, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "&Settings", 1419, 160, 35, 60, 14 + LTEXT "This c&onnection uses the following items:", 1684, 8, 64, 219, 10 + CONTROL "", 1251, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C40D, 7, 75, 216, 53 + PUSHBUTTON "I&nstall...", 1252, 7, 133, 67, 14 + PUSHBUTTON "&Uninstall", 1254, 80, 133, 67, 14 + PUSHBUTTON "P&roperties", 1253, 153, 133, 67, 14 + GROUPBOX "Description", 1585, 9, 158, 213, 43 + LTEXT "", 1250, 18, 167, 195, 25 +END + +166 DIALOGEX 6, 18, 320, 145 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Enter the IP address of a DNS or WINS server on the remote network, or leave as 0.0.0.0 if you expect the remote router to provide them, or do not know.", 1275, 7, 2, 311, 25 + LTEXT "&DNS server:", 1274, 7, 29, 160, 8, NOT WS_GROUP + CONTROL "", 1272, "RASIPADDRESS", WS_TABSTOP, 21, 41, 85, 12 + LTEXT "&WINS server:", 1276, 7, 65, 166, 8, NOT WS_GROUP + CONTROL "", 1273, "RASIPADDRESS", WS_TABSTOP, 21, 77, 85, 12 +END + +167 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Options" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Dialing options", 1289, 7, 2, 213, 64 + AUTOCHECKBOX "&Display progress while connecting", 1284, 16, 14, 201, 10 + AUTOCHECKBOX "&Prompt for name and password, certificate, etc.", 1554, 16, 27, 201, 10 + AUTOCHECKBOX "Include &ReactOS logon domain", 1555, 16, 39, 201, 10 + AUTOCHECKBOX "Prompt for phone &number", 1285, 16, 52, 200, 10, BS_TOP | BS_MULTILINE + GROUPBOX "Redialing options", 1290, 6, 72, 213, 79 + LTEXT "&Redial attempts:", 1300, 16, 87, 123, 8 + EDITTEXT 1287, 141, 84, 69, 14, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "&Time between redial attempts:", 1301, 16, 103, 123, 8 + COMBOBOX 1292, 141, 101, 70, 123, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Idle ti&me before hanging up:", 1299, 16, 120, 123, 8 + COMBOBOX 1291, 141, 116, 70, 108, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "Redial if &line is dropped", 1286, 16, 136, 199, 10, BS_TOP | BS_MULTILINE + GROUPBOX "Multiple devices", 1288, 7, 156, 213, 32 + COMBOBOX 1551, 16, 169, 128, 45, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "C&onfigure...", 1293, 150, 168, 60, 14 + PUSHBUTTON "&X.25", 1295, 7, 194, 50, 14 + PUSHBUTTON "&Virtual ""tunnel"" connection", 1294, 62, 194, 120, 14, NOT WS_VISIBLE | WS_DISABLED +END + +168 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type the phone number below. ", -1, 7, 4, 306, 14 + LTEXT "&Phone number:", 1308, 7, 19, 130, 8 + EDITTEXT 1304, 7, 30, 304, 14, ES_AUTOHSCROLL + LTEXT "You might need to include a ""1"" or the area code, or both. If you are not sure you need the extra numbers, dial the phone number on your telephone. If you hear a modem sound, the number dialed is correct.", -1, 20, 50, 291, 53 +END + +169 DIALOGEX 6, 18, 235, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Phonebook" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Use this phonebook:", 1326, 8, 8, 222, 8 + AUTORADIOBUTTON "The &system phonebook", 1325, 14, 22, 216, 10, WS_GROUP + AUTORADIOBUTTON "My &personal phonebook", 1324, 14, 34, 216, 10 + AUTORADIOBUTTON "This a<ernate phonebook:", 1323, 14, 46, 217, 10 + COMBOBOX 1321, 26, 61, 201, 77, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_GROUP | NOT WS_TABSTOP + PUSHBUTTON "&Browse...", 1322, 167, 81, 60, 14 +END + +170 DIALOGEX 6, 18, 235, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Phonebook" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Use this phonebook:", 1326, 8, 8, 223, 8 + AUTORADIOBUTTON "The &system phonebook", 1325, 14, 22, 217, 10, WS_GROUP + AUTORADIOBUTTON "This a<ernate phonebook:", 1323, 14, 36, 216, 10 + COMBOBOX 1321, 26, 51, 203, 77, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_GROUP | NOT WS_TABSTOP + PUSHBUTTON "&Browse...", 1322, 169, 69, 60, 14 +END + +171 DIALOGEX 6, 18, 317, 144 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Enter this router's IP address on the remote network or if you expect the remote router to provide the address, leave as 0.0.0.0. Usually the operator of the remote network or router will tell you what to use.", 1331, 5, 4, 308, 35 + LTEXT "My &IP address:", 1332, 4, 51, 100, 8, NOT WS_GROUP + CONTROL "", 1330, "RASIPADDRESS", WS_TABSTOP, 21, 62, 104, 12 + LTEXT "Note: If you have a network adapter installed, you should NOT choose the same address as your network adapter.", 1333, 5, 94, 306, 36, NOT WS_GROUP +END + +172 DIALOGEX 6, 18, 317, 144 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Some dial-up servers and routers require an interactive login after connecting. You can run a script automatically to respond for you.", 1339, 5, 3, 309, 27 + AUTOCHECKBOX "Show &terminal window", 1462, 15, 31, 162, 10 + AUTOCHECKBOX "&Run script:", 1463, 15, 45, 58, 10 + COMBOBOX 1334, 30, 60, 275, 88, CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "&Edit...", 1335, 180, 77, 60, 14 + PUSHBUTTON "&Browse...", 1465, 244, 77, 60, 14 +END + +173 DIALOGEX 6, 18, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE | WS_CAPTION +CAPTION "Dialing" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Dialing policy", 1344, 9, 4, 213, 53, WS_GROUP + LTEXT "&Number of redial attempts:", 1349, 16, 22, 140, 8, NOT WS_GROUP + EDITTEXT 1340, 158, 19, 56, 14, ES_AUTOHSCROLL + LTEXT "&Seconds between redial attempts:", 1351, 16, 38, 140, 8, NOT WS_GROUP + EDITTEXT 1342, 158, 36, 56, 14, ES_AUTOHSCROLL + GROUPBOX "Connection type", 1343, 9, 63, 213, 56, WS_GROUP + LTEXT "Idl&e seconds before hanging up:", 1350, 28, 88, 124, 8, NOT WS_GROUP + AUTORADIOBUTTON "&Demand dial connection", 1347, 16, 78, 135, 10, WS_GROUP + AUTORADIOBUTTON "&Persistent connection", 1348, 16, 103, 199, 10, NOT WS_TABSTOP, WS_EX_TRANSPARENT + EDITTEXT 1341, 159, 85, 56, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Callback...", 1345, 150, 125, 70, 14, WS_GROUP + PUSHBUTTON "&Multiple Lines...", 1346, 74, 125, 70, 14 +END + +174 DIALOGEX 0, 0, 215, 226 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Router" +FONT 8, "MS Shell Dlg" +BEGIN + CTEXT "NYI...need spec from KCrocker", -1, 57, 86, 106, 28 +END + +175 DIALOGEX 6, 18, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Completing the demand dial interface wizard.", 1352, 122, 5, 192, 32 + LTEXT "To create this interface and enable it on the router, click Finish.", 1354, 122, 41, 192, 26, NOT WS_GROUP + LTEXT "To edit this interface in the Routing and RemoteAccess Manager, select it in Routing Interfaces and press Properties.", 1355, 122, 68, 190, 39, NOT WS_GROUP +END + +179 DIALOGEX 6, 18, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the &modem or adapter this interface will use.", 1356, 7, 4, 306, 11 + CONTROL "", 1355, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C415, 6, 15, 305, 80 + LTEXT "The list shows devices set up for routing.", 1357, 15, 98, 288, 37, NOT WS_GROUP +END + +180 DIALOGEX 6, 18, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Enter the phone number of the dial-up server or router you are calling. Alternate phone numbers, if any, are dialed automatically if the primary number cannot be reached.", 1360, 7, 4, 305, 42 + LTEXT "&Phone number or address:", 1361, 7, 50, 275, 8, NOT WS_GROUP + EDITTEXT 1358, 7, 62, 304, 14, ES_AUTOHSCROLL + PUSHBUTTON "Alternates...", 1359, 250, 80, 60, 14 +END + +181 DIALOGEX 6, 18, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE | WS_CAPTION +CAPTION "Security" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Authentication and encryption policy", 1367, 6, 8, 216, 103, WS_GROUP + AUTORADIOBUTTON "A&ccept any authentication including clear text", 1370, 16, 20, 195, 10, BS_TOP | BS_MULTILINE + AUTORADIOBUTTON "Acc&ept only encrypted authentication", 1373, 16, 36, 195, 10, BS_TOP | BS_MULTILINE + AUTORADIOBUTTON "Accept &only MS encrypted authentication", 1374, 16, 52, 195, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Require data encryption", 1363, 27, 65, 184, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTOCHECKBOX "Require &strong data encryption", 1364, 41, 80, 172, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Use t&wo-way authentication", 1362, 17, 95, 194, 10, BS_TOP | BS_MULTILINE + PUSHBUTTON "&Unsave Password", 1369, 59, 117, 80, 14, WS_GROUP + PUSHBUTTON "Ad&vanced...", 1368, 142, 117, 80, 14, NOT WS_VISIBLE | WS_DISABLED + AUTOCHECKBOX "&Detect file and print sharing before dialing", 1365, 7, 198, 218, 10, BS_TOP | BS_MULTILINE | NOT WS_VISIBLE | WS_DISABLED +END + +182 DIALOGEX 6, 18, 248, 148 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Security" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Authentication and encryption policy", 1367, 7, 8, 200, 98, WS_GROUP + AUTORADIOBUTTON "Accept any authentication including &clear text", 1370, 14, 24, 183, 10 + AUTORADIOBUTTON "Accept only &encrypted authentication", 1373, 14, 39, 183, 10 + AUTORADIOBUTTON "Accept only &MS encrypted authentication", 1374, 14, 53, 184, 10 + AUTOCHECKBOX "Require &data encryption", 1363, 33, 67, 165, 10, WS_GROUP + AUTOCHECKBOX "Require &strong data encryption", 1364, 48, 79, 152, 10 + AUTOCHECKBOX "&Use current username and password ", 1366, 31, 91, 165, 10 + PUSHBUTTON "Unsave &password", 1369, 6, 114, 100, 14, WS_GROUP + PUSHBUTTON "&Advanced...", 1368, 109, 114, 60, 14, NOT WS_VISIBLE | WS_DISABLED + AUTOCHECKBOX "Detect &file and print sharing before dialing", 1365, 14, 134, 193, 10, NOT WS_VISIBLE | WS_DISABLED +END + +183 DIALOGEX 6, 18, 317, 144 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Check all that apply:", 1388, 7, 4, 296, 9 + AUTOCHECKBOX "Route &IP packets on this interface.", 1386, 20, 19, 285, 11, BS_LEFT | BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Route IP&X packets on this interface.", 1387, 20, 35, 287, 11, BS_LEFT | BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Add a user account so a remote router can dial in.", 1382, 20, 52, 287, 11, BS_LEFT | BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Send a &plain-text password if that is the only way to connect.", 1385, 20, 70, 287, 11, BS_LEFT | BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Use scripting to complete the connection with the remote router.", 1384, 20, 87, 289, 22, BS_LEFT | BS_TOP | BS_MULTILINE +END + +184 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED +FONT 8, "MS Shell Dlg" +BEGIN +END + +186 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "A connection that is created for your use only is saved in your user account and is not available unless you are logged on.", -1, 7, 4, 306, 23 + LTEXT "Create this connection for:", -1, 14, 27, 288, 12 + AUTORADIOBUTTON "&Anyone's use", 1400, 26, 40, 265, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + AUTORADIOBUTTON "&My use only", 1401, 26, 55, 265, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP +END + +498 DIALOGEX 12, 16, 215, 126 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS was unable to connect to the network using the user name and password you provided. Please re-enter the user name and password.", 1396, 7, 6, 206, 36 + LTEXT "&User name:", 1399, 8, 51, 49, 8 + EDITTEXT 1394, 66, 46, 143, 14, ES_AUTOHSCROLL + LTEXT "&Password:", 1397, 8, 70, 49, 8, NOT WS_GROUP + EDITTEXT 1393, 66, 64, 143, 14, ES_PASSWORD | ES_AUTOHSCROLL + AUTOCHECKBOX "&Save password", 1391, 66, 84, 143, 10 + CONTROL "", 1398, "STATIC", SS_ETCHEDHORZ | WS_GROUP, 7, 98, 200, 1 + DEFPUSHBUTTON "OK", 1, 81, 104, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 145, 104, 60, 14 +END + +500 DIALOGEX 12, 16, 215, 173 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS was unable to connect to the network using the user name and password you provided. Please re-enter the user name and password.", 1396, 7, 6, 209, 26 + LTEXT "&User name:", 1399, 7, 72, 44, 8 + EDITTEXT 1394, 97, 69, 115, 14, ES_AUTOHSCROLL + LTEXT "&Password:", 1397, 7, 90, 45, 8, NOT WS_GROUP + EDITTEXT 1393, 97, 87, 115, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Domain:", 1395, 7, 108, 53, 8, NOT WS_GROUP + EDITTEXT 1392, 97, 105, 115, 14, ES_UPPERCASE | ES_AUTOHSCROLL + AUTOCHECKBOX "&Save user name and password", 1391, 85, 125, 123, 10, BS_TOP | BS_MULTILINE + DEFPUSHBUTTON "OK", 1, 87, 146, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 151, 146, 60, 14 + CONTROL "", 1398, "STATIC", SS_ETCHEDHORZ | WS_GROUP, 7, 140, 205, 1 + LTEXT "You can enter a domain name or leave the domain field empty.\n(Domain names are not required for connections to the Internet)", -1, 8, 38, 209, 26 +END + +502 DIALOGEX 20, 60, 215, 73 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "PPP Settings" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "&Enable LCP extensions", 1423, 9, 7, 200, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "E&nable software compression", 1424, 9, 22, 201, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Negotiate &multi-link for single link connections", 1557, 9, 37, 202, 10, BS_TOP | BS_MULTILINE + DEFPUSHBUTTON "OK", 1, 82, 53, 60, 14 + PUSHBUTTON "Cancel", 2, 148, 53, 60, 14 +END + +509 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Choose the role you want for this computer:", -1, 10, 5, 275, 9 + AUTORADIOBUTTON "&Host", 1483, 31, 20, 265, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Guest", 1484, 31, 44, 265, 10, BS_TOP | BS_MULTILINE + LTEXT "This computer has the information you want to access.", -1, 45, 31, 253, 13, NOT WS_GROUP | WS_TABSTOP + LTEXT "This computer is used to access information on the host computer.", -1, 43, 56, 253, 23, NOT WS_GROUP +END + +511 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a device:", -1, 8, 5, 261, 8 + COMBOBOX 1485, 9, 18, 302, 62, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP +END + +528 DIALOGEX 0, 0, 227, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Connections" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Logon privileges", 1582, 8, 10, 213, 63 + LTEXT "Non-administrators may be allowed to create or modify connections before logging on.", 1581, 16, 21, 194, 30 + AUTOCHECKBOX "Allo&w creating and modifying connections before logon", 1497, 16, 56, 195, 10, BS_TOP | BS_MULTILINE +END + +532 DIALOGEX 0, 0, 263, 263 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Router Callback" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "When you dial into a router, it may offer to call you back to reduce your phone charges or to increase security. Specify whether you want callback or not.", 1043, 7, 5, 253, 24 + AUTORADIOBUTTON "&No callback", 1501, 9, 36, 252, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Al&ways call me back at the number(s) below:", 1502, 9, 48, 252, 10, BS_TOP | BS_MULTILINE, WS_EX_TRANSPARENT + CONTROL "", 1503, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x00008401, 15, 63, 240, 143 + PUSHBUTTON "&Edit...", 1504, 131, 213, 60, 14 + PUSHBUTTON "&Delete", 1505, 194, 213, 60, 14 + CONTROL "", -1, "STATIC", SS_ETCHEDHORZ, 7, 233, 249, 1 + DEFPUSHBUTTON "OK", 1, 132, 242, 60, 14 + PUSHBUTTON "Cancel", 2, 196, 242, 60, 14 +END + +534 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Options" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Connection type", 1289, 7, 7, 215, 55 + AUTORADIOBUTTON "&Demand dial", 1506, 16, 20, 199, 9, BS_TOP | BS_MULTILINE | WS_GROUP | NOT WS_TABSTOP + LTEXT "Idle ti&me before hanging up:", 1299, 27, 33, 99, 8, NOT WS_GROUP + COMBOBOX 1291, 144, 30, 70, 108, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + AUTORADIOBUTTON "&Persistent connection", 1507, 16, 47, 197, 9, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + GROUPBOX "Dialing policy", 1290, 7, 66, 215, 48 + LTEXT "&Redial attempts:", 1300, 14, 79, 123, 8 + EDITTEXT 1287, 143, 76, 70, 14, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "A&verage redial intervals:", 1301, 14, 96, 123, 8 + COMBOBOX 1292, 143, 94, 70, 123, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "Multiple devices", 1288, 7, 116, 215, 35 + COMBOBOX 1551, 16, 130, 128, 41, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "C&onfigure...", 1293, 150, 129, 65, 14 + PUSHBUTTON "Call&back", 1302, 8, 195, 60, 14 + PUSHBUTTON "&X.25", 1295, 73, 195, 50, 14 +END + +539 DIALOGEX 0, 0, 265, 110 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 14, 64, 84, 8 + EDITTEXT 1104, 102, 62, 154, 14, ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 9, 82, 247, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 89, 60, 14 + PUSHBUTTON "Cancel", 1591, 71, 89, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 133, 89, 60, 14 + PUSHBUTTON "&Help", 1592, 195, 89, 60, 14 +END + +540 DIALOGEX 0, 0, 265, 133 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 10, 64, 90, 8 + EDITTEXT 1104, 105, 60, 154, 14, ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 7, 80, 252, 1 + LTEXT "D&ial:", 1412, 10, 91, 92, 10 + COMBOBOX 1416, 105, 88, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 7, 107, 251, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 113, 60, 14 + PUSHBUTTON "Cancel", 1591, 71, 113, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 134, 113, 60, 14 + PUSHBUTTON "&Help", 1592, 197, 113, 60, 14 +END + +541 DIALOGEX 0, 0, 265, 157 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 12, 67, 87, 8 + EDITTEXT 1104, 103, 63, 154, 14, ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 9, 84, 248, 1 + LTEXT "D&ial:", 1412, 11, 96, 48, 8 + COMBOBOX 1416, 103, 92, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Dialing &from:", 1415, 10, 114, 46, 8 + COMBOBOX 1414, 102, 110, 87, 112, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "Dialing &Rules", 1108, 193, 110, 64, 14 + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 7, 130, 250, 1 + DEFPUSHBUTTON "&Dial", 1590, 6, 136, 60, 14 + PUSHBUTTON "Cancel", 1591, 69, 136, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 132, 136, 60, 14 + PUSHBUTTON "&Help", 1592, 196, 136, 60, 14 +END + +544 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Internet Connection Sharing allows other computers on your local network to access external resources through this connection.", -1, 10, 5, 300, 22 + AUTOCHECKBOX "&Enable Internet Connection Sharing for this connection", 1512, 21, 31, 272, 10 + LTEXT "To dial this connection automatically when a computer on your local network attempts to access external resources, select the following check box.", 1514, 10, 56, 294, 22 + AUTOCHECKBOX "Enab&le on-demand dialing", 1513, 21, 86, 260, 10 +END + +545 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Shared access allows other computers on your local network to access external resources through this dial-up connection. You can enable shared access for one connection and one local network at a time.", -1, 10, 5, 300, 25 + LTEXT "&Select the local network that will access resources through this connection:", -1, 21, 35, 285, 8 + COMBOBOX 1522, 21, 48, 231, 56, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP +END + +546 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "You can configure this connection to use your smart card to log you into the remote network. Select whether to use your smart card with this connection.", -1, 10, 5, 303, 22 + AUTORADIOBUTTON "&Use my smart card ", 1524, 26, 29, 264, 12, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP | NOT WS_TABSTOP + AUTORADIOBUTTON "&Do not use my smart card ", 1525, 26, 44, 261, 16, BS_LEFT | BS_TOP | BS_MULTILINE | NOT WS_TABSTOP +END + +547 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "Demand Dial Interface Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Welcome to the Demand Dial Interface Wizard.", 1530, 122, 8, 192, 32 + LTEXT "Using this wizard you can create a demand dial interface to connect this router to other routers.", 1531, 122, 43, 192, 37 + LTEXT "Press Next to continue.", 1532, 122, 85, 191, 29 +END + +548 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + AUTORADIOBUTTON "Connect using a &modem, ISDN adapter, or other physical device.", 1531, 21, 17, 290, 15, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP | NOT WS_TABSTOP + AUTORADIOBUTTON "Connect using &virtual private networking (VPN)", 1532, 21, 38, 291, 15, BS_LEFT | BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + AUTORADIOBUTTON "Connect using PPP over Ethernet (PPPoE)", 1688, 21, 58, 290, 12, NOT WS_TABSTOP +END + +550 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CHILD | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Enter the name or IP address of the router to which you are connecting.", 1535, 10, 8, 289, 18 + LTEXT "&Host name or IP address (such as reactos.org or 145.52.0.1):", 1537, 21, 35, 285, 8 + EDITTEXT 1536, 21, 47, 285, 14, ES_AUTOHSCROLL +END + +551 DIALOGEX 0, 0, 265, 127 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 12, 62, 89, 8 + EDITTEXT 1104, 104, 58, 154, 14, ES_AUTOHSCROLL + LTEXT "Do&main:", 1110, 12, 82, 90, 8 + EDITTEXT 1102, 104, 79, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 99, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 9, 106, 61, 14 + PUSHBUTTON "Cancel", 1591, 72, 106, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 135, 106, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 106, 60, 14 +END + +552 DIALOGEX 0, 0, 265, 159 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 10, 67, 91, 10 + EDITTEXT 1104, 104, 64, 154, 14, ES_AUTOHSCROLL + LTEXT "Do&main:", 1110, 11, 86, 91, 8 + EDITTEXT 1102, 104, 83, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 103, 248, 1 + LTEXT "D&ial:", 1412, 10, 115, 91, 8 + COMBOBOX 1416, 104, 111, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 132, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 139, 60, 14 + PUSHBUTTON "Cancel", 1591, 71, 139, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 134, 139, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 139, 60, 14 +END + +553 DIALOGEX 0, 0, 265, 183 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 10, 68, 92, 10 + EDITTEXT 1104, 104, 65, 154, 14, ES_AUTOHSCROLL + LTEXT "Do&main:", 1110, 10, 90, 91, 8 + EDITTEXT 1102, 104, 86, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 106, 248, 1 + LTEXT "D&ial:", 1412, 10, 118, 92, 8 + COMBOBOX 1416, 104, 114, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Dialing &from:", 1415, 10, 137, 91, 8 + COMBOBOX 1414, 104, 134, 87, 112, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "Dialing &Rules", 1108, 194, 134, 65, 14 + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 154, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 162, 60, 14 + PUSHBUTTON "Cancel", 1591, 71, 162, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 134, 162, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 162, 60, 14 +END + +554 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Connec&t using:", 1124, 7, 4, 193, 8 + CONTROL "", 1128, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x00004C0D, 7, 17, 195, 44, WS_EX_CLIENTEDGE + PUSHBUTTON "&Up", 1132, 208, 18, 16, 14, BS_ICON + PUSHBUTTON "&Down", 1131, 208, 36, 16, 14, BS_ICON + AUTOCHECKBOX "A&ll devices call the same numbers", 1119, 7, 65, 131, 21, BS_TOP | BS_MULTILINE + PUSHBUTTON "C&onfigure...", 1130, 140, 66, 60, 14 + GROUPBOX "Sample type", 1125, 7, 87, 213, 56, WS_GROUP + LTEXT "&Phone number:", 1135, 19, 102, 191, 8 + EDITTEXT 1123, 17, 112, 138, 14, ES_AUTOHSCROLL + PUSHBUTTON "Alter&nates", 1129, 161, 112, 50, 14 + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 11, 194, 212, 20, BS_TOP | BS_MULTILINE +END + +555 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + PUSHBUTTON "C&onfigure...", 1130, 160, 38, 60, 14 + LTEXT "&Phone number:", 1135, 8, 72, 194, 8 + EDITTEXT 1123, 8, 83, 148, 14, ES_AUTOHSCROLL + PUSHBUTTON "Alter&nates", 1129, 160, 83, 60, 14 + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 11, 194, 213, 10, BS_TOP | BS_MULTILINE + LTEXT "Connec&t using:", 1124, 8, 5, 214, 8 + CONTROL "", 1127, "SYSLISTVIEW32", WS_DISABLED | WS_BORDER | 0x0000EC0D, 7, 18, 214, 15 +END + +556 DIALOGEX 0, 0, 220, 165 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Program Settings" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Description of program running on your network:", -1, 7, 5, 203, 8 + EDITTEXT 1565, 7, 17, 206, 14, ES_AUTOHSCROLL + LTEXT "&Internet server port number:", -1, 7, 35, 202, 8 + EDITTEXT 1566, 7, 47, 113, 14, ES_AUTOHSCROLL | ES_NUMBER + AUTORADIOBUTTON "&TCP", 1548, 128, 49, 30, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "&UDP", 1567, 166, 49, 31, 10, NOT WS_TABSTOP + LTEXT "&Listen for Internet server responses on port or port range:\n(for example: 1024-1209, 1300-1310, 1450)", -1, 7, 70, 207, 22 + LTEXT "T&CP:", -1, 7, 100, 28, 8 + EDITTEXT 1569, 50, 97, 162, 14, ES_AUTOHSCROLL + LTEXT "UD&P:", -1, 7, 121, 30, 8 + EDITTEXT 1551, 51, 117, 162, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 90, 144, 60, 14 + PUSHBUTTON "Cancel", 2, 154, 144, 60, 14 +END + +557 DIALOGEX 0, 0, 217, 164 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Service Settings" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Description of service:", -1, 7, 5, 203, 8 + EDITTEXT 1552, 7, 18, 205, 14, ES_AUTOHSCROLL + LTEXT "&Name or IP address (for example 192.168.0.12) of the computer hosting this service on your network:", -1, 7, 37, 208, 16 + EDITTEXT 1556, 7, 57, 203, 14, ES_AUTOHSCROLL + LTEXT "&Port number where this service resides:", -1, 7, 85, 203, 8 + EDITTEXT 1553, 7, 97, 113, 14, ES_AUTOHSCROLL | ES_NUMBER + AUTORADIOBUTTON "&TCP", 1554, 128, 99, 30, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "&UDP", 1555, 166, 99, 31, 10, NOT WS_TABSTOP + DEFPUSHBUTTON "OK", 1, 86, 143, 60, 14 + PUSHBUTTON "Cancel", 2, 150, 143, 60, 14 +END + +558 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Programs" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "The Internet connection on this computer has been customized to allow the following programs to run properly over your network:", -1, 7, 7, 218, 28 + CONTROL "List1", 1558, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000441D, 7, 37, 215, 155, WS_EX_CLIENTEDGE + PUSHBUTTON "A&dd...", 1538, 7, 197, 67, 14 + PUSHBUTTON "Edi&t...", 1559, 80, 197, 67, 14 + PUSHBUTTON "D&elete", 1568, 153, 197, 67, 14 +END + +559 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Services" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select the services running on your network that Internet users can access.", -1, 7, 5, 216, 22 + LTEXT "Services:", -1, 7, 27, 143, 8 + CONTROL "List1", 1560, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000441D, 7, 37, 215, 155, WS_EX_CLIENTEDGE + PUSHBUTTON "A&dd...", 1561, 7, 197, 67, 14 + PUSHBUTTON "Edi&t...", 1563, 80, 197, 67, 14 + PUSHBUTTON "D&elete", 1562, 153, 197, 67, 14 +END + +560 DIALOGEX 6, 18, 240, 88 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Initial Connection" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", 6, 68, 68, 50, 14 + PUSHBUTTON "&No", 7, 125, 68, 50, 14 + ICON 32516, 1575, 7, 7, 20, 20 + LTEXT "", 1576, 40, 7, 190, 33 + AUTOCHECKBOX "&Don't display this reminder again", 1579, 40, 48, 192, 11, BS_TOP | BS_MULTILINE +END + +567 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type the name of your service in the following text box. If you leave the text box blank, ReactOS will automatically detect and configure your service when you connect.", -1, 10, 7, 301, 25 + LTEXT "&Service name (optional):", -1, 22, 32, 229, 8 + EDITTEXT 1593, 22, 44, 275, 14, ES_AUTOHSCROLL +END + +568 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Service name:", 1686, 7, 5, 217, 10 + EDITTEXT 1594, 7, 17, 217, 14, ES_AUTOHSCROLL + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 9, 196, 215, 8 +END + +569 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Security" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Security options", 1580, 8, 4, 213, 151 + AUTORADIOBUTTON "&Typical (recommended settings)", 1540, 14, 16, 197, 9, BS_NOTIFY | WS_GROUP + AUTORADIOBUTTON "A&dvanced (custom settings)", 1541, 14, 100, 197, 8, BS_NOTIFY + LTEXT "&Validate my identity as follows:", 1537, 26, 29, 183, 8, NOT WS_GROUP + COMBOBOX 1178, 26, 40, 184, 78, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "A&utomatically use my ReactOS logon name and password (and domain if any)", 1174, 26, 59, 182, 20, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Requ&ire data encryption (disconnect if none)", 1169, 26, 83, 182, 10, BS_TOP | BS_MULTILINE + LTEXT "Using these settings requires a knowledge of security protocols.", 1539, 26, 111, 136, 20 + PUSHBUTTON "&Settings...", 1180, 151, 134, 60, 14 + PUSHBUTTON "I&PSec Settings...", 1598, 126, 163, 85, 14 +END + +570 DIALOGEX 0, 0, 265, 126 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "IPSec Settings" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 151, 104, 50, 14 + PUSHBUTTON "Cancel", 2, 207, 104, 50, 14 + AUTOCHECKBOX "&Use pre-shared key for authentication", 1604, 21, 15, 217, 10 + LTEXT "&Key:", 1602, 20, 31, 44, 12 + EDITTEXT 1605, 66, 30, 172, 12, ES_AUTOHSCROLL + AUTOCHECKBOX "Allow certificiates from my user store in addition to machine certificates", 1606, 20, 50, 242, 13, WS_DISABLED + AUTOCHECKBOX "Use a specific certificate", 1607, 20, 67, 239, 10, WS_DISABLED + PUSHBUTTON "Select", 1608, 31, 84, 50, 14, WS_DISABLED + COMBOBOX 1610, 91, 84, 135, 30, CBS_DROPDOWN | CBS_SORT | WS_DISABLED | WS_VSCROLL | NOT WS_TABSTOP +END + +571 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Security Logging" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Logging Options:", -1, 6, 8, 216, 47 + AUTOCHECKBOX "Log unsuccessful &inbound connection attempts", 1642, 14, 22, 201, 10 + AUTOCHECKBOX "Log successful &outbound connections", 1641, 14, 37, 200, 10 + GROUPBOX "Log file options:", -1, 7, 64, 215, 91 + LTEXT "&Name:", -1, 14, 78, 199, 8 + EDITTEXT 1674, 14, 90, 199, 14, ES_READONLY + PUSHBUTTON "&Browse...", 1639, 153, 108, 60, 14 + LTEXT "&Size limit:", -1, 14, 133, 67, 8 + EDITTEXT 1640, 86, 130, 50, 14, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "KB", -1, 140, 133, 20, 8 + PUSHBUTTON "&Restore Defaults", 1643, 135, 197, 85, 14 +END + +572 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "ICMP" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Internet Control Message Protocol (ICMP) allows the computers on a network to share error and status information. Select the requests for information from the Internet that this computer will respond to:", -1, 7, 5, 215, 37 + CONTROL "IList1", 1644, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000440D, 7, 45, 215, 100, WS_EX_CLIENTEDGE + GROUPBOX "Description:", -1, 7, 153, 215, 55 + LTEXT "", 1645, 14, 171, 199, 32 +END + +574 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Advanced" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", 575, 7, 60, 213, 100 +END + +577 DIALOGEX 0, 0, 312, 144 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type the name of the ISP in the following text box.", 1681, 10, 3, 296, 11 + LTEXT "N&ame:", 1690, 18, 20, 127, 10 + EDITTEXT 1680, 17, 32, 222, 14, ES_AUTOHSCROLL + LTEXT "The name you type here will be the name of the connection you are creating.", 1683, 17, 52, 282, 42 +END + +580 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CHILD | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + AUTORADIOBUTTON "&Automatic selection", 1534, 21, 20, 288, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP | NOT WS_TABSTOP + AUTORADIOBUTTON "&Point to Point Tunneling Protocol (PPTP)", 1532, 21, 39, 290, 11, BS_LEFT | BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + AUTORADIOBUTTON "&Layer 2 Tunneling Protocol (L2TP)", 1533, 21, 56, 286, 11, BS_LEFT | BS_TOP | BS_MULTILINE | NOT WS_TABSTOP +END + +1420 DIALOGEX 0, 0, 265, 108 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "D&ial:", 1412, 14, 63, 86, 8 + COMBOBOX 1416, 104, 60, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 80, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 9, 87, 60, 14 + PUSHBUTTON "Cancel", 1591, 72, 87, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 135, 87, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 87, 60, 14 +END + +1421 DIALOGEX 0, 0, 265, 223 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 10, 61, 90, 8 + EDITTEXT 1104, 104, 58, 154, 14, ES_AUTOHSCROLL + LTEXT "&Password:", 1112, 11, 81, 90, 8 + EDITTEXT 1103, 104, 77, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 10, 98, 248, 1 + AUTOCHECKBOX "&Save this user name and password for the following users:", 1101, 14, 105, 242, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Me o&nly", 1622, 26, 119, 225, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Anyone who uses this computer", 1623, 26, 133, 225, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 149, 248, 1 + LTEXT "D&ial:", 1412, 14, 161, 87, 8 + COMBOBOX 1416, 104, 157, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Dialing &from:", 1415, 14, 178, 88, 8 + COMBOBOX 1414, 104, 175, 87, 112, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "Dialing &Rules", 1108, 193, 175, 65, 14 + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 196, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 9, 202, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 1591, 72, 202, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 135, 202, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 202, 60, 14 +END + +1422 DIALOGEX 0, 0, 265, 242 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 10, 67, 91, 8 + EDITTEXT 1104, 104, 63, 154, 14, ES_AUTOHSCROLL + LTEXT "&Password:", 1112, 10, 85, 92, 8 + EDITTEXT 1103, 104, 82, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "Do&main:", 1110, 10, 104, 92, 8 + EDITTEXT 1102, 104, 101, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 10, 121, 248, 1 + AUTOCHECKBOX "&Save this user name and password for the following users:", 1101, 12, 127, 242, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Me o&nly", 1622, 24, 141, 227, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Anyone who uses this computer", 1623, 24, 155, 230, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 170, 248, 1 + LTEXT "D&ial:", 1412, 14, 182, 87, 8 + COMBOBOX 1416, 104, 178, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Dialing &from:", 1415, 14, 198, 87, 8 + COMBOBOX 1414, 104, 195, 87, 112, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "Dialing &Rules", 1108, 193, 195, 65, 14 + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 215, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 221, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 1591, 71, 221, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 134, 221, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 221, 60, 14 +END + +1425 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Host name or IP address of destination (such as reactos.org or 145.52.0.1):", 1430, 7, 5, 217, 18 + EDITTEXT 1427, 7, 25, 215, 14, ES_AUTOHSCROLL + GROUPBOX "First connect", 1431, 9, 48, 213, 78 + LTEXT "ReactOS can first connect the public network, such as the Internet, before trying to establish this virtual connection.", 1432, 17, 63, 199, 24 + AUTOCHECKBOX "&Dial another connection first:", 1428, 19, 89, 183, 10 + COMBOBOX 1429, 29, 103, 182, 87, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 10, 192, 213, 13 +END + +1426 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Options" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Dialing options", 1289, 8, 7, 214, 56 + AUTOCHECKBOX "&Display progress while connecting", 1284, 16, 17, 199, 10 + AUTOCHECKBOX "&Prompt for name and password, certificate, etc.", 1554, 16, 32, 199, 10 + AUTOCHECKBOX "Include &ReactOS logon domain", 1555, 16, 47, 178, 10 + GROUPBOX "Redialing options", 1290, 8, 68, 214, 89 + LTEXT "&Redial attempts:", 1300, 16, 81, 121, 8 + EDITTEXT 1287, 140, 77, 70, 14, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "&Time between redial attempts:", 1301, 16, 99, 121, 8 + COMBOBOX 1292, 141, 95, 70, 123, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Idle ti&me before hanging up:", 1299, 16, 117, 121, 8 + COMBOBOX 1291, 141, 113, 70, 108, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "Redial if &line is dropped", 1286, 16, 138, 199, 10, BS_TOP | BS_MULTILINE +END + +1427 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type the host name or Internet Protocol (IP) address of the computer to which you are connecting.", -1, 10, 6, 275, 16 + LTEXT "&Host name or IP address (for example, reactos.org or 145.52.0.1 ):", -1, 21, 28, 277, 11 + EDITTEXT 1433, 21, 42, 275, 14, ES_AUTOHSCROLL +END + +1428 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS can automatically dial the initial connection to the Internet or other public network, before establishing the virtual connection.", -1, 10, 6, 275, 24 + AUTORADIOBUTTON "&Do not dial the initial connection.", 1509, 32, 31, 271, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + AUTORADIOBUTTON "&Automatically dial this initial connection:", 1510, 32, 45, 269, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + COMBOBOX 1435, 43, 62, 253, 87, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP +END + +1436 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a device:", 1597, 8, 5, 213, 8 + COMBOBOX 1437, 7, 17, 217, 166, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 11, 195, 213, 10, BS_TOP | BS_MULTILINE + PUSHBUTTON "C&onfigure...", 1130, 160, 34, 60, 14 +END + +1448 DIALOGEX 10, 20, 265, 71 +STYLE DS_SHELLFONT | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Network Connections" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "C&hoose a network connection:", 1456, 7, 7, 251, 10 + COMBOBOX 1457, 8, 18, 250, 140, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + DEFPUSHBUTTON "&Connect...", 1449, 7, 50, 60, 14 + PUSHBUTTON "Cancel", 1455, 70, 50, 60, 14 + PUSHBUTTON "&New...", 1459, 134, 50, 60, 14 + PUSHBUTTON "P&roperties", 1460, 198, 50, 60, 14 +END + +1466 DIALOGEX 6, 18, 265, 262 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Sample text", 1469, 7, 7, 251, 8 + EDITTEXT 1470, 7, 17, 193, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Add", 1471, 77, 36, 60, 14 + PUSHBUTTON "&Replace", 1472, 141, 36, 60, 14 + LTEXT "Sample text", 1473, 7, 57, 193, 8 + LISTBOX 1474, 7, 68, 193, 145, WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "", 1475, 206, 68, 51, 14, BS_BITMAP | WS_GROUP + PUSHBUTTON "&Down", 1476, 206, 86, 51, 14, BS_BITMAP + PUSHBUTTON "D&elete", 1477, 141, 215, 60, 14 + CONTROL "", 1479, "STATIC", SS_ETCHEDHORZ, 7, 233, 249, 1 + PUSHBUTTON "OK", 1, 132, 242, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 196, 242, 60, 14 +END + +1467 DIALOGEX 6, 18, 263, 263 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Sample text", 1469, 7, 7, 197, 8 + EDITTEXT 1470, 7, 17, 193, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Add", 1471, 76, 36, 60, 14 + PUSHBUTTON "&Replace", 1472, 141, 36, 60, 14 + LTEXT "Sample text", 1473, 7, 57, 193, 8 + LISTBOX 1474, 7, 68, 193, 135, WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&Up", 1475, 206, 68, 51, 14, BS_BITMAP | WS_GROUP + PUSHBUTTON "&Down", 1476, 206, 86, 51, 14, BS_BITMAP + PUSHBUTTON "D&elete", 1477, 141, 204, 60, 14 + AUTOCHECKBOX "Sample text", 1478, 7, 225, 249, 10, BS_TOP | BS_MULTILINE + PUSHBUTTON "OK", 1, 132, 242, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 196, 242, 60, 14 +END + +1468 DIALOGEX 6, 18, 263, 263 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Sample text", 1469, 7, 5, 249, 8 + EDITTEXT 1470, 7, 17, 249, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Add", 1471, 132, 36, 60, 14 + PUSHBUTTON "&Replace", 1472, 196, 36, 60, 14 + LTEXT "Sample text", 1473, 7, 55, 251, 8 + LISTBOX 1474, 7, 68, 249, 140, LBS_STANDARD | WS_TABSTOP + PUSHBUTTON "D&elete", 1477, 196, 214, 60, 14, WS_GROUP + CONTROL "", 1479, "STATIC", SS_ETCHEDHORZ, 7, 233, 249, 1 + PUSHBUTTON "OK", 1, 132, 242, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 196, 242, 60, 14 +END + +1469 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + AUTORADIOBUTTON "Dial-up to &private network.", 1488, 24, 9, 116, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "Connect to a private network &through the Internet.", 1489, 24, 34, 206, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "&Connect directly to another computer.", 1490, 24, 59, 157, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "Connect to the network via b&roadband", 1491, 24, 83, 273, 10, NOT WS_TABSTOP + LTEXT "Connect using my phone line (modem or ISDN).", -1, 45, 21, 156, 8 + LTEXT "Create a Virtual Private Network (VPN) connection or tunnel through the internet.", -1, 45, 46, 266, 8 + LTEXT "Connect using my serial, parallel, or infrared port.", -1, 45, 71, 266, 8 + LTEXT "Connect through my broadband connection.", -1, 45, 95, 266, 8 +END + +1480 DIALOGEX 0, 0, 230, 61 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Phone Number Editor" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Please enter the new phone number:", 1481, 7, 7, 218, 8 + EDITTEXT 1482, 7, 17, 217, 15, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 99, 40, 60, 14 + PUSHBUTTON "Cancel", 2, 163, 40, 60, 14 +END + +1481 DIALOGEX 0, 0, 321, 157 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type an ISP account name and password, then write down this information and store it in a safe place. (If you have forgotten an existing account name or password, contact your ISP.)", 1689, 10, 4, 308, 25 + LTEXT "&User name:", 1636, 23, 35, 89, 15 + EDITTEXT 1614, 115, 34, 190, 15, ES_AUTOHSCROLL + LTEXT "&Password:", 1637, 23, 55, 90, 13 + EDITTEXT 1615, 115, 54, 190, 15, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Confirm password:", 1638, 23, 74, 88, 13 + EDITTEXT 1616, 115, 73, 190, 15, ES_PASSWORD | ES_AUTOHSCROLL + AUTOCHECKBOX "U&se this account name and password when anyone connects to the Internet from this computer", 1596, 23, 91, 291, 17, BS_LEFT | BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Make this the default Internet connection", 1595, 23, 112, 288, 14 + AUTOCHECKBOX "&Turn on Internet Connection Firewall for this connection", 1682, 23, 133, 290, 14 +END + +1660 DIALOGEX 0, 0, 258, 78 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Internet Connection Firewall" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 32515, -1, 7, 7, 20, 20 + LTEXT "Turning off the Internet Connection Firewall could expose your computer to unauthorized access over the Internet. Are you sure you want to turn it off?", -1, 44, 5, 212, 24 + AUTOCHECKBOX "&Do not show this dialog again", 1662, 42, 40, 210, 10 + DEFPUSHBUTTON "&Yes", 6, 74, 60, 50, 14 + PUSHBUTTON "&No", 7, 128, 60, 50, 14 +END + +7000 DIALOGEX 0, 0, 215, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&User name:", -1, 7, 8, 90, 12, SS_CENTERIMAGE + EDITTEXT 7001, 101, 7, 108, 14, ES_AUTOHSCROLL + LTEXT "&Full name:", -1, 7, 26, 90, 12 + EDITTEXT 7002, 101, 25, 108, 14, ES_AUTOHSCROLL + LTEXT "&Password:", -1, 7, 44, 90, 12 + EDITTEXT 7003, 101, 43, 108, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Confirm password:", -1, 7, 62, 91, 12 + EDITTEXT 7004, 101, 61, 108, 14, ES_PASSWORD | ES_AUTOHSCROLL + PUSHBUTTON "OK", 1, 84, 82, 60, 14 + PUSHBUTTON "Cancel", 2, 149, 82, 60, 14 +END + +7005 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_CONTEXTHELP | WS_CHILD | WS_CAPTION +CAPTION "Callback" +FONT 8, "MS Shell Dlg" +BEGIN + AUTORADIOBUTTON "&Do not allow callback", 7009, 9, 7, 219, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "All&ow the caller to set the callback number", 7006, 9, 20, 218, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + AUTORADIOBUTTON "Al&ways use the following callback number:", 7007, 9, 34, 217, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + EDITTEXT 7008, 19, 49, 204, 14, ES_AUTOHSCROLL | WS_GROUP +END + +7010 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_CONTEXTHELP | WS_CHILD | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Incoming connections", -1, 7, 4, 214, 110, WS_GROUP + LTEXT "Allow incoming connections on these devices.", -1, 17, 17, 195, 8 + LTEXT "&Devices:", -1, 17, 29, 29, 8 + CONTROL "", 7011, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x00004405, 17, 41, 193, 47, WS_EX_CLIENTEDGE + AUTOCHECKBOX "&Enable multilink", 7012, 17, 96, 121, 10, BS_TOP | BS_MULTILINE | WS_GROUP + PUSHBUTTON "P&roperties", 7013, 145, 94, 65, 14, WS_GROUP + GROUPBOX "Virtual private network", -1, 6, 122, 214, 49, WS_GROUP + AUTOCHECKBOX "Allo&w others to make private connections to my computer by tunneling through the Internet or other network", 7014, 17, 137, 195, 27, BS_TOP | BS_MULTILINE | WS_GROUP + AUTOCHECKBOX "&Show icon in notification area when connected", 7015, 12, 184, 209, 10, BS_TOP | BS_MULTILINE | WS_GROUP +END + +7016 DIALOGEX 0, 0, 265, 190 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Incoming TCP/IP Properties" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Network access", -1, 6, 5, 252, 32 + AUTOCHECKBOX "Allow &callers to access my local area network", 7017, 20, 20, 228, 9, BS_LEFT | BS_TOP | BS_MULTILINE + GROUPBOX "TCP/IP address assignment", -1, 6, 42, 250, 122 + AUTORADIOBUTTON "&Assign TCP/IP addresses automatically using DHCP", 7019, 20, 54, 231, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "S&pecify TCP/IP addresses", 7020, 20, 71, 231, 10, BS_TOP | BS_MULTILINE + LTEXT "&From:", -1, 29, 88, 53, 8 + CONTROL "", 7018, "RASIPADDRESS", WS_GROUP | WS_TABSTOP, 90, 85, 103, 13 + LTEXT "&To:", -1, 29, 105, 53, 8 + CONTROL "", 7021, "RASIPADDRESS", WS_GROUP | WS_TABSTOP, 90, 102, 103, 13 + LTEXT "Total:", -1, 29, 124, 53, 10 + LTEXT "", 7024, 90, 121, 150, 14, 0, WS_EX_STATICEDGE + AUTOCHECKBOX "Allo&w calling computer to specify its own IP address", 7022, 20, 144, 231, 10, BS_TOP | BS_MULTILINE | WS_GROUP + DEFPUSHBUTTON "OK", 1, 133, 169, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 197, 169, 60, 14 +END + +7025 DIALOGEX 0, 0, 250, 157 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Incoming IPX Properties" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Network access", -1, 8, 6, 234, 32 + AUTOCHECKBOX "Allow &callers to access my local area network", 7032, 18, 19, 194, 12, BS_LEFT | BS_TOP | BS_MULTILINE + GROUPBOX "Network number assignment", -1, 8, 43, 234, 87 + AUTOCHECKBOX "&Assign same network number to all computers", 7028, 17, 56, 203, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Assi&gn network numbers automatically", 7026, 28, 68, 191, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Specify network numbers:", 7027, 28, 81, 189, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + EDITTEXT 7029, 40, 92, 154, 14, ES_UPPERCASE | WS_GROUP + AUTOCHECKBOX "Allo&w callers to specify their own node numbers", 7031, 17, 113, 208, 11, BS_TOP | BS_MULTILINE | WS_GROUP + DEFPUSHBUTTON "OK", 1, 116, 136, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 181, 136, 60, 14 +END + +7033 DIALOGEX 0, 0, 220, 50 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Incoming Protocol Properties" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "Allow &callers to access my local area network", 7034, 7, 7, 208, 18, BS_LEFT | BS_TOP | BS_MULTILINE + DEFPUSHBUTTON "OK", 1, 86, 30, 60, 14 + PUSHBUTTON "Cancel", 2, 151, 30, 60, 14 +END + +7035 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Networking" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Network components:", -1, 7, 7, 217, 9 + CONTROL "", 7036, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000440D, 7, 17, 215, 89, WS_EX_CLIENTEDGE + PUSHBUTTON "&Install...", 7037, 9, 110, 67, 14, WS_GROUP + PUSHBUTTON "&Uninstall", 7038, 80, 110, 67, 14, WS_GROUP + PUSHBUTTON "P&roperties", 7039, 153, 110, 67, 14, WS_GROUP + GROUPBOX "Description", -1, 7, 138, 213, 69 + LTEXT "", 7040, 17, 150, 193, 48 +END + +7042 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_CONTEXTHELP | WS_CHILD | WS_CAPTION +CAPTION "Users" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Users allowed to connect:", -1, 7, 5, 213, 8 + CONTROL "", 7043, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000440D, 7, 19, 214, 83, WS_EX_CLIENTEDGE + PUSHBUTTON "&New...", 7044, 7, 107, 67, 14, WS_GROUP + PUSHBUTTON "&Delete", 7045, 80, 107, 67, 14, WS_GROUP + PUSHBUTTON "P&roperties", 7046, 153, 107, 67, 14, WS_GROUP + AUTOCHECKBOX "Re&quire all users to secure their passwords and data.", 7048, 8, 151, 217, 12, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Al&ways allow directly connected devices such as palmtop computers to connect without providing a password.", 7049, 8, 169, 217, 23, BS_TOP | BS_MULTILINE + LTEXT "Note that other factors, such as a disabled user account, may affect a user's ability to connect.", -1, 9, 126, 212, 23 +END + +7049 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the check box next to each user who should be allowed a connection to this computer. Note that other factors, such as a disabled user account, may affect a user's ability to connect.", -1, 10, 1, 275, 27 + LTEXT "&Users allowed to connect:", -1, 10, 28, 275, 8 + CONTROL "", 7043, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000440D, 10, 42, 275, 73 + PUSHBUTTON "&Add...", 7044, 10, 122, 65, 14, WS_GROUP + PUSHBUTTON "&Remove", 7045, 79, 122, 65, 14, WS_GROUP + PUSHBUTTON "&Properties", 7046, 147, 122, 65, 14, WS_GROUP +END + +7050 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the check box next to each device you want to use for incoming connections.", -1, 10, 4, 299, 10 + LTEXT "&Connection devices:", -1, 10, 16, 275, 8 + CONTROL "", 7011, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000440D, 10, 26, 297, 87 + PUSHBUTTON "P&roperties", 7013, 243, 120, 65, 14, WS_GROUP +END + +7051 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the check box next to each type of networking software that should be enabled for incoming connections.", -1, 10, 1, 288, 20 + LTEXT "Networking &software:", -1, 10, 24, 274, 8 + CONTROL "", 7036, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000440D, 10, 34, 286, 33 + PUSHBUTTON "&Install...", 7037, 108, 71, 60, 14, WS_GROUP + PUSHBUTTON "&Uninstall", 7038, 172, 71, 60, 14, WS_GROUP + PUSHBUTTON "&Properties", 7039, 236, 71, 60, 14, WS_GROUP + LTEXT "", 7040, 21, 105, 273, 38 + LTEXT "Description:", -1, 21, 95, 275, 8 +END + +7052 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Virtual private connections to your computer through the Internet are possible only if your computer has a known name or IP address on the Internet.", -1, 10, 4, 290, 20 + AUTORADIOBUTTON "&Allow virtual private connections", 7053, 29, 63, 265, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Do not allow virtual private connections", 7054, 29, 78, 265, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + LTEXT "Do you want to allow virtual private connections to this computer?", -1, 17, 49, 275, 8 + LTEXT " If you allow VPN connections, ReactOS will modify the Internet Connection Firewall to allow your computer to send and receive VPN packets.", -1, 10, 25, 293, 25 +END + +7055 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Device for this connection:", -1, 23, 24, 275, 8 + COMBOBOX 7056, 22, 36, 275, 125, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Devices other than the one you select will not be affected and may be used for other purposes.", -1, 10, 4, 275, 17 + PUSHBUTTON "&Properties", 7061, 232, 53, 65, 14, WS_GROUP +END + +7379 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN +END + +19900 DIALOGEX 0, 0, 156, 44 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Dial-Up Networking" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 563, 19901, 10, 10, 18, 20 + LTEXT "Waiting for services to start...", 19902, 34, 16, 120, 8 +END + +STRINGTABLE +BEGIN + 187 "&No, do not dial\0" + 188 "You (or a program) have requested information from %1. Which connection do you want to use?\0" + 189 "Add Alternate Phone Number\0" + 190 "Dial only first available device\0" + 191 "Dial all devices\0" + 192 "Dial devices only as needed\0" + 193 "Enter a user name and password with access to the remote network domain.\0" + 194 "Network Address Translation (NAT) is currently installed as a routing protocol,\nand must be removed before enabling Internet Connection Sharing.\nTo remove Network Address Translation, open the Routing and Remote Access Manager\nsnapin and expand the router's entry in the left pane.\nDelete the Network Address Translation routing protocol from the list of IP\nrouting protocols.\0" + 195 "The area code must contain only the digits 0 to 9.\0" + 196 "The entry name must contain at least one non-blank character and cannot begin with a period. Choose a different name.\0" + 197 "You must choose a value from %1 to %2 for this field.\0" + 198 "The custom authentication configuration DLL could not be loaded. Make sure the custom authentication package is correctly installed.\0" + 199 "The connection selected was established by the Multiprotocol router.\nPlease use the 'Routing and RAS Admin' tool to hang up the connection.\0" + 200 "Comment\0" + 201 "The custom authentication package configuration failed.\0" + 202 "TCP/IP is not installed or is disabled for Routing and Remote Access. In Control Panel, start Network, go to the Services page, choose 'Routing and Remote Access Service' Properties, and press the Network button.\0" + 203 "IPX is not installed or is disabled for Routing and Remote Access. You can install/enable IPX by viewing the properties of any connection in ""Connections"" folder.\0" + 204 "Remove the selected device(s) from the list?\0" + 205 "Delete %1 from the phonebook?\0" + 206 "Disconnect from %1?\0" + 207 "A file named %1 already exists. Overwrite it?\0" + 208 "Syntax errors were found in the script. Do you wish to view the error log?\0" + 209 "'%1' is now connected. \0" + 210 "Right-click the Dial-Up Networking Monitor on the task bar to hang up or check the status of your connection.\0" + 212 "Connected successfully.\0" + 213 "The custom authentication method selected must be initialized by pressing Properties.\0" + 214 "lnk\0" + 215 "Dial-up shortcut files (*.rnk)\0" + 216 "*.rnk\0" + 217 "Create Dial-Up Shortcut\0" + 218 "Link to %1 failed. Reconnect pending...\0" + 219 "Cannot retrieve framing information.\0" + 220 "Cannot retrieve port information.\0" + 221 "Cannot retrieve projection information.\0" + 222 "Cannot load connection list.\0" + 223 "Client:\0" + 224 "Details\0" + 225 "Device:\0" + 226 "Network:\0" + 227 "(not connected)\0" + 228 "&Connect...\0" + 229 "Hang &Up\0" + 230 "Dial-up Connection\0" + 231 "Modem configuration set to defaults\0" + 232 "COM1\0" + 233 "Remote Router\0" + 234 "Modem or device\0" + 235 "Please enter a username for this interface's account on the remote router.\0" + 236 "An entry named %1 already exists. Choose a different name.\0" + 237 "You may want to allow sending your password without encryption.\0" + 238 "Password Encryption\0" + 239 "The wizard is ready to create your connection.\0" + 240 "Finished\0" + 241 "Phone &number:\0" + 242 "Call Me Back At\0" + 243 "Edit Alternate Phone Number\0" + 244 "Since this connection is currently active, some settings will not take effect until the next time you dial it.\0" + 245 "There are no connections available to all users. You must logon before dialing.\0" + 246 "The phonebook is empty.\n\nPress OK to add an entry.\0" + 247 "Due to import/export restrictions, data encryption is not available in this version of ReactOS.\0" + 248 "Please enter an X.25 address on the next screen.\0" + 249 "Error %1: %2\0" + 250 "%1\n\nError %2: %3\0" + 251 "%1\n\nError %2: %3\nDiagnostic: %4\0" + 252 "%1\n\nError %2: %3\nFail Code: %4\0" + 253 "%1\n\nError %2: %3\n\nPress F1 for more information.\0" + 254 "%1\n\nError %2: %3\nName: %4\0" + 255 "%1\n\n%4\0" + 256 "%1\n\nError %2: %3\nResponse: %4\0" + 257 "Fail Code: 0x%1\n\0" + 258 "Name: %1\n\0" + 259 "%1 CP reported error %2: %3\n\0" + 260 "%1 CP connected successfully.\n\0" + 261 "You can choose which dial-up protocol to use.\0" + 262 "Choose Dial-up Protocol\0" + 263 "Press Finish to save '%1'.\0" + 264 "netcfg.hlp\0" + 265 "&Move successful number to the top of the list on connection\0" + 266 "&New phone number:\0" + 267 "&Phone numbers:\0" + 268 "Phone Numbers\0" + 269 "You may enter a fixed IP address.\0" + 270 "IP Address\0" + 271 "The Internet protocols (TCP/IP), are not installed or are disabled for Remote Access. In Control Panel, start Network, go to the Services page, choose 'Remote Access Service' Properties, and press the Network button.\0" + 272 "TCP/IP\0" + 273 "IPSec, default policy\0" + 274 "IPX/SPX or compatible\0" + 275 " (the current location)\0" + 276 "ISDN\0" + 277 "All available ISDN lines multi-linked\0" + 278 "64K Digital\0" + 279 "56K Digital\0" + 280 "56K Voice\0" + 281 "You may need a special procedure before connecting.\0" + 282 "Choose Logon Options\0" + 283 "%d%%\0" + 284 "Phone number for %s\0" + 285 "&New location:\0" + 286 "&Locations:\0" + 287 "Locations\0" + 288 "This is the device that will be used to make the connection.\0" + 289 "Select a Device\0" + 290 "Multiple Lines cannot be bundled unless you are calling a PPP server.\0" + 291 "Modem\0" + 292 "The modem is not installed.\0" + 293 "MS Point-to-Point Encryption, 128 bit RSA/RC4\0" + 294 "MS Point-to-Point Encryption, 40 bit RSA/RC4\0" + 295 "Multiple Lines\0" + 296 "(Press Configure to set)\0" + 297 "You may enter fixed DNS and WINS addresses.\0" + 298 "Name Server Addresses\0" + 299 "Down-level RAS\0" + 300 "PPP\0" + 301 "PPP multi-link\0" + 302 "SLIP\0" + 303 "NetBEUI\0" + 304 "A personal phonebook has been created and initialized with the contents of the system phonebook.\0" + 305 "No alternate phonebook is selected.\0" + 306 "That device cannot be dynamically configured.\0" + 307 "The entry cannot be deleted because it is connected.\0" + 308 "No entry is selected. Press the New button to create an entry.\0" + 309 "A non-zero IP address must be supplied when 'specify an IP address' is selected.\0" + 310 "An X.25 Address is required when an X.25 dial-up network or X.25 device is selected.\0" + 311 "(none)\0" + 312 "'%1' is already in the list.\0" + 313 "Secure my password and my data\0" + 314 "The %1 protocol cannot be selected because it is not installed or is disabled for Remote Access. To change, in Control Panel start Network, choose Services page, Remote Access Properties, and press the Network button.\0" + 315 "Cannot save password.\0" + 316 "Cannot display data.\0" + 317 "Cannot get auto-dial information.\0" + 318 "Cannot load dialog.\0" + 319 "Cannot disable shared access.\0" + 320 "Cannot load property page.\0" + 321 "Cannot load phonebook.\0" + 322 "Cannot load RAS Manager port information.\0" + 323 "Cannot read user preferences from registry.\0" + 324 "Cannot load script information.\0" + 325 "Cannot view script.log with notepad.exe\0" + 326 "Cannot edit switch.inf with notepad.exe\0" + 327 "Cannot load TAPI information.\0" + 328 "Cannot load X.25 information.\0" + 329 "Cannot create new phonebook.\0" + 330 "Cannot enable shared access.\0" + 331 "Cannot connect the phonebook entry.\0" + 332 "Cannot get send/receive buffer.\0" + 333 "Cannot get status information for a port.\0" + 334 "Cannot retrieve protocol information.\0" + 335 "Cannot receive buffer from device.\0" + 336 "Cannot send buffer to device.\0" + 337 "Cannot retrieve data.\0" + 338 "Cannot save TAPI information.\0" + 339 "Cannot save data.\0" + 340 "The script has halted.\0" + 341 "The script has halted due to an error. Do you wish to view the error log?\0" + 342 "Cannot set auto-dial information.\0" + 343 "Cannot delete saved password.\0" + 344 "Cannot write phonebook.\0" + 345 "Writing preferences to registry\0" + 346 "Cannot write the shortcut file.\0" + 347 "OK\0" + 348 "What is your ISP's phone number?\0" + 349 "Phone Number to Dial\0" + 350 "The Password and Confirm password fields do not match.\0" + 351 "The New Password and Confirm New Password fields do not match.\0" + 352 "pbk\0" + 353 "Phonebook files (*.pbk)\0" + 354 "*.pbk\0" + 355 "Open Phonebook\0" + 356 "Clone Phonebook Entry\0" + 357 "Edit Phonebook Entry\0" + 358 "New Phonebook Entry\0" + 359 "Phone number\0" + 360 "Phone numbers\0" + 361 "Network Connections\0" + 362 "You must select at least one network protocol.\0" + 363 "Before you can call PPP servers you must install a network protocol with the Control Network applet.\0" + 364 "&New prefix:\0" + 365 "&Prefixes:\0" + 366 "Phone Number Prefixes\0" + 367 "One or more requested network protocols did not connect successfully.\n\n\0" + 368 "Press Accept to use the connection as is, or Hang Up to disconnect.\0" + 369 "Point-to-point protocol settings to use when %1 initiates a demand dial connection on interface %2:\0" + 370 "[To change the saved password, click here]\0" + 405 "NetBEUI protocol is required to call older RAS servers.\0" + 406 "Before you can call older RAS servers you must install the NetBEUI protocol. NetBEUI can be installed with the Control Panel Network applet.\0" + 407 "&Redial\0" + 408 "You have chosen to disable one or more transports. Doing so requires the routing managers and routing protocols for the disabled transports to be removed from this demand-dial interface.\nClick Yes if you want to conti \n \n\n\n\n\n\nnue, or No if you want to re-enable the transports.\0" + 409 "Internet Connection Sharing\0" + 410 "Demand-dial interface dial-in account.\0" + 411 "You now need to set the dial-out credentials that interface '%1' will use when connecting to the remote router. These credentials must match the dial-in credentials configured on the remote router. When connecting to a \n \n\n\n\n\n\nWin NT4/2000 router, the user name must also match the interface name of the remote router.\0" + 412 "mpradmin.hlp\0" + 413 "&Move successful number or address to the top of the list on connection\0" + 414 "&New phone number or address:\0" + 415 "&Phone numbers or addresses:\0" + 416 "Numbers and Addresses\0" + 417 "PPP: Win 95/98/NT4/2000, Internet\0" + 418 "None\0" + 419 "SLIP: Unix Connection\0" + 420 "All devices connected.\0" + 421 "Receiving registration result...\0" + 422 "Sending callback information...\0" + 423 "Sending new password...\0" + 424 "Calculating link speed...\0" + 425 "Checking authentication status...\0" + 426 "Registering your computer on the network...\0" + 427 "Retrying authentication...\0" + 428 "Verifying username and password...\0" + 429 "Authenticated.\0" + 430 "Connecting through %1...\0" + 431 "Dialing...\0" + 432 "Modems connecting...\0" + 433 "Connecting over cable...\0" + 434 "Dialing %1...\0" + 435 "Connecting over X.25 to %1...\0" + 436 "Postconnecting through %1...\0" + 437 "Preconnecting through %1...\0" + 438 "Connected.\0" + 439 "Device connected.\0" + 440 "Disconnected.\0" + 441 "Modem connected.\0" + 442 "Cable connected.\0" + 443 "Opening port...\0" + 444 "X.25 connected.\0" + 445 "Port opened.\0" + 446 "Postconnect complete.\0" + 447 "Preconnect complete.\0" + 448 "Preparing for callback...\0" + 449 "Checking network protocol connections...\0" + 450 "Verifying username and password...\0" + 451 "Connected, bundling additional lines\0" + 452 "Unknown state.\0" + 453 "Waiting for callback...\0" + 454 "Waiting for modem reset...\0" + 455 "Make the phone number change permanent?\0" + 456 "scp\0" + 457 "*.scp\0" + 458 "Dial-up script files (*.scp)\0" + 459 "Browse Dial-Up Scripts\0" + 460 "You must check at least one modem or adapter.\0" + 461 "Phone number\0" + 462 "TCP/IP protocol is required to call SLIP servers.\0" + 463 "Before you can call SLIP servers you must install the TCP/IP protocol. TCP/IP can be installed with the Control Panel Network applet.\0" + 464 "Status\0" + 465 "&New suffix:\0" + 466 "&Suffixes:\0" + 467 "Phone Number Suffixes\0" + 468 "You can go on to choose special settings, if necessary.\0" + 469 "Custom Settings\0" + 470 "Manual Modem Command Terminal\0" + 471 "After Dial Terminal\0" + 472 "Before Dial Terminal\0" + 473 "SLIP Login Terminal\0" + 474 "10 minutes\0" + 475 "10 seconds\0" + 476 "1 hour\0" + 477 "1 minute\0" + 478 "24 hours\0" + 479 "2 hours\0" + 480 "2 minutes\0" + 481 "30 minutes\0" + 482 "30 seconds\0" + 483 "3 seconds\0" + 484 "4 hours\0" + 485 "4 minutes\0" + 486 "5 minutes\0" + 487 "5 seconds\0" + 488 "8 hours\0" + 489 "never\0" + 490 "You can make the new connection available to any user or only to yourself.\0" + 491 "Connection Availability\0" + 492 "Discard multiple line settings for the entry?\0" + 493 "Unavailable device\0" + 494 "Logon Preferences\0" + 495 "Dial-up Preferences\0" + 496 "X.25\0" + 497 "X.25 PAD\0" + 498 "You can let other computers access resources through this dial-up connection.\0" + 499 "VPN Server Selection\0" + 500 "Cannot enable on-demand dialing.\0" + 501 "What is the name or address of the VPN server?\0" + 502 "Cannot disable on-demand dialing.\0" + 503 "Public Network\0" + 504 "ReactOS can make sure the public network is connected first.\0" + 505 "VPN1\0" + 506 "Internet Connection Sharing\0" + 507 "You can let a local network access resources through this dial-up connection.\0" + 508 "Host or Guest?\0" + 509 "Internet Connection Sharing is currently enabled for connection '%1'.\n\nIt will now be enabled for connection '%2' instead.\0" + 510 "To connect two computers, your computer must be identified as either a host or a guest.\0" + 511 "When Internet Connection Sharing is enabled, your LAN adapter will be set to use IP address 192.168.0.1. Your computer may lose connectivity with other computers on your network. If these other computers have static IP addresses, you should set them to obtain their IP addresses automatically. Are you sure you want to enable Internet Connection Sharing?\0" + 512 "Select a Device\0" + 513 "This is the device that will be used to make the connection.\0" + 514 "&Connect\0" + 515 "Let the server determine encryption\0" + 516 "Always encrypt my data\0" + 517 "Use MPPE-40 data encryption\0" + 518 "Use MPPE-128 data encryption\0" + 519 "The current encryption selection requires MS-CHAP or EAP authentication.\0" + 520 "Custom Authentication Message\0" + 521 "Connecting to %1...\0" + 522 "Connection Name\0" + 523 "Automatic\0" + 524 "PPTP VPN\0" + 525 "L2TP IPSec VPN\0" + 526 "Select the type of the connection.\0" + 527 "Type of Connection\0" + 528 "hh.exe netcfg.chm::/trouble_all.htm\0" + 529 "Virtual Private Connection\0" + 530 "Use any form of authentication required including clear text. Do not encrypt data.\0" + 531 "Use any form of authentication that requires passwords to be encrypted. Do not encrypt data.\0" + 532 "Please type a name for the entry.\0" + 533 "Encrypt passwords and data.\0" + 534 "Please type a port number between 1 and 65535.\0" + 535 "Specify custom authentication and data encryption with the Settings button.\0" + 536 "Use any form of authentication that requires encrypted passwords. Do not encrypt data.\0" + 537 "Encrypt passwords and data.\0" + 538 "Specify custom authentication and data encryption with the Settings button.\0" + 539 "The port number is already used by another entry.\nPlease enter a unique port number.\0" + 540 "Please enter one or more ports for incoming responses.\0" + 541 "Please select the entry to be deleted.\0" + 542 "1 second\0" + 543 "Please select the entry to be modified.\0" + 549 "What is the name of the other computer you are connecting to?\0" + 576 "20 minutes\0" + 579 "Specify a name for this connection to your workplace.\0" + 581 "Network Application Settings\0" + 582 "Type a name for this connection in the following box.\0" + 583 "Type the name of the other computer in the following box.\0" + 584 "Type the name of your ISP in the following box.\0" + 585 "What is the name of the service that provides your Internet connection?\0" + 586 "Please type the IP address of the server computer on the private network.\0" + 587 "Advanced Settings\0" + 588 "The entry name begins with a period. or contains some invalid characters. \nChoose a different name.\0" + 589 "Properties\0" + 1512 "Communications Port\0" + 1523 " channel\0" + 1526 "Smart Cards\0" + 1527 "You can use your smart card with this connection.\0" + 1528 "Direct Connection\0" + 1529 "Please select a device for this connection.\0" + 1530 "Verdana Bold\0" + 1531 "12\0" + 1532 "Connection Type\0" + 1533 "Select the type of demand dial interface you want to create.\0" + 1534 "Select a device\0" + 1535 "This is the device that will be used to make the connection.\0" + 1536 "Phone Number\0" + 1537 "Enter the phone number of the remote server or router you are calling.\0" + 1538 "VPN Type\0" + 1539 "Select the type of VPN interface you want to create.\0" + 1540 "Destination Address\0" + 1541 "What is the name or address of the remote router?\0" + 1544 "IP Address\0" + 1545 "Configure this router's IP address for this interface.\0" + 1546 "Name Server Addresses\0" + 1547 "Configure DNS and WINS addresses for use by this interface.\0" + 1548 "Router Scripting\0" + 1549 "You can set up a scripting for connecting to the remote router.\0" + 1550 "Dial In Credentials\0" + 1551 "Configure the user name and password that the remote router will use when it dials in to this server.\0" + 1552 "Dial Out Credentials\0" + 1553 "Configure the user name and password to be used when connecting to the remote router.\0" + 1554 "Interface Name\0" + 1555 "Select the name by which this new interface will be known.\0" + 1556 "No available devices\0" + 1557 "A user account named %1 already exists on the local computer. Should the demand dial interface be configured to use this user account?\0" + 1558 "There are no security protocol settings for SLIP server connections.\0" + 1559 "Allow unsecured password\0" + 1560 "Require secured password\0" + 1561 "Use smart card\0" + 1562 "You must select at least one password authentication protocol.\0" + 1563 "No encryption allowed (server will disconnect if it requires encryption)\0" + 1564 "Optional encryption (connect even if no encryption)\0" + 1565 "Require encryption (disconnect if server declines)\0" + 1566 "Maximum strength encryption (disconnect if server declines)\0" + 1567 " (encryption enabled)\0" + 1568 "Internet Account Information\0" + 1569 "You will need an account name and password to sign in to your Internet account.\0" + 1570 "The selected EAP package does not provide encryption keys. Select an EAP package that does provide keys or select not to encrypt.\0" + 1571 "The current encryption selection requires EAP or some version of MS-CHAP logon security methods.\0" + 1572 "Protocols and Security\0" + 1573 "Select transports and security options for this connection.\0" + 1574 "The protocols you have selected include PAP, SPAP, and/or CHAP. If one of these is negotiated, data encryption will not occur. Do you want to keep these settings?\0" + 1575 "To connect to '%1', you must first be connected to '%2'. Do you want to connect to '%2' now?\0" + 1576 "Connecting over parallel cable...\0" + 1577 "Connecting over infrared...\0" + 1578 "Parallel cable connected.\0" + 1579 "Infrared connected.\0" + 1580 "This connection was configured to use a data encryption strength that is not supported by the installed software. The security properties of this connection have been reset to the available encryption strengths.\0" + 1581 "Typ&e of VPN:\0" + 1582 "Please enter a user name.\0" + 1583 "This user name and password will be saved for your own use. There is already a user name and password saved for all other users of this connection. Do you want to delete the user name and password saved for all other users?\0" + 1584 "For example, you could type the name of your workplace or the name of a server you will connect to.\0" + 1585 "Account Information\0" + 1586 "The controls on this property sheet are disabled because the system must first be rebooted before any configuration changes can be made.\0" + 1587 "The controls on this property sheet are disabled because one or more other Network property sheets are already open. To use these controls, close all these property sheets and then reopen this one.\0" + 1588 "Some of the controls on this property sheet are disabled because you do not have sufficient privileges to access them.\0" + 1589 "The following message was received from your service provider:\r\n\r\n%1\0" + 1590 "Reconnect %1\0" + 1591 "Service Name\0" + 1592 "What is the name of the service that provides your broadband connection?\0" + 1593 "You will need an account name and password to sign on to your account\0" + 1594 "PPPOE1-0\0" + 1595 "Point-to-Point Protocol over Ethernet (PPPoE)\0" + 1596 "Type of &broadband connection to make:\0" + 1611 "Broadband Connection\0" + 1612 "You have selected to use a preshared key but you have not entered one. \nPlease enter a preshared key.\0" + 1613 "Cannot Commit Credentials\0" + 1634 "Because the Windows Management Instrumentation (WMI) service has been disabled, ReactOS cannot display the properties of this connection or the home network.\n\nTo configure the properties of this connection or your home network, you must first enable the WMI service. To do this, in the Administrative Tools control panel, double-click Services, right-click Windows Management Instrumentation, and then click Start.\0" + 1635 "ReactOS cannot display the properties of this connection. The Windows Management Instrumentation (WMI) information might be corrupted. To correct this, use System Restore to restore ReactOS to an earlier time (called a restore point). System Restore is located in the System Tools folder in Accessories.\0" + 1646 "Allow incoming echo request\0" + 1647 "Allow incoming timestamp request\0" + 1648 "Allow incoming mask request\0" + 1649 "Allow incoming router request\0" + 1650 "Allow outgoing destination unreachable\0" + 1651 "Allow outgoing source quench\0" + 1652 "Allow outgoing parameter problem\0" + 1653 "Allow outgoing time exceeded\0" + 1654 "Allow redirect\0" + 1655 "log\0" + 1656 "*.log\0" + 1657 "Firewall log files (*.log)\0" + 1658 "Browse\0" + 1663 "Select a private network connection\0" + 1664 "To enable Internet Connection Sharing a connection must be selected for the private network. Please select a connection from the list of available connections.\0" + 1665 "Messages sent to this computer will be repeated back to the sender. This is commonly used for troubleshooting, for example, to ping a machine.\0" + 1666 "Data sent to this computer can be acknowledged with a confirmation message indicating the time that the data was received.\0" + 1667 "This computer will listen for and respond to requests for more information about the public network to which it is attached.\0" + 1668 "This computer will respond to requests for information about the routes it recognizes.\0" + 1669 "Data sent over the Internet that fails to reach this computer due to an error will be discarded and acknowledged with a ""destination unreachable"" message explaining the failure.\0" + 1670 "When this computer's ability to process incoming data cannot keep up with the rate of a transmission, data will be dropped and the sender will be asked to slow down.\0" + 1671 "When this computer discards data it has received due to a problematic header, it will reply to the sender with a ""bad header"" error message.\0" + 1672 "When this computer discards an incomplete data transmission because the entire transmission required more time than allowed, it will reply to the sender with a ""time expired"" message.\0" + 1673 "Data sent from this computer will be rerouted if the default path changes.\0" + 1675 "The value entered for the log file size is not valid. Enter a value between 1 and 32767 k.\0" + 1685 "Your user account does not have permission to use this connection. Usually, this is because you are logged in as Guest.\0" + 1686 "Type an account name and password. (If you have forgotten an existing account name or password, contact your network administrator.)\0" + 1687 "Computer N&ame\0" + 1688 "ISP N&ame\0" + 1689 "Company N&ame\0" + 1690 "What is the phone number you will use to make this connection?\n\0" + 7301 "Incoming TCP/IP Properties\0" + 7302 "You must choose a value from %1 to %2 for this field.\0" + 7306 "Incoming Connections Error\0" + 7307 "Incoming Connections General Error\0" + 7308 "Incoming Connections\0" + 7309 "Incoming Connections Networking Error\0" + 7310 "Incoming Connections Multilink Status Error\0" + 7311 "Incoming Connections Error\0" + 7312 "Incoming Connections Initialization Error\0" + 7313 "Incoming Connections TCP/IP Properties Error\0" + 7314 "Incoming Connections IPX Properties Error\0" + 7315 "Incoming Connections Error\0" + 7316 "Generic\0" + 7317 "Device\0" + 7318 "Miscellaneous Database\0" + 7319 "User Database\0" + 7320 "Protocol Database\0" + 7321 "You must enter a logon name for the new user or press cancel.\0" + 7322 "The password you entered was too short.\0" + 7323 "The passwords entered are not the same. Please re-enter them.\0" + 7324 "An internal error has occured. \0" + 7325 "Listview\0" + 7326 "An error has occurred while attempting to commit the changes you have made to the local user database. \0" + 7327 "You have insufficient priveleges to add a user to the local system database. \0" + 7328 "The user you are trying create already exists in the local user database.\0" + 7329 "The user was not added to the local user database because the password you entered was rejected.\0" + 7330 "Unable to reload the system user database because of an internal error.\0" + 7331 "An internal error has occurred: The local user database handle is corrupt.\0" + 7332 "Unable to load the resources neccessary to display the user tab.\0" + 7333 "An internal error occured while attempting to rollback the changes you made to the local user database. \0" + 7334 "The device database handle is corrupt.\0" + 7335 "Unable to load the resources neccessary to display the general tab.\0" + 7336 "An error has occurred while attempting to commit some of the device/vpn related changes you have made. \0" + 7337 "An internal error occured.\0" + 7338 "An internal error occurred: The networking component database handle is corrupt.\0" + 7339 "An internal error has occurred. \0" + 7340 "An error has occurred while attempting to commit the changes you have made to the networking components.\0" + 7341 "An internal error occured.\0" + 7342 "Unable to commit the changes you made to the TCP/IP protocol to the system. \0" + 7343 "Unable to save the changes you made to the IPX protocol to the system. \0" + 7344 "Unable to display the TCP/IP properties.\0" + 7345 "Unable to display the IPX properties.\0" + 7346 "Unable to load TCP/IP properties from the system. \0" + 7347 "Unable to load IPX properties from the system. \0" + 7348 "Incoming Connections depend on the Routing and Remote Access service which was unable to start. For more information, check the system event log.\0" + 7349 "Unable to allow the editing of networking components at this time because they are currently being modified elsewhere.\0" + 7350 "The new user you entered was not added to the local user database because the name or password entered violated a system policy (it was too large, too small, or ill-formed). \0" + 7351 "The system is unable to delete the requested user. \0" + 7352 "Unable to remove the selected network component because it is in use.\0" + 7353 "Incoming Connections Warning\0" + 7354 "Any users that you delete will be permanently removed from the system even if cancel is pressed. Are you sure you want to permanently remove %s? \0" + 7355 "You are about to switch to a system management console. This Incoming Connections property sheet will be closed and any changes you may have made will be committed to the system. Is it ok to continue?\0" + 7356 "Your Network Mask value has been changed. A zero bit in a mask can only be followed by other zero bits. For example, a Network Mask value, expressed in decimal dotted notation, of 255.255.0.0, is valid, but 255.0.255.0 is not. \n\0" + 7357 "User Permissions\0" + 7358 "You can specify the users who can connect to this computer.\0" + 7359 "Devices for Incoming Connections\0" + 7360 "You can choose the devices your computer uses to accept incoming connections.\0" + 7361 "Incoming Virtual Private Network (VPN) Connection\0" + 7362 "Another computer can connect to yours through a VPN connection\0" + 7363 "Networking Software\0" + 7364 "Networking software allows this computer to accept connections from other kinds of computers.\0" + 7365 "Completing the New Connection Wizard\0" + 7366 " \0" + 7367 "Incoming Connections\0" + 7371 "No hardware capable of accepting calls is installed.\0" + 7372 " \0" + 7373 "Assign specified &network number:\0" + 7374 "Assign &network numbers sequentially from:\0" + 7375 "New User\0" + 7376 "Connection Device\0" + 7377 "What device do you want to use to make this connection?\0" + 7378 "No devices capable of accepting direct connections are currently installed.\0" + 7379 "New Incoming Connection Warning\0" + 7380 "Because this Win 2000 Server belongs to or controls a domain, you must use the Routing and Remote Access system console to configure this machine to receive incoming connections. Cancel changes and switch to this console?\n\0" + 7381 "A&ssign network number automatically\0" + 7382 "A&ssign network numbers automatically\0" + 7383 "Incoming Connections can not issue the ipx network numbers 00000000 or FFFFFFFF. Please either change the assigned network numbers or use automatic network number assignment.\0" + 7384 "to\0" + 7385 "Communications Port (%s)\0" + 7386 "Network Connections does not display some specialized options for inbound connections that have been set using the Local User Manager or Remote Access Policy consoles. For complete and correct information on incoming connections, you will need to use these consoles.\0" + 7387 "The user callback mode you have selected requires you to enter a valid callback number.\0" + 7388 "ReactOS must reboot to complete the operation. Is it ok to reboot now?\0" + 7389 "The currently selected device has no configuration options available.\0" + 7390 "Invalid Range\0" + 7391 "You have requested that '%1' be disabled for Incoming Connections. In order to disable this, you must stop the 'Server' service. Once stopped, any shared directories or printers on this computer will no longer be available to any other computer. Do you want to bring up a system console that will allow you to stop the 'Server' service?\r\n\nUnder Computer Management, click System Tools and then click Services. In the right pane, right-click Server and click stop.\0" + 7392 "This serial port is not enabled for use in a direct connection to another computer. It will be enabled after you complete this wizard. You can then configure the port speed and other properties by right-clicking the icon for this connection and selecting Properties.\n\0" + 7393 "Incoming Connections\0" + 7394 "The IP address pool you've entered is invalid.\0" + 7395 "The mask provided is invalid.\0" + 7396 "The start address entered for the TCP/IP pool is invalid. It must lie between 1.0.0.0 and 224.0.0.0 and it must not be in the form 127.x.x.x.\0" + 7397 "The TCP/IP pool entered is invalid because the address is more specific than the mask.\0" + 7398 "The start address must be less than the end address.\0" + 7399 "The Routing and Remote Access Service is in the process of stopping. Until it stops, the Incoming Connections option is not available. Please wait a few moments and retry.\0" + 7400 "%s (%s)\0" + 7401 "%s (%d channels)\0" + 7402 "Incoming Connection VPN (PPTP)\0" + 7403 "Incoming Connection VPN (L2TP)\0" + 7404 "IP Security (IKE)\0" + 7405 "127.0.0.1\0" + 7406 "You do not have sufficient privileges to set up Incoming Connections\0" +29900 "Cannot load the Remote Access Connection Manager service.\0" +29901 "Cannot load the file MPRAPI.DLL in the system32 directory.\0" +END diff --git a/dll/win32/rasdlg/rasdlg.rc b/dll/win32/rasdlg/rasdlg.rc index 292b0aa0095..028dca1dc22 100644 --- a/dll/win32/rasdlg/rasdlg.rc +++ b/dll/win32/rasdlg/rasdlg.rc @@ -44,6 +44,9 @@ #ifdef LANGUAGE_EN_US #include "lang/en-US.rc" #endif +#ifdef LANGUAGE_HE_IL + #include "lang/he-IL.rc" +#endif #ifdef LANGUAGE_NB_NO #include "lang/no-NO.rc" #endif diff --git a/dll/win32/samlib/samlib.c b/dll/win32/samlib/samlib.c index be6b3541808..74122acade1 100644 --- a/dll/win32/samlib/samlib.c +++ b/dll/win32/samlib/samlib.c @@ -31,6 +31,16 @@ WINE_DEFAULT_DEBUG_CHANNEL(samlib); +NTSTATUS +WINAPI +SystemFunction006(LPCSTR password, + LPSTR hash); + +NTSTATUS +WINAPI +SystemFunction007(PUNICODE_STRING string, + LPBYTE hash); + /* GLOBALS *******************************************************************/ @@ -1594,11 +1604,70 @@ SamSetInformationUser(IN SAM_HANDLE UserHandle, IN USER_INFORMATION_CLASS UserInformationClass, IN PVOID Buffer) { + PSAMPR_USER_SET_PASSWORD_INFORMATION PasswordBuffer; + SAMPR_USER_INTERNAL1_INFORMATION Internal1Buffer; + OEM_STRING LmPwdString; + CHAR LmPwdBuffer[15]; NTSTATUS Status; TRACE("SamSetInformationUser(%p %lu %p)\n", UserHandle, UserInformationClass, Buffer); + if (UserInformationClass == UserSetPasswordInformation) + { + PasswordBuffer = (PSAMPR_USER_SET_PASSWORD_INFORMATION)Buffer; + + /* Calculate the NT hash value of the passord */ + Status = SystemFunction007((PUNICODE_STRING)&PasswordBuffer->Password, + (LPBYTE)&Internal1Buffer.EncryptedNtOwfPassword); + if (!NT_SUCCESS(Status)) + { + TRACE("SystemFunction007 failed (Status 0x%08lx)\n", Status); + return Status; + } + + Internal1Buffer.NtPasswordPresent = TRUE; + Internal1Buffer.LmPasswordPresent = FALSE; + + /* Build the LM password */ + LmPwdString.Length = 15; + LmPwdString.MaximumLength = 15; + LmPwdString.Buffer = LmPwdBuffer; + ZeroMemory(LmPwdString.Buffer, LmPwdString.MaximumLength); + + Status = RtlUpcaseUnicodeStringToOemString(&LmPwdString, + (PUNICODE_STRING)&PasswordBuffer->Password, + FALSE); + if (NT_SUCCESS(Status)) + { + /* Calculate the LM hash value of the password */ + Status = SystemFunction006(LmPwdString.Buffer, + (LPSTR)&Internal1Buffer.EncryptedLmOwfPassword); + if (NT_SUCCESS(Status)) + Internal1Buffer.LmPasswordPresent = TRUE; + } + + Internal1Buffer.PasswordExpired = PasswordBuffer->PasswordExpired; + + RpcTryExcept + { + Status = SamrSetInformationUser((SAMPR_HANDLE)UserHandle, + UserInternal1Information, + (PVOID)&Internal1Buffer); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + Status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + if (!NT_SUCCESS(Status)) + { + TRACE("SamrSetInformation() failed (Status 0x%08lx)\n", Status); + return Status; + } + } + RpcTryExcept { Status = SamrSetInformationUser((SAMPR_HANDLE)UserHandle, diff --git a/dll/win32/samsrv/CMakeLists.txt b/dll/win32/samsrv/CMakeLists.txt index f242a36a4a5..101748a9f2f 100644 --- a/dll/win32/samsrv/CMakeLists.txt +++ b/dll/win32/samsrv/CMakeLists.txt @@ -22,9 +22,9 @@ list(APPEND SOURCE ${CMAKE_CURRENT_BINARY_DIR}/sam_s.c) add_library(samsrv SHARED ${SOURCE}) -set_module_type(samsrv win32dll ENTRYPOINT 0 UNICODE) +set_module_type(samsrv win32dll UNICODE) target_link_libraries(samsrv wine ${PSEH_LIB}) -add_importlibs(samsrv rpcrt4 advapi32 kernel32 ntdll) +add_importlibs(samsrv msvcrt rpcrt4 advapi32 kernel32 ntdll) add_dependencies(samsrv psdk) add_cd_file(TARGET samsrv DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/samsrv/samrpc.c b/dll/win32/samsrv/samrpc.c index 687956620d5..ead3344d7c9 100644 --- a/dll/win32/samsrv/samrpc.c +++ b/dll/win32/samsrv/samrpc.c @@ -2165,6 +2165,7 @@ SamrCreateUserInDomain(IN SAMPR_HANDLE DomainHandle, /* Initialize fixed user data */ memset(&FixedUserData, 0, sizeof(SAM_USER_FIXED_DATA)); FixedUserData.Version = 1; + FixedUserData.Reserved = 0; FixedUserData.LastLogon.QuadPart = 0; FixedUserData.LastLogoff.QuadPart = 0; FixedUserData.PasswordLastSet.QuadPart = 0; @@ -2176,6 +2177,12 @@ SamrCreateUserInDomain(IN SAMPR_HANDLE DomainHandle, FixedUserData.UserAccountControl = USER_ACCOUNT_DISABLED | USER_PASSWORD_NOT_REQUIRED | USER_NORMAL_ACCOUNT; + FixedUserData.CountryCode = 0; + FixedUserData.CodePage = 0; + FixedUserData.BadPasswordCount = 0; + FixedUserData.LogonCount = 0; + FixedUserData.AdminCount = 0; + FixedUserData.OperatorCount = 0; /* Set fixed user data attribute */ Status = SampSetObjectAttribute(UserObject, @@ -2309,7 +2316,58 @@ SamrCreateUserInDomain(IN SAMPR_HANDLE DomainHandle, return Status; } - /* FIXME: Set default user attributes */ + /* FIXME: Set LogonHours attribute*/ + /* FIXME: Set Groups attribute*/ + + /* Set LMPwd attribute*/ + Status = SampSetObjectAttribute(UserObject, + L"LMPwd", + REG_BINARY, + NULL, + 0); + if (!NT_SUCCESS(Status)) + { + TRACE("failed with status 0x%08lx\n", Status); + return Status; + } + + /* Set NTPwd attribute*/ + Status = SampSetObjectAttribute(UserObject, + L"NTPwd", + REG_BINARY, + NULL, + 0); + if (!NT_SUCCESS(Status)) + { + TRACE("failed with status 0x%08lx\n", Status); + return Status; + } + + /* Set LMPwdHistory attribute*/ + Status = SampSetObjectAttribute(UserObject, + L"LMPwdHistory", + REG_BINARY, + NULL, + 0); + if (!NT_SUCCESS(Status)) + { + TRACE("failed with status 0x%08lx\n", Status); + return Status; + } + + /* Set NTPwdHistory attribute*/ + Status = SampSetObjectAttribute(UserObject, + L"NTPwdHistory", + REG_BINARY, + NULL, + 0); + if (!NT_SUCCESS(Status)) + { + TRACE("failed with status 0x%08lx\n", Status); + return Status; + } + + /* FIXME: Set SecDesc attribute*/ if (NT_SUCCESS(Status)) { @@ -5985,6 +6043,79 @@ done: } +static NTSTATUS +SampQueryUserInternal1(PSAM_DB_OBJECT UserObject, + PSAMPR_USER_INFO_BUFFER *Buffer) +{ + PSAMPR_USER_INFO_BUFFER InfoBuffer = NULL; + ULONG Length = 0; + NTSTATUS Status = STATUS_SUCCESS; + + *Buffer = NULL; + + InfoBuffer = midl_user_allocate(sizeof(SAMPR_USER_INFO_BUFFER)); + if (InfoBuffer == NULL) + return STATUS_INSUFFICIENT_RESOURCES; + + /* Get the NT password */ + Length = 0; + SampGetObjectAttribute(UserObject, + L"NTPwd", + NULL, + NULL, + &Length); + + if (Length == sizeof(ENCRYPTED_NT_OWF_PASSWORD)) + { + Status = SampGetObjectAttribute(UserObject, + L"NTPwd", + NULL, + (PVOID)&InfoBuffer->Internal1.EncryptedNtOwfPassword, + &Length); + if (!NT_SUCCESS(Status)) + goto done; + } + + InfoBuffer->Internal1.NtPasswordPresent = (Length == sizeof(ENCRYPTED_NT_OWF_PASSWORD)); + + /* Get the LM password */ + Length = 0; + SampGetObjectAttribute(UserObject, + L"LMPwd", + NULL, + NULL, + &Length); + + if (Length == sizeof(ENCRYPTED_LM_OWF_PASSWORD)) + { + Status = SampGetObjectAttribute(UserObject, + L"LMPwd", + NULL, + (PVOID)&InfoBuffer->Internal1.EncryptedLmOwfPassword, + &Length); + if (!NT_SUCCESS(Status)) + goto done; + } + + InfoBuffer->Internal1.LmPasswordPresent = (Length == sizeof(ENCRYPTED_LM_OWF_PASSWORD)); + + InfoBuffer->Internal1.PasswordExpired = FALSE; + + *Buffer = InfoBuffer; + +done: + if (!NT_SUCCESS(Status)) + { + if (InfoBuffer != NULL) + { + midl_user_free(InfoBuffer); + } + } + + return Status; +} + + static NTSTATUS SampQueryUserParameters(PSAM_DB_OBJECT UserObject, PSAMPR_USER_INFO_BUFFER *Buffer) @@ -6078,6 +6209,10 @@ SamrQueryInformationUser(IN SAMPR_HANDLE UserHandle, USER_READ_ACCOUNT; break; + case UserInternal1Information: + DesiredAccess = 0; + break; + default: return STATUS_INVALID_INFO_CLASS; } @@ -6174,7 +6309,10 @@ SamrQueryInformationUser(IN SAMPR_HANDLE UserHandle, Buffer); break; -// case UserInternal1Information: + case UserInternal1Information: + Status = SampQueryUserInternal1(UserObject, + Buffer); + break; case UserParametersInformation: Status = SampQueryUserParameters(UserObject, @@ -6387,6 +6525,61 @@ done: } +static NTSTATUS +SampSetUserInternal1(PSAM_DB_OBJECT UserObject, + PSAMPR_USER_INFO_BUFFER Buffer) +{ + SAM_USER_FIXED_DATA FixedData; + ULONG Length = 0; + NTSTATUS Status = STATUS_SUCCESS; + + /* FIXME: Decrypt NT password */ + /* FIXME: Decrypt LM password */ + + Status = SampSetUserPassword(UserObject, + &Buffer->Internal1.EncryptedNtOwfPassword, + Buffer->Internal1.NtPasswordPresent, + &Buffer->Internal1.EncryptedLmOwfPassword, + Buffer->Internal1.LmPasswordPresent); + if (!NT_SUCCESS(Status)) + goto done; + + /* Get the fixed user attributes */ + Length = sizeof(SAM_USER_FIXED_DATA); + Status = SampGetObjectAttribute(UserObject, + L"F", + NULL, + (PVOID)&FixedData, + &Length); + if (!NT_SUCCESS(Status)) + goto done; + + if (Buffer->Internal1.PasswordExpired) + { + /* The pasword was last set ages ago */ + FixedData.PasswordLastSet.LowPart = 0; + FixedData.PasswordLastSet.HighPart = 0; + } + else + { + /* The pasword was last set right now */ + Status = NtQuerySystemTime(&FixedData.PasswordLastSet); + if (!NT_SUCCESS(Status)) + goto done; + } + + /* Set the fixed user attributes */ + Status = SampSetObjectAttribute(UserObject, + L"F", + REG_BINARY, + &FixedData, + Length); + +done: + return Status; +} + + static NTSTATUS SampSetUserAll(PSAM_DB_OBJECT UserObject, PSAMPR_USER_INFO_BUFFER Buffer) @@ -6604,6 +6797,7 @@ SamrSetInformationUser(IN SAMPR_HANDLE UserHandle, break; case UserSetPasswordInformation: + case UserInternal1Information: DesiredAccess = USER_FORCE_PASSWORD_CHANGE; break; @@ -6749,7 +6943,10 @@ SamrSetInformationUser(IN SAMPR_HANDLE UserHandle, Buffer); break; -// case UserInternal1Information: + case UserInternal1Information: + Status = SampSetUserInternal1(UserObject, + Buffer); + break; case UserParametersInformation: Status = SampSetObjectAttribute(UserObject, @@ -6811,7 +7008,7 @@ SamrGetGroupsForUser(IN SAMPR_HANDLE UserHandle, TRACE("SamrGetGroupsForUser(%p %p)\n", UserHandle, Groups); - /* Validate the domain handle */ + /* Validate the user handle */ Status = SampValidateDbObject(UserHandle, SamDbUserObject, USER_LIST_GROUPS, @@ -6937,16 +7134,89 @@ SamrTestPrivateFunctionsUser(IN SAMPR_HANDLE UserHandle) return STATUS_NOT_IMPLEMENTED; } + /* Function 44 */ NTSTATUS NTAPI SamrGetUserDomainPasswordInformation(IN SAMPR_HANDLE UserHandle, OUT PUSER_DOMAIN_PASSWORD_INFORMATION PasswordInformation) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + SAM_DOMAIN_FIXED_DATA DomainFixedData; + SAM_USER_FIXED_DATA UserFixedData; + PSAM_DB_OBJECT DomainObject; + PSAM_DB_OBJECT UserObject; + ULONG Length = 0; + NTSTATUS Status; + + TRACE("(%p %p)\n", + UserHandle, PasswordInformation); + + /* Validate the user handle */ + Status = SampValidateDbObject(UserHandle, + SamDbUserObject, + 0, + &UserObject); + if (!NT_SUCCESS(Status)) + { + TRACE("SampValidateDbObject failed with status 0x%08lx\n", Status); + return Status; + } + + /* Validate the domain object */ + Status = SampValidateDbObject((SAMPR_HANDLE)UserObject->ParentObject, + SamDbDomainObject, + DOMAIN_READ_PASSWORD_PARAMETERS, + &DomainObject); + if (!NT_SUCCESS(Status)) + { + TRACE("SampValidateDbObject failed with status 0x%08lx\n", Status); + return Status; + } + + /* Get fixed user data */ + Length = sizeof(SAM_USER_FIXED_DATA); + Status = SampGetObjectAttribute(UserObject, + L"F", + NULL, + (PVOID)&UserFixedData, + &Length); + if (!NT_SUCCESS(Status)) + { + TRACE("SampGetObjectAttribute failed with status 0x%08lx\n", Status); + return Status; + } + + if ((UserObject->RelativeId == DOMAIN_USER_RID_KRBTGT) || + (UserFixedData.UserAccountControl & (USER_INTERDOMAIN_TRUST_ACCOUNT | + USER_WORKSTATION_TRUST_ACCOUNT | + USER_SERVER_TRUST_ACCOUNT))) + { + PasswordInformation->MinPasswordLength = 0; + PasswordInformation->PasswordProperties = 0; + } + else + { + /* Get fixed domain data */ + Length = sizeof(SAM_DOMAIN_FIXED_DATA); + Status = SampGetObjectAttribute(DomainObject, + L"F", + NULL, + (PVOID)&DomainFixedData, + &Length); + if (!NT_SUCCESS(Status)) + { + TRACE("SampGetObjectAttribute failed with status 0x%08lx\n", Status); + return Status; + } + + PasswordInformation->MinPasswordLength = DomainFixedData.MinPasswordLength; + PasswordInformation->PasswordProperties = DomainFixedData.PasswordProperties; + } + + return STATUS_SUCCESS; } + /* Function 45 */ NTSTATUS NTAPI @@ -7158,8 +7428,8 @@ SamrCreateUser2InDomain(IN SAMPR_HANDLE DomainHandle, } /* Initialize fixed user data */ - memset(&FixedUserData, 0, sizeof(SAM_USER_FIXED_DATA)); FixedUserData.Version = 1; + FixedUserData.Reserved = 0; FixedUserData.LastLogon.QuadPart = 0; FixedUserData.LastLogoff.QuadPart = 0; FixedUserData.PasswordLastSet.QuadPart = 0; @@ -7171,6 +7441,12 @@ SamrCreateUser2InDomain(IN SAMPR_HANDLE DomainHandle, FixedUserData.UserAccountControl = USER_ACCOUNT_DISABLED | USER_PASSWORD_NOT_REQUIRED | AccountType; + FixedUserData.CountryCode = 0; + FixedUserData.CodePage = 0; + FixedUserData.BadPasswordCount = 0; + FixedUserData.LogonCount = 0; + FixedUserData.AdminCount = 0; + FixedUserData.OperatorCount = 0; /* Set fixed user data attribute */ Status = SampSetObjectAttribute(UserObject, @@ -7292,7 +7568,70 @@ SamrCreateUser2InDomain(IN SAMPR_HANDLE DomainHandle, return Status; } - /* FIXME: Set default user attributes */ + /* Set the Parameters attribute */ + Status = SampSetObjectAttribute(UserObject, + L"Parameters", + REG_SZ, + EmptyString.Buffer, + EmptyString.MaximumLength); + if (!NT_SUCCESS(Status)) + { + TRACE("failed with status 0x%08lx\n", Status); + return Status; + } + + /* FIXME: Set LogonHours attribute*/ + /* FIXME: Set Groups attribute*/ + + /* Set LMPwd attribute*/ + Status = SampSetObjectAttribute(UserObject, + L"LMPwd", + REG_BINARY, + NULL, + 0); + if (!NT_SUCCESS(Status)) + { + TRACE("failed with status 0x%08lx\n", Status); + return Status; + } + + /* Set NTPwd attribute*/ + Status = SampSetObjectAttribute(UserObject, + L"NTPwd", + REG_BINARY, + NULL, + 0); + if (!NT_SUCCESS(Status)) + { + TRACE("failed with status 0x%08lx\n", Status); + return Status; + } + + /* Set LMPwdHistory attribute*/ + Status = SampSetObjectAttribute(UserObject, + L"LMPwdHistory", + REG_BINARY, + NULL, + 0); + if (!NT_SUCCESS(Status)) + { + TRACE("failed with status 0x%08lx\n", Status); + return Status; + } + + /* Set NTPwdHistory attribute*/ + Status = SampSetObjectAttribute(UserObject, + L"NTPwdHistory", + REG_BINARY, + NULL, + 0); + if (!NT_SUCCESS(Status)) + { + TRACE("failed with status 0x%08lx\n", Status); + return Status; + } + + /* FIXME: Set SecDesc attribute*/ if (NT_SUCCESS(Status)) { diff --git a/dll/win32/samsrv/samsrv.h b/dll/win32/samsrv/samsrv.h index 662ad0c278f..a9bc13ed5ec 100644 --- a/dll/win32/samsrv/samsrv.h +++ b/dll/win32/samsrv/samsrv.h @@ -297,4 +297,11 @@ SampSetUserGroupAttributes(IN PSAM_DB_OBJECT DomainObject, IN ULONG GroupId, IN ULONG GroupAttributes); +NTSTATUS +SampSetUserPassword(IN PSAM_DB_OBJECT UserObject, + IN PENCRYPTED_NT_OWF_PASSWORD NtPassword, + IN BOOLEAN NtPasswordPresent, + IN PENCRYPTED_LM_OWF_PASSWORD LmPassword, + IN BOOLEAN LmPasswordPresent); + /* EOF */ diff --git a/dll/win32/samsrv/setup.c b/dll/win32/samsrv/setup.c index dae35f0034b..6f87a600fc0 100644 --- a/dll/win32/samsrv/setup.c +++ b/dll/win32/samsrv/setup.c @@ -232,11 +232,23 @@ SampCreateUserAccount(HKEY hDomainKey, HKEY hNamesKey = NULL; /* Initialize fixed user data */ - memset(&FixedUserData, 0, sizeof(SAM_USER_FIXED_DATA)); FixedUserData.Version = 1; - + FixedUserData.Reserved = 0; + FixedUserData.LastLogon.QuadPart = 0; + FixedUserData.LastLogoff.QuadPart = 0; + FixedUserData.PasswordLastSet.QuadPart = 0; + FixedUserData.AccountExpires.LowPart = MAXULONG; + FixedUserData.AccountExpires.HighPart = MAXLONG; + FixedUserData.LastBadPasswordTime.QuadPart = 0; FixedUserData.UserId = ulRelativeId; + FixedUserData.PrimaryGroupId = DOMAIN_GROUP_RID_USERS; FixedUserData.UserAccountControl = UserAccountControl; + FixedUserData.CountryCode = 0; + FixedUserData.CodePage = 0; + FixedUserData.BadPasswordCount = 0; + FixedUserData.LogonCount = 0; + FixedUserData.AdminCount = 0; + FixedUserData.OperatorCount = 0; swprintf(szAccountKeyName, L"Users\\%08lX", ulRelativeId); @@ -327,6 +339,43 @@ SampCreateUserAccount(HKEY hDomainKey, (LPVOID)lpEmptyString, sizeof(WCHAR)); + /* FIXME: Set LogonHours attribute*/ + /* FIXME: Set Groups attribute*/ + + /* Set LMPwd attribute*/ + RegSetValueEx(hAccountKey, + L"LMPwd", + 0, + REG_BINARY, + NULL, + 0); + + /* Set NTPwd attribute*/ + RegSetValueEx(hAccountKey, + L"NTPwd", + 0, + REG_BINARY, + NULL, + 0); + + /* Set LMPwdHistory attribute*/ + RegSetValueEx(hAccountKey, + L"LMPwdHistory", + 0, + REG_BINARY, + NULL, + 0); + + /* Set NTPwdHistory attribute*/ + RegSetValueEx(hAccountKey, + L"NTPwdHistory", + 0, + REG_BINARY, + NULL, + 0); + + /* FIXME: Set SecDesc attribute*/ + RegCloseKey(hAccountKey); } diff --git a/dll/win32/samsrv/user.c b/dll/win32/samsrv/user.c index 9d4767d3129..0aa392a4a4d 100644 --- a/dll/win32/samsrv/user.c +++ b/dll/win32/samsrv/user.c @@ -319,4 +319,203 @@ done: return Status; } + +NTSTATUS +SampSetUserPassword(IN PSAM_DB_OBJECT UserObject, + IN PENCRYPTED_NT_OWF_PASSWORD NtPassword, + IN BOOLEAN NtPasswordPresent, + IN PENCRYPTED_LM_OWF_PASSWORD LmPassword, + IN BOOLEAN LmPasswordPresent) +{ + PENCRYPTED_NT_OWF_PASSWORD NtHistory = NULL; + PENCRYPTED_LM_OWF_PASSWORD LmHistory = NULL; + ULONG NtHistoryLength = 0; + ULONG LmHistoryLength = 0; + ULONG CurrentHistoryLength; + ULONG MaxHistoryLength = 3; + ULONG Length = 0; + NTSTATUS Status; + + /* Get the size of the NT history */ + SampGetObjectAttribute(UserObject, + L"NTPwdHistory", + NULL, + NULL, + &Length); + + CurrentHistoryLength = Length / sizeof(ENCRYPTED_NT_OWF_PASSWORD); + if (CurrentHistoryLength < MaxHistoryLength) + { + NtHistoryLength = (CurrentHistoryLength + 1) * sizeof(ENCRYPTED_NT_OWF_PASSWORD); + } + else + { + NtHistoryLength = MaxHistoryLength * sizeof(ENCRYPTED_NT_OWF_PASSWORD); + } + + /* Allocate the history buffer */ + NtHistory = midl_user_allocate(NtHistoryLength); + if (NtHistory == NULL) + return STATUS_INSUFFICIENT_RESOURCES; + + if (Length > 0) + { + /* Get the history */ + Status = SampGetObjectAttribute(UserObject, + L"NTPwdHistory", + NULL, + NtHistory, + &Length); + if (!NT_SUCCESS(Status)) + goto done; + } + + /* Get the size of the LM history */ + Length = 0; + SampGetObjectAttribute(UserObject, + L"LMPwdHistory", + NULL, + NULL, + &Length); + + CurrentHistoryLength = Length / sizeof(ENCRYPTED_LM_OWF_PASSWORD); + if (CurrentHistoryLength < MaxHistoryLength) + { + LmHistoryLength = (CurrentHistoryLength + 1) * sizeof(ENCRYPTED_LM_OWF_PASSWORD); + } + else + { + LmHistoryLength = MaxHistoryLength * sizeof(ENCRYPTED_LM_OWF_PASSWORD); + } + + /* Allocate the history buffer */ + LmHistory = midl_user_allocate(LmHistoryLength); + if (LmHistory == NULL) + return STATUS_INSUFFICIENT_RESOURCES; + + if (Length > 0) + { + /* Get the history */ + Status = SampGetObjectAttribute(UserObject, + L"LMPwdHistory", + NULL, + LmHistory, + &Length); + if (!NT_SUCCESS(Status)) + goto done; + } + + /* Set the new password */ + if (NtPasswordPresent) + { + Status = SampSetObjectAttribute(UserObject, + L"NTPwd", + REG_BINARY, + (PVOID)NtPassword, + sizeof(ENCRYPTED_NT_OWF_PASSWORD)); + if (!NT_SUCCESS(Status)) + goto done; + } + else + { + Status = SampSetObjectAttribute(UserObject, + L"NTPwd", + REG_BINARY, + NULL, + 0); + if (!NT_SUCCESS(Status)) + goto done; + } + + if (LmPasswordPresent) + { + Status = SampSetObjectAttribute(UserObject, + L"LMPwd", + REG_BINARY, + (PVOID)LmPassword, + sizeof(ENCRYPTED_LM_OWF_PASSWORD)); + if (!NT_SUCCESS(Status)) + goto done; + } + else + { + Status = SampSetObjectAttribute(UserObject, + L"LMPwd", + REG_BINARY, + NULL, + 0); + if (!NT_SUCCESS(Status)) + goto done; + } + + /* Move the old passwords down by one entry */ + if (NtHistoryLength > sizeof(ENCRYPTED_NT_OWF_PASSWORD)) + { + MoveMemory(&(NtHistory[1]), + &(NtHistory[0]), + NtHistoryLength - sizeof(ENCRYPTED_NT_OWF_PASSWORD)); + } + + /* Add the new password on top of the history */ + if (NtPasswordPresent) + { + CopyMemory(&(NtHistory[0]), + NtPassword, + sizeof(ENCRYPTED_NT_OWF_PASSWORD)); + } + else + { + ZeroMemory(&(NtHistory[0]), + sizeof(ENCRYPTED_NT_OWF_PASSWORD)); + } + + /* Set the history */ + Status = SampSetObjectAttribute(UserObject, + L"NTPwdHistory", + REG_BINARY, + (PVOID)NtHistory, + NtHistoryLength); + if (!NT_SUCCESS(Status)) + goto done; + + /* Move the old passwords down by one entry */ + if (LmHistoryLength > sizeof(ENCRYPTED_LM_OWF_PASSWORD)) + { + MoveMemory(&(LmHistory[1]), + &(LmHistory[0]), + LmHistoryLength - sizeof(ENCRYPTED_LM_OWF_PASSWORD)); + } + + /* Add the new password on top of the history */ + if (LmPasswordPresent) + { + CopyMemory(&(LmHistory[0]), + LmPassword, + sizeof(ENCRYPTED_LM_OWF_PASSWORD)); + } + else + { + ZeroMemory(&(LmHistory[0]), + sizeof(ENCRYPTED_LM_OWF_PASSWORD)); + } + + /* Set the LM password history */ + Status = SampSetObjectAttribute(UserObject, + L"LMPwdHistory", + REG_BINARY, + (PVOID)LmHistory, + LmHistoryLength); + if (!NT_SUCCESS(Status)) + goto done; + +done: + if (NtHistory != NULL) + midl_user_free(NtHistory); + + if (LmHistory != NULL) + midl_user_free(LmHistory); + + return Status; +} + /* EOF */ diff --git a/dll/win32/serialui/lang/he-IL.rc b/dll/win32/serialui/lang/he-IL.rc new file mode 100644 index 00000000000..f642a42ff4c --- /dev/null +++ b/dll/win32/serialui/lang/he-IL.rc @@ -0,0 +1,41 @@ +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + +STRINGTABLE LOADONCALL DISCARDABLE +BEGIN + IDS_EVENPARITY, "זוגי" + IDS_MARKPARITY, "סמן" + IDS_NOPARITY, "No parity" + IDS_ODDPARITY, "איזוגי" + IDS_SPACEPARITY, "רווח" + + IDS_ONESTOPBIT, "1 סיבית עצרה" + IDS_ONE5STOPBITS, "1.5 סיביות עצירה" + IDS_TWOSTOPBITS, "2 סיביות עצירה" + + IDS_FC_NO, "לא" + IDS_FC_CTSRTS, "CTS/RTS" + IDS_FC_XONXOFF, "XON/XOFF" + + IDS_TITLE, "מאפיינים עבור %s" +END + +IDD_COMMDLG DIALOGEX 6,5,222,175 +FONT 8, "MS Shell Dlg" +STYLE 0x10C80080 +EXSTYLE 0x00000001 +BEGIN + CONTROL "",IDC_GRP1,"Button",0x50000007,6,5,210,146,0x00000000 + CONTROL "אישור",IDC_OKBTN,"Button",0x50010000,98,156,56,13,0x00000000 + CONTROL "ביטול",IDC_CANCELBTN,"Button",0x50010000,158,156,56,13,0x00000000 + CONTROL "Baud rate:",IDC_STC1,"Static",0x50000000,24,31,42,9,0x00000000 + CONTROL "Byte size:",IDC_STC2,"Static",0x50000000,24,53,42,9,0x00000000 + CONTROL "Parity:",IDC_STC3,"Static",0x50000000,24,73,42,9,0x00000000 + CONTROL "סיביות עצירה:",IDC_STC4,"Static",0x50000000,24,96,42,9,0x00000000 + CONTROL "בקרת זרימה:",IDC_STC5,"Static",0x50000000,24,120,42,9,0x00000000 + CONTROL "",IDC_BAUDRATE,"ComboBox",0x50210003,98,29,100,50,0x00000000 + CONTROL "",IDC_BYTESIZE,"ComboBox",0x50210003,98,49,100,50,0x00000000 + CONTROL "",IDC_PARITY,"ComboBox",0x50210003,98,72,100,50,0x00000000 + CONTROL "",IDC_STOPBITS,"ComboBox",0x50210003,98,94,100,50,0x00000000 + CONTROL "",IDC_FLOW,"ComboBox",0x50210003,98,116,100,50,0x00000000 +END + diff --git a/dll/win32/serialui/serialui.rc b/dll/win32/serialui/serialui.rc index fdab6b60a83..1ac7095cc20 100644 --- a/dll/win32/serialui/serialui.rc +++ b/dll/win32/serialui/serialui.rc @@ -30,6 +30,9 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #ifdef LANGUAGE_FR_FR #include "lang/fr-FR.rc" #endif +#ifdef LANGUAGE_HE_IL + #include "lang/he-IL.rc" +#endif #ifdef LANGUAGE_ID_ID #include "lang/id-ID.rc" #endif diff --git a/dll/win32/setupapi/lang/he-IL.rc b/dll/win32/setupapi/lang/he-IL.rc new file mode 100644 index 00000000000..f76efa809df --- /dev/null +++ b/dll/win32/setupapi/lang/he-IL.rc @@ -0,0 +1,43 @@ +/* + * Hebrew resources for SETUPAPI + * + * Copyright 2001 Andreas Mohr + * + * Translated by Baruch Rutman + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + +COPYFILEDLGORD DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 20, 20, 208, 105 +STYLE DS_MODALFRAME | DS_SHELLFONT | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "מעתיק קבצים..." +FONT 8, "MS Shell Dlg" +BEGIN + PUSHBUTTON "ביטול", IDCANCEL, 79, 84, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP + LTEXT "מקור:", -1, 7, 7, 77, 11, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "", SOURCESTRORD, 7, 18, 194, 11, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "יעד:", -1, 7, 30, 77, 11, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "", DESTSTRORD, 7, 41, 194, 22, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "", PROGRESSORD, "setupx_progress", 7, 63, 194, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_QUERY_REBOOT_TEXT "צריך להפעיל מחדש את מחשבך כדי לסיים את ההתקנה. האם ברצונך להמשיך?" + IDS_QUERY_REBOOT_CAPTION "הפעלה מחדש" + IDS_INF_FILE "מידע התקנה" +END diff --git a/dll/win32/setupapi/res/Icon_Licence/Tango.txt b/dll/win32/setupapi/res/Icon_Licence/Tango.txt index a66ed249c12..8ec7f72dd99 100644 --- a/dll/win32/setupapi/res/Icon_Licence/Tango.txt +++ b/dll/win32/setupapi/res/Icon_Licence/Tango.txt @@ -44,4 +44,4 @@ released under Creative Commons Attribution-ShareAlike 2.5 License. Please see COPYING for details 20.ico -23.ico \ No newline at end of file +23.ico diff --git a/dll/win32/setupapi/setupapi.rc b/dll/win32/setupapi/setupapi.rc index e07a5cef3a6..785d012ebe2 100644 --- a/dll/win32/setupapi/setupapi.rc +++ b/dll/win32/setupapi/setupapi.rc @@ -88,6 +88,9 @@ // UTF-8 #pragma code_page(65001) +#ifdef LANGUAGE_HE_IL + #include "lang/he-IL.rc" +#endif #ifdef LANGUAGE_PL_PL #include "lang/pl-PL.rc" #endif diff --git a/dll/win32/shdoclc/He.rc b/dll/win32/shdoclc/He.rc new file mode 100644 index 00000000000..b337fb573c3 --- /dev/null +++ b/dll/win32/shdoclc/He.rc @@ -0,0 +1,250 @@ +/* + * Copyright 2005-2006 Jacek Caban + * + * Translated by Baruch Rutman + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "shdoclc.h" + +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + +STRINGTABLE +{ + IDS_MESSAGE_BOX_TITLE, "Wine סייר האינטרנט" +} + +STRINGTABLE +{ + IDS_PRINT_HEADER_TEMPLATE "&w&bעמוד &p" /* FIXME: should be "&w&bPage &p of &P" */ + IDS_PRINT_FOOTER_TEMPLATE "&u&b&d" +} + +IDR_BROWSE_CONTEXT_MENU MENU +{ + POPUP "Default" + { + MENUITEM "חזור", IDM_GOBACKWARD + MENUITEM "קדימה", IDM_GOFORWARD + MENUITEM SEPARATOR + MENUITEM "שמור רקע בשם...", IDM_SAVEBACKGROUND + MENUITEM "הגדר כרקע", IDM_SETWALLPAPER + MENUITEM "העתק רקע", IDM_COPYBACKGROUND + MENUITEM "הגדר כפריט שולחן עבודה", IDM_SETDESKTOPITEM + MENUITEM SEPARATOR + MENUITEM "בחר הכל", IDM_SELECTALL + MENUITEM "הדבק", IDM_PASTE + MENUITEM SEPARATOR + MENUITEM "צור קיצור דרך", IDM_CREATESHORTCUT + MENUITEM "הוסף למועדפים", IDM_ADDFAVORITES + MENUITEM "ראה מקור", IDM_VIEWSOURCE + MENUITEM SEPARATOR + MENUITEM "קידוד", IDM_LANGUAGE + MENUITEM SEPARATOR + MENUITEM "הדפס", IDM_PRINT + MENUITEM "רענן", _IDM_REFRESH + MENUITEM SEPARATOR + MENUITEM SEPARATOR + MENUITEM "מאפיינים", IDM_PROPERTIES + } + + POPUP "Image" + { + MENUITEM "פתח קישור", IDM_FOLLOWLINKC + MENUITEM "פתח קישור בחלון חדש", IDM_FOLLOWLINKN + MENUITEM "שמירת יעד בשם...", IDM_SAVETARGET + MENUITEM "הדפס יעד", IDM_PRINTTARGET + MENUITEM SEPARATOR + MENUITEM "S&how Picture", IDM_SHOWPICTURE + MENUITEM "&Save Picture As...", IDM_SAVEPICTURE + MENUITEM "&E-mail Picture...", IDM_MP_EMAILPICTURE + MENUITEM "Pr&int Picture...", IDM_MP_PRINTPICTURE + MENUITEM "&Go to My Pictures", IDM_MP_MYPICS + MENUITEM "Set as Back&ground", IDM_SETWALLPAPER + MENUITEM "Set as &Desktop Item...", IDM_SETDESKTOPITEM + MENUITEM SEPARATOR + MENUITEM "גזור", IDM_CUT + MENUITEM "העתק", IDM_COPY + MENUITEM "העתק קיצור דרך", IDM_COPYSHORTCUT + MENUITEM "הדבק", IDM_PASTE + MENUITEM SEPARATOR + MENUITEM "הוסף למועדפים...", IDM_ADDFAVORITES + MENUITEM SEPARATOR + MENUITEM SEPARATOR + MENUITEM "מאפיינים", IDM_PROPERTIES + } + + POPUP "Control" + { + MENUITEM "ביטול", IDM_UNDO + MENUITEM SEPARATOR + MENUITEM "גזור", IDM_CUT + MENUITEM "העתק", IDM_COPY + MENUITEM "הדבק", IDM_PASTE + MENUITEM "מחק", IDM_DELETE + MENUITEM SEPARATOR + MENUITEM SEPARATOR + MENUITEM "בחר הכל", IDM_SELECTALL + } + + POPUP "Table" + { + POPUP "&Select" + { + MENUITEM "תא", IDM_CELLSELECT + MENUITEM "שורה", IDM_ROWSELECT + MENUITEM "עמודה", IDM_COLUMNSELECT + MENUITEM "טבלה", IDM_TABLESELECT + } + MENUITEM SEPARATOR + MENUITEM SEPARATOR + MENUITEM "&Cell Properties", IDM_CELLPROPERTIES + MENUITEM "&Table Properties", IDM_TABLEPROPERTIES + } + + POPUP "1DSite Select" + { + MENUITEM "גזור", IDM_CUT + MENUITEM "העתק", IDM_COPY + MENUITEM "הדבק", IDM_PASTE + MENUITEM "בחר הכל", IDM_SELECTALL + MENUITEM "הדפס", IDM_PRINT + MENUITEM SEPARATOR + } + + POPUP "Anchor" + { + MENUITEM "פתח", IDM_FOLLOWLINKC + MENUITEM "פתח בחלון חדש", IDM_FOLLOWLINKN + MENUITEM "שמור יעד בשם...", IDM_SAVETARGET + MENUITEM "הדפס יעד", IDM_PRINTTARGET + MENUITEM SEPARATOR + MENUITEM "גזור", IDM_CUT + MENUITEM "העתק", IDM_COPY + MENUITEM "העתק קיצור דרך", IDM_COPYSHORTCUT + MENUITEM "הדבק", IDM_PASTE + MENUITEM SEPARATOR + MENUITEM "הוסף למועדפים...", IDM_ADDFAVORITES + MENUITEM SEPARATOR + MENUITEM SEPARATOR + MENUITEM "מאפיינים", IDM_PROPERTIES + } + + POPUP "Context Unknown" + { + MENUITEM SEPARATOR + } + + POPUP "DYNSRC Image" + { + MENUITEM "פתח קישור", IDM_FOLLOWLINKC + MENUITEM "פתח קישור בחלון חדש", IDM_FOLLOWLINKN + MENUITEM "שמירת יעד בשם...", IDM_SAVETARGET + MENUITEM "הדפסת יעד", IDM_PRINTTARGET + MENUITEM SEPARATOR + MENUITEM "הצג תמונה", IDM_SHOWPICTURE + MENUITEM "שמירת וידאו בשם...", IDM_SAVEPICTURE + MENUITEM "קבע כרקע", IDM_SETWALLPAPER + MENUITEM "קבע כפריט שולחן עבודה...", IDM_SETDESKTOPITEM + MENUITEM SEPARATOR + MENUITEM "גזור", IDM_CUT + MENUITEM "העתק", IDM_COPY + MENUITEM "העתק קיצור דרך", IDM_COPYSHORTCUT + MENUITEM "הדבק", IDM_PASTE + MENUITEM SEPARATOR + MENUITEM "הוסף למועדפים...", IDM_ADDFAVORITES + MENUITEM SEPARATOR + MENUITEM SEPARATOR + MENUITEM "נגן", IDM_DYNSRCPLAY + MENUITEM "עצור", IDM_DYNSRCSTOP + MENUITEM "מאפיינים", IDM_PROPERTIES + } + + POPUP "ART Image" + { + MENUITEM "פתח קישור", IDM_FOLLOWLINKC + MENUITEM "פתיחת קישור בחלון חדש", IDM_FOLLOWLINKN + MENUITEM "שמירת יעד בשם...", IDM_SAVETARGET + MENUITEM "הדפס יעד", IDM_PRINTTARGET + MENUITEM SEPARATOR + MENUITEM "הצג תמונה", IDM_SHOWPICTURE + MENUITEM "שמירת תמונה בשם...", IDM_SAVEPICTURE + MENUITEM "קבע כרקע שולחן העבודה", IDM_SETWALLPAPER + MENUITEM "קבע כפריט בשולחן העבודה...", IDM_SETDESKTOPITEM + MENUITEM SEPARATOR + MENUITEM "גזור", IDM_CUT + MENUITEM "העתק", IDM_COPY + MENUITEM "העתק קיצור דרך", IDM_COPYSHORTCUT + MENUITEM "הדבק", IDM_PASTE + MENUITEM SEPARATOR + MENUITEM "הוספה למועדפים...", IDM_ADDFAVORITES + MENUITEM SEPARATOR + MENUITEM "נגינה", IDM_IMGARTPLAY + MENUITEM "עצירה", IDM_IMGARTSTOP + MENUITEM "הרצה לאחור", IDM_IMGARTREWIND + MENUITEM SEPARATOR + MENUITEM SEPARATOR + MENUITEM "מאפיינים", IDM_PROPERTIES + } + + POPUP "Debug" + { + MENUITEM "Trace Tags", IDM_TRACETAGS + MENUITEM "Resource Failures", IDM_RESOURCEFAILURES + MENUITEM "Dump Tracking Info", IDM_DUMPTRACKINGINFO + MENUITEM "Debug Break", IDM_DEBUGBREAK + MENUITEM "Debug View", IDM_DEBUGVIEW + MENUITEM "Dump Tree", IDM_DUMPTREE + MENUITEM "Dump Lines", IDM_DUMPLINES + MENUITEM "Dump DisplayTree", IDM_DUMPDISPLAYTREE + MENUITEM "Dump FormatCaches", IDM_DUMPFORMATCACHES + MENUITEM "Dump LayoutRects", IDM_DUMPLAYOUTRECTS + MENUITEM "Memory Monitor", IDM_MEMORYMONITOR + MENUITEM "Performance Meters", IDM_PERFORMANCEMETERS + MENUITEM "Save HTML", IDM_SAVEHTML + MENUITEM SEPARATOR + MENUITEM "&Browse View", IDM_BROWSEMODE + MENUITEM "&Edit View", IDM_EDITMODE + } + + POPUP "Vertical Scrollbar" + { + MENUITEM "גלול לכאן", IDM_SCROLL_HERE + MENUITEM SEPARATOR + MENUITEM "למעלה", IDM_SCROLL_TOP + MENUITEM "למטה", IDM_SCROLL_BOTTOM + MENUITEM SEPARATOR + MENUITEM "Page Up", IDM_SCROLL_PAGEUP + MENUITEM "Page Down", IDM_SCROLL_PAGEDOWN + MENUITEM SEPARATOR + MENUITEM "גלול למעלה", IDM_SCROLL_UP + MENUITEM "גלול למטה", IDM_SCROLL_DOWN + } + + POPUP "Horizontal Scrollbar" + { + MENUITEM "גלול לכאן", IDM_SCROLL_HERE + MENUITEM SEPARATOR + MENUITEM "קצה שמאלי", IDM_SCROLL_LEFTEDGE + MENUITEM "קצה ימני", IDM_SCROLL_RIGHTEDGE + MENUITEM SEPARATOR + MENUITEM "Page Left", IDM_SCROLL_PAGELEFT + MENUITEM "Page Right", IDM_SCROLL_PAGERIGHT + MENUITEM SEPARATOR + MENUITEM "גלול שמאלה", IDM_SCROLL_LEFT + MENUITEM "גלול ימינה", IDM_SCROLL_RIGHT + } +} diff --git a/dll/win32/shdoclc/Tr.rc b/dll/win32/shdoclc/Tr.rc index ea238e14bf8..6740feeccdd 100644 --- a/dll/win32/shdoclc/Tr.rc +++ b/dll/win32/shdoclc/Tr.rc @@ -1,5 +1,5 @@ /* - * Copyright 2006 Fatih Ac + * Copyright 2006 Fatih Aşıcı - 2012 Arda Tanrıkulu * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -18,6 +18,9 @@ #include "shdoclc.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT IDR_BROWSE_CONTEXT_MENU MENU @@ -25,53 +28,53 @@ IDR_BROWSE_CONTEXT_MENU MENU POPUP "Default" { MENUITEM "&Geri", IDM_GOBACKWARD - MENUITEM "&leri", IDM_GOFORWARD + MENUITEM "İ&leri", IDM_GOFORWARD MENUITEM SEPARATOR - MENUITEM "&Arkaplan Farkl Kaydet...", IDM_SAVEBACKGROUND + MENUITEM "&Arkaplanı Farklı Kaydet...", IDM_SAVEBACKGROUND MENUITEM "Arka&plan Yap", IDM_SETWALLPAPER - MENUITEM "Arkaplan Ko&pyala", IDM_COPYBACKGROUND - MENUITEM "&Masast esi Yap", IDM_SETDESKTOPITEM + MENUITEM "Arkaplanı Ko&pyala", IDM_COPYBACKGROUND + MENUITEM "&Masaüstü Öğesi Yap", IDM_SETDESKTOPITEM MENUITEM SEPARATOR - MENUITEM "&Tmn Se", IDM_SELECTALL - MENUITEM "&Yaptr", IDM_PASTE + MENUITEM "&Tümünü Seç", IDM_SELECTALL + MENUITEM "&Yapıştır", IDM_PASTE MENUITEM SEPARATOR - MENUITEM "K&sayol Olutur", IDM_CREATESHORTCUT - MENUITEM "Sk Kullanlanlara Ekle",IDM_ADDFAVORITES - MENUITEM "&Kayna Gster", IDM_VIEWSOURCE + MENUITEM "K&ısayol Oluştur", IDM_CREATESHORTCUT + MENUITEM "Sık Kullanılanlara Ekle",IDM_ADDFAVORITES + MENUITEM "&Kaynağı Göster", IDM_VIEWSOURCE MENUITEM SEPARATOR MENUITEM "&Kodlama", IDM_LANGUAGE MENUITEM SEPARATOR - MENUITEM "Ya&zdr", IDM_PRINT + MENUITEM "Ya&zdır", IDM_PRINT MENUITEM "&Yenile", _IDM_REFRESH MENUITEM SEPARATOR MENUITEM SEPARATOR - MENUITEM "&zellikler", IDM_PROPERTIES + MENUITEM "&Özellikler", IDM_PROPERTIES } POPUP "Image" { - MENUITEM "&Balanty A", IDM_FOLLOWLINKC - MENUITEM "&Yeni Pencerede A", IDM_FOLLOWLINKN - MENUITEM "Hedefi &Farkl Kaydet...", IDM_SAVETARGET - MENUITEM "Hedefi Y&azdr", IDM_PRINTTARGET + MENUITEM "&Bağlantıyı Aç", IDM_FOLLOWLINKC + MENUITEM "&Yeni Pencerede Aç", IDM_FOLLOWLINKN + MENUITEM "Hedefi &Farklı Kaydet...", IDM_SAVETARGET + MENUITEM "Hedefi Y&azdır", IDM_PRINTTARGET MENUITEM SEPARATOR - MENUITEM "Resmi &Gster", IDM_SHOWPICTURE - MENUITEM "&Resmi Farkl Kaydet...", IDM_SAVEPICTURE + MENUITEM "Resmi &Göster", IDM_SHOWPICTURE + MENUITEM "&Resmi Farklı Kaydet...", IDM_SAVEPICTURE MENUITEM "Resmi &E-postala...", IDM_MP_EMAILPICTURE - MENUITEM "Resmi Ya&zdr...", IDM_MP_PRINTPICTURE + MENUITEM "Resmi Ya&zdır...", IDM_MP_PRINTPICTURE MENUITEM "Resimlerim dizinine &Git", IDM_MP_MYPICS MENUITEM "Arka&plan Yap", IDM_SETWALLPAPER - MENUITEM "Masast &esi Yap...", IDM_SETDESKTOPITEM + MENUITEM "Masaüstü Ö&ğesi Yap...", IDM_SETDESKTOPITEM MENUITEM SEPARATOR MENUITEM "K&es", IDM_CUT MENUITEM "K&opyala", IDM_COPY - MENUITEM "&Ksayol Kopyala", IDM_COPYSHORTCUT - MENUITEM "Ya&ptr", IDM_PASTE + MENUITEM "&Kısayol Kopyala", IDM_COPYSHORTCUT + MENUITEM "Ya&pıştır", IDM_PASTE MENUITEM SEPARATOR - MENUITEM "Sk Ku&llanlanlara Ekle...", IDM_ADDFAVORITES + MENUITEM "Sık Ku&llanılanlara Ekle...", IDM_ADDFAVORITES MENUITEM SEPARATOR MENUITEM SEPARATOR - MENUITEM "&zellikler", IDM_PROPERTIES + MENUITEM "Ö&zellikler", IDM_PROPERTIES } POPUP "Control" @@ -80,54 +83,54 @@ IDR_BROWSE_CONTEXT_MENU MENU MENUITEM SEPARATOR MENUITEM "K&es", IDM_CUT MENUITEM "&Kopyala", IDM_COPY - MENUITEM "Ya&ptr", IDM_PASTE + MENUITEM "Ya&pıştır", IDM_PASTE MENUITEM "&Sil", IDM_DELETE MENUITEM SEPARATOR MENUITEM SEPARATOR - MENUITEM "&Tmn Se", IDM_SELECTALL + MENUITEM "&Tümünü Seç", IDM_SELECTALL } POPUP "Table" { - POPUP "&Select" + POPUP "&Seç" { - MENUITEM "&Hcre", IDM_CELLSELECT - MENUITEM "&Satr", IDM_ROWSELECT - MENUITEM "&Stun", IDM_COLUMNSELECT + MENUITEM "&Hücre", IDM_CELLSELECT + MENUITEM "&Satır", IDM_ROWSELECT + MENUITEM "&Sütun", IDM_COLUMNSELECT MENUITEM "&Tablo", IDM_TABLESELECT } MENUITEM SEPARATOR MENUITEM SEPARATOR - MENUITEM "&Hcre zellikleri", IDM_CELLPROPERTIES - MENUITEM "&Tablo zellikleri", IDM_TABLEPROPERTIES + MENUITEM "&Hücre Özellikleri", IDM_CELLPROPERTIES + MENUITEM "&Tablo Özellikleri", IDM_TABLEPROPERTIES } POPUP "1DSite Select" { MENUITEM "&Kes", IDM_CUT MENUITEM "K&opyala", IDM_COPY - MENUITEM "Ya&ptr", IDM_PASTE - MENUITEM "&Tmn Se", IDM_SELECTALL - MENUITEM "&Yazdr", IDM_PRINT + MENUITEM "Ya&pıştır", IDM_PASTE + MENUITEM "&Tümünü Seç", IDM_SELECTALL + MENUITEM "&Yazdır", IDM_PRINT MENUITEM SEPARATOR } POPUP "Anchor" { - MENUITEM "&A", IDM_FOLLOWLINKC - MENUITEM "&Yeni Pencerede A", IDM_FOLLOWLINKN - MENUITEM "Hedefi &Farkl Kaydet...", IDM_SAVETARGET - MENUITEM "Hedefi Ya&zdr", IDM_PRINTTARGET + MENUITEM "&Aç", IDM_FOLLOWLINKC + MENUITEM "&Yeni Pencerede Aç", IDM_FOLLOWLINKN + MENUITEM "Hedefi &Farklı Kaydet...", IDM_SAVETARGET + MENUITEM "Hedefi Ya&zdır", IDM_PRINTTARGET MENUITEM SEPARATOR MENUITEM "&Kes", IDM_CUT MENUITEM "K&opyala", IDM_COPY - MENUITEM "K&sayol Kopyala", IDM_COPYSHORTCUT - MENUITEM "Ya&ptr", IDM_PASTE + MENUITEM "K&ısayol Kopyala", IDM_COPYSHORTCUT + MENUITEM "Ya&pıştır", IDM_PASTE MENUITEM SEPARATOR - MENUITEM "Sk Ku&llanlanlara Ekle...", IDM_ADDFAVORITES + MENUITEM "Sık Ku&llanılanlara Ekle...", IDM_ADDFAVORITES MENUITEM SEPARATOR MENUITEM SEPARATOR - MENUITEM "&zellikler", IDM_PROPERTIES + MENUITEM "&Özellikler", IDM_PROPERTIES } POPUP "Context Unknown" @@ -137,60 +140,60 @@ IDR_BROWSE_CONTEXT_MENU MENU POPUP "DYNSRC Image" { - MENUITEM "&Balanty A", IDM_FOLLOWLINKC - MENUITEM "&Yeni Pencerede A", IDM_FOLLOWLINKN - MENUITEM "Hedefi &Farkl Kaydet...", IDM_SAVETARGET - MENUITEM "Hedefi Ya&zdr", IDM_PRINTTARGET + MENUITEM "&Bağlantıyı Aç", IDM_FOLLOWLINKC + MENUITEM "&Yeni Pencerede Aç", IDM_FOLLOWLINKN + MENUITEM "Hedefi &Farklı Kaydet...", IDM_SAVETARGET + MENUITEM "Hedefi Ya&zdır", IDM_PRINTTARGET MENUITEM SEPARATOR - MENUITEM "Resmi &Gster", IDM_SHOWPICTURE - MENUITEM "&Vidyoyu Farkl Kaydet...", IDM_SAVEPICTURE + MENUITEM "Resmi &Göster", IDM_SHOWPICTURE + MENUITEM "&Vidyoyu Farklı Kaydet...", IDM_SAVEPICTURE MENUITEM "Arka&plan Yap", IDM_SETWALLPAPER - MENUITEM "&Masast esi Yap...", IDM_SETDESKTOPITEM + MENUITEM "&Masaüstü Öğesi Yap...", IDM_SETDESKTOPITEM MENUITEM SEPARATOR MENUITEM "&Kes", IDM_CUT MENUITEM "K&opyala", IDM_COPY - MENUITEM "K&sayol Kopyala", IDM_COPYSHORTCUT - MENUITEM "&Yaptr", IDM_PASTE + MENUITEM "K&ısayol Kopyala", IDM_COPYSHORTCUT + MENUITEM "&Yapıştır", IDM_PASTE MENUITEM SEPARATOR - MENUITEM "Sk Ku&llanlanlara Ekle...", IDM_ADDFAVORITES + MENUITEM "Sık Ku&llanılanlara Ekle...", IDM_ADDFAVORITES MENUITEM SEPARATOR MENUITEM SEPARATOR - MENUITEM "Yrt", IDM_DYNSRCPLAY + MENUITEM "Yürüt", IDM_DYNSRCPLAY MENUITEM "Durdur", IDM_DYNSRCSTOP - MENUITEM "&zellikler", IDM_PROPERTIES + MENUITEM "&Özellikler", IDM_PROPERTIES } POPUP "ART Image" { - MENUITEM "&Balanty A", IDM_FOLLOWLINKC - MENUITEM "&Yeni Pencerede A", IDM_FOLLOWLINKN - MENUITEM "Hedefi &Farkl Kaydet...", IDM_SAVETARGET - MENUITEM "Hedefi Ya&zdr", IDM_PRINTTARGET + MENUITEM "&Bağlantıyı Aç", IDM_FOLLOWLINKC + MENUITEM "&Yeni Pencerede Aç", IDM_FOLLOWLINKN + MENUITEM "Hedefi &Farklı Kaydet...", IDM_SAVETARGET + MENUITEM "Hedefi Ya&zdır", IDM_PRINTTARGET MENUITEM SEPARATOR - MENUITEM "Resmi &Gster", IDM_SHOWPICTURE - MENUITEM "Resmi &Farkl Kaydet...", IDM_SAVEPICTURE + MENUITEM "Resmi &Göster", IDM_SHOWPICTURE + MENUITEM "Resmi &Farklı Kaydet...", IDM_SAVEPICTURE MENUITEM "Arka&plan Yap", IDM_SETWALLPAPER - MENUITEM "&Masast esi Yap...", IDM_SETDESKTOPITEM + MENUITEM "&Masaüstü Öğesi Yap...", IDM_SETDESKTOPITEM MENUITEM SEPARATOR MENUITEM "&Kes", IDM_CUT MENUITEM "K&opyala", IDM_COPY - MENUITEM "K&sayol Kopyala", IDM_COPYSHORTCUT - MENUITEM "&Yaptr", IDM_PASTE + MENUITEM "K&ısayol Kopyala", IDM_COPYSHORTCUT + MENUITEM "&Yapıştır", IDM_PASTE MENUITEM SEPARATOR - MENUITEM "Sk Ku&llanlanlara Ekle...", IDM_ADDFAVORITES + MENUITEM "Sık Ku&llanılanlara Ekle...", IDM_ADDFAVORITES MENUITEM SEPARATOR - MENUITEM "Yrt", IDM_IMGARTPLAY + MENUITEM "Yürüt", IDM_IMGARTPLAY MENUITEM "Durdur", IDM_IMGARTSTOP - MENUITEM "Geri evir", IDM_IMGARTREWIND + MENUITEM "Geri Çevir", IDM_IMGARTREWIND MENUITEM SEPARATOR MENUITEM SEPARATOR - MENUITEM "&zellikler", IDM_PROPERTIES + MENUITEM "&Özellikler", IDM_PROPERTIES } POPUP "Debug" { /*FIXME: translate these*/ MENUITEM "Trace Tags", IDM_TRACETAGS - MENUITEM "Resource Failures", IDM_RESOURCEFAILURES + MENUITEM "Kaynak Başarısızlıkları", IDM_RESOURCEFAILURES MENUITEM "Dump Tracking Info", IDM_DUMPTRACKINGINFO MENUITEM "Debug Break", IDM_DEBUGBREAK MENUITEM "Debug View", IDM_DEBUGVIEW @@ -199,39 +202,39 @@ IDR_BROWSE_CONTEXT_MENU MENU MENUITEM "Dump DisplayTree", IDM_DUMPDISPLAYTREE MENUITEM "Dump FormatCaches", IDM_DUMPFORMATCACHES MENUITEM "Dump LayoutRects", IDM_DUMPLAYOUTRECTS - MENUITEM "Memory Monitor", IDM_MEMORYMONITOR - MENUITEM "Performance Meters", IDM_PERFORMANCEMETERS - MENUITEM "Save HTML", IDM_SAVEHTML + MENUITEM "Bellek Monitörü", IDM_MEMORYMONITOR + MENUITEM "Performans Ölçerler", IDM_PERFORMANCEMETERS + MENUITEM "HTML'yi Kaydet", IDM_SAVEHTML MENUITEM SEPARATOR - MENUITEM "&Browse View", IDM_BROWSEMODE - MENUITEM "&Edit View", IDM_EDITMODE + MENUITEM "&Gözatma Görünümü", IDM_BROWSEMODE + MENUITEM "Görünümü Düz&enle", IDM_EDITMODE } POPUP "Vertical Scrollbar" { - MENUITEM "Buraya Kaydr", IDM_SCROLL_HERE + MENUITEM "Buraya Kaydır", IDM_SCROLL_HERE MENUITEM SEPARATOR - MENUITEM "st", IDM_SCROLL_TOP + MENUITEM "Üst", IDM_SCROLL_TOP MENUITEM "Alt", IDM_SCROLL_BOTTOM MENUITEM SEPARATOR - MENUITEM "stteki Sayfa", IDM_SCROLL_PAGEUP + MENUITEM "Üstteki Sayfa", IDM_SCROLL_PAGEUP MENUITEM "Alttaki Sayfa", IDM_SCROLL_PAGEDOWN MENUITEM SEPARATOR - MENUITEM "Yukar Kaydr", IDM_SCROLL_UP - MENUITEM "Aa Kaydr", IDM_SCROLL_DOWN + MENUITEM "Yukarı Kaydır", IDM_SCROLL_UP + MENUITEM "Aşağı Kaydır", IDM_SCROLL_DOWN } POPUP "Horizontal Scrollbar" { - MENUITEM "Buraya Kaydr", IDM_SCROLL_HERE + MENUITEM "Buraya Kaydır", IDM_SCROLL_HERE MENUITEM SEPARATOR MENUITEM "Sol Kenar", IDM_SCROLL_LEFTEDGE - MENUITEM "Sa Kenar", IDM_SCROLL_RIGHTEDGE + MENUITEM "Sağ Kenar", IDM_SCROLL_RIGHTEDGE MENUITEM SEPARATOR MENUITEM "Soldaki Sayfa", IDM_SCROLL_PAGELEFT - MENUITEM "Sadaki Sayfa", IDM_SCROLL_PAGERIGHT + MENUITEM "Sağdaki Sayfa", IDM_SCROLL_PAGERIGHT MENUITEM SEPARATOR - MENUITEM "Sola Kaydr", IDM_SCROLL_LEFT - MENUITEM "Saa Kaydr", IDM_SCROLL_RIGHT + MENUITEM "Sola Kaydır", IDM_SCROLL_LEFT + MENUITEM "Sağa Kaydır", IDM_SCROLL_RIGHT } } diff --git a/dll/win32/shdoclc/rsrc.rc b/dll/win32/shdoclc/rsrc.rc index 58b0c296e65..8f917afb52d 100644 --- a/dll/win32/shdoclc/rsrc.rc +++ b/dll/win32/shdoclc/rsrc.rc @@ -49,9 +49,6 @@ #ifdef LANGUAGE_SV_SE #include "Sv.rc" #endif -#ifdef LANGUAGE_TR_TR - #include "Tr.rc" -#endif /* UTF-8 */ #ifdef LANGUAGE_DE_DE @@ -60,6 +57,9 @@ #ifdef LANGUAGE_FR_FR #include "Fr.rc" #endif +#ifdef LANGUAGE_HE_IL + #include "He.rc" +#endif #ifdef LANGUAGE_HU_HU #include "Hu.rc" #endif @@ -87,6 +87,9 @@ #ifdef LANGUAGE_SL_SI #include "Si.rc" #endif +#ifdef LANGUAGE_TR_TR + #include "Tr.rc" +#endif #ifdef LANGUAGE_UK_UA #include "Uk.rc" #endif diff --git a/dll/win32/shdocvw/Tr.rc b/dll/win32/shdocvw/Tr.rc new file mode 100644 index 00000000000..6f9f19adedb --- /dev/null +++ b/dll/win32/shdocvw/Tr.rc @@ -0,0 +1,91 @@ +/* + * Copyright 2010 Alexander N. Sørnes + * + * Çeviri 2012 Arda Tanrıkulu + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "resource.h" + +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT + +IDD_BROWSE_OPEN DIALOG 10, 10, 200, 70 +STYLE DS_MODALFRAME | WS_CAPTION +CAPTION "Aç" +FONT 8, "MS Shell Dlg" +{ + LTEXT "Bir belgenin veya klasörün Internet adresini yazın. Internet Explorer sizin için açacaktır.",-1,25, 5, 150,15 + LTEXT "Aç:", -1, 2, 32, 20, 15 + EDITTEXT IDC_BROWSE_OPEN_URL, 25, 30, 160, 13 + DEFPUSHBUTTON "Tamam", IDOK, 25, 50, 50, 15 + PUSHBUTTON "İptal", IDCANCEL, 85, 50, 50, 15 +} + +IDR_BROWSE_MAIN_MENU MENU +{ + POPUP "&Dosya" + { + POPUP "Y&eni" + { + MENUITEM "Pen&cere", ID_BROWSE_NEW_WINDOW + } + MENUITEM "&Aç...", ID_BROWSE_OPEN + MENUITEM "&Kaydet", ID_BROWSE_SAVE + MENUITEM "&Farklı Kaydet....", ID_BROWSE_SAVE_AS + MENUITEM SEPARATOR + MENUITEM "&Sayfa Yapısı...", ID_BROWSE_PRINT_FORMAT + MENUITEM "Pr&int...", ID_BROWSE_PRINT + MENUITEM "Baskı Ö&nizleme...", ID_BROWSE_PRINT_PREVIEW + MENUITEM SEPARATOR + MENUITEM "Ö&zellikler", ID_BROWSE_PROPERTIES + MENUITEM "&Kapat", ID_BROWSE_QUIT + } + POPUP "&Görünüm" + { + POPUP "&Araç Çubukları" + { + MENUITEM "Standart Ç&ubuk", ID_BROWSE_BAR_STD + MENUITEM "&Adres Çubuğu", ID_BROWSE_BAR_ADDR + } + } + POPUP "&Sık Kullanılanlar" + { + MENUITEM "Sık Kullanılanlara &Ekle", ID_BROWSE_ADDFAV + MENUITEM SEPARATOR + } + POPUP "&Yardım" + { + MENUITEM "Internet Explorer &Hakkında", ID_BROWSE_ABOUT + } +} + +STRINGTABLE +{ + IDS_TB_BACK "Geri" + IDS_TB_FORWARD "İleri" + IDS_TB_STOP "Dur" + IDS_TB_REFRESH "Yenile" + IDS_TB_HOME "Giriş" + IDS_TB_PRINT "Yazdır" +} + +STRINGTABLE +{ + IDS_ADDRESS "Adres" +} diff --git a/dll/win32/shdocvw/shdocvw.rc b/dll/win32/shdocvw/shdocvw.rc index 49954f73ad9..4dfefce6d53 100644 --- a/dll/win32/shdocvw/shdocvw.rc +++ b/dll/win32/shdocvw/shdocvw.rc @@ -80,6 +80,9 @@ IDB_IETOOLBAR BITMAP ietoolbar.bmp #ifdef LANGUAGE_SV_SE #include "Sv.rc" #endif +#ifdef LANGUAGE_TR_TR + #include "Tr.rc" +#endif #ifdef LANGUAGE_UK_UA #include "Uk.rc" #endif diff --git a/dll/win32/shell32/lang/he-IL.rc b/dll/win32/shell32/lang/he-IL.rc new file mode 100644 index 00000000000..2dbed12e3d0 --- /dev/null +++ b/dll/win32/shell32/lang/he-IL.rc @@ -0,0 +1,810 @@ +/* + * Copyright 1998 Juergen Schmied + * + * Translated by Baruch Rutman + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + +MENU_001 MENU DISCARDABLE +BEGIN + MENUITEM "סמלים גדולים", FCIDM_SHVIEW_BIGICON + MENUITEM "סמלים קטנים", FCIDM_SHVIEW_SMALLICON + MENUITEM "רשימה", FCIDM_SHVIEW_LISTVIEW + MENUITEM "פרטים", FCIDM_SHVIEW_REPORTVIEW +END + +/* shellview background menu */ +MENU_002 MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + POPUP "תצוגה" + BEGIN + MENUITEM "סמלים גדולים", FCIDM_SHVIEW_BIGICON + MENUITEM "סמלים קטנים", FCIDM_SHVIEW_SMALLICON + MENUITEM "רשימה", FCIDM_SHVIEW_LISTVIEW + MENUITEM "פרטים", FCIDM_SHVIEW_REPORTVIEW + END + MENUITEM SEPARATOR + POPUP "סידור סמלים" + BEGIN + MENUITEM "לפי שם", 0x30 /* column 0 */ + MENUITEM "לפי סוג", 0x32 /* column 2 */ + MENUITEM "לפי גודל", 0x31 /* ... */ + MENUITEM "לפי תאריך", 0x33 + MENUITEM SEPARATOR + MENUITEM "סידור אוטומטי", FCIDM_SHVIEW_AUTOARRANGE + END + MENUITEM "Line up Icons", FCIDM_SHVIEW_SNAPTOGRID + MENUITEM SEPARATOR + MENUITEM "רענון", FCIDM_SHVIEW_REFRESH + MENUITEM SEPARATOR + MENUITEM "הדבק", FCIDM_SHVIEW_INSERT + MENUITEM "הדבק כקיצור דרך", FCIDM_SHVIEW_INSERTLINK + MENUITEM SEPARATOR + MENUITEM "מאפיינים", FCIDM_SHVIEW_PROPERTIES + END +END + +/* shellview item menu */ +MENU_SHV_FILE MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "סייר", FCIDM_SHVIEW_EXPLORE + MENUITEM "פתח", FCIDM_SHVIEW_OPEN + MENUITEM SEPARATOR + MENUITEM "גזור", FCIDM_SHVIEW_CUT + MENUITEM "העתק", FCIDM_SHVIEW_COPY + MENUITEM SEPARATOR + MENUITEM "צור קישור", FCIDM_SHVIEW_CREATELINK + MENUITEM "מחק", FCIDM_SHVIEW_DELETE + MENUITEM "שנה שם", FCIDM_SHVIEW_RENAME + MENUITEM SEPARATOR + MENUITEM "מאפיינים", FCIDM_SHVIEW_PROPERTIES + END +END + +IDD_BROWSE_FOR_FOLDER DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "בחירת תיקיה" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "אישור", 1, 60, 175, 60, 15, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "ביטול", 2, 125, 175, 60, 15, WS_GROUP | WS_TABSTOP + LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 4, 4, 180, 12 + LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 4, 25, 180, 12 + CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 4, 40, 180, 120 +END + +IDD_BROWSE_FOR_FOLDER_NEW DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "בחירת תיקיה" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDC_BROWSE_FOR_FOLDER_TITLE, 10, 8, 198, 24 + LTEXT "", IDC_BROWSE_FOR_FOLDER_STATUS, 10, 25, 198, 12 + LTEXT "תיקיה:", IDC_BROWSE_FOR_FOLDER_FOLDER, 10, 152, 40, 12 + CONTROL "", IDC_BROWSE_FOR_FOLDER_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 + EDITTEXT IDC_BROWSE_FOR_FOLDER_FOLDER_TEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP + PUSHBUTTON "צור תיקיה חדשה", IDC_BROWSE_FOR_FOLDER_NEW_FOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + DEFPUSHBUTTON "אישור", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "ביטול", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP +END + +IDD_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "הודעה" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "כן", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "כן להכל", IDC_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "לא", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "ביטול", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP + ICON "", IDC_YESTOALL_ICON, 10, 10, 16, 16 + LTEXT "", IDC_YESTOALL_MESSAGE, 40, 10, 238, 52, 0 +END + +IDD_ABOUT DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 275, 198 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "אודות %s" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_ABOUT_ICON, 7, 55, 21, 20 + LTEXT "", IDC_ABOUT_APPNAME, 35, 55, 200, 10 + LTEXT "גירסה ", IDC_STATIC, 35, 65, 28, 10 + LTEXT KERNEL_VERSION_STR, IDC_STATIC, 63, 65, 27, 10 + LTEXT " (", IDC_STATIC, 90, 65, 5, 10 + LTEXT KERNEL_VERSION_BUILD_STR, IDC_STATIC, 95, 65, 58, 10 + LTEXT ")", IDC_STATIC, 153, 65, 5, 10 + LTEXT "זכויות יוצרים 1998-", IDC_STATIC, 35, 75, 53, 10 + LTEXT COPYRIGHT_YEAR, IDC_STATIC, 88, 75, 17, 10 + LTEXT " צוות ReactOS\0", IDC_STATIC, 105, 75, 53, 10 + LTEXT "", IDC_ABOUT_OTHERSTUFF, 35, 90, 180, 20 + LTEXT "גירסה זו של ReactOS רשומה עבור:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "", IDC_ABOUT_REG_USERNAME, 45, 125, 180, 10 + LTEXT "", IDC_ABOUT_REG_ORGNAME, 45, 135, 180, 10 + LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ + LTEXT "זיכרון פיזי מותקן:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "", IDC_ABOUT_PHYSMEM, 167, 152, 88, 10 + DEFPUSHBUTTON "אישור", IDOK, 220, 178, 50, 14 + + PUSHBUTTON "", IDC_ABOUT_AUTHORS, 5, 178, 70, 14 +END + +IDD_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 +STYLE DS_SHELLFONT | WS_CHILD +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS מוגשת עבורכם ע""י:", IDC_STATIC, 0, 0, 180, 10 + LISTBOX IDC_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 +END + +IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "הפעלה" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE + LTEXT "הקלד שם של תוכנית, תיקיה, מסמך או משאב אינטרנט ו- ReactOS יפתח אותם עבורך.", 12289, 36, 11, 182, 18 + LTEXT "&פתח את:", 12305, 7, 39, 24, 10 + CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 + DEFPUSHBUTTON "אישור", IDOK, 36, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "ביטול", IDCANCEL, 98, 63, 59, 14, WS_TABSTOP + PUSHBUTTON "&עיון...", 12288, 160, 63, 59, 14, WS_TABSTOP +END + +IDD_SHORTCUT_PROPERTIES DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "קיצור דרך" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 8, 8, 21, 20, WS_VISIBLE + EDITTEXT 14001, 49, 10, 180, 14, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "", -1, 8, 31, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE + LTEXT "סוג יעד:", 14004, 8, 38, 68, 10 + EDITTEXT 14005, 79, 37, 150, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "מיקום יעד:", 14006, 8, 55, 68, 10 + EDITTEXT 14007, 79, 53, 150, 12, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "יעד:", 14008, 8, 71, 68, 10 + EDITTEXT 14009, 79, 69, 150, 14, ES_AUTOHSCROLL + LTEXT "", -1, 8, 88, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE + LTEXT "התחל ב:", 14010, 8, 98, 68, 10 + EDITTEXT 14011, 79, 96, 150, 14, ES_AUTOHSCROLL + LTEXT "מקש קיצור:", 14014, 8, 117, 68, 10 + CONTROL "", 14015, "msctls_hotkey32", WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP, 79, 115, 150, 14 + LTEXT "הפעל:", 14016, 8, 136, 68, 10 + COMBOBOX 14017, 79, 134, 150, 14, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP + LTEXT "הערה:", 14018, 8, 154, 68, 10 + EDITTEXT 14019, 79, 152, 150, 14, ES_AUTOHSCROLL + PUSHBUTTON "פתח מיקום קובץ", 14020, 9, 172, 70, 14, ES_LEFT + PUSHBUTTON "שינוי סמל...", 14021, 84, 172, 70, 14, ES_LEFT + PUSHBUTTON "מתקדם...", 14022, 159, 172, 70, 14, ES_LEFT +END + +IDD_SHORTCUT_EXTENDED_PROPERTIES DIALOGEX 0, 0, 230, 150 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "מאפיינים מורחבים" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 + CHECKBOX "Run with different credentials", 14000, 25, 50, 150, 10 + LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 + CHECKBOX "הרץ בטווח זיכרון מופרד", 14001, 25, 100, 90, 10, WS_DISABLED + PUSHBUTTON "אישור", 1, 63, 124, 50, 15, WS_VISIBLE + PUSHBUTTON "ביטול", 2, 120, 124, 50, 15, WS_VISIBLE +END + +IDD_FOLDER_PROPERTIES DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "כללי" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 32, 32, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT + LTEXT "סוג קובץ:", 14004, 8, 40, 55, 10 + CONTROL "Folder", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL, 68, 40, 160, 10 + LTEXT "", -1, 8, 31, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE + LTEXT "מיקום:", 14008, 8, 56, 55, 10 + EDITTEXT 14009, 68, 56, 160, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | ES_AUTOHSCROLL | NOT WS_TABSTOP + LTEXT "גודל:", 14010, 8, 72, 55, 10 + EDITTEXT 14011, 68, 72, 160, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "גודל בדיסק:", 140101, 8, 88, 55, 10 + EDITTEXT 14012, 68, 88, 160, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "מכיל:", 14026, 8, 104, 55, 10 + EDITTEXT 14027, 68, 104, 160, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "", -1, 8, 120, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE + LTEXT "נוצר:", 14014, 8, 128, 55, 10 + EDITTEXT 14015, 68, 128, 160, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "", -1, 8, 144, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE + LTEXT "תכונות:", 14020, 8, 152, 46, 10 + AUTOCHECKBOX "קריאה בלבד", 14021, 56, 152, 70, 10 + AUTOCHECKBOX "מוסתר", 14022, 56, 166, 70, 10 + AUTOCHECKBOX "ארכיון", 14023, 56, 180, 70, 10 + PUSHBUTTON "&מתקדם...", 14028, 158, 150, 70, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP +END + +IDD_FILE_PROPERTIES DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "כללי" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 32, 32, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | WS_TABSTOP + LTEXT "", -1, 8, 29, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE + LTEXT "סוג קובץ:", 14004, 8, 35, 50, 10 + CONTROL "File", 14005, "edit", ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP, 68, 35, 160, 10 + LTEXT "נפתח באמצעות:", 14006, 8, 53, 50, 10 + ICON "", 14025, 68, 52, 11, 10, NOT WS_VISIBLE + PUSHBUTTON "שי&נוי...", 14024, 168, 50, 60, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP + EDITTEXT 14007, 68, 53, 90, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | ES_AUTOHSCROLL | NOT WS_TABSTOP + LTEXT "", -1, 8, 68, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE + LTEXT "מיקום:", 14008, 8, 75, 45, 10 + EDITTEXT 14009, 68, 75, 160, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | ES_AUTOHSCROLL | NOT WS_TABSTOP + LTEXT "גודל:", 14010, 8, 91, 45, 10 + EDITTEXT 14011, 68, 91, 160, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "גודל בדיסק:", 140112, 8, 107, 55, 10 + EDITTEXT 14012, 68, 107, 160, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "", -1, 8, 123, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE + LTEXT "נוצר:", 14014, 8, 131, 45, 10 + EDITTEXT 14015, 68, 131, 160, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "השתנה:", 14016, 8, 147, 45, 10 + EDITTEXT 14017, 68, 147, 160, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "נפתח:", 14018, 8, 163, 45, 10 + EDITTEXT 14019, 68, 163, 160, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "", -1, 8, 179, 221, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE + LTEXT "תכונות", 14020, 8, 189, 45, 10 + AUTOCHECKBOX "&קריאה בלבד", 14021, 58, 189, 67, 10 + AUTOCHECKBOX "&מוסתר", 14022, 126, 189, 50, 10 + AUTOCHECKBOX "ארכיון", 14023, 181, 189, 49, 10 + PUSHBUTTON "מ&תקדם...", 14028, 180, 185, 50, 15, WS_TABSTOP +END + +IDD_FILE_VERSION DIALOGEX 0, 0, 235, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "גרסה" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "גרסת קובץ: ", 14000, 10, 10, 55, 10 + EDITTEXT 14001, 77, 10, 152, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER + LTEXT "תיאור: ", 14002, 10, 27, 45, 10 + EDITTEXT 14003, 77, 27, 152, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER + LTEXT "זכויות יוצרים: ", 14004, 10, 46, 66, 10 + EDITTEXT 14005, 77, 46, 152, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER + GROUPBOX "מידע נוסף: ", 14006, 6, 70, 222, 115 + LTEXT "שם פריט: ", 14007, 13, 82, 50, 10 + LTEXT "ערך: ", 14008, 112, 82, 45, 10 + LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY + EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY +END + +IDD_DRIVE_PROPERTIES DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "כללי" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14016, 10, 3, 32, 32, WS_VISIBLE + EDITTEXT 14000, 40, 11, 190, 14, ES_LEFT | WS_BORDER | WS_GROUP | ES_AUTOHSCROLL + LTEXT "", -1, 8, 32, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE + + LTEXT "סוג:", -1, 8, 38, 95, 10 + EDITTEXT 14001, 110, 38, 120, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "מערכת קבצים:", -1, 8, 51, 95, 10 + EDITTEXT 14002, 110, 51, 120, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "", -1, 8, 64, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE + + CONTROL "", 14013, "Static", SS_SUNKEN | SS_OWNERDRAW, 8, 69, 10, 10 + LTEXT "שטח בשימוש:", -1, 25, 69, 80, 10 + EDITTEXT 14003, 110, 69, 86, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + EDITTEXT 14004, 197, 69, 33, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + CONTROL "", 14014, "Static", SS_SUNKEN | SS_OWNERDRAW, 8, 82, 10, 10 + LTEXT "שטח פנוי:", -1, 25, 82, 80, 10 + EDITTEXT 14005, 110, 82, 86, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + EDITTEXT 14006, 197, 82, 33, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "", -1, 8, 97, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE + + LTEXT "קיבולת:", -1, 25, 103, 80, 10 + EDITTEXT 14007, 110, 103, 86, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + EDITTEXT 14008, 197, 103, 33, 10, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL + CONTROL "", 14015, "Static", SS_OWNERDRAW, 70, 116, 100, 30 + LTEXT "כונן %c", 14009, 100, 150, 70, 10 + PUSHBUTTON "ניקוי הדיסק", 14010, 160, 154, 70, 15, WS_TABSTOP + LTEXT "", -1, 8, 171, 223, 1, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE + + CHECKBOX "דחוס כונן זה כדי לחסוך בשטח דיסק", 14011, 8, 191, 222, 10, WS_DISABLED + CHECKBOX "אפשר סידור תוכן באינדקס עבור קבצים בכונן זה בנוסף למאפייני קובץ", 14012, 8, 205, 222, 10, WS_DISABLED +END + +IDD_DRIVE_TOOLS DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "כלים" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "בדיקת שגיאות", -1, 5, 5, 230, 60 + LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20 + PUSHBUTTON "בדוק כעת...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "איחוי", -1, 5, 65, 230, 60 + LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20 + PUSHBUTTON "אחה כעת...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "גיבוי", -1, 5, 130, 230, 60 + LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20 + PUSHBUTTON "גבה כעת...", 14002, 130, 170, 90, 15, WS_TABSTOP +END + +IDD_DRIVE_HARDWARE DIALOGEX 0, 0, 240, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "חומרה" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +END + +IDD_RUN_AS DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "הפעל כ-" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Which user account do you want to use to run this program?", -1, 10, 20, 220, 20 + CHECKBOX "המשתמש הנוכחי %s", 14000, 10, 45, 150, 10 + LTEXT "Protect my computer and data from unauthorized program activity", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "המשתמש הבא:", 14002, 10, 100, 90, 10 + LTEXT "שם משתמש:", -1, 20, 118, 54, 10 + COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP + LTEXT "סיסמה:", -1, 20, 143, 53, 10 + EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP + PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP + PUSHBUTTON "אישור", 14007, 57, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "ביטול", 14008, 122, 170, 60, 14, WS_TABSTOP +END + +IDD_RECYCLE_BIN_PROPERTIES DIALOGEX 0, 0, 240, 190 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "מאפייני סל המיחזור" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 + GROUPBOX "הגדרות עבור המיקום הנבחר", -1, 10, 72, 220, 70 + RADIOBUTTON "&גודל מותאם אישית:", 14001, 20, 90, 80, 10, WS_TABSTOP + EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER + LTEXT "גודל &מרבי(MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Do not move files to the &Recycle Bin. Remove files immediately when deleted.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "ה&צג תיבת דו-שיח לאישור מחיקה", 14004, 20, 155, 140, 10, WS_TABSTOP +END + +IDD_OPEN_WITH DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "פתיחה באמצעות" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 + LTEXT "Choose the program you want to use to open this file:", -1, 44, 12, 211, 10 + LTEXT "קובץ: ", 14001, 44, 25, 188, 10 + GROUPBOX "תוכניות:", -1, 7, 42, 249, 187 + CONTROL "Programs", 14002, WC_TREEVIEW, WS_BORDER | WS_TABSTOP | TVS_SHOWSELALWAYS, 16 ,57, 230, 130 + AUTOCHECKBOX "&Always use the selected program to open this kind of file", 14003, 20, 193, 225, 10 + PUSHBUTTON "&עיון...", 14004, 198, 207, 50, 14 + DEFPUSHBUTTON "אישור", IDOK, 150, 236, 50, 14 + PUSHBUTTON "ביטול", IDCANCEL, 206, 236, 50, 14 +END + +IDD_FILE_COPY DIALOGEX 0, 0, 264, 45 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "מעתיק..." +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + PUSHBUTTON "ביטול", 14002, 195, 14, 60, 16 + CONTROL "", 14000, "MSCTLS_PROGRESS32", 0, 8, 20, 170, 10 + LTEXT "קובץ", 14001, 8, 6, 169, 10 +END + +IDD_FOLDER_OPTIONS_GENERAL DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "כללי" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "משימות", -1, 7, 10, 249, 45 + ICON "", 30109, 14, 25, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP + ICON "", 30110, 14, 70, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP | WS_GROUP + GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 + ICON "", 30111, 14, 120, 21, 20, SS_REALSIZECONTROL + AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP | WS_GROUP + AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP | WS_GROUP + PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +END + +IDD_FOLDER_OPTIONS_VIEW DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "View" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +GROUPBOX "Folder views", -1, 7, 10, 249, 60 +//ICON +LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 +PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 +PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +END + +IDD_FOLDER_OPTIONS_FILETYPES DIALOGEX 0, 0, 264, 256 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "File Types" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN +LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 +PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 +LTEXT "Opens with:", -1, 12, 140, 40, 10 +//ICON +LTEXT "Appname", 14005, 100, 140, 40, 10 +PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "", 14007, 12, 155, 160, 30 +PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +END + +IDD_CONFIRM_FILE_REPLACE DIALOGEX 0, 0, 282, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Confirm File Replace" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 + PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 215, 122, 60, 14 + ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL + LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL +END + +IDD_LOG_OFF DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Log Off ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 122, 40, 60, 14 +END + +IDD_DISCONNECT DIALOGEX 0, 0, 190, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Disconnect ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL + LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 123, 40, 60, 14 +END + +IDD_AUTOPLAY1 DIALOGEX 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "AutoPlay" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 + CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 + GROUPBOX "Actions", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 + AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 + PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED +END + +IDD_MIXED_CONTENT1 DIALOGEX 0, 0, 227, 207 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 + LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 + DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 186, 60, 14 +END + +IDD_MIXED_CONTENT2 DIALOGEX 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Mixed Content" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL + EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 + AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 +END + +IDD_AUTOPLAY2 DIALOGEX 0, 0, 227, 181 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION +CAPTION "Autoplay" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", 1000, 5, 7, 21, 20 + LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 + LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 + AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 + PUSHBUTTON "Cancel", IDCANCEL, 159, 160, 60, 14 +END + +IDD_SHUTDOWN DIALOGEX 0, 0, 211, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Shut Down ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP + LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL + LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 + DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 +END + +IDD_FORMAT_DRIVE DIALOGEX 50, 50, 184, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Format" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 + PUSHBUTTON "&Close", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ca&pacity:", -1, 7, 6, 169, 9 + COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&File system", -1, 7, 35, 170, 9 + COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 + LTEXT "&Allocation unit size", -1, 7, 64, 170, 9 + COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Volume &label", -1, 7, 93, 170, 9 + EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL + GROUPBOX "Format &options", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Quick Format", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 +END + +IDD_CHECK_DISK DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + +IDD_PICK_ICON DIALOGEX 0, 0, 237, 204 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Change Icon" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "Filename:", -1, 7, 14, 208, 10 + PUSHBUTTON "Browse...",IDC_BUTTON_PATH, 148, 24,67,14 + EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL + LTEXT "Icons:", -1, 7, 47, 208, 10 + LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE + DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 + PUSHBUTTON "Cancel",IDCANCEL, 167, 181, 50, 14 +END + +STRINGTABLE DISCARDABLE +BEGIN + /* columns in the shellview */ + IDS_SHV_COLUMN1 "קובץ" + IDS_SHV_COLUMN2 "גודל" + IDS_SHV_COLUMN3 "סוג" + IDS_SHV_COLUMN4 "שונה" + IDS_SHV_COLUMN5 "תכונות" + IDS_SHV_COLUMN6 "גודל" + IDS_SHV_COLUMN7 "Size available" + IDS_SHV_COLUMN8 "שם" + IDS_SHV_COLUMN9 "הערות" + IDS_SHV_COLUMN10 "בעלים" + IDS_SHV_COLUMN11 "קבוצות" + IDS_SHV_COLUMN12 "שם קובץ" + IDS_SHV_COLUMN13 "קטגוריה" + IDS_SHV_COLUMN_DELFROM "Original location" + IDS_SHV_COLUMN_DELDATE "תאריך מחיקה" + IDS_SHV_COLUMN_FONTTYPE "סוג גופן" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "מסמכים" + IDS_SHV_COLUMN_STATUS "מצב" + IDS_SHV_COLUMN_COMMENTS "הערות" + IDS_SHV_COLUMN_LOCATION "מיקום" + IDS_SHV_COLUMN_MODEL "דגם" + + /* special folders */ + IDS_DESKTOP "שולחן עבודה" + IDS_MYCOMPUTER "המחשב שלי" + IDS_RECYCLEBIN_FOLDER_NAME "אשפה" + IDS_CONTROLPANEL "לוח הבקרה" + IDS_ADMINISTRATIVETOOLS "כלי ניהול" + + /* context menus */ + IDS_VIEW_LARGE "סמלים גדולים" + IDS_VIEW_SMALL "סמלים קטנים" + IDS_VIEW_LIST "רשימה" + IDS_VIEW_DETAILS "פרטים" + IDS_SELECT "בחר" + IDS_OPEN "פתח" + IDS_CREATELINK "צור קישור" + IDS_COPY "העתק" + IDS_DELETE "מחק" + IDS_PROPERTIES "מאפיינים" + IDS_CUT "גזור" + IDS_RESTORE "שחזר" + IDS_FORMATDRIVE "אתחול..." + IDS_RENAME "שנה שם" + IDS_INSERT "הכנס" + + IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." + IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" + IDS_DELETEITEM_CAPTION "Confirm file deletion" + IDS_DELETEFOLDER_CAPTION "Confirm folder deletion" + IDS_DELETEITEM_TEXT "Are you sure you want to delete '%1'?" + IDS_DELETEMULTIPLE_TEXT "Are you sure you want to delete these %1 items?" + IDS_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?" + IDS_TRASHITEM_TEXT "Are you sure that you want to send '%1' to the Trash?" + IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all its content to the Trash?" + IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to the Trash?" + IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to delete it instead?" + IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?" + IDS_OVERWRITEFILE_CAPTION "Confirm file overwrite" + IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\nIf the files in the destination folder have the same names as files in the\nselected folder they will be replaced. Do you still want to move or copy\nthe folder?" + + /* message box strings */ + IDS_RESTART_TITLE "הפעלה מחדש" + IDS_RESTART_PROMPT "האם ברצונך להפעיל מחדש את המערכת?" + IDS_SHUTDOWN_TITLE "כיבוי" + IDS_SHUTDOWN_PROMPT "האם ברצונך לכבות את המחשב?" + IDS_LOGOFF_TITLE "התנתקות" + IDS_LOGOFF_PROMPT "האם ברצונך להתנתק?" + + /* Run File dialog */ + IDS_RUNDLG_ERROR "Unable to display Run File dialog box (internal error)" + IDS_RUNDLG_BROWSE_ERROR "Unable to display Browse dialog box (internal error)" + IDS_RUNDLG_BROWSE_CAPTION "Browse" + IDS_RUNDLG_BROWSE_FILTER "Executable Files (*.exe)\0*.exe\0All Files (*.*)\0*.*\0" + + /* shell folder path default values */ + IDS_PROGRAMS "Start Menu\\Programs" + IDS_PERSONAL "המסמכים שלי" + IDS_FAVORITES "מועדפים" + IDS_STARTUP "Start Menu\\Programs\\StartUp" + IDS_RECENT "אחרונים" + IDS_SENDTO "שאל אל" + IDS_STARTMENU "תפריט התחל" + IDS_MYMUSIC "המוסיקה שלי" + IDS_MYVIDEO "הוידאו שלי" + IDS_DESKTOPDIRECTORY "שולחן העבודה" + IDS_NETHOOD "NetHood" + IDS_TEMPLATES "תבניות" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Local Settings\\Application Data" + IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files" + IDS_COOKIES "עוגיות" + IDS_HISTORY "Local Settings\\History" + IDS_PROGRAM_FILES "Program Files" + IDS_MYPICTURES "התמונות שלי" + IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files" + IDS_COMMON_DOCUMENTS "מסמכים" + IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools" + IDS_COMMON_MUSIC "Documents\\My Music" + IDS_COMMON_PICTURES "Documents\\My Pictures" + IDS_COMMON_VIDEO "Documents\\My Videos" + IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning" + IDS_NETWORKPLACE "מיקומי הרשת שלי" + + IDS_NEWFOLDER "תיקייה חדשה" + + IDS_DRIVE_FIXED "כונן מקומי" + IDS_DRIVE_CDROM "CDROM" + IDS_DRIVE_NETWORK "כונן רשת" + + /* Open With */ + IDS_OPEN_WITH "פתיחה באמצעות" + IDS_OPEN_WITH_CHOOSE "Choose Program..." + IDS_OPEN_WITH_RECOMMENDED "Recommended Programs:" + IDS_OPEN_WITH_OTHER "Other Programs:" + + IDS_SHELL_ABOUT_AUTHORS "&Authors" + IDS_SHELL_ABOUT_BACK "< &Back" + FCIDM_SHVIEW_NEW "New" + FCIDM_SHVIEW_NEWFOLDER "New &Folder" + FCIDM_SHVIEW_NEWLINK "New &Link" + IDS_FOLDER_OPTIONS "Folder Options" + IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" + IDS_RECYCLEBIN_DISKSPACE "Space Available" + IDS_EMPTY_BITBUCKET "Empty Recycle Bin" + IDS_PICK_ICON_TITLE "Choose Icon" + IDS_PICK_ICON_FILTER "Icon Files (*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0All Files (*.*)\0*.*\0" + IDS_OPEN_WITH_FILTER "Executable Files (*.exe)\0*.exe\0All Files (*.*)\0*.*\0" + IDS_DIRECTORY "Folder" + IDS_VIRTUAL_DRIVER "Virtual Device Driver" + IDS_BAT_FILE "ReactOS Batch File" + IDS_CMD_FILE "ReactOS Command Script" + IDS_COM_FILE "Dos Application" + IDS_CPL_FILE "Control Panel Item" + IDS_CUR_FILE "Cursor" + IDS_DLL_FILE "Application Extension" + IDS_DRV_FILE "Device Driver" + IDS_EXE_FILE "Application" + IDS_FON_FILE "Font file" + IDS_TTF_FILE "TrueType Font file" + IDS_HLP_FILE "Help File" + IDS_INI_FILE "Configuration Settings" + IDS_LNK_FILE "Shortcut" + IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_EXPLORE_VERB "Explore" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + IDS_COPY_OF "Copy of" + + IDS_SHLEXEC_NOASSOC "There is no Windows program configured to open this type of file." + + IDS_FILE_DETAILS "Details for '%s' extension" + IDS_FILE_DETAILSADV "Files with extension '%s' are of type '%s'. To change settings that affect all '%s' files, click Advanced." + IDS_FILE_TYPES "FileTypes" + IDS_COLUMN_EXTENSION "Extensions" + IDS_BYTES_FORMAT "bytes" + IDS_UNKNOWN_APP "Unknown application" + IDS_EXE_DESCRIPTION "Description:" +END diff --git a/dll/win32/shell32/res/icons/Icon_Licence/Tango.txt b/dll/win32/shell32/res/icons/Icon_Licence/Tango.txt index 796417a0820..741a163dfbb 100644 --- a/dll/win32/shell32/res/icons/Icon_Licence/Tango.txt +++ b/dll/win32/shell32/res/icons/Icon_Licence/Tango.txt @@ -124,4 +124,4 @@ Please see COPYING for details 16715.ico 16717.ico 16718.ico -16721.ico \ No newline at end of file +16721.ico diff --git a/dll/win32/shell32/shell32.rc b/dll/win32/shell32/shell32.rc index 2037c47106c..d30e515f9ee 100644 --- a/dll/win32/shell32/shell32.rc +++ b/dll/win32/shell32/shell32.rc @@ -86,6 +86,9 @@ END #ifdef LANGUAGE_FR_FR #include "lang/fr-FR.rc" #endif +#ifdef LANGUAGE_HE_IL + #include "lang/he-IL.rc" +#endif #ifdef LANGUAGE_HU_HU #include "lang/hu-HU.rc" #endif diff --git a/dll/win32/shimgvw/lang/he-IL.rc b/dll/win32/shimgvw/lang/he-IL.rc new file mode 100644 index 00000000000..a9d6d5db772 --- /dev/null +++ b/dll/win32/shimgvw/lang/he-IL.rc @@ -0,0 +1,18 @@ +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + +STRINGTABLE +BEGIN + IDS_APPTITLE "מציג התמונות והפקסים של ReactOS" + IDS_SETASDESKBG "קבע כרקע שולחן עבודה" + IDS_PREVIEW "תצוגה מקדימה" + + /* Tooltips */ + IDS_TOOLTIP_NEXT_PIC "התמונה הבאה" + IDS_TOOLTIP_PREV_PIC "התמונה הקודמת" + IDS_TOOLTIP_ZOOM_IN "הגדלה (+)" + IDS_TOOLTIP_ZOOM_OUT "הרחקה (-)" + IDS_TOOLTIP_ROT_CLOCKW "סובב עם כיוון השעון (Ctrl+K)" + IDS_TOOLTIP_ROT_COUNCW "סובב כנגד כיוון השעון (Ctrl+L)" + IDS_TOOLTIP_PRINT "הדפס (Ctrl+P)" + IDS_TOOLTIP_SAVEAS "שמירה בשם... (Ctrl+S)" +END diff --git a/dll/win32/shimgvw/rsrc.rc b/dll/win32/shimgvw/rsrc.rc index 574ef37fa61..06723747db8 100644 --- a/dll/win32/shimgvw/rsrc.rc +++ b/dll/win32/shimgvw/rsrc.rc @@ -18,6 +18,9 @@ #ifdef LANGUAGE_FR_FR #include "lang/fr-FR.rc" #endif +#ifdef LANGUAGE_HE_IL + #include "lang/he-IL.rc" +#endif #ifdef LANGUAGE_IT_IT #include "lang/it-IT.rc" #endif diff --git a/dll/win32/shlwapi/shlwapi.rc b/dll/win32/shlwapi/shlwapi.rc index 203de15b172..1d4073ac4a0 100644 --- a/dll/win32/shlwapi/shlwapi.rc +++ b/dll/win32/shlwapi/shlwapi.rc @@ -70,6 +70,9 @@ #ifdef LANGUAGE_FR_FR #include "shlwapi_Fr.rc" #endif +#ifdef LANGUAGE_HE_IL + #include "shlwapi_He.rc" +#endif #ifdef LANGUAGE_HU_HU #include "shlwapi_Hu.rc" #endif diff --git a/dll/win32/shlwapi/shlwapi_He.rc b/dll/win32/shlwapi/shlwapi_He.rc new file mode 100644 index 00000000000..862dec170dd --- /dev/null +++ b/dll/win32/shlwapi/shlwapi_He.rc @@ -0,0 +1,47 @@ +/* + * Hebrew resources for shlwapi + * + * Copyright 2004 Jon Griffiths + * + * Translated by Baruch Rutman + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "resource.h" + +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + +IDD_ERR_DIALOG DIALOG 0, 0, 220, 60 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "שגיאה!" +FONT 8, "MS Shell Dlg" +{ + LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 + LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 + CHECKBOX "אל תראה לי את ההודעה זו שוב.", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + PUSHBUTTON "אישור", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "ביטול", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "כן", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "לא", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP +} + +STRINGTABLE +{ + IDS_BYTES_FORMAT "%ld בית" + IDS_TIME_INTERVAL_HOURS " שעות" + IDS_TIME_INTERVAL_MINUTES " דקות" + IDS_TIME_INTERVAL_SECONDS " שניות" +} diff --git a/dll/win32/smdll/readme.txt b/dll/win32/smdll/readme.txt index 6cfcfccd193..e2b8c33ba5f 100644 --- a/dll/win32/smdll/readme.txt +++ b/dll/win32/smdll/readme.txt @@ -40,4 +40,4 @@ Thread #0 Thread #1 - call SmCompleteSession (hSmApiPort, hSbApiPort, hApiPort) -- manage processes etc. \ No newline at end of file +- manage processes etc. diff --git a/dll/win32/softpub/CMakeLists.txt b/dll/win32/softpub/CMakeLists.txt index 72bcd45dbe2..cef2c966101 100644 --- a/dll/win32/softpub/CMakeLists.txt +++ b/dll/win32/softpub/CMakeLists.txt @@ -13,4 +13,4 @@ target_link_libraries(softpub wine) add_importlibs(softpub wintrust) -add_cd_file(TARGET softpub DESTINATION reactos/system32 FOR all) \ No newline at end of file +add_cd_file(TARGET softpub DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/srclient/CMakeLists.txt b/dll/win32/srclient/CMakeLists.txt index 995f2b395ca..8e6d69dc2d5 100644 --- a/dll/win32/srclient/CMakeLists.txt +++ b/dll/win32/srclient/CMakeLists.txt @@ -7,9 +7,9 @@ list(APPEND SOURCE ${CMAKE_CURRENT_BINARY_DIR}/srclient.def) add_library(srclient SHARED ${SOURCE}) -set_module_type(srclient win32dll ENTRYPOINT 0 ) +set_module_type(srclient win32dll) -add_importlibs(srclient kernel32 ntdll) +add_importlibs(srclient msvcrt kernel32 ntdll) add_dependencies(srclient psdk) add_cd_file(TARGET srclient DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/sxs/CMakeLists.txt b/dll/win32/sxs/CMakeLists.txt index 7aedf2fcfdc..01be538d565 100644 --- a/dll/win32/sxs/CMakeLists.txt +++ b/dll/win32/sxs/CMakeLists.txt @@ -12,8 +12,8 @@ list(APPEND SOURCE ${CMAKE_CURRENT_BINARY_DIR}/sxs.def) add_library(sxs SHARED ${SOURCE}) -set_module_type(sxs win32dll ENTRYPOINT 0 ) +set_module_type(sxs win32dll) target_link_libraries(sxs wine) -add_importlibs(sxs oleaut32 ole32 kernel32 ntdll) +add_importlibs(sxs msvcrt oleaut32 ole32 kernel32 ntdll) add_dependencies(sxs psdk) add_cd_file(TARGET sxs DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/syssetup/lang/he-IL.rc b/dll/win32/syssetup/lang/he-IL.rc new file mode 100644 index 00000000000..d9f161f7fa8 --- /dev/null +++ b/dll/win32/syssetup/lang/he-IL.rc @@ -0,0 +1,299 @@ +/* + * Copyright (C) 2004 Filip Navara + * Copyright (C) 2004 Eric Kohl + * + * Translated by Baruch Rutman + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + + +IDD_WELCOMEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "התקנת ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ברוכים לאשף ההתקנה של ReactOS", IDC_WELCOMETITLE, 115, 8, 195, 24 + LTEXT "האשף הזה יתקין את ReactOS על מחשבך. האשף צריך לאסוף מידע מסוים עליך על מחשבך כדי להגדיר את ReactOS כמו שצריך.", IDC_STATIC, 115, 40, 195, 100 + LTEXT "לחץ על הבא כדי להמשיך עם ההתקנה", IDC_STATIC, 115, 169, 195, 17 +END + + +IDD_ACKPAGE DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "התקנת ReactOS" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "המפתחים של ReactOS רוצים להודות למיזמי הקוד פתוח הבאים, אשר (חלקם) שימשו ביצירת ReactOS:", + IDC_STATIC,15,7,286,19 + LISTBOX IDC_PROJECTS,15,30,286,75,LBS_NOSEL | LBS_HASSTRINGS | + LBS_NOINTEGRALHEIGHT | WS_VSCROLL + LTEXT "ReactOS מורשת תחת רשיון ה-GPL, אז אם ברצונך להתשמש בחזרה או להפיצה(בחלקה), אז הינך מחויב לכבד את רישיון ה-GPL.", + IDC_STATIC,15,110,227,19 + PUSHBUTTON "&ראה GPL...",IDC_VIEWGPL,251,110,50,19 + LTEXT "לחץ על הבא כדי להמשיך עם ההתקנה",IDC_STATIC,15,136, + 195,17 +END + + +IDD_OWNERPAGE DIALOGEX DISCARDABLE 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "התקנת ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_ICON2, IDC_STATIC, 21, 7, 20, 20 + LTEXT "הקלד את שמך המלא ואת שם החברה או הארגון שלך.", + IDC_STATIC, 54, 7, 242, 21 + LTEXT "שם:", IDC_STATIC, 54, 37, 44, 8 + EDITTEXT IDC_OWNERNAME, 132, 35, 163, 14, WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL + LTEXT "ארגון:", IDC_STATIC, 54, 57, 44, 8 + EDITTEXT IDC_OWNERORGANIZATION, 132, 55, 163, 14, WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL +END + + +IDD_COMPUTERPAGE DIALOGEX DISCARDABLE 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "התקנת ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_ICON1, IDC_STATIC, 21, 7, 20, 20 + LTEXT "הקלד שם עבור מחשבך שהינו באורך 15 תווים או פחות. אם הינך נמצא ברשת, שם המחשב חייב להיות ייחודי.", + IDC_STATIC, 54, 7, 250, 24 + LTEXT "שם המחשב:", IDC_STATIC, 54, 38, 75, 8 + EDITTEXT IDC_COMPUTERNAME, 165, 35, 148, 14, WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL | ES_UPPERCASE + ICON IDI_ICON5, IDC_STATIC, 21, 57, 20, 20 + LTEXT "Setup will create a user account on your computer called Administrator. You can use this account if you need full access to your computer.", + IDC_STATIC, 54, 57, 250, 25 + LTEXT "Type an Administrator Password that is 14 characters or less.", + IDC_STATIC, 54, 87, 250, 8 + LTEXT "סיסמת מנהל:", IDC_STATIC, 54, 104, 105, 8 + EDITTEXT IDC_ADMINPASSWORD1, 165, 101, 148, 14, WS_VISIBLE | WS_TABSTOP | ES_PASSWORD + LTEXT "אישור סיסמה:", IDC_STATIC, 54, 123, 105, 8 + EDITTEXT IDC_ADMINPASSWORD2, 165, 120, 148, 14, WS_VISIBLE | WS_TABSTOP | ES_PASSWORD +END + + +IDD_LOCALEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "התקנת ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_ICON4, IDC_STATIC, 21, 7, 20, 20 + LTEXT "The system locale should match the language of the applications you want to use. The user locale controls how numbers, currencies, and dates appear.", IDC_STATIC, 53, 7, 253, 20 + LTEXT "", IDC_LOCALETEXT, 53, 29, 250, 16 + LTEXT "To change system or user locale settings, click Customize.", + IDC_STATIC, 53, 60, 196, 8 + PUSHBUTTON "&Customize...", IDC_CUSTOMLOCALE, 250, 57, 50, 14 + LTEXT "The keyboard layout controls the characters that appear when you type.", + IDC_STATIC, 53, 86, 253, 8 + LTEXT "", IDC_LAYOUTTEXT, 53, 100, 250, 16 + LTEXT "To change the keyboard layout, click Customize.", + IDC_STATIC, 53, 126, 184, 8 + PUSHBUTTON "C&ustomize...", IDC_CUSTOMLAYOUT, 250, 122, 50, 14 +END + + +IDD_DATETIMEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "התקנת ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_ICON3, IDC_STATIC, 21, 10, 20, 20 + LTEXT "תאריך ושעה:", IDC_STATIC, 53, 7, 253, 8 + CONTROL "", IDC_DATEPICKER, "SysDateTimePick32", + DTS_LONGDATEFORMAT | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 53, 17, 137, 14 + CONTROL "", IDC_TIMEPICKER, "SysDateTimePick32", + DTS_TIMEFORMAT | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 200, 17, 54, 14 + LTEXT "אזור זמן:", IDC_STATIC, 53, 42, 253, 8 + COMBOBOX IDC_TIMEZONELIST, 53, 52, 201, 93, + CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + AUTOCHECKBOX "Automatically adjust clock for &daylight saving changes", + IDC_AUTODAYLIGHT, 53, 124, 201, 10 +END + + +IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "התקנת ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDC_ACTIVITY, 53, 7, 253, 20 + LTEXT "", IDC_ITEM, 53, 29, 253, 20 + CONTROL "", IDC_PROCESSPROGRESS, "msctls_progress32", + PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 53, 70, 253, 8 +END + + +IDD_FINISHPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "משלים את התקנת ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Completing the ReactOS Setup Wizard", IDC_FINISHTITLE, 115, 8, 195, 24 + LTEXT "You have successfully completed ReactOS Setup.\n\nWhen you click Finish, your computer will restart.", IDC_STATIC, 115, 40, 195, 100 + CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 115, 138, 188, 12 + LTEXT "If there is a CD in a drive, remove it. Then, to restart your computer, click Finish.", IDC_STATIC, 115, 169, 195, 17 +END + + +IDD_GPL DIALOGEX 0, 0, 333, 230 +STYLE DS_SHELLFONT | DS_CENTER | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "GNU General Public License" +FONT 8, "MS Shell Dlg" +BEGIN + EDITTEXT IDC_GPL_TEXT,7,7,319,190,ES_MULTILINE | ES_AUTOHSCROLL | + ES_READONLY | WS_VSCROLL + DEFPUSHBUTTON "אישור",IDOK,141,209,50,14 +END + + +IDD_STATUSWINDOW_DLG DIALOGEX 0,0,274,26 +STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP +CAPTION "נא להמתין..." +FONT 8,"MS Shell Dlg 2",400,0,1 +BEGIN + LTEXT "",IDC_STATUSLABEL,7,8,234,12,SS_WORDELLIPSIS +END + + +STRINGTABLE +BEGIN + IDS_ACKTITLE "תודות" + IDS_ACKSUBTITLE "The shoulders ReactOS stands on and license information" + IDS_OWNERTITLE "Personalize your Software" + IDS_OWNERSUBTITLE "Setup uses this information about yourself to personalize ReactOS." + IDS_COMPUTERTITLE "Computer Name and Administrator Password" + IDS_COMPUTERSUBTITLE "You must provide a name and an Administrator Password for your computer." + IDS_LOCALETITLE "הגדרות אזור" + IDS_LOCALESUBTITLE "You can customize ReactOS for different regions and languages." + IDS_DATETIMETITLE "תאריך ושעה" + IDS_DATETIMESUBTITLE "Set the correct date and time for your computer." + IDS_PROCESSTITLE "רושם מרכיבים" + IDS_PROCESSSUBTITLE "נא להמתין..." +END + +STRINGTABLE +BEGIN + IDS_CMT_DOWNLOADER "הורד והתקן תכניות" +END + +STRINGTABLE +BEGIN + IDS_ACCESSORIES "עזרים" + IDS_CMT_CALC "מחשבון" + IDS_CMT_CMD "שורת הפקודה" + IDS_CMT_DEVMGMT "מנהל ההתקנים" + IDS_CMT_EVENTVIEW "מציג האירועים" + IDS_CMT_EXPLORER "סייר" + IDS_CMT_MSCONFIG "תכנית הגדרת המערכת" + IDS_CMT_NOTEPAD "עורך טקסט" + IDS_CMT_RDESKTOP "שולחן עבודה מרוחק" + IDS_CMT_REGEDIT "עורך הרישום" + IDS_CMT_SCREENSHOT "צילום מסך" + IDS_CMT_SERVMAN "מנהל השירותים" + IDS_CMT_WORDPAD "עורך המסמכים" + IDS_CMT_PAINT "צייר" +END + +STRINGTABLE +BEGIN + IDS_GAMES "משחקים" + IDS_CMT_SOLITAIRE "סוליטייר" + IDS_CMT_WINEMINE "שולה המוקשים" + IDS_CMT_SPIDER "סוליטייר עכביש" +END + +STRINGTABLE +BEGIN + IDS_SYS_TOOLS "כלי מערכת" + IDS_CMT_CHARMAP "מפת התווים" + IDS_CMT_DXDIAG "Launch ReactX-Diagnostic program" + IDS_CMT_KBSWITCH "Keyboard Layout Switcher" +END + +STRINGTABLE +BEGIN + IDS_SYS_ACCESSIBILITY "נגישות" + IDS_CMT_MAGNIFY "זכוכית מגדלת" +END + +STRINGTABLE +BEGIN + IDS_SYS_ENTERTAINMENT "בידור" + IDS_CMT_MPLAY32 "נגן המולטימדיה" + IDS_CMT_SNDVOL32 "בקרת עוצמה" + IDS_CMT_SNDREC32 "רשמקול" +END + +STRINGTABLE +BEGIN + IDS_REACTOS_SETUP "ReactOS התקנת" + IDS_UNKNOWN_ERROR "שגיאה לא ידועה" + IDS_REGISTERING_COMPONENTS "רושם רכיבים..." + IDS_LOADLIBRARY_FAILED "LoadLibrary נכשל: " + IDS_GETPROCADDR_FAILED "GetProcAddr נכשל: " + IDS_REGSVR_FAILED "DllRegisterServer נכשל: " + IDS_DLLINSTALL_FAILED "DllInstall נכשל: " + IDS_TIMEOUT "Timeout during registration" + IDS_REASON_UNKNOWN "" +END + +STRINGTABLE +BEGIN + IDS_SHORT_CALC "מחשבון.lnk" + IDS_SHORT_CHARMAP "מפת תווים.lnk" + IDS_SHORT_CMD "שורת הפקודה.lnk" + IDS_SHORT_DEVICE "מנהל ההתקנים.lnk" + IDS_SHORT_DOWNLOADER "מנהל היישומים של ReactOS.lnk" + IDS_SHORT_DXDIAG "ReactX Diagnostic.lnk" + IDS_SHORT_EVENTVIEW "מציג האירועים.lnk" + IDS_SHORT_EXPLORER "ReactOS סייר.lnk" + IDS_SHORT_KBSWITCH "Keyboard Layout Switcher.lnk" + IDS_SHORT_MAGNIFY "זכוכית מגדלת.lnk" + IDS_SHORT_MPLAY32 "נגן מולטימדיה.lnk" + IDS_SHORT_MSCONFIG "הגדרת המערכת.lnk" + IDS_SHORT_NOTEPAD "פנקס הרשימות.lnk" + IDS_SHORT_RDESKTOP "שולחן עבודה מרוחק.lnk" + IDS_SHORT_REGEDIT "Regedit.lnk" + IDS_SHORT_SERVICE "מנהל השירותים.lnk" + IDS_SHORT_SNAP "SnapShot.lnk" + IDS_SHORT_SNDVOL32 "בקרת עוצמה.lnk" + IDS_SHORT_SNDREC32 "רשמקול.lnk" + IDS_SHORT_SOLITAIRE "סוליטייר.lnk" + IDS_SHORT_WINEMINE "WineMine.lnk" + IDS_SHORT_WORDPAD "כתבן.lnk" + IDS_SHORT_PAINT "צייר.lnk" + IDS_SHORT_SPIDER "סוליטייר עכביש.lnk" +END + +STRINGTABLE +BEGIN + IDS_WZD_NAME "Setup cannot continue until you enter your name." + IDS_WZD_SETCOMPUTERNAME "Setup failed to set the computer name." + IDS_WZD_COMPUTERNAME "Setup cannot continue until you enter the name of your computer." + IDS_WZD_PASSWORDEMPTY "You must enter a password !" + IDS_WZD_PASSWORDMATCH "The passwords you entered do not match. Please enter the desired password again." + IDS_WZD_PASSWORDCHAR "The password you entered contains invalid characters. Please enter a cleaned password." + IDS_WZD_LOCALTIME "Setup was unable to set the local time." +END + +STRINGTABLE +BEGIN + IDS_STATUS_INSTALL_DEV "מתקין התקנים..." +END + +/* EOF */ diff --git a/dll/win32/syssetup/syssetup.rc b/dll/win32/syssetup/syssetup.rc index e76897cc105..412cda5abec 100644 --- a/dll/win32/syssetup/syssetup.rc +++ b/dll/win32/syssetup/syssetup.rc @@ -63,6 +63,9 @@ IDR_GPL RT_TEXT "COPYING" #ifdef LANGUAGE_FR_FR #include "lang/fr-FR.rc" #endif +#ifdef LANGUAGE_HE_IL + #include "lang/he-IL.rc" +#endif #ifdef LANGUAGE_HU_HU #include "lang/hu-HU.rc" #endif diff --git a/dll/win32/tapi32/CMakeLists.txt b/dll/win32/tapi32/CMakeLists.txt index c896e373add..c738e41ae1e 100644 --- a/dll/win32/tapi32/CMakeLists.txt +++ b/dll/win32/tapi32/CMakeLists.txt @@ -14,11 +14,11 @@ list(APPEND SOURCE add_library(tapi32 SHARED ${SOURCE}) -set_module_type(tapi32 win32dll ENTRYPOINT 0 ) +set_module_type(tapi32 win32dll) target_link_libraries(tapi32 wine) -add_importlibs(tapi32 advapi32 kernel32 ntdll) +add_importlibs(tapi32 msvcrt advapi32 kernel32 ntdll) add_dependencies(tapi32 psdk) add_cd_file(TARGET tapi32 DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/tapiui/lang/he-IL.rc b/dll/win32/tapiui/lang/he-IL.rc new file mode 100644 index 00000000000..f7b144ca742 --- /dev/null +++ b/dll/win32/tapiui/lang/he-IL.rc @@ -0,0 +1,446 @@ +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + +101 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "כללי חיוג" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 201, 2000, 7, 7, 21, 20 + LTEXT "The list below displays the locations you have specified. Select the location from which you are dialing.", -1, 35, 7, 210, 16 + LTEXT "&Locations:", -1, 7, 35, 210, 8 + CONTROL "", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000011D, 7, 46, 238, 105, WS_EX_CLIENTEDGE + PUSHBUTTON "&New...", 1030, 87, 155, 50, 14 + PUSHBUTTON "&Edit...", 1031, 141, 155, 50, 14 + PUSHBUTTON "&Delete", 1032, 195, 155, 50, 14 + LTEXT "Phone number will be dialed as:", 1052, 7, 181, 100, 8 + LTEXT "", 1053, 14, 195, 224, 16 +END + +102 DIALOGEX 0, 0, 252, 255 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "כללי" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 202, 2000, 7, 7, 20, 20 + LTEXT "Location &name:", -1, 35, 11, 56, 8, SS_CENTERIMAGE + EDITTEXT 1038, 96, 8, 149, 14, ES_AUTOHSCROLL + LTEXT "Specify the location from which you will be dialing.", 2001, 7, 33, 238, 8 + LTEXT "Country/®ion:", -1, 7, 49, 161, 8 + COMBOBOX 1006, 7, 60, 175, 200, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + LTEXT "Area &code:", -1, 190, 49, 48, 8 + EDITTEXT 1034, 190, 60, 48, 12, ES_AUTOHSCROLL + GROUPBOX "Dialing rules", 2002, 7, 80, 238, 92 + LTEXT "When dialing from this location, use the following rules:", 2003, 14, 92, 224, 8 + LTEXT "To access an outside line for &local calls, dial:", -1, 14, 106, 170, 8 + EDITTEXT 1010, 190, 104, 48, 12, ES_AUTOHSCROLL + LTEXT "To access an outside line for long-&distance calls, dial:", -1, 14, 122, 170, 8 + EDITTEXT 1011, 190, 120, 48, 12, ES_AUTOHSCROLL + LTEXT "Use this carri&er code to make long-distance calls:", -1, 14, 138, 170, 8 + EDITTEXT 1059, 190, 136, 48, 12, ES_AUTOHSCROLL + LTEXT "Use this carrier code to make &international calls:", -1, 14, 154, 170, 8 + EDITTEXT 1060, 190, 152, 48, 12, ES_AUTOHSCROLL + AUTOCHECKBOX "To disable call &waiting, dial:", 1035, 14, 177, 170, 10 + COMBOBOX 1013, 190, 176, 48, 73, CBS_DROPDOWN | CBS_SORT | WS_VSCROLL + LTEXT "Dial using:", -1, 14, 195, 40, 8 + AUTORADIOBUTTON "&Tone", 1036, 58, 194, 50, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "&Pulse", 1037, 112, 194, 50, 10, NOT WS_TABSTOP + LTEXT "Phone number will be dialed as:", 1052, 7, 219, 100, 8 + LTEXT "", 1053, 14, 232, 224, 16 +END + +103 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Area Code Rules" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "An area code rule determines how phone numbers are dialed from your current area code to other area codes and within your area code.", 2000, 7, 7, 238, 16 + LTEXT "Area &code rules:", -1, 7, 31, 238, 8 + CONTROL "", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000801D, 7, 42, 238, 99, WS_EX_CLIENTEDGE + PUSHBUTTON "&New...", 1030, 87, 147, 50, 14 + PUSHBUTTON "&Edit...", 1031, 141, 147, 50, 14 + PUSHBUTTON "&Delete", 1032, 195, 147, 50, 14 + GROUPBOX "Description", 2006, 7, 166, 238, 45 + LTEXT "", 1039, 14, 180, 224, 24 +END + +104 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "כרטיס חיוג" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the calling card you will use, or click New to add a different card.", 2000, 7, 7, 238, 8 + LTEXT "Card &Types:", -1, 7, 23, 238, 8 + CONTROL "", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000400D, 7, 34, 238, 63, WS_EX_CLIENTEDGE + PUSHBUTTON "&New...", 1030, 87, 103, 50, 14 + PUSHBUTTON "&Edit...", 1031, 141, 103, 50, 14 + PUSHBUTTON "&Delete", 1032, 195, 103, 50, 14 + LTEXT "A&ccount number:", -1, 7, 127, 91, 8 + EDITTEXT 1018, 102, 125, 143, 12, ES_AUTOHSCROLL + LTEXT "&Personal ID Number (PIN):", -1, 7, 145, 91, 8 + EDITTEXT 1019, 102, 143, 143, 12, ES_AUTOHSCROLL + GROUPBOX "Access phone numbers for", 2001, 7, 158, 238, 53 + LTEXT "Long distance calls:", -1, 14, 172, 84, 8 + LTEXT "", 1042, 102, 172, 136, 8 + LTEXT "International calls:", -1, 14, 184, 84, 8 + LTEXT "", 1043, 102, 184, 136, 8 + LTEXT "Local calls:", -1, 14, 196, 84, 8 + LTEXT "", 1051, 102, 196, 136, 8 +END + +105 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "כללי" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 203, 2000, 7, 7, 20, 20 + LTEXT "&Calling card name:", -1, 35, 12, 64, 8, SS_CENTERIMAGE + EDITTEXT 1047, 105, 9, 140, 14, ES_AUTOHSCROLL + LTEXT "Account &number:", -1, 7, 35, 238, 8 + EDITTEXT 1018, 7, 46, 116, 14, ES_AUTOHSCROLL + LTEXT "&Personal Identification Number (PIN):", -1, 7, 68, 238, 8 + EDITTEXT 1019, 7, 80, 116, 14, ES_AUTOHSCROLL + LTEXT "This calling card will be used when:", 1056, 14, 117, 224, 8 + GROUPBOX "Calling card details", 2001, 7, 105, 238, 66 + LTEXT "", 1000, 22, 131, 216, 8 + LTEXT "", 1001, 22, 143, 216, 8 + LTEXT "", 1002, 22, 155, 216, 8 +END + +106 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Long Distance" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Access number for &long distance calls:", -1, 7, 7, 238, 8 + EDITTEXT 1044, 7, 18, 140, 14, ES_AUTOHSCROLL + LTEXT "Use the buttons below to enter the dialing steps for making long-distance calls. Enter these steps in the exact order as they appear on your calling card.", 2000, 7, 40, 238, 24 + LTEXT "Calling ca&rd dialing steps:", -1, 7, 72, 80, 8 + CONTROL "List1", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000400D, 7, 83, 184, 74, WS_EX_CLIENTEDGE + PUSHBUTTON "Move &Up", 1022, 195, 83, 50, 14 + PUSHBUTTON "&Move Down", 1023, 195, 101, 50, 14 + PUSHBUTTON "&Delete", 1024, 195, 119, 50, 14 + PUSHBUTTON "Access &Number", 1025, 7, 161, 90, 14 + PUSHBUTTON "A&ccount Number", 1018, 101, 161, 90, 14 + PUSHBUTTON "&PIN", 1019, 7, 179, 90, 14 + PUSHBUTTON "D&estination Number...", 1020, 101, 179, 90, 14 + PUSHBUTTON "&Wait for Prompt...", 1017, 7, 197, 90, 14 + PUSHBUTTON "&Specify Digits...", 1021, 101, 197, 90, 14 +END + +107 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "בינלאומי" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Access number for &international calls:", -1, 7, 7, 238, 8 + EDITTEXT 1045, 7, 18, 140, 14, ES_AUTOHSCROLL + LTEXT "Use the buttons below to enter the dialing steps for making international calls. Enter these steps in the exact order as they appear on your calling card.", 2000, 7, 40, 244, 24 + LTEXT "Calling ca&rd dialing steps:", -1, 7, 72, 80, 8 + CONTROL "List1", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000400D, 7, 83, 184, 74, WS_EX_CLIENTEDGE + PUSHBUTTON "Move &Up", 1022, 195, 83, 50, 14 + PUSHBUTTON "&Move Down", 1023, 195, 101, 50, 14 + PUSHBUTTON "&Delete", 1024, 195, 119, 50, 14 + PUSHBUTTON "Access &Number", 1025, 7, 161, 90, 14 + PUSHBUTTON "A&ccount Number", 1018, 101, 161, 90, 14 + PUSHBUTTON "&PIN", 1019, 7, 179, 90, 14 + PUSHBUTTON "D&estination Number...", 1020, 101, 179, 90, 14 + PUSHBUTTON "&Wait for Prompt...", 1017, 7, 197, 90, 14 + PUSHBUTTON "&Specify Digits...", 1021, 101, 197, 90, 14 +END + +108 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "שיחוג מקומיות" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Access number for &local calls:", -1, 7, 7, 238, 8 + EDITTEXT 1008, 7, 18, 140, 14, ES_AUTOHSCROLL + LTEXT "Use the buttons below to enter the dialing steps for making local calls. Enter these steps in the exact order as they appear on your calling card. To make local calls without using your calling card, leave this section blank.", 2000, 7, 40, 238, 24 + LTEXT "Calling ca&rd dialing steps:", -1, 7, 72, 238, 8 + CONTROL "List1", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000400D, 7, 83, 184, 74, WS_EX_CLIENTEDGE + PUSHBUTTON "Move &Up", 1022, 195, 83, 50, 14 + PUSHBUTTON "&Move Down", 1023, 195, 101, 50, 14 + PUSHBUTTON "&Delete", 1024, 195, 119, 50, 14 + PUSHBUTTON "Access &Number", 1025, 7, 161, 90, 14 + PUSHBUTTON "A&ccount Number", 1018, 101, 161, 90, 14 + PUSHBUTTON "&PIN", 1019, 7, 179, 90, 14 + PUSHBUTTON "D&estination Number...", 1020, 101, 179, 90, 14 + PUSHBUTTON "&Wait for Prompt...", 1017, 7, 197, 90, 14 + PUSHBUTTON "&Specify Digits...", 1021, 101, 197, 90, 14 +END + +109 DIALOGEX 0, 0, 252, 257 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "New Area Code Rule" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "This area code rule will only apply to calls made to the area code and prefix combination you specify below.", 2000, 7, 6, 238, 16 + LTEXT "Area code you are calling:", -1, 7, 31, 110, 8 + LTEXT "A&rea code:", -1, 7, 47, 36, 8 + EDITTEXT 1034, 46, 44, 50, 14, ES_AUTOHSCROLL + LTEXT "Specify the prefixes to be used for this area code rule.", -1, 14, 78, 224, 8 + AUTORADIOBUTTON "&Include all the prefixes within this area code", 1014, 14, 90, 224, 12, NOT WS_TABSTOP + AUTORADIOBUTTON "Include &only the prefixes in the list below:", 1015, 14, 104, 224, 12, NOT WS_TABSTOP + LTEXT "&Prefixes to include:", 1057, 26, 117, 119, 8 + CONTROL "List1", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000411D, 25, 128, 66, 32, WS_EX_CLIENTEDGE + PUSHBUTTON "&Add...", 1005, 95, 128, 50, 14 + PUSHBUTTON "D&elete", 1024, 95, 146, 50, 14 + LTEXT "When dialing phone numbers that contain the prefixes above:", -1, 14, 184, 224, 8 + AUTOCHECKBOX "&Dial:", 1012, 14, 198, 30, 12 + EDITTEXT 1007, 46, 196, 42, 14, ES_AUTOHSCROLL + AUTOCHECKBOX "Include the area &code", 1029, 14, 214, 85, 12 + DEFPUSHBUTTON "אישור", 1, 141, 236, 50, 14 + PUSHBUTTON "ביטול", 2, 195, 236, 50, 14 + RTEXT "Area code", 2001, 133, 31, 51, 8 + LTEXT "קידומת", 2002, 200, 31, 45, 8 + CONTROL "", 2003, "STATIC", SS_BLACKFRAME | SS_SUNKEN, 180, 41, 1, 6 + CONTROL "", 2004, "STATIC", SS_BLACKFRAME | SS_SUNKEN, 203, 41, 1, 6 + RTEXT "X - X X X - X X X - X X X X", 2005, 133, 48, 112, 8 + GROUPBOX "קידומות", -1, 7, 64, 238, 102 + GROUPBOX "כללים", -1, 7, 170, 238, 60 +END + +110 DIALOGEX 0, 0, 227, 82 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", 1003, 7, 7, 213, 8 + LTEXT "", 1039, 7, 23, 213, 8 + EDITTEXT 1031, 7, 34, 213, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "אישור", 1, 116, 62, 50, 14 + PUSHBUTTON "ביטול", 2, 170, 62, 50, 14 +END + +111 DIALOGEX 0, 0, 252, 124 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Wait for" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the type of prompt to wait for before continuing with the dialing sequence.", 2000, 7, 7, 238, 16 + AUTORADIOBUTTON "Wait for a &dial tone", 1009, 7, 31, 238, 10, WS_GROUP + AUTORADIOBUTTON "Wait for a &voice message to complete", 1016, 7, 47, 238, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "Wait for a specific length of &time:", 1048, 7, 63, 238, 10, NOT WS_TABSTOP + EDITTEXT 1050, 18, 77, 36, 14, ES_AUTOHSCROLL | WS_GROUP + CONTROL "Spin1", 1049, "msctls_updown32", 0x00000036, 42, 78, 11, 14 + LTEXT "שניות", -1, 58, 81, 187, 8 + DEFPUSHBUTTON "אישור", 1, 141, 103, 50, 14 + PUSHBUTTON "ביטול", 2, 195, 103, 50, 14 +END + +112 DIALOGEX 0, 0, 252, 111 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Destination number" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "This step will place the destination number that you will be dialing into the calling card sequence. When dialing the destination number, which parts of the number do you want to dial?", 2000, 7, 7, 238, 24 + AUTOCHECKBOX "Dial the &country/region code", 1027, 7, 39, 238, 10 + AUTOCHECKBOX "Dial the &area code", 1034, 7, 55, 238, 10 + AUTOCHECKBOX "Dial the &number", 1008, 7, 71, 238, 10, WS_DISABLED + DEFPUSHBUTTON "אישור", 1, 141, 92, 50, 14 + PUSHBUTTON "ביטול", 2, 195, 92, 50, 14 +END + +113 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "מתקדם" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 201, 2000, 7, 7, 20, 20 + LTEXT "The following telephony providers are installed on this computer:", -1, 40, 7, 205, 8 + LTEXT "&Providers:", -1, 7, 35, 238, 8 + LISTBOX 1033, 7, 46, 238, 147, LBS_STANDARD | LBS_NOINTEGRALHEIGHT | WS_TABSTOP + PUSHBUTTON "A&dd...", 1005, 87, 197, 50, 14 + PUSHBUTTON "&Remove", 1024, 141, 197, 50, 14 + PUSHBUTTON "&Configure...", 1031, 195, 197, 50, 14 +END + +114 DIALOGEX 20, 15, 252, 127 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "הוסף ספק" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the provider you wish to install from the list below, and click Add.", 2000, 7, 7, 241, 8 + LTEXT "&Telephony providers:", -1, 7, 23, 144, 10 + LISTBOX 1055, 7, 34, 238, 74, LBS_STANDARD | WS_TABSTOP + PUSHBUTTON "&Add", 1005, 141, 106, 50, 14 + DEFPUSHBUTTON "Cancel", 2, 195, 106, 50, 14 +END + +115 DIALOGEX 10, 10, 303, 228 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Location Information" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 302, 302, "STATIC", SS_BITMAP, 10, 10, 88, 155 + LTEXT "Before you can make any phone or modem connections, ReactOS needs the following information about your current location.", 2000, 107, 15, 188, 25 + LTEXT "&What country/region are you in now?", -1, 107, 43, 189, 10 + COMBOBOX 1006, 107, 55, 180, 200, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + LTEXT "What area &code (or city code) are you in now?", -1, 107, 74, 189, 10 + EDITTEXT 1034, 107, 87, 45, 12, ES_AUTOHSCROLL + LTEXT "If you need to specify a ca&rrier code, what is it?", -1, 107, 105, 189, 10 + EDITTEXT 1058, 106, 118, 45, 12, ES_UPPERCASE | ES_AUTOHSCROLL + LTEXT "If you dial a number to access an &outside line, what is it?", -1, 107, 137, 189, 10 + EDITTEXT 1010, 107, 149, 45, 12, ES_UPPERCASE | ES_AUTOHSCROLL + LTEXT "The phone system at this location uses:", -1, 107, 168, 189, 10 + AUTORADIOBUTTON "&Tone dialing", 1036, 107, 178, 57, 14, WS_GROUP | NOT WS_TABSTOP + AUTORADIOBUTTON "&Pulse dialing", 1037, 175, 178, 57, 14, NOT WS_TABSTOP + DEFPUSHBUTTON "OK", 1, 192, 204, 50, 14 + PUSHBUTTON "Cancel", 2, 246, 204, 50, 14 +END + +400 DIALOGEX 0, 0, 290, 151 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 302, 302, "STATIC", SS_BITMAP, 0, 0, 88, 155 + LTEXT "Before you can make any phone or modem connections, ReactOS needs the following information about your current location.", 2000, 95, 2, 188, 25 + LTEXT "&What country/region are you in now?", -1, 95, 30, 188, 10 + COMBOBOX 1006, 95, 41, 177, 68, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + LTEXT "What area &code (or city code) are you in now?", -1, 95, 61, 188, 10 + EDITTEXT 1034, 95, 73, 40, 14, ES_AUTOHSCROLL + LTEXT "If you dial a number to access an &outside line, what is it?", -1, 95, 96, 188, 10 + EDITTEXT 1010, 95, 107, 40, 14, ES_UPPERCASE | ES_AUTOHSCROLL + LTEXT "The phone system at this location uses:", -1, 95, 129, 159, 10 + AUTORADIOBUTTON "&Tone dialing", 1036, 95, 139, 55, 12, WS_GROUP | NOT WS_TABSTOP + AUTORADIOBUTTON "&Pulse dialing", 1037, 155, 139, 55, 12, NOT WS_TABSTOP +END + +500 DIALOGEX 0, 0, 235, 88 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "ReactOS סייר" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 504, 501, 13, 14, 21, 20 + LTEXT "", 502, 47, 15, 180, 32 + AUTOCHECKBOX "&In the future, always trust this page", 503, 50, 47, 147, 12 + DEFPUSHBUTTON "אישור", 505, 110, 65, 50, 14 + PUSHBUTTON "ביטול", 506, 164, 65, 50, 14 +END + +STRINGTABLE +BEGIN + 1 "אפשרויות טלפון ומודם" + 2 "Configure dialing rules and properties for using your modem." + 3 "מיקום" + 4 "To create a new location, click New." + 5 "מיקום חדש" + 6 "עריכת מיקום" + 7 "New Calling Card" + 8 "Edit Calling Card" + 9 "Area Code" + 10 "קידומות" + 11 "כלל" + 12 "The character you entered is invalid.\n\nValid characters are 0 through 9, *, #, and comma." + 13 "The character you entered is invalid.\n\nValid characters are 0 through 9, *, #, space, and comma." + 14 "The character you entered is invalid.\n\nValid characters are 0 through 9." + 15 "The character you entered is invalid." + 16 "חייג %1" + 17 "Dial %1 plus area code" + 18 "Dial area code" + 19 "Dial number only" + 20 "הכל" + 21 "נבחר" + 22 "Edit Area Code Rule" + 23 "Select a rule in the list above to view its description, or click New to add a rule." + 24 "Dial '%2' plus the area code before the number for all calls within the %1 area code." + 25 "Dial '%2' before the number for all calls within the %1 area code." + 26 "Dial the area code before the number for all calls within the %1 area code." + 27 "Dial only the number for all calls within the %1 area code." + 28 "Dial '%2' plus the area code before the number for calls within the %1 area code, containing the prefixes you specified." + 29 "Dial '%2' before the number for calls within the %1 area code, containing the prefixes you specified." + 30 "Dial the area code before the number for calls within the %1 area code, containing the prefixes you specified." + 31 "Dial only the number for calls within the %1 area code, containing the prefixes you specified." + 32 "Dial a '1' before calls within all other area codes, and include the area code for all prefixes." + 33 "הוספת קידומת" + 34 "Enter one or more prefixes separated by spaces or commas." + 35 "Specify Digits" + 36 "Enter one or more digits (including * and #) to be dialed." + 37 "You tried to enter an invalid character.\n\nValid characters are 0 thru 9 and space." + 38 "Wait for %1!d! seconds." + 39 "Dial the access number." + 40 "Dial the account number." + 41 "Dial the PIN number." + 42 "Wait for a dial tone." + 43 "Wait for a voice message to end." + 44 "Dial the country/region code, area code, and number." + 45 "Dial the country/region code and number." + 46 "Dial the area code and number." + 47 "Dial the country/region code." + 48 "Dial the area code." + 49 "Dial the number." + 50 "dialing long distance calls." + 51 "dialing international calls." + 52 "dialing local calls." + 53 "There are no rules defined for how this calling card should be used." + 54 "You must enter the long distance carrier code for this location." + 55 "You must enter a name for this location." + 56 "You must enter the area code for this location." + 57 "You must select the number to dial to disable call waiting." + 58 "You must select the country or region that you are calling from." + 59 "Missing Information" + 60 "The location name you have entered is already in use. Please enter a unique name." + 61 "This calling card is missing some required information. To use this card, click Edit to provide more information, or select a different card." + 62 "You must select a default calling card. Select a card from the list, or click New to create a new card." + 63 "You must enter the calling card name." + 64 "You must enter the account number." + 65 "You must enter the PIN number." + 66 "There are no rules defined for this calling card. To create a rule, select the Long Distance, International, or Local Calls tab." + 67 "Your long distance rule requires your calling card's long distance access number." + 68 "Your international rule requires your calling card's international access number." + 69 "Your local rule requires your calling card's local access number." + 70 "None" + 71 "Are you sure you want to remove the selected Telephony Service Provider?" + 72 "" + 73 "You must enter the prefixes for which this rule applies." + 74 "&Digits:" + 75 "&Prefixes:" + 76 "You tried to enter an invalid character.\n\nValid characters are 0 thru 9, space, and comma." + 77 "Confirm Delete" + 78 "Are you sure you want to delete this location?" + 79 "Are you sure you want to delete this calling card?" + 80 "Are you sure you want to delete this area code rule?" + 81 "You must enter the digits to dial." + 82 "The calling card name you have entered is already in use. Please enter a unique name." + 83 "ReactOS needs telephone information about the location from which you will be dialing. If you cancel without providing this information, this program may not function correctly when dialing. In addition, some applications respond to your canceling this dialog box by immediately re-posting it.\nAre you sure you want to cancel?" + 84 "Confirm Cancel" + 85 "My Location" + 86 "" + 87 "The character you entered is invalid.\n\nValid characters are 0 through 9, A through D, *, #, +, !, space, and comma." + 88 "You must enter the international carrier code for this location." + 89 "You must enter the carrier code for this location." + 90 "This page is attempting to make or monitor telephone calls or other multimedia connections on your computer.\nDo you want allow it to continue?" + 91 "This page is attempting to access directory information on your network.\nDo you want to allow it to continue?" + 92 "This page is attempting to access or change network conferencing information.\nDo you want to allow it to continue?" + 93 "This page is attempting to access or change registry information.\nDo you want to allow it to continue?" + 1064 "Phone And Modem control panel can not be opened. You may have a problem starting telephony service." + 1065 "Remove Provider" + 15800 "23" + 15801 "0,""None (Direct Dial)"","""","""","""","""","""","""","""","""",1" + 15802 "1,""AT&T Direct Dial via 1010ATT1"","""",""G"",""J1FG"",""J011EFG"","""","""",""1010288"",""1010288"",1" + 15803 "2,""AT&T via 1010ATT0"","""",""G"",""J0FG$TH"",""J01EFG$TH"","""","""",""1010288"",""1010288"",1" + 15804 "3,""AT&T via 1-800-321-0288"","""",""G"",""J$TFG$TH"",""J$T01EFG$TH"","""","""",""18003210288"",""18003210288"",1" + 15805 "4,""MCI Direct Dial via 10102221"","""",""G"",""J1FG"",""J011EFG"","""","""",""1010222"",""1010222"",1" + 15806 "5,""MCI via 10102220"","""",""G"",""J0FG$TH"",""J01EFG$TH"","""","""",""1010222"",""1010222"",1" + 15807 "6,""MCI via 1-800-888-8000"","""",""G"",""J,,,,,,TH,,FG"",""J,,,,,,TH,,011EFG"","""","""",""18008888000"",""18008888000"",1" + 15808 "7,""MCI via 1-800-674-0700"","""",""G"",""J,,,,,,TH,,FG"",""J,,,,,,TH,,011EFG"","""","""",""18006740700"",""18006740700"",1" + 15809 "8,""MCI via 1-800-674-7000"","""",""G"",""J,,,,,,TH,,FG"",""J,,,,,,TH,,011EFG"","""","""",""18006747000"",""18006747000"",1" + 15810 "9,""US Sprint Direct Dial via 10103331"","""",""G"",""J1FG"",""J011EFG"","""","""",""1010333"",""1010333"",1" + 15811 "10,""US Sprint via 10103330"","""",""G"",""J0FG$TH"",""J01EFG$TH"","""","""",""1010333"",""1010333"",1" + 15812 "11,""US Sprint via 1-800-877-8000"","""",""G"",""J,,,T0FG,,H"",""J,,,T01EFG#,H"","""","""",""18008778000"",""18008778000"",1" + 15813 "12,""Calling Card via 0"","""",""G"",""0FG$TH"",""01EFG$TH"","""","""","""","""",1" + 15814 "13,""Carte France Telecom"","""",""T3010,H,0FG#"",""T3010,H,0FG#"",""T3010,H,00EFG#"","""","""","""","""",1" + 15815 "14,""Mercury (UK)"","""",""J$TH,0FG"",""J$TH,0FG"",""J$TH,0FG"","""",""0500800800"",""0500800800"",""0500800800"",1" + 15816 "15,""British Telecom (UK)"","""",""J$H,0FG"",""J$H,0FG"",""J$H,00EFG"","""",""144"",""144"".""144"",1" + 15817 "16,""CLEAR Communications (New Zealand)"","""",""J$TH,0FG"",""J$TH,0FG"",""J$TH,00EFG"","""",""0502333"",""0502333"",""0502333"",1" + 15818 "17,""Telecom New Zealand"","""",""J,0FG?H"",""J,0FG?H"",""J,00EFG?H"","""",""012"",""012"",""012"",1" + 15819 "18,""Global Card (Taiwan to USA)"","""",""G"",""0FG"",""J,102880$TFG$H"","""","""","""",""0080"",1" + 15820 "19,""Telstra (Australia) via 1818 (voice)"","""",""J$TH,FG#"",""J$TH,FG#"",""J$TH,0011EFG#"","""",""1818"",""1818"",""1818"",1" + 15821 "20,""Telstra (Australia) via 1818 (fax)"","""",""J$TH,FG#"",""J$TH,FG#"",""J$TH,0015EFG#"","""",""1818"",""1818"",""1818"",1" + 15822 "21,""Optus (Australia) via 1812"","""",""FG"",""FG"",""J@TH,0011EFG"","""","""","""",""1812"",1" + 15823 "22,""Optus (Australia) via 008551812"","""",""FG"",""FG"",""J@TH,0011EFG"","""","""","""",""008551812"",1" +END diff --git a/dll/win32/tapiui/tapiui.rc b/dll/win32/tapiui/tapiui.rc index 6f7989a1dfc..739eb168765 100644 --- a/dll/win32/tapiui/tapiui.rc +++ b/dll/win32/tapiui/tapiui.rc @@ -26,6 +26,9 @@ IDB_WIZARD BITMAP "res/302.bmp" #ifdef LANGUAGE_EN_US #include "lang/en-US.rc" #endif +#ifdef LANGUAGE_HE_IL + #include "lang/he-IL.rc" +#endif #ifdef LANGUAGE_NB_NO #include "lang/no-NO.rc" #endif diff --git a/dll/win32/unicows/CMakeLists.txt b/dll/win32/unicows/CMakeLists.txt index 2c5e7d2aa59..a4bc230f716 100644 --- a/dll/win32/unicows/CMakeLists.txt +++ b/dll/win32/unicows/CMakeLists.txt @@ -7,7 +7,7 @@ list(APPEND SOURCE add_library(unicows SHARED ${SOURCE}) -set_module_type(unicows win32dll ENTRYPOINT 0 ) +set_module_type(unicows win32dll) add_importlibs(unicows avicap32 diff --git a/dll/win32/updspapi/CMakeLists.txt b/dll/win32/updspapi/CMakeLists.txt index b68662925e0..18d1b1c8e52 100644 --- a/dll/win32/updspapi/CMakeLists.txt +++ b/dll/win32/updspapi/CMakeLists.txt @@ -10,11 +10,11 @@ list(APPEND SOURCE ${CMAKE_CURRENT_BINARY_DIR}/updspapi.def) add_library(updspapi SHARED ${SOURCE}) -set_module_type(updspapi win32dll ENTRYPOINT 0 ) +set_module_type(updspapi win32dll) target_link_libraries(updspapi wine) -add_importlibs(updspapi setupapi kernel32 ntdll) +add_importlibs(updspapi msvcrt setupapi kernel32 ntdll) add_dependencies(updspapi psdk) add_cd_file(TARGET updspapi DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/userenv/lang/he-IL.rc b/dll/win32/userenv/lang/he-IL.rc new file mode 100644 index 00000000000..6b693ba400a --- /dev/null +++ b/dll/win32/userenv/lang/he-IL.rc @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2004 Eric Kohl + * + * Translated by Baruch Rutman + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + +STRINGTABLE +BEGIN + IDS_PROFILEPATH "%SystemDrive%\\מסמכים והגדרות" + IDS_APPDATA "Application Data" + IDS_DESKTOP "שולחן העבודה" + IDS_FAVORITES "מועדפים" + IDS_STARTMENU "תפריט ההתחלה" + IDS_PROGRAMS "תפריט ההתחלה\\תכניות" + IDS_ADMINTOOLS "תפריט ההתחלה\\תכניות\\כלי הניהול" + IDS_STARTUP "תפריט ההתחלה\\תכניות\\הפעלה" + IDS_MYDOCUMENTS "המסמכים שלי" + IDS_MYPICTURES "המסמכים שלי\\התמונות שלי" + IDS_MYMUSIC "המסמכים שלי\\המוסיקה שלי" + IDS_MYVIDEOS "המסמכים שלי\\הוידאו שלי" + IDS_TEMPLATES "תבניות" + IDS_RECENT "אחרונים" + IDS_SENDTO "שלח אל" + IDS_PRINTHOOD "PrintHood" + IDS_NETHOOD "NetHood" + IDS_LOCALSETTINGS "Local Settings" + IDS_LOCALAPPDATA "Local Settings\\Application Data" + IDS_TEMP "Local Settings\\Temp" + IDS_CACHE "Local Settings\\Temporary Internet Files" + IDS_HISTORY "Local Settings\\היסטוריה" + IDS_COOKIES "עוגיות" + IDS_PROGRAMFILES "%SystemDrive%\\Program Files" + IDS_COMMONFILES "Common Files" +END diff --git a/dll/win32/userenv/userenv.rc b/dll/win32/userenv/userenv.rc index 51d12d063ec..73f65b88b60 100644 --- a/dll/win32/userenv/userenv.rc +++ b/dll/win32/userenv/userenv.rc @@ -64,6 +64,9 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #ifdef LANGUAGE_FR_FR #include "lang/fr-FR.rc" #endif +#ifdef LANGUAGE_HE_IL + #include "lang/he-IL.rc" +#endif #ifdef LANGUAGE_HU_HU #include "lang/hu-HU.rc" #endif diff --git a/dll/win32/usp10/bidi.c b/dll/win32/usp10/bidi.c index 00c6d6e81f3..64a6965dc83 100644 --- a/dll/win32/usp10/bidi.c +++ b/dll/win32/usp10/bidi.c @@ -872,11 +872,13 @@ int BIDI_ReorderL2vLevel(int level, int *pIndexs, const BYTE* plevel, int cch, B reverse(pIndexs, ich); } - if (newlevel > 1) + if (newlevel >= 0) { ich = 0; for (; ich < cch; ich++) - if (plevel[ich] > level) + if (plevel[ich] < level) + break; + else if (plevel[ich] > level) ich += BIDI_ReorderL2vLevel(level + 1, pIndexs + ich, plevel + ich, cch - ich, fReverse) - 1; } diff --git a/dll/win32/usp10/breaking.c b/dll/win32/usp10/breaking.c index 2310952e6a1..b8bc1553e04 100644 --- a/dll/win32/usp10/breaking.c +++ b/dll/win32/usp10/breaking.c @@ -132,7 +132,7 @@ void BREAK_line(const WCHAR *chars, int count, const SCRIPT_ANALYSIS *sa, SCRIPT case b_NL: case b_BK: if (i < count-1) else_break(&break_before[i+1],b_r); - else_break(&break_before[i],b_x); + else_break(&break_before[i],b_x); break; /* LB7 */ case b_SP: diff --git a/dll/win32/usp10/indic.c b/dll/win32/usp10/indic.c index 5871fd5cc5c..4a1bf9538ef 100644 --- a/dll/win32/usp10/indic.c +++ b/dll/win32/usp10/indic.c @@ -208,7 +208,7 @@ static INT Indic_process_next_syllable( LPCWSTR input, INT cChar, INT start, INT return parse_consonant_syllable(input, cChar, start, main, next, lex); } -static BOOL Consonent_is_post_base_form(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache* psc, LPCWSTR pwChar, IndicSyllable *s, lexical_function lexical, BOOL modern) +static BOOL Consonant_is_post_base_form(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache* psc, LPCWSTR pwChar, IndicSyllable *s, lexical_function lexical, BOOL modern) { if (is_consonant(lexical(pwChar[s->base])) && s->base > s->start && lexical(pwChar[s->base-1]) == lex_Halant) { @@ -225,7 +225,7 @@ static BOOL Consonent_is_post_base_form(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCac return FALSE; } -static BOOL Consonent_is_below_base_form(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache* psc, LPCWSTR pwChar, IndicSyllable *s, lexical_function lexical, BOOL modern) +static BOOL Consonant_is_below_base_form(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache* psc, LPCWSTR pwChar, IndicSyllable *s, lexical_function lexical, BOOL modern) { if (is_consonant(lexical(pwChar[s->base])) && s->base > s->start && lexical(pwChar[s->base-1]) == lex_Halant) { @@ -242,7 +242,7 @@ static BOOL Consonent_is_below_base_form(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCa return FALSE; } -static BOOL Consonent_is_pre_base_form(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache* psc, LPCWSTR pwChar, IndicSyllable *s, lexical_function lexical, BOOL modern) +static BOOL Consonant_is_pre_base_form(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache* psc, LPCWSTR pwChar, IndicSyllable *s, lexical_function lexical, BOOL modern) { if (is_consonant(lexical(pwChar[s->base])) && s->base > s->start && lexical(pwChar[s->base-1]) == lex_Halant) { @@ -259,7 +259,7 @@ static BOOL Consonent_is_pre_base_form(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCach return FALSE; } -static BOOL Consonent_is_ralf(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache* psc, LPCWSTR pwChar, IndicSyllable *s, lexical_function lexical) +static BOOL Consonant_is_ralf(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache* psc, LPCWSTR pwChar, IndicSyllable *s, lexical_function lexical) { if ((lexical(pwChar[s->start])==lex_Ra) && s->end > s->start && lexical(pwChar[s->start+1]) == lex_Halant) return (SHAPE_does_GSUB_feature_apply_to_chars(hdc, psa, psc, &pwChar[s->start], 1, 2, "rphf") > 0); @@ -273,7 +273,7 @@ static int FindBaseConsonant(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache* psc, LP BOOL pref = FALSE; /* remove ralf from consideration */ - if (Consonent_is_ralf(hdc, psa, psc, input, s, lex)) + if (Consonant_is_ralf(hdc, psa, psc, input, s, lex)) { s->ralf = s->start; s->start+=2; @@ -290,7 +290,7 @@ static int FindBaseConsonant(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache* psc, LP } } - while ((blwf = Consonent_is_below_base_form(hdc, psa, psc, input, s, lex, modern)) || Consonent_is_post_base_form(hdc, psa, psc, input, s, lex, modern) || (pref = Consonent_is_pre_base_form(hdc, psa, psc, input, s, lex, modern))) + while ((blwf = Consonant_is_below_base_form(hdc, psa, psc, input, s, lex, modern)) || Consonant_is_post_base_form(hdc, psa, psc, input, s, lex, modern) || (pref = Consonant_is_pre_base_form(hdc, psa, psc, input, s, lex, modern))) { if (blwf && s->blwf == -1) s->blwf = s->base - 1; diff --git a/dll/win32/usp10/opentype.c b/dll/win32/usp10/opentype.c index 2d8d1fcbbfc..2dde6fe4291 100644 --- a/dll/win32/usp10/opentype.c +++ b/dll/win32/usp10/opentype.c @@ -43,6 +43,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(uniscribe); #define GET_BE_DWORD(x) RtlUlongByteSwap(x) #endif +#define round(x) (((x) < 0) ? (int)((x) - 0.5) : (int)((x) + 0.5)) + /* These are all structures needed for the cmap format 12 table */ #define CMAP_TAG MS_MAKE_TAG('c', 'm', 'a', 'p') @@ -74,8 +76,6 @@ typedef struct { } CMAP_SegmentedCoverage; /* These are all structures needed for the GDEF table */ -#define GDEF_TAG MS_MAKE_TAG('G', 'D', 'E', 'F') - enum {BaseGlyph=1, LigatureGlyph, MarkGlyph, ComponentGlyph}; typedef struct { @@ -91,19 +91,19 @@ typedef struct { WORD StartGlyph; WORD GlyphCount; WORD ClassValueArray[1]; -} GDEF_ClassDefFormat1; +} OT_ClassDefFormat1; typedef struct { WORD Start; WORD End; WORD Class; -} GDEF_ClassRangeRecord; +} OT_ClassRangeRecord; typedef struct { WORD ClassFormat; WORD ClassRangeCount; - GDEF_ClassRangeRecord ClassRangeRecord[1]; -} GDEF_ClassDefFormat2; + OT_ClassRangeRecord ClassRangeRecord[1]; +} OT_ClassDefFormat2; /* These are all structures needed for the GSUB table */ @@ -117,76 +117,76 @@ typedef struct { typedef struct { CHAR ScriptTag[4]; WORD Script; -} GSUB_ScriptRecord; +} OT_ScriptRecord; typedef struct { WORD ScriptCount; - GSUB_ScriptRecord ScriptRecord[1]; -} GSUB_ScriptList; + OT_ScriptRecord ScriptRecord[1]; +} OT_ScriptList; typedef struct { CHAR LangSysTag[4]; WORD LangSys; -} GSUB_LangSysRecord; +} OT_LangSysRecord; typedef struct { WORD DefaultLangSys; WORD LangSysCount; - GSUB_LangSysRecord LangSysRecord[1]; -} GSUB_Script; + OT_LangSysRecord LangSysRecord[1]; +} OT_Script; typedef struct { WORD LookupOrder; /* Reserved */ WORD ReqFeatureIndex; WORD FeatureCount; WORD FeatureIndex[1]; -} GSUB_LangSys; +} OT_LangSys; typedef struct { CHAR FeatureTag[4]; WORD Feature; -} GSUB_FeatureRecord; +} OT_FeatureRecord; typedef struct { WORD FeatureCount; - GSUB_FeatureRecord FeatureRecord[1]; -} GSUB_FeatureList; + OT_FeatureRecord FeatureRecord[1]; +} OT_FeatureList; typedef struct { WORD FeatureParams; /* Reserved */ WORD LookupCount; WORD LookupListIndex[1]; -} GSUB_Feature; +} OT_Feature; typedef struct { WORD LookupCount; WORD Lookup[1]; -} GSUB_LookupList; +} OT_LookupList; typedef struct { WORD LookupType; WORD LookupFlag; WORD SubTableCount; WORD SubTable[1]; -} GSUB_LookupTable; +} OT_LookupTable; typedef struct { WORD CoverageFormat; WORD GlyphCount; WORD GlyphArray[1]; -} GSUB_CoverageFormat1; +} OT_CoverageFormat1; typedef struct { WORD Start; WORD End; WORD StartCoverageIndex; -} GSUB_RangeRecord; +} OT_RangeRecord; typedef struct { WORD CoverageFormat; WORD RangeCount; - GSUB_RangeRecord RangeRecord[1]; -} GSUB_CoverageFormat2; + OT_RangeRecord RangeRecord[1]; +} OT_CoverageFormat2; typedef struct { WORD SubstFormat; /* = 1 */ @@ -277,6 +277,208 @@ typedef struct{ WORD Alternate[1]; } GSUB_AlternateSet; +/* These are all structures needed for the GPOS table */ + +typedef struct { + DWORD version; + WORD ScriptList; + WORD FeatureList; + WORD LookupList; +} GPOS_Header; + +typedef struct { + WORD StartSize; + WORD EndSize; + WORD DeltaFormat; + WORD DeltaValue[1]; +} OT_DeviceTable; + +typedef struct { + WORD AnchorFormat; + WORD XCoordinate; + WORD YCoordinate; +} GPOS_AnchorFormat1; + +typedef struct { + WORD AnchorFormat; + WORD XCoordinate; + WORD YCoordinate; + WORD AnchorPoint; +} GPOS_AnchorFormat2; + +typedef struct { + WORD AnchorFormat; + WORD XCoordinate; + WORD YCoordinate; + WORD XDeviceTable; + WORD YDeviceTable; +} GPOS_AnchorFormat3; + +typedef struct { + WORD XPlacement; + WORD YPlacement; + WORD XAdvance; + WORD YAdvance; + WORD XPlaDevice; + WORD YPlaDevice; + WORD XAdvDevice; + WORD YAdvDevice; +} GPOS_ValueRecord; + +typedef struct { + WORD PosFormat; + WORD Coverage; + WORD ValueFormat; + WORD Value[1]; +} GPOS_SinglePosFormat1; + +typedef struct { + WORD PosFormat; + WORD Coverage; + WORD ValueFormat; + WORD ValueCount; + WORD Value[1]; +} GPOS_SinglePosFormat2; + +typedef struct { + WORD PosFormat; + WORD Coverage; + WORD ValueFormat1; + WORD ValueFormat2; + WORD PairSetCount; + WORD PairSetOffset[1]; +} GPOS_PairPosFormat1; + +typedef struct { + WORD PosFormat; + WORD Coverage; + WORD ValueFormat1; + WORD ValueFormat2; + WORD ClassDef1; + WORD ClassDef2; + WORD Class1Count; + WORD Class2Count; + WORD Class1Record[1]; +} GPOS_PairPosFormat2; + +typedef struct { + WORD SecondGlyph; + WORD Value1[1]; + WORD Value2[1]; +} GPOS_PairValueRecord; + +typedef struct { + WORD PairValueCount; + GPOS_PairValueRecord PairValueRecord[1]; +} GPOS_PairSet; + +typedef struct { + WORD EntryAnchor; + WORD ExitAnchor; +} GPOS_EntryExitRecord; + +typedef struct { + WORD PosFormat; + WORD Coverage; + WORD EntryExitCount; + GPOS_EntryExitRecord EntryExitRecord[1]; +} GPOS_CursivePosFormat1; + +typedef struct { + WORD PosFormat; + WORD MarkCoverage; + WORD BaseCoverage; + WORD ClassCount; + WORD MarkArray; + WORD BaseArray; +} GPOS_MarkBasePosFormat1; + +typedef struct { + WORD BaseAnchor[1]; +} GPOS_BaseRecord; + +typedef struct { + WORD BaseCount; + GPOS_BaseRecord BaseRecord[1]; +} GPOS_BaseArray; + +typedef struct { + WORD Class; + WORD MarkAnchor; +} GPOS_MarkRecord; + +typedef struct { + WORD MarkCount; + GPOS_MarkRecord MarkRecord[1]; +} GPOS_MarkArray; + +typedef struct { + WORD PosFormat; + WORD MarkCoverage; + WORD LigatureCoverage; + WORD ClassCount; + WORD MarkArray; + WORD LigatureArray; +} GPOS_MarkLigPosFormat1; + +typedef struct { + WORD LigatureCount; + WORD LigatureAttach[1]; +} GPOS_LigatureArray; + +typedef struct { + WORD LigatureAnchor[1]; +} GPOS_ComponentRecord; + +typedef struct { + WORD ComponentCount; + GPOS_ComponentRecord ComponentRecord[1]; +} GPOS_LigatureAttach; + +typedef struct { + WORD PosFormat; + WORD Mark1Coverage; + WORD Mark2Coverage; + WORD ClassCount; + WORD Mark1Array; + WORD Mark2Array; +} GPOS_MarkMarkPosFormat1; + +typedef struct { + WORD Mark2Anchor[1]; +} GPOS_Mark2Record; + +typedef struct { + WORD Mark2Count; + GPOS_Mark2Record Mark2Record[1]; +} GPOS_Mark2Array; + +typedef struct { + WORD SequenceIndex; + WORD LookupListIndex; +} GPOS_PosLookupRecord; + +typedef struct { + WORD PosFormat; + WORD BacktrackGlyphCount; + WORD Coverage[1]; +} GPOS_ChainContextPosFormat3_1; + +typedef struct { + WORD InputGlyphCount; + WORD Coverage[1]; +} GPOS_ChainContextPosFormat3_2; + +typedef struct { + WORD LookaheadGlyphCount; + WORD Coverage[1]; +} GPOS_ChainContextPosFormat3_3; + +typedef struct { + WORD PosCount; + GPOS_PosLookupRecord PosLookupRecord[1]; +} GPOS_ChainContextPosFormat3_4; + /********** * CMAP **********/ @@ -368,20 +570,13 @@ DWORD OpenType_CMAP_GetGlyphIndex(HDC hdc, ScriptCache *psc, DWORD utf32c, LPWOR * GDEF **********/ -static WORD GDEF_get_glyph_class(const GDEF_Header *header, WORD glyph) +static WORD OT_get_glyph_class(const void *table, WORD glyph) { - int offset; WORD class = 0; - const GDEF_ClassDefFormat1 *cf1; + const OT_ClassDefFormat1 *cf1 = table; - if (!header) - return 0; + if (!table) return 0; - offset = GET_BE_WORD(header->GlyphClassDef); - if (!offset) - return 0; - - cf1 = (GDEF_ClassDefFormat1*)(((BYTE*)header)+offset); if (GET_BE_WORD(cf1->ClassFormat) == 1) { if (glyph >= GET_BE_WORD(cf1->StartGlyph)) @@ -393,7 +588,7 @@ static WORD GDEF_get_glyph_class(const GDEF_Header *header, WORD glyph) } else if (GET_BE_WORD(cf1->ClassFormat) == 2) { - const GDEF_ClassDefFormat2 *cf2 = (GDEF_ClassDefFormat2*)cf1; + const OT_ClassDefFormat2 *cf2 = table; int i, top; top = GET_BE_WORD(cf2->ClassRangeCount); for (i = 0; i < top; i++) @@ -412,25 +607,18 @@ static WORD GDEF_get_glyph_class(const GDEF_Header *header, WORD glyph) return class; } -static VOID *load_gdef_table(HDC hdc) -{ - VOID* GDEF_Table = NULL; - int length = GetFontData(hdc, GDEF_TAG , 0, NULL, 0); - if (length != GDI_ERROR) - { - GDEF_Table = HeapAlloc(GetProcessHeap(),0,length); - GetFontData(hdc, GDEF_TAG , 0, GDEF_Table, length); - TRACE("Loaded GDEF table of %i bytes\n",length); - } - return GDEF_Table; -} - -void OpenType_GDEF_UpdateGlyphProps(HDC hdc, ScriptCache *psc, const WORD *pwGlyphs, const WORD cGlyphs, WORD* pwLogClust, const WORD cChars, SCRIPT_GLYPHPROP *pGlyphProp) +void OpenType_GDEF_UpdateGlyphProps(ScriptCache *psc, const WORD *pwGlyphs, const WORD cGlyphs, WORD* pwLogClust, const WORD cChars, SCRIPT_GLYPHPROP *pGlyphProp) { int i; + void *glyph_class_table = NULL; - if (!psc->GDEF_Table) - psc->GDEF_Table = load_gdef_table(hdc); + if (psc->GDEF_Table) + { + const GDEF_Header *header = psc->GDEF_Table; + WORD offset = GET_BE_WORD( header->GlyphClassDef ); + if (offset) + glyph_class_table = (BYTE *)psc->GDEF_Table + offset; + } for (i = 0; i < cGlyphs; i++) { @@ -445,7 +633,7 @@ void OpenType_GDEF_UpdateGlyphProps(HDC hdc, ScriptCache *psc, const WORD *pwGly char_count++; } - class = GDEF_get_glyph_class(psc->GDEF_Table, pwGlyphs[i]); + class = OT_get_glyph_class( glyph_class_table, pwGlyphs[i] ); switch (class) { @@ -485,11 +673,11 @@ void OpenType_GDEF_UpdateGlyphProps(HDC hdc, ScriptCache *psc, const WORD *pwGly /********** * GSUB **********/ -static INT GSUB_apply_lookup(const GSUB_LookupList* lookup, INT lookup_index, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count); +static INT GSUB_apply_lookup(const OT_LookupList* lookup, INT lookup_index, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count); static INT GSUB_is_glyph_covered(LPCVOID table , UINT glyph) { - const GSUB_CoverageFormat1* cf1; + const OT_CoverageFormat1* cf1; cf1 = table; @@ -505,10 +693,10 @@ static INT GSUB_is_glyph_covered(LPCVOID table , UINT glyph) } else if (GET_BE_WORD(cf1->CoverageFormat) == 2) { - const GSUB_CoverageFormat2* cf2; + const OT_CoverageFormat2* cf2; int i; int count; - cf2 = (const GSUB_CoverageFormat2*)cf1; + cf2 = (const OT_CoverageFormat2*)cf1; count = GET_BE_WORD(cf2->RangeCount); TRACE("Coverage Format 2, %i ranges\n",count); @@ -531,7 +719,7 @@ static INT GSUB_is_glyph_covered(LPCVOID table , UINT glyph) return -1; } -static INT GSUB_apply_SingleSubst(const GSUB_LookupTable *look, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count) +static INT GSUB_apply_SingleSubst(const OT_LookupTable *look, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count) { int j; TRACE("Single Substitution Subtable\n"); @@ -580,7 +768,7 @@ static INT GSUB_apply_SingleSubst(const GSUB_LookupTable *look, WORD *glyphs, IN return GSUB_E_NOGLYPH; } -static INT GSUB_apply_MultipleSubst(const GSUB_LookupTable *look, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count) +static INT GSUB_apply_MultipleSubst(const OT_LookupTable *look, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count) { int j; TRACE("Multiple Substitution Subtable\n"); @@ -628,7 +816,7 @@ static INT GSUB_apply_MultipleSubst(const GSUB_LookupTable *look, WORD *glyphs, return GSUB_E_NOGLYPH; } -static INT GSUB_apply_AlternateSubst(const GSUB_LookupTable *look, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count) +static INT GSUB_apply_AlternateSubst(const OT_LookupTable *look, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count) { int j; TRACE("Alternate Substitution Subtable\n"); @@ -662,7 +850,7 @@ static INT GSUB_apply_AlternateSubst(const GSUB_LookupTable *look, WORD *glyphs, return GSUB_E_NOGLYPH; } -static INT GSUB_apply_LigatureSubst(const GSUB_LookupTable *look, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count) +static INT GSUB_apply_LigatureSubst(const OT_LookupTable *look, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count) { int j; @@ -727,7 +915,7 @@ static INT GSUB_apply_LigatureSubst(const GSUB_LookupTable *look, WORD *glyphs, return GSUB_E_NOGLYPH; } -static INT GSUB_apply_ChainContextSubst(const GSUB_LookupList* lookup, const GSUB_LookupTable *look, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count) +static INT GSUB_apply_ChainContextSubst(const OT_LookupList* lookup, const OT_LookupTable *look, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count) { int j; BOOL done = FALSE; @@ -776,7 +964,8 @@ static INT GSUB_apply_ChainContextSubst(const GSUB_LookupList* lookup, const GSU continue; TRACE("Matched Backtrack\n"); - ccsf3_2 = (const GSUB_ChainContextSubstFormat3_2 *)(((LPBYTE)ccsf1)+sizeof(GSUB_ChainContextSubstFormat3_1) + (sizeof(WORD) * (GET_BE_WORD(ccsf3_1->BacktrackGlyphCount)-1))); + ccsf3_2 = (const GSUB_ChainContextSubstFormat3_2 *)((BYTE *)ccsf1 + + FIELD_OFFSET(GSUB_ChainContextSubstFormat3_1, Coverage[GET_BE_WORD(ccsf3_1->BacktrackGlyphCount)])); indexGlyphs = GET_BE_WORD(ccsf3_2->InputGlyphCount); for (k = 0; k < indexGlyphs; k++) @@ -789,7 +978,8 @@ static INT GSUB_apply_ChainContextSubst(const GSUB_LookupList* lookup, const GSU continue; TRACE("Matched IndexGlyphs\n"); - ccsf3_3 = (const GSUB_ChainContextSubstFormat3_3 *)(((LPBYTE)ccsf3_2)+sizeof(GSUB_ChainContextSubstFormat3_2) + (sizeof(WORD) * (GET_BE_WORD(ccsf3_2->InputGlyphCount)-1))); + ccsf3_3 = (const GSUB_ChainContextSubstFormat3_3 *)((BYTE *)ccsf3_2 + + FIELD_OFFSET(GSUB_ChainContextSubstFormat3_2, Coverage[GET_BE_WORD(ccsf3_2->InputGlyphCount)])); for (k = 0; k < GET_BE_WORD(ccsf3_3->LookaheadGlyphCount); k++) { @@ -801,7 +991,8 @@ static INT GSUB_apply_ChainContextSubst(const GSUB_LookupList* lookup, const GSU continue; TRACE("Matched LookAhead\n"); - ccsf3_4 = (const GSUB_ChainContextSubstFormat3_4 *)(((LPBYTE)ccsf3_3)+sizeof(GSUB_ChainContextSubstFormat3_3) + (sizeof(WORD) * (GET_BE_WORD(ccsf3_3->LookaheadGlyphCount)-1))); + ccsf3_4 = (const GSUB_ChainContextSubstFormat3_4 *)((BYTE *)ccsf3_3 + + FIELD_OFFSET(GSUB_ChainContextSubstFormat3_3, Coverage[GET_BE_WORD(ccsf3_3->LookaheadGlyphCount)])); if (GET_BE_WORD(ccsf3_4->SubstCount)) { @@ -826,13 +1017,13 @@ static INT GSUB_apply_ChainContextSubst(const GSUB_LookupList* lookup, const GSU return -1; } -static INT GSUB_apply_lookup(const GSUB_LookupList* lookup, INT lookup_index, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count) +static INT GSUB_apply_lookup(const OT_LookupList* lookup, INT lookup_index, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count) { int offset; - const GSUB_LookupTable *look; + const OT_LookupTable *look; offset = GET_BE_WORD(lookup->Lookup[lookup_index]); - look = (const GSUB_LookupTable*)((const BYTE*)lookup + offset); + look = (const OT_LookupTable*)((const BYTE*)lookup + offset); TRACE("type %i, flag %x, subtables %i\n",GET_BE_WORD(look->LookupType),GET_BE_WORD(look->LookupFlag),GET_BE_WORD(look->SubTableCount)); switch(GET_BE_WORD(look->LookupType)) { @@ -855,20 +1046,831 @@ static INT GSUB_apply_lookup(const GSUB_LookupList* lookup, INT lookup_index, WO INT OpenType_apply_GSUB_lookup(LPCVOID table, INT lookup_index, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count) { const GSUB_Header *header = (const GSUB_Header *)table; - const GSUB_LookupList *lookup = (const GSUB_LookupList*)((const BYTE*)header + GET_BE_WORD(header->LookupList)); + const OT_LookupList *lookup = (const OT_LookupList*)((const BYTE*)header + GET_BE_WORD(header->LookupList)); return GSUB_apply_lookup(lookup, lookup_index, glyphs, glyph_index, write_dir, glyph_count); } +/********** + * GPOS + **********/ +static INT GPOS_apply_lookup(ScriptCache *psc, LPOUTLINETEXTMETRICW lpotm, LPLOGFONTW lplogfont, const SCRIPT_ANALYSIS *analysis, INT* piAdvance, + const OT_LookupList* lookup, INT lookup_index, const WORD *glyphs, INT glyph_index, INT glyph_count, GOFFSET *pGoffset); + +static INT GPOS_get_device_table_value(const OT_DeviceTable *DeviceTable, WORD ppem) +{ + static const WORD mask[3] = {3,0xf,0xff}; + if (DeviceTable && ppem >= GET_BE_WORD(DeviceTable->StartSize) && ppem <= GET_BE_WORD(DeviceTable->EndSize)) + { + int format = GET_BE_WORD(DeviceTable->DeltaFormat); + int index = ppem - GET_BE_WORD(DeviceTable->StartSize); + int value; + TRACE("device table, format %i, index %i\n",format, index); + index = index << format; + value = (DeviceTable->DeltaValue[index/sizeof(WORD)] << (index%sizeof(WORD)))&mask[format-1]; + TRACE("offset %i, value %i\n",index, value); + if (value > mask[format-1]/2) + value = -1 * ((mask[format-1]+1) - value); + return value; + } + return 0; +} + +static VOID GPOS_get_anchor_values(LPCVOID table, LPPOINT pt, WORD ppem) +{ + const GPOS_AnchorFormat1* anchor1 = (const GPOS_AnchorFormat1*)table; + + switch (GET_BE_WORD(anchor1->AnchorFormat)) + { + case 1: + { + TRACE("Anchor Format 1\n"); + pt->x = (short)GET_BE_WORD(anchor1->XCoordinate); + pt->y = (short)GET_BE_WORD(anchor1->YCoordinate); + break; + } + case 2: + { + const GPOS_AnchorFormat2* anchor2 = (const GPOS_AnchorFormat2*)table; + TRACE("Anchor Format 2\n"); + pt->x = (short)GET_BE_WORD(anchor2->XCoordinate); + pt->y = (short)GET_BE_WORD(anchor2->YCoordinate); + break; + } + case 3: + { + int offset; + const GPOS_AnchorFormat3* anchor3 = (const GPOS_AnchorFormat3*)table; + TRACE("Anchor Format 3\n"); + pt->x = (short)GET_BE_WORD(anchor3->XCoordinate); + pt->y = (short)GET_BE_WORD(anchor3->YCoordinate); + offset = GET_BE_WORD(anchor3->XDeviceTable); + TRACE("ppem %i\n",ppem); + if (offset) + { + const OT_DeviceTable* DeviceTableX = NULL; + DeviceTableX = (const OT_DeviceTable*)((const BYTE*)anchor3 + offset); + pt->x += GPOS_get_device_table_value(DeviceTableX, ppem); + } + offset = GET_BE_WORD(anchor3->YDeviceTable); + if (offset) + { + const OT_DeviceTable* DeviceTableY = NULL; + DeviceTableY = (const OT_DeviceTable*)((const BYTE*)anchor3 + offset); + pt->y += GPOS_get_device_table_value(DeviceTableY, ppem); + } + break; + } + default: + ERR("Unknown Anchor Format %i\n",GET_BE_WORD(anchor1->AnchorFormat)); + pt->x = 0; + pt->y = 0; + } +} + +static void GPOS_convert_design_units_to_device(LPOUTLINETEXTMETRICW lpotm, LPLOGFONTW lplogfont, int desX, int desY, double *devX, double *devY) +{ + int emHeight = lpotm->otmTextMetrics.tmAscent + lpotm->otmTextMetrics.tmDescent - lpotm->otmTextMetrics.tmInternalLeading; + + TRACE("emHeight %i lfWidth %i\n",emHeight, lplogfont->lfWidth); + *devX = (desX * emHeight) / (double)lpotm->otmEMSquare; + *devY = (desY * emHeight) / (double)lpotm->otmEMSquare; + if (lplogfont->lfWidth) + FIXME("Font with lfWidth set no handled properly\n"); +} + +static INT GPOS_get_value_record(WORD ValueFormat, const WORD data[], GPOS_ValueRecord *record) +{ + INT offset = 0; + if (ValueFormat & 0x0001) { if (data) record->XPlacement = GET_BE_WORD(data[offset]); offset++; } + if (ValueFormat & 0x0002) { if (data) record->YPlacement = GET_BE_WORD(data[offset]); offset++; } + if (ValueFormat & 0x0004) { if (data) record->XAdvance = GET_BE_WORD(data[offset]); offset++; } + if (ValueFormat & 0x0008) { if (data) record->YAdvance = GET_BE_WORD(data[offset]); offset++; } + if (ValueFormat & 0x0010) { if (data) record->XPlaDevice = GET_BE_WORD(data[offset]); offset++; } + if (ValueFormat & 0x0020) { if (data) record->YPlaDevice = GET_BE_WORD(data[offset]); offset++; } + if (ValueFormat & 0x0040) { if (data) record->XAdvDevice = GET_BE_WORD(data[offset]); offset++; } + if (ValueFormat & 0x0080) { if (data) record->YAdvDevice = GET_BE_WORD(data[offset]); offset++; } + return offset; +} + +static VOID GPOS_get_value_record_offsets(const BYTE* head, GPOS_ValueRecord *ValueRecord, WORD ValueFormat, INT ppem, LPPOINT ptPlacement, LPPOINT ptAdvance) +{ + if (ValueFormat & 0x0001) ptPlacement->x += (short)ValueRecord->XPlacement; + if (ValueFormat & 0x0002) ptPlacement->y += (short)ValueRecord->YPlacement; + if (ValueFormat & 0x0004) ptAdvance->x += (short)ValueRecord->XAdvance; + if (ValueFormat & 0x0008) ptAdvance->y += (short)ValueRecord->YAdvance; + if (ValueFormat & 0x0010) ptPlacement->x += GPOS_get_device_table_value((const OT_DeviceTable*)(head + ValueRecord->XPlaDevice), ppem); + if (ValueFormat & 0x0020) ptPlacement->y += GPOS_get_device_table_value((const OT_DeviceTable*)(head + ValueRecord->YPlaDevice), ppem); + if (ValueFormat & 0x0040) ptAdvance->x += GPOS_get_device_table_value((const OT_DeviceTable*)(head + ValueRecord->XAdvDevice), ppem); + if (ValueFormat & 0x0080) ptAdvance->y += GPOS_get_device_table_value((const OT_DeviceTable*)(head + ValueRecord->YAdvDevice), ppem); + if (ValueFormat & 0xFF00) FIXME("Unhandled Value Format %x\n",ValueFormat&0xFF00); +} + +static VOID GPOS_apply_SingleAdjustment(const OT_LookupTable *look, const SCRIPT_ANALYSIS *analysis, const WORD *glyphs, INT glyph_index, + INT glyph_count, INT ppem, LPPOINT ptAdjust, LPPOINT ptAdvance) +{ + int j; + + TRACE("Single Adjustment Positioning Subtable\n"); + + for (j = 0; j < GET_BE_WORD(look->SubTableCount); j++) + { + const GPOS_SinglePosFormat1 *spf1; + WORD offset = GET_BE_WORD(look->SubTable[j]); + spf1 = (const GPOS_SinglePosFormat1*)((const BYTE*)look+offset); + if (GET_BE_WORD(spf1->PosFormat) == 1) + { + offset = GET_BE_WORD(spf1->Coverage); + if (GSUB_is_glyph_covered((const BYTE*)spf1+offset, glyphs[glyph_index]) != -1) + { + GPOS_ValueRecord ValueRecord = {0,0,0,0,0,0,0,0}; + WORD ValueFormat = GET_BE_WORD(spf1->ValueFormat); + GPOS_get_value_record(ValueFormat, spf1->Value, &ValueRecord); + GPOS_get_value_record_offsets((const BYTE*)spf1, &ValueRecord, ValueFormat, ppem, ptAdjust, ptAdvance); + TRACE("Glyph Adjusted by %i,%i\n",ValueRecord.XPlacement,ValueRecord.YPlacement); + } + } + else if (GET_BE_WORD(spf1->PosFormat) == 2) + { + int index; + const GPOS_SinglePosFormat2 *spf2; + spf2 = (const GPOS_SinglePosFormat2*)spf1; + offset = GET_BE_WORD(spf2->Coverage); + index = GSUB_is_glyph_covered((const BYTE*)spf2+offset, glyphs[glyph_index]); + if (index != -1) + { + int size; + GPOS_ValueRecord ValueRecord = {0,0,0,0,0,0,0,0}; + WORD ValueFormat = GET_BE_WORD(spf2->ValueFormat); + size = GPOS_get_value_record(ValueFormat, spf2->Value, &ValueRecord); + if (index > 0) + { + offset = size * index; + GPOS_get_value_record(ValueFormat, &spf2->Value[offset], &ValueRecord); + } + GPOS_get_value_record_offsets((const BYTE*)spf2, &ValueRecord, ValueFormat, ppem, ptAdjust, ptAdvance); + TRACE("Glyph Adjusted by %i,%i\n",ValueRecord.XPlacement,ValueRecord.YPlacement); + } + } + else + FIXME("Single Adjustment Positioning: Format %i Unhandled\n",GET_BE_WORD(spf1->PosFormat)); + } +} + +static void apply_pair_value( const void *pos_table, WORD val_fmt1, WORD val_fmt2, const WORD *pair, + INT ppem, POINT *adjust, POINT *advance ) +{ + GPOS_ValueRecord val_rec1 = {0,0,0,0,0,0,0,0}; + GPOS_ValueRecord val_rec2 = {0,0,0,0,0,0,0,0}; + INT size; + + size = GPOS_get_value_record( val_fmt1, pair, &val_rec1 ); + GPOS_get_value_record( val_fmt2, pair + size, &val_rec2 ); + + if (val_fmt1) + { + GPOS_get_value_record_offsets( pos_table, &val_rec1, val_fmt1, ppem, adjust, advance ); + TRACE( "Glyph 1 resulting cumulative offset is %i,%i design units\n", adjust[0].x, adjust[0].y ); + TRACE( "Glyph 1 resulting cumulative advance is %i,%i design units\n", advance[0].x, advance[0].y ); + } + if (val_fmt2) + { + GPOS_get_value_record_offsets( pos_table, &val_rec2, val_fmt2, ppem, adjust + 1, advance + 1 ); + TRACE( "Glyph 2 resulting cumulative offset is %i,%i design units\n", adjust[1].x, adjust[1].y ); + TRACE( "Glyph 2 resulting cumulative advance is %i,%i design units\n", advance[1].x, advance[1].y ); + } +} + +static INT GPOS_apply_PairAdjustment(const OT_LookupTable *look, const SCRIPT_ANALYSIS *analysis, const WORD *glyphs, INT glyph_index, + INT glyph_count, INT ppem, LPPOINT ptAdjust, LPPOINT ptAdvance) +{ + int j; + int write_dir = (analysis->fRTL && !analysis->fLogicalOrder) ? -1 : 1; + + if (glyph_index + write_dir < 0 || glyph_index + write_dir >= glyph_count) return glyph_index + 1; + + TRACE("Pair Adjustment Positioning Subtable\n"); + + for (j = 0; j < GET_BE_WORD(look->SubTableCount); j++) + { + const GPOS_PairPosFormat1 *ppf1; + WORD offset = GET_BE_WORD(look->SubTable[j]); + ppf1 = (const GPOS_PairPosFormat1*)((const BYTE*)look+offset); + if (GET_BE_WORD(ppf1->PosFormat) == 1) + { + int index; + WORD ValueFormat1 = GET_BE_WORD(ppf1->ValueFormat1); + WORD ValueFormat2 = GET_BE_WORD(ppf1->ValueFormat2); + INT val_fmt1_size = GPOS_get_value_record( ValueFormat1, NULL, NULL ); + INT val_fmt2_size = GPOS_get_value_record( ValueFormat2, NULL, NULL ); + offset = GET_BE_WORD(ppf1->Coverage); + index = GSUB_is_glyph_covered((const BYTE*)ppf1+offset, glyphs[glyph_index]); + if (index != -1 && index < GET_BE_WORD(ppf1->PairSetCount)) + { + int k; + int pair_count; + const GPOS_PairSet *ps; + const GPOS_PairValueRecord *pair_val_rec; + offset = GET_BE_WORD(ppf1->PairSetOffset[index]); + ps = (const GPOS_PairSet*)((const BYTE*)ppf1+offset); + pair_count = GET_BE_WORD(ps->PairValueCount); + pair_val_rec = ps->PairValueRecord; + for (k = 0; k < pair_count; k++) + { + WORD second_glyph = GET_BE_WORD(pair_val_rec->SecondGlyph); + if (glyphs[glyph_index+write_dir] == second_glyph) + { + int next = 1; + TRACE("Format 1: Found Pair %x,%x\n",glyphs[glyph_index],glyphs[glyph_index+write_dir]); + apply_pair_value( ppf1, ValueFormat1, ValueFormat2, pair_val_rec->Value1, ppem, ptAdjust, ptAdvance ); + if (ValueFormat2) next++; + return glyph_index + next; + } + pair_val_rec = (const GPOS_PairValueRecord *)(pair_val_rec->Value1 + val_fmt1_size + val_fmt2_size); + } + } + } + else if (GET_BE_WORD(ppf1->PosFormat) == 2) + { + const GPOS_PairPosFormat2 *ppf2 = (const GPOS_PairPosFormat2*)((const BYTE*)look + offset); + int index; + WORD ValueFormat1 = GET_BE_WORD( ppf2->ValueFormat1 ); + WORD ValueFormat2 = GET_BE_WORD( ppf2->ValueFormat2 ); + INT val_fmt1_size = GPOS_get_value_record( ValueFormat1, NULL, NULL ); + INT val_fmt2_size = GPOS_get_value_record( ValueFormat2, NULL, NULL ); + WORD class1_count = GET_BE_WORD( ppf2->Class1Count ); + WORD class2_count = GET_BE_WORD( ppf2->Class2Count ); + + offset = GET_BE_WORD( ppf2->Coverage ); + index = GSUB_is_glyph_covered( (const BYTE*)ppf2 + offset, glyphs[glyph_index] ); + if (index != -1) + { + WORD class1, class2; + class1 = OT_get_glyph_class( (const BYTE *)ppf2 + GET_BE_WORD(ppf2->ClassDef1), glyphs[glyph_index] ); + class2 = OT_get_glyph_class( (const BYTE *)ppf2 + GET_BE_WORD(ppf2->ClassDef2), glyphs[glyph_index + write_dir] ); + if (class1 < class1_count && class2 < class2_count) + { + const WORD *pair_val = ppf2->Class1Record + (class1 * class2_count + class2) * (val_fmt1_size + val_fmt2_size); + int next = 1; + + TRACE( "Format 2: Found Pair %x,%x\n", glyphs[glyph_index], glyphs[glyph_index + write_dir] ); + + apply_pair_value( ppf2, ValueFormat1, ValueFormat2, pair_val, ppem, ptAdjust, ptAdvance ); + if (ValueFormat2) next++; + return glyph_index + next; + } + } + } + else + FIXME("Pair Adjustment Positioning: Format %i Unhandled\n",GET_BE_WORD(ppf1->PosFormat)); + } + return glyph_index+1; +} + +static VOID GPOS_apply_CursiveAttachment(const OT_LookupTable *look, const SCRIPT_ANALYSIS *analysis, const WORD *glyphs, INT glyph_index, + INT glyph_count, INT ppem, LPPOINT pt) +{ + int j; + int write_dir = (analysis->fRTL && !analysis->fLogicalOrder) ? -1 : 1; + + if (glyph_index + write_dir < 0 || glyph_index + write_dir >= glyph_count) return; + + TRACE("Cursive Attachment Positioning Subtable\n"); + + for (j = 0; j < GET_BE_WORD(look->SubTableCount); j++) + { + const GPOS_CursivePosFormat1 *cpf1; + WORD offset = GET_BE_WORD(look->SubTable[j]); + cpf1 = (const GPOS_CursivePosFormat1*)((const BYTE*)look+offset); + if (GET_BE_WORD(cpf1->PosFormat) == 1) + { + int index_exit, index_entry; + offset = GET_BE_WORD( cpf1->Coverage ); + index_exit = GSUB_is_glyph_covered((const BYTE*)cpf1+offset, glyphs[glyph_index]); + if (index_exit != -1 && cpf1->EntryExitRecord[index_exit].ExitAnchor!= 0) + { + index_entry = GSUB_is_glyph_covered((const BYTE*)cpf1+offset, glyphs[glyph_index+write_dir]); + if (index_entry != -1 && cpf1->EntryExitRecord[index_entry].EntryAnchor != 0) + { + POINT exit_pt, entry_pt; + offset = GET_BE_WORD(cpf1->EntryExitRecord[index_exit].ExitAnchor); + GPOS_get_anchor_values((const BYTE*)cpf1 + offset, &exit_pt, ppem); + offset = GET_BE_WORD(cpf1->EntryExitRecord[index_entry].EntryAnchor); + GPOS_get_anchor_values((const BYTE*)cpf1 + offset, &entry_pt, ppem); + TRACE("Found linkage %x[%i,%i] %x[%i,%i]\n",glyphs[glyph_index], exit_pt.x,exit_pt.y, glyphs[glyph_index+write_dir], entry_pt.x, entry_pt.y); + pt->x = entry_pt.x - exit_pt.x; + pt->y = entry_pt.y - exit_pt.y; + return; + } + } + } + else + FIXME("Cursive Attachment Positioning: Format %i Unhandled\n",GET_BE_WORD(cpf1->PosFormat)); + } + return; +} + +static int GPOS_apply_MarkToBase(ScriptCache *psc, const OT_LookupTable *look, const SCRIPT_ANALYSIS *analysis, const WORD *glyphs, INT glyph_index, INT glyph_count, INT ppem, LPPOINT pt) +{ + int j; + int write_dir = (analysis->fRTL && !analysis->fLogicalOrder) ? -1 : 1; + void *glyph_class_table = NULL; + int rc = -1; + + if (psc->GDEF_Table) + { + const GDEF_Header *header = psc->GDEF_Table; + WORD offset = GET_BE_WORD( header->GlyphClassDef ); + if (offset) + glyph_class_table = (BYTE *)psc->GDEF_Table + offset; + } + + TRACE("MarkToBase Attachment Positioning Subtable\n"); + + for (j = 0; j < GET_BE_WORD(look->SubTableCount); j++) + { + int offset; + const GPOS_MarkBasePosFormat1 *mbpf1; + offset = GET_BE_WORD(look->SubTable[j]); + mbpf1 = (const GPOS_MarkBasePosFormat1*)((const BYTE*)look+offset); + if (GET_BE_WORD(mbpf1->PosFormat) == 1) + { + int offset = GET_BE_WORD(mbpf1->MarkCoverage); + int mark_index; + mark_index = GSUB_is_glyph_covered((const BYTE*)mbpf1+offset, glyphs[glyph_index]); + if (mark_index != -1) + { + int base_index; + int base_glyph = glyph_index - write_dir; + + if (glyph_class_table) + { + while (OT_get_glyph_class(glyph_class_table, glyphs[base_glyph]) == MarkGlyph && base_glyph > 0 && base_glyph < glyph_count) + base_glyph -= write_dir; + } + + offset = GET_BE_WORD(mbpf1->BaseCoverage); + base_index = GSUB_is_glyph_covered((const BYTE*)mbpf1+offset, glyphs[base_glyph]); + if (base_index != -1) + { + const GPOS_MarkArray *ma; + const GPOS_MarkRecord *mr; + const GPOS_BaseArray *ba; + const GPOS_BaseRecord *br; + int mark_class; + int class_count = GET_BE_WORD(mbpf1->ClassCount); + int baserecord_size; + POINT base_pt; + POINT mark_pt; + TRACE("Mark %x(%i) and base %x(%i)\n",glyphs[glyph_index], mark_index, glyphs[base_glyph], base_index); + offset = GET_BE_WORD(mbpf1->MarkArray); + ma = (const GPOS_MarkArray*)((const BYTE*)mbpf1 + offset); + if (mark_index > GET_BE_WORD(ma->MarkCount)) + { + ERR("Mark index exeeded mark count\n"); + return -1; + } + mr = &ma->MarkRecord[mark_index]; + mark_class = GET_BE_WORD(mr->Class); + TRACE("Mark Class %i total classes %i\n",mark_class,class_count); + offset = GET_BE_WORD(mbpf1->BaseArray); + ba = (const GPOS_BaseArray*)((const BYTE*)mbpf1 + offset); + baserecord_size = class_count * sizeof(WORD); + br = (const GPOS_BaseRecord*)((const BYTE*)ba + sizeof(WORD) + (baserecord_size * base_index)); + offset = GET_BE_WORD(br->BaseAnchor[mark_class]); + GPOS_get_anchor_values((const BYTE*)ba + offset, &base_pt, ppem); + offset = GET_BE_WORD(mr->MarkAnchor); + GPOS_get_anchor_values((const BYTE*)ma + offset, &mark_pt, ppem); + TRACE("Offset on base is %i,%i design units\n",base_pt.x,base_pt.y); + TRACE("Offset on mark is %i,%i design units\n",mark_pt.x, mark_pt.y); + pt->x += base_pt.x - mark_pt.x; + pt->y += base_pt.y - mark_pt.y; + TRACE("Resulting cumulative offset is %i,%i design units\n",pt->x,pt->y); + rc = base_glyph; + } + } + } + else + FIXME("Unhandled Mark To Base Format %i\n",GET_BE_WORD(mbpf1->PosFormat)); + } + return rc; +} + +static VOID GPOS_apply_MarkToLigature(const OT_LookupTable *look, const SCRIPT_ANALYSIS *analysis, const WORD *glyphs, INT glyph_index, + INT glyph_count, INT ppem, LPPOINT pt) +{ + int j; + int write_dir = (analysis->fRTL && !analysis->fLogicalOrder) ? -1 : 1; + + TRACE("MarkToLigature Attachment Positioning Subtable\n"); + + for (j = 0; j < GET_BE_WORD(look->SubTableCount); j++) + { + int offset; + const GPOS_MarkLigPosFormat1 *mlpf1; + offset = GET_BE_WORD(look->SubTable[j]); + mlpf1 = (const GPOS_MarkLigPosFormat1*)((const BYTE*)look+offset); + if (GET_BE_WORD(mlpf1->PosFormat) == 1) + { + int offset = GET_BE_WORD(mlpf1->MarkCoverage); + int mark_index; + mark_index = GSUB_is_glyph_covered((const BYTE*)mlpf1+offset, glyphs[glyph_index]); + if (mark_index != -1) + { + int ligature_index; + offset = GET_BE_WORD(mlpf1->LigatureCoverage); + ligature_index = GSUB_is_glyph_covered((const BYTE*)mlpf1+offset, glyphs[glyph_index - write_dir]); + if (ligature_index != -1) + { + const GPOS_MarkArray *ma; + const GPOS_MarkRecord *mr; + + const GPOS_LigatureArray *la; + const GPOS_LigatureAttach *lt; + int mark_class; + int class_count = GET_BE_WORD(mlpf1->ClassCount); + int component_count; + int component_size; + int i; + POINT ligature_pt; + POINT mark_pt; + + TRACE("Mark %x(%i) and ligature %x(%i)\n",glyphs[glyph_index], mark_index, glyphs[glyph_index - write_dir], ligature_index); + offset = GET_BE_WORD(mlpf1->MarkArray); + ma = (const GPOS_MarkArray*)((const BYTE*)mlpf1 + offset); + if (mark_index > GET_BE_WORD(ma->MarkCount)) + { + ERR("Mark index exeeded mark count\n"); + return; + } + mr = &ma->MarkRecord[mark_index]; + mark_class = GET_BE_WORD(mr->Class); + TRACE("Mark Class %i total classes %i\n",mark_class,class_count); + offset = GET_BE_WORD(mlpf1->LigatureArray); + la = (const GPOS_LigatureArray*)((const BYTE*)mlpf1 + offset); + if (ligature_index > GET_BE_WORD(la->LigatureCount)) + { + ERR("Ligature index exeeded ligature count\n"); + return; + } + offset = GET_BE_WORD(la->LigatureAttach[ligature_index]); + lt = (const GPOS_LigatureAttach*)((const BYTE*)la + offset); + + component_count = GET_BE_WORD(lt->ComponentCount); + component_size = class_count * sizeof(WORD); + offset = 0; + for (i = 0; i < component_count && !offset; i++) + { + int k; + const GPOS_ComponentRecord *cr = (const GPOS_ComponentRecord*)((const BYTE*)lt->ComponentRecord + (component_size * i)); + for (k = 0; k < class_count && !offset; k++) + offset = GET_BE_WORD(cr->LigatureAnchor[k]); + cr = (const GPOS_ComponentRecord*)((const BYTE*)cr + component_size); + } + if (!offset) + { + ERR("Failed to find avalible ligature connection point\n"); + return; + } + + GPOS_get_anchor_values((const BYTE*)lt + offset, &ligature_pt, ppem); + offset = GET_BE_WORD(mr->MarkAnchor); + GPOS_get_anchor_values((const BYTE*)ma + offset, &mark_pt, ppem); + TRACE("Offset on ligature is %i,%i design units\n",ligature_pt.x,ligature_pt.y); + TRACE("Offset on mark is %i,%i design units\n",mark_pt.x, mark_pt.y); + pt->x += ligature_pt.x - mark_pt.x; + pt->y += ligature_pt.y - mark_pt.y; + TRACE("Resulting cumulative offset is %i,%i design units\n",pt->x,pt->y); + } + } + } + else + FIXME("Unhandled Mark To Ligature Format %i\n",GET_BE_WORD(mlpf1->PosFormat)); + } +} + +static BOOL GPOS_apply_MarkToMark(const OT_LookupTable *look, const SCRIPT_ANALYSIS *analysis, const WORD *glyphs, INT glyph_index, + INT glyph_count, INT ppem, LPPOINT pt) +{ + int j; + BOOL rc = FALSE; + int write_dir = (analysis->fRTL && !analysis->fLogicalOrder) ? -1 : 1; + + TRACE("MarkToMark Attachment Positioning Subtable\n"); + + for (j = 0; j < GET_BE_WORD(look->SubTableCount); j++) + { + int offset; + const GPOS_MarkMarkPosFormat1 *mmpf1; + offset = GET_BE_WORD(look->SubTable[j]); + mmpf1 = (const GPOS_MarkMarkPosFormat1*)((const BYTE*)look+offset); + if (GET_BE_WORD(mmpf1->PosFormat) == 1) + { + int offset = GET_BE_WORD(mmpf1->Mark1Coverage); + int mark_index; + mark_index = GSUB_is_glyph_covered((const BYTE*)mmpf1+offset, glyphs[glyph_index]); + if (mark_index != -1) + { + int mark2_index; + offset = GET_BE_WORD(mmpf1->Mark2Coverage); + mark2_index = GSUB_is_glyph_covered((const BYTE*)mmpf1+offset, glyphs[glyph_index - write_dir]); + if (mark2_index != -1) + { + const GPOS_MarkArray *ma; + const GPOS_MarkRecord *mr; + const GPOS_Mark2Array *m2a; + const GPOS_Mark2Record *m2r; + int mark_class; + int class_count = GET_BE_WORD(mmpf1->ClassCount); + int mark2record_size; + POINT mark2_pt; + POINT mark_pt; + TRACE("Mark %x(%i) and Mark2 %x(%i)\n",glyphs[glyph_index], mark_index, glyphs[glyph_index - write_dir], mark2_index); + offset = GET_BE_WORD(mmpf1->Mark1Array); + ma = (const GPOS_MarkArray*)((const BYTE*)mmpf1 + offset); + if (mark_index > GET_BE_WORD(ma->MarkCount)) + { + ERR("Mark index exeeded mark count\n"); + return FALSE; + } + mr = &ma->MarkRecord[mark_index]; + mark_class = GET_BE_WORD(mr->Class); + TRACE("Mark Class %i total classes %i\n",mark_class,class_count); + offset = GET_BE_WORD(mmpf1->Mark2Array); + m2a = (const GPOS_Mark2Array*)((const BYTE*)mmpf1 + offset); + mark2record_size = class_count * sizeof(WORD); + m2r = (const GPOS_Mark2Record*)((const BYTE*)m2a + sizeof(WORD) + (mark2record_size * mark2_index)); + offset = GET_BE_WORD(m2r->Mark2Anchor[mark_class]); + GPOS_get_anchor_values((const BYTE*)m2a + offset, &mark2_pt, ppem); + offset = GET_BE_WORD(mr->MarkAnchor); + GPOS_get_anchor_values((const BYTE*)ma + offset, &mark_pt, ppem); + TRACE("Offset on mark2 is %i,%i design units\n",mark2_pt.x,mark2_pt.y); + TRACE("Offset on mark is %i,%i design units\n",mark_pt.x, mark_pt.y); + pt->x += mark2_pt.x - mark_pt.x; + pt->y += mark2_pt.y - mark_pt.y; + TRACE("Resulting cumulative offset is %i,%i design units\n",pt->x,pt->y); + rc = TRUE; + } + } + } + else + FIXME("Unhandled Mark To Mark Format %i\n",GET_BE_WORD(mmpf1->PosFormat)); + } + return rc; +} + +static INT GPOS_apply_ChainContextPos(ScriptCache *psc, LPOUTLINETEXTMETRICW lpotm, LPLOGFONTW lplogfont, const SCRIPT_ANALYSIS *analysis, INT* piAdvance, + const OT_LookupList *lookup, const OT_LookupTable *look, const WORD *glyphs, INT glyph_index, + INT glyph_count, INT ppem, GOFFSET *pGoffset) +{ + int j; + int write_dir = (analysis->fRTL && !analysis->fLogicalOrder) ? -1 : 1; + + TRACE("Chaining Contextual Positioning Subtable\n"); + + for (j = 0; j < GET_BE_WORD(look->SubTableCount); j++) + { + int offset; + const GPOS_ChainContextPosFormat3_1 *ccpf3; + int dirLookahead = write_dir; + int dirBacktrack = -1 * write_dir; + + offset = GET_BE_WORD(look->SubTable[j]); + ccpf3 = (const GPOS_ChainContextPosFormat3_1*)((const BYTE*)look+offset); + + if (GET_BE_WORD(ccpf3->PosFormat) == 1) + { + FIXME(" TODO: subtype 1 (Simple Chaining Context Glyph Positioning)\n"); + continue; + } + else if (GET_BE_WORD(ccpf3->PosFormat) == 2) + { + FIXME(" TODO: subtype 2 (Class-based Chaining Context Glyph Positioning)\n"); + continue; + } + else if (GET_BE_WORD(ccpf3->PosFormat) == 3) + { + int k; + int indexGlyphs; + const GPOS_ChainContextPosFormat3_2 *ccpf3_2; + const GPOS_ChainContextPosFormat3_3 *ccpf3_3; + const GPOS_ChainContextPosFormat3_4 *ccpf3_4; + + TRACE(" subtype 3 (Coverage-based Chaining Context Glyph Positioning)\n"); + + for (k = 0; k < GET_BE_WORD(ccpf3->BacktrackGlyphCount); k++) + { + offset = GET_BE_WORD(ccpf3->Coverage[k]); + if (GSUB_is_glyph_covered((const BYTE*)ccpf3+offset, glyphs[glyph_index + (dirBacktrack * (k+1))]) == -1) + break; + } + if (k != GET_BE_WORD(ccpf3->BacktrackGlyphCount)) + continue; + TRACE("Matched Backtrack\n"); + + ccpf3_2 = (const GPOS_ChainContextPosFormat3_2*)((BYTE *)ccpf3 + + FIELD_OFFSET(GPOS_ChainContextPosFormat3_1, Coverage[GET_BE_WORD(ccpf3->BacktrackGlyphCount)])); + + indexGlyphs = GET_BE_WORD(ccpf3_2->InputGlyphCount); + for (k = 0; k < indexGlyphs; k++) + { + offset = GET_BE_WORD(ccpf3_2->Coverage[k]); + if (GSUB_is_glyph_covered((const BYTE*)ccpf3+offset, glyphs[glyph_index + (write_dir * k)]) == -1) + break; + } + if (k != indexGlyphs) + continue; + TRACE("Matched IndexGlyphs\n"); + + ccpf3_3 = (const GPOS_ChainContextPosFormat3_3*)((BYTE *)ccpf3_2 + + FIELD_OFFSET(GPOS_ChainContextPosFormat3_2, Coverage[GET_BE_WORD(ccpf3_2->InputGlyphCount)])); + + for (k = 0; k < GET_BE_WORD(ccpf3_3->LookaheadGlyphCount); k++) + { + offset = GET_BE_WORD(ccpf3_3->Coverage[k]); + if (GSUB_is_glyph_covered((const BYTE*)ccpf3+offset, glyphs[glyph_index + (dirLookahead * (indexGlyphs + k))]) == -1) + break; + } + if (k != GET_BE_WORD(ccpf3_3->LookaheadGlyphCount)) + continue; + TRACE("Matched LookAhead\n"); + + ccpf3_4 = (const GPOS_ChainContextPosFormat3_4*)((BYTE *)ccpf3_3 + + FIELD_OFFSET(GPOS_ChainContextPosFormat3_3, Coverage[GET_BE_WORD(ccpf3_3->LookaheadGlyphCount)])); + + if (GET_BE_WORD(ccpf3_4->PosCount)) + { + for (k = 0; k < GET_BE_WORD(ccpf3_4->PosCount); k++) + { + int lookupIndex = GET_BE_WORD(ccpf3_4->PosLookupRecord[k].LookupListIndex); + int SequenceIndex = GET_BE_WORD(ccpf3_4->PosLookupRecord[k].SequenceIndex) * write_dir; + + TRACE("Position: %i -> %i %i\n",k, SequenceIndex, lookupIndex); + GPOS_apply_lookup(psc, lpotm, lplogfont, analysis, piAdvance, lookup, lookupIndex, glyphs, glyph_index + SequenceIndex, glyph_count, pGoffset); + } + return glyph_index + indexGlyphs + GET_BE_WORD(ccpf3_3->LookaheadGlyphCount); + } + else return glyph_index + 1; + } + else + FIXME("Unhandled Chaining Contextual Positioning Format %i\n",GET_BE_WORD(ccpf3->PosFormat)); + } + return glyph_index + 1; +} + +static INT GPOS_apply_lookup(ScriptCache *psc, LPOUTLINETEXTMETRICW lpotm, LPLOGFONTW lplogfont, const SCRIPT_ANALYSIS *analysis, INT* piAdvance, const OT_LookupList* lookup, INT lookup_index, const WORD *glyphs, INT glyph_index, INT glyph_count, GOFFSET *pGoffset) +{ + int offset; + const OT_LookupTable *look; + int ppem = lpotm->otmTextMetrics.tmAscent + lpotm->otmTextMetrics.tmDescent - lpotm->otmTextMetrics.tmInternalLeading; + + offset = GET_BE_WORD(lookup->Lookup[lookup_index]); + look = (const OT_LookupTable*)((const BYTE*)lookup + offset); + TRACE("type %i, flag %x, subtables %i\n",GET_BE_WORD(look->LookupType),GET_BE_WORD(look->LookupFlag),GET_BE_WORD(look->SubTableCount)); + switch(GET_BE_WORD(look->LookupType)) + { + case 1: + { + double devX, devY; + POINT adjust = {0,0}; + POINT advance = {0,0}; + GPOS_apply_SingleAdjustment(look, analysis, glyphs, glyph_index, glyph_count, ppem, &adjust, &advance); + if (adjust.x || adjust.y) + { + GPOS_convert_design_units_to_device(lpotm, lplogfont, adjust.x, adjust.y, &devX, &devY); + pGoffset[glyph_index].du += round(devX); + pGoffset[glyph_index].dv += round(devY); + } + if (advance.x || advance.y) + { + GPOS_convert_design_units_to_device(lpotm, lplogfont, advance.x, advance.y, &devX, &devY); + piAdvance[glyph_index] += round(devX); + if (advance.y) + FIXME("Unhandled adjustment to Y advancement\n"); + } + break; + } + case 2: + { + POINT advance[2]= {{0,0},{0,0}}; + POINT adjust[2]= {{0,0},{0,0}}; + double devX, devY; + int index; + int write_dir = (analysis->fRTL && !analysis->fLogicalOrder) ? -1 : 1; + int offset_sign = (analysis->fRTL && analysis->fLogicalOrder) ? -1 : 1; + + index = GPOS_apply_PairAdjustment(look, analysis, glyphs, glyph_index, glyph_count, ppem, adjust, advance); + if (adjust[0].x || adjust[0].y) + { + GPOS_convert_design_units_to_device(lpotm, lplogfont, adjust[0].x, adjust[0].y, &devX, &devY); + pGoffset[glyph_index].du += round(devX) * offset_sign; + pGoffset[glyph_index].dv += round(devY); + } + if (advance[0].x || advance[0].y) + { + GPOS_convert_design_units_to_device(lpotm, lplogfont, advance[0].x, advance[0].y, &devX, &devY); + piAdvance[glyph_index] += round(devX); + } + if (adjust[1].x || adjust[1].y) + { + GPOS_convert_design_units_to_device(lpotm, lplogfont, adjust[1].x, adjust[1].y, &devX, &devY); + pGoffset[glyph_index + write_dir].du += round(devX) * offset_sign; + pGoffset[glyph_index + write_dir].dv += round(devY); + } + if (advance[1].x || advance[1].y) + { + GPOS_convert_design_units_to_device(lpotm, lplogfont, advance[1].x, advance[1].y, &devX, &devY); + piAdvance[glyph_index + write_dir] += round(devX); + } + return index; + } + case 3: + { + POINT desU = {0,0}; + double devX, devY; + int write_dir = (analysis->fRTL && !analysis->fLogicalOrder) ? -1 : 1; + + GPOS_apply_CursiveAttachment(look, analysis, glyphs, glyph_index, glyph_count, ppem, &desU); + if (desU.x || desU.y) + { + GPOS_convert_design_units_to_device(lpotm, lplogfont, desU.x, desU.y, &devX, &devY); + /* Windows does not appear to apply X offsets here */ + pGoffset[glyph_index].dv = round(devY) + pGoffset[glyph_index+write_dir].dv; + } + break; + } + case 4: + { + double devX, devY; + POINT desU = {0,0}; + int base_index = GPOS_apply_MarkToBase(psc, look, analysis, glyphs, glyph_index, glyph_count, ppem, &desU); + if (base_index != -1) + { + GPOS_convert_design_units_to_device(lpotm, lplogfont, desU.x, desU.y, &devX, &devY); + if (!analysis->fRTL) pGoffset[glyph_index].du = round(devX) - piAdvance[base_index]; + else + { + if (analysis->fLogicalOrder) devX *= -1; + pGoffset[glyph_index].du = round(devX); + } + pGoffset[glyph_index].dv = round(devY); + } + break; + } + case 5: + { + double devX, devY; + POINT desU = {0,0}; + GPOS_apply_MarkToLigature(look, analysis, glyphs, glyph_index, glyph_count, ppem, &desU); + if (desU.x || desU.y) + { + GPOS_convert_design_units_to_device(lpotm, lplogfont, desU.x, desU.y, &devX, &devY); + pGoffset[glyph_index].du = (round(devX) - piAdvance[glyph_index-1]); + pGoffset[glyph_index].dv = round(devY); + } + break; + } + case 6: + { + double devX, devY; + POINT desU = {0,0}; + int write_dir = (analysis->fRTL && !analysis->fLogicalOrder) ? -1 : 1; + if (GPOS_apply_MarkToMark(look, analysis, glyphs, glyph_index, glyph_count, ppem, &desU)) + { + GPOS_convert_design_units_to_device(lpotm, lplogfont, desU.x, desU.y, &devX, &devY); + if (analysis->fRTL && analysis->fLogicalOrder) devX *= -1; + pGoffset[glyph_index].du = round(devX) + pGoffset[glyph_index - write_dir].du; + pGoffset[glyph_index].dv = round(devY) + pGoffset[glyph_index - write_dir].dv; + } + break; + } + case 8: + { + return GPOS_apply_ChainContextPos(psc, lpotm, lplogfont, analysis, piAdvance, lookup, look, glyphs, glyph_index, glyph_count, ppem, pGoffset); + } + default: + FIXME("We do not handle SubType %i\n",GET_BE_WORD(look->LookupType)); + } + return glyph_index+1; +} + +INT OpenType_apply_GPOS_lookup(ScriptCache *psc, LPOUTLINETEXTMETRICW lpotm, LPLOGFONTW lplogfont, const SCRIPT_ANALYSIS *analysis, INT* piAdvance, INT lookup_index, const WORD *glyphs, INT glyph_index, INT glyph_count, GOFFSET *pGoffset) +{ + const GPOS_Header *header = (const GPOS_Header *)psc->GPOS_Table; + const OT_LookupList *lookup = (const OT_LookupList*)((const BYTE*)header + GET_BE_WORD(header->LookupList)); + + return GPOS_apply_lookup(psc, lpotm, lplogfont, analysis, piAdvance, lookup, lookup_index, glyphs, glyph_index, glyph_count, pGoffset); +} + static void GSUB_initialize_script_cache(ScriptCache *psc) { int i; - if (!psc->script_count) + if (psc->GSUB_Table) { - const GSUB_ScriptList *script; + const OT_ScriptList *script; const GSUB_Header* header = (const GSUB_Header*)psc->GSUB_Table; - script = (const GSUB_ScriptList*)((const BYTE*)header + GET_BE_WORD(header->ScriptList)); + script = (const OT_ScriptList*)((const BYTE*)header + GET_BE_WORD(header->ScriptList)); psc->script_count = GET_BE_WORD(script->ScriptCount); TRACE("initializing %i scripts in this font\n",psc->script_count); if (psc->script_count) @@ -878,18 +1880,85 @@ static void GSUB_initialize_script_cache(ScriptCache *psc) { int offset = GET_BE_WORD(script->ScriptRecord[i].Script); psc->scripts[i].tag = MS_MAKE_TAG(script->ScriptRecord[i].ScriptTag[0], script->ScriptRecord[i].ScriptTag[1], script->ScriptRecord[i].ScriptTag[2], script->ScriptRecord[i].ScriptTag[3]); - psc->scripts[i].table = ((const BYTE*)script + offset); + psc->scripts[i].gsub_table = ((const BYTE*)script + offset); } } } } -HRESULT OpenType_GSUB_GetFontScriptTags(ScriptCache *psc, OPENTYPE_TAG searchingFor, int cMaxTags, OPENTYPE_TAG *pScriptTags, int *pcTags, LPCVOID* script_table) +static void GPOS_expand_script_cache(ScriptCache *psc) +{ + int i, count; + const OT_ScriptList *script; + const GPOS_Header* header = (const GPOS_Header*)psc->GPOS_Table; + + if (!header) + return; + + script = (const OT_ScriptList*)((const BYTE*)header + GET_BE_WORD(header->ScriptList)); + count = GET_BE_WORD(script->ScriptCount); + + if (!count) + return; + + if (!psc->script_count) + { + psc->script_count = count; + TRACE("initializing %i scripts in this font\n",psc->script_count); + if (psc->script_count) + { + psc->scripts = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(LoadedScript) * psc->script_count); + for (i = 0; i < psc->script_count; i++) + { + int offset = GET_BE_WORD(script->ScriptRecord[i].Script); + psc->scripts[i].tag = MS_MAKE_TAG(script->ScriptRecord[i].ScriptTag[0], script->ScriptRecord[i].ScriptTag[1], script->ScriptRecord[i].ScriptTag[2], script->ScriptRecord[i].ScriptTag[3]); + psc->scripts[i].gpos_table = ((const BYTE*)script + offset); + } + } + } + else + { + for (i = 0; i < count; i++) + { + int j; + int offset = GET_BE_WORD(script->ScriptRecord[i].Script); + OPENTYPE_TAG tag = MS_MAKE_TAG(script->ScriptRecord[i].ScriptTag[0], script->ScriptRecord[i].ScriptTag[1], script->ScriptRecord[i].ScriptTag[2], script->ScriptRecord[i].ScriptTag[3]); + for (j = 0; j < psc->script_count; j++) + { + if (psc->scripts[j].tag == tag) + { + psc->scripts[j].gpos_table = ((const BYTE*)script + offset); + break; + } + } + if (j == psc->script_count) + { + psc->script_count++; + psc->scripts = HeapReAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,psc->scripts, sizeof(LoadedScript) * psc->script_count); + psc->scripts[j].tag = tag; + psc->scripts[j].gpos_table = ((const BYTE*)script + offset); + } + } + } +} + +static void _initialize_script_cache(ScriptCache *psc) +{ + if (!psc->scripts_initialized) + { + GSUB_initialize_script_cache(psc); + GPOS_expand_script_cache(psc); + psc->scripts_initialized = TRUE; + } +} + +HRESULT OpenType_GetFontScriptTags(ScriptCache *psc, OPENTYPE_TAG searchingFor, int cMaxTags, OPENTYPE_TAG *pScriptTags, int *pcTags) { int i; HRESULT rc = S_OK; - GSUB_initialize_script_cache(psc); + _initialize_script_cache(psc); + *pcTags = psc->script_count; if (!searchingFor && cMaxTags < *pcTags) @@ -908,8 +1977,6 @@ HRESULT OpenType_GSUB_GetFontScriptTags(ScriptCache *psc, OPENTYPE_TAG searching { pScriptTags[0] = psc->scripts[i].tag; *pcTags = 1; - if (script_table) - *script_table = psc->scripts[i].table; rc = S_OK; break; } @@ -922,16 +1989,21 @@ static void GSUB_initialize_language_cache(LoadedScript *script) { int i; - if (!script->language_count) + if (script->gsub_table) { - const GSUB_Script* table = script->table; + DWORD offset; + const OT_Script* table = script->gsub_table; script->language_count = GET_BE_WORD(table->LangSysCount); - script->default_language.tag = MS_MAKE_TAG('d','f','l','t'); - script->default_language.table = (const BYTE*)table + GET_BE_WORD(table->DefaultLangSys); + offset = GET_BE_WORD(table->DefaultLangSys); + if (offset) + { + script->default_language.tag = MS_MAKE_TAG('d','f','l','t'); + script->default_language.gsub_table = (const BYTE*)table + offset; + } if (script->language_count) { - TRACE("Deflang %p, LangCount %i\n",script->default_language.table, script->language_count); + TRACE("Deflang %p, LangCount %i\n",script->default_language.gsub_table, script->language_count); script->languages = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(LoadedLanguage) * script->language_count); @@ -939,19 +2011,90 @@ static void GSUB_initialize_language_cache(LoadedScript *script) { int offset = GET_BE_WORD(table->LangSysRecord[i].LangSys); script->languages[i].tag = MS_MAKE_TAG(table->LangSysRecord[i].LangSysTag[0], table->LangSysRecord[i].LangSysTag[1], table->LangSysRecord[i].LangSysTag[2], table->LangSysRecord[i].LangSysTag[3]); - script->languages[i].table = ((const BYTE*)table + offset); + script->languages[i].gsub_table = ((const BYTE*)table + offset); } } } } -HRESULT OpenType_GSUB_GetFontLanguageTags(ScriptCache *psc, OPENTYPE_TAG script_tag, OPENTYPE_TAG searchingFor, int cMaxTags, OPENTYPE_TAG *pLanguageTags, int *pcTags, LPCVOID* language_table) +static void GPOS_expand_language_cache(LoadedScript *script) +{ + int count; + const OT_Script* table = script->gpos_table; + DWORD offset; + + if (!table) + return; + + offset = GET_BE_WORD(table->DefaultLangSys); + if (offset) + script->default_language.gpos_table = (const BYTE*)table + offset; + + count = GET_BE_WORD(table->LangSysCount); + + TRACE("Deflang %p, LangCount %i\n",script->default_language.gpos_table, count); + + if (!count) + return; + + if (!script->language_count) + { + int i; + script->language_count = count; + + script->languages = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(LoadedLanguage) * script->language_count); + + for (i = 0; i < script->language_count; i++) + { + int offset = GET_BE_WORD(table->LangSysRecord[i].LangSys); + script->languages[i].tag = MS_MAKE_TAG(table->LangSysRecord[i].LangSysTag[0], table->LangSysRecord[i].LangSysTag[1], table->LangSysRecord[i].LangSysTag[2], table->LangSysRecord[i].LangSysTag[3]); + script->languages[i].gpos_table = ((const BYTE*)table + offset); + } + } + else if (count) + { + int i,j; + for (i = 0; i < count; i++) + { + int offset = GET_BE_WORD(table->LangSysRecord[i].LangSys); + OPENTYPE_TAG tag = MS_MAKE_TAG(table->LangSysRecord[i].LangSysTag[0], table->LangSysRecord[i].LangSysTag[1], table->LangSysRecord[i].LangSysTag[2], table->LangSysRecord[i].LangSysTag[3]); + + for (j = 0; j < script->language_count; j++) + { + if (script->languages[j].tag == tag) + { + script->languages[j].gpos_table = ((const BYTE*)table + offset); + break; + } + } + if (j == script->language_count) + { + script->language_count++; + script->languages = HeapReAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,script->languages, sizeof(LoadedLanguage) * script->language_count); + script->languages[j].tag = tag; + script->languages[j].gpos_table = ((const BYTE*)table + offset); + } + } + } +} + +static void _initialize_language_cache(LoadedScript *script) +{ + if (!script->languages_initialized) + { + GSUB_initialize_language_cache(script); + GPOS_expand_language_cache(script); + script->languages_initialized = TRUE; + } +} + +HRESULT OpenType_GetFontLanguageTags(ScriptCache *psc, OPENTYPE_TAG script_tag, OPENTYPE_TAG searchingFor, int cMaxTags, OPENTYPE_TAG *pLanguageTags, int *pcTags) { int i; HRESULT rc = S_OK; LoadedScript *script = NULL; - GSUB_initialize_script_cache(psc); + _initialize_script_cache(psc); for (i = 0; i < psc->script_count; i++) { @@ -965,7 +2108,7 @@ HRESULT OpenType_GSUB_GetFontLanguageTags(ScriptCache *psc, OPENTYPE_TAG script_ if (!script) return E_INVALIDARG; - GSUB_initialize_language_cache(script); + _initialize_language_cache(script); if (!searchingFor && cMaxTags < script->language_count) rc = E_OUTOFMEMORY; @@ -985,15 +2128,13 @@ HRESULT OpenType_GSUB_GetFontLanguageTags(ScriptCache *psc, OPENTYPE_TAG script_ { pLanguageTags[0] = script->languages[i].tag; *pcTags = 1; - if (language_table) - *language_table = script->languages[i].table; rc = S_OK; break; } } } - if (script->default_language.table) + if (script->default_language.gsub_table) { if (i < cMaxTags) pLanguageTags[i] = script->default_language.tag; @@ -1001,8 +2142,6 @@ HRESULT OpenType_GSUB_GetFontLanguageTags(ScriptCache *psc, OPENTYPE_TAG script_ if (searchingFor && FAILED(rc)) { pLanguageTags[0] = script->default_language.tag; - if (language_table) - *language_table = script->default_language.table; } i++; *pcTags = (*pcTags) + 1; @@ -1016,11 +2155,11 @@ static void GSUB_initialize_feature_cache(LPCVOID table, LoadedLanguage *languag { int i; - if (!language->feature_count) + if (language->gsub_table) { - const GSUB_LangSys *lang= language->table; + const OT_LangSys *lang = language->gsub_table; const GSUB_Header *header = (const GSUB_Header *)table; - const GSUB_FeatureList *feature_list; + const OT_FeatureList *feature_list; language->feature_count = GET_BE_WORD(lang->FeatureCount); TRACE("%i features\n",language->feature_count); @@ -1029,34 +2168,112 @@ static void GSUB_initialize_feature_cache(LPCVOID table, LoadedLanguage *languag { language->features = HeapAlloc(GetProcessHeap(),0,sizeof(LoadedFeature)*language->feature_count); - feature_list = (const GSUB_FeatureList*)((const BYTE*)header + GET_BE_WORD(header->FeatureList)); + feature_list = (const OT_FeatureList*)((const BYTE*)header + GET_BE_WORD(header->FeatureList)); for (i = 0; i < language->feature_count; i++) { - const GSUB_Feature *feature; + const OT_Feature *feature; int j; int index = GET_BE_WORD(lang->FeatureIndex[i]); language->features[i].tag = MS_MAKE_TAG(feature_list->FeatureRecord[index].FeatureTag[0], feature_list->FeatureRecord[index].FeatureTag[1], feature_list->FeatureRecord[index].FeatureTag[2], feature_list->FeatureRecord[index].FeatureTag[3]); language->features[i].feature = ((const BYTE*)feature_list + GET_BE_WORD(feature_list->FeatureRecord[index].Feature)); - feature = (const GSUB_Feature*)language->features[i].feature; + feature = (const OT_Feature*)language->features[i].feature; language->features[i].lookup_count = GET_BE_WORD(feature->LookupCount); language->features[i].lookups = HeapAlloc(GetProcessHeap(),0,sizeof(WORD) * language->features[i].lookup_count); for (j = 0; j < language->features[i].lookup_count; j++) language->features[i].lookups[j] = GET_BE_WORD(feature->LookupListIndex[j]); + language->features[i].tableType = FEATURE_GSUB_TABLE; } } } } -HRESULT OpenType_GSUB_GetFontFeatureTags(ScriptCache *psc, OPENTYPE_TAG script_tag, OPENTYPE_TAG language_tag, BOOL filtered, OPENTYPE_TAG searchingFor, int cMaxTags, OPENTYPE_TAG *pFeatureTags, int *pcTags, LoadedFeature** feature) +static void GPOS_expand_feature_cache(LPCVOID table, LoadedLanguage *language) +{ + int i, count; + const OT_LangSys *lang = language->gpos_table; + const GPOS_Header *header = (const GPOS_Header *)table; + const OT_FeatureList *feature_list; + + if (!lang) + return; + + count = GET_BE_WORD(lang->FeatureCount); + feature_list = (const OT_FeatureList*)((const BYTE*)header + GET_BE_WORD(header->FeatureList)); + + TRACE("%i features\n",count); + + if (!count) + return; + + if (!language->feature_count) + { + language->feature_count = count; + + if (language->feature_count) + { + language->features = HeapAlloc(GetProcessHeap(),0,sizeof(LoadedFeature)*language->feature_count); + + for (i = 0; i < language->feature_count; i++) + { + const OT_Feature *feature; + int j; + int index = GET_BE_WORD(lang->FeatureIndex[i]); + + language->features[i].tag = MS_MAKE_TAG(feature_list->FeatureRecord[index].FeatureTag[0], feature_list->FeatureRecord[index].FeatureTag[1], feature_list->FeatureRecord[index].FeatureTag[2], feature_list->FeatureRecord[index].FeatureTag[3]); + language->features[i].feature = ((const BYTE*)feature_list + GET_BE_WORD(feature_list->FeatureRecord[index].Feature)); + feature = (const OT_Feature*)language->features[i].feature; + language->features[i].lookup_count = GET_BE_WORD(feature->LookupCount); + language->features[i].lookups = HeapAlloc(GetProcessHeap(),0,sizeof(WORD) * language->features[i].lookup_count); + for (j = 0; j < language->features[i].lookup_count; j++) + language->features[i].lookups[j] = GET_BE_WORD(feature->LookupListIndex[j]); + language->features[i].tableType = FEATURE_GPOS_TABLE; + } + } + } + else + { + language->features = HeapReAlloc(GetProcessHeap(),0,language->features, sizeof(LoadedFeature)*(language->feature_count + count)); + + for (i = 0; i < count; i++) + { + const OT_Feature *feature; + int j; + int index = GET_BE_WORD(lang->FeatureIndex[i]); + int idx = language->feature_count + i; + + language->features[idx].tag = MS_MAKE_TAG(feature_list->FeatureRecord[index].FeatureTag[0], feature_list->FeatureRecord[index].FeatureTag[1], feature_list->FeatureRecord[index].FeatureTag[2], feature_list->FeatureRecord[index].FeatureTag[3]); + language->features[idx].feature = ((const BYTE*)feature_list + GET_BE_WORD(feature_list->FeatureRecord[index].Feature)); + feature = (const OT_Feature*)language->features[idx].feature; + language->features[idx].lookup_count = GET_BE_WORD(feature->LookupCount); + language->features[idx].lookups = HeapAlloc(GetProcessHeap(),0,sizeof(WORD) * language->features[idx].lookup_count); + for (j = 0; j < language->features[idx].lookup_count; j++) + language->features[idx].lookups[j] = GET_BE_WORD(feature->LookupListIndex[j]); + language->features[idx].tableType = FEATURE_GPOS_TABLE; + } + language->feature_count += count; + } +} + +static void _initialize_feature_cache(ScriptCache *psc, LoadedLanguage *language) +{ + if (!language->features_initialized) + { + GSUB_initialize_feature_cache(psc->GSUB_Table, language); + GPOS_expand_feature_cache(psc->GPOS_Table, language); + language->features_initialized = TRUE; + } +} + +HRESULT OpenType_GetFontFeatureTags(ScriptCache *psc, OPENTYPE_TAG script_tag, OPENTYPE_TAG language_tag, BOOL filtered, OPENTYPE_TAG searchingFor, char tableType, int cMaxTags, OPENTYPE_TAG *pFeatureTags, int *pcTags, LoadedFeature** feature) { int i; HRESULT rc = S_OK; LoadedScript *script = NULL; LoadedLanguage *language = NULL; - GSUB_initialize_script_cache(psc); + _initialize_script_cache(psc); for (i = 0; i < psc->script_count; i++) { @@ -1076,9 +2293,9 @@ HRESULT OpenType_GSUB_GetFontFeatureTags(ScriptCache *psc, OPENTYPE_TAG script_t return E_INVALIDARG; } - GSUB_initialize_language_cache(script); + _initialize_language_cache(script); - if (script->default_language.table && script->default_language.tag == language_tag) + if ((script->default_language.gsub_table || script->default_language.gpos_table) && script->default_language.tag == language_tag) language = &script->default_language; else { @@ -1098,9 +2315,17 @@ HRESULT OpenType_GSUB_GetFontFeatureTags(ScriptCache *psc, OPENTYPE_TAG script_t return S_OK; } - GSUB_initialize_feature_cache(psc->GSUB_Table, language); + _initialize_feature_cache(psc, language); - *pcTags = language->feature_count; + if (tableType) + { + *pcTags = 0; + for (i = 0; i < language->feature_count; i++) + if (language->features[i].tableType == tableType) + *pcTags = (*pcTags)+1; + } + else + *pcTags = language->feature_count; if (!searchingFor && cMaxTags < *pcTags) rc = E_OUTOFMEMORY; @@ -1110,11 +2335,15 @@ HRESULT OpenType_GSUB_GetFontFeatureTags(ScriptCache *psc, OPENTYPE_TAG script_t for (i = 0; i < language->feature_count; i++) { if (i < cMaxTags) - pFeatureTags[i] = language->features[i].tag; + { + if (!tableType || language->features[i].tableType == tableType) + pFeatureTags[i] = language->features[i].tag; + } if (searchingFor) { - if (searchingFor == language->features[i].tag) + if ((searchingFor == language->features[i].tag) && + (!tableType || language->features[i].tableType == tableType)) { pFeatureTags[0] = language->features[i].tag; *pcTags = 1; diff --git a/dll/win32/usp10/shape.c b/dll/win32/usp10/shape.c index 00c68139747..529cd536a01 100644 --- a/dll/win32/usp10/shape.c +++ b/dll/win32/usp10/shape.c @@ -41,9 +41,14 @@ WINE_DEFAULT_DEBUG_CHANNEL(uniscribe); typedef VOID (*ContextualShapingProc)(HDC, ScriptCache*, SCRIPT_ANALYSIS*, WCHAR*, INT, WORD*, INT*, INT, WORD*); +static void ContextualShape_Control(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust); static void ContextualShape_Arabic(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust); +static void ContextualShape_Hebrew(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust); static void ContextualShape_Syriac(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust); +static void ContextualShape_Thaana(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust); static void ContextualShape_Phags_pa(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust); +static void ContextualShape_Thai(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust); +static void ContextualShape_Lao(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust); static void ContextualShape_Sinhala(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust); static void ContextualShape_Devanagari(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust); static void ContextualShape_Bengali(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust); @@ -59,8 +64,11 @@ static void ContextualShape_Mongolian(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS typedef VOID (*ShapeCharGlyphPropProc)( HDC , ScriptCache*, SCRIPT_ANALYSIS*, const WCHAR*, const INT, const WORD*, const INT, WORD*, SCRIPT_CHARPROP*, SCRIPT_GLYPHPROP*); -static void ShapeCharGlyphProp_Default( HDC hdc, ScriptCache* psc, SCRIPT_ANALYSIS* psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD* pwLogClust, SCRIPT_CHARPROP* pCharProp, SCRIPT_GLYPHPROP* pGlyphProp); +static void ShapeCharGlyphProp_Default( ScriptCache* psc, SCRIPT_ANALYSIS* psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD* pwLogClust, SCRIPT_CHARPROP* pCharProp, SCRIPT_GLYPHPROP* pGlyphProp); +static void ShapeCharGlyphProp_Control( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP* pCharProp, SCRIPT_GLYPHPROP *pGlyphProp ); +static void ShapeCharGlyphProp_Latin( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP* pCharProp, SCRIPT_GLYPHPROP *pGlyphProp ); static void ShapeCharGlyphProp_Arabic( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP* pCharProp, SCRIPT_GLYPHPROP *pGlyphProp ); +static void ShapeCharGlyphProp_Hebrew( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP* pCharProp, SCRIPT_GLYPHPROP *pGlyphProp ); static void ShapeCharGlyphProp_Thai( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP *pCharProp, SCRIPT_GLYPHPROP *pGlyphProp ); static void ShapeCharGlyphProp_None( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP *pCharProp, SCRIPT_GLYPHPROP *pGlyphProp ); static void ShapeCharGlyphProp_Tibet( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP *pCharProp, SCRIPT_GLYPHPROP *pGlyphProp ); @@ -114,6 +122,8 @@ typedef struct tagConsonantComponents typedef void (*second_reorder_function)(LPWSTR pwChar, IndicSyllable *syllable,WORD* pwGlyphs, IndicSyllable* glyph_index, lexical_function lex); +typedef int (*combining_lexical_function)(WCHAR c); + /* the orders of joined_forms and contextual_features need to line up */ static const char* contextual_features[] = { @@ -135,10 +145,19 @@ static OPENTYPE_FEATURE_RECORD standard_features[] = static OPENTYPE_FEATURE_RECORD latin_features[] = { + { MS_MAKE_TAG('l','o','c','l'), 1}, + { MS_MAKE_TAG('c','c','m','p'), 1}, { MS_MAKE_TAG('l','i','g','a'), 1}, { MS_MAKE_TAG('c','l','i','g'), 1}, }; +static OPENTYPE_FEATURE_RECORD latin_gpos_features[] = +{ + { MS_MAKE_TAG('k','e','r','n'), 1}, + { MS_MAKE_TAG('m','a','r','k'), 1}, + { MS_MAKE_TAG('m','k','m','k'), 1}, +}; + static OPENTYPE_FEATURE_RECORD arabic_features[] = { { MS_MAKE_TAG('r','l','i','g'), 1}, @@ -158,11 +177,26 @@ static const char* required_arabic_features[] = NULL }; +static OPENTYPE_FEATURE_RECORD arabic_gpos_features[] = +{ + { MS_MAKE_TAG('c','u','r','s'), 1}, + { MS_MAKE_TAG('k','e','r','n'), 1}, + { MS_MAKE_TAG('m','a','r','k'), 1}, + { MS_MAKE_TAG('m','k','m','k'), 1}, +}; + static OPENTYPE_FEATURE_RECORD hebrew_features[] = { + { MS_MAKE_TAG('c','c','m','p'), 1}, { MS_MAKE_TAG('d','l','i','g'), 0}, }; +static OPENTYPE_FEATURE_RECORD hebrew_gpos_features[] = +{ + { MS_MAKE_TAG('k','e','r','n'), 1}, + { MS_MAKE_TAG('m','a','r','k'), 1}, +}; + static OPENTYPE_FEATURE_RECORD syriac_features[] = { { MS_MAKE_TAG('r','l','i','g'), 1}, @@ -183,6 +217,13 @@ static const char* required_syriac_features[] = NULL }; +static OPENTYPE_FEATURE_RECORD syriac_gpos_features[] = +{ + { MS_MAKE_TAG('k','e','r','n'), 1}, + { MS_MAKE_TAG('m','a','r','k'), 1}, + { MS_MAKE_TAG('m','k','m','k'), 1}, +}; + static OPENTYPE_FEATURE_RECORD sinhala_features[] = { /* Presentation forms */ @@ -197,6 +238,12 @@ static OPENTYPE_FEATURE_RECORD tibetan_features[] = { MS_MAKE_TAG('b','l','w','s'), 1}, }; +static OPENTYPE_FEATURE_RECORD tibetan_gpos_features[] = +{ + { MS_MAKE_TAG('a','b','v','m'), 1}, + { MS_MAKE_TAG('b','l','w','m'), 1}, +}; + static OPENTYPE_FEATURE_RECORD phags_features[] = { { MS_MAKE_TAG('a','b','v','s'), 1}, @@ -209,6 +256,13 @@ static OPENTYPE_FEATURE_RECORD thai_features[] = { MS_MAKE_TAG('c','c','m','p'), 1}, }; +static OPENTYPE_FEATURE_RECORD thai_gpos_features[] = +{ + { MS_MAKE_TAG('k','e','r','n'), 1}, + { MS_MAKE_TAG('m','a','r','k'), 1}, + { MS_MAKE_TAG('m','k','m','k'), 1}, +}; + static const char* required_lao_features[] = { "ccmp", @@ -241,6 +295,14 @@ static OPENTYPE_FEATURE_RECORD devanagari_features[] = { MS_MAKE_TAG('c','a','l','t'), 1}, }; +static OPENTYPE_FEATURE_RECORD devanagari_gpos_features[] = +{ + { MS_MAKE_TAG('k','e','r','n'), 1}, + { MS_MAKE_TAG('d','i','s','t'), 1}, + { MS_MAKE_TAG('a','b','v','m'), 1}, + { MS_MAKE_TAG('b','l','w','m'), 1}, +}; + static OPENTYPE_FEATURE_RECORD myanmar_features[] = { { MS_MAKE_TAG('l','i','g','a'), 1}, @@ -357,6 +419,14 @@ static const char* required_khmer_features[] = NULL }; +static OPENTYPE_FEATURE_RECORD khmer_gpos_features[] = +{ + { MS_MAKE_TAG('d','i','s','t'), 1}, + { MS_MAKE_TAG('b','l','w','m'), 1}, + { MS_MAKE_TAG('a','b','v','m'), 1}, + { MS_MAKE_TAG('m','k','m','k'), 1}, +}; + static OPENTYPE_FEATURE_RECORD ethiopic_features[] = { { MS_MAKE_TAG('c','c','m','p'), 1}, @@ -375,6 +445,7 @@ static OPENTYPE_FEATURE_RECORD mongolian_features[] = typedef struct ScriptShapeDataTag { TEXTRANGE_PROPERTIES defaultTextRange; + TEXTRANGE_PROPERTIES defaultGPOSTextRange; const char** requiredFeatures; OPENTYPE_TAG newOtTag; ContextualShapingProc contextProc; @@ -384,88 +455,88 @@ typedef struct ScriptShapeDataTag { /* in order of scripts */ static const ScriptShapeData ShapingData[] = { - {{ standard_features, 2}, NULL, 0, NULL, NULL}, - {{ latin_features, 2}, NULL, 0, NULL, NULL}, - {{ latin_features, 2}, NULL, 0, NULL, NULL}, - {{ latin_features, 2}, NULL, 0, NULL, NULL}, - {{ standard_features, 2}, NULL, 0, NULL, NULL}, - {{ latin_features, 2}, NULL, 0, NULL, NULL}, - {{ arabic_features, 6}, required_arabic_features, 0, ContextualShape_Arabic, ShapeCharGlyphProp_Arabic}, - {{ arabic_features, 6}, required_arabic_features, 0, ContextualShape_Arabic, ShapeCharGlyphProp_Arabic}, - {{ hebrew_features, 1}, NULL, 0, NULL, NULL}, - {{ syriac_features, 4}, required_syriac_features, 0, ContextualShape_Syriac, ShapeCharGlyphProp_None}, - {{ arabic_features, 6}, required_arabic_features, 0, ContextualShape_Arabic, ShapeCharGlyphProp_Arabic}, - {{ NULL, 0}, NULL, 0, NULL, ShapeCharGlyphProp_None}, - {{ standard_features, 2}, NULL, 0, NULL, NULL}, - {{ standard_features, 2}, NULL, 0, NULL, NULL}, - {{ standard_features, 2}, NULL, 0, NULL, NULL}, - {{ standard_features, 2}, NULL, 0, NULL, NULL}, - {{ sinhala_features, 3}, NULL, 0, ContextualShape_Sinhala, ShapeCharGlyphProp_Sinhala}, - {{ tibetan_features, 2}, NULL, 0, NULL, ShapeCharGlyphProp_Tibet}, - {{ tibetan_features, 2}, NULL, 0, NULL, ShapeCharGlyphProp_Tibet}, - {{ phags_features, 3}, NULL, 0, ContextualShape_Phags_pa, ShapeCharGlyphProp_Thai}, - {{ thai_features, 1}, NULL, 0, NULL, ShapeCharGlyphProp_Thai}, - {{ thai_features, 1}, NULL, 0, NULL, ShapeCharGlyphProp_Thai}, - {{ thai_features, 1}, required_lao_features, 0, NULL, ShapeCharGlyphProp_Thai}, - {{ thai_features, 1}, required_lao_features, 0, NULL, ShapeCharGlyphProp_Thai}, - {{ devanagari_features, 6}, required_devanagari_features, MS_MAKE_TAG('d','e','v','2'), ContextualShape_Devanagari, ShapeCharGlyphProp_Devanagari}, - {{ devanagari_features, 6}, required_devanagari_features, MS_MAKE_TAG('d','e','v','2'), ContextualShape_Devanagari, ShapeCharGlyphProp_Devanagari}, - {{ devanagari_features, 6}, required_bengali_features, MS_MAKE_TAG('b','n','g','2'), ContextualShape_Bengali, ShapeCharGlyphProp_Bengali}, - {{ devanagari_features, 6}, required_bengali_features, MS_MAKE_TAG('b','n','g','2'), ContextualShape_Bengali, ShapeCharGlyphProp_Bengali}, - {{ devanagari_features, 6}, required_bengali_features, MS_MAKE_TAG('b','n','g','2'), ContextualShape_Bengali, ShapeCharGlyphProp_Bengali}, - {{ devanagari_features, 6}, required_gurmukhi_features, MS_MAKE_TAG('g','u','r','2'), ContextualShape_Gurmukhi, ShapeCharGlyphProp_Gurmukhi}, - {{ devanagari_features, 6}, required_gurmukhi_features, MS_MAKE_TAG('g','u','r','2'), ContextualShape_Gurmukhi, ShapeCharGlyphProp_Gurmukhi}, - {{ devanagari_features, 6}, required_devanagari_features, MS_MAKE_TAG('g','j','r','2'), ContextualShape_Gujarati, ShapeCharGlyphProp_Gujarati}, - {{ devanagari_features, 6}, required_devanagari_features, MS_MAKE_TAG('g','j','r','2'), ContextualShape_Gujarati, ShapeCharGlyphProp_Gujarati}, - {{ devanagari_features, 6}, required_devanagari_features, MS_MAKE_TAG('g','j','r','2'), ContextualShape_Gujarati, ShapeCharGlyphProp_Gujarati}, - {{ devanagari_features, 6}, required_oriya_features, MS_MAKE_TAG('o','r','y','2'), ContextualShape_Oriya, ShapeCharGlyphProp_Oriya}, - {{ devanagari_features, 6}, required_oriya_features, MS_MAKE_TAG('o','r','y','2'), ContextualShape_Oriya, ShapeCharGlyphProp_Oriya}, - {{ devanagari_features, 6}, required_tamil_features, MS_MAKE_TAG('t','a','m','2'), ContextualShape_Tamil, ShapeCharGlyphProp_Tamil}, - {{ devanagari_features, 6}, required_tamil_features, MS_MAKE_TAG('t','a','m','2'), ContextualShape_Tamil, ShapeCharGlyphProp_Tamil}, - {{ devanagari_features, 6}, required_telugu_features, MS_MAKE_TAG('t','e','l','2'), ContextualShape_Telugu, ShapeCharGlyphProp_Telugu}, - {{ devanagari_features, 6}, required_telugu_features, MS_MAKE_TAG('t','e','l','2'), ContextualShape_Telugu, ShapeCharGlyphProp_Telugu}, - {{ devanagari_features, 6}, required_telugu_features, MS_MAKE_TAG('k','n','d','2'), ContextualShape_Kannada, ShapeCharGlyphProp_Kannada}, - {{ devanagari_features, 6}, required_telugu_features, MS_MAKE_TAG('k','n','d','2'), ContextualShape_Kannada, ShapeCharGlyphProp_Kannada}, - {{ devanagari_features, 6}, required_telugu_features, MS_MAKE_TAG('m','l','m','2'), ContextualShape_Malayalam, ShapeCharGlyphProp_Malayalam}, - {{ devanagari_features, 6}, required_telugu_features, MS_MAKE_TAG('m','l','m','2'), ContextualShape_Malayalam, ShapeCharGlyphProp_Malayalam}, - {{ standard_features, 2}, NULL, 0, NULL, NULL}, - {{ latin_features, 2}, NULL, 0, NULL, NULL}, - {{ standard_features, 2}, NULL, 0, NULL, NULL}, - {{ myanmar_features, 2}, NULL, 0, NULL, NULL}, - {{ myanmar_features, 2}, NULL, 0, NULL, NULL}, - {{ standard_features, 2}, NULL, 0, NULL, NULL}, - {{ standard_features, 2}, NULL, 0, NULL, NULL}, - {{ standard_features, 2}, NULL, 0, NULL, NULL}, - {{ khmer_features, 5}, required_khmer_features, 0, ContextualShape_Khmer, ShapeCharGlyphProp_Khmer}, - {{ khmer_features, 5}, required_khmer_features, 0, ContextualShape_Khmer, ShapeCharGlyphProp_Khmer}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ ethiopic_features, 4}, NULL, 0, NULL, NULL}, - {{ ethiopic_features, 4}, NULL, 0, NULL, NULL}, - {{ mongolian_features, 4}, NULL, 0, ContextualShape_Mongolian, NULL}, - {{ mongolian_features, 4}, NULL, 0, ContextualShape_Mongolian, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ NULL, 0}, NULL, 0, NULL, NULL}, - {{ hebrew_features, 1}, NULL, 0, NULL, NULL}, - {{ latin_features, 2}, NULL, 0, NULL, NULL}, - {{ thai_features, 1}, NULL, 0, NULL, ShapeCharGlyphProp_Thai}, + {{ standard_features, 2}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ latin_features, 4}, {latin_gpos_features, 3}, NULL, 0, NULL, ShapeCharGlyphProp_Latin}, + {{ latin_features, 4}, {latin_gpos_features, 3}, NULL, 0, NULL, ShapeCharGlyphProp_Latin}, + {{ latin_features, 4}, {latin_gpos_features, 3}, NULL, 0, NULL, ShapeCharGlyphProp_Latin}, + {{ standard_features, 2}, {NULL, 0}, NULL, 0, ContextualShape_Control, ShapeCharGlyphProp_Control}, + {{ latin_features, 4}, {latin_gpos_features, 3}, NULL, 0, NULL, ShapeCharGlyphProp_Latin}, + {{ arabic_features, 6}, {arabic_gpos_features, 4}, required_arabic_features, 0, ContextualShape_Arabic, ShapeCharGlyphProp_Arabic}, + {{ arabic_features, 6}, {arabic_gpos_features, 4}, required_arabic_features, 0, ContextualShape_Arabic, ShapeCharGlyphProp_Arabic}, + {{ hebrew_features, 2}, {hebrew_gpos_features, 2}, NULL, 0, ContextualShape_Hebrew, ShapeCharGlyphProp_Hebrew}, + {{ syriac_features, 4}, {syriac_gpos_features, 3}, required_syriac_features, 0, ContextualShape_Syriac, ShapeCharGlyphProp_None}, + {{ arabic_features, 6}, {arabic_gpos_features, 4}, required_arabic_features, 0, ContextualShape_Arabic, ShapeCharGlyphProp_Arabic}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, ContextualShape_Thaana, ShapeCharGlyphProp_None}, + {{ standard_features, 2}, {latin_gpos_features, 3}, NULL, 0, NULL, NULL}, + {{ standard_features, 2}, {latin_gpos_features, 3}, NULL, 0, NULL, NULL}, + {{ standard_features, 2}, {latin_gpos_features, 3}, NULL, 0, NULL, NULL}, + {{ standard_features, 2}, {latin_gpos_features, 3}, NULL, 0, NULL, NULL}, + {{ sinhala_features, 3}, {NULL, 0}, NULL, 0, ContextualShape_Sinhala, ShapeCharGlyphProp_Sinhala}, + {{ tibetan_features, 2}, {tibetan_gpos_features, 2}, NULL, 0, NULL, ShapeCharGlyphProp_Tibet}, + {{ tibetan_features, 2}, {tibetan_gpos_features, 2}, NULL, 0, NULL, ShapeCharGlyphProp_Tibet}, + {{ phags_features, 3}, {NULL, 0}, NULL, 0, ContextualShape_Phags_pa, ShapeCharGlyphProp_Thai}, + {{ thai_features, 1}, {thai_gpos_features, 3}, NULL, 0, ContextualShape_Thai, ShapeCharGlyphProp_Thai}, + {{ thai_features, 1}, {thai_gpos_features, 3}, NULL, 0, ContextualShape_Thai, NULL}, + {{ thai_features, 1}, {thai_gpos_features, 3}, required_lao_features, 0, ContextualShape_Lao, ShapeCharGlyphProp_Thai}, + {{ thai_features, 1}, {thai_gpos_features, 3}, required_lao_features, 0, ContextualShape_Lao, ShapeCharGlyphProp_Thai}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_devanagari_features, MS_MAKE_TAG('d','e','v','2'), ContextualShape_Devanagari, ShapeCharGlyphProp_Devanagari}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_devanagari_features, MS_MAKE_TAG('d','e','v','2'), ContextualShape_Devanagari, NULL}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_bengali_features, MS_MAKE_TAG('b','n','g','2'), ContextualShape_Bengali, ShapeCharGlyphProp_Bengali}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_bengali_features, MS_MAKE_TAG('b','n','g','2'), ContextualShape_Bengali, NULL}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_bengali_features, MS_MAKE_TAG('b','n','g','2'), ContextualShape_Bengali, ShapeCharGlyphProp_Bengali}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_gurmukhi_features, MS_MAKE_TAG('g','u','r','2'), ContextualShape_Gurmukhi, ShapeCharGlyphProp_Gurmukhi}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_gurmukhi_features, MS_MAKE_TAG('g','u','r','2'), ContextualShape_Gurmukhi, NULL}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_devanagari_features, MS_MAKE_TAG('g','j','r','2'), ContextualShape_Gujarati, ShapeCharGlyphProp_Gujarati}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_devanagari_features, MS_MAKE_TAG('g','j','r','2'), ContextualShape_Gujarati, NULL}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_devanagari_features, MS_MAKE_TAG('g','j','r','2'), ContextualShape_Gujarati, ShapeCharGlyphProp_Gujarati}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_oriya_features, MS_MAKE_TAG('o','r','y','2'), ContextualShape_Oriya, ShapeCharGlyphProp_Oriya}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_oriya_features, MS_MAKE_TAG('o','r','y','2'), ContextualShape_Oriya, NULL}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_tamil_features, MS_MAKE_TAG('t','a','m','2'), ContextualShape_Tamil, ShapeCharGlyphProp_Tamil}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_tamil_features, MS_MAKE_TAG('t','a','m','2'), ContextualShape_Tamil, NULL}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_telugu_features, MS_MAKE_TAG('t','e','l','2'), ContextualShape_Telugu, ShapeCharGlyphProp_Telugu}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_telugu_features, MS_MAKE_TAG('t','e','l','2'), ContextualShape_Telugu, NULL}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_telugu_features, MS_MAKE_TAG('k','n','d','2'), ContextualShape_Kannada, ShapeCharGlyphProp_Kannada}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_telugu_features, MS_MAKE_TAG('k','n','d','2'), ContextualShape_Kannada, NULL}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_telugu_features, MS_MAKE_TAG('m','l','m','2'), ContextualShape_Malayalam, ShapeCharGlyphProp_Malayalam}, + {{ devanagari_features, 6}, {devanagari_gpos_features, 4}, required_telugu_features, MS_MAKE_TAG('m','l','m','2'), ContextualShape_Malayalam, NULL}, + {{ standard_features, 2}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ latin_features, 4}, {latin_gpos_features, 3}, NULL, 0, NULL, ShapeCharGlyphProp_Latin}, + {{ standard_features, 2}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ myanmar_features, 2}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ myanmar_features, 2}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ standard_features, 2}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ standard_features, 2}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ standard_features, 2}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ khmer_features, 5}, {khmer_gpos_features, 4}, required_khmer_features, 0, ContextualShape_Khmer, ShapeCharGlyphProp_Khmer}, + {{ khmer_features, 5}, {khmer_gpos_features, 4}, required_khmer_features, 0, ContextualShape_Khmer, ShapeCharGlyphProp_Khmer}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ ethiopic_features, 4}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ ethiopic_features, 4}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ mongolian_features, 4}, {NULL, 0}, NULL, 0, ContextualShape_Mongolian, NULL}, + {{ mongolian_features, 4}, {NULL, 0}, NULL, 0, ContextualShape_Mongolian, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ NULL, 0}, {NULL, 0}, NULL, 0, NULL, NULL}, + {{ hebrew_features, 2}, {hebrew_gpos_features, 2}, NULL, 0, ContextualShape_Hebrew, NULL}, + {{ latin_features, 4}, {latin_gpos_features, 3}, NULL, 0, NULL, ShapeCharGlyphProp_Latin}, + {{ thai_features, 1}, {thai_gpos_features, 3}, NULL, 0, ContextualShape_Thai, ShapeCharGlyphProp_Thai}, }; extern scriptData scriptInformation[]; @@ -537,16 +608,16 @@ static OPENTYPE_TAG get_opentype_script(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCac } } -static LoadedFeature* load_GSUB_feature(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache *psc, const char* feat) +static LoadedFeature* load_OT_feature(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache *psc, char tableType, const char* feat) { LoadedFeature *feature = NULL; - if (psc->GSUB_Table) + if (psc->GSUB_Table || psc->GPOS_Table) { int attempt = 2; OPENTYPE_TAG tags; OPENTYPE_TAG language; - OPENTYPE_TAG script; + OPENTYPE_TAG script = 0x00000000; int cTags; do @@ -558,13 +629,13 @@ static LoadedFeature* load_GSUB_feature(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCac language = MS_MAKE_TAG('d','f','l','t'); attempt--; - OpenType_GSUB_GetFontFeatureTags(psc, script, language, FALSE, MS_MAKE_TAG(feat[0],feat[1],feat[2],feat[3]), 1, &tags, &cTags, &feature); + OpenType_GetFontFeatureTags(psc, script, language, FALSE, MS_MAKE_TAG(feat[0],feat[1],feat[2],feat[3]), tableType, 1, &tags, &cTags, &feature); } while(attempt && !feature); /* try in the default (latin) table */ - if (!feature) - OpenType_GSUB_GetFontFeatureTags(psc, MS_MAKE_TAG('l','a','t','n'), MS_MAKE_TAG('d','f','l','t'), FALSE, MS_MAKE_TAG(feat[0],feat[1],feat[2],feat[3]), 1, &tags, &cTags, &feature); + if (!feature && !script) + OpenType_GetFontFeatureTags(psc, MS_MAKE_TAG('l','a','t','n'), MS_MAKE_TAG('d','f','l','t'), FALSE, MS_MAKE_TAG(feat[0],feat[1],feat[2],feat[3]), tableType, 1, &tags, &cTags, &feature); } TRACE("Feature %s located at %p\n",debugstr_an(feat,4),feature); @@ -575,7 +646,7 @@ static INT apply_GSUB_feature_to_glyph(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCach { LoadedFeature *feature; - feature = load_GSUB_feature(hdc, psa, psc, feat); + feature = load_OT_feature(hdc, psa, psc, FEATURE_GSUB_TABLE, feat); if (!feature) return GSUB_E_NOFEATURE; @@ -596,6 +667,42 @@ static VOID *load_gsub_table(HDC hdc) return GSUB_Table; } +static VOID *load_gpos_table(HDC hdc) +{ + VOID* GPOS_Table = NULL; + int length = GetFontData(hdc, MS_MAKE_TAG('G', 'P', 'O', 'S'), 0, NULL, 0); + if (length != GDI_ERROR) + { + GPOS_Table = HeapAlloc(GetProcessHeap(),0,length); + GetFontData(hdc, MS_MAKE_TAG('G', 'P', 'O', 'S'), 0, GPOS_Table, length); + TRACE("Loaded GPOS table of %i bytes\n",length); + } + return GPOS_Table; +} + +static VOID *load_gdef_table(HDC hdc) +{ + VOID* GDEF_Table = NULL; + int length = GetFontData(hdc, MS_MAKE_TAG('G', 'D', 'E', 'F'), 0, NULL, 0); + if (length != GDI_ERROR) + { + GDEF_Table = HeapAlloc(GetProcessHeap(),0,length); + GetFontData(hdc, MS_MAKE_TAG('G', 'D', 'E', 'F'), 0, GDEF_Table, length); + TRACE("Loaded GDEF table of %i bytes\n",length); + } + return GDEF_Table; +} + +static VOID load_ot_tables(HDC hdc, ScriptCache *psc) +{ + if (!psc->GSUB_Table) + psc->GSUB_Table = load_gsub_table(hdc); + if (!psc->GPOS_Table) + psc->GPOS_Table = load_gpos_table(hdc); + if (!psc->GDEF_Table) + psc->GDEF_Table = load_gdef_table(hdc); +} + INT SHAPE_does_GSUB_feature_apply_to_chars(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache* psc, const WCHAR *chars, INT write_dir, INT count, const char* feature) { WORD *glyphs; @@ -628,9 +735,9 @@ static void UpdateClustersFromGlyphProp(const int cGlyphs, const int cChars, WOR if (pwLogClust[j] == i) { int k = j; - while (!pGlyphProp[pwLogClust[k]].sva.fClusterStart && k >= 0 && k = 0 && k = 0 && k lookup_count); + for (i = 0; i < feature->lookup_count; i++) + { + int j; + for (j = 0; j < glyph_count; ) + j = OpenType_apply_GPOS_lookup(psc, lpotm, lplogfont, analysis, piAdvance, feature->lookups[i], glyphs, j, glyph_count, pGoffset); + } +} + static inline BOOL get_GSUB_Indic2(SCRIPT_ANALYSIS *psa, ScriptCache *psc) { OPENTYPE_TAG tag; HRESULT hr; int count = 0; - hr = OpenType_GSUB_GetFontScriptTags(psc, ShapingData[psa->eScript].newOtTag, 1, &tag, &count, NULL); + hr = OpenType_GetFontScriptTags(psc, ShapingData[psa->eScript].newOtTag, 1, &tag, &count); return(SUCCEEDED(hr)); } +static void insert_glyph(WORD *pwGlyphs, INT *pcGlyphs, INT cChars, INT write_dir, WORD glyph, INT index, WORD *pwLogClust) +{ + int i; + for (i = *pcGlyphs; i>=index; i--) + pwGlyphs[i+1] = pwGlyphs[i]; + pwGlyphs[index] = glyph; + *pcGlyphs = *pcGlyphs+1; + if (write_dir < 0) + UpdateClusters(index-3, 1, write_dir, cChars, pwLogClust); + else + UpdateClusters(index, 1, write_dir, cChars, pwLogClust); +} + +static void mark_invalid_combinations(HDC hdc, const WCHAR* pwcChars, INT cChars, WORD *pwGlyphs, INT *pcGlyphs, INT write_dir, WORD *pwLogClust, combining_lexical_function lex) +{ + CHAR *context_type; + int i,g; + WCHAR invalid = 0x25cc; + WORD invalid_glyph; + + context_type = HeapAlloc(GetProcessHeap(),0,cChars); + + /* Mark invalid combinations */ + for (i = 0; i < cChars; i++) + context_type[i] = lex(pwcChars[i]); + + GetGlyphIndicesW(hdc, &invalid, 1, &invalid_glyph, 0); + for (i = 1, g=1; i < cChars; i++, g++) + { + if (context_type[i] != 0 && context_type[i+write_dir]==context_type[i]) + { + insert_glyph(pwGlyphs, pcGlyphs, cChars, write_dir, invalid_glyph, g, pwLogClust); + g++; + } + } + + HeapFree(GetProcessHeap(),0,context_type); +} + +static void ContextualShape_Control(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust) +{ + int i; + for (i=0; i < cChars; i++) + { + switch (pwcChars[i]) + { + case 0x000D: pwOutGlyphs[i] = psc->sfp.wgBlank; break; + default: + if (pwcChars[i] < 0x1C) + pwOutGlyphs[i] = psc->sfp.wgDefault; + else + pwOutGlyphs[i] = psc->sfp.wgBlank; + } + } +} + static WCHAR neighbour_char(int i, int delta, const WCHAR* chars, INT cchLen) { if (i + delta < 0) @@ -839,6 +1015,51 @@ static inline BOOL word_break_causing(WCHAR chr) return (chr == 0 || chr == 0x20 ); } +static int combining_lexical_Arabic(WCHAR c) +{ + enum {Arab_Norm = 0, Arab_DIAC1, Arab_DIAC2, Arab_DIAC3, Arab_DIAC4, Arab_DIAC5, Arab_DIAC6, Arab_DIAC7, Arab_DIAC8}; + + switch(c) + { + case 0x064B: + case 0x064C: + case 0x064E: + case 0x064F: + case 0x0652: + case 0x0657: + case 0x0658: + case 0x06E1: return Arab_DIAC1; + case 0x064D: + case 0x0650: + case 0x0656: return Arab_DIAC2; + case 0x0651: return Arab_DIAC3; + case 0x0610: + case 0x0611: + case 0x0612: + case 0x0613: + case 0x0614: + case 0x0659: + case 0x06D6: + case 0x06DC: + case 0x06DF: + case 0x06E0: + case 0x06E2: + case 0x06E4: + case 0x06E7: + case 0x06E8: + case 0x06EB: + case 0x06EC: return Arab_DIAC4; + case 0x06E3: + case 0x06EA: + case 0x06ED: return Arab_DIAC5; + case 0x0670: return Arab_DIAC6; + case 0x0653: return Arab_DIAC7; + case 0x0655: + case 0x0654: return Arab_DIAC8; + default: return Arab_Norm; + } +} + /* * ContextualShape_Arabic */ @@ -866,8 +1087,7 @@ static void ContextualShape_Arabic(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *p dirL = 1; } - if (!psc->GSUB_Table) - psc->GSUB_Table = load_gsub_table(hdc); + load_ot_tables(hdc, psc); context_type = HeapAlloc(GetProcessHeap(),0,cChars); context_shape = HeapAlloc(GetProcessHeap(),0,sizeof(INT) * cChars); @@ -929,12 +1149,137 @@ static void ContextualShape_Arabic(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *p HeapFree(GetProcessHeap(),0,context_shape); HeapFree(GetProcessHeap(),0,context_type); + + mark_invalid_combinations(hdc, pwcChars, cChars, pwOutGlyphs, pcGlyphs, dirL, pwLogClust, combining_lexical_Arabic); +} + +static int combining_lexical_Hebrew(WCHAR c) +{ + enum {Hebr_Norm=0, Hebr_DIAC, Hebr_CANT1, Hebr_CANT2, Hebr_CANT3, Hebr_CANT4, Hebr_CANT5, Hebr_CANT6, Hebr_CANT7, Hebr_CANT8, Hebr_CANT9, Hebr_CANT10, Hebr_DAGESH, Hebr_DOTABV, Hebr_HOLAM, Hebr_METEG, Hebr_PATAH, Hebr_QAMATS, Hebr_RAFE, Hebr_SHINSIN}; + + switch(c) + { + case 0x05B0: + case 0x05B1: + case 0x05B2: + case 0x05B3: + case 0x05B4: + case 0x05B5: + case 0x05B6: + case 0x05BB: return Hebr_DIAC; + case 0x0599: + case 0x05A1: + case 0x05A9: + case 0x05AE: return Hebr_CANT1; + case 0x0597: + case 0x05A8: + case 0x05AC: return Hebr_CANT2; + case 0x0592: + case 0x0593: + case 0x0594: + case 0x0595: + case 0x05A7: + case 0x05AB: return Hebr_CANT3; + case 0x0598: + case 0x059C: + case 0x059E: + case 0x059F: return Hebr_CANT4; + case 0x059D: + case 0x05A0: return Hebr_CANT5; + case 0x059B: + case 0x05A5: return Hebr_CANT6; + case 0x0591: + case 0x05A3: + case 0x05A6: return Hebr_CANT7; + case 0x0596: + case 0x05A4: + case 0x05AA: return Hebr_CANT8; + case 0x059A: + case 0x05AD: return Hebr_CANT9; + case 0x05AF: return Hebr_CANT10; + case 0x05BC: return Hebr_DAGESH; + case 0x05C4: return Hebr_DOTABV; + case 0x05B9: return Hebr_HOLAM; + case 0x05BD: return Hebr_METEG; + case 0x05B7: return Hebr_PATAH; + case 0x05B8: return Hebr_QAMATS; + case 0x05BF: return Hebr_RAFE; + case 0x05C1: + case 0x05C2: return Hebr_SHINSIN; + default: return Hebr_Norm; + } +} + +static void ContextualShape_Hebrew(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust) +{ + INT dirL; + + if (*pcGlyphs != cChars) + { + ERR("Number of Glyphs and Chars need to match at the beginning\n"); + return; + } + + if (!psa->fLogicalOrder && psa->fRTL) + dirL = -1; + else + dirL = 1; + + mark_invalid_combinations(hdc, pwcChars, cChars, pwOutGlyphs, pcGlyphs, dirL, pwLogClust, combining_lexical_Hebrew); } /* * ContextualShape_Syriac */ +static int combining_lexical_Syriac(WCHAR c) +{ + enum {Syriac_Norm=0, Syriac_DIAC1, Syriac_DIAC2, Syriac_DIAC3, Syriac_DIAC4, Syriac_DIAC5, Syriac_DIAC6, Syriac_DIAC7, Syriac_DIAC8, Syriac_DIAC9, Syriac_DIAC10, Syriac_DIAC11, Syriac_DIAC12, Syriac_DIAC13, Syriac_DIAC14, Syriac_DIAC15, Syriac_DIAC16, Syriac_DIAC17}; + + switch(c) + { + case 0x730: + case 0x733: + case 0x736: + case 0x73A: + case 0x73D: return Syriac_DIAC1; + case 0x731: + case 0x734: + case 0x737: + case 0x73B: + case 0x73E: return Syriac_DIAC2; + case 0x740: + case 0x749: + case 0x74A: return Syriac_DIAC3; + case 0x732: + case 0x735: + case 0x73F: return Syriac_DIAC4; + case 0x738: + case 0x739: + case 0x73C: return Syriac_DIAC5; + case 0x741: + case 0x30A: return Syriac_DIAC6; + case 0x742: + case 0x325: return Syriac_DIAC7; + case 0x747: + case 0x303: return Syriac_DIAC8; + case 0x748: + case 0x32D: + case 0x32E: + case 0x330: + case 0x331: return Syriac_DIAC9; + case 0x308: return Syriac_DIAC10; + case 0x304: return Syriac_DIAC11; + case 0x307: return Syriac_DIAC12; + case 0x323: return Syriac_DIAC13; + case 0x743: return Syriac_DIAC14; + case 0x744: return Syriac_DIAC15; + case 0x745: return Syriac_DIAC16; + case 0x746: return Syriac_DIAC17; + default: return Syriac_Norm; + } +} + #define ALAPH 0x710 #define DALATH 0x715 #define RISH 0x72A @@ -963,8 +1308,7 @@ static void ContextualShape_Syriac(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *p dirL = 1; } - if (!psc->GSUB_Table) - psc->GSUB_Table = load_gsub_table(hdc); + load_ot_tables(hdc, psc); if (!psc->GSUB_Table) return; @@ -1025,6 +1369,46 @@ right_join_causing(neighbour_joining_type(i,dirR,context_type,cChars,psa))) HeapFree(GetProcessHeap(),0,context_shape); HeapFree(GetProcessHeap(),0,context_type); + + mark_invalid_combinations(hdc, pwcChars, cChars, pwOutGlyphs, pcGlyphs, dirL, pwLogClust, combining_lexical_Syriac); +} + +static int combining_lexical_Thaana(WCHAR c) +{ + enum {Thaana_Norm=0, Thaana_FILI}; + + switch(c) + { + case 0x7A6: + case 0x7A7: + case 0x7A8: + case 0x7A9: + case 0x7AA: + case 0x7AB: + case 0x7AC: + case 0x7AD: + case 0x7AE: + case 0x7AF: return Thaana_FILI; + default: return Thaana_Norm; + } +} + +static void ContextualShape_Thaana(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust) +{ + INT dirL; + + if (*pcGlyphs != cChars) + { + ERR("Number of Glyphs and Chars need to match at the beginning\n"); + return; + } + + if (!psa->fLogicalOrder && psa->fRTL) + dirL = -1; + else + dirL = 1; + + mark_invalid_combinations(hdc, pwcChars, cChars, pwOutGlyphs, pcGlyphs, dirL, pwLogClust, combining_lexical_Thaana); } /* @@ -1058,8 +1442,7 @@ static void ContextualShape_Phags_pa(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS dirL = 1; } - if (!psc->GSUB_Table) - psc->GSUB_Table = load_gsub_table(hdc); + load_ot_tables(hdc, psc); if (!psc->GSUB_Table) return; @@ -1112,6 +1495,95 @@ static void ContextualShape_Phags_pa(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS HeapFree(GetProcessHeap(),0,context_shape); } +static int combining_lexical_Thai(WCHAR c) +{ + enum {Thai_Norm=0, Thai_ABOVE1, Thai_ABOVE2, Thai_ABOVE3, Thai_ABOVE4, Thai_BELOW1, Thai_BELOW2, Thai_AM}; + + switch(c) + { + case 0xE31: + case 0xE34: + case 0xE35: + case 0xE36: + case 0xE37: return Thai_ABOVE1; + case 0xE47: + case 0xE4D: return Thai_ABOVE2; + case 0xE48: + case 0xE49: + case 0xE4A: + case 0xE4B: return Thai_ABOVE3; + case 0xE4C: + case 0xE4E: return Thai_ABOVE4; + case 0xE38: + case 0xE39: return Thai_BELOW1; + case 0xE3A: return Thai_BELOW2; + case 0xE33: return Thai_AM; + default: return Thai_Norm; + } +} + +static void ContextualShape_Thai(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust) +{ + INT dirL; + + if (*pcGlyphs != cChars) + { + ERR("Number of Glyphs and Chars need to match at the beginning\n"); + return; + } + + if (!psa->fLogicalOrder && psa->fRTL) + dirL = -1; + else + dirL = 1; + + mark_invalid_combinations(hdc, pwcChars, cChars, pwOutGlyphs, pcGlyphs, dirL, pwLogClust, combining_lexical_Thai); +} + +static int combining_lexical_Lao(WCHAR c) +{ + enum {Lao_Norm=0, Lao_ABOVE1, Lao_ABOVE2, Lao_BELOW1, Lao_BELOW2, Lao_AM}; + + switch(c) + { + case 0xEB1: + case 0xEB4: + case 0xEB5: + case 0xEB6: + case 0xEB7: + case 0xEBB: + case 0xECD: return Lao_ABOVE1; + case 0xEC8: + case 0xEC9: + case 0xECA: + case 0xECB: + case 0xECC: return Lao_ABOVE2; + case 0xEBC: return Lao_BELOW1; + case 0xEB8: + case 0xEB9: return Lao_BELOW2; + case 0xEB3: return Lao_AM; + default: return Lao_Norm; + } +} + +static void ContextualShape_Lao(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust) +{ + INT dirL; + + if (*pcGlyphs != cChars) + { + ERR("Number of Glyphs and Chars need to match at the beginning\n"); + return; + } + + if (!psa->fLogicalOrder && psa->fRTL) + dirL = -1; + else + dirL = 1; + + mark_invalid_combinations(hdc, pwcChars, cChars, pwOutGlyphs, pcGlyphs, dirL, pwLogClust, combining_lexical_Lao); +} + static void ReplaceInsertChars(HDC hdc, INT cWalk, INT* pcChars, WCHAR *pwOutChars, const WCHAR *replacements) { int i; @@ -1586,17 +2058,17 @@ static void ShapeIndicSyllables(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, { int c; int overall_shift = 0; - LoadedFeature *locl = (modern)?load_GSUB_feature(hdc, psa, psc, "locl"):NULL; - LoadedFeature *nukt = load_GSUB_feature(hdc, psa, psc, "nukt"); - LoadedFeature *akhn = load_GSUB_feature(hdc, psa, psc, "akhn"); - LoadedFeature *rkrf = (modern)?load_GSUB_feature(hdc, psa, psc, "rkrf"):NULL; - LoadedFeature *pstf = load_GSUB_feature(hdc, psa, psc, "pstf"); - LoadedFeature *vatu = (!rkrf)?load_GSUB_feature(hdc, psa, psc, "vatu"):NULL; - LoadedFeature *cjct = (modern)?load_GSUB_feature(hdc, psa, psc, "cjct"):NULL; - BOOL rphf = (load_GSUB_feature(hdc, psa, psc, "rphf") != NULL); - BOOL pref = (load_GSUB_feature(hdc, psa, psc, "pref") != NULL); - BOOL blwf = (load_GSUB_feature(hdc, psa, psc, "blwf") != NULL); - BOOL half = (load_GSUB_feature(hdc, psa, psc, "half") != NULL); + LoadedFeature *locl = (modern)?load_OT_feature(hdc, psa, psc, FEATURE_GSUB_TABLE, "locl"):NULL; + LoadedFeature *nukt = load_OT_feature(hdc, psa, psc, FEATURE_GSUB_TABLE, "nukt"); + LoadedFeature *akhn = load_OT_feature(hdc, psa, psc, FEATURE_GSUB_TABLE, "akhn"); + LoadedFeature *rkrf = (modern)?load_OT_feature(hdc, psa, psc, FEATURE_GSUB_TABLE, "rkrf"):NULL; + LoadedFeature *pstf = load_OT_feature(hdc, psa, psc, FEATURE_GSUB_TABLE, "pstf"); + LoadedFeature *vatu = (!rkrf)?load_OT_feature(hdc, psa, psc, FEATURE_GSUB_TABLE, "vatu"):NULL; + LoadedFeature *cjct = (modern)?load_OT_feature(hdc, psa, psc, FEATURE_GSUB_TABLE, "cjct"):NULL; + BOOL rphf = (load_OT_feature(hdc, psa, psc, FEATURE_GSUB_TABLE, "rphf") != NULL); + BOOL pref = (load_OT_feature(hdc, psa, psc, FEATURE_GSUB_TABLE, "pref") != NULL); + BOOL blwf = (load_OT_feature(hdc, psa, psc, FEATURE_GSUB_TABLE, "blwf") != NULL); + BOOL half = (load_OT_feature(hdc, psa, psc, FEATURE_GSUB_TABLE, "half") != NULL); IndicSyllable glyph_indexs; for (c = 0; c < syllable_count; c++) @@ -1876,7 +2348,7 @@ static void ContextualShape_Bengali(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS * input = HeapAlloc(GetProcessHeap(), 0, (cChars * 2) * sizeof(WCHAR)); memcpy(input, pwcChars, cChars * sizeof(WCHAR)); - /* Step 1: Decompose Vowels and Compose Consonents */ + /* Step 1: Decompose Vowels and Compose Consonants */ DecomposeVowels(hdc, input, &cCount, Bengali_vowels, pwLogClust, cChars); ComposeConsonants(hdc, input, &cCount, Bengali_consonants, pwLogClust); TRACE("New composed string %s (%i)\n",debugstr_wn(input,cCount),cCount); @@ -1940,7 +2412,7 @@ static void ContextualShape_Gurmukhi(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS input = HeapAlloc(GetProcessHeap(), 0, cChars * sizeof(WCHAR)); memcpy(input, pwcChars, cChars * sizeof(WCHAR)); - /* Step 1: Compose Consonents */ + /* Step 1: Compose Consonants */ ComposeConsonants(hdc, input, &cCount, Gurmukhi_consonants, pwLogClust); TRACE("New composed string %s (%i)\n",debugstr_wn(input,cCount),cCount); @@ -2035,7 +2507,7 @@ static void ContextualShape_Oriya(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *ps input = HeapAlloc(GetProcessHeap(), 0, (cChars*2) * sizeof(WCHAR)); memcpy(input, pwcChars, cChars * sizeof(WCHAR)); - /* Step 1: Decompose Vowels and Compose Consonents */ + /* Step 1: Decompose Vowels and Compose Consonants */ DecomposeVowels(hdc, input, &cCount, Oriya_vowels, pwLogClust, cChars); ComposeConsonants(hdc, input, &cCount, Oriya_consonants, pwLogClust); TRACE("New composed string %s (%i)\n",debugstr_wn(input,cCount),cCount); @@ -2085,7 +2557,7 @@ static void ContextualShape_Tamil(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *ps input = HeapAlloc(GetProcessHeap(), 0, (cChars*2) * sizeof(WCHAR)); memcpy(input, pwcChars, cChars * sizeof(WCHAR)); - /* Step 1: Decompose Vowels and Compose Consonents */ + /* Step 1: Decompose Vowels and Compose Consonants */ DecomposeVowels(hdc, input, &cCount, Tamil_vowels, pwLogClust, cChars); ComposeConsonants(hdc, input, &cCount, Tamil_consonants, pwLogClust); TRACE("New composed string %s (%i)\n",debugstr_wn(input,cCount),cCount); @@ -2305,9 +2777,6 @@ static void ContextualShape_Mongolian(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS else dirL = 1; - if (!psc->GSUB_Table) - psc->GSUB_Table = load_gsub_table(hdc); - if (!psc->GSUB_Table) return; @@ -2350,7 +2819,7 @@ static void ContextualShape_Mongolian(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS HeapFree(GetProcessHeap(),0,context_shape); } -static void ShapeCharGlyphProp_Default( HDC hdc, ScriptCache* psc, SCRIPT_ANALYSIS* psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD* pwLogClust, SCRIPT_CHARPROP* pCharProp, SCRIPT_GLYPHPROP* pGlyphProp) +static void ShapeCharGlyphProp_Default( ScriptCache* psc, SCRIPT_ANALYSIS* psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD* pwLogClust, SCRIPT_CHARPROP* pCharProp, SCRIPT_GLYPHPROP* pGlyphProp) { int i,k; @@ -2378,10 +2847,37 @@ static void ShapeCharGlyphProp_Default( HDC hdc, ScriptCache* psc, SCRIPT_ANALYS pGlyphProp[i].sva.uJustification = SCRIPT_JUSTIFY_CHARACTER; } - OpenType_GDEF_UpdateGlyphProps(hdc, psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp); + OpenType_GDEF_UpdateGlyphProps(psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp); UpdateClustersFromGlyphProp(cGlyphs, cChars, pwLogClust, pGlyphProp); } +static void ShapeCharGlyphProp_Latin( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP *pCharProp, SCRIPT_GLYPHPROP *pGlyphProp ) +{ + int i; + + ShapeCharGlyphProp_Default( psc, psa, pwcChars, cChars, pwGlyphs, cGlyphs, pwLogClust, pCharProp, pGlyphProp); + + for (i = 0; i < cGlyphs; i++) + if (pGlyphProp[i].sva.fZeroWidth) + pGlyphProp[i].sva.uJustification = SCRIPT_JUSTIFY_NONE; +} + +static void ShapeCharGlyphProp_Control( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP *pCharProp, SCRIPT_GLYPHPROP *pGlyphProp ) +{ + int i; + for (i = 0; i < cGlyphs; i++) + { + pGlyphProp[i].sva.fClusterStart = 1; + pGlyphProp[i].sva.fDiacritic = 0; + pGlyphProp[i].sva.uJustification = SCRIPT_JUSTIFY_BLANK; + + if (pwGlyphs[i] == psc->sfp.wgDefault) + pGlyphProp[i].sva.fZeroWidth = 0; + else + pGlyphProp[i].sva.fZeroWidth = 1; + } +} + static void ShapeCharGlyphProp_Arabic( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP *pCharProp, SCRIPT_GLYPHPROP *pGlyphProp ) { int i,k; @@ -2487,43 +2983,14 @@ static void ShapeCharGlyphProp_Arabic( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSI pGlyphProp[i].sva.uJustification = SCRIPT_JUSTIFY_NONE; } - OpenType_GDEF_UpdateGlyphProps(hdc, psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp); + OpenType_GDEF_UpdateGlyphProps(psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp); UpdateClustersFromGlyphProp(cGlyphs, cChars, pwLogClust, pGlyphProp); HeapFree(GetProcessHeap(),0,spaces); } -static void ShapeCharGlyphProp_Thai( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP *pCharProp, SCRIPT_GLYPHPROP *pGlyphProp ) +static void ShapeCharGlyphProp_Hebrew( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP *pCharProp, SCRIPT_GLYPHPROP *pGlyphProp ) { int i,k; - int finaGlyph; - INT dirL; - BYTE *spaces; - - spaces = HeapAlloc(GetProcessHeap(),0,cGlyphs); - memset(spaces,0,cGlyphs); - - if (!psa->fLogicalOrder && psa->fRTL) - { - finaGlyph = 0; - dirL = -1; - } - else - { - finaGlyph = cGlyphs-1; - dirL = 1; - } - - for (i = 0; i < cGlyphs; i++) - { - for (k = 0; k < cChars; k++) - if (pwLogClust[k] == i) - { - if (pwcChars[k] == 0x0020) - spaces[i] = 1; - } - } - - OpenType_GDEF_UpdateGlyphProps(hdc, psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp); for (i = 0; i < cGlyphs; i++) { @@ -2538,24 +3005,67 @@ static void ShapeCharGlyphProp_Thai( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS } if (char_count == 0) - continue; - - if (char_count ==1 && pwcChars[char_index[0]] == 0x0020) /* space */ + pGlyphProp[i].sva.uJustification = SCRIPT_JUSTIFY_NONE; + else { pGlyphProp[i].sva.uJustification = SCRIPT_JUSTIFY_CHARACTER; - pCharProp[char_index[0]].fCanGlyphAlone = 1; + if (char_count ==1 && pwcChars[char_index[0]] == 0x0020) /* space */ + pCharProp[char_index[0]].fCanGlyphAlone = 1; } - else if (i == finaGlyph) + } + + OpenType_GDEF_UpdateGlyphProps(psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp); + UpdateClustersFromGlyphProp(cGlyphs, cChars, pwLogClust, pGlyphProp); +} + +static void ShapeCharGlyphProp_Thai( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP *pCharProp, SCRIPT_GLYPHPROP *pGlyphProp ) +{ + int i; + int finaGlyph; + INT dirL; + + if (!psa->fLogicalOrder && psa->fRTL) + { + finaGlyph = 0; + dirL = -1; + } + else + { + finaGlyph = cGlyphs-1; + dirL = 1; + } + + OpenType_GDEF_UpdateGlyphProps(psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp); + + for (i = 0; i < cGlyphs; i++) + { + int k; + int char_index[20]; + int char_count = 0; + + k = USP10_FindGlyphInLogClust(pwLogClust, cChars, i); + if (k>=0) + { + for (; k < cChars && pwLogClust[k] == i; k++) + char_index[char_count++] = k; + } + + if (i == finaGlyph) pGlyphProp[i].sva.uJustification = SCRIPT_JUSTIFY_NONE; else pGlyphProp[i].sva.uJustification = SCRIPT_JUSTIFY_CHARACTER; + if (char_count == 0) + continue; + + if (char_count ==1 && pwcChars[char_index[0]] == 0x0020) /* space */ + pCharProp[char_index[0]].fCanGlyphAlone = 1; + /* handle Thai SARA AM (U+0E33) differently than GDEF */ if (char_count == 1 && pwcChars[char_index[0]] == 0x0e33) pGlyphProp[i].sva.fClusterStart = 0; } - HeapFree(GetProcessHeap(),0,spaces); UpdateClustersFromGlyphProp(cGlyphs, cChars, pwLogClust, pGlyphProp); /* Do not allow justification between marks and their base */ @@ -2593,7 +3103,7 @@ static void ShapeCharGlyphProp_None( HDC hdc, ScriptCache* psc, SCRIPT_ANALYSIS* else pGlyphProp[i].sva.uJustification = SCRIPT_JUSTIFY_NONE; } - OpenType_GDEF_UpdateGlyphProps(hdc, psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp); + OpenType_GDEF_UpdateGlyphProps(psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp); UpdateClustersFromGlyphProp(cGlyphs, cChars, pwLogClust, pGlyphProp); } @@ -2624,7 +3134,7 @@ static void ShapeCharGlyphProp_Tibet( HDC hdc, ScriptCache* psc, SCRIPT_ANALYSIS else pGlyphProp[i].sva.uJustification = SCRIPT_JUSTIFY_NONE; } - OpenType_GDEF_UpdateGlyphProps(hdc, psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp); + OpenType_GDEF_UpdateGlyphProps(psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp); UpdateClustersFromGlyphProp(cGlyphs, cChars, pwLogClust, pGlyphProp); /* Tibeten script does not set sva.fDiacritic or sva.fZeroWidth */ @@ -2642,7 +3152,7 @@ static void ShapeCharGlyphProp_BaseIndic( HDC hdc, ScriptCache *psc, SCRIPT_ANAL { int i,k; - OpenType_GDEF_UpdateGlyphProps(hdc, psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp); + OpenType_GDEF_UpdateGlyphProps(psc, pwGlyphs, cGlyphs, pwLogClust, cChars, pGlyphProp); for (i = 0; i < cGlyphs; i++) { int char_index[20]; @@ -2663,7 +3173,10 @@ static void ShapeCharGlyphProp_BaseIndic( HDC hdc, ScriptCache *psc, SCRIPT_ANAL } if (char_count == 0) + { + pGlyphProp[i].sva.uJustification = SCRIPT_JUSTIFY_NONE; continue; + } if (char_count ==1 && pwcChars[char_index[0]] == 0x0020) /* space */ { @@ -2783,16 +3296,17 @@ static void ShapeCharGlyphProp_Khmer( HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS void SHAPE_CharGlyphProp(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP *pCharProp, SCRIPT_GLYPHPROP *pGlyphProp) { + load_ot_tables(hdc, psc); + if (ShapingData[psa->eScript].charGlyphPropProc) ShapingData[psa->eScript].charGlyphPropProc(hdc, psc, psa, pwcChars, cChars, pwGlyphs, cGlyphs, pwLogClust, pCharProp, pGlyphProp); else - ShapeCharGlyphProp_Default(hdc, psc, psa, pwcChars, cChars, pwGlyphs, cGlyphs, pwLogClust, pCharProp, pGlyphProp); + ShapeCharGlyphProp_Default(psc, psa, pwcChars, cChars, pwGlyphs, cGlyphs, pwLogClust, pCharProp, pGlyphProp); } void SHAPE_ContextualShaping(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust) { - if (!psc->GSUB_Table) - psc->GSUB_Table = load_gsub_table(hdc); + load_ot_tables(hdc, psc); if (ShapingData[psa->eScript].contextProc) ShapingData[psa->eScript].contextProc(hdc, psc, psa, pwcChars, cChars, pwOutGlyphs, pcGlyphs, cMaxGlyphs, pwLogClust); @@ -2806,8 +3320,7 @@ static void SHAPE_ApplyOpenTypeFeatures(HDC hdc, ScriptCache *psc, SCRIPT_ANALYS if (!rpRangeProperties) return; - if (!psc->GSUB_Table) - psc->GSUB_Table = load_gsub_table(hdc); + load_ot_tables(hdc, psc); if (!psc->GSUB_Table) return; @@ -2832,6 +3345,36 @@ rpRangeProperties = &ShapingData[psa->eScript].defaultTextRange; SHAPE_ApplyOpenTypeFeatures(hdc, psc, psa, pwOutGlyphs, pcGlyphs, cMaxGlyphs, cChars, rpRangeProperties, pwLogClust); } +void SHAPE_ApplyOpenTypePositions(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WORD* pwGlyphs, INT cGlyphs, int *piAdvance, GOFFSET *pGoffset ) +{ + const TEXTRANGE_PROPERTIES *rpRangeProperties; + int i; + + rpRangeProperties = &ShapingData[psa->eScript].defaultGPOSTextRange; + + if (!rpRangeProperties) + return; + + load_ot_tables(hdc, psc); + + if (!psc->GPOS_Table || !psc->otm) + return; + + for (i = 0; i < rpRangeProperties->cotfRecords; i++) + { + if (rpRangeProperties->potfRecords[i].lParameter > 0) + { + LoadedFeature *feature; + + feature = load_OT_feature(hdc, psa, psc, FEATURE_GPOS_TABLE, (const char*)&rpRangeProperties->potfRecords[i].tagFeature); + if (!feature) + continue; + + GPOS_apply_feature(psc, psc->otm, &psc->lf, psa, piAdvance, feature, pwGlyphs, cGlyphs, pGoffset); + } + } +} + HRESULT SHAPE_CheckFontForRequiredFeatures(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa) { LoadedFeature *feature; @@ -2840,14 +3383,13 @@ HRESULT SHAPE_CheckFontForRequiredFeatures(HDC hdc, ScriptCache *psc, SCRIPT_ANA if (!ShapingData[psa->eScript].requiredFeatures) return S_OK; - if (!psc->GSUB_Table) - psc->GSUB_Table = load_gsub_table(hdc); + load_ot_tables(hdc, psc); /* we need to have at least one of the required features */ i = 0; while (ShapingData[psa->eScript].requiredFeatures[i]) { - feature = load_GSUB_feature(hdc, psa, psc, ShapingData[psa->eScript].requiredFeatures[i]); + feature = load_OT_feature(hdc, psa, psc, FEATURE_ALL_TABLES, ShapingData[psa->eScript].requiredFeatures[i]); if (feature) return S_OK; i++; @@ -2863,13 +3405,12 @@ HRESULT SHAPE_GetFontScriptTags( HDC hdc, ScriptCache *psc, HRESULT hr; OPENTYPE_TAG searching = 0x00000000; - if (!psc->GSUB_Table) - psc->GSUB_Table = load_gsub_table(hdc); + load_ot_tables(hdc, psc); if (psa && scriptInformation[psa->eScript].scriptTag) searching = scriptInformation[psa->eScript].scriptTag; - hr = OpenType_GSUB_GetFontScriptTags(psc, searching, cMaxTags, pScriptTags, pcTags, NULL); + hr = OpenType_GetFontScriptTags(psc, searching, cMaxTags, pScriptTags, pcTags); if (FAILED(hr)) *pcTags = 0; return hr; @@ -2884,17 +3425,16 @@ HRESULT SHAPE_GetFontLanguageTags( HDC hdc, ScriptCache *psc, OPENTYPE_TAG searching = 0x00000000; BOOL fellback = FALSE; - if (!psc->GSUB_Table) - psc->GSUB_Table = load_gsub_table(hdc); + load_ot_tables(hdc, psc); if (psa && psc->userLang != 0) searching = psc->userLang; - hr = OpenType_GSUB_GetFontLanguageTags(psc, tagScript, searching, cMaxTags, pLangSysTags, pcTags, NULL); + hr = OpenType_GetFontLanguageTags(psc, tagScript, searching, cMaxTags, pLangSysTags, pcTags); if (FAILED(hr)) { fellback = TRUE; - hr = OpenType_GSUB_GetFontLanguageTags(psc, MS_MAKE_TAG('l','a','t','n'), searching, cMaxTags, pLangSysTags, pcTags, NULL); + hr = OpenType_GetFontLanguageTags(psc, MS_MAKE_TAG('l','a','t','n'), searching, cMaxTags, pLangSysTags, pcTags); } if (FAILED(hr) || fellback) @@ -2912,8 +3452,7 @@ HRESULT SHAPE_GetFontFeatureTags( HDC hdc, ScriptCache *psc, HRESULT hr; BOOL filter = FALSE; - if (!psc->GSUB_Table) - psc->GSUB_Table = load_gsub_table(hdc); + load_ot_tables(hdc, psc); if (psa && scriptInformation[psa->eScript].scriptTag) { @@ -2921,7 +3460,7 @@ HRESULT SHAPE_GetFontFeatureTags( HDC hdc, ScriptCache *psc, filter = TRUE; } - hr = OpenType_GSUB_GetFontFeatureTags(psc, tagScript, tagLangSys, filter, 0x00000000, cMaxTags, pFeatureTags, pcTags, NULL); + hr = OpenType_GetFontFeatureTags(psc, tagScript, tagLangSys, filter, 0x00000000, FEATURE_ALL_TABLES, cMaxTags, pFeatureTags, pcTags, NULL); if (FAILED(hr)) *pcTags = 0; diff --git a/dll/win32/usp10/usp10.c b/dll/win32/usp10/usp10.c index c2a76669fbd..3310b942e0c 100644 --- a/dll/win32/usp10/usp10.c +++ b/dll/win32/usp10/usp10.c @@ -513,7 +513,7 @@ const scriptData scriptInformation[] = { {0x53, 0, 1, 1, 1, DEFAULT_CHARSET, 0, 0, 0, 0, 1, 0, 0, 0, 0}, MS_MAKE_TAG('k','h','m','r'), {'D','a','u','n','P','e','n','h'}}, - {{Script_Khmer, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}}, + {{Script_Khmer_Numeric, 0, 0, 0, 0, 0, 0, { 0,0,0,0,0,0,0,0,0,0,0}}, {0x53, 1, 1, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 0, 0, 0, 0, 0, 0}, MS_MAKE_TAG('k','h','m','r'), {'D','a','u','n','P','e','n','h'}}, @@ -729,9 +729,61 @@ static inline BOOL heap_free(LPVOID mem) return HeapFree(GetProcessHeap(), 0, mem); } -static inline WCHAR get_cache_default_char(SCRIPT_CACHE *psc) +/* TODO Fix font properties on Arabic locale */ +static inline BOOL set_cache_font_properties(const HDC hdc, ScriptCache *sc) { - return ((ScriptCache *)*psc)->tm.tmDefaultChar; + if (!sc->sfnt) + { + sc->sfp.wgBlank = sc->tm.tmBreakChar; + sc->sfp.wgDefault = sc->tm.tmDefaultChar; + sc->sfp.wgInvalid = sc->sfp.wgBlank; + sc->sfp.wgKashida = 0xFFFF; + sc->sfp.iKashidaWidth = 0; + } + else + { + static const WCHAR chars[4] = {0x0020, 0x200B, 0xF71B, 0x0640}; + /* U+0020: numeric space + U+200B: zero width space + U+F71B: unknow char found by black box testing + U+0640: kashida */ + WORD gi[4]; + + if (GetGlyphIndicesW(hdc, chars, 4, gi, GGI_MARK_NONEXISTING_GLYPHS) != GDI_ERROR) + { + if(gi[0] != 0xFFFF) /* 0xFFFF: index of default non exist char */ + sc->sfp.wgBlank = gi[0]; + else + sc->sfp.wgBlank = 0; + + sc->sfp.wgDefault = 0; + + if (gi[2] != 0xFFFF) + sc->sfp.wgInvalid = gi[2]; + else if (gi[1] != 0xFFFF) + sc->sfp.wgInvalid = gi[1]; + else if (gi[0] != 0xFFFF) + sc->sfp.wgInvalid = gi[0]; + else + sc->sfp.wgInvalid = 0; + + sc->sfp.wgKashida = gi[3]; + + sc->sfp.iKashidaWidth = 0; /* TODO */ + } + else + return FALSE; + } + return TRUE; +} + +static inline void get_cache_font_properties(SCRIPT_FONTPROPERTIES *sfp, ScriptCache *sc) +{ + sfp->wgBlank = sc->sfp.wgBlank; + sfp->wgDefault = sc->sfp.wgDefault; + sfp->wgInvalid = sc->sfp.wgInvalid; + sfp->wgKashida = sc->sfp.wgKashida; + sfp->iKashidaWidth = sc->sfp.iKashidaWidth; } static inline LONG get_cache_height(SCRIPT_CACHE *psc) @@ -746,18 +798,24 @@ static inline BYTE get_cache_pitch_family(SCRIPT_CACHE *psc) static inline WORD get_cache_glyph(SCRIPT_CACHE *psc, DWORD c) { - WORD *block = ((ScriptCache *)*psc)->glyphs[c >> GLYPH_BLOCK_SHIFT]; + CacheGlyphPage *page = ((ScriptCache *)*psc)->page[c / 0x10000]; + WORD *block; + if (!page) return 0; + block = page->glyphs[(c % 0x10000) >> GLYPH_BLOCK_SHIFT]; if (!block) return 0; - return block[c & GLYPH_BLOCK_MASK]; + return block[(c % 0x10000) & GLYPH_BLOCK_MASK]; } static inline WORD set_cache_glyph(SCRIPT_CACHE *psc, WCHAR c, WORD glyph) { - WORD **block = &((ScriptCache *)*psc)->glyphs[c >> GLYPH_BLOCK_SHIFT]; + CacheGlyphPage **page = &((ScriptCache *)*psc)->page[c / 0x10000]; + WORD **block; + if (!*page && !(*page = heap_alloc_zero(sizeof(CacheGlyphPage)))) return 0; + block = &(*page)->glyphs[(c % 0x10000) >> GLYPH_BLOCK_SHIFT]; if (!*block && !(*block = heap_alloc_zero(sizeof(WORD) * GLYPH_BLOCK_SIZE))) return 0; - return ((*block)[c & GLYPH_BLOCK_MASK] = glyph); + return ((*block)[(c % 0x10000) & GLYPH_BLOCK_MASK] = glyph); } static inline BOOL get_cache_glyph_widths(SCRIPT_CACHE *psc, WORD glyph, ABC *abc) @@ -782,6 +840,7 @@ static inline BOOL set_cache_glyph_widths(SCRIPT_CACHE *psc, WORD glyph, ABC *ab static HRESULT init_script_cache(const HDC hdc, SCRIPT_CACHE *psc) { ScriptCache *sc; + int size; if (!psc) return E_INVALIDARG; if (*psc) return S_OK; @@ -793,12 +852,24 @@ static HRESULT init_script_cache(const HDC hdc, SCRIPT_CACHE *psc) heap_free(sc); return E_INVALIDARG; } + size = GetOutlineTextMetricsW(hdc, 0, NULL); + if (size) + { + sc->otm = heap_alloc(size); + sc->otm->otmSize = size; + GetOutlineTextMetricsW(hdc, size, sc->otm); + } if (!GetObjectW(GetCurrentObject(hdc, OBJ_FONT), sizeof(LOGFONTW), &sc->lf)) { heap_free(sc); return E_INVALIDARG; } sc->sfnt = (GetFontData(hdc, MS_MAKE_TAG('h','e','a','d'), 0, NULL, 0)!=GDI_ERROR); + if (!set_cache_font_properties(hdc, sc)) + { + heap_free(sc); + return E_INVALIDARG; + } *psc = sc; TRACE("<- %p\n", sc); return S_OK; @@ -927,23 +998,6 @@ int USP10_FindGlyphInLogClust(const WORD* pwLogClust, int cChars, WORD target) return k; } -/*********************************************************************** - * DllMain - * - */ -BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv) -{ - switch(fdwReason) - { - case DLL_PROCESS_ATTACH: - DisableThreadLibraryCalls(hInstDLL); - break; - case DLL_PROCESS_DETACH: - break; - } - return TRUE; -} - /*********************************************************************** * ScriptFreeCache (USP10.@) * @@ -965,12 +1019,20 @@ HRESULT WINAPI ScriptFreeCache(SCRIPT_CACHE *psc) unsigned int i; for (i = 0; i < GLYPH_MAX / GLYPH_BLOCK_SIZE; i++) { - heap_free(((ScriptCache *)*psc)->glyphs[i]); heap_free(((ScriptCache *)*psc)->widths[i]); } + for (i = 0; i < 0x10; i++) + { + int j; + if (((ScriptCache *)*psc)->page[i]) + for (j = 0; j < GLYPH_MAX / GLYPH_BLOCK_SIZE; j++) + heap_free(((ScriptCache *)*psc)->page[i]->glyphs[j]); + heap_free(((ScriptCache *)*psc)->page[i]); + } heap_free(((ScriptCache *)*psc)->GSUB_Table); heap_free(((ScriptCache *)*psc)->GDEF_Table); heap_free(((ScriptCache *)*psc)->CMAP_Table); + heap_free(((ScriptCache *)*psc)->GPOS_Table); for (i = 0; i < ((ScriptCache *)*psc)->script_count; i++) { int j; @@ -981,9 +1043,13 @@ HRESULT WINAPI ScriptFreeCache(SCRIPT_CACHE *psc) heap_free(((ScriptCache *)*psc)->scripts[i].languages[j].features[k].lookups); heap_free(((ScriptCache *)*psc)->scripts[i].languages[j].features); } + for (j = 0; j < ((ScriptCache *)*psc)->scripts[i].default_language.feature_count; j++) + heap_free(((ScriptCache *)*psc)->scripts[i].default_language.features[j].lookups); + heap_free(((ScriptCache *)*psc)->scripts[i].default_language.features); heap_free(((ScriptCache *)*psc)->scripts[i].languages); } heap_free(((ScriptCache *)*psc)->scripts); + heap_free(((ScriptCache *)*psc)->otm); heap_free(*psc); *psc = NULL; } @@ -1040,12 +1106,7 @@ HRESULT WINAPI ScriptGetFontProperties(HDC hdc, SCRIPT_CACHE *psc, SCRIPT_FONTPR if (sfp->cBytes != sizeof(SCRIPT_FONTPROPERTIES)) return E_INVALIDARG; - /* return something sensible? */ - sfp->wgBlank = 0; - sfp->wgDefault = get_cache_default_char(psc); - sfp->wgInvalid = 0; - sfp->wgKashida = 0xffff; - sfp->iKashidaWidth = 0; + get_cache_font_properties(sfp, *psc); return S_OK; } @@ -1195,28 +1256,11 @@ static inline WORD base_indic(WORD script) }; } -/*********************************************************************** - * ScriptItemizeOpenType (USP10.@) - * - * Split a Unicode string into shapeable parts. - * - * PARAMS - * pwcInChars [I] String to split. - * cInChars [I] Number of characters in pwcInChars. - * cMaxItems [I] Maximum number of items to return. - * psControl [I] Pointer to a SCRIPT_CONTROL structure. - * psState [I] Pointer to a SCRIPT_STATE structure. - * pItems [O] Buffer to receive SCRIPT_ITEM structures. - * pScriptTags [O] Buffer to receive OPENTYPE_TAGs. - * pcItems [O] Number of script items returned. - * - * RETURNS - * Success: S_OK - * Failure: Non-zero HRESULT value. - */ -HRESULT WINAPI ScriptItemizeOpenType(const WCHAR *pwcInChars, int cInChars, int cMaxItems, - const SCRIPT_CONTROL *psControl, const SCRIPT_STATE *psState, - SCRIPT_ITEM *pItems, OPENTYPE_TAG *pScriptTags, int *pcItems) + +static HRESULT _ItemizeInternal(const WCHAR *pwcInChars, int cInChars, + int cMaxItems, const SCRIPT_CONTROL *psControl, + const SCRIPT_STATE *psState, SCRIPT_ITEM *pItems, + OPENTYPE_TAG *pScriptTags, int *pcItems) { #define Numeric_space 0x0020 @@ -1271,8 +1315,36 @@ HRESULT WINAPI ScriptItemizeOpenType(const WCHAR *pwcInChars, int cInChars, int forceLevels = TRUE; /* Diacritical marks merge with other scripts */ - if (scripts[i] == Script_Diacritical && i > 0) - scripts[i] = scripts[i-1]; + if (scripts[i] == Script_Diacritical) + { + if (i > 0) + { + if (pScriptTags) + scripts[i] = scripts[i-1]; + else + { + int j; + BOOL asian = FALSE; + WORD first_script = scripts[i-1]; + for (j = i-1; j >= 0 && scripts[j] == first_script && pwcInChars[j] != Numeric_space; j--) + { + WORD original = scripts[j]; + if (original == Script_Ideograph || original == Script_Kana || original == Script_Yi || original == Script_CJK_Han || original == Script_Bopomofo) + { + asian = TRUE; + break; + } + if (original != Script_MathAlpha && scriptInformation[scripts[j]].props.fComplex) + break; + scripts[j] = scripts[i]; + if (original == Script_Punctuation2) + break; + } + if (scriptInformation[scripts[j]].props.fComplex || asian) + scripts[i] = scripts[j]; + } + } + } } for (i = 0; i < cInChars; i++) @@ -1421,7 +1493,8 @@ HRESULT WINAPI ScriptItemizeOpenType(const WCHAR *pwcInChars, int cInChars, int pItems[index].iCharPos = 0; pItems[index].a = scriptInformation[scripts[cnt]].a; - pScriptTags[index] = scriptInformation[scripts[cnt]].scriptTag; + if (pScriptTags) + pScriptTags[index] = scriptInformation[scripts[cnt]].scriptTag; if (strength && strength[cnt] == BIDI_STRONG) str = strength[cnt]; @@ -1515,7 +1588,8 @@ HRESULT WINAPI ScriptItemizeOpenType(const WCHAR *pwcInChars, int cInChars, int memset(&pItems[index].a, 0, sizeof(SCRIPT_ANALYSIS)); pItems[index].a = scriptInformation[New_Script].a; - pScriptTags[index] = scriptInformation[New_Script].scriptTag; + if (pScriptTags) + pScriptTags[index] = scriptInformation[New_Script].scriptTag; if (levels) { if (levels[cnt] == 0) @@ -1557,6 +1631,32 @@ HRESULT WINAPI ScriptItemizeOpenType(const WCHAR *pwcInChars, int cInChars, int return S_OK; } +/*********************************************************************** + * ScriptItemizeOpenType (USP10.@) + * + * Split a Unicode string into shapeable parts. + * + * PARAMS + * pwcInChars [I] String to split. + * cInChars [I] Number of characters in pwcInChars. + * cMaxItems [I] Maximum number of items to return. + * psControl [I] Pointer to a SCRIPT_CONTROL structure. + * psState [I] Pointer to a SCRIPT_STATE structure. + * pItems [O] Buffer to receive SCRIPT_ITEM structures. + * pScriptTags [O] Buffer to receive OPENTYPE_TAGs. + * pcItems [O] Number of script items returned. + * + * RETURNS + * Success: S_OK + * Failure: Non-zero HRESULT value. + */ +HRESULT WINAPI ScriptItemizeOpenType(const WCHAR *pwcInChars, int cInChars, int cMaxItems, + const SCRIPT_CONTROL *psControl, const SCRIPT_STATE *psState, + SCRIPT_ITEM *pItems, OPENTYPE_TAG *pScriptTags, int *pcItems) +{ + return _ItemizeInternal(pwcInChars, cInChars, cMaxItems, psControl, psState, pItems, pScriptTags, pcItems); +} + /*********************************************************************** * ScriptItemize (USP10.@) * @@ -1579,15 +1679,7 @@ HRESULT WINAPI ScriptItemize(const WCHAR *pwcInChars, int cInChars, int cMaxItem const SCRIPT_CONTROL *psControl, const SCRIPT_STATE *psState, SCRIPT_ITEM *pItems, int *pcItems) { - OPENTYPE_TAG *discarded_tags; - HRESULT res; - - discarded_tags = heap_alloc(cMaxItems * sizeof(OPENTYPE_TAG)); - if (!discarded_tags) - return E_OUTOFMEMORY; - res = ScriptItemizeOpenType(pwcInChars, cInChars, cMaxItems, psControl, psState, pItems, discarded_tags, pcItems); - heap_free(discarded_tags); - return res; + return _ItemizeInternal(pwcInChars, cInChars, cMaxItems, psControl, psState, pItems, NULL, pcItems); } static inline int getGivenTabWidth(ScriptCache *psc, SCRIPT_TABDEF *pTabdef, int charPos, int current_x) @@ -1772,7 +1864,7 @@ HRESULT WINAPI ScriptStringAnalyse(HDC hdc, const void *pString, int cString, hr = ScriptItemize(pString, cString, num_items, &sControl, &sState, analysis->pItem, &analysis->numItems); - if FAILED(hr) + if (FAILED(hr)) { if (hr == E_OUTOFMEMORY) hr = E_INVALIDARG; @@ -1860,7 +1952,7 @@ HRESULT WINAPI ScriptStringAnalyse(HDC hdc, const void *pString, int cString, if ((dwFlags & SSA_LINK) && !analysis->glyphs[i].fallbackFont && analysis->pItem[i].a.eScript == Script_Hangul) analysis->pItem[i].a.fNoGlyphIndex = TRUE; - if ((dwFlags & SSA_LINK) && !analysis->glyphs[i].fallbackFont && !scriptInformation[analysis->pItem[i].a.eScript].props.fComplex) + if ((dwFlags & SSA_LINK) && !analysis->glyphs[i].fallbackFont && !scriptInformation[analysis->pItem[i].a.eScript].props.fComplex && !analysis->pItem[i].a.fRTL) analysis->pItem[i].a.fNoGlyphIndex = TRUE; hr = ScriptShape(hdc, sc, &pStr[analysis->pItem[i].iCharPos], @@ -2084,7 +2176,7 @@ static HRESULT SS_ItemOut( SCRIPT_STRING_ANALYSIS ssa, * ssa [I] buffer to hold the analysed string components * iX [I] X axis displacement for output * iY [I] Y axis displacement for output - * uOptions [I] flags controling output processing + * uOptions [I] flags controlling output processing * prc [I] rectangle coordinates * iMinSel [I] starting pos for substringing output string * iMaxSel [I] ending pos for substringing output string @@ -3030,6 +3122,8 @@ HRESULT WINAPI ScriptPlaceOpenType( HDC hdc, SCRIPT_CACHE *psc, SCRIPT_ANALYSIS if (piAdvance) piAdvance[i] = abc.abcA + abc.abcB + abc.abcC; } + SHAPE_ApplyOpenTypePositions(hdc, (ScriptCache *)*psc, psa, pwGlyphs, cGlyphs, piAdvance, pGoffset); + if (pABC) TRACE("Total for run: abcA=%d, abcB=%d, abcC=%d\n", pABC->abcA, pABC->abcB, pABC->abcC); return S_OK; } @@ -3160,6 +3254,9 @@ HRESULT WINAPI ScriptTextOut(const HDC hdc, SCRIPT_CACHE *psc, int x, int y, UIN const int *piJustify, const GOFFSET *pGoffset) { HRESULT hr = S_OK; + INT i, dir = 1; + INT *lpDx; + WORD *reordered_glyphs = (WORD *)pwGlyphs; TRACE("(%p, %p, %d, %d, %04x, %p, %p, %p, %d, %p, %d, %p, %p, %p)\n", hdc, psc, x, y, fuOptions, lprc, psa, pwcReserved, iReserved, pwGlyphs, cGlyphs, @@ -3173,25 +3270,52 @@ HRESULT WINAPI ScriptTextOut(const HDC hdc, SCRIPT_CACHE *psc, int x, int y, UIN if (!psa->fNoGlyphIndex) /* Have Glyphs? */ fuOptions |= ETO_GLYPH_INDEX; /* Say don't do translation to glyph */ + lpDx = heap_alloc(cGlyphs * sizeof(INT) * 2); + if (!lpDx) return E_OUTOFMEMORY; + fuOptions |= ETO_PDY; + if (psa->fRTL && psa->fLogicalOrder) { - int i; - WORD *rtlGlyphs; - - rtlGlyphs = heap_alloc(cGlyphs * sizeof(WORD)); - if (!rtlGlyphs) + reordered_glyphs = heap_alloc( cGlyphs * sizeof(WORD) ); + if (!reordered_glyphs) + { + heap_free( lpDx ); return E_OUTOFMEMORY; + } for (i = 0; i < cGlyphs; i++) - rtlGlyphs[i] = pwGlyphs[cGlyphs-1-i]; - - if (!ExtTextOutW(hdc, x, y, fuOptions, lprc, rtlGlyphs, cGlyphs, NULL)) - hr = S_FALSE; - heap_free(rtlGlyphs); + reordered_glyphs[i] = pwGlyphs[cGlyphs - 1 - i]; + dir = -1; } - else - if (!ExtTextOutW(hdc, x, y, fuOptions, lprc, pwGlyphs, cGlyphs, NULL)) - hr = S_FALSE; + + for (i = 0; i < cGlyphs; i++) + { + int orig_index = (dir > 0) ? i : cGlyphs - 1 - i; + lpDx[i * 2] = piAdvance[orig_index]; + lpDx[i * 2 + 1] = 0; + + if (pGoffset) + { + if (i == 0) + { + x += pGoffset[orig_index].du * dir; + y += pGoffset[orig_index].dv; + } + else + { + lpDx[(i - 1) * 2] += pGoffset[orig_index].du * dir; + lpDx[(i - 1) * 2 + 1] += pGoffset[orig_index].dv; + } + lpDx[i * 2] -= pGoffset[orig_index].du * dir; + lpDx[i * 2 + 1] -= pGoffset[orig_index].dv; + } + } + + if (!ExtTextOutW(hdc, x, y, fuOptions, lprc, reordered_glyphs, cGlyphs, lpDx)) + hr = S_FALSE; + + if (reordered_glyphs != pwGlyphs) heap_free( reordered_glyphs ); + heap_free(lpDx); return hr; } diff --git a/dll/win32/usp10/usp10_internal.h b/dll/win32/usp10/usp10_internal.h index 558eb554200..77bb20d2012 100644 --- a/dll/win32/usp10/usp10_internal.h +++ b/dll/win32/usp10/usp10_internal.h @@ -128,8 +128,13 @@ #define GSUB_E_NOFEATURE -2 #define GSUB_E_NOGLYPH -1 +#define FEATURE_ALL_TABLES 0 +#define FEATURE_GSUB_TABLE 1 +#define FEATURE_GPOS_TABLE 2 + typedef struct { OPENTYPE_TAG tag; + CHAR tableType; LPCVOID feature; INT lookup_count; WORD *lookups; @@ -137,29 +142,41 @@ typedef struct { typedef struct { OPENTYPE_TAG tag; - LPCVOID table; + LPCVOID gsub_table; + LPCVOID gpos_table; + BOOL features_initialized; INT feature_count; LoadedFeature *features; } LoadedLanguage; typedef struct { OPENTYPE_TAG tag; - LPCVOID table; + LPCVOID gsub_table; + LPCVOID gpos_table; LoadedLanguage default_language; + BOOL languages_initialized; INT language_count; LoadedLanguage *languages; } LoadedScript; +typedef struct { + WORD *glyphs[GLYPH_MAX / GLYPH_BLOCK_SIZE]; +} CacheGlyphPage; + typedef struct { LOGFONTW lf; TEXTMETRICW tm; + OUTLINETEXTMETRICW *otm; + SCRIPT_FONTPROPERTIES sfp; BOOL sfnt; - WORD *glyphs[GLYPH_MAX / GLYPH_BLOCK_SIZE]; + CacheGlyphPage *page[0x10]; ABC *widths[GLYPH_MAX / GLYPH_BLOCK_SIZE]; LPVOID GSUB_Table; LPVOID GDEF_Table; LPVOID CMAP_Table; LPVOID CMAP_format12_Table; + LPVOID GPOS_Table; + BOOL scripts_initialized; INT script_count; LoadedScript *scripts; @@ -214,6 +231,7 @@ INT BIDI_ReorderV2lLevel(int level, int *pIndexs, const BYTE* plevel, int cch, B INT BIDI_ReorderL2vLevel(int level, int *pIndexs, const BYTE* plevel, int cch, BOOL fReverse) DECLSPEC_HIDDEN; void SHAPE_ContextualShaping(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WCHAR* pwcChars, INT cChars, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, WORD *pwLogClust) DECLSPEC_HIDDEN; void SHAPE_ApplyDefaultOpentypeFeatures(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, WORD* pwOutGlyphs, INT* pcGlyphs, INT cMaxGlyphs, INT cChars, WORD *pwLogClust) DECLSPEC_HIDDEN; +void SHAPE_ApplyOpenTypePositions(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WORD* pwGlyphs, INT cGlyphs, int *piAdvance, GOFFSET *pGoffset ) DECLSPEC_HIDDEN; HRESULT SHAPE_CheckFontForRequiredFeatures(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa) DECLSPEC_HIDDEN; void SHAPE_CharGlyphProp(HDC hdc, ScriptCache *psc, SCRIPT_ANALYSIS *psa, const WCHAR* pwcChars, const INT cChars, const WORD* pwGlyphs, const INT cGlyphs, WORD *pwLogClust, SCRIPT_CHARPROP *pCharProp, SCRIPT_GLYPHPROP *pGlyphProp) DECLSPEC_HIDDEN; INT SHAPE_does_GSUB_feature_apply_to_chars(HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache* psc, const WCHAR *chars, INT write_dir, INT count, const char* feature) DECLSPEC_HIDDEN; @@ -227,8 +245,9 @@ void Indic_ParseSyllables( HDC hdc, SCRIPT_ANALYSIS *psa, ScriptCache* psc, LPCW void BREAK_line(const WCHAR *chars, int count, const SCRIPT_ANALYSIS *sa, SCRIPT_LOGATTR *la) DECLSPEC_HIDDEN; DWORD OpenType_CMAP_GetGlyphIndex(HDC hdc, ScriptCache *psc, DWORD utf32c, LPWORD pgi, DWORD flags) DECLSPEC_HIDDEN; -void OpenType_GDEF_UpdateGlyphProps(HDC hdc, ScriptCache *psc, const WORD *pwGlyphs, const WORD cGlyphs, WORD* pwLogClust, const WORD cChars, SCRIPT_GLYPHPROP *pGlyphProp) DECLSPEC_HIDDEN; +void OpenType_GDEF_UpdateGlyphProps(ScriptCache *psc, const WORD *pwGlyphs, const WORD cGlyphs, WORD* pwLogClust, const WORD cChars, SCRIPT_GLYPHPROP *pGlyphProp) DECLSPEC_HIDDEN; INT OpenType_apply_GSUB_lookup(LPCVOID table, INT lookup_index, WORD *glyphs, INT glyph_index, INT write_dir, INT *glyph_count) DECLSPEC_HIDDEN; -HRESULT OpenType_GSUB_GetFontScriptTags(ScriptCache *psc, OPENTYPE_TAG searchingFor, int cMaxTags, OPENTYPE_TAG *pScriptTags, int *pcTags, LPCVOID* script_table) DECLSPEC_HIDDEN; -HRESULT OpenType_GSUB_GetFontLanguageTags(ScriptCache *psc, OPENTYPE_TAG script_tag, OPENTYPE_TAG searchingFor, int cMaxTags, OPENTYPE_TAG *pLanguageTags, int *pcTags, LPCVOID* language_table) DECLSPEC_HIDDEN; -HRESULT OpenType_GSUB_GetFontFeatureTags(ScriptCache *psc, OPENTYPE_TAG script_tag, OPENTYPE_TAG language_tag, BOOL filtered, OPENTYPE_TAG searchingFor, int cMaxTags, OPENTYPE_TAG *pFeatureTags, int *pcTags, LoadedFeature** feature) DECLSPEC_HIDDEN; +INT OpenType_apply_GPOS_lookup(ScriptCache *psc, LPOUTLINETEXTMETRICW lpotm, LPLOGFONTW lplogfont, const SCRIPT_ANALYSIS *analysis, INT* piAdvance, INT lookup_index, const WORD *glyphs, INT glyph_index, INT glyph_count, GOFFSET *pGoffset) DECLSPEC_HIDDEN; +HRESULT OpenType_GetFontScriptTags(ScriptCache *psc, OPENTYPE_TAG searchingFor, int cMaxTags, OPENTYPE_TAG *pScriptTags, int *pcTags) DECLSPEC_HIDDEN; +HRESULT OpenType_GetFontLanguageTags(ScriptCache *psc, OPENTYPE_TAG script_tag, OPENTYPE_TAG searchingFor, int cMaxTags, OPENTYPE_TAG *pLanguageTags, int *pcTags) DECLSPEC_HIDDEN; +HRESULT OpenType_GetFontFeatureTags(ScriptCache *psc, OPENTYPE_TAG script_tag, OPENTYPE_TAG language_tag, BOOL filtered, OPENTYPE_TAG searchingFor, char tableType, int cMaxTags, OPENTYPE_TAG *pFeatureTags, int *pcTags, LoadedFeature** feature) DECLSPEC_HIDDEN; diff --git a/dll/win32/usp10/usp10_ros.diff b/dll/win32/usp10/usp10_ros.diff index 9a35aad5061..61857f3f827 100644 --- a/dll/win32/usp10/usp10_ros.diff +++ b/dll/win32/usp10/usp10_ros.diff @@ -2,7 +2,7 @@ Index: usp10.c =================================================================== --- usp10.c (revision 54504) +++ usp10.c (working copy) -@@ -3621,3 +3621,9 @@ +@@ -3746,3 +3746,9 @@ return SHAPE_GetFontFeatureTags(hdc, (ScriptCache *)*psc, psa, tagScript, tagLangSys, cMaxTags, pFeatureTags, pcTags); } diff --git a/dll/win32/version/CMakeLists.txt b/dll/win32/version/CMakeLists.txt index 40523681b31..15c958dab3f 100644 --- a/dll/win32/version/CMakeLists.txt +++ b/dll/win32/version/CMakeLists.txt @@ -13,10 +13,10 @@ list(APPEND SOURCE add_library(version SHARED ${SOURCE}) -set_module_type(version win32dll ENTRYPOINT 0 ) +set_module_type(version win32dll) target_link_libraries(version wine) -add_importlibs(version kernel32 ntdll) +add_importlibs(version msvcrt kernel32 ntdll) add_dependencies(version psdk) add_cd_file(TARGET version DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/winemp3.acm/CMakeLists.txt b/dll/win32/winemp3.acm/CMakeLists.txt index cd00d82218d..cc01f2a63ca 100644 --- a/dll/win32/winemp3.acm/CMakeLists.txt +++ b/dll/win32/winemp3.acm/CMakeLists.txt @@ -13,7 +13,7 @@ add_library(winemp3.acm SHARED mpegl3.c ${CMAKE_CURRENT_BINARY_DIR}/winemp3.def) -set_module_type(winemp3.acm win32dll ENTRYPOINT 0 ) +set_module_type(winemp3.acm win32dll) set_target_properties(winemp3.acm PROPERTIES SUFFIX "") target_link_libraries(winemp3.acm wine libmpg123 oldnames) diff --git a/dll/win32/winfax/CMakeLists.txt b/dll/win32/winfax/CMakeLists.txt index 5c001863c26..6977a9d6abc 100644 --- a/dll/win32/winfax/CMakeLists.txt +++ b/dll/win32/winfax/CMakeLists.txt @@ -8,8 +8,8 @@ list(APPEND SOURCE add_library(winfax SHARED ${SOURCE}) -set_module_type(winfax win32dll ENTRYPOINT 0 ) +set_module_type(winfax win32dll) -add_importlibs(winfax kernel32 ntdll) +add_importlibs(winfax msvcrt kernel32 ntdll) add_dependencies(winfax psdk) add_cd_file(TARGET winfax DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/wing32/CMakeLists.txt b/dll/win32/wing32/CMakeLists.txt index 68caed0af55..b25a72d2f45 100644 --- a/dll/win32/wing32/CMakeLists.txt +++ b/dll/win32/wing32/CMakeLists.txt @@ -8,8 +8,8 @@ list(APPEND SOURCE add_library(wing32 SHARED ${SOURCE}) -set_module_type(wing32 win32dll UNICODE ENTRYPOINT 0) +set_module_type(wing32 win32dll UNICODE) -add_importlibs(wing32 user32 gdi32 msvcrt) +add_importlibs(wing32 user32 gdi32 msvcrt kernel32) add_dependencies(wing32 psdk) add_cd_file(TARGET wing32 DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/winmm/midimap/CMakeLists.txt b/dll/win32/winmm/midimap/CMakeLists.txt index 0e31cdd4887..18ddfbc24ee 100644 --- a/dll/win32/winmm/midimap/CMakeLists.txt +++ b/dll/win32/winmm/midimap/CMakeLists.txt @@ -1,6 +1,4 @@ -add_definitions(-DUNICODE -D_UNICODE) - spec2def(midimap.dll midimap.spec) add_library(midimap SHARED @@ -8,11 +6,11 @@ add_library(midimap SHARED midimap.rc ${CMAKE_CURRENT_BINARY_DIR}/midimap.def) -set_module_type(midimap win32dll ENTRYPOINT 0 ) +set_module_type(midimap win32dll UNICODE) target_link_libraries(midimap uuid wine) -add_importlibs(midimap advapi32 user32 winmm kernel32 ntdll) +add_importlibs(midimap advapi32 user32 winmm msvcrt kernel32 ntdll) add_dependencies(midimap psdk) add_cd_file(TARGET midimap DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/wlanapi/CMakeLists.txt b/dll/win32/wlanapi/CMakeLists.txt index d273c57635d..8c356b07b6e 100644 --- a/dll/win32/wlanapi/CMakeLists.txt +++ b/dll/win32/wlanapi/CMakeLists.txt @@ -13,7 +13,7 @@ list(APPEND SOURCE add_library(wlanapi SHARED ${SOURCE}) -set_module_type(wlanapi win32dll ENTRYPOINT 0 ) +set_module_type(wlanapi win32dll) target_link_libraries(wlanapi wine diff --git a/dll/win32/wldap32/wldap32.rc b/dll/win32/wldap32/wldap32.rc index b2dba37a185..b4512e783ac 100644 --- a/dll/win32/wldap32/wldap32.rc +++ b/dll/win32/wldap32/wldap32.rc @@ -57,6 +57,9 @@ #ifdef LANGUAGE_FR_FR #include "wldap32_Fr.rc" #endif +#ifdef LANGUAGE_HE_IL + #include "wldap32_He.rc" +#endif #ifdef LANGUAGE_HU_HU #include "wldap32_Hu.rc" #endif diff --git a/dll/win32/wldap32/wldap32_He.rc b/dll/win32/wldap32/wldap32_He.rc new file mode 100644 index 00000000000..500d2780f8e --- /dev/null +++ b/dll/win32/wldap32/wldap32_He.rc @@ -0,0 +1,127 @@ +/* + * Hebrew resources for WLDAP32 + * + * Copyright 2005 Hans Leidekker + * + * Translated by Baruch Rutman + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "windef.h" + +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + +STRINGTABLE +{ + 0 "הצלחה" + 1 "שגיאת פעילות" + 2 "שגיאת פרוטוקול" + 3 "חריגת הגבלת זמן" + 4 "חריגת הגבלת גודל" + 5 "Compare False" + 6 "Compare True" + 7 "Authentication Method Not Supported" + 8 "Strong Authentication Required" + 9 "Referral (v2)" + 10 "Referral" + 11 "Administration Limit Exceeded" + 12 "Unavailable Critical Extension" + 13 "Confidentiality Required" + 14 "" + 15 "" + 16 "No Such Attribute" + 17 "Undefined Type" + 18 "Inappropriate Matching" + 19 "Constraint Violation" + 20 "Attribute Or Value Exists" + 21 "Invalid Syntax" + 22 "" + 23 "" + 24 "" + 25 "" + 26 "" + 27 "" + 28 "" + 29 "" + 30 "" + 31 "" + 32 "No Such Object" + 33 "Alias Problem" + 34 "Invalid DN Syntax" + 35 "Is Leaf" + 36 "Alias Dereference Problem" + 37 "" + 38 "" + 39 "" + 40 "" + 41 "" + 42 "" + 43 "" + 44 "" + 45 "" + 46 "" + 47 "" + 48 "Inappropriate Authentication" + 49 "Invalid Credentials" + 50 "Insufficient Rights" + 51 "עסוק" + 52 "לא זמין" + 53 "Unwilling To Perform" + 54 "Loop Detected" + 55 "" + 56 "" + 57 "" + 58 "" + 59 "" + 60 "Sort Control Missing" + 61 "Index range error" + 62 "" + 63 "" + 64 "Naming Violation" + 65 "Object Class Violation" + 66 "Not allowed on Non-leaf" + 67 "Not allowed on RDN" + 68 "Already Exists" + 69 "No Object Class Mods" + 70 "Results Too Large" + 71 "Affects Multiple DSAs" + 72 "" + 73 "" + 74 "" + 75 "" + 76 "" + 77 "" + 78 "" + 79 "" + 80 "אחר" + 81 "שרת לא זמין" + 82 "שגיאה מקומית" + 83 "Encoding Error" + 84 "Decoding Error" + 85 "תם הזמן" + 86 "Auth Unknown" + 87 "Filter Error" + 88 "User Cancelled" + 89 "Parameter Error" + 90 "No Memory" + 91 "Can't connect to the LDAP server" + 92 "Operation not supported by this version of the LDAP protocol" + 93 "Specified control was not found in message" + 94 "No result present in message" + 95 "More results returned" + 96 "Loop while handling referrals" + 97 "Referral hop limit exceeded" +} diff --git a/dll/win32/wshtcpip/CMakeLists.txt b/dll/win32/wshtcpip/CMakeLists.txt index 1bcb4ad8da5..e0c94acc1bd 100644 --- a/dll/win32/wshtcpip/CMakeLists.txt +++ b/dll/win32/wshtcpip/CMakeLists.txt @@ -11,9 +11,9 @@ list(APPEND SOURCE add_library(wshtcpip SHARED ${SOURCE}) -set_module_type(wshtcpip win32dll UNICODE ENTRYPOINT 0) +set_module_type(wshtcpip win32dll UNICODE) target_link_libraries(wshtcpip tdilib) -add_importlibs(wshtcpip ws2_32 kernel32 ntdll) +add_importlibs(wshtcpip ws2_32 msvcrt kernel32 ntdll) add_dependencies(wshtcpip psdk) add_cd_file(TARGET wshtcpip DESTINATION reactos/system32 FOR all) diff --git a/drivers/bus/acpi/cmbatt/CMakeLists.txt b/drivers/bus/acpi/cmbatt/CMakeLists.txt index afef8697887..7e7ddc582df 100644 --- a/drivers/bus/acpi/cmbatt/CMakeLists.txt +++ b/drivers/bus/acpi/cmbatt/CMakeLists.txt @@ -14,4 +14,4 @@ add_importlibs(cmbatt ntoskrnl hal battc wmilib) add_pch(cmbatt cmbatt.h) -add_cd_file(TARGET cmbatt DESTINATION reactos/system32/drivers FOR all) \ No newline at end of file +add_cd_file(TARGET cmbatt DESTINATION reactos/system32/drivers FOR all) diff --git a/drivers/bus/acpi/compbatt/CMakeLists.txt b/drivers/bus/acpi/compbatt/CMakeLists.txt index a1a3b7bc7b1..b61bc216c40 100644 --- a/drivers/bus/acpi/compbatt/CMakeLists.txt +++ b/drivers/bus/acpi/compbatt/CMakeLists.txt @@ -12,4 +12,4 @@ add_importlibs(compbatt ntoskrnl hal battc) add_pch(compbatt compbatt.h) -add_cd_file(TARGET compbatt DESTINATION reactos/system32/drivers FOR all) \ No newline at end of file +add_cd_file(TARGET compbatt DESTINATION reactos/system32/drivers FOR all) diff --git a/drivers/filesystems/mup/CMakeLists.txt b/drivers/filesystems/mup/CMakeLists.txt index 19712432332..c341a3463d6 100644 --- a/drivers/filesystems/mup/CMakeLists.txt +++ b/drivers/filesystems/mup/CMakeLists.txt @@ -7,4 +7,4 @@ add_library(mup SHARED set_module_type(mup kernelmodedriver) add_importlibs(mup ntoskrnl hal) add_pch(mup mup.h) -add_cd_file(TARGET mup DESTINATION reactos/system32/drivers FOR all) \ No newline at end of file +add_cd_file(TARGET mup DESTINATION reactos/system32/drivers FOR all) diff --git a/drivers/hid/hidclass/CMakeLists.txt b/drivers/hid/hidclass/CMakeLists.txt index 39c961cdf60..08fdc7ae4c4 100644 --- a/drivers/hid/hidclass/CMakeLists.txt +++ b/drivers/hid/hidclass/CMakeLists.txt @@ -18,4 +18,4 @@ set_target_properties(hidclass PROPERTIES SUFFIX ".sys") add_importlibs(hidclass ntoskrnl hidparse hal) add_dependencies(hidclass bugcodes) -add_cd_file(TARGET hidclass DESTINATION reactos/system32/drivers NO_CAB FOR all) \ No newline at end of file +add_cd_file(TARGET hidclass DESTINATION reactos/system32/drivers NO_CAB FOR all) diff --git a/drivers/hid/hidparse/CMakeLists.txt b/drivers/hid/hidparse/CMakeLists.txt index f8e78eb1888..3b5f9294804 100644 --- a/drivers/hid/hidparse/CMakeLists.txt +++ b/drivers/hid/hidparse/CMakeLists.txt @@ -14,4 +14,4 @@ add_importlibs(hidparse ntoskrnl) target_link_libraries(hidparse hidparser) -add_cd_file(TARGET hidparse DESTINATION reactos/system32/drivers NO_CAB FOR all) \ No newline at end of file +add_cd_file(TARGET hidparse DESTINATION reactos/system32/drivers NO_CAB FOR all) diff --git a/drivers/hid/hidusb/CMakeLists.txt b/drivers/hid/hidusb/CMakeLists.txt index 88e3700d556..349abc855c9 100644 --- a/drivers/hid/hidusb/CMakeLists.txt +++ b/drivers/hid/hidusb/CMakeLists.txt @@ -8,4 +8,4 @@ add_library(hidusb SHARED ${SOURCE}) set_module_type(hidusb kernelmodedriver) add_importlibs(hidusb hidclass ntoskrnl usbd hal) -add_cd_file(TARGET hidusb DESTINATION reactos/system32/drivers NO_CAB FOR all) \ No newline at end of file +add_cd_file(TARGET hidusb DESTINATION reactos/system32/drivers NO_CAB FOR all) diff --git a/drivers/hid/mouhid/CMakeLists.txt b/drivers/hid/mouhid/CMakeLists.txt index 77d9c10d7f5..e0ba3960dd4 100644 --- a/drivers/hid/mouhid/CMakeLists.txt +++ b/drivers/hid/mouhid/CMakeLists.txt @@ -8,4 +8,4 @@ add_library(mouhid SHARED mouhid.c mouhid.rc) set_module_type(mouhid kernelmodedriver) add_importlibs(mouhid ntoskrnl hal hidparse) -add_cd_file(TARGET mouhid DESTINATION reactos/system32/drivers FOR all) \ No newline at end of file +add_cd_file(TARGET mouhid DESTINATION reactos/system32/drivers FOR all) diff --git a/drivers/ksfilter/CMakeLists.txt b/drivers/ksfilter/CMakeLists.txt index 521247b7157..a861655913c 100644 --- a/drivers/ksfilter/CMakeLists.txt +++ b/drivers/ksfilter/CMakeLists.txt @@ -1,3 +1,3 @@ add_subdirectory(ks) -add_subdirectory(swenum) \ No newline at end of file +add_subdirectory(swenum) diff --git a/drivers/network/tcpip/notes.txt b/drivers/network/tcpip/notes.txt index 6d877f4fad7..0b2d45a51df 100644 --- a/drivers/network/tcpip/notes.txt +++ b/drivers/network/tcpip/notes.txt @@ -32,4 +32,4 @@ RFC 2525 - Known TCP Implementation Problems http://www.faqs.org/rfcs/rfc2525.html RFC 2581 - TCP Congestion Control -http://www.faqs.org/rfcs/rfc2581.html \ No newline at end of file +http://www.faqs.org/rfcs/rfc2581.html diff --git a/drivers/storage/ide/uniata/todo.txt b/drivers/storage/ide/uniata/todo.txt index 677b348d438..ad16c0fc1e5 100644 --- a/drivers/storage/ide/uniata/todo.txt +++ b/drivers/storage/ide/uniata/todo.txt @@ -254,4 +254,4 @@ 158.implement .INF generator 159.fix bug with invalid INF section under XP+ (43e2) 160.add INF handler for SCSI\NET\VEN_UNIATA&PROD_MANAGEMENT_PORT -161. \ No newline at end of file +161. diff --git a/drivers/usb/CMakeLists.txt b/drivers/usb/CMakeLists.txt index 7c3759fea86..36650c822df 100644 --- a/drivers/usb/CMakeLists.txt +++ b/drivers/usb/CMakeLists.txt @@ -4,4 +4,4 @@ add_subdirectory(usbehci) add_subdirectory(usbhub) add_subdirectory(usbohci) add_subdirectory(usbstor) -add_subdirectory(usbuhci) \ No newline at end of file +add_subdirectory(usbuhci) diff --git a/drivers/usb/usbehci/hardware.cpp b/drivers/usb/usbehci/hardware.cpp index 5bbf4ceff6b..96e59b36fdb 100644 --- a/drivers/usb/usbehci/hardware.cpp +++ b/drivers/usb/usbehci/hardware.cpp @@ -127,6 +127,13 @@ CUSBHardwareDevice::QueryInterface( return STATUS_UNSUCCESSFUL; } +LPCWSTR +STDMETHODCALLTYPE +CUSBHardwareDevice::GetUSBType() +{ + return L"USBEHCI"; +} + NTSTATUS STDMETHODCALLTYPE CUSBHardwareDevice::Initialize( diff --git a/drivers/usb/usbhub/pdo.c b/drivers/usb/usbhub/pdo.c index 6c561b99662..ec898909f3f 100644 --- a/drivers/usb/usbhub/pdo.c +++ b/drivers/usb/usbhub/pdo.c @@ -280,7 +280,7 @@ USBHUB_PdoHandleInternalDeviceControl( DPRINT1("URB_FUNCTION_CLASS_INTERFACE\n"); break; case URB_FUNCTION_VENDOR_DEVICE: - DPRINT1("URB_FUNCTION_VENDOR_DEVICE\n"); + DPRINT("URB_FUNCTION_VENDOR_DEVICE\n"); break; default: DPRINT1("IOCTL_INTERNAL_USB_SUBMIT_URB Function %x NOT IMPLEMENTED\n", Urb->UrbHeader.Function); diff --git a/drivers/usb/usbohci/hardware.cpp b/drivers/usb/usbohci/hardware.cpp index f80eeed4bad..b707ac5438c 100644 --- a/drivers/usb/usbohci/hardware.cpp +++ b/drivers/usb/usbohci/hardware.cpp @@ -124,6 +124,14 @@ CUSBHardwareDevice::QueryInterface( return STATUS_UNSUCCESSFUL; } +LPCWSTR +STDMETHODCALLTYPE +CUSBHardwareDevice::GetUSBType() +{ + return L"USBOHCI"; +} + + NTSTATUS STDMETHODCALLTYPE CUSBHardwareDevice::Initialize( diff --git a/drivers/usb/usbuhci/hardware.cpp b/drivers/usb/usbuhci/hardware.cpp index 31e5eeb3810..fbfe446aff0 100644 --- a/drivers/usb/usbuhci/hardware.cpp +++ b/drivers/usb/usbuhci/hardware.cpp @@ -145,6 +145,14 @@ CUSBHardwareDevice::QueryInterface( return STATUS_UNSUCCESSFUL; } +LPCWSTR +STDMETHODCALLTYPE +CUSBHardwareDevice::GetUSBType() +{ + return L"USBUHCI"; +} + + NTSTATUS CUSBHardwareDevice::Initialize( PDRIVER_OBJECT DriverObject, diff --git a/drivers/wdm/audio/drivers/CMIDriver/CHANGELOG.txt b/drivers/wdm/audio/drivers/CMIDriver/CHANGELOG.txt index c79aa4b6baf..5fd192c3c8a 100644 --- a/drivers/wdm/audio/drivers/CMIDriver/CHANGELOG.txt +++ b/drivers/wdm/audio/drivers/CMIDriver/CHANGELOG.txt @@ -98,4 +98,4 @@ If you know why this is happening or why the XP mixer tries to render the AC3 pi 0.9.3: - bug fixes for multi channel audio -- several other minor fixes \ No newline at end of file +- several other minor fixes diff --git a/drivers/wdm/audio/legacy/wdmaud/CMakeLists.txt b/drivers/wdm/audio/legacy/wdmaud/CMakeLists.txt index da13de3726f..c9791809718 100644 --- a/drivers/wdm/audio/legacy/wdmaud/CMakeLists.txt +++ b/drivers/wdm/audio/legacy/wdmaud/CMakeLists.txt @@ -22,4 +22,4 @@ target_link_libraries(wdmaud add_pch(wdmaud wdmaud.h) add_importlibs(wdmaud ntoskrnl ks hal) -add_cd_file(TARGET wdmaud DESTINATION reactos/system32/drivers FOR all) \ No newline at end of file +add_cd_file(TARGET wdmaud DESTINATION reactos/system32/drivers FOR all) diff --git a/hal/halx86/CMakeLists.txt b/hal/halx86/CMakeLists.txt index 7fa5cf55f4c..daec98d5b98 100644 --- a/hal/halx86/CMakeLists.txt +++ b/hal/halx86/CMakeLists.txt @@ -30,9 +30,9 @@ if(NOT MSVC AND (CMAKE_VERSION VERSION_GREATER 2.8.7)) add_library(lib_hal_generic OBJECT ${HAL_GENERIC_SOURCE}) else() add_library(lib_hal_generic ${HAL_GENERIC_SOURCE}) - add_dependencies(lib_hal_generic asm) endif() +add_dependencies(lib_hal_generic asm) add_pch(lib_hal_generic include/hal.h) if(ARCH STREQUAL "i386") @@ -125,6 +125,7 @@ if(ARCH STREQUAL "i386") if(NOT MSVC AND (CMAKE_VERSION VERSION_GREATER 2.8.7)) add_library(lib_hal_pic OBJECT ${HAL_PIC_SOURCE} ${HAL_PIC_ASM_SOURCE}) + add_dependencies(lib_hal_pic asm) endif() list(APPEND MINI_HAL_SOURCE @@ -183,7 +184,7 @@ if(ARCH STREQUAL "i386") target_link_libraries(hal libcntpr) add_importlibs(hal ntoskrnl) #add_pch(hal include/hal.h) - add_dependencies(hal psdk bugcodes) + add_dependencies(hal psdk bugcodes asm) set_entrypoint(hal HalInitSystem 8) set_subsystem(hal native) set_image_base(hal 0x00010000) @@ -219,7 +220,7 @@ if(ARCH STREQUAL "i386") endif() target_link_libraries(halacpi libcntpr) add_importlibs(halacpi ntoskrnl) - add_dependencies(halacpi psdk bugcodes) + add_dependencies(halacpi psdk bugcodes asm) set_entrypoint(halacpi HalInitSystem@8) set_subsystem(halacpi native) set_image_base(halacpi 0x00010000) @@ -251,7 +252,7 @@ elseif(ARCH STREQUAL "amd64") # hal add_library(hal SHARED ${HAL_SOURCE}) add_pch(hal include/hal.h) - add_dependencies(hal psdk bugcodes) + add_dependencies(hal psdk bugcodes asm) set_entrypoint(hal HalInitSystem) set_subsystem(hal native) diff --git a/include/crt/assert.h b/include/crt/assert.h index 9107ee5a272..8f9fa217fe9 100644 --- a/include/crt/assert.h +++ b/include/crt/assert.h @@ -20,8 +20,21 @@ extern "C" { #endif - _CRTIMP void __cdecl _assert(const char *_Message,const char *_File,unsigned _Line); - _CRTIMP void __cdecl _wassert(const wchar_t *_Message,const wchar_t *_File,unsigned _Line); + _CRTIMP + void + __cdecl + _assert( + _In_z_ const char *_Message, + _In_z_ const char *_File, + _In_ unsigned _Line); + + _CRTIMP + void + __cdecl + _wassert( + _In_z_ const wchar_t *_Message, + _In_z_ const wchar_t *_File, + _In_ unsigned _Line); #ifdef __cplusplus } diff --git a/include/crt/crtdefs.h b/include/crt/crtdefs.h index 76cc426c26f..be4d08ee539 100644 --- a/include/crt/crtdefs.h +++ b/include/crt/crtdefs.h @@ -343,14 +343,6 @@ extern "C" { #endif #endif -/* For wine code... */ -#if !defined(_MSVCRT_LONG_DEFINED) && defined(__ROS_LONG64__) -#define _MSVCRT_LONG_DEFINED -/* we need 32-bit longs even on 64-bit */ -typedef int __msvcrt_long; -typedef unsigned int __msvcrt_ulong; -#endif - #ifndef _TIME_T_DEFINED #define _TIME_T_DEFINED #ifdef _USE_32BIT_TIME_T @@ -360,16 +352,8 @@ typedef unsigned int __msvcrt_ulong; #endif #endif - typedef struct threadmbcinfostruct { - int refcount; - int mbcodepage; - int ismbcodepage; - int mblcid; - unsigned short mbulinfo[6]; - char mbctype[257]; - char mbcasemap[256]; -} threadmbcinfo, *pthreadmbcinfo; - +struct threadmbcinfostruct; +typedef struct threadmbcinfostruct *pthreadmbcinfo; #ifndef _TAGLC_ID_DEFINED #define _TAGLC_ID_DEFINED diff --git a/include/crt/ctype.h b/include/crt/ctype.h index 8236b2c8261..618e2107574 100644 --- a/include/crt/ctype.h +++ b/include/crt/ctype.h @@ -77,88 +77,546 @@ extern "C" { #ifndef _CTYPE_DEFINED #define _CTYPE_DEFINED - _CRTIMP int __cdecl _isctype(int _C,int _Type); - _CRTIMP int __cdecl _isctype_l(int _C,int _Type,_locale_t _Locale); - _CRTIMP int __cdecl isalpha(int _C); - _CRTIMP int __cdecl _isalpha_l(int _C,_locale_t _Locale); - _CRTIMP int __cdecl isupper(int _C); - _CRTIMP int __cdecl _isupper_l(int _C,_locale_t _Locale); - _CRTIMP int __cdecl islower(int _C); - _CRTIMP int __cdecl _islower_l(int _C,_locale_t _Locale); - _CRTIMP int __cdecl isdigit(int _C); - _CRTIMP int __cdecl _isdigit_l(int _C,_locale_t _Locale); - _CRTIMP int __cdecl isxdigit(int _C); - _CRTIMP int __cdecl _isxdigit_l(int _C,_locale_t _Locale); - _CRTIMP int __cdecl isspace(int _C); - _CRTIMP int __cdecl _isspace_l(int _C,_locale_t _Locale); - _CRTIMP int __cdecl ispunct(int _C); - _CRTIMP int __cdecl _ispunct_l(int _C,_locale_t _Locale); - _CRTIMP int __cdecl isalnum(int _C); - _CRTIMP int __cdecl _isalnum_l(int _C,_locale_t _Locale); - _CRTIMP int __cdecl isprint(int _C); - _CRTIMP int __cdecl _isprint_l(int _C,_locale_t _Locale); - _CRTIMP int __cdecl isgraph(int _C); - _CRTIMP int __cdecl _isgraph_l(int _C,_locale_t _Locale); - _CRTIMP int __cdecl iscntrl(int _C); - _CRTIMP int __cdecl _iscntrl_l(int _C,_locale_t _Locale); - _CRTIMP int __cdecl toupper(int _C); - _CRTIMP int __cdecl tolower(int _C); - _CRTIMP int __cdecl _tolower(int _C); - _CRTIMP int __cdecl _tolower_l(int _C,_locale_t _Locale); - _CRTIMP int __cdecl _toupper(int _C); - _CRTIMP int __cdecl _toupper_l(int _C,_locale_t _Locale); - _CRTIMP int __cdecl __isascii(int _C); - _CRTIMP int __cdecl __toascii(int _C); - _CRTIMP int __cdecl __iscsymf(int _C); - _CRTIMP int __cdecl __iscsym(int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _isctype( + _In_ int _C, + _In_ int _Type); + + _Check_return_ + _CRTIMP + int + __cdecl + _isctype_l( + _In_ int _C, + _In_ int _Type, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + isalpha( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _isalpha_l( + _In_ int _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + isupper( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _isupper_l( + _In_ int _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + islower( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _islower_l( + _In_ int _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + isdigit( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _isdigit_l( + _In_ int _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + isxdigit( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _isxdigit_l( + _In_ int _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + isspace( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _isspace_l( + _In_ int _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + ispunct( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _ispunct_l( + _In_ int _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + isalnum( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _isalnum_l( + _In_ int _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + isprint( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _isprint_l( + _In_ int _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + isgraph( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _isgraph_l( + _In_ int _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + iscntrl( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _iscntrl_l( + _In_ int _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + toupper( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + tolower( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _tolower( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _tolower_l( + _In_ int _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + _toupper( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _toupper_l( + _In_ int _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + __isascii( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + __toascii( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + __iscsymf( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + __iscsym( + _In_ int _C); + #if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || !defined (NO_OLDNAMES) int __cdecl isblank(int _C); #endif + #endif /* !_CTYPE_DEFINED */ #ifndef _WCTYPE_DEFINED #define _WCTYPE_DEFINED - _CRTIMP int __cdecl iswalpha(wint_t _C); - _CRTIMP int __cdecl _iswalpha_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswupper(wint_t _C); - _CRTIMP int __cdecl _iswupper_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswlower(wint_t _C); - _CRTIMP int __cdecl _iswlower_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswdigit(wint_t _C); - _CRTIMP int __cdecl _iswdigit_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswxdigit(wint_t _C); - _CRTIMP int __cdecl _iswxdigit_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswspace(wint_t _C); - _CRTIMP int __cdecl _iswspace_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswpunct(wint_t _C); - _CRTIMP int __cdecl _iswpunct_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswalnum(wint_t _C); - _CRTIMP int __cdecl _iswalnum_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswprint(wint_t _C); - _CRTIMP int __cdecl _iswprint_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswgraph(wint_t _C); - _CRTIMP int __cdecl _iswgraph_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswcntrl(wint_t _C); - _CRTIMP int __cdecl _iswcntrl_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswascii(wint_t _C); - _CRTIMP int __cdecl isleadbyte(int _C); - _CRTIMP int __cdecl _isleadbyte_l(int _C,_locale_t _Locale); - _CRTIMP wint_t __cdecl towupper(wint_t _C); - _CRTIMP wint_t __cdecl _towupper_l(wint_t _C,_locale_t _Locale); - _CRTIMP wint_t __cdecl towlower(wint_t _C); - _CRTIMP wint_t __cdecl _towlower_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswctype(wint_t _C,wctype_t _Type); - _CRTIMP int __cdecl _iswctype_l(wint_t _C,wctype_t _Type,_locale_t _Locale); - _CRTIMP int __cdecl __iswcsymf(wint_t _C); - _CRTIMP int __cdecl _iswcsymf_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl __iswcsym(wint_t _C); - _CRTIMP int __cdecl _iswcsym_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl is_wctype(wint_t _C,wctype_t _Type); + + _Check_return_ + _CRTIMP + int + __cdecl + iswalpha( + _In_ wint_t _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _iswalpha_l( + _In_ wint_t _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + iswupper( + _In_ wint_t _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _iswupper_l( + _In_ wint_t _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + iswlower( + _In_ wint_t _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _iswlower_l( + _In_ wint_t _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + iswdigit( + _In_ wint_t _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _iswdigit_l( + _In_ wint_t _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + iswxdigit( + _In_ wint_t _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _iswxdigit_l( + _In_ wint_t _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + iswspace( + _In_ wint_t _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _iswspace_l( + _In_ wint_t _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + iswpunct( + _In_ wint_t _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _iswpunct_l( + _In_ wint_t _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + iswalnum( + _In_ wint_t _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _iswalnum_l( + _In_ wint_t _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + iswprint( + _In_ wint_t _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _iswprint_l( + _In_ wint_t _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + iswgraph( + _In_ wint_t _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _iswgraph_l( + _In_ wint_t _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + iswcntrl( + _In_ wint_t _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _iswcntrl_l( + _In_ wint_t _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + iswascii( + _In_ wint_t _C); + + _Check_return_ + _CRTIMP + int + __cdecl + isleadbyte( + _In_ int _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _isleadbyte_l( + _In_ int _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + wint_t + __cdecl + towupper( + _In_ wint_t _C); + + _Check_return_ + _CRTIMP + wint_t + __cdecl + _towupper_l( + _In_ wint_t _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + wint_t + __cdecl + towlower( + _In_ wint_t _C); + + _Check_return_ + _CRTIMP + wint_t + __cdecl + _towlower_l( + _In_ wint_t _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + iswctype( + _In_ wint_t _C, + _In_ wctype_t _Type); + + _Check_return_ + _CRTIMP + int + __cdecl + _iswctype_l( + _In_ wint_t _C, + _In_ wctype_t _Type, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + __iswcsymf( + _In_ wint_t _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _iswcsymf_l( + _In_ wint_t _C, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + __iswcsym( + _In_ wint_t _C); + + _Check_return_ + _CRTIMP + int + __cdecl + _iswcsym_l( + _In_ wint_t _C, + _In_opt_ _locale_t _Locale); + + _CRTIMP + int + __cdecl + is_wctype( + _In_ wint_t _C, + _In_ wctype_t _Type); #if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || !defined (NO_OLDNAMES) int __cdecl iswblank(wint_t _C); #endif -#endif + +#endif /* _WCTYPE_DEFINED */ #ifndef _CTYPE_DISABLE_MACROS @@ -240,18 +698,55 @@ extern "C" { #endif #ifndef NO_OLDNAMES + #ifndef _CTYPE_DEFINED - _CRTIMP _CRT_NONSTDC_DEPRECATE(__isascii) _CRTIMP int __cdecl isascii(int _C); - _CRTIMP _CRT_NONSTDC_DEPRECATE(__toascii) _CRTIMP int __cdecl toascii(int _C); - _CRTIMP _CRT_NONSTDC_DEPRECATE(__iscsymf) _CRTIMP int __cdecl iscsymf(int _C); - _CRTIMP _CRT_NONSTDC_DEPRECATE(__iscsym) _CRTIMP int __cdecl iscsym(int _C); -#else + + _Check_return_ + _CRTIMP + _CRT_NONSTDC_DEPRECATE(__isascii) + _CRTIMP + int + __cdecl + isascii( + _In_ int _C); + + _Check_return_ + _CRTIMP + _CRT_NONSTDC_DEPRECATE(__toascii) + _CRTIMP + int + __cdecl + toascii( + _In_ int _C); + + _Check_return_ + _CRTIMP + _CRT_NONSTDC_DEPRECATE(__iscsymf) + _CRTIMP + int + __cdecl + iscsymf( + _In_ int _C); + + _Check_return_ + _CRTIMP + _CRT_NONSTDC_DEPRECATE(__iscsym) + _CRTIMP + int + __cdecl + iscsym( + _In_ int _C); + +#else /* _CTYPE_DEFINED */ + #define isascii __isascii #define toascii __toascii #define iscsymf __iscsymf #define iscsym __iscsym -#endif -#endif + +#endif /* _CTYPE_DEFINED */ + +#endif /* NO_OLDNAMES */ #ifdef __cplusplus } diff --git a/include/crt/excpt.h b/include/crt/excpt.h index 456e20c3cde..355a077b738 100644 --- a/include/crt/excpt.h +++ b/include/crt/excpt.h @@ -26,7 +26,14 @@ typedef enum _EXCEPTION_DISPOSITION struct _EXCEPTION_RECORD; struct _CONTEXT; - EXCEPTION_DISPOSITION __cdecl _except_handler(struct _EXCEPTION_RECORD *_ExceptionRecord,void *_EstablisherFrame,struct _CONTEXT *_ContextRecord,void *_DispatcherContext); + EXCEPTION_DISPOSITION + __cdecl + _except_handler( + _In_ struct _EXCEPTION_RECORD *_ExceptionRecord, + _In_ void *_EstablisherFrame, + _Inout_ struct _CONTEXT *_ContextRecord, + _Inout_ void *_DispatcherContext); + #elif defined(__ia64__) typedef struct _EXCEPTION_POINTERS *Exception_info_ptr; @@ -34,14 +41,33 @@ typedef enum _EXCEPTION_DISPOSITION struct _CONTEXT; struct _DISPATCHER_CONTEXT; - __MINGW_EXTENSION _CRTIMP EXCEPTION_DISPOSITION __cdecl __C_specific_handler (struct _EXCEPTION_RECORD *_ExceptionRecord,unsigned __int64 _MemoryStackFp,unsigned __int64 _BackingStoreFp,struct _CONTEXT *_ContextRecord,struct _DISPATCHER_CONTEXT *_DispatcherContext,unsigned __int64 _GlobalPointer); + __MINGW_EXTENSION + _CRTIMP + EXCEPTION_DISPOSITION + __cdecl + __C_specific_handler( + _In_ struct _EXCEPTION_RECORD *_ExceptionRecord, + _In_ unsigned __int64 _MemoryStackFp, + _In_ unsigned __int64 _BackingStoreFp, + _Inout_ struct _CONTEXT *_ContextRecord, + _Inout_ struct _DISPATCHER_CONTEXT *_DispatcherContext, + _In_ unsigned __int64 _GlobalPointer); + #elif defined(__x86_64) struct _EXCEPTION_RECORD; struct _CONTEXT; struct _DISPATCHER_CONTEXT; - _CRTIMP EXCEPTION_DISPOSITION __cdecl __C_specific_handler (struct _EXCEPTION_RECORD *_ExceptionRecord,void *_EstablisherFrame,struct _CONTEXT *_ContextRecord,struct _DISPATCHER_CONTEXT *_DispatcherContext); + _CRTIMP + EXCEPTION_DISPOSITION + __cdecl + __C_specific_handler( + _In_ struct _EXCEPTION_RECORD *_ExceptionRecord, + _In_ void *_EstablisherFrame, + _Inout_ struct _CONTEXT *_ContextRecord, + _Inout_ struct _DISPATCHER_CONTEXT *_DispatcherContext); + #endif #ifdef _MSC_VER diff --git a/include/crt/stdio.h b/include/crt/stdio.h index 53275a809f5..2be88bb92b5 100644 --- a/include/crt/stdio.h +++ b/include/crt/stdio.h @@ -139,90 +139,532 @@ extern "C" { #ifndef _STDIO_DEFINED - _CRTIMP int __cdecl _filbuf(FILE *_File); - _CRTIMP int __cdecl _flsbuf(int _Ch,FILE *_File); + _Check_return_ + _CRTIMP + int + __cdecl + _filbuf( + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _flsbuf( + _In_ int _Ch, + _Inout_ FILE *_File); + #ifdef _POSIX_ - _CRTIMP FILE *__cdecl _fsopen(const char *_Filename,const char *_Mode); + _CRTIMP + FILE* + __cdecl + _fsopen( + const char *_Filename, + const char *_Mode); #else - _CRTIMP FILE *__cdecl _fsopen(const char *_Filename,const char *_Mode,int _ShFlag); + _Check_return_ + _CRTIMP + FILE* + __cdecl + _fsopen( + _In_z_ const char *_Filename, + _In_z_ const char *_Mode, + _In_ int _ShFlag); #endif - _CRTIMP void __cdecl clearerr(FILE *_File); - _CRTIMP int __cdecl fclose(FILE *_File); - _CRTIMP int __cdecl _fcloseall(void); + + _CRTIMP + void + __cdecl + clearerr( + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + fclose( + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _fcloseall(void); + #ifdef _POSIX_ - FILE *__cdecl fdopen(int _FileHandle,const char *_Mode); + FILE* + __cdecl + fdopen( + int _FileHandle, + const char *_Mode); #else - _CRTIMP FILE *__cdecl _fdopen(int _FileHandle,const char *_Mode); + _Check_return_ + _CRTIMP + FILE* + __cdecl + _fdopen( + _In_ int _FileHandle, + _In_z_ const char *_Mode); #endif - _CRTIMP int __cdecl feof(FILE *_File); - _CRTIMP int __cdecl ferror(FILE *_File); - _CRTIMP int __cdecl fflush(FILE *_File); - _CRTIMP int __cdecl fgetc(FILE *_File); - _CRTIMP int __cdecl _fgetchar(void); - _CRTIMP int __cdecl fgetpos(FILE *_File ,fpos_t *_Pos); - _CRTIMP char *__cdecl fgets(char *_Buf,int _MaxCount,FILE *_File); + + _Check_return_ + _CRTIMP + int + __cdecl + feof( + _In_ FILE *_File); + + _Check_return_ + _CRTIMP + int + __cdecl + ferror( + _In_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + fflush( + _Inout_opt_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + fgetc( + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _fgetchar(void); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + fgetpos( + _Inout_ FILE *_File, + _Out_ fpos_t *_Pos); + + _Check_return_opt_ + _CRTIMP + char* + __cdecl + fgets( + _Out_writes_z_(_MaxCount) char *_Buf, + _In_ int _MaxCount, + _Inout_ FILE *_File); + #ifdef _POSIX_ - int __cdecl fileno(FILE *_File); + int + __cdecl + fileno( + FILE *_File); #else - _CRTIMP int __cdecl _fileno(FILE *_File); + _Check_return_ + _CRTIMP + int + __cdecl + _fileno( + _In_ FILE *_File); #endif - _CRTIMP char *__cdecl _tempnam(const char *_DirName,const char *_FilePrefix); - _CRTIMP int __cdecl _flushall(void); - _CRTIMP FILE *__cdecl fopen(const char *_Filename,const char *_Mode); - _CRTIMP int __cdecl fprintf(FILE *_File,const char *_Format,...); - _CRTIMP int __cdecl fputc(int _Ch,FILE *_File); - _CRTIMP int __cdecl _fputchar(int _Ch); - _CRTIMP int __cdecl fputs(const char *_Str,FILE *_File); - _CRTIMP size_t __cdecl fread(void *_DstBuf,size_t _ElementSize,size_t _Count,FILE *_File); - _CRTIMP _CRT_INSECURE_DEPRECATE(freopen_s) FILE *__cdecl freopen(const char *_Filename,const char *_Mode,FILE *_File); - _CRTIMP _CRT_INSECURE_DEPRECATE(fscanf_s) int __cdecl fscanf(FILE *_File,const char *_Format,...); - _CRTIMP int __cdecl fsetpos(FILE *_File,const fpos_t *_Pos); - _CRTIMP int __cdecl fseek(FILE *_File,long _Offset,int _Origin); - _CRTIMP long __cdecl ftell(FILE *_File); - __MINGW_EXTENSION _CRTIMP int __cdecl _fseeki64(FILE *_File,__int64 _Offset,int _Origin); - __MINGW_EXTENSION _CRTIMP __int64 __cdecl _ftelli64(FILE *_File); - _CRTIMP size_t __cdecl fwrite(const void *_Str,size_t _Size,size_t _Count,FILE *_File); - _CRTIMP int __cdecl getc(FILE *_File); - _CRTIMP int __cdecl getchar(void); - _CRTIMP int __cdecl _getmaxstdio(void); - _CRTIMP char *__cdecl gets(char *_Buffer); // FIXME: non-standard - _CRTIMP int __cdecl _getw(FILE *_File); + + _Check_return_ + _CRTIMP + char* + __cdecl + _tempnam( + _In_opt_z_ const char *_DirName, + _In_opt_z_ const char *_FilePrefix); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _flushall(void); + + _Check_return_ + _CRTIMP + FILE* + __cdecl + fopen( + _In_z_ const char *_Filename, + _In_z_ const char *_Mode); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + fprintf( + _Inout_ FILE *_File, + _In_z_ _Printf_format_string_ const char *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + fputc( + _In_ int _Ch, + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _fputchar( + _In_ int _Ch); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + fputs( + _In_z_ const char *_Str, + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + size_t + __cdecl + fread( + _Out_writes_bytes_(_ElementSize * _Count) void *_DstBuf, + _In_ size_t _ElementSize, + _In_ size_t _Count, + _Inout_ FILE *_File); + + _Check_return_ + _CRTIMP + _CRT_INSECURE_DEPRECATE(freopen_s) + FILE* + __cdecl + freopen( + _In_z_ const char *_Filename, + _In_z_ const char *_Mode, + _Inout_ FILE *_File); + + _Check_return_ + _CRTIMP + _CRT_INSECURE_DEPRECATE(fscanf_s) + int + __cdecl + fscanf( + _Inout_ FILE *_File, + _In_z_ _Scanf_format_string_ const char *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + fsetpos( + _Inout_ FILE *_File, + _In_ const fpos_t *_Pos); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + fseek( + _Inout_ FILE *_File, + _In_ long _Offset, + _In_ int _Origin); + + _Check_return_ + _CRTIMP + long + __cdecl + ftell( + _Inout_ FILE *_File); + + _Check_return_opt_ + __MINGW_EXTENSION + _CRTIMP + int + __cdecl + _fseeki64( + _Inout_ FILE *_File, + _In_ __int64 _Offset, + _In_ int _Origin); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + __int64 + __cdecl + _ftelli64( + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + size_t + __cdecl + fwrite( + _In_reads_bytes_(_Size * _Count) const void *_Str, + _In_ size_t _Size, + _In_ size_t _Count, + _Inout_ FILE *_File); + + _Check_return_ + _CRTIMP + int + __cdecl + getc( + _Inout_ FILE *_File); + + _Check_return_ + _CRTIMP + int + __cdecl + getchar(void); + + _Check_return_ + _CRTIMP + int + __cdecl + _getmaxstdio(void); + + _CRTIMP + char* + __cdecl + gets( + char *_Buffer); // FIXME: non-standard + + _Check_return_ + _CRTIMP + int + __cdecl + _getw( + _Inout_ FILE *_File); + #ifndef _CRT_PERROR_DEFINED #define _CRT_PERROR_DEFINED - _CRTIMP void __cdecl perror(const char *_ErrMsg); + _CRTIMP + void + __cdecl + perror( + _In_opt_z_ const char *_ErrMsg); #endif - _CRTIMP int __cdecl _pclose(FILE *_File); - _CRTIMP FILE *__cdecl _popen(const char *_Command,const char *_Mode); - _CRTIMP int __cdecl printf(const char *_Format,...); - _CRTIMP int __cdecl putc(int _Ch,FILE *_File); - _CRTIMP int __cdecl putchar(int _Ch); - _CRTIMP int __cdecl puts(const char *_Str); - _CRTIMP int __cdecl _putw(int _Word,FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _pclose( + _Inout_ FILE *_File); + + _Check_return_ + _CRTIMP + FILE* + __cdecl + _popen( + _In_z_ const char *_Command, + _In_z_ const char *_Mode); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + printf( + _In_z_ _Printf_format_string_ const char *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + putc( + _In_ int _Ch, + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + putchar( + _In_ int _Ch); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + puts( + _In_z_ const char *_Str); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _putw( + _In_ int _Word, + _Inout_ FILE *_File); + #ifndef _CRT_DIRECTORY_DEFINED #define _CRT_DIRECTORY_DEFINED - _CRTIMP int __cdecl remove(const char *_Filename); - _CRTIMP int __cdecl rename(const char *_OldFilename,const char *_NewFilename); - _CRTIMP int __cdecl _unlink(const char *_Filename); + + _Check_return_ + _CRTIMP + int + __cdecl + remove( + _In_z_ const char *_Filename); + + _Check_return_ + _CRTIMP + int + __cdecl + rename( + _In_z_ const char *_OldFilename, + _In_z_ const char *_NewFilename); + + _Check_return_ + _CRTIMP + int + __cdecl + _unlink( + _In_z_ const char *_Filename); + #ifndef NO_OLDNAMES - _CRTIMP _CRT_NONSTDC_DEPRECATE(_unlink) int __cdecl unlink(const char *_Filename); + _Check_return_ + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_unlink) + int + __cdecl + unlink( + _In_z_ const char *_Filename); #endif -#endif - _CRTIMP void __cdecl rewind(FILE *_File); - _CRTIMP int __cdecl _rmtmp(void); - _CRTIMP _CRT_INSECURE_DEPRECATE_CORE(scanf_s) int __cdecl scanf(const char *_Format,...); - _CRTIMP _CRT_INSECURE_DEPRECATE(setvbuf) void __cdecl setbuf(FILE *_File,char *_Buffer); - _CRTIMP int __cdecl _setmaxstdio(int _Max); - _CRTIMP unsigned int __cdecl _set_output_format(unsigned int _Format); - _CRTIMP unsigned int __cdecl _get_output_format(void); - _CRTIMP int __cdecl setvbuf(FILE *_File,char *_Buf,int _Mode,size_t _Size); - _CRTIMP int __cdecl _scprintf(const char *_Format,...); - _CRTIMP _CRT_INSECURE_DEPRECATE_CORE(sscanf_s) int __cdecl sscanf(const char *_Src,const char *_Format,...); - _CRTIMP _CRT_INSECURE_DEPRECATE_CORE(_snscanf_s) int __cdecl _snscanf(const char *_Src,size_t _MaxCount,const char *_Format,...); - _CRTIMP _CRT_INSECURE_DEPRECATE(tmpfile_s) FILE *__cdecl tmpfile(void); - _CRTIMP char *__cdecl tmpnam(char *_Buffer); - _CRTIMP_ALT int __cdecl ungetc(int _Ch,FILE *_File); - _CRTIMP int __cdecl vfprintf(FILE *_File,const char *_Format,va_list _ArgList); - _CRTIMP int __cdecl vprintf(const char *_Format,va_list _ArgList); + +#endif /* _CRT_DIRECTORY_DEFINED */ + + _CRTIMP + void + __cdecl + rewind( + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _rmtmp(void); + + _Check_return_ + _CRTIMP + _CRT_INSECURE_DEPRECATE_CORE(scanf_s) + int + __cdecl + scanf( + _In_z_ _Scanf_format_string_ const char *_Format, + ...); + + _CRTIMP + _CRT_INSECURE_DEPRECATE(setvbuf) + void + __cdecl + setbuf( + _Inout_ FILE *_File, + _Inout_updates_opt_(BUFSIZ) _Post_readable_size_(0) char *_Buffer); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _setmaxstdio( + _In_ int _Max); + + _Check_return_opt_ + _CRTIMP + unsigned int + __cdecl + _set_output_format( + _In_ unsigned int _Format); + + _Check_return_opt_ + _CRTIMP + unsigned int + __cdecl + _get_output_format(void); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + setvbuf( + _Inout_ FILE *_File, + _Inout_updates_opt_z_(_Size) char *_Buf, + _In_ int _Mode, + _In_ size_t _Size); + + _Check_return_ + _CRTIMP + int + __cdecl + _scprintf( + _In_z_ _Printf_format_string_ const char *_Format, + ...); + + _Check_return_ + _CRTIMP + _CRT_INSECURE_DEPRECATE_CORE(sscanf_s) + int + __cdecl + sscanf( + _In_z_ const char *_Src, + _In_z_ _Scanf_format_string_ const char *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + _CRT_INSECURE_DEPRECATE_CORE(_snscanf_s) + int + __cdecl + _snscanf( + _In_reads_bytes_(_MaxCount) _Pre_z_ const char *_Src, + _In_ size_t _MaxCount, + _In_z_ _Scanf_format_string_ const char *_Format, + ...); + + _Check_return_ + _CRTIMP + _CRT_INSECURE_DEPRECATE(tmpfile_s) + FILE* + __cdecl + tmpfile(void); + + _CRTIMP + char* + __cdecl + tmpnam( + _Pre_maybenull_ _Post_z_ char *_Buffer); + + _Check_return_opt_ + _CRTIMP_ALT + int + __cdecl + ungetc( + _In_ int _Ch, + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + vfprintf( + _Inout_ FILE *_File, + _In_z_ _Printf_format_string_ const char *_Format, + va_list _ArgList); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + vprintf( + _In_z_ _Printf_format_string_ const char *_Format, + va_list _ArgList); + /* Make sure macros are not defined. */ #if __MINGW_GNUC_PREREQ(4,4) #pragma push_macro("vsnprintf") @@ -230,17 +672,30 @@ extern "C" { #endif #undef vsnprintf #undef snprintf - _CRTIMP _CRT_INSECURE_DEPRECATE(vsnprintf_s) int __cdecl vsnprintf(char *_DstBuf,size_t _MaxCount,const char *_Format,va_list _ArgList); + + _Check_return_opt_ + _CRTIMP + _CRT_INSECURE_DEPRECATE(vsnprintf_s) + int + __cdecl + vsnprintf( + _Out_writes_(_MaxCount) char *_DstBuf, + _In_ size_t _MaxCount, + _In_z_ _Printf_format_string_ const char *_Format, + va_list _ArgList); + _CRTIMP int __cdecl _snprintf(char *_Dest,size_t _Count,const char *_Format,...); _CRTIMP int __cdecl _vsnprintf(char *_Dest,size_t _Count,const char *_Format,va_list _Args); int __cdecl sprintf(char *_Dest,const char *_Format,...); int __cdecl vsprintf(char *_Dest,const char *_Format,va_list _Args); + #ifndef __NO_ISOCEXT /* externs in libmingwex.a */ int __cdecl snprintf(char* s, size_t n, const char* format, ...); int __cdecl vscanf(const char * __restrict__ Format, va_list argp); int __cdecl vfscanf (FILE * __restrict__ fp, const char * Format,va_list argp); int __cdecl vsscanf (const char * __restrict__ _Str,const char * __restrict__ Format,va_list argp); #endif + /* Restore may prior defined macros snprintf/vsnprintf. */ #if __MINGW_GNUC_PREREQ(4,4) #pragma pop_macro("snprintf") @@ -254,12 +709,19 @@ extern "C" { #define snprintf _snprintf #endif - _CRTIMP int __cdecl _vscprintf(const char *_Format,va_list _ArgList); + _Check_return_ + _CRTIMP + int + __cdecl + _vscprintf( + _In_z_ _Printf_format_string_ const char *_Format, + va_list _ArgList); + #ifdef _SAFECRT_IMPL #define _set_printf_count_output(i) #define _get_printf_count_output() (FALSE) #else - _CRTIMP int __cdecl _set_printf_count_output(int _Value); + _CRTIMP int __cdecl _set_printf_count_output(_In_ int _Value); _CRTIMP int __cdecl _get_printf_count_output(void); #endif @@ -270,32 +732,196 @@ extern "C" { #endif #ifdef _POSIX_ - _CRTIMP FILE *__cdecl _wfsopen(const wchar_t *_Filename,const wchar_t *_Mode); + _CRTIMP + FILE* + __cdecl + _wfsopen( + const wchar_t *_Filename, + const wchar_t *_Mode); #else - _CRTIMP FILE *__cdecl _wfsopen(const wchar_t *_Filename,const wchar_t *_Mode,int _ShFlag); + _Check_return_ + _CRTIMP + FILE* + __cdecl + _wfsopen( + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *_Mode, + _In_ int _ShFlag); #endif - _CRTIMP wint_t __cdecl fgetwc(FILE *_File); - _CRTIMP wint_t __cdecl _fgetwchar(void); - _CRTIMP wint_t __cdecl fputwc(wchar_t _Ch,FILE *_File); - _CRTIMP wint_t __cdecl _fputwchar(wchar_t _Ch); - _CRTIMP wint_t __cdecl getwc(FILE *_File); - _CRTIMP wint_t __cdecl getwchar(void); - _CRTIMP wint_t __cdecl putwc(wchar_t _Ch,FILE *_File); - _CRTIMP wint_t __cdecl putwchar(wchar_t _Ch); - _CRTIMP wint_t __cdecl ungetwc(wint_t _Ch,FILE *_File); - _CRTIMP wchar_t *__cdecl fgetws(wchar_t *_Dst,int _SizeInWords,FILE *_File); - _CRTIMP int __cdecl fputws(const wchar_t *_Str,FILE *_File); - _CRTIMP wchar_t *__cdecl _getws(wchar_t *_String); - _CRTIMP int __cdecl _putws(const wchar_t *_Str); - _CRTIMP int __cdecl fwprintf(FILE *_File,const wchar_t *_Format,...); - _CRTIMP int __cdecl wprintf(const wchar_t *_Format,...); - _CRTIMP int __cdecl _scwprintf(const wchar_t *_Format,...); - _CRTIMP int __cdecl vfwprintf(FILE *_File,const wchar_t *_Format,va_list _ArgList); - _CRTIMP int __cdecl vwprintf(const wchar_t *_Format,va_list _ArgList); - _CRTIMP int __cdecl swprintf(wchar_t*, const wchar_t*, ...); - _CRTIMP int __cdecl vswprintf(wchar_t*, const wchar_t*,va_list); - _CRTIMP int __cdecl _swprintf_c(wchar_t *_DstBuf,size_t _SizeInWords,const wchar_t *_Format,...); - _CRTIMP int __cdecl _vswprintf_c(wchar_t *_DstBuf,size_t _SizeInWords,const wchar_t *_Format,va_list _ArgList); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + fgetwc( + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + _fgetwchar(void); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + fputwc( + _In_ wchar_t _Ch, + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + _fputwchar( + _In_ wchar_t _Ch); + + _Check_return_ + _CRTIMP + wint_t + __cdecl + getwc( + _Inout_ FILE *_File); + + _Check_return_ + _CRTIMP + wint_t + __cdecl + getwchar(void); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + putwc( + _In_ wchar_t _Ch, + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + putwchar( + _In_ wchar_t _Ch); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + ungetwc( + _In_ wint_t _Ch, + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + wchar_t* + __cdecl + fgetws( + _Out_writes_z_(_SizeInWords) wchar_t *_Dst, + _In_ int _SizeInWords, + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + fputws( + _In_z_ const wchar_t *_Str, + _Inout_ FILE *_File); + + _CRTIMP + wchar_t* + __cdecl + _getws( + wchar_t *_String); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _putws( + _In_z_ const wchar_t *_Str); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + fwprintf( + _Inout_ FILE *_File, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + wprintf( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_ + _CRTIMP + int + __cdecl + _scwprintf( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + vfwprintf( + _Inout_ FILE *_File, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + va_list _ArgList); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + vwprintf( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + va_list _ArgList); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + swprintf( + _Out_ wchar_t*, + _Printf_format_string_ const wchar_t*, + ...); + + _CRTIMP + int + __cdecl + vswprintf( + _Out_ wchar_t*, + const wchar_t*, + va_list); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _swprintf_c( + _Out_writes_z_(_SizeInWords) wchar_t *_DstBuf, + _In_ size_t _SizeInWords, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _vswprintf_c( + _Out_writes_z_(_SizeInWords) wchar_t *_DstBuf, + _In_ size_t _SizeInWords, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + va_list _ArgList); + _CRTIMP int __cdecl _snwprintf(wchar_t *_Dest,size_t _Count,const wchar_t *_Format,...); _CRTIMP int __cdecl _vsnwprintf(wchar_t *_Dest,size_t _Count,const wchar_t *_Format,va_list _Args); #ifndef __NO_ISOCEXT /* externs in libmingwex.a */ @@ -333,28 +959,139 @@ extern "C" { #endif #endif - _CRTIMP wchar_t *__cdecl _wtempnam(const wchar_t *_Directory,const wchar_t *_FilePrefix); - _CRTIMP int __cdecl _vscwprintf(const wchar_t *_Format,va_list _ArgList); - _CRTIMP int __cdecl fwscanf(FILE *_File,const wchar_t *_Format,...); - _CRTIMP int __cdecl swscanf(const wchar_t *_Src,const wchar_t *_Format,...); - _CRTIMP int __cdecl _snwscanf(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,...); - _CRTIMP int __cdecl wscanf(const wchar_t *_Format,...); - _CRTIMP FILE *__cdecl _wfdopen(int _FileHandle ,const wchar_t *_Mode); - _CRTIMP FILE *__cdecl _wfopen(const wchar_t *_Filename,const wchar_t *_Mode); - _CRTIMP FILE *__cdecl _wfreopen(const wchar_t *_Filename,const wchar_t *_Mode,FILE *_OldFile); + _Check_return_ + _CRTIMP + wchar_t* + __cdecl + _wtempnam( + _In_opt_z_ const wchar_t *_Directory, + _In_opt_z_ const wchar_t *_FilePrefix); + + _Check_return_ + _CRTIMP + int + __cdecl + _vscwprintf( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + va_list _ArgList); + + _Check_return_ + _CRTIMP + int + __cdecl + fwscanf( + _Inout_ FILE *_File, + _In_z_ _Scanf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_ + _CRTIMP + int + __cdecl + swscanf( + _In_z_ const wchar_t *_Src, + _In_z_ _Scanf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _snwscanf( + _In_reads_(_MaxCount) _Pre_z_ const wchar_t *_Src, + _In_ size_t _MaxCount, + _In_z_ _Scanf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_ + _CRTIMP + int + __cdecl + wscanf( + _In_z_ _Scanf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_ + _CRTIMP + FILE* + __cdecl + _wfdopen( + _In_ int _FileHandle, + _In_z_ const wchar_t *_Mode); + + _Check_return_ + _CRTIMP + FILE* + __cdecl + _wfopen( + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *_Mode); + + _Check_return_ + _CRTIMP + FILE* + __cdecl + _wfreopen( + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *_Mode, + _Inout_ FILE *_OldFile); + #ifndef _CRT_WPERROR_DEFINED #define _CRT_WPERROR_DEFINED - _CRTIMP void __cdecl _wperror(const wchar_t *_ErrMsg); + _CRTIMP + void + __cdecl + _wperror( + _In_opt_z_ const wchar_t *_ErrMsg); #endif - _CRTIMP FILE *__cdecl _wpopen(const wchar_t *_Command,const wchar_t *_Mode); + + _Check_return_ + _CRTIMP + FILE* + __cdecl + _wpopen( + _In_z_ const wchar_t *_Command, + _In_z_ const wchar_t *_Mode); + #if !defined(NO_OLDNAMES) && !defined(wpopen) -#define wpopen _wpopen +#define wpopen _wpopen #endif - _CRTIMP int __cdecl _wremove(const wchar_t *_Filename); - _CRTIMP wchar_t *__cdecl _wtmpnam(wchar_t *_Buffer); - _CRTIMP wint_t __cdecl _fgetwc_nolock(FILE *_File); - _CRTIMP wint_t __cdecl _fputwc_nolock(wchar_t _Ch,FILE *_File); - _CRTIMP wint_t __cdecl _ungetwc_nolock(wint_t _Ch,FILE *_File); + + _Check_return_ + _CRTIMP + int + __cdecl + _wremove( + _In_z_ const wchar_t *_Filename); + + _CRTIMP + wchar_t* + __cdecl + _wtmpnam( + _Pre_maybenull_ _Post_z_ wchar_t *_Buffer); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + _fgetwc_nolock( + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + _fputwc_nolock( + _In_ wchar_t _Ch, + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + _ungetwc_nolock( + _In_ wint_t _Ch, + _Inout_ FILE *_File); #undef _CRT_GETPUTWCHAR_NOINLINE @@ -386,33 +1123,168 @@ extern "C" { #define _getwchar_nolock() _getwc_nolock(stdin) #define _putwchar_nolock(_c) _putwc_nolock((_c),stdout) - _CRTIMP void __cdecl _lock_file(FILE *_File); - _CRTIMP void __cdecl _unlock_file(FILE *_File); - _CRTIMP int __cdecl _fclose_nolock(FILE *_File); - _CRTIMP int __cdecl _fflush_nolock(FILE *_File); - _CRTIMP size_t __cdecl _fread_nolock(void *_DstBuf,size_t _ElementSize,size_t _Count,FILE *_File); - _CRTIMP int __cdecl _fseek_nolock(FILE *_File,long _Offset,int _Origin); - _CRTIMP long __cdecl _ftell_nolock(FILE *_File); - __MINGW_EXTENSION _CRTIMP int __cdecl _fseeki64_nolock(FILE *_File,__int64 _Offset,int _Origin); - __MINGW_EXTENSION _CRTIMP __int64 __cdecl _ftelli64_nolock(FILE *_File); - _CRTIMP size_t __cdecl _fwrite_nolock(const void *_DstBuf,size_t _Size,size_t _Count,FILE *_File); - _CRTIMP int __cdecl _ungetc_nolock(int _Ch,FILE *_File); + _CRTIMP + void + __cdecl + _lock_file( + _Inout_ FILE *_File); + + _CRTIMP + void + __cdecl + _unlock_file( + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _fclose_nolock( + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _fflush_nolock( + _Inout_opt_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + size_t + __cdecl + _fread_nolock( + _Out_writes_bytes_(_ElementSize * _Count) void *_DstBuf, + _In_ size_t _ElementSize, + _In_ size_t _Count, + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _fseek_nolock( + _Inout_ FILE *_File, + _In_ long _Offset, + _In_ int _Origin); + + _Check_return_ + _CRTIMP + long + __cdecl + _ftell_nolock( + _Inout_ FILE *_File); + + _Check_return_opt_ + __MINGW_EXTENSION + _CRTIMP + int + __cdecl + _fseeki64_nolock( + _Inout_ FILE *_File, + _In_ __int64 _Offset, + _In_ int _Origin); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + __int64 + __cdecl + _ftelli64_nolock( + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + size_t + __cdecl + _fwrite_nolock( + _In_reads_bytes_(_Size * _Count) const void *_DstBuf, + _In_ size_t _Size, + _In_ size_t _Count, + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _ungetc_nolock( + _In_ int _Ch, + _Inout_ FILE *_File); #if !defined(NO_OLDNAMES) || !defined(_POSIX) + #define P_tmpdir _P_tmpdir #define SYS_OPEN _SYS_OPEN - _CRTIMP char *__cdecl tempnam(const char *_Directory,const char *_FilePrefix); - _CRTIMP int __cdecl fcloseall(void); - _CRTIMP FILE *__cdecl fdopen(int _FileHandle,const char *_Format); - _CRTIMP int __cdecl fgetchar(void); - _CRTIMP int __cdecl fileno(FILE *_File); - _CRTIMP int __cdecl flushall(void); - _CRTIMP int __cdecl fputchar(int _Ch); - _CRTIMP int __cdecl getw(FILE *_File); - _CRTIMP int __cdecl putw(int _Ch,FILE *_File); - _CRTIMP int __cdecl rmtmp(void); -#endif + _CRTIMP + char* + __cdecl + tempnam( + _In_opt_z_ const char *_Directory, + _In_opt_z_ const char *_FilePrefix); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + fcloseall(void); + + _Check_return_ + _CRTIMP + FILE* + __cdecl + fdopen( + _In_ int _FileHandle, + _In_z_ const char *_Format); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + fgetchar(void); + + _Check_return_ + _CRTIMP + int + __cdecl + fileno( + _In_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + flushall(void); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + fputchar( + _In_ int _Ch); + + _Check_return_ + _CRTIMP + int + __cdecl + getw( + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + putw( + _In_ int _Ch, + _Inout_ FILE *_File); + + _Check_return_ + _CRTIMP + int + __cdecl + rmtmp(void); + +#endif /* !defined(NO_OLDNAMES) || !defined(_POSIX) */ #ifdef __cplusplus } diff --git a/include/crt/stdlib.h b/include/crt/stdlib.h index f8693d651b7..1ee091de6e8 100644 --- a/include/crt/stdlib.h +++ b/include/crt/stdlib.h @@ -27,6 +27,10 @@ extern "C" { #endif #endif +#ifndef MB_LEN_MAX +#define MB_LEN_MAX 5 +#endif + #define EXIT_SUCCESS 0 #define EXIT_FAILURE 1 @@ -137,8 +141,8 @@ extern "C" { #include _CRTIMP unsigned long *__cdecl __doserrno(void); #define _doserrno (*__doserrno()) - errno_t __cdecl _set_doserrno(unsigned long _Value); - errno_t __cdecl _get_doserrno(unsigned long *_Value); + errno_t __cdecl _set_doserrno(_In_ unsigned long _Value); + errno_t __cdecl _get_doserrno(_Out_ unsigned long *_Value); _CRTIMP extern char *_sys_errlist[]; _CRTIMP extern int _sys_nerr; @@ -180,10 +184,10 @@ extern "C" { _CRTIMP extern wchar_t *_wpgmptr; #endif /* !_M_CEE_PURE */ - _CRTIMP errno_t __cdecl _get_environ(char***); - _CRTIMP errno_t __cdecl _get_wenviron(wchar_t***); - _CRTIMP errno_t __cdecl _get_pgmptr(char **_Value); - _CRTIMP errno_t __cdecl _get_wpgmptr(wchar_t **_Value); + _CRTIMP errno_t __cdecl _get_environ(_Out_ char***); + _CRTIMP errno_t __cdecl _get_wenviron(_Out_ wchar_t***); + _CRTIMP errno_t __cdecl _get_pgmptr(_Deref_out_z_ char **_Value); + _CRTIMP errno_t __cdecl _get_wpgmptr(_Deref_out_z_ wchar_t **_Value); #ifdef _M_CEE_PURE _CRTIMP int* __cdecl __p__fmode(); @@ -191,8 +195,8 @@ extern "C" { #else _CRTIMP extern int _fmode; #endif /* !_M_CEE_PURE */ - _CRTIMP errno_t __cdecl _set_fmode(int _Mode); - _CRTIMP errno_t __cdecl _get_fmode(int *_PMode); + _CRTIMP errno_t __cdecl _set_fmode(_In_ int _Mode); + _CRTIMP errno_t __cdecl _get_fmode(_Out_ int *_PMode); #ifdef _M_CEE_PURE _CRTIMP unsigned int* __cdecl __p__osplatform(); @@ -213,11 +217,11 @@ extern "C" { _CRTIMP extern unsigned int _winminor; #endif /* !_M_CEE_PURE */ - errno_t __cdecl _get_osplatform(unsigned int *_Value); - errno_t __cdecl _get_osver(unsigned int *_Value); - errno_t __cdecl _get_winver(unsigned int *_Value); - errno_t __cdecl _get_winmajor(unsigned int *_Value); - errno_t __cdecl _get_winminor(unsigned int *_Value); + errno_t __cdecl _get_osplatform(_Out_ unsigned int *_Value); + errno_t __cdecl _get_osver(_Out_ unsigned int *_Value); + errno_t __cdecl _get_winver(_Out_ unsigned int *_Value); + errno_t __cdecl _get_winmajor(_Out_ unsigned int *_Value); + errno_t __cdecl _get_winminor(_Out_ unsigned int *_Value); #ifndef _countof #ifndef __cplusplus @@ -233,8 +237,8 @@ extern "C" { #ifndef _CRT_TERMINATE_DEFINED #define _CRT_TERMINATE_DEFINED - __declspec(noreturn) void __cdecl exit(int _Code); - _CRTIMP __declspec(noreturn) void __cdecl _exit(int _Code); + __declspec(noreturn) void __cdecl exit(_In_ int _Code); + _CRTIMP __declspec(noreturn) void __cdecl _exit(_In_ int _Code); #if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */ /* C99 function name */ __declspec(noreturn) void __cdecl _Exit(int); /* Declare to get noreturn attribute. */ @@ -251,212 +255,1080 @@ extern "C" { #endif #endif - _CRTIMP unsigned int __cdecl _set_abort_behavior(unsigned int _Flags,unsigned int _Mask); + _CRTIMP unsigned int __cdecl _set_abort_behavior(_In_ unsigned int _Flags, _In_ unsigned int _Mask); #ifndef _CRT_ABS_DEFINED #define _CRT_ABS_DEFINED - int __cdecl abs(int _X); - long __cdecl labs(long _X); + int __cdecl abs(_In_ int _X); + long __cdecl labs(_In_ long _X); #endif #if _INTEGRAL_MAX_BITS >= 64 __MINGW_EXTENSION __int64 __cdecl _abs64(__int64); #endif int __cdecl atexit(void (__cdecl *)(void)); + #ifndef _CRT_ATOF_DEFINED #define _CRT_ATOF_DEFINED - double __cdecl atof(const char *_String); - double __cdecl _atof_l(const char *_String,_locale_t _Locale); -#endif - int __cdecl atoi(const char *_Str); - _CRTIMP int __cdecl _atoi_l(const char *_Str,_locale_t _Locale); - long __cdecl atol(const char *_Str); - _CRTIMP long __cdecl _atol_l(const char *_Str,_locale_t _Locale); + + _Check_return_ + double + __cdecl + atof( + _In_z_ const char *_String); + + _Check_return_ + double + __cdecl + _atof_l( + _In_z_ const char *_String, + _In_opt_ _locale_t _Locale); + +#endif /* _CRT_ATOF_DEFINED */ + + _Check_return_ + int + __cdecl + atoi( + _In_z_ const char *_Str); + + _Check_return_ + _CRTIMP + int + __cdecl + _atoi_l( + _In_z_ const char *_Str, + _In_opt_ _locale_t _Locale); + + _Check_return_ + long + __cdecl + atol( + _In_z_ const char *_Str); + + _Check_return_ + _CRTIMP + long + __cdecl + _atol_l( + _In_z_ const char *_Str, + _In_opt_ _locale_t _Locale); + #ifndef _CRT_ALGO_DEFINED #define _CRT_ALGO_DEFINED - void *__cdecl bsearch(const void *_Key,const void *_Base,size_t _NumOfElements,size_t _SizeOfElements,int (__cdecl *_PtFuncCompare)(const void *,const void *)); - void __cdecl qsort(void *_Base,size_t _NumOfElements,size_t _SizeOfElements,int (__cdecl *_PtFuncCompare)(const void *,const void *)); -#endif + + _Check_return_ + void* + __cdecl + bsearch( + _In_ const void *_Key, + _In_reads_bytes_(_NumOfElements * _SizeOfElements) const void *_Base, + _In_ size_t _NumOfElements, + _In_ size_t _SizeOfElements, + _In_ int (__cdecl *_PtFuncCompare)(const void *,const void *)); + + void + __cdecl + qsort( + _Inout_updates_bytes_(_NumOfElements * _SizeOfElements) void *_Base, + _In_ size_t _NumOfElements, + _In_ size_t _SizeOfElements, + _In_ int (__cdecl *_PtFuncCompare)(const void *,const void *)); + +#endif /* _CRT_ALGO_DEFINED */ #if !defined(__GNUC__) && !defined(__clang__) - unsigned short __cdecl _byteswap_ushort(unsigned short _Short); - unsigned long __cdecl _byteswap_ulong (unsigned long _Long); + + _Check_return_ + unsigned short + __cdecl + _byteswap_ushort( + _In_ unsigned short _Short); + + _Check_return_ + unsigned long + __cdecl + _byteswap_ulong( + _In_ unsigned long _Long); + #if _INTEGRAL_MAX_BITS >= 64 - __MINGW_EXTENSION unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64 _Int64); -#endif + _Check_return_ + __MINGW_EXTENSION + unsigned __int64 + __cdecl + _byteswap_uint64( + _In_ unsigned __int64 _Int64); #endif - div_t __cdecl div(int _Numerator,int _Denominator); - char *__cdecl getenv(const char *_VarName); - _CRTIMP char *__cdecl _itoa(int _Value,char *_Dest,int _Radix); +#endif /* !defined(__GNUC__) && !defined(__clang__) */ + + _Check_return_ + div_t + __cdecl + div( + _In_ int _Numerator, + _In_ int _Denominator); + + _Check_return_ + char* + __cdecl + getenv( + _In_z_ const char *_VarName); + + _CRTIMP + char* + __cdecl + _itoa( + _In_ int _Value, + _Pre_notnull_ _Post_z_ char *_Dest, + _In_ int _Radix); + #if _INTEGRAL_MAX_BITS >= 64 - __MINGW_EXTENSION _CRTIMP char *__cdecl _i64toa(__int64 _Val,char *_DstBuf,int _Radix); - __MINGW_EXTENSION _CRTIMP char *__cdecl _ui64toa(unsigned __int64 _Val,char *_DstBuf,int _Radix); - __MINGW_EXTENSION _CRTIMP __int64 __cdecl _atoi64(const char *_String); - __MINGW_EXTENSION _CRTIMP __int64 __cdecl _atoi64_l(const char *_String,_locale_t _Locale); - __MINGW_EXTENSION _CRTIMP __int64 __cdecl _strtoi64(const char *_String,char **_EndPtr,int _Radix); - __MINGW_EXTENSION _CRTIMP __int64 __cdecl _strtoi64_l(const char *_String,char **_EndPtr,int _Radix,_locale_t _Locale); - __MINGW_EXTENSION _CRTIMP unsigned __int64 __cdecl _strtoui64(const char *_String,char **_EndPtr,int _Radix); - __MINGW_EXTENSION _CRTIMP unsigned __int64 __cdecl _strtoui64_l(const char *_String,char **_EndPtr,int _Radix,_locale_t _Locale); -#endif - ldiv_t __cdecl ldiv(long _Numerator,long _Denominator); - _CRTIMP char *__cdecl _ltoa(long _Value,char *_Dest,int _Radix); - int __cdecl mblen(const char *_Ch,size_t _MaxCount); - _CRTIMP int __cdecl _mblen_l(const char *_Ch,size_t _MaxCount,_locale_t _Locale); - _CRTIMP size_t __cdecl _mbstrlen(const char *_Str); - _CRTIMP size_t __cdecl _mbstrlen_l(const char *_Str,_locale_t _Locale); - _CRTIMP size_t __cdecl _mbstrnlen(const char *_Str,size_t _MaxCount); - _CRTIMP size_t __cdecl _mbstrnlen_l(const char *_Str,size_t _MaxCount,_locale_t _Locale); - int __cdecl mbtowc(wchar_t *_DstCh,const char *_SrcCh,size_t _SrcSizeInBytes); - _CRTIMP int __cdecl _mbtowc_l(wchar_t *_DstCh,const char *_SrcCh,size_t _SrcSizeInBytes,_locale_t _Locale); - size_t __cdecl mbstowcs(wchar_t *_Dest,const char *_Source,size_t _MaxCount); - _CRTIMP size_t __cdecl _mbstowcs_l(wchar_t *_Dest,const char *_Source,size_t _MaxCount,_locale_t _Locale); - int __cdecl rand(void); - _CRTIMP int __cdecl _set_error_mode(int _Mode); - void __cdecl srand(unsigned int _Seed); - double __cdecl strtod(const char *_Str,char **_EndPtr); - float __cdecl strtof(const char *nptr, char **endptr); + + __MINGW_EXTENSION + _CRTIMP + char* + __cdecl + _i64toa( + _In_ __int64 _Val, + _Pre_notnull_ _Post_z_ char *_DstBuf, + _In_ int _Radix); + + __MINGW_EXTENSION + _CRTIMP + char* + __cdecl + _ui64toa( + _In_ unsigned __int64 _Val, + _Pre_notnull_ _Post_z_ char *_DstBuf, + _In_ int _Radix); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + __int64 + __cdecl + _atoi64( + _In_z_ const char *_String); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + __int64 + __cdecl + _atoi64_l( + _In_z_ const char *_String, + _In_opt_ _locale_t _Locale); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + __int64 + __cdecl + _strtoi64( + _In_z_ const char *_String, + _Out_opt_ _Deref_post_z_ char **_EndPtr, + _In_ int _Radix); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + __int64 + __cdecl + _strtoi64_l( + _In_z_ const char *_String, + _Out_opt_ _Deref_post_z_ char **_EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + unsigned __int64 + __cdecl + _strtoui64( + _In_z_ const char *_String, + _Out_opt_ _Deref_post_z_ char **_EndPtr, + _In_ int _Radix); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + unsigned __int64 + __cdecl + _strtoui64_l( + _In_z_ const char *_String, + _Out_opt_ _Deref_post_z_ char **_EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale); + +#endif /* _INTEGRAL_MAX_BITS >= 64 */ + + ldiv_t + __cdecl + ldiv( + _In_ long _Numerator, + _In_ long _Denominator); + + _CRTIMP + char* + __cdecl + _ltoa( + _In_ long _Value, + _Pre_notnull_ _Post_z_ char *_Dest, + _In_ int _Radix); + + _Check_return_ + int + __cdecl + mblen( + _In_reads_bytes_opt_(_MaxCount) _Pre_opt_z_ const char *_Ch, + _In_ size_t _MaxCount); + + _Check_return_ + _CRTIMP + int + __cdecl + _mblen_l( + _In_reads_bytes_opt_(_MaxCount) _Pre_opt_z_ const char *_Ch, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + size_t + __cdecl + _mbstrlen( + _In_z_ const char *_Str); + + _Check_return_ + _CRTIMP + size_t + __cdecl + _mbstrlen_l( + _In_z_ const char *_Str, + _In_opt_ _locale_t _Locale); + + _Success_(return>0) + _Check_return_ + _CRTIMP + size_t + __cdecl + _mbstrnlen( + _In_z_ const char *_Str, + _In_ size_t _MaxCount); + + _Check_return_ + _CRTIMP + size_t + __cdecl + _mbstrnlen_l( + _In_z_ const char *_Str, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale); + + int + __cdecl + mbtowc( + _Pre_notnull_ _Post_z_ wchar_t *_DstCh, + _In_reads_bytes_opt_(_SrcSizeInBytes) _Pre_opt_z_ const char *_SrcCh, + _In_ size_t _SrcSizeInBytes); + + _CRTIMP + int + __cdecl + _mbtowc_l( + _Pre_notnull_ _Post_z_ wchar_t *_DstCh, + _In_reads_bytes_opt_(_SrcSizeInBytes) _Pre_opt_z_ const char *_SrcCh, + _In_ size_t _SrcSizeInBytes, + _In_opt_ _locale_t _Locale); + + size_t + __cdecl + mbstowcs( + _Out_writes_opt_z_(_MaxCount) wchar_t *_Dest, + _In_z_ const char *_Source, + _In_ size_t _MaxCount); + + _CRTIMP + size_t + __cdecl + _mbstowcs_l( + _Out_writes_opt_z_(_MaxCount) wchar_t *_Dest, + _In_z_ const char *_Source, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale); + + _Check_return_ + int + __cdecl + rand(void); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _set_error_mode( + _In_ int _Mode); + + void + __cdecl + srand( + _In_ unsigned int _Seed); + + _Check_return_ + double + __cdecl + strtod( + _In_z_ const char *_Str, + _Out_opt_ _Deref_post_z_ char **_EndPtr); + + float + __cdecl + strtof( + const char *nptr, + char **endptr); + #if !defined __NO_ISOCEXT /* in libmingwex.a */ float __cdecl strtof (const char * __restrict__, char ** __restrict__); long double __cdecl strtold(const char * __restrict__, char ** __restrict__); #endif /* __NO_ISOCEXT */ - _CRTIMP double __cdecl _strtod_l(const char *_Str,char **_EndPtr,_locale_t _Locale); - long __cdecl strtol(const char *_Str,char **_EndPtr,int _Radix); - _CRTIMP long __cdecl _strtol_l(const char *_Str,char **_EndPtr,int _Radix,_locale_t _Locale); - unsigned long __cdecl strtoul(const char *_Str,char **_EndPtr,int _Radix); - _CRTIMP unsigned long __cdecl _strtoul_l(const char *_Str,char **_EndPtr,int _Radix,_locale_t _Locale); + + _Check_return_ + _CRTIMP + double + __cdecl + _strtod_l( + _In_z_ const char *_Str, + _Out_opt_ _Deref_post_z_ char **_EndPtr, + _In_opt_ _locale_t _Locale); + + _Check_return_ + long + __cdecl + strtol( + _In_z_ const char *_Str, + _Out_opt_ _Deref_post_z_ char **_EndPtr, + _In_ int _Radix); + + _Check_return_ + _CRTIMP + long + __cdecl + _strtol_l( + _In_z_ const char *_Str, + _Out_opt_ _Deref_post_z_ char **_EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale); + + _Check_return_ + unsigned long + __cdecl + strtoul( + _In_z_ const char *_Str, + _Out_opt_ _Deref_post_z_ char **_EndPtr, + _In_ int _Radix); + + _Check_return_ + _CRTIMP + unsigned long + __cdecl + _strtoul_l( + _In_z_ const char *_Str, + _Out_opt_ _Deref_post_z_ char **_EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale); + #ifndef _CRT_SYSTEM_DEFINED #define _CRT_SYSTEM_DEFINED - int __cdecl system(const char *_Command); + int + __cdecl + system( + _In_opt_z_ const char *_Command); #endif - _CRTIMP char *__cdecl _ultoa(unsigned long _Value,char *_Dest,int _Radix); - int __cdecl wctomb(char *_MbCh,wchar_t _WCh); - _CRTIMP int __cdecl _wctomb_l(char *_MbCh,wchar_t _WCh,_locale_t _Locale); - size_t __cdecl wcstombs(char *_Dest,const wchar_t *_Source,size_t _MaxCount); - _CRTIMP size_t __cdecl _wcstombs_l(char *_Dest,const wchar_t *_Source,size_t _MaxCount,_locale_t _Locale); + + _CRTIMP + char* + __cdecl + _ultoa( + _In_ unsigned long _Value, + _Pre_notnull_ _Post_z_ char *_Dest, + _In_ int _Radix); + + int + __cdecl + wctomb( + _Out_writes_opt_z_(MB_LEN_MAX) char *_MbCh, + _In_ wchar_t _WCh); + + _CRTIMP + int + __cdecl + _wctomb_l( + _Pre_maybenull_ _Post_z_ char *_MbCh, + _In_ wchar_t _WCh, + _In_opt_ _locale_t _Locale); + + size_t + __cdecl + wcstombs( + _Out_writes_opt_z_(_MaxCount) char *_Dest, + _In_z_ const wchar_t *_Source, + _In_ size_t _MaxCount); + + _CRTIMP + size_t + __cdecl + _wcstombs_l( + _Out_writes_opt_z_(_MaxCount) char *_Dest, + _In_z_ const wchar_t *_Source, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale); #ifndef _CRT_ALLOCATION_DEFINED #define _CRT_ALLOCATION_DEFINED - void *__cdecl calloc(size_t _NumOfElements,size_t _SizeOfElements); - void __cdecl free(void *_Memory); - void *__cdecl malloc(size_t _Size); - void *__cdecl realloc(void *_Memory,size_t _NewSize); - _CRTIMP void *__cdecl _recalloc(void *_Memory,size_t _Count,size_t _Size); + + _Check_return_ + _Ret_maybenull_ + _Post_writable_byte_size_(_NumOfElements * _SizeOfElements) + void* + __cdecl + calloc( + _In_ size_t _NumOfElements, + _In_ size_t _SizeOfElements); + + void + __cdecl + free( + _Pre_maybenull_ _Post_invalid_ void *_Memory); + + _Check_return_ + _Ret_maybenull_ + _Post_writable_byte_size_(_Size) + void* + __cdecl + malloc( + _In_ size_t _Size); + + _Check_return_ + _Ret_maybenull_ + _Post_writable_byte_size_(_NewSize) + void* + __cdecl + realloc( + _Pre_maybenull_ _Post_invalid_ void *_Memory, + _In_ size_t _NewSize); + + _Check_return_ + _Ret_maybenull_ + _Post_writable_byte_size_(_Count * _Size) + _CRTIMP + void* + __cdecl + _recalloc( + _Pre_maybenull_ _Post_invalid_ void *_Memory, + _In_ size_t _Count, + _In_ size_t _Size); + /* Make sure that X86intrin.h doesn't produce here collisions. */ #if (!defined (_XMMINTRIN_H_INCLUDED) && !defined (_MM_MALLOC_H_INCLUDED)) || defined(_aligned_malloc) #pragma push_macro("_aligned_free") #pragma push_macro("_aligned_malloc") #undef _aligned_free #undef _aligned_malloc - _CRTIMP void __cdecl _aligned_free(void *_Memory); - _CRTIMP void *__cdecl _aligned_malloc(size_t _Size,size_t _Alignment); + + _CRTIMP + void + __cdecl + _aligned_free( + _Pre_maybenull_ _Post_invalid_ void *_Memory); + + _Check_return_ + _Ret_maybenull_ + _Post_writable_byte_size_(_Size) + _CRTIMP + void* + __cdecl + _aligned_malloc( + _In_ size_t _Size, + _In_ size_t _Alignment); + #pragma pop_macro("_aligned_free") #pragma pop_macro("_aligned_malloc") #endif - _CRTIMP void *__cdecl _aligned_offset_malloc(size_t _Size,size_t _Alignment,size_t _Offset); - _CRTIMP void *__cdecl _aligned_realloc(void *_Memory,size_t _Size,size_t _Alignment); - _CRTIMP void *__cdecl _aligned_recalloc(void *_Memory,size_t _Count,size_t _Size,size_t _Alignment); - _CRTIMP void *__cdecl _aligned_offset_realloc(void *_Memory,size_t _Size,size_t _Alignment,size_t _Offset); - _CRTIMP void *__cdecl _aligned_offset_recalloc(void *_Memory,size_t _Count,size_t _Size,size_t _Alignment,size_t _Offset); -#endif + + _Check_return_ + _Ret_maybenull_ + _Post_writable_byte_size_(_Size) + _CRTIMP + void* + __cdecl + _aligned_offset_malloc( + _In_ size_t _Size, + _In_ size_t _Alignment, + _In_ size_t _Offset); + + _Check_return_ + _Ret_maybenull_ + _Post_writable_byte_size_(_Size) + _CRTIMP + void* + __cdecl + _aligned_realloc( + _Pre_maybenull_ _Post_invalid_ void *_Memory, + _In_ size_t _Size, + _In_ size_t _Alignment); + + _Check_return_ + _Ret_maybenull_ + _Post_writable_byte_size_(_Count * _Size) + _CRTIMP + void* + __cdecl + _aligned_recalloc( + _Pre_maybenull_ _Post_invalid_ void *_Memory, + _In_ size_t _Count, + _In_ size_t _Size, + _In_ size_t _Alignment); + + _Check_return_ + _Ret_maybenull_ + _Post_writable_byte_size_(_Size) + _CRTIMP + void* + __cdecl + _aligned_offset_realloc( + _Pre_maybenull_ _Post_invalid_ void *_Memory, + _In_ size_t _Size, + _In_ size_t _Alignment, + _In_ size_t _Offset); + + _Check_return_ + _Ret_maybenull_ + _Post_writable_byte_size_(_Count * _Size) + _CRTIMP + void* + __cdecl + _aligned_offset_recalloc( + _Pre_maybenull_ _Post_invalid_ void *_Memory, + _In_ size_t _Count, + _In_ size_t _Size, + _In_ size_t _Alignment, + _In_ size_t _Offset); + +#endif /* _CRT_ALLOCATION_DEFINED */ #ifndef _WSTDLIB_DEFINED #define _WSTDLIB_DEFINED - _CRTIMP wchar_t *__cdecl _itow(int _Value,wchar_t *_Dest,int _Radix); - _CRTIMP wchar_t *__cdecl _ltow(long _Value,wchar_t *_Dest,int _Radix); - _CRTIMP wchar_t *__cdecl _ultow(unsigned long _Value,wchar_t *_Dest,int _Radix); - double __cdecl wcstod(const wchar_t *_Str,wchar_t **_EndPtr); - float __cdecl wcstof(const wchar_t *nptr, wchar_t **endptr); + _CRTIMP + wchar_t* + __cdecl + _itow( + _In_ int _Value, + _Pre_notnull_ _Post_z_ wchar_t *_Dest, + _In_ int _Radix); + + _CRTIMP + wchar_t* + __cdecl + _ltow( + _In_ long _Value, + _Pre_notnull_ _Post_z_ wchar_t *_Dest, + _In_ int _Radix); + + _CRTIMP + wchar_t* + __cdecl + _ultow( + _In_ unsigned long _Value, + _Pre_notnull_ _Post_z_ wchar_t *_Dest, + _In_ int _Radix); + + _Check_return_ + double + __cdecl + wcstod( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr); + + float + __cdecl + wcstof( + const wchar_t *nptr, + wchar_t **endptr); + #if !defined __NO_ISOCEXT /* in libmingwex.a */ float __cdecl wcstof( const wchar_t * __restrict__, wchar_t ** __restrict__); long double __cdecl wcstold(const wchar_t * __restrict__, wchar_t ** __restrict__); #endif /* __NO_ISOCEXT */ - _CRTIMP double __cdecl _wcstod_l(const wchar_t *_Str,wchar_t **_EndPtr,_locale_t _Locale); - long __cdecl wcstol(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix); - _CRTIMP long __cdecl _wcstol_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale); - unsigned long __cdecl wcstoul(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix); - _CRTIMP unsigned long __cdecl _wcstoul_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale); - _CRTIMP wchar_t *__cdecl _wgetenv(const wchar_t *_VarName); + + _Check_return_ + _CRTIMP + double + __cdecl + _wcstod_l( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_opt_ _locale_t _Locale); + + _Check_return_ + long + __cdecl + wcstol( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_ int _Radix); + + _Check_return_ + _CRTIMP + long + __cdecl + _wcstol_l( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale); + + _Check_return_ + unsigned long + __cdecl + wcstoul( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_ int _Radix); + + _Check_return_ + _CRTIMP + unsigned long + __cdecl + _wcstoul_l( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + wchar_t* + __cdecl + _wgetenv( + _In_z_ const wchar_t *_VarName); + #ifndef _CRT_WSYSTEM_DEFINED #define _CRT_WSYSTEM_DEFINED - _CRTIMP int __cdecl _wsystem(const wchar_t *_Command); + _CRTIMP + int + __cdecl + _wsystem( + _In_opt_z_ const wchar_t *_Command); #endif - _CRTIMP double __cdecl _wtof(const wchar_t *_Str); - _CRTIMP double __cdecl _wtof_l(const wchar_t *_Str,_locale_t _Locale); - _CRTIMP int __cdecl _wtoi(const wchar_t *_Str); - _CRTIMP int __cdecl _wtoi_l(const wchar_t *_Str,_locale_t _Locale); - _CRTIMP long __cdecl _wtol(const wchar_t *_Str); - _CRTIMP long __cdecl _wtol_l(const wchar_t *_Str,_locale_t _Locale); + + _Check_return_ + _CRTIMP + double + __cdecl + _wtof( + _In_z_ const wchar_t *_Str); + + _Check_return_ + _CRTIMP + double + __cdecl + _wtof_l( + _In_z_ const wchar_t *_Str, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + _wtoi( + _In_z_ const wchar_t *_Str); + + _Check_return_ + _CRTIMP + int + __cdecl + _wtoi_l( + _In_z_ const wchar_t *_Str, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + long + __cdecl + _wtol( + _In_z_ const wchar_t *_Str); + + _Check_return_ + _CRTIMP + long + __cdecl + _wtol_l( + _In_z_ const wchar_t *_Str, + _In_opt_ _locale_t _Locale); #if _INTEGRAL_MAX_BITS >= 64 - __MINGW_EXTENSION _CRTIMP wchar_t *__cdecl _i64tow(__int64 _Val,wchar_t *_DstBuf,int _Radix); - __MINGW_EXTENSION _CRTIMP wchar_t *__cdecl _ui64tow(unsigned __int64 _Val,wchar_t *_DstBuf,int _Radix); - __MINGW_EXTENSION _CRTIMP __int64 __cdecl _wtoi64(const wchar_t *_Str); - __MINGW_EXTENSION _CRTIMP __int64 __cdecl _wtoi64_l(const wchar_t *_Str,_locale_t _Locale); - __MINGW_EXTENSION _CRTIMP __int64 __cdecl _wcstoi64(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix); - __MINGW_EXTENSION _CRTIMP __int64 __cdecl _wcstoi64_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale); - __MINGW_EXTENSION _CRTIMP unsigned __int64 __cdecl _wcstoui64(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix); - __MINGW_EXTENSION _CRTIMP unsigned __int64 __cdecl _wcstoui64_l(const wchar_t *_Str ,wchar_t **_EndPtr,int _Radix,_locale_t _Locale); -#endif -#endif + + __MINGW_EXTENSION + _CRTIMP + wchar_t* + __cdecl + _i64tow( + _In_ __int64 _Val, + _Pre_notnull_ _Post_z_ wchar_t *_DstBuf, + _In_ int _Radix); + + __MINGW_EXTENSION + _CRTIMP + wchar_t* + __cdecl + _ui64tow( + _In_ unsigned __int64 _Val, + _Pre_notnull_ _Post_z_ wchar_t *_DstBuf, + _In_ int _Radix); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + __int64 + __cdecl + _wtoi64( + _In_z_ const wchar_t *_Str); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + __int64 + __cdecl + _wtoi64_l( + _In_z_ const wchar_t *_Str, + _In_opt_ _locale_t _Locale); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + __int64 + __cdecl + _wcstoi64( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_ int _Radix); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + __int64 + __cdecl + _wcstoi64_l( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + unsigned __int64 + __cdecl + _wcstoui64( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_ int _Radix); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + unsigned __int64 + __cdecl + _wcstoui64_l( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale); + +#endif /* _INTEGRAL_MAX_BITS >= 64 */ + +#endif /* _WSTDLIB_DEFINED */ #ifndef _POSIX_ #define _CVTBUFSIZE (309+40) - _CRTIMP char *__cdecl _fullpath(char *_FullPath,const char *_Path,size_t _SizeInBytes); - _CRTIMP char *__cdecl _ecvt(double _Val,int _NumOfDigits,int *_PtDec,int *_PtSign); - _CRTIMP char *__cdecl _fcvt(double _Val,int _NumOfDec,int *_PtDec,int *_PtSign); - _CRTIMP char *__cdecl _gcvt(double _Val,int _NumOfDigits,char *_DstBuf); - _CRTIMP int __cdecl _atodbl(_CRT_DOUBLE *_Result,char *_Str); - _CRTIMP int __cdecl _atoldbl(_LDOUBLE *_Result,char *_Str); - _CRTIMP int __cdecl _atoflt(_CRT_FLOAT *_Result,char *_Str); - _CRTIMP int __cdecl _atodbl_l(_CRT_DOUBLE *_Result,char *_Str,_locale_t _Locale); - _CRTIMP int __cdecl _atoldbl_l(_LDOUBLE *_Result,char *_Str,_locale_t _Locale); - _CRTIMP int __cdecl _atoflt_l(_CRT_FLOAT *_Result,char *_Str,_locale_t _Locale); - unsigned long __cdecl _lrotl(unsigned long _Val,int _Shift); - unsigned long __cdecl _lrotr(unsigned long _Val,int _Shift); - _CRTIMP void __cdecl _makepath(char *_Path,const char *_Drive,const char *_Dir,const char *_Filename,const char *_Ext); - _onexit_t __cdecl _onexit(_onexit_t _Func); + + _Check_return_ + _CRTIMP + char* + __cdecl + _fullpath( + _Out_writes_opt_z_(_SizeInBytes) char *_FullPath, + _In_z_ const char *_Path, + _In_ size_t _SizeInBytes); + + _Check_return_ + _CRTIMP + char* + __cdecl + _ecvt( + _In_ double _Val, + _In_ int _NumOfDigits, + _Out_ int *_PtDec, + _Out_ int *_PtSign); + + _Check_return_ + _CRTIMP + char* + __cdecl + _fcvt( + _In_ double _Val, + _In_ int _NumOfDec, + _Out_ int *_PtDec, + _Out_ int *_PtSign); + + _CRTIMP + char* + __cdecl + _gcvt( + _In_ double _Val, + _In_ int _NumOfDigits, + _Pre_notnull_ _Post_z_ char *_DstBuf); + + _Check_return_ + _CRTIMP + int + __cdecl + _atodbl( + _Out_ _CRT_DOUBLE *_Result, + _In_z_ char *_Str); + + _Check_return_ + _CRTIMP + int + __cdecl + _atoldbl( + _Out_ _LDOUBLE *_Result, + _In_z_ char *_Str); + + _Check_return_ + _CRTIMP + int + __cdecl + _atoflt( + _Out_ _CRT_FLOAT *_Result, + _In_z_ char *_Str); + + _Check_return_ + _CRTIMP + int + __cdecl + _atodbl_l( + _Out_ _CRT_DOUBLE *_Result, + _In_z_ char *_Str, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + _atoldbl_l( + _Out_ _LDOUBLE *_Result, + _In_z_ char *_Str, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + _atoflt_l( + _Out_ _CRT_FLOAT *_Result, + _In_z_ char *_Str, + _In_opt_ _locale_t _Locale); + + unsigned long + __cdecl + _lrotl( + _In_ unsigned long _Val, + _In_ int _Shift); + + unsigned long + __cdecl + _lrotr( + _In_ unsigned long _Val, + _In_ int _Shift); + + _CRTIMP + void + __cdecl + _makepath( + _Pre_notnull_ _Post_z_ char *_Path, + _In_opt_z_ const char *_Drive, + _In_opt_z_ const char *_Dir, + _In_opt_z_ const char *_Filename, + _In_opt_z_ const char *_Ext); + + _onexit_t + __cdecl + _onexit( + _In_opt_ _onexit_t _Func); #ifndef _CRT_PERROR_DEFINED #define _CRT_PERROR_DEFINED - void __cdecl perror(const char *_ErrMsg); + void + __cdecl + perror( + _In_opt_z_ const char *_ErrMsg); #endif - _CRTIMP int __cdecl _putenv(const char *_EnvString); + + _Check_return_ + _CRTIMP + int + __cdecl + _putenv( + _In_z_ const char *_EnvString); + #if !defined(__GNUC__) && !defined(__clang__) - unsigned int __cdecl _rotl(unsigned int _Val,int _Shift); + + unsigned int + __cdecl + _rotl( + _In_ unsigned int _Val, + _In_ int _Shift); + #if _INTEGRAL_MAX_BITS >= 64 - __MINGW_EXTENSION unsigned __int64 __cdecl _rotl64(unsigned __int64 _Val,int _Shift); + __MINGW_EXTENSION + unsigned __int64 + __cdecl + _rotl64( + _In_ unsigned __int64 _Val, + _In_ int _Shift); #endif - unsigned int __cdecl _rotr(unsigned int _Val,int _Shift); + + unsigned int + __cdecl + _rotr( + _In_ unsigned int _Val, + _In_ int _Shift); + #if _INTEGRAL_MAX_BITS >= 64 - __MINGW_EXTENSION unsigned __int64 __cdecl _rotr64(unsigned __int64 _Val,int _Shift); + __MINGW_EXTENSION + unsigned __int64 + __cdecl + _rotr64( + _In_ unsigned __int64 _Val, + _In_ int _Shift); #endif -#endif - _CRTIMP void __cdecl _searchenv(const char *_Filename,const char *_EnvVar,char *_ResultPath); - _CRTIMP void __cdecl _splitpath(const char *_FullPath,char *_Drive,char *_Dir,char *_Filename,char *_Ext); - _CRTIMP void __cdecl _swab(char *_Buf1,char *_Buf2,int _SizeInBytes); + +#endif /* !defined(__GNUC__) && !defined(__clang__) */ + + _CRTIMP + void + __cdecl + _searchenv( + _In_z_ const char *_Filename, + _In_z_ const char *_EnvVar, + _Pre_notnull_ _Post_z_ char *_ResultPath); + + _CRTIMP + void + __cdecl + _splitpath( + _In_z_ const char *_FullPath, + _Pre_maybenull_ _Post_z_ char *_Drive, + _Pre_maybenull_ _Post_z_ char *_Dir, + _Pre_maybenull_ _Post_z_ char *_Filename, + _Pre_maybenull_ _Post_z_ char *_Ext); + + _CRTIMP + void + __cdecl + _swab( + _Inout_updates_(_SizeInBytes) _Post_readable_size_(_SizeInBytes) char *_Buf1, + _Inout_updates_(_SizeInBytes) _Post_readable_size_(_SizeInBytes) char *_Buf2, + int _SizeInBytes); #ifndef _WSTDLIBP_DEFINED #define _WSTDLIBP_DEFINED - _CRTIMP wchar_t *__cdecl _wfullpath(wchar_t *_FullPath,const wchar_t *_Path,size_t _SizeInWords); - _CRTIMP void __cdecl _wmakepath(wchar_t *_ResultPath,const wchar_t *_Drive,const wchar_t *_Dir,const wchar_t *_Filename,const wchar_t *_Ext); + + _Check_return_ + _CRTIMP + wchar_t* + __cdecl + _wfullpath( + _Out_writes_opt_z_(_SizeInWords) wchar_t *_FullPath, + _In_z_ const wchar_t *_Path, + _In_ size_t _SizeInWords); + + _CRTIMP + void + __cdecl + _wmakepath( + _Pre_notnull_ _Post_z_ wchar_t *_ResultPath, + _In_opt_z_ const wchar_t *_Drive, + _In_opt_z_ const wchar_t *_Dir, + _In_opt_z_ const wchar_t *_Filename, + _In_opt_z_ const wchar_t *_Ext); + #ifndef _CRT_WPERROR_DEFINED #define _CRT_WPERROR_DEFINED - _CRTIMP void __cdecl _wperror(const wchar_t *_ErrMsg); -#endif - _CRTIMP int __cdecl _wputenv(const wchar_t *_EnvString); - _CRTIMP void __cdecl _wsearchenv(const wchar_t *_Filename,const wchar_t *_EnvVar,wchar_t *_ResultPath); - _CRTIMP void __cdecl _wsplitpath(const wchar_t *_FullPath,wchar_t *_Drive,wchar_t *_Dir,wchar_t *_Filename,wchar_t *_Ext); + _CRTIMP + void + __cdecl + _wperror( + _In_opt_z_ const wchar_t *_ErrMsg); #endif - _CRTIMP __MINGW_ATTRIB_DEPRECATED void __cdecl _beep(unsigned _Frequency,unsigned _Duration); + _Check_return_ + _CRTIMP + int + __cdecl + _wputenv( + _In_z_ const wchar_t *_EnvString); + + _CRTIMP + void + __cdecl + _wsearchenv( + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *_EnvVar, + _Pre_notnull_ _Post_z_ wchar_t *_ResultPath); + + _CRTIMP + void + __cdecl + _wsplitpath( + _In_z_ const wchar_t *_FullPath, + _Pre_maybenull_ _Post_z_ wchar_t *_Drive, + _Pre_maybenull_ _Post_z_ wchar_t *_Dir, + _Pre_maybenull_ _Post_z_ wchar_t *_Filename, + _Pre_maybenull_ _Post_z_ wchar_t *_Ext); + +#endif /* _WSTDLIBP_DEFINED */ + + _CRTIMP + __MINGW_ATTRIB_DEPRECATED + void + __cdecl + _beep( + _In_ unsigned _Frequency, + _In_ unsigned _Duration); + /* Not to be confused with _set_error_mode (int). */ - _CRTIMP __MINGW_ATTRIB_DEPRECATED void __cdecl _seterrormode(int _Mode); - _CRTIMP __MINGW_ATTRIB_DEPRECATED void __cdecl _sleep(unsigned long _Duration); -#endif + _CRTIMP + __MINGW_ATTRIB_DEPRECATED + void + __cdecl + _seterrormode( + _In_ int _Mode); -#ifndef NO_OLDNAMES + _CRTIMP + __MINGW_ATTRIB_DEPRECATED + void + __cdecl + _sleep( + _In_ unsigned long _Duration); + +#endif /* _POSIX_ */ + +#ifndef NO_OLDNAMES #ifndef _POSIX_ #if 0 #ifndef __cplusplus @@ -467,24 +1339,88 @@ extern "C" { #ifndef min #define min(a,b) (((a) < (b)) ? (a) : (b)) #endif -#endif -#endif +#endif /* NOMINMAX */ +#endif /* __cplusplus */ #endif #define sys_errlist _sys_errlist #define sys_nerr _sys_nerr #define environ _environ - _CRTIMP char *__cdecl ecvt(double _Val,int _NumOfDigits,int *_PtDec,int *_PtSign); - _CRTIMP char *__cdecl fcvt(double _Val,int _NumOfDec,int *_PtDec,int *_PtSign); - _CRTIMP char *__cdecl gcvt(double _Val,int _NumOfDigits,char *_DstBuf); - _CRTIMP char *__cdecl itoa(int _Val,char *_DstBuf,int _Radix); - _CRTIMP char *__cdecl ltoa(long _Val,char *_DstBuf,int _Radix); - _CRTIMP int __cdecl putenv(const char *_EnvString); - _CRTIMP void __cdecl swab(char *_Buf1,char *_Buf2,int _SizeInBytes); - _CRTIMP char *__cdecl ultoa(unsigned long _Val,char *_Dstbuf,int _Radix); - onexit_t __cdecl onexit(onexit_t _Func); -#endif -#endif + + _Check_return_ + _CRTIMP + char* + __cdecl + ecvt( + _In_ double _Val, + _In_ int _NumOfDigits, + _Out_ int *_PtDec, + _Out_ int *_PtSign); + + _Check_return_ + _CRTIMP + char* + __cdecl + fcvt( + _In_ double _Val, + _In_ int _NumOfDec, + _Out_ int *_PtDec, + _Out_ int *_PtSign); + + _CRTIMP + char* + __cdecl + gcvt( + _In_ double _Val, + _In_ int _NumOfDigits, + _Pre_notnull_ _Post_z_ char *_DstBuf); + + _CRTIMP + char* + __cdecl + itoa( + _In_ int _Val, + _Pre_notnull_ _Post_z_ char *_DstBuf, + _In_ int _Radix); + + _CRTIMP + char* + __cdecl + ltoa( + _In_ long _Val, + _Pre_notnull_ _Post_z_ char *_DstBuf, + _In_ int _Radix); + + _Check_return_ + _CRTIMP + int + __cdecl + putenv( + _In_z_ const char *_EnvString); + + _CRTIMP + void + __cdecl + swab( + _Inout_updates_z_(_SizeInBytes) char *_Buf1, + _Inout_updates_z_(_SizeInBytes) char *_Buf2, + _In_ int _SizeInBytes); + + _CRTIMP + char* + __cdecl + ultoa( + _In_ unsigned long _Val, + _Pre_notnull_ _Post_z_ char *_Dstbuf, + _In_ int _Radix); + + onexit_t + __cdecl + onexit( + _In_opt_ onexit_t _Func); + +#endif /* _POSIX_ */ +#endif /* NO_OLDNAMES */ #if !defined __NO_ISOCEXT /* externs in static libmingwex.a */ diff --git a/include/crt/string.h b/include/crt/string.h index 214b1aa8369..c3c4622d756 100644 --- a/include/crt/string.h +++ b/include/crt/string.h @@ -27,163 +27,1114 @@ extern "C" { #ifndef _CRT_MEMORY_DEFINED #define _CRT_MEMORY_DEFINED - _CRTIMP void *__cdecl _memccpy(void *_Dst,const void *_Src,int _Val,size_t _MaxCount); - _CRTIMP _CONST_RETURN void *__cdecl memchr(const void *_Buf ,int _Val,size_t _MaxCount); - _CRTIMP int __cdecl _memicmp(const void *_Buf1,const void *_Buf2,size_t _Size); - _CRTIMP int __cdecl _memicmp_l(const void *_Buf1,const void *_Buf2,size_t _Size,_locale_t _Locale); - int __cdecl memcmp(const void *_Buf1,const void *_Buf2,size_t _Size); - _CRT_INSECURE_DEPRECATE_MEMORY(memcpy_s) void *__cdecl memcpy(void *_Dst,const void *_Src,size_t _Size); - void *__cdecl memset(void *_Dst,int _Val,size_t _Size); -#ifndef NO_OLDNAMES - _CRTIMP _CRT_NONSTDC_DEPRECATE(_memccpy) void *__cdecl memccpy(void *_Dst,const void *_Src,int _Val,size_t _Size); - _CRTIMP _CRT_NONSTDC_DEPRECATE(_memicmp) int __cdecl memicmp(const void *_Buf1,const void *_Buf2,size_t _Size); -#endif -#endif - char *__cdecl _strset(char *_Str,int _Val); - char *__cdecl strcpy(char *_Dest,const char *_Source); - char *__cdecl strcat(char *_Dest,const char *_Source); - int __cdecl strcmp(const char *_Str1,const char *_Str2); - size_t __cdecl strlen(const char *_Str); - _CRTIMP size_t __cdecl strnlen(const char *_Str,size_t _MaxCount); + _CRTIMP + void* + __cdecl + _memccpy( + _Out_writes_bytes_opt_(_MaxCount) void *_Dst, + _In_ const void *_Src, + _In_ int _Val, + _In_ size_t _MaxCount); + + _Must_inspect_result_ + _CRTIMP + _CONST_RETURN + void* + __cdecl + memchr( + _In_reads_bytes_opt_(_MaxCount) const void *_Buf, + _In_ int _Val, + _In_ size_t _MaxCount); + + _Must_inspect_result_ + _CRTIMP + int + __cdecl + _memicmp( + _In_reads_bytes_opt_(_Size) const void *_Buf1, + _In_reads_bytes_opt_(_Size) const void *_Buf2, + _In_ size_t _Size); + + _Must_inspect_result_ + _CRTIMP + int + __cdecl + _memicmp_l( + _In_reads_bytes_opt_(_Size) const void *_Buf1, + _In_reads_bytes_opt_(_Size) const void *_Buf2, + _In_ size_t _Size, + _In_opt_ _locale_t _Locale); + + _Must_inspect_result_ + int + __cdecl + memcmp( + _In_reads_bytes_(_Size) const void *_Buf1, + _In_reads_bytes_(_Size) const void *_Buf2, + _In_ size_t _Size); + + _Post_equal_to_(_Dst) + _At_buffer_((unsigned char*)_Dst, + _Iter_, + _MaxCount, + _Post_satisfies_(((unsigned char*)_Dst)[_Iter_] == ((unsigned char*)_Src)[_Iter_])) + _CRT_INSECURE_DEPRECATE_MEMORY(memcpy_s) + void* + __cdecl + memcpy( + _Out_writes_bytes_all_(_MaxCount) void *_Dst, + _In_reads_bytes_(_MaxCount) const void *_Src, + _In_ size_t _MaxCount); + + _Post_equal_to_(_Dst) + _At_buffer_((unsigned char*)_Dst, + _Iter_, + _Size, + _Post_satisfies_(((unsigned char*)_Dst)[_Iter_] == _Val)) + void* + __cdecl + memset( + _Out_writes_bytes_all_(_Size) void *_Dst, + _In_ int _Val, + _In_ size_t _Size); + +#ifndef NO_OLDNAMES + + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_memccpy) + void* + __cdecl + memccpy( + _Out_writes_bytes_opt_(_Size) void *_Dst, + _In_reads_bytes_opt_(_Size) const void *_Src, + _In_ int _Val, + _In_ size_t _Size); + + _Check_return_ + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_memicmp) + int + __cdecl + memicmp( + _In_reads_bytes_opt_(_Size) const void *_Buf1, + _In_reads_bytes_opt_(_Size) const void *_Buf2, + _In_ size_t _Size); + +#endif /* NO_OLDNAMES */ + +#endif /* _CRT_MEMORY_DEFINED */ + + char* + __cdecl + _strset( + _Inout_z_ char *_Str, + _In_ int _Val); + + char* + __cdecl + strcpy( + _Out_writes_z_(_String_length_(_Source) + 1) char *_Dest, + _In_z_ const char *_Source); + + char* + __cdecl + strcat( + _Inout_updates_z_(_String_length_(_Dest) + _String_length_(_Source) + 1) char *_Dest, + _In_z_ const char *_Source); + + _Check_return_ + int + __cdecl + strcmp( + _In_z_ const char *_Str1, + _In_z_ const char *_Str2); + + size_t + __cdecl + strlen( + _In_z_ const char *_Str); + + _When_(_MaxCount > _String_length_(_Str), + _Post_satisfies_(return == _String_length_(_Str))) + _When_(_MaxCount <= _String_length_(_Str), + _Post_satisfies_(return == _MaxCount)) + _CRTIMP + size_t + __cdecl + strnlen( + _In_reads_or_z_(_MaxCount) const char *_Str, + _In_ size_t _MaxCount); + + _CRT_INSECURE_DEPRECATE_MEMORY(memmove_s) + void* + __cdecl + memmove( + _Out_writes_bytes_all_opt_(_MaxCount) void *_Dst, + _In_reads_bytes_opt_(_MaxCount) const void *_Src, + _In_ size_t _MaxCount); + + _Check_return_ + _CRTIMP + char* + __cdecl + _strdup( + _In_opt_z_ const char *_Src); + + _Check_return_ + _CRTIMP + _CONST_RETURN + char* + __cdecl + strchr( + _In_z_ const char *_Str, + _In_ int _Val); + + _Check_return_ + _CRTIMP + int + __cdecl + _stricmp( + _In_z_ const char *_Str1, + _In_z_ const char *_Str2); + + _Check_return_ + _CRTIMP + int + __cdecl + _strcmpi( + _In_z_ const char *_Str1, + _In_z_ const char *_Str2); + + _Check_return_ + _CRTIMP + int + __cdecl + _stricmp_l( + _In_z_ const char *_Str1, + _In_z_ const char *_Str2, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + strcoll( + _In_z_ const char *_Str1, + _In_z_ const char *_Str2); + + _Check_return_ + _CRTIMP + int + __cdecl + _strcoll_l( + _In_z_ const char *_Str1, + _In_z_ const char *_Str2, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + _stricoll( + _In_z_ const char *_Str1, + _In_z_ const char *_Str2); + + _Check_return_ + _CRTIMP + int + __cdecl + _stricoll_l( + _In_z_ const char *_Str1, + _In_z_ const char *_Str2, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + _strncoll( + _In_z_ const char *_Str1, + _In_z_ const char *_Str2, + _In_ size_t _MaxCount); + + _Check_return_ + _CRTIMP + int + __cdecl + _strncoll_l( + _In_z_ const char *_Str1, + _In_z_ const char *_Str2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + _strnicoll( + _In_z_ const char *_Str1, + _In_z_ const char *_Str2, + _In_ size_t _MaxCount); + + _Check_return_ + _CRTIMP + int + __cdecl + _strnicoll_l( + _In_z_ const char *_Str1, + _In_z_ const char *_Str2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + size_t + __cdecl + strcspn( + _In_z_ const char *_Str, + _In_z_ const char *_Control); + + _Check_return_ + _CRTIMP + _CRT_INSECURE_DEPRECATE(_strerror_s) + char* + __cdecl + _strerror( + _In_opt_z_ const char *_ErrMsg); + + _Check_return_ + _CRTIMP + _CRT_INSECURE_DEPRECATE(strerror_s) + char* + __cdecl + strerror( + _In_ int); + + _CRTIMP + char* + __cdecl + _strlwr( + _Inout_z_ char *_String); + + char* + strlwr_l( + char *_String, + _locale_t _Locale); + + char* + __cdecl + strncat( + char *_Dest, + const char *_Source, + size_t _Count); + + _Check_return_ + int + __cdecl + strncmp( + _In_reads_or_z_(_MaxCount) const char *_Str1, + _In_reads_or_z_(_MaxCount) const char *_Str2, + _In_ size_t _MaxCount); + + _Check_return_ + _CRTIMP + int + __cdecl + _strnicmp( + _In_reads_or_z_(_MaxCount) const char *_Str1, + _In_reads_or_z_(_MaxCount) const char *_Str2, + _In_ size_t _MaxCount); + + _Check_return_ + _CRTIMP + int + __cdecl + _strnicmp_l( + _In_reads_or_z_(_MaxCount) const char *_Str1, + _In_reads_or_z_(_MaxCount) const char *_Str2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale); + + char* + strncpy( + char *_Dest, + const char *_Source, + size_t _Count); + + _CRTIMP + _CRT_INSECURE_DEPRECATE_CORE(_strnset_s) + char* + __cdecl + _strnset( + char *_Str, + int _Val, + size_t _MaxCount); + + _Check_return_ + _CRTIMP + _CONST_RETURN + char* + __cdecl + strpbrk( + _In_z_ const char *_Str, + _In_z_ const char *_Control); + + _Check_return_ + _CRTIMP + _CONST_RETURN + char* + __cdecl + strrchr( + _In_z_ const char *_Str, + _In_ int _Ch); + + _CRTIMP + char* + __cdecl + _strrev( + _Inout_z_ char *_Str); + + _Check_return_ + _CRTIMP + size_t + __cdecl + strspn( + _In_z_ const char *_Str, + _In_z_ const char *_Control); + + _Check_return_ + _CRTIMP + _CONST_RETURN + char* + __cdecl + strstr( + _In_z_ const char *_Str, + _In_z_ const char *_SubStr); + + _Check_return_ + _CRTIMP + _CRT_INSECURE_DEPRECATE_CORE(strtok_s) + char* + __cdecl + strtok( + _Inout_opt_z_ char *_Str, + _In_z_ const char *_Delim); + + _CRTIMP + char* + __cdecl + _strupr( + _Inout_z_ char *_String); + + _CRTIMP + char* + _strupr_l( + char *_String, + _locale_t _Locale); + + _Check_return_opt_ + _CRTIMP + size_t + __cdecl + strxfrm( + _Out_writes_opt_(_MaxCount) _Post_maybez_ char *_Dst, + _In_z_ const char *_Src, + _In_ size_t _MaxCount); + + _Check_return_opt_ + _CRTIMP + size_t + __cdecl + _strxfrm_l( + _Out_writes_opt_(_MaxCount) _Post_maybez_ char *_Dst, + _In_z_ const char *_Src, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale); - _CRT_INSECURE_DEPRECATE_MEMORY(memmove_s) void *__cdecl memmove(void *_Dst,const void *_Src,size_t _Size); - _CRTIMP char *__cdecl _strdup(const char *_Src); - _CRTIMP _CONST_RETURN char *__cdecl strchr(const char *_Str,int _Val); - _CRTIMP int __cdecl _stricmp(const char *_Str1,const char *_Str2); - _CRTIMP int __cdecl _strcmpi(const char *_Str1,const char *_Str2); - _CRTIMP int __cdecl _stricmp_l(const char *_Str1,const char *_Str2,_locale_t _Locale); - _CRTIMP int __cdecl strcoll(const char *_Str1,const char *_Str2); - _CRTIMP int __cdecl _strcoll_l(const char *_Str1,const char *_Str2,_locale_t _Locale); - _CRTIMP int __cdecl _stricoll(const char *_Str1,const char *_Str2); - _CRTIMP int __cdecl _stricoll_l(const char *_Str1,const char *_Str2,_locale_t _Locale); - _CRTIMP int __cdecl _strncoll (const char *_Str1,const char *_Str2,size_t _MaxCount); - _CRTIMP int __cdecl _strncoll_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale); - _CRTIMP int __cdecl _strnicoll (const char *_Str1,const char *_Str2,size_t _MaxCount); - _CRTIMP int __cdecl _strnicoll_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale); - _CRTIMP size_t __cdecl strcspn(const char *_Str,const char *_Control); - _CRTIMP _CRT_INSECURE_DEPRECATE(_strerror_s) char *__cdecl _strerror(const char *_ErrMsg); - _CRTIMP _CRT_INSECURE_DEPRECATE(strerror_s) char *__cdecl strerror(int); - _CRTIMP char *__cdecl _strlwr(char *_String); - char *strlwr_l(char *_String,_locale_t _Locale); - char *__cdecl strncat(char *_Dest,const char *_Source,size_t _Count); - int __cdecl strncmp(const char *_Str1,const char *_Str2,size_t _MaxCount); - _CRTIMP int __cdecl _strnicmp(const char *_Str1,const char *_Str2,size_t _MaxCount); - _CRTIMP int __cdecl _strnicmp_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale); - char *strncpy(char *_Dest,const char *_Source,size_t _Count); - _CRTIMP _CRT_INSECURE_DEPRECATE_CORE(_strnset_s) char *__cdecl _strnset(char *_Str,int _Val,size_t _MaxCount); - _CRTIMP _CONST_RETURN char *__cdecl strpbrk(const char *_Str,const char *_Control); - _CRTIMP _CONST_RETURN char *__cdecl strrchr(const char *_Str,int _Ch); - _CRTIMP char *__cdecl _strrev(char *_Str); - _CRTIMP size_t __cdecl strspn(const char *_Str,const char *_Control); - _CRTIMP _CONST_RETURN char *__cdecl strstr(const char *_Str,const char *_SubStr); - _CRTIMP _CRT_INSECURE_DEPRECATE_CORE(strtok_s) char *__cdecl strtok(char *_Str,const char *_Delim); - _CRTIMP char *__cdecl _strupr(char *_String); - _CRTIMP char *_strupr_l(char *_String,_locale_t _Locale); - _CRTIMP size_t __cdecl strxfrm(char *_Dst,const char *_Src,size_t _MaxCount); - _CRTIMP size_t __cdecl _strxfrm_l(char *_Dst,const char *_Src,size_t _MaxCount,_locale_t _Locale); #if __STDC_WANT_SECURE_LIB__ - _CRTIMP errno_t __cdecl _strset_s(char *_Dst,size_t _DstSize,int _Value); - _CRTIMP errno_t __cdecl _strerror_s(char *_Buf,size_t _SizeInBytes,const char *_ErrMsg); - _CRTIMP errno_t __cdecl _strlwr_s(char *_Str,size_t _Size); - _CRTIMP errno_t __cdecl _strlwr_s_l(char *_Str,size_t _Size,_locale_t _Locale); - _CRTIMP errno_t __cdecl _strnset_s(char *_Str,size_t _Size,int _Val,size_t _MaxCount); - _CRTIMP errno_t __cdecl _strupr_s(char *_Str,size_t _Size); - _CRTIMP errno_t __cdecl _strupr_s_l(char *_Str,size_t _Size,_locale_t _Locale); - _CRTIMP errno_t __cdecl strcpy_s(char *_Dst, size_t _Size, const char *_Src); - _CRTIMP errno_t __cdecl strcat_s(char *_Dst, size_t _Size, const char *_Src); -#endif -#ifndef NO_OLDNAMES - _CRTIMP _CRT_NONSTDC_DEPRECATE(_strdup) char *__cdecl strdup(const char *_Src); - _CRTIMP _CRT_NONSTDC_DEPRECATE(_strcmpi) int __cdecl strcmpi(const char *_Str1,const char *_Str2); - _CRTIMP _CRT_NONSTDC_DEPRECATE(_stricmp) int __cdecl stricmp(const char *_Str1,const char *_Str2); - _CRTIMP _CRT_NONSTDC_DEPRECATE(_strlwr) char *__cdecl strlwr(char *_Str); - _CRTIMP _CRT_NONSTDC_DEPRECATE(_strnicmp) int __cdecl strnicmp(const char *_Str1,const char *_Str,size_t _MaxCount); + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _strset_s( + _Inout_updates_z_(_DstSize) char *_Dst, + _In_ size_t _DstSize, + _In_ int _Value); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _strerror_s( + _Out_writes_z_(_SizeInBytes) char *_Buf, + _In_ size_t _SizeInBytes, + _In_opt_z_ const char *_ErrMsg); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _strlwr_s( + _Inout_updates_z_(_Size) char *_Str, + _In_ size_t _Size); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _strlwr_s_l( + _Inout_updates_z_(_Size) char *_Str, + _In_ size_t _Size, + _In_opt_ _locale_t _Locale); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _strnset_s( + _Inout_updates_z_(_Size) char *_Str, + _In_ size_t _Size, + _In_ int _Val, + _In_ size_t _MaxCount); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _strupr_s( + _Inout_updates_z_(_Size) char *_Str, + _In_ size_t _Size); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _strupr_s_l( + _Inout_updates_z_(_Size) char *_Str, + _In_ size_t _Size, + _locale_t _Locale); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + strcpy_s( + _Out_writes_z_(_Size) char *_Dst, + _In_ size_t _Size, + _In_z_ const char *_Src); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + strcat_s( + _Inout_updates_z_(_Size) char *_Dst, + _In_ size_t _Size, + _In_z_ const char *_Src); + +#endif /* __STDC_WANT_SECURE_LIB__ */ + +#ifndef NO_OLDNAMES + + _Check_return_ + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_strdup) + char* + __cdecl + strdup( + _In_opt_z_ const char *_Src); + + _Check_return_ + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_strcmpi) + int + __cdecl + strcmpi( + _In_z_ const char *_Str1, + _In_z_ const char *_Str2); + + _Check_return_ + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_stricmp) + int + __cdecl + stricmp( + _In_z_ const char *_Str1, + _In_z_ const char *_Str2); + + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_strlwr) + char* + __cdecl + strlwr( + _Inout_z_ char *_Str); + + _Check_return_ + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_strnicmp) + int + __cdecl + strnicmp( + _In_z_ const char *_Str1, + _In_z_ const char *_Str, + _In_ size_t _MaxCount); + // __CRT_INLINE int __cdecl strncasecmp (const char *__sz1, const char *__sz2, size_t __sizeMaxCompare) { return _strnicmp (__sz1, __sz2, __sizeMaxCompare); } // __CRT_INLINE int __cdecl strcasecmp (const char *__sz1, const char *__sz2) { return _stricmp (__sz1, __sz2); } - _CRTIMP _CRT_NONSTDC_DEPRECATE(_strnset) char *__cdecl strnset(char *_Str,int _Val,size_t _MaxCount); - _CRTIMP _CRT_NONSTDC_DEPRECATE(_strrev) char *__cdecl strrev(char *_Str); - _CRTIMP _CRT_NONSTDC_DEPRECATE(_strset) char *__cdecl strset(char *_Str,int _Val); - _CRTIMP _CRT_NONSTDC_DEPRECATE(_strupr) char *__cdecl strupr(char *_Str); -#endif + + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_strnset) + char* + __cdecl + strnset( + _Inout_updates_z_(_MaxCount) char *_Str, + _In_ int _Val, + _In_ size_t _MaxCount); + + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_strrev) + char* + __cdecl + strrev( + _Inout_z_ char *_Str); + + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_strset) + char* + __cdecl + strset( + _Inout_z_ char *_Str, + _In_ int _Val); + + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_strupr) + char* + __cdecl + strupr( + _Inout_z_ char *_Str); + +#endif /* NO_OLDNAMES */ #ifndef _WSTRING_DEFINED #define _WSTRING_DEFINED - _CRTIMP wchar_t *__cdecl _wcsdup(const wchar_t *_Str); - _CRTIMP _CRT_INSECURE_DEPRECATE(wcsat_s) wchar_t *__cdecl wcscat(wchar_t *_Dest,const wchar_t *_Source); - _CRTIMP _CONST_RETURN wchar_t *__cdecl wcschr(const wchar_t *_Str,wchar_t _Ch); - _CRTIMP int __cdecl wcscmp(const wchar_t *_Str1,const wchar_t *_Str2); - _CRTIMP _CRT_INSECURE_DEPRECATE(wcscpy_s) wchar_t *__cdecl wcscpy(wchar_t *_Dest,const wchar_t *_Source); - _CRTIMP size_t __cdecl wcscspn(const wchar_t *_Str,const wchar_t *_Control); - _CRTIMP wchar_t *wcsncat(wchar_t *_Dest,const wchar_t *_Source,size_t _Count); - -_Ret_range_(==,_String_length_(_Str)) -_CRTIMP -size_t -__cdecl -wcslen( + _Check_return_ + _CRTIMP + wchar_t* + __cdecl + _wcsdup( _In_z_ const wchar_t *_Str); - _CRTIMP _CRT_INSECURE_DEPRECATE(wcsnlen_s) size_t __cdecl wcsnlen(const wchar_t *_Src,size_t _MaxCount); - _CRTIMP int __cdecl wcsncmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount); - _CRTIMP _CRT_INSECURE_DEPRECATE(wcsncpy_s) wchar_t *wcsncpy(wchar_t *_Dest,const wchar_t *_Source,size_t _Count); - _CRTIMP _CONST_RETURN wchar_t *__cdecl wcspbrk(const wchar_t *_Str,const wchar_t *_Control); - _CRTIMP _CONST_RETURN wchar_t *__cdecl wcsrchr(const wchar_t *_Str,wchar_t _Ch); - _CRTIMP size_t __cdecl wcsspn(const wchar_t *_Str,const wchar_t *_Control); - _CRTIMP _CONST_RETURN wchar_t *__cdecl wcsstr(const wchar_t *_Str,const wchar_t *_SubStr); - _CRTIMP _CRT_INSECURE_DEPRECATE_CORE(wcstok_s) wchar_t *__cdecl wcstok(wchar_t *_Str,const wchar_t *_Delim); - _CRTIMP _CRT_INSECURE_DEPRECATE(_wcserror_s) wchar_t *__cdecl _wcserror(int _ErrNum); - _CRTIMP _CRT_INSECURE_DEPRECATE(__wcserror_s) wchar_t *__cdecl __wcserror(const wchar_t *_Str); - _CRTIMP int __cdecl _wcsicmp(const wchar_t *_Str1,const wchar_t *_Str2); - _CRTIMP int __cdecl _wcsicmp_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale); - _CRTIMP int __cdecl _wcsnicmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount); - _CRTIMP int __cdecl _wcsnicmp_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale); - _CRTIMP _CRT_INSECURE_DEPRECATE_CORE(_wcsnset_s) wchar_t *__cdecl _wcsnset(wchar_t *_Str,wchar_t _Val,size_t _MaxCount); - _CRTIMP wchar_t *__cdecl _wcsrev(wchar_t *_Str); - _CRTIMP _CRT_INSECURE_DEPRECATE_CORE(_wcsset_s) wchar_t *__cdecl _wcsset(wchar_t *_Str,wchar_t _Val); - _CRTIMP wchar_t *__cdecl _wcslwr(wchar_t *_String); - _CRTIMP wchar_t *_wcslwr_l(wchar_t *_String,_locale_t _Locale); - _CRTIMP wchar_t *__cdecl _wcsupr(wchar_t *_String); - _CRTIMP wchar_t *_wcsupr_l(wchar_t *_String,_locale_t _Locale); - _CRTIMP size_t __cdecl wcsxfrm(wchar_t *_Dst,const wchar_t *_Src,size_t _MaxCount); - _CRTIMP size_t __cdecl _wcsxfrm_l(wchar_t *_Dst,const wchar_t *_Src,size_t _MaxCount,_locale_t _Locale); - _CRTIMP int __cdecl wcscoll(const wchar_t *_Str1,const wchar_t *_Str2); - _CRTIMP int __cdecl _wcscoll_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale); - _CRTIMP int __cdecl _wcsicoll(const wchar_t *_Str1,const wchar_t *_Str2); - _CRTIMP int __cdecl _wcsicoll_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale); - _CRTIMP int __cdecl _wcsncoll(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount); - _CRTIMP int __cdecl _wcsncoll_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale); - _CRTIMP int __cdecl _wcsnicoll(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount); - _CRTIMP int __cdecl _wcsnicoll_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale); -#if __STDC_WANT_SECURE_LIB__ - _CRTIMP errno_t __cdecl wcsat_s(wchar_t * Dest, size_t SizeInWords, const wchar_t * _Source); - _CRTIMP errno_t __cdecl wcscpy_s(wchar_t * Dest, size_t SizeInWords, const wchar_t * _Source); - _CRTIMP errno_t __cdecl wcsnlen_s(wchar_t **_Src, size_t _MaxCount); - _CRTIMP errno_t __cdecl wcsncpy_s(wchar_t *_Dest, size_t SizeInWords, const wchar_t *_Source ,size_t _Count); - _CRTIMP errno_t __cdecl _wcserror_s(wchar_t *_Buf,size_t _SizeInWords,int _ErrNum); - _CRTIMP errno_t __cdecl __wcserror_s(wchar_t *_Buffer,size_t _SizeInWords,const wchar_t *_ErrMsg); - _CRTIMP errno_t __cdecl _wcsnset_s(wchar_t *_Dst,size_t _DstSizeInWords,wchar_t _Val,size_t _MaxCount); - _CRTIMP errno_t __cdecl _wcsset_s(wchar_t *_Str,size_t _SizeInWords,wchar_t _Val); - _CRTIMP errno_t __cdecl _wcslwr_s(wchar_t *_Str,size_t _SizeInWords); - _CRTIMP errno_t __cdecl _wcslwr_s_l(wchar_t *_Str,size_t _SizeInWords,_locale_t _Locale); - _CRTIMP errno_t __cdecl _wcsupr_s(wchar_t *_Str,size_t _Size); - _CRTIMP errno_t __cdecl _wcsupr_s_l(wchar_t *_Str,size_t _Size,_locale_t _Locale); -#endif + _CRTIMP + _CRT_INSECURE_DEPRECATE(wcsat_s) + wchar_t* + __cdecl + wcscat( + _Inout_updates_z_(_String_length_(_Dest) + _String_length_(_Source) + 1) wchar_t *_Dest, + _In_z_ const wchar_t *_Source); + + _Check_return_ + _When_(return != 0, _Ret_range_(_Str, _Str + _String_length_(_Str) - 1)) + _CRTIMP + _CONST_RETURN + wchar_t* + __cdecl + wcschr( + _In_z_ const wchar_t *_Str, + wchar_t _Ch); + + _Check_return_ + _CRTIMP + int + __cdecl + wcscmp( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2); + + _CRTIMP + _CRT_INSECURE_DEPRECATE(wcscpy_s) + wchar_t* + __cdecl + wcscpy( + _Out_writes_z_(_String_length_(_Source) + 1) wchar_t *_Dest, + _In_z_ const wchar_t *_Source); + + _Check_return_ + _CRTIMP + size_t + __cdecl + wcscspn( + _In_z_ const wchar_t *_Str, + _In_z_ const wchar_t *_Control); + + _CRTIMP + wchar_t* + wcsncat( + wchar_t *_Dest, + const wchar_t *_Source, + size_t _Count); + + _Ret_range_(==,_String_length_(_Str)) + _CRTIMP + size_t + __cdecl + wcslen( + _In_z_ const wchar_t *_Str); + + _When_(_MaxCount > _String_length_(_Src), + _Post_satisfies_(return == _String_length_(_Src))) + _When_(_MaxCount <= _String_length_(_Src), + _Post_satisfies_(return == _MaxCount)) + _CRTIMP + _CRT_INSECURE_DEPRECATE(wcsnlen_s) + size_t + __cdecl + wcsnlen( + _In_reads_or_z_(_MaxCount) const wchar_t *_Src, + _In_ size_t _MaxCount); + + _Check_return_ + _CRTIMP + int + __cdecl + wcsncmp( + _In_reads_or_z_(_MaxCount) const wchar_t *_Str1, + _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, + _In_ size_t _MaxCount); + + _CRTIMP + _CRT_INSECURE_DEPRECATE(wcsncpy_s) + wchar_t* + wcsncpy( + wchar_t *_Dest, + const wchar_t *_Source, + size_t _Count); + + _Check_return_ + _CRTIMP + _CONST_RETURN + wchar_t* + __cdecl + wcspbrk( + _In_z_ const wchar_t *_Str, + _In_z_ const wchar_t *_Control); + + _Check_return_ + _CRTIMP + _CONST_RETURN + wchar_t* + __cdecl + wcsrchr( + _In_z_ const wchar_t *_Str, + _In_ wchar_t _Ch); + + _Check_return_ + _CRTIMP + size_t + __cdecl + wcsspn( + _In_z_ const wchar_t *_Str, + _In_z_ const wchar_t *_Control); + + _When_(return != 0, + _Ret_range_(_Str, _Str + _String_length_(_Str) - 1)) + _CRTIMP + _CONST_RETURN + wchar_t* + __cdecl + wcsstr( + _In_z_ const wchar_t *_Str, + _In_z_ const wchar_t *_SubStr); + + _Check_return_ + _CRTIMP + _CRT_INSECURE_DEPRECATE_CORE(wcstok_s) + wchar_t* + __cdecl + wcstok( + _Inout_opt_z_ wchar_t *_Str, + _In_z_ const wchar_t *_Delim); + + _Check_return_ + _CRTIMP + _CRT_INSECURE_DEPRECATE(_wcserror_s) + wchar_t* + __cdecl + _wcserror( + _In_ int _ErrNum); + + _Check_return_ + _CRTIMP + _CRT_INSECURE_DEPRECATE(__wcserror_s) + wchar_t* + __cdecl + __wcserror( + _In_opt_z_ const wchar_t *_Str); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsicmp( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsicmp_l( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsnicmp( + _In_reads_or_z_(_MaxCount) const wchar_t *_Str1, + _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, + _In_ size_t _MaxCount); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsnicmp_l( + _In_reads_or_z_(_MaxCount) const wchar_t *_Str1, + _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale); + + _CRTIMP + _CRT_INSECURE_DEPRECATE_CORE(_wcsnset_s) + wchar_t* + __cdecl + _wcsnset( + wchar_t *_Str, + wchar_t _Val, + size_t _MaxCount); + + _CRTIMP + wchar_t* + __cdecl + _wcsrev( + _Inout_z_ wchar_t *_Str); + + _CRTIMP + _CRT_INSECURE_DEPRECATE_CORE(_wcsset_s) + wchar_t* + __cdecl + _wcsset( + wchar_t *_Str, + wchar_t _Val); + + _CRTIMP + wchar_t* + __cdecl + _wcslwr( + _Inout_z_ wchar_t *_String); + + _CRTIMP + wchar_t* + _wcslwr_l( + wchar_t *_String, + _locale_t _Locale); + + _CRTIMP + wchar_t* + __cdecl + _wcsupr( + _Inout_z_ wchar_t *_String); + + _CRTIMP + wchar_t* + _wcsupr_l( + wchar_t *_String, + _locale_t _Locale); + + _Check_return_opt_ + _CRTIMP + size_t + __cdecl + wcsxfrm( + _Out_writes_opt_(_MaxCount) _Post_maybez_ wchar_t *_Dst, + _In_z_ const wchar_t *_Src, + _In_ size_t _MaxCount); + + _Check_return_opt_ + _CRTIMP + size_t + __cdecl + _wcsxfrm_l( + _Out_writes_opt_(_MaxCount) _Post_maybez_ wchar_t *_Dst, + _In_z_ const wchar_t *_Src, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + wcscoll( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcscoll_l( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsicoll( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsicoll_l( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsncoll( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2, + _In_ size_t _MaxCount); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsncoll_l( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsnicoll( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2, + _In_ size_t _MaxCount); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsnicoll_l( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale); + +#if __STDC_WANT_SECURE_LIB__ + + _CRTIMP + errno_t + __cdecl + wcsat_s( + wchar_t *Dest, + size_t SizeInWords, + const wchar_t *_Source); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + wcscpy_s( + _Out_writes_z_(SizeInWords) wchar_t *Dest, + _In_ size_t SizeInWords, + _In_z_ const wchar_t *_Source); + + _CRTIMP + errno_t + __cdecl + wcsnlen_s( + wchar_t **_Src, + size_t _MaxCount); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + wcsncpy_s( + _Out_writes_z_(SizeInWords) wchar_t *_Dest, + _In_ size_t SizeInWords, + _In_z_ const wchar_t *_Source, + _In_ size_t _Count); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _wcserror_s( + _Out_writes_opt_z_(_SizeInWords) wchar_t *_Buf, + _In_ size_t _SizeInWords, + _In_ int _ErrNum); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + __wcserror_s( + _Out_writes_opt_z_(_SizeInWords) wchar_t *_Buffer, + _In_ size_t _SizeInWords, + _In_z_ const wchar_t *_ErrMsg); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _wcsnset_s( + _Inout_updates_z_(_DstSizeInWords) wchar_t *_Dst, + _In_ size_t _DstSizeInWords, + _In_ wchar_t _Val, + _In_ size_t _MaxCount); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _wcsset_s( + _Inout_updates_z_(_SizeInWords) wchar_t *_Str, + _In_ size_t _SizeInWords, + _In_ wchar_t _Val); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _wcslwr_s( + _Inout_updates_z_(_SizeInWords) wchar_t *_Str, + _In_ size_t _SizeInWords); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _wcslwr_s_l( + _Inout_updates_z_(_SizeInWords) wchar_t *_Str, + _In_ size_t _SizeInWords, + _In_opt_ _locale_t _Locale); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _wcsupr_s( + _Inout_updates_z_(_Size) wchar_t *_Str, + _In_ size_t _Size); + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _wcsupr_s_l( + _Inout_updates_z_(_Size) wchar_t *_Str, + _In_ size_t _Size, + _In_opt_ _locale_t _Locale); + +#endif /* __STDC_WANT_SECURE_LIB__ */ + +#ifndef NO_OLDNAMES + + _Check_return_ + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_wcsdup) + wchar_t* + __cdecl + wcsdup( + _In_z_ const wchar_t *_Str); -#ifndef NO_OLDNAMES - _CRTIMP _CRT_NONSTDC_DEPRECATE(_wcsdup) wchar_t *__cdecl wcsdup(const wchar_t *_Str); #define wcswcs wcsstr - _CRTIMP _CRT_NONSTDC_DEPRECATE(_wcsicmp) int __cdecl wcsicmp(const wchar_t *_Str1,const wchar_t *_Str2); - _CRTIMP _CRT_NONSTDC_DEPRECATE(_wcsnicmp) int __cdecl wcsnicmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount); - _CRTIMP _CRT_NONSTDC_DEPRECATE(_wcsnset) wchar_t *__cdecl wcsnset(wchar_t *_Str,wchar_t _Val,size_t _MaxCount); - _CRTIMP _CRT_NONSTDC_DEPRECATE(_wcsrev) wchar_t *__cdecl wcsrev(wchar_t *_Str); - _CRTIMP _CRT_NONSTDC_DEPRECATE(_wcsset) wchar_t *__cdecl wcsset(wchar_t *_Str,wchar_t _Val); - _CRTIMP _CRT_NONSTDC_DEPRECATE(_wcslwr) wchar_t *__cdecl wcslwr(wchar_t *_Str); - _CRTIMP _CRT_NONSTDC_DEPRECATE(_wcsupr) wchar_t *__cdecl wcsupr(wchar_t *_Str); - _CRTIMP _CRT_NONSTDC_DEPRECATE(_wcsicoll) int __cdecl wcsicoll(const wchar_t *_Str1,const wchar_t *_Str2); -#endif + + _Check_return_ + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_wcsicmp) + int + __cdecl + wcsicmp( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2); + + _Check_return_ + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_wcsnicmp) + int + __cdecl + wcsnicmp( + _In_reads_or_z_(_MaxCount) const wchar_t *_Str1, + _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, + _In_ size_t _MaxCount); + + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_wcsnset) + wchar_t* + __cdecl + wcsnset( + _Inout_updates_z_(_MaxCount) wchar_t *_Str, + _In_ wchar_t _Val, + _In_ size_t _MaxCount); + + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_wcsrev) + wchar_t* + __cdecl + wcsrev( + _Inout_z_ wchar_t *_Str); + + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_wcsset) + wchar_t* + __cdecl + wcsset( + _Inout_z_ wchar_t *_Str, + wchar_t _Val); + + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_wcslwr) + wchar_t* + __cdecl + wcslwr( + _Inout_z_ wchar_t *_Str); + + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_wcsupr) + wchar_t* + __cdecl + wcsupr( + _Inout_z_ wchar_t *_Str); + + _Check_return_ + _CRTIMP + _CRT_NONSTDC_DEPRECATE(_wcsicoll) + int + __cdecl + wcsicoll( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2); + +#endif /* NO_OLDNAMES */ #endif /* !_WSTRING_DEFINED */ diff --git a/include/crt/wchar.h b/include/crt/wchar.h index 1f4bf4c112f..b00276c6028 100644 --- a/include/crt/wchar.h +++ b/include/crt/wchar.h @@ -183,42 +183,43 @@ extern "C" { #ifndef _WCTYPE_DEFINED #define _WCTYPE_DEFINED - _CRTIMP int __cdecl iswalpha(wint_t _C); - _CRTIMP int __cdecl _iswalpha_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswupper(wint_t _C); - _CRTIMP int __cdecl _iswupper_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswlower(wint_t _C); - _CRTIMP int __cdecl _iswlower_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswdigit(wint_t _C); - _CRTIMP int __cdecl _iswdigit_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswxdigit(wint_t _C); - _CRTIMP int __cdecl _iswxdigit_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswspace(wint_t _C); - _CRTIMP int __cdecl _iswspace_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswpunct(wint_t _C); - _CRTIMP int __cdecl _iswpunct_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswalnum(wint_t _C); - _CRTIMP int __cdecl _iswalnum_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswprint(wint_t _C); - _CRTIMP int __cdecl _iswprint_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswgraph(wint_t _C); - _CRTIMP int __cdecl _iswgraph_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswcntrl(wint_t _C); - _CRTIMP int __cdecl _iswcntrl_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswascii(wint_t _C); - _CRTIMP int __cdecl isleadbyte(int _C); - _CRTIMP int __cdecl _isleadbyte_l(int _C,_locale_t _Locale); - _CRTIMP wint_t __cdecl towupper(wint_t _C); - _CRTIMP wint_t __cdecl _towupper_l(wint_t _C,_locale_t _Locale); - _CRTIMP wint_t __cdecl towlower(wint_t _C); - _CRTIMP wint_t __cdecl _towlower_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl iswctype(wint_t _C,wctype_t _Type); - _CRTIMP int __cdecl _iswctype_l(wint_t _C,wctype_t _Type,_locale_t _Locale); - _CRTIMP int __cdecl __iswcsymf(wint_t _C); - _CRTIMP int __cdecl _iswcsymf_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl __iswcsym(wint_t _C); - _CRTIMP int __cdecl _iswcsym_l(wint_t _C,_locale_t _Locale); - _CRTIMP int __cdecl is_wctype(wint_t _C,wctype_t _Type); + _Check_return_ _CRTIMP int __cdecl iswalpha(_In_ wint_t _C); + _Check_return_ _CRTIMP int __cdecl _iswalpha_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); + _Check_return_ _CRTIMP int __cdecl iswupper(_In_ wint_t _C); + _Check_return_ _CRTIMP int __cdecl _iswupper_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); + _Check_return_ _CRTIMP int __cdecl iswlower(_In_ wint_t _C); + _Check_return_ _CRTIMP int __cdecl _iswlower_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); + _Check_return_ _CRTIMP int __cdecl iswdigit(_In_ wint_t _C); + _Check_return_ _CRTIMP int __cdecl _iswdigit_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); + _Check_return_ _CRTIMP int __cdecl iswxdigit(_In_ wint_t _C); + _Check_return_ _CRTIMP int __cdecl _iswxdigit_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); + _Check_return_ _CRTIMP int __cdecl iswspace(_In_ wint_t _C); + _Check_return_ _CRTIMP int __cdecl _iswspace_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); + _Check_return_ _CRTIMP int __cdecl iswpunct(_In_ wint_t _C); + _Check_return_ _CRTIMP int __cdecl _iswpunct_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); + _Check_return_ _CRTIMP int __cdecl iswalnum(_In_ wint_t _C); + _Check_return_ _CRTIMP int __cdecl _iswalnum_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); + _Check_return_ _CRTIMP int __cdecl iswprint(_In_ wint_t _C); + _Check_return_ _CRTIMP int __cdecl _iswprint_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); + _Check_return_ _CRTIMP int __cdecl iswgraph(_In_ wint_t _C); + _Check_return_ _CRTIMP int __cdecl _iswgraph_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); + _Check_return_ _CRTIMP int __cdecl iswcntrl(_In_ wint_t _C); + _Check_return_ _CRTIMP int __cdecl _iswcntrl_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); + _Check_return_ _CRTIMP int __cdecl iswascii(_In_ wint_t _C); + _Check_return_ _CRTIMP int __cdecl isleadbyte(_In_ int _C); + _Check_return_ _CRTIMP int __cdecl _isleadbyte_l(_In_ int _C, _In_opt_ _locale_t _Locale); + _Check_return_ _CRTIMP wint_t __cdecl towupper(_In_ wint_t _C); + _Check_return_ _CRTIMP wint_t __cdecl _towupper_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); + _Check_return_ _CRTIMP wint_t __cdecl towlower(_In_ wint_t _C); + _Check_return_ _CRTIMP wint_t __cdecl _towlower_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); + _Check_return_ _CRTIMP int __cdecl iswctype(_In_ wint_t _C, _In_ wctype_t _Type); + _Check_return_ _CRTIMP int __cdecl _iswctype_l(_In_ wint_t _C, _In_ wctype_t _Type, _In_opt_ _locale_t _Locale); + _Check_return_ _CRTIMP int __cdecl __iswcsymf(_In_ wint_t _C); + _Check_return_ _CRTIMP int __cdecl _iswcsymf_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); + _Check_return_ _CRTIMP int __cdecl __iswcsym(_In_ wint_t _C); + _Check_return_ _CRTIMP int __cdecl _iswcsym_l(_In_ wint_t _C, _In_opt_ _locale_t _Locale); + _CRTIMP int __cdecl is_wctype(_In_ wint_t _C, _In_ wctype_t _Type); + #if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || !defined (NO_OLDNAMES) _CRTIMP int __cdecl iswblank(wint_t _C); #endif @@ -226,33 +227,185 @@ _CRTIMP int __cdecl iswblank(wint_t _C); #ifndef _WDIRECT_DEFINED #define _WDIRECT_DEFINED - _CRTIMP wchar_t *__cdecl _wgetcwd(wchar_t *_DstBuf,int _SizeInWords); - _CRTIMP wchar_t *__cdecl _wgetdcwd(int _Drive,wchar_t *_DstBuf,int _SizeInWords); - wchar_t *__cdecl _wgetdcwd_nolock(int _Drive,wchar_t *_DstBuf,int _SizeInWords); - _CRTIMP int __cdecl _wchdir(const wchar_t *_Path); - _CRTIMP int __cdecl _wmkdir(const wchar_t *_Path); - _CRTIMP int __cdecl _wrmdir(const wchar_t *_Path); -#endif + + _Check_return_ + _Ret_opt_z_ + _CRTIMP + wchar_t* + __cdecl + _wgetcwd( + _Out_writes_opt_(_SizeInWords) wchar_t *_DstBuf, + _In_ int _SizeInWords); + + _Check_return_ + _Ret_opt_z_ + _CRTIMP + wchar_t* + __cdecl + _wgetdcwd( + _In_ int _Drive, + _Out_writes_opt_(_SizeInWords) wchar_t *_DstBuf, + _In_ int _SizeInWords); + + _Check_return_ + _Ret_opt_z_ + wchar_t* + __cdecl + _wgetdcwd_nolock( + _In_ int _Drive, + _Out_writes_opt_(_SizeInWords) wchar_t *_DstBuf, + _In_ int _SizeInWords); + + _Check_return_ + _CRTIMP + int + __cdecl + _wchdir( + _In_z_ const wchar_t *_Path); + + _Check_return_ + _CRTIMP + int + __cdecl + _wmkdir( + _In_z_ const wchar_t *_Path); + + _Check_return_ + _CRTIMP + int + __cdecl + _wrmdir( + _In_z_ const wchar_t *_Path); + +#endif /* _WDIRECT_DEFINED */ #ifndef _WIO_DEFINED #define _WIO_DEFINED - _CRTIMP int __cdecl _waccess(const wchar_t *_Filename,int _AccessMode); - _CRTIMP int __cdecl _wchmod(const wchar_t *_Filename,int _Mode); - _CRTIMP int __cdecl _wcreat(const wchar_t *_Filename,int _PermissionMode); - _CRTIMP intptr_t __cdecl _wfindfirst32(const wchar_t *_Filename,struct _wfinddata32_t *_FindData); - _CRTIMP int __cdecl _wfindnext32(intptr_t _FindHandle,struct _wfinddata32_t *_FindData); - _CRTIMP int __cdecl _wunlink(const wchar_t *_Filename); - _CRTIMP int __cdecl _wrename(const wchar_t *_NewFilename,const wchar_t *_OldFilename); - _CRTIMP wchar_t *__cdecl _wmktemp(wchar_t *_TemplateName); + + _Check_return_ + _CRTIMP + int + __cdecl + _waccess( + _In_z_ const wchar_t *_Filename, + _In_ int _AccessMode); + + _Check_return_ + _CRTIMP + int + __cdecl + _wchmod( + _In_z_ const wchar_t *_Filename, + _In_ int _Mode); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcreat( + _In_z_ const wchar_t *_Filename, + _In_ int _PermissionMode); + + _Check_return_ + _CRTIMP + intptr_t + __cdecl + _wfindfirst32( + _In_z_ const wchar_t *_Filename, + _Out_ struct _wfinddata32_t *_FindData); + + _Check_return_ + _CRTIMP + int + __cdecl + _wfindnext32( + _In_ intptr_t _FindHandle, + _Out_ struct _wfinddata32_t *_FindData); + + _Check_return_ + _CRTIMP + int + __cdecl + _wunlink( + _In_z_ const wchar_t *_Filename); + + _Check_return_ + _CRTIMP + int + __cdecl + _wrename( + _In_z_ const wchar_t *_OldFilename, + _In_z_ const wchar_t *_NewFilename); + + _CRTIMP + wchar_t* + __cdecl + _wmktemp( + _Inout_z_ wchar_t *_TemplateName); + #if _INTEGRAL_MAX_BITS >= 64 - _CRTIMP intptr_t __cdecl _wfindfirst32i64(const wchar_t *_Filename,struct _wfinddata32i64_t *_FindData); - _CRTIMP intptr_t __cdecl _wfindfirst64i32(const wchar_t *_Filename,struct _wfinddata64i32_t *_FindData); - _CRTIMP intptr_t __cdecl _wfindfirst64(const wchar_t *_Filename,struct _wfinddata64_t *_FindData); - _CRTIMP int __cdecl _wfindnext32i64(intptr_t _FindHandle,struct _wfinddata32i64_t *_FindData); - _CRTIMP int __cdecl _wfindnext64i32(intptr_t _FindHandle,struct _wfinddata64i32_t *_FindData); - _CRTIMP int __cdecl _wfindnext64(intptr_t _FindHandle,struct _wfinddata64_t *_FindData); -#endif - _CRTIMP errno_t __cdecl _wsopen_s(int *_FileHandle,const wchar_t *_Filename,int _OpenFlag,int _ShareFlag,int _PermissionFlag); + + _Check_return_ + _CRTIMP + intptr_t + __cdecl + _wfindfirst32i64( + _In_z_ const wchar_t *_Filename, + _Out_ struct _wfinddata32i64_t *_FindData); + + _Check_return_ + _CRTIMP + intptr_t + __cdecl + _wfindfirst64i32( + _In_z_ const wchar_t *_Filename, + _Out_ struct _wfinddata64i32_t *_FindData); + + _Check_return_ + _CRTIMP + intptr_t + __cdecl + _wfindfirst64( + _In_z_ const wchar_t *_Filename, + _Out_ struct _wfinddata64_t *_FindData); + + _Check_return_ + _CRTIMP + int + __cdecl + _wfindnext32i64( + _In_ intptr_t _FindHandle, + _Out_ struct _wfinddata32i64_t *_FindData); + + _Check_return_ + _CRTIMP + int + __cdecl + _wfindnext64i32( + _In_ intptr_t _FindHandle, + _Out_ struct _wfinddata64i32_t *_FindData); + + _Check_return_ + _CRTIMP + int + __cdecl + _wfindnext64( + _In_ intptr_t _FindHandle, + _Out_ struct _wfinddata64_t *_FindData); + +#endif /* _INTEGRAL_MAX_BITS >= 64 */ + + _Check_return_wat_ + _CRTIMP + errno_t + __cdecl + _wsopen_s( + _Out_ int *_FileHandle, + _In_z_ const wchar_t *_Filename, + _In_ int _OpenFlag, + _In_ int _ShareFlag, + _In_ int _PermissionFlag); + #if !defined(__cplusplus) || !(defined(_X86_) && !defined(__x86_64)) _CRTIMP int __cdecl _wopen(const wchar_t *_Filename,int _OpenFlag,...); _CRTIMP int __cdecl _wsopen(const wchar_t *_Filename,int _OpenFlag,int _ShareFlag,...); @@ -260,35 +413,164 @@ _CRTIMP int __cdecl iswblank(wint_t _C); extern "C++" _CRTIMP int __cdecl _wopen(const wchar_t *_Filename,int _OpenFlag,int _PermissionMode = 0); extern "C++" _CRTIMP int __cdecl _wsopen(const wchar_t *_Filename,int _OpenFlag,int _ShareFlag,int _PermissionMode = 0); #endif + #endif /* !_WIO_DEFINED */ #ifndef _WLOCALE_DEFINED #define _WLOCALE_DEFINED - _CRTIMP wchar_t *__cdecl _wsetlocale(int _Category,const wchar_t *_Locale); + _Check_return_opt_ + _CRTIMP + wchar_t* + __cdecl + _wsetlocale( + _In_ int _Category, + _In_opt_z_ const wchar_t *_Locale); #endif #ifndef _WPROCESS_DEFINED #define _WPROCESS_DEFINED - _CRTIMP intptr_t __cdecl _wexecl(const wchar_t *_Filename,const wchar_t *_ArgList,...); - _CRTIMP intptr_t __cdecl _wexecle(const wchar_t *_Filename,const wchar_t *_ArgList,...); - _CRTIMP intptr_t __cdecl _wexeclp(const wchar_t *_Filename,const wchar_t *_ArgList,...); - _CRTIMP intptr_t __cdecl _wexeclpe(const wchar_t *_Filename,const wchar_t *_ArgList,...); - _CRTIMP intptr_t __cdecl _wexecv(const wchar_t *_Filename,const wchar_t *const *_ArgList); - _CRTIMP intptr_t __cdecl _wexecve(const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env); - _CRTIMP intptr_t __cdecl _wexecvp(const wchar_t *_Filename,const wchar_t *const *_ArgList); - _CRTIMP intptr_t __cdecl _wexecvpe(const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env); - _CRTIMP intptr_t __cdecl _wspawnl(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...); - _CRTIMP intptr_t __cdecl _wspawnle(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...); - _CRTIMP intptr_t __cdecl _wspawnlp(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...); - _CRTIMP intptr_t __cdecl _wspawnlpe(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...); - _CRTIMP intptr_t __cdecl _wspawnv(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList); - _CRTIMP intptr_t __cdecl _wspawnve(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env); - _CRTIMP intptr_t __cdecl _wspawnvp(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList); - _CRTIMP intptr_t __cdecl _wspawnvpe(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env); + + _CRTIMP + intptr_t + __cdecl + _wexecl( + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *_ArgList, + ...); + + _CRTIMP + intptr_t + __cdecl + _wexecle( + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *_ArgList, + ...); + + _CRTIMP + intptr_t + __cdecl + _wexeclp( + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *_ArgList, + ...); + + _CRTIMP + intptr_t + __cdecl + _wexeclpe( + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *_ArgList, + ...); + + _CRTIMP + intptr_t + __cdecl + _wexecv( + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *const *_ArgList); + + _CRTIMP + intptr_t + __cdecl + _wexecve( + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *const *_ArgList, + _In_opt_z_ const wchar_t *const *_Env); + + _CRTIMP + intptr_t + __cdecl + _wexecvp( + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *const *_ArgList); + + _CRTIMP + intptr_t + __cdecl + _wexecvpe( + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *const *_ArgList, + _In_opt_z_ const wchar_t *const *_Env); + + _CRTIMP + intptr_t + __cdecl + _wspawnl( + _In_ int _Mode, + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *_ArgList, + ...); + + _CRTIMP + intptr_t + __cdecl + _wspawnle( + _In_ int _Mode, + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *_ArgList, + ...); + + _CRTIMP + intptr_t + __cdecl + _wspawnlp( + _In_ int _Mode, + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *_ArgList, + ...); + + _CRTIMP + intptr_t + __cdecl + _wspawnlpe( + _In_ int _Mode, + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *_ArgList, + ...); + + _CRTIMP + intptr_t + __cdecl + _wspawnv( + _In_ int _Mode, + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *const *_ArgList); + + _CRTIMP + intptr_t + __cdecl + _wspawnve( + _In_ int _Mode, + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *const *_ArgList, + _In_opt_z_ const wchar_t *const *_Env); + + _CRTIMP + intptr_t + __cdecl + _wspawnvp( + _In_ int _Mode, + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *const *_ArgList); + + _CRTIMP + intptr_t + __cdecl + _wspawnvpe( + _In_ int _Mode, + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *const *_ArgList, + _In_opt_z_ const wchar_t *const *_Env); + #ifndef _CRT_WSYSTEM_DEFINED #define _CRT_WSYSTEM_DEFINED - _CRTIMP int __cdecl _wsystem(const wchar_t *_Command); + _CRTIMP + int + __cdecl + _wsystem( + _In_opt_z_ const wchar_t *_Command); #endif /* !_CRT_WSYSTEM_DEFINED */ + #endif /* !_WPROCESS_DEFINED */ #ifndef _WCTYPE_INLINE_DEFINED @@ -329,7 +611,7 @@ _CRTIMP int __cdecl iswblank(wint_t _C); #ifndef _INO_T_DEFINED #define _INO_T_DEFINED typedef unsigned short _ino_t; -#ifndef NO_OLDNAMES +#ifndef NO_OLDNAMES typedef unsigned short ino_t; #endif #endif @@ -337,7 +619,7 @@ _CRTIMP int __cdecl iswblank(wint_t _C); #ifndef _DEV_T_DEFINED #define _DEV_T_DEFINED typedef unsigned int _dev_t; -#ifndef NO_OLDNAMES +#ifndef NO_OLDNAMES typedef unsigned int dev_t; #endif #endif @@ -456,40 +738,195 @@ _CRTIMP int __cdecl iswblank(wint_t _C); #ifndef _WSTAT_DEFINED #define _WSTAT_DEFINED - _CRTIMP int __cdecl _wstat(const wchar_t *_Name,struct _stat *_Stat); - _CRTIMP int __cdecl _wstat32(const wchar_t *_Name,struct _stat32 *_Stat); + + _CRTIMP + int + __cdecl + _wstat( + _In_z_ const wchar_t *_Name, + _Out_ struct _stat *_Stat); + + _CRTIMP + int + __cdecl + _wstat32( + _In_z_ const wchar_t *_Name, + _Out_ struct _stat32 *_Stat); + #if _INTEGRAL_MAX_BITS >= 64 - _CRTIMP int __cdecl _wstat32i64(const wchar_t *_Name,struct _stat32i64 *_Stat); - _CRTIMP int __cdecl _wstat64i32(const wchar_t *_Name,struct _stat64i32 *_Stat); - _CRTIMP int __cdecl _wstat64(const wchar_t *_Name,struct _stat64 *_Stat); -#endif -#endif -#endif + + _CRTIMP + int + __cdecl + _wstat32i64( + _In_z_ const wchar_t *_Name, + _Out_ struct _stat32i64 *_Stat); + + _CRTIMP + int + __cdecl + _wstat64i32( + _In_z_ const wchar_t *_Name, + _Out_ struct _stat64i32 *_Stat); + + _CRTIMP + int + __cdecl + _wstat64( + _In_z_ const wchar_t *_Name, + _Out_ struct _stat64 *_Stat); + +#endif /* _INTEGRAL_MAX_BITS >= 64 */ + +#endif /* _WSTAT_DEFINED */ + +#endif /* !defined(_POSIX_) || defined(__GNUC__) */ #ifndef _WCONIO_DEFINED #define _WCONIO_DEFINED - _CRTIMP wchar_t *_cgetws(wchar_t *_Buffer); - _CRTIMP wint_t __cdecl _getwch(void); - _CRTIMP wint_t __cdecl _getwche(void); - _CRTIMP wint_t __cdecl _putwch(wchar_t _WCh); - _CRTIMP wint_t __cdecl _ungetwch(wint_t _WCh); - _CRTIMP int __cdecl _cputws(const wchar_t *_String); - _CRTIMP int __cdecl _cwprintf(const wchar_t *_Format,...); - _CRTIMP int __cdecl _cwscanf(const wchar_t *_Format,...); - _CRTIMP int __cdecl _cwscanf_l(const wchar_t *_Format,_locale_t _Locale,...); - _CRTIMP int __cdecl _vcwprintf(const wchar_t *_Format,va_list _ArgList); - _CRTIMP int __cdecl _cwprintf_p(const wchar_t *_Format,...); - _CRTIMP int __cdecl _vcwprintf_p(const wchar_t *_Format,va_list _ArgList); - _CRTIMP int __cdecl _cwprintf_l(const wchar_t *_Format,_locale_t _Locale,...); - _CRTIMP int __cdecl _vcwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList); - _CRTIMP int __cdecl _cwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...); - _CRTIMP int __cdecl _vcwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList); - wint_t __cdecl _putwch_nolock(wchar_t _WCh); - wint_t __cdecl _getwch_nolock(void); - wint_t __cdecl _getwche_nolock(void); - wint_t __cdecl _ungetwch_nolock(wint_t _WCh); -#endif + _CRTIMP + wchar_t* + _cgetws( + _Inout_z_ wchar_t *_Buffer); + + _Check_return_ + _CRTIMP + wint_t + __cdecl + _getwch(void); + + _Check_return_ + _CRTIMP + wint_t + __cdecl + _getwche(void); + + _Check_return_ + _CRTIMP + wint_t + __cdecl + _putwch( + wchar_t _WCh); + + _Check_return_ + _CRTIMP + wint_t + __cdecl + _ungetwch( + wint_t _WCh); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _cputws( + _In_z_ const wchar_t *_String); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _cwprintf( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _cwscanf( + _In_z_ _Scanf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _cwscanf_l( + _In_z_ _Scanf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _vcwprintf( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + va_list _ArgList); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _cwprintf_p( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _vcwprintf_p( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + va_list _ArgList); + + _CRTIMP + int + __cdecl + _cwprintf_l( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + ...); + + _CRTIMP + int + __cdecl + _vcwprintf_l( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList); + + _CRTIMP + int + __cdecl + _cwprintf_p_l( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + ...); + + _CRTIMP + int + __cdecl + _vcwprintf_p_l( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList); + + _Check_return_opt_ + wint_t + __cdecl + _putwch_nolock( + wchar_t _WCh); + + _Check_return_ + wint_t + __cdecl + _getwch_nolock(void); + + _Check_return_ + wint_t + __cdecl + _getwche_nolock(void); + + _Check_return_opt_ + wint_t + __cdecl + _ungetwch_nolock( + wint_t _WCh); + +#endif /* _WCONIO_DEFINED */ #ifndef _WSTDIO_DEFINED #define _WSTDIO_DEFINED @@ -497,33 +934,191 @@ _CRTIMP int __cdecl iswblank(wint_t _C); #ifdef _POSIX_ _CRTIMP FILE *__cdecl _wfsopen(const wchar_t *_Filename,const wchar_t *_Mode); #else - _CRTIMP FILE *__cdecl _wfsopen(const wchar_t *_Filename,const wchar_t *_Mode,int _ShFlag); + _Check_return_ + _CRTIMP + FILE* + __cdecl + _wfsopen( + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *_Mode, + _In_ int _ShFlag); #endif - _CRTIMP_ALT wint_t __cdecl fgetwc(FILE *_File); - _CRTIMP wint_t __cdecl _fgetwchar(void); - _CRTIMP wint_t __cdecl fputwc(wchar_t _Ch,FILE *_File); - _CRTIMP wint_t __cdecl _fputwchar(wchar_t _Ch); - _CRTIMP wint_t __cdecl getwc(FILE *_File); - _CRTIMP wint_t __cdecl getwchar(void); - _CRTIMP wint_t __cdecl putwc(wchar_t _Ch,FILE *_File); - _CRTIMP wint_t __cdecl putwchar(wchar_t _Ch); - _CRTIMP_ALT wint_t __cdecl ungetwc(wint_t _Ch,FILE *_File); - _CRTIMP wchar_t *__cdecl fgetws(wchar_t *_Dst,int _SizeInWords,FILE *_File); - _CRTIMP int __cdecl fputws(const wchar_t *_Str,FILE *_File); - _CRTIMP wchar_t *__cdecl _getws(wchar_t *_String); - _CRTIMP int __cdecl _putws(const wchar_t *_Str); - _CRTIMP int __cdecl fwprintf(FILE *_File,const wchar_t *_Format,...); - _CRTIMP int __cdecl wprintf(const wchar_t *_Format,...); - _CRTIMP int __cdecl _scwprintf(const wchar_t *_Format,...); - _CRTIMP int __cdecl vfwprintf(FILE *_File,const wchar_t *_Format,va_list _ArgList); - _CRTIMP int __cdecl vwprintf(const wchar_t *_Format,va_list _ArgList); - _CRTIMP int __cdecl swprintf(wchar_t*, const wchar_t*, ...); - _CRTIMP int __cdecl vswprintf(wchar_t*, const wchar_t*,va_list); - _CRTIMP int __cdecl _swprintf_c(wchar_t *_DstBuf,size_t _SizeInWords,const wchar_t *_Format,...); - _CRTIMP int __cdecl _vswprintf_c(wchar_t *_DstBuf,size_t _SizeInWords,const wchar_t *_Format,va_list _ArgList); + _Check_return_opt_ + _CRTIMP_ALT + wint_t + __cdecl + fgetwc( + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + _fgetwchar(void); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + fputwc( + _In_ wchar_t _Ch, + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + _fputwchar( + _In_ wchar_t _Ch); + + _Check_return_ + _CRTIMP + wint_t + __cdecl + getwc( + _Inout_ FILE *_File); + + _Check_return_ + _CRTIMP + wint_t + __cdecl + getwchar(void); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + putwc( + _In_ wchar_t _Ch, + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + putwchar( + _In_ wchar_t _Ch); + + _Check_return_opt_ + _CRTIMP_ALT + wint_t + __cdecl + ungetwc( + _In_ wint_t _Ch, + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + wchar_t* + __cdecl + fgetws( + _Out_writes_z_(_SizeInWords) wchar_t *_Dst, + _In_ int _SizeInWords, + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + fputws( + _In_z_ const wchar_t *_Str, + _Inout_ FILE *_File); + + _CRTIMP + wchar_t* + __cdecl + _getws( + _Pre_notnull_ _Post_z_ wchar_t *_String); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _putws( + _In_z_ const wchar_t *_Str); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + fwprintf( + _Inout_ FILE *_File, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + wprintf( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_ + _CRTIMP + int + __cdecl + _scwprintf( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + vfwprintf( + _Inout_ FILE *_File, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + va_list _ArgList); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + vwprintf( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + va_list _ArgList); + + _CRTIMP + int + __cdecl + swprintf( + _Out_ wchar_t*, + const wchar_t*, + ...); + + _CRTIMP + int + __cdecl + vswprintf( + _Out_ wchar_t*, + const wchar_t*, + va_list); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _swprintf_c( + _Out_writes_z_(_SizeInWords) wchar_t *_DstBuf, + _In_ size_t _SizeInWords, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _vswprintf_c( + _Out_writes_z_(_SizeInWords) wchar_t *_DstBuf, + _In_ size_t _SizeInWords, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + va_list _ArgList); + _CRTIMP int __cdecl _snwprintf(wchar_t *_Dest,size_t _Count,const wchar_t *_Format,...); _CRTIMP int __cdecl _vsnwprintf(wchar_t *_Dest,size_t _Count,const wchar_t *_Format,va_list _Args); + #ifndef __NO_ISOCEXT /* externs in libmingwex.a */ _CRTIMP int __cdecl snwprintf (wchar_t *s, size_t n, const wchar_t * format, ...); __CRT_INLINE int __cdecl vsnwprintf (wchar_t *s, size_t n, const wchar_t *format, va_list arg) { return _vsnwprintf(s,n,format,arg); } @@ -531,33 +1126,263 @@ _CRTIMP int __cdecl iswblank(wint_t _C); _CRTIMP int __cdecl vfwscanf (FILE *,const wchar_t *,va_list); _CRTIMP int __cdecl vswscanf (const wchar_t *,const wchar_t *,va_list); #endif - _CRTIMP int __cdecl _fwprintf_p(FILE *_File,const wchar_t *_Format,...); - _CRTIMP int __cdecl _wprintf_p(const wchar_t *_Format,...); - _CRTIMP int __cdecl _vfwprintf_p(FILE *_File,const wchar_t *_Format,va_list _ArgList); - _CRTIMP int __cdecl _vwprintf_p(const wchar_t *_Format,va_list _ArgList); - _CRTIMP int __cdecl _swprintf_p(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,...); - _CRTIMP int __cdecl _vswprintf_p(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,va_list _ArgList); - _CRTIMP int __cdecl _scwprintf_p(const wchar_t *_Format,...); - _CRTIMP int __cdecl _vscwprintf_p(const wchar_t *_Format,va_list _ArgList); - _CRTIMP int __cdecl _wprintf_l(const wchar_t *_Format,_locale_t _Locale,...); - _CRTIMP int __cdecl _wprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...); - _CRTIMP int __cdecl _vwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList); - _CRTIMP int __cdecl _vwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList); - _CRTIMP int __cdecl _fwprintf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...); - _CRTIMP int __cdecl _fwprintf_p_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...); - _CRTIMP int __cdecl _vfwprintf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList); - _CRTIMP int __cdecl _vfwprintf_p_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList); - _CRTIMP int __cdecl _swprintf_c_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...); - _CRTIMP int __cdecl _swprintf_p_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...); - _CRTIMP int __cdecl _vswprintf_c_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList); - _CRTIMP int __cdecl _vswprintf_p_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList); - _CRTIMP int __cdecl _scwprintf_l(const wchar_t *_Format,_locale_t _Locale,...); - _CRTIMP int __cdecl _scwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...); - _CRTIMP int __cdecl _vscwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList); - _CRTIMP int __cdecl _snwprintf_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...); - _CRTIMP int __cdecl _vsnwprintf_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList); - _CRTIMP int __cdecl _swprintf(wchar_t *_Dest,const wchar_t *_Format,...); - _CRTIMP int __cdecl _vswprintf(wchar_t *_Dest,const wchar_t *_Format,va_list _Args); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _fwprintf_p( + _Inout_ FILE *_File, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _wprintf_p( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _vfwprintf_p( + _Inout_ FILE *_File, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + va_list _ArgList); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _vwprintf_p( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + va_list _ArgList); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _swprintf_p( + _Out_writes_z_(_MaxCount) wchar_t *_DstBuf, + _In_ size_t _MaxCount, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _vswprintf_p( + _Out_writes_z_(_MaxCount) wchar_t *_DstBuf, + _In_ size_t _MaxCount, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + va_list _ArgList); + + _Check_return_ + _CRTIMP + int + __cdecl + _scwprintf_p( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_ + _CRTIMP + int + __cdecl + _vscwprintf_p( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + va_list _ArgList); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _wprintf_l( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _wprintf_p_l( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _vwprintf_l( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _vwprintf_p_l( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _fwprintf_l( + _Inout_ FILE *_File, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _fwprintf_p_l( + _Inout_ FILE *_File, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _vfwprintf_l( + _Inout_ FILE *_File, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _vfwprintf_p_l( + _Inout_ FILE *_File, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _swprintf_c_l( + _Out_writes_z_(_MaxCount) wchar_t *_DstBuf, + _In_ size_t _MaxCount, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _swprintf_p_l( + _Out_writes_z_(_MaxCount) wchar_t *_DstBuf, + _In_ size_t _MaxCount, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _vswprintf_c_l( + _Out_writes_z_(_MaxCount) wchar_t *_DstBuf, + _In_ size_t _MaxCount, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _vswprintf_p_l( + _Out_writes_z_(_MaxCount) wchar_t *_DstBuf, + _In_ size_t _MaxCount, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList); + + _Check_return_ + _CRTIMP + int + __cdecl + _scwprintf_l( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + ...); + + _Check_return_ + _CRTIMP + int + __cdecl + _scwprintf_p_l( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + ...); + + _Check_return_ + _CRTIMP + int + __cdecl + _vscwprintf_p_l( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _snwprintf_l( + _Out_writes_(_MaxCount) wchar_t *_DstBuf, + _In_ size_t _MaxCount, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _vsnwprintf_l( + _Out_writes_(_MaxCount) wchar_t *_DstBuf, + _In_ size_t _MaxCount, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList); + + _CRTIMP + int + __cdecl + _swprintf( + _Pre_notnull_ _Post_z_ wchar_t *_Dest, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + ...); + + _CRTIMP + int + __cdecl + _vswprintf( + _Pre_notnull_ _Post_z_ wchar_t *_Dest, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + va_list _Args); + + _CRTIMP int __cdecl __swprintf_l(wchar_t *_Dest,const wchar_t *_Format,_locale_t _Plocinfo,...); _CRTIMP int __cdecl __vswprintf_l(wchar_t *_Dest,const wchar_t *_Format,_locale_t _Plocinfo,va_list _Args); @@ -572,34 +1397,185 @@ _CRTIMP int __cdecl iswblank(wint_t _C); #endif #endif - _CRTIMP wchar_t *__cdecl _wtempnam(const wchar_t *_Directory,const wchar_t *_FilePrefix); - _CRTIMP int __cdecl _vscwprintf(const wchar_t *_Format,va_list _ArgList); - _CRTIMP int __cdecl _vscwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList); - int __cdecl fwscanf(FILE *_File,const wchar_t *_Format,...); - _CRTIMP int __cdecl _fwscanf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...); - int __cdecl swscanf(const wchar_t *_Src,const wchar_t *_Format,...); - _CRTIMP int __cdecl _swscanf_l(const wchar_t *_Src,const wchar_t *_Format,_locale_t _Locale,...); - _CRTIMP int __cdecl _snwscanf(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,...); - _CRTIMP int __cdecl _snwscanf_l(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...); - int __cdecl wscanf(const wchar_t *_Format,...); - _CRTIMP int __cdecl _wscanf_l(const wchar_t *_Format,_locale_t _Locale,...); - _CRTIMP FILE *__cdecl _wfdopen(int _FileHandle ,const wchar_t *_Mode); - _CRTIMP FILE *__cdecl _wfopen(const wchar_t *_Filename,const wchar_t *_Mode); - _CRTIMP FILE *__cdecl _wfreopen(const wchar_t *_Filename,const wchar_t *_Mode,FILE *_OldFile); + _Check_return_ + _CRTIMP + wchar_t* + __cdecl + _wtempnam( + _In_opt_z_ const wchar_t *_Directory, + _In_opt_z_ const wchar_t *_FilePrefix); + + _Check_return_ + _CRTIMP + int + __cdecl + _vscwprintf( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + va_list _ArgList); + + _Check_return_ + _CRTIMP + int + __cdecl + _vscwprintf_l( + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + va_list _ArgList); + + _Check_return_ + int + __cdecl + fwscanf( + _Inout_ FILE *_File, + _In_z_ _Scanf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _fwscanf_l( + _Inout_ FILE *_File, + _In_z_ _Scanf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + ...); + + _Check_return_ + int + __cdecl + swscanf( + _In_z_ const wchar_t *_Src, + _In_z_ _Scanf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _swscanf_l( + _In_z_ const wchar_t *_Src, + _In_z_ _Scanf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _snwscanf( + _In_reads_(_MaxCount) _Pre_z_ const wchar_t *_Src, + _In_ size_t _MaxCount, + _In_z_ _Scanf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _snwscanf_l( + _In_reads_(_MaxCount) _Pre_z_ const wchar_t *_Src, + _In_ size_t _MaxCount, + _In_z_ _Scanf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + ...); + + _Check_return_ + int + __cdecl + wscanf( + _In_z_ _Scanf_format_string_ const wchar_t *_Format, + ...); + + _Check_return_opt_ + _CRTIMP + int + __cdecl + _wscanf_l( + _In_z_ _Scanf_format_string_ const wchar_t *_Format, + _In_opt_ _locale_t _Locale, + ...); + + _Check_return_ + _CRTIMP + FILE* + __cdecl + _wfdopen( + _In_ int _FileHandle, + _In_z_ const wchar_t *_Mode); + + _Check_return_ + _CRTIMP + FILE* + __cdecl + _wfopen( + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *_Mode); + + _Check_return_ + _CRTIMP + FILE* + __cdecl + _wfreopen( + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *_Mode, + _Inout_ FILE *_OldFile); #ifndef _CRT_WPERROR_DEFINED #define _CRT_WPERROR_DEFINED - _CRTIMP void __cdecl _wperror(const wchar_t *_ErrMsg); + _CRTIMP + void + __cdecl + _wperror( + _In_opt_z_ const wchar_t *_ErrMsg); #endif - _CRTIMP FILE *__cdecl _wpopen(const wchar_t *_Command,const wchar_t *_Mode); + + _Check_return_ + _CRTIMP + FILE* + __cdecl + _wpopen( + _In_z_ const wchar_t *_Command, + _In_z_ const wchar_t *_Mode); + #if !defined(NO_OLDNAMES) && !defined(wpopen) -#define wpopen _wpopen +#define wpopen _wpopen #endif - _CRTIMP int __cdecl _wremove(const wchar_t *_Filename); - _CRTIMP wchar_t *__cdecl _wtmpnam(wchar_t *_Buffer); - _CRTIMP wint_t __cdecl _fgetwc_nolock(FILE *_File); - _CRTIMP wint_t __cdecl _fputwc_nolock(wchar_t _Ch,FILE *_File); - _CRTIMP wint_t __cdecl _ungetwc_nolock(wint_t _Ch,FILE *_File); + + _Check_return_ + _CRTIMP + int + __cdecl + _wremove( + _In_z_ const wchar_t *_Filename); + + _CRTIMP + wchar_t* + __cdecl + _wtmpnam( + _Pre_maybenull_ _Post_z_ wchar_t *_Buffer); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + _fgetwc_nolock( + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + _fputwc_nolock( + _In_ wchar_t _Ch, + _Inout_ FILE *_File); + + _Check_return_opt_ + _CRTIMP + wint_t + __cdecl + _ungetwc_nolock( + _In_ wint_t _Ch, + _Inout_ FILE *_File); #undef _CRT_GETPUTWCHAR_NOINLINE @@ -607,127 +1583,682 @@ _CRTIMP int __cdecl iswblank(wint_t _C); #define getwchar() fgetwc(stdin) #define putwchar(_c) fputwc((_c),stdout) #else - __CRT_INLINE wint_t __cdecl getwchar() {return (fgetwc(stdin)); } - __CRT_INLINE wint_t __cdecl putwchar(wchar_t _C) {return (fputwc(_C,stdout)); } + _Check_return_ __CRT_INLINE wint_t __cdecl getwchar() {return (fgetwc(stdin)); } + _Check_return_opt_ __CRT_INLINE wint_t __cdecl putwchar(_In_ wchar_t _C) {return (fputwc(_C,stdout)); } #endif #define getwc(_stm) fgetwc(_stm) #define putwc(_c,_stm) fputwc(_c,_stm) #define _putwc_nolock(_c,_stm) _fputwc_nolock(_c,_stm) #define _getwc_nolock(_c) _fgetwc_nolock(_c) -#endif + +#endif /* _WSTDIO_DEFINED */ #ifndef _WSTDLIB_DEFINED #define _WSTDLIB_DEFINED - _CRTIMP wchar_t *__cdecl _itow(int _Value,wchar_t *_Dest,int _Radix); - _CRTIMP wchar_t *__cdecl _ltow(long _Value,wchar_t *_Dest,int _Radix); - _CRTIMP wchar_t *__cdecl _ultow(unsigned long _Value,wchar_t *_Dest,int _Radix); - double __cdecl wcstod(const wchar_t *_Str,wchar_t **_EndPtr); - _CRTIMP double __cdecl _wcstod_l(const wchar_t *_Str,wchar_t **_EndPtr,_locale_t _Locale); + _CRTIMP + wchar_t* + __cdecl + _itow( + _In_ int _Value, + _Pre_notnull_ _Post_z_ wchar_t *_Dest, + _In_ int _Radix); + + _CRTIMP + wchar_t* + __cdecl + _ltow( + _In_ long _Value, + _Pre_notnull_ _Post_z_ wchar_t *_Dest, + _In_ int _Radix); + + _CRTIMP + wchar_t* + __cdecl + _ultow( + _In_ unsigned long _Value, + _Pre_notnull_ _Post_z_ wchar_t *_Dest, + _In_ int _Radix); + + _Check_return_ + double + __cdecl + wcstod( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr); + + _Check_return_ + _CRTIMP + double + __cdecl + _wcstod_l( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_opt_ _locale_t _Locale); + float __cdecl wcstof( const wchar_t *nptr, wchar_t **endptr); + #if !defined __NO_ISOCEXT /* in libmingwex.a */ float __cdecl wcstof (const wchar_t * __restrict__, wchar_t ** __restrict__); long double __cdecl wcstold (const wchar_t * __restrict__, wchar_t ** __restrict__); #endif /* __NO_ISOCEXT */ - long __cdecl wcstol(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix); - _CRTIMP long __cdecl _wcstol_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale); - unsigned long __cdecl wcstoul(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix); - _CRTIMP unsigned long __cdecl _wcstoul_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale); - _CRTIMP wchar_t *__cdecl _wgetenv(const wchar_t *_VarName); + + _Check_return_ + long + __cdecl + wcstol( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_ int _Radix); + + _Check_return_ + _CRTIMP + long + __cdecl + _wcstol_l( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale); + + _Check_return_ + unsigned long + __cdecl + wcstoul( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_ int _Radix); + + _Check_return_ + _CRTIMP + unsigned long + __cdecl + _wcstoul_l( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + wchar_t* + __cdecl + _wgetenv( + _In_z_ const wchar_t *_VarName); + #ifndef _CRT_WSYSTEM_DEFINED #define _CRT_WSYSTEM_DEFINED - _CRTIMP int __cdecl _wsystem(const wchar_t *_Command); + _CRTIMP + int + __cdecl + _wsystem( + _In_opt_z_ const wchar_t *_Command); #endif - _CRTIMP double __cdecl _wtof(const wchar_t *_Str); - _CRTIMP double __cdecl _wtof_l(const wchar_t *_Str,_locale_t _Locale); - _CRTIMP int __cdecl _wtoi(const wchar_t *_Str); - _CRTIMP int __cdecl _wtoi_l(const wchar_t *_Str,_locale_t _Locale); - _CRTIMP long __cdecl _wtol(const wchar_t *_Str); - _CRTIMP long __cdecl _wtol_l(const wchar_t *_Str,_locale_t _Locale); + + _Check_return_ + _CRTIMP + double + __cdecl + _wtof( + _In_z_ const wchar_t *_Str); + + _Check_return_ + _CRTIMP + double + __cdecl + _wtof_l( + _In_z_ const wchar_t *_Str, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + _wtoi( + _In_z_ const wchar_t *_Str); + + _Check_return_ + _CRTIMP + int + __cdecl + _wtoi_l( + _In_z_ const wchar_t *_Str, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + long + __cdecl + _wtol( + _In_z_ const wchar_t *_Str); + + _Check_return_ + _CRTIMP + long + __cdecl + _wtol_l( + _In_z_ const wchar_t *_Str, + _In_opt_ _locale_t _Locale); #if _INTEGRAL_MAX_BITS >= 64 - __MINGW_EXTENSION _CRTIMP wchar_t *__cdecl _i64tow(__int64 _Val,wchar_t *_DstBuf,int _Radix); - __MINGW_EXTENSION _CRTIMP wchar_t *__cdecl _ui64tow(unsigned __int64 _Val,wchar_t *_DstBuf,int _Radix); - __MINGW_EXTENSION _CRTIMP __int64 __cdecl _wtoi64(const wchar_t *_Str); - __MINGW_EXTENSION _CRTIMP __int64 __cdecl _wtoi64_l(const wchar_t *_Str,_locale_t _Locale); - __MINGW_EXTENSION _CRTIMP __int64 __cdecl _wcstoi64(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix); - __MINGW_EXTENSION _CRTIMP __int64 __cdecl _wcstoi64_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale); - __MINGW_EXTENSION _CRTIMP unsigned __int64 __cdecl _wcstoui64(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix); - __MINGW_EXTENSION _CRTIMP unsigned __int64 __cdecl _wcstoui64_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale); -#endif -#endif + + __MINGW_EXTENSION + _CRTIMP + wchar_t* + __cdecl + _i64tow( + _In_ __int64 _Val, + _Pre_notnull_ _Post_z_ wchar_t *_DstBuf, + _In_ int _Radix); + + __MINGW_EXTENSION + _CRTIMP + wchar_t* + __cdecl + _ui64tow( + _In_ unsigned __int64 _Val, + _Pre_notnull_ _Post_z_ wchar_t *_DstBuf, + _In_ int _Radix); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + __int64 + __cdecl + _wtoi64( + _In_z_ const wchar_t *_Str); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + __int64 + __cdecl + _wtoi64_l( + _In_z_ const wchar_t *_Str, + _In_opt_ _locale_t _Locale); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + __int64 + __cdecl + _wcstoi64( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_ int _Radix); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + __int64 + __cdecl + _wcstoi64_l( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + unsigned __int64 + __cdecl + _wcstoui64( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_ int _Radix); + + _Check_return_ + __MINGW_EXTENSION + _CRTIMP + unsigned __int64 + __cdecl + _wcstoui64_l( + _In_z_ const wchar_t *_Str, + _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, + _In_ int _Radix, + _In_opt_ _locale_t _Locale); + +#endif /* _INTEGRAL_MAX_BITS >= 64 */ + +#endif /* _WSTDLIB_DEFINED */ #ifndef _POSIX_ + #ifndef _WSTDLIBP_DEFINED #define _WSTDLIBP_DEFINED - _CRTIMP wchar_t *__cdecl _wfullpath(wchar_t *_FullPath,const wchar_t *_Path,size_t _SizeInWords); - _CRTIMP void __cdecl _wmakepath(wchar_t *_ResultPath,const wchar_t *_Drive,const wchar_t *_Dir,const wchar_t *_Filename,const wchar_t *_Ext); + + _Check_return_ + _CRTIMP + wchar_t* + __cdecl + _wfullpath( + _Out_writes_opt_z_(_SizeInWords) wchar_t *_FullPath, + _In_z_ const wchar_t *_Path, + _In_ size_t _SizeInWords); + + _CRTIMP + void + __cdecl + _wmakepath( + _Pre_notnull_ _Post_z_ wchar_t *_ResultPath, + _In_opt_z_ const wchar_t *_Drive, + _In_opt_z_ const wchar_t *_Dir, + _In_opt_z_ const wchar_t *_Filename, + _In_opt_z_ const wchar_t *_Ext); + #ifndef _CRT_WPERROR_DEFINED #define _CRT_WPERROR_DEFINED - _CRTIMP void __cdecl _wperror(const wchar_t *_ErrMsg); -#endif - _CRTIMP int __cdecl _wputenv(const wchar_t *_EnvString); - _CRTIMP void __cdecl _wsearchenv(const wchar_t *_Filename,const wchar_t *_EnvVar,wchar_t *_ResultPath); - _CRTIMP void __cdecl _wsplitpath(const wchar_t *_FullPath,wchar_t *_Drive,wchar_t *_Dir,wchar_t *_Filename,wchar_t *_Ext); -#endif + _CRTIMP + void + __cdecl + _wperror( + _In_opt_z_ const wchar_t *_ErrMsg); #endif + _Check_return_ + _CRTIMP + int + __cdecl + _wputenv( + _In_z_ const wchar_t *_EnvString); + + _CRTIMP + void + __cdecl + _wsearchenv( + _In_z_ const wchar_t *_Filename, + _In_z_ const wchar_t *_EnvVar, + _Pre_notnull_ _Post_z_ wchar_t *_ResultPath); + + _CRTIMP + void + __cdecl + _wsplitpath( + _In_z_ const wchar_t *_FullPath, + _Pre_maybenull_ _Post_z_ wchar_t *_Drive, + _Pre_maybenull_ _Post_z_ wchar_t *_Dir, + _Pre_maybenull_ _Post_z_ wchar_t *_Filename, + _Pre_maybenull_ _Post_z_ wchar_t *_Ext); + +#endif /* _WSTDLIBP_DEFINED */ + +#endif /* _POSIX_ */ + #ifndef _WSTRING_DEFINED #define _WSTRING_DEFINED - _CRTIMP wchar_t *__cdecl _wcsdup(const wchar_t *_Str); - wchar_t *__cdecl wcscat(wchar_t *_Dest,const wchar_t *_Source); - _CONST_RETURN wchar_t *__cdecl wcschr(const wchar_t *_Str,wchar_t _Ch); - int __cdecl wcscmp(const wchar_t *_Str1,const wchar_t *_Str2); - wchar_t *__cdecl wcscpy(wchar_t *_Dest,const wchar_t *_Source); - size_t __cdecl wcscspn(const wchar_t *_Str,const wchar_t *_Control); - size_t __cdecl wcslen(const wchar_t *_Str); - size_t __cdecl wcsnlen(const wchar_t *_Src,size_t _MaxCount); - wchar_t *__cdecl wcsncat(wchar_t *_Dest,const wchar_t *_Source,size_t _Count); - int __cdecl wcsncmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount); - wchar_t *__cdecl wcsncpy(wchar_t *_Dest,const wchar_t *_Source,size_t _Count); - _CONST_RETURN wchar_t *__cdecl wcspbrk(const wchar_t *_Str,const wchar_t *_Control); - _CONST_RETURN wchar_t *__cdecl wcsrchr(const wchar_t *_Str,wchar_t _Ch); - size_t __cdecl wcsspn(const wchar_t *_Str,const wchar_t *_Control); - _CONST_RETURN wchar_t *__cdecl wcsstr(const wchar_t *_Str,const wchar_t *_SubStr); - wchar_t *__cdecl wcstok(wchar_t *_Str,const wchar_t *_Delim); - _CRTIMP wchar_t *__cdecl _wcserror(int _ErrNum); - _CRTIMP wchar_t *__cdecl __wcserror(const wchar_t *_Str); - _CRTIMP int __cdecl _wcsicmp(const wchar_t *_Str1,const wchar_t *_Str2); - _CRTIMP int __cdecl _wcsicmp_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale); - _CRTIMP int __cdecl _wcsnicmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount); - _CRTIMP int __cdecl _wcsnicmp_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale); - _CRTIMP wchar_t *__cdecl _wcsnset(wchar_t *_Str,wchar_t _Val,size_t _MaxCount); - _CRTIMP wchar_t *__cdecl _wcsrev(wchar_t *_Str); - _CRTIMP wchar_t *__cdecl _wcsset(wchar_t *_Str,wchar_t _Val); - _CRTIMP wchar_t *__cdecl _wcslwr(wchar_t *_String); - _CRTIMP wchar_t *_wcslwr_l(wchar_t *_String,_locale_t _Locale); - _CRTIMP wchar_t *__cdecl _wcsupr(wchar_t *_String); - _CRTIMP wchar_t *_wcsupr_l(wchar_t *_String,_locale_t _Locale); - size_t __cdecl wcsxfrm(wchar_t *_Dst,const wchar_t *_Src,size_t _MaxCount); - _CRTIMP size_t __cdecl _wcsxfrm_l(wchar_t *_Dst,const wchar_t *_Src,size_t _MaxCount,_locale_t _Locale); - int __cdecl wcscoll(const wchar_t *_Str1,const wchar_t *_Str2); - _CRTIMP int __cdecl _wcscoll_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale); - _CRTIMP int __cdecl _wcsicoll(const wchar_t *_Str1,const wchar_t *_Str2); - _CRTIMP int __cdecl _wcsicoll_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale); - _CRTIMP int __cdecl _wcsncoll(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount); - _CRTIMP int __cdecl _wcsncoll_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale); - _CRTIMP int __cdecl _wcsnicoll(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount); - _CRTIMP int __cdecl _wcsnicoll_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale); -#ifndef NO_OLDNAMES - _CRTIMP wchar_t *__cdecl wcsdup(const wchar_t *_Str); + _Check_return_ + _CRTIMP + wchar_t* + __cdecl + _wcsdup( + _In_z_ const wchar_t *_Str); + + wchar_t* + __cdecl + wcscat( + _Inout_updates_z_(_String_length_(_Dest) + _String_length_(_Source) + 1) wchar_t *_Dest, + _In_z_ const wchar_t *_Source); + + _CONST_RETURN + wchar_t* + __cdecl + wcschr( + _In_z_ const wchar_t *_Str, + wchar_t _Ch); + + _Check_return_ + int + __cdecl + wcscmp( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2); + + wchar_t* + __cdecl + wcscpy( + _Out_writes_z_(_String_length_(_Source) + 1) wchar_t *_Dest, + _In_z_ const wchar_t *_Source); + + _Check_return_ + size_t + __cdecl + wcscspn( + _In_z_ const wchar_t *_Str, + _In_z_ const wchar_t *_Control); + + size_t + __cdecl + wcslen( + _In_z_ const wchar_t *_Str); + + _When_(_MaxCount > _String_length_(_Src), + _Post_satisfies_(return == _String_length_(_Src))) + _When_(_MaxCount <= _String_length_(_Src), + _Post_satisfies_(return == _MaxCount)) + size_t + __cdecl + wcsnlen( + _In_reads_or_z_(_MaxCount) const wchar_t *_Src, + _In_ size_t _MaxCount); + + wchar_t* + __cdecl + wcsncat( + wchar_t *_Dest, + const wchar_t *_Source, + size_t _Count); + + _Check_return_ + int + __cdecl + wcsncmp( + _In_reads_or_z_(_MaxCount) const wchar_t *_Str1, + _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, + _In_ size_t _MaxCount); + + wchar_t* + __cdecl + wcsncpy( + wchar_t *_Dest, + const wchar_t *_Source, + size_t _Count); + + _Check_return_ + _CONST_RETURN + wchar_t* + __cdecl + wcspbrk( + _In_z_ const wchar_t *_Str, + _In_z_ const wchar_t *_Control); + + _Check_return_ + _CONST_RETURN + wchar_t* + __cdecl + wcsrchr( + _In_z_ const wchar_t *_Str, + _In_ wchar_t _Ch); + + _Check_return_ + size_t + __cdecl + wcsspn( + _In_z_ const wchar_t *_Str, + _In_z_ const wchar_t *_Control); + + _CONST_RETURN + wchar_t* + __cdecl + wcsstr( + _In_z_ const wchar_t *_Str, + _In_z_ const wchar_t *_SubStr); + + _Check_return_ + wchar_t* + __cdecl + wcstok( + _Inout_opt_z_ wchar_t *_Str, + _In_z_ const wchar_t *_Delim); + + _Check_return_ + _CRTIMP + wchar_t* + __cdecl + _wcserror( + _In_ int _ErrNum); + + _Check_return_ + _CRTIMP + wchar_t* + __cdecl + __wcserror( + _In_opt_z_ const wchar_t *_Str); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsicmp( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsicmp_l( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsnicmp( + _In_reads_or_z_(_MaxCount) const wchar_t *_Str1, + _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, + _In_ size_t _MaxCount); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsnicmp_l( + _In_reads_or_z_(_MaxCount) const wchar_t *_Str1, + _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale); + + _CRTIMP + wchar_t* + __cdecl + _wcsnset( + wchar_t *_Str, + wchar_t _Val, + size_t _MaxCount); + + _CRTIMP + wchar_t* + __cdecl + _wcsrev( + _Inout_z_ wchar_t *_Str); + + _CRTIMP + wchar_t* + __cdecl + _wcsset( + wchar_t *_Str, + wchar_t _Val); + + _CRTIMP + wchar_t* + __cdecl + _wcslwr( + _Inout_z_ wchar_t *_String); + + _CRTIMP + wchar_t* + _wcslwr_l( + wchar_t *_String, + _locale_t _Locale); + + _CRTIMP + wchar_t* + __cdecl + _wcsupr( + _Inout_z_ wchar_t *_String); + + _CRTIMP + wchar_t* + _wcsupr_l( + wchar_t *_String, + _locale_t _Locale); + + _Check_return_opt_ + size_t + __cdecl + wcsxfrm( + _Out_writes_opt_(_MaxCount) _Post_maybez_ wchar_t *_Dst, + _In_z_ const wchar_t *_Src, + _In_ size_t _MaxCount); + + _Check_return_opt_ + _CRTIMP + size_t + __cdecl + _wcsxfrm_l( + _Out_writes_opt_(_MaxCount) _Post_maybez_ wchar_t *_Dst, + _In_z_ const wchar_t *_Src, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale); + + _Check_return_ + int + __cdecl + wcscoll( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcscoll_l( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsicoll( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsicoll_l( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsncoll( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2, + _In_ size_t _MaxCount); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsncoll_l( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsnicoll( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2, + _In_ size_t _MaxCount); + + _Check_return_ + _CRTIMP + int + __cdecl + _wcsnicoll_l( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2, + _In_ size_t _MaxCount, + _In_opt_ _locale_t _Locale); + +#ifndef NO_OLDNAMES + + _Check_return_ + _CRTIMP + wchar_t* + __cdecl + wcsdup( + _In_z_ const wchar_t *_Str); + #define wcswcs wcsstr - _CRTIMP int __cdecl wcsicmp(const wchar_t *_Str1,const wchar_t *_Str2); - _CRTIMP int __cdecl wcsnicmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount); - _CRTIMP wchar_t *__cdecl wcsnset(wchar_t *_Str,wchar_t _Val,size_t _MaxCount); - _CRTIMP wchar_t *__cdecl wcsrev(wchar_t *_Str); - _CRTIMP wchar_t *__cdecl wcsset(wchar_t *_Str,wchar_t _Val); - _CRTIMP wchar_t *__cdecl wcslwr(wchar_t *_Str); - _CRTIMP wchar_t *__cdecl wcsupr(wchar_t *_Str); - _CRTIMP int __cdecl wcsicoll(const wchar_t *_Str1,const wchar_t *_Str2); -#endif -#endif + + _Check_return_ + _CRTIMP + int + __cdecl + wcsicmp( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2); + + _Check_return_ + _CRTIMP + int + __cdecl + wcsnicmp( + _In_reads_or_z_(_MaxCount) const wchar_t *_Str1, + _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, + _In_ size_t _MaxCount); + + _CRTIMP + wchar_t* + __cdecl + wcsnset( + _Inout_updates_z_(_MaxCount) wchar_t *_Str, + _In_ wchar_t _Val, + _In_ size_t _MaxCount); + + _CRTIMP + wchar_t* + __cdecl + wcsrev( + _Inout_z_ wchar_t *_Str); + + _CRTIMP + wchar_t* + __cdecl + wcsset( + _Inout_z_ wchar_t *_Str, + wchar_t _Val); + + _CRTIMP + wchar_t* + __cdecl + wcslwr( + _Inout_z_ wchar_t *_Str); + + _CRTIMP + wchar_t* + __cdecl + wcsupr( + _Inout_z_ wchar_t *_Str); + + _Check_return_ + _CRTIMP + int + __cdecl + wcsicoll( + _In_z_ const wchar_t *_Str1, + _In_z_ const wchar_t *_Str2); + +#endif /* NO_OLDNAMES */ + +#endif /* _WSTRING_DEFINED */ #ifndef _TM_DEFINED #define _TM_DEFINED @@ -747,22 +2278,97 @@ _CRTIMP int __cdecl iswblank(wint_t _C); #ifndef _WTIME_DEFINED #define _WTIME_DEFINED - _CRTIMP wchar_t *__cdecl _wasctime(const struct tm *_Tm); - _CRTIMP wchar_t *__cdecl _wctime32(const __time32_t *_Time); - size_t __cdecl wcsftime(wchar_t *_Buf,size_t _SizeInWords,const wchar_t *_Format,const struct tm *_Tm); - _CRTIMP size_t __cdecl _wcsftime_l(wchar_t *_Buf,size_t _SizeInWords,const wchar_t *_Format,const struct tm *_Tm,_locale_t _Locale); - _CRTIMP wchar_t *__cdecl _wstrdate(wchar_t *_Buffer); - _CRTIMP wchar_t *__cdecl _wstrtime(wchar_t *_Buffer); + _CRTIMP + wchar_t* + __cdecl + _wasctime( + _In_ const struct tm *_Tm); - _CRTIMP errno_t __cdecl _wasctime_s(wchar_t *_Buf,size_t _SizeInWords,const struct tm *_Tm); - _CRTIMP errno_t __cdecl _wctime32_s(wchar_t *_Buf,size_t _SizeInWords,const __time32_t *_Time); - _CRTIMP errno_t __cdecl _wstrdate_s(wchar_t *_Buf,size_t _SizeInWords); - _CRTIMP errno_t __cdecl _wstrtime_s(wchar_t *_Buf,size_t _SizeInWords); + _CRTIMP + wchar_t* + __cdecl + _wctime32( + _In_ const __time32_t *_Time); + + _Success_(return > 0) + size_t + __cdecl + wcsftime( + _Out_writes_z_(_SizeInWords) wchar_t *_Buf, + _In_ size_t _SizeInWords, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_ const struct tm *_Tm); + + _Success_(return > 0) + _CRTIMP + size_t + __cdecl + _wcsftime_l( + _Out_writes_z_(_SizeInWords) wchar_t *_Buf, + _In_ size_t _SizeInWords, + _In_z_ _Printf_format_string_ const wchar_t *_Format, + _In_ const struct tm *_Tm, + _In_opt_ _locale_t _Locale); + + _CRTIMP + wchar_t* + __cdecl + _wstrdate( + _Out_writes_z_(9) wchar_t *_Buffer); + + _CRTIMP + wchar_t* + __cdecl + _wstrtime( + _Out_writes_z_(9) wchar_t *_Buffer); + + _CRTIMP + errno_t + __cdecl + _wasctime_s( + _Out_writes_(_SizeInWords) _Post_readable_size_(26) wchar_t *_Buf, + _In_ size_t _SizeInWords, + _In_ const struct tm *_Tm); + + _CRTIMP + errno_t + __cdecl + _wctime32_s( + _Out_writes_(_SizeInWords) _Post_readable_size_(26) wchar_t *_Buf, + _In_ size_t _SizeInWords, + _In_ const __time32_t *_Time); + + _CRTIMP + errno_t + __cdecl + _wstrdate_s( + _Out_writes_(_SizeInWords) _Post_readable_size_(9) wchar_t *_Buf, + _In_range_(>=, 9) size_t _SizeInWords); + + _CRTIMP + errno_t + __cdecl + _wstrtime_s( + _Out_writes_(_SizeInWords) _Post_readable_size_(9) wchar_t *_Buf, + _In_ size_t _SizeInWords); #if _INTEGRAL_MAX_BITS >= 64 - _CRTIMP wchar_t *__cdecl _wctime64(const __time64_t *_Time); - _CRTIMP errno_t __cdecl _wctime64_s(wchar_t *_Buf,size_t _SizeInWords,const __time64_t *_Time); -#endif + + _CRTIMP + wchar_t* + __cdecl + _wctime64( + _In_ const __time64_t *_Time); + + _CRTIMP + errno_t + __cdecl + _wctime64_s( + _Out_writes_(_SizeInWords) _Post_readable_size_(26) wchar_t *_Buf, + _In_ size_t _SizeInWords, + _In_ const __time64_t *_Time); + +#endif /* _INTEGRAL_MAX_BITS >= 64 */ #if !defined (RC_INVOKED) && !defined (_INC_WTIME_INL) #define _INC_WTIME_INL @@ -778,33 +2384,216 @@ __CRT_INLINE wchar_t *__cdecl _wctime(const time_t *_Time) { return _wctime64(_T typedef int mbstate_t; typedef wchar_t _Wint_t; - wint_t __cdecl btowc(int); - size_t __cdecl mbrlen(const char *_Ch,size_t _SizeInBytes,mbstate_t *_State); - size_t __cdecl mbrtowc(wchar_t *_DstCh,const char *_SrcCh,size_t _SizeInBytes,mbstate_t *_State); - size_t __cdecl mbsrtowcs(wchar_t *_Dest,const char **_PSrc,size_t _Count,mbstate_t *_State); - size_t __cdecl wcrtomb(char *_Dest,wchar_t _Source,mbstate_t *_State); - size_t __cdecl wcsrtombs(char *_Dest,const wchar_t **_PSource,size_t _Count,mbstate_t *_State); - int __cdecl wctob(wint_t _WCh); + wint_t + __cdecl + btowc( + int); + + size_t + __cdecl + mbrlen( + _In_reads_bytes_opt_(_SizeInBytes) _Pre_opt_z_ const char *_Ch, + _In_ size_t _SizeInBytes, + _Out_opt_ mbstate_t *_State); + + size_t + __cdecl + mbrtowc( + _Pre_maybenull_ _Post_z_ wchar_t *_DstCh, + _In_reads_bytes_opt_(_SizeInBytes) _Pre_opt_z_ const char *_SrcCh, + _In_ size_t _SizeInBytes, + _Out_opt_ mbstate_t *_State); + + size_t + __cdecl + mbsrtowcs( + _Pre_notnull_ _Post_z_ wchar_t *_Dest, + _Inout_ _Deref_prepost_opt_valid_ const char **_PSrc, + _In_ size_t _Count, + _Inout_opt_ mbstate_t *_State); + + size_t + __cdecl + wcrtomb( + _Pre_maybenull_ _Post_z_ char *_Dest, + _In_ wchar_t _Source, + _Out_opt_ mbstate_t *_State); + + size_t + __cdecl + wcsrtombs( + _Pre_maybenull_ _Post_z_ char *_Dest, + _Inout_ _Deref_prepost_z_ const wchar_t **_PSource, + _In_ size_t _Count, + _Out_opt_ mbstate_t *_State); + + int + __cdecl + wctob( + _In_ wint_t _WCh); #ifndef __NO_ISOCEXT /* these need static lib libmingwex.a */ - wchar_t *__cdecl wmemset(wchar_t *s, wchar_t c, size_t n); - _CONST_RETURN wchar_t *__cdecl wmemchr(const wchar_t *s, wchar_t c, size_t n); - int wmemcmp(const wchar_t *s1, const wchar_t *s2,size_t n); - wchar_t *__cdecl wmemcpy(wchar_t *s1,const wchar_t *s2,size_t n); - wchar_t *__cdecl wmemmove(wchar_t *s1, const wchar_t *s2, size_t n); - __MINGW_EXTENSION long long __cdecl wcstoll(const wchar_t *nptr,wchar_t **endptr, int base); - __MINGW_EXTENSION unsigned long long __cdecl wcstoull(const wchar_t *nptr,wchar_t **endptr, int base); + + wchar_t* + __cdecl + wmemset( + _Out_writes_all_(_N) wchar_t *_S, + _In_ wchar_t _C, + _In_ size_t _N); + + _CONST_RETURN + wchar_t* + __cdecl + wmemchr( + _In_reads_(_N) const wchar_t *_S, + _In_ wchar_t _C, + _In_ size_t _N); + + int + wmemcmp( + _In_reads_(_N) const wchar_t *_S1, + _In_reads_(_N) const wchar_t *_S2, + _In_ size_t _N); + + _Post_equal_to_(_S1) + _At_buffer_(_S1, _Iter_, _N, _Post_satisfies_(_S1[_Iter_] == _S2[_Iter_])) + wchar_t* + __cdecl + wmemcpy( + _Out_writes_all_(_N) wchar_t *_S1, + _In_reads_(_N) const wchar_t *_S2, + _In_ size_t _N); + + wchar_t* + __cdecl + wmemmove( + _Out_writes_all_opt_(_N) wchar_t *_S1, + _In_reads_opt_(_N) const wchar_t *_S2, + _In_ size_t _N); + + __MINGW_EXTENSION + long long + __cdecl + wcstoll( + const wchar_t *nptr, + wchar_t **endptr, + int base); + + __MINGW_EXTENSION + unsigned long long + __cdecl + wcstoull( + const wchar_t *nptr, + wchar_t **endptr, + int base); + #endif /* __NO_ISOCEXT */ - void *__cdecl memmove(void *_Dst,const void *_Src,size_t _MaxCount); - void *__cdecl memcpy(void *_Dst,const void *_Src,size_t _MaxCount); - __CRT_INLINE int __cdecl fwide(FILE *_F,int _M) { (void)_F; return (_M); } - __CRT_INLINE int __cdecl mbsinit(const mbstate_t *_P) { return (!_P || *_P==0); } - __CRT_INLINE _CONST_RETURN wchar_t *__cdecl wmemchr(const wchar_t *_S,wchar_t _C,size_t _N) { for (;0<_N;++_S,--_N) if (*_S==_C) return (_CONST_RETURN wchar_t *)(_S); return (0); } - __CRT_INLINE int __cdecl wmemcmp(const wchar_t *_S1,const wchar_t *_S2,size_t _N) { for (; 0 < _N; ++_S1,++_S2,--_N) if (*_S1!=*_S2) return (*_S1 < *_S2 ? -1 : +1); return (0); } - __CRT_INLINE wchar_t *__cdecl wmemcpy(wchar_t *_S1,const wchar_t *_S2,size_t _N) { return (wchar_t *)memcpy(_S1,_S2,_N*sizeof(wchar_t)); } - __CRT_INLINE wchar_t *__cdecl wmemmove(wchar_t *_S1,const wchar_t *_S2,size_t _N) { return (wchar_t *)memmove(_S1,_S2,_N*sizeof(wchar_t)); } - __CRT_INLINE wchar_t *__cdecl wmemset(wchar_t *_S,wchar_t _C,size_t _N) { + void* + __cdecl + memmove( + _Out_writes_bytes_all_opt_(_MaxCount) void *_Dst, + _In_reads_bytes_opt_(_MaxCount) const void *_Src, + _In_ size_t _MaxCount); + + _Post_equal_to_(_Dst) + _At_buffer_((unsigned char*)_Dst, + _Iter_, + _MaxCount, + _Post_satisfies_(((unsigned char*)_Dst)[_Iter_] == ((unsigned char*)_Src)[_Iter_])) + void* + __cdecl + memcpy( + _Out_writes_bytes_all_(_MaxCount) void *_Dst, + _In_reads_bytes_(_MaxCount) const void *_Src, + _In_ size_t _MaxCount); + + __CRT_INLINE + int + __cdecl + fwide( + _In_opt_ FILE *_F, + int _M) + { + (void)_F; + return (_M); + } + + __CRT_INLINE + int + __cdecl + mbsinit( + _In_opt_ const mbstate_t *_P) + { + return (!_P || *_P==0); + } + + __CRT_INLINE + _CONST_RETURN + wchar_t* + __cdecl + wmemchr( + _In_reads_(_N) const wchar_t *_S, + _In_ wchar_t _C, + _In_ size_t _N) + { + for (;0<_N;++_S,--_N) + { + if (*_S==_C) return (_CONST_RETURN wchar_t *)(_S); + } + return (0); + } + + __CRT_INLINE + int + __cdecl + wmemcmp( + _In_reads_(_N) const wchar_t *_S1, + _In_reads_(_N) const wchar_t *_S2, + _In_ size_t _N) + { + for (; 0 < _N; ++_S1,++_S2,--_N) + { + if (*_S1!=*_S2) return (*_S1 < *_S2 ? -1 : +1); + } + return (0); + } + + _Post_equal_to_(_S1) + _At_buffer_(_S1, + _Iter_, + _N, + _Post_satisfies_(_S1[_Iter_] == _S2[_Iter_])) + __CRT_INLINE + wchar_t* + __cdecl + wmemcpy( + _Out_writes_all_(_N) wchar_t *_S1, + _In_reads_(_N) const wchar_t *_S2, + _In_ size_t _N) + { + return (wchar_t *)memcpy(_S1,_S2,_N*sizeof(wchar_t)); + } + + __CRT_INLINE + wchar_t* + __cdecl + wmemmove( + _Out_writes_all_opt_(_N) wchar_t *_S1, + _In_reads_opt_(_N) const wchar_t *_S2, + _In_ size_t _N) + { + return (wchar_t *)memmove(_S1,_S2,_N*sizeof(wchar_t)); + } + + __CRT_INLINE + wchar_t* + __cdecl + wmemset( + _Out_writes_all_(_N) wchar_t *_S, + _In_ wchar_t _C, + _In_ size_t _N) + { wchar_t *_Su = _S; for (;0<_N;++_Su,--_N) { *_Su = _C; diff --git a/include/ddk/acpiioct.h b/include/ddk/acpiioct.h index eeeb6e8eacc..9468d5a3aa1 100644 --- a/include/ddk/acpiioct.h +++ b/include/ddk/acpiioct.h @@ -57,7 +57,7 @@ typedef struct _ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING { ULONG MethodNameAsUlong; } DUMMYUNIONNAME; ULONG StringLength; - UCHAR String[ANYSIZE_ARRAY]; + _Field_size_bytes_(StringLength) _Null_terminated_ UCHAR String[ANYSIZE_ARRAY]; } ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING, *PACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING; typedef struct _ACPI_METHOD_ARGUMENT { @@ -65,7 +65,7 @@ typedef struct _ACPI_METHOD_ARGUMENT { USHORT DataLength; _ANONYMOUS_UNION union { ULONG Argument; - UCHAR Data[ANYSIZE_ARRAY]; + _Field_size_bytes_(DataLength) UCHAR Data[ANYSIZE_ARRAY]; } DUMMYUNIONNAME; } ACPI_METHOD_ARGUMENT; typedef ACPI_METHOD_ARGUMENT UNALIGNED *PACPI_METHOD_ARGUMENT; @@ -85,7 +85,7 @@ typedef struct _ACPI_EVAL_OUTPUT_BUFFER { ULONG Signature; ULONG Length; ULONG Count; - ACPI_METHOD_ARGUMENT Argument[ANYSIZE_ARRAY]; + _Field_size_bytes_(Length) ACPI_METHOD_ARGUMENT Argument[ANYSIZE_ARRAY]; } ACPI_EVAL_OUTPUT_BUFFER; typedef ACPI_EVAL_OUTPUT_BUFFER UNALIGNED *PACPI_EVAL_OUTPUT_BUFFER; @@ -96,12 +96,12 @@ typedef struct _ACPI_MANIPULATE_GLOBAL_LOCK_BUFFER { typedef struct _ACPI_EVAL_INPUT_BUFFER_EX { ULONG Signature; - CHAR MethodName[256]; + _Null_terminated_ CHAR MethodName[256]; } ACPI_EVAL_INPUT_BUFFER_EX, *PACPI_EVAL_INPUT_BUFFER_EX; typedef struct _ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_EX { ULONG Signature; - CHAR MethodName[256]; + _Null_terminated_ CHAR MethodName[256]; ULONG64 IntegerArgument; } ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_EX, *PACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_EX; @@ -109,7 +109,7 @@ typedef struct _ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING_EX { ULONG Signature; CHAR MethodName[256]; ULONG StringLength; - UCHAR String[ANYSIZE_ARRAY]; + _Field_size_(StringLength) _Null_terminated_ UCHAR String[ANYSIZE_ARRAY]; } ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING_EX, *PACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING_EX; typedef struct _ACPI_EVAL_INPUT_BUFFER_COMPLEX_EX { @@ -117,20 +117,20 @@ typedef struct _ACPI_EVAL_INPUT_BUFFER_COMPLEX_EX { CHAR MethodName[256]; ULONG Size; ULONG ArgumentCount; - ACPI_METHOD_ARGUMENT Argument[ANYSIZE_ARRAY]; + _Field_size_(ArgumentCount) ACPI_METHOD_ARGUMENT Argument[ANYSIZE_ARRAY]; } ACPI_EVAL_INPUT_BUFFER_COMPLEX_EX, *PACPI_EVAL_INPUT_BUFFER_COMPLEX_EX; typedef struct _ACPI_ENUM_CHILDREN_INPUT_BUFFER { ULONG Signature; ULONG Flags; ULONG NameLength; - CHAR Name[ANYSIZE_ARRAY]; + _Field_size_bytes_(NameLength) _Null_terminated_ CHAR Name[ANYSIZE_ARRAY]; } ACPI_ENUM_CHILDREN_INPUT_BUFFER, *PACPI_ENUM_CHILDREN_INPUT_BUFFER; typedef struct _ACPI_ENUM_CHILD { ULONG Flags; ULONG NameLength; - CHAR Name[ANYSIZE_ARRAY]; + _Field_size_bytes_(NameLength) _Null_terminated_ CHAR Name[ANYSIZE_ARRAY]; } ACPI_ENUM_CHILD; typedef ACPI_ENUM_CHILD UNALIGNED *PACPI_ENUM_CHILD; diff --git a/include/ddk/ndis.h b/include/ddk/ndis.h index bacae3a3f4b..d4716e062f1 100644 --- a/include/ddk/ndis.h +++ b/include/ddk/ndis.h @@ -5851,7 +5851,7 @@ BOOLEAN NTAPI NdisWaitEvent( _In_ PNDIS_EVENT Event, - _In_ UINT Timeout); + _In_ UINT MsToWait); /* NDIS intermediate miniport structures */ diff --git a/include/ndk/gpl.txt b/include/ndk/gpl.txt index ecbc0593737..d159169d105 100755 --- a/include/ndk/gpl.txt +++ b/include/ndk/gpl.txt @@ -336,4 +336,4 @@ This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. \ No newline at end of file +Public License instead of this License. diff --git a/include/ndk/lgpl.txt b/include/ndk/lgpl.txt index f166cc57b27..4362b49151d 100755 --- a/include/ndk/lgpl.txt +++ b/include/ndk/lgpl.txt @@ -499,4 +499,4 @@ necessary. Here is a sample; alter the names: , 1 April 1990 Ty Coon, President of Vice -That's all there is to it! \ No newline at end of file +That's all there is to it! diff --git a/include/ndk/ndk.txt b/include/ndk/ndk.txt index a4a63878e46..21858241110 100755 --- a/include/ndk/ndk.txt +++ b/include/ndk/ndk.txt @@ -26,4 +26,4 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of Alex Ionescu or -the NDK Project Contributors. \ No newline at end of file +the NDK Project Contributors. diff --git a/include/ndk/obfuncs.h b/include/ndk/obfuncs.h index a9b54d32c8b..96cc917564f 100644 --- a/include/ndk/obfuncs.h +++ b/include/ndk/obfuncs.h @@ -105,7 +105,7 @@ ObOpenObjectByName( _In_ POBJECT_ATTRIBUTES ObjectAttributes, _In_ POBJECT_TYPE ObjectType, _In_ KPROCESSOR_MODE AccessMode, - _In_ PACCESS_STATE PassedAccessState, + _In_opt_ PACCESS_STATE PassedAccessState, _In_ ACCESS_MASK DesiredAccess, _Inout_ PVOID ParseContext, _Out_ PHANDLE Handle diff --git a/include/ndk/rtlfuncs.h b/include/ndk/rtlfuncs.h index a48f974249f..46e180e2669 100644 --- a/include/ndk/rtlfuncs.h +++ b/include/ndk/rtlfuncs.h @@ -2316,9 +2316,9 @@ NTAPI RtlQueryAtomInAtomTable( _In_ PRTL_ATOM_TABLE AtomTable, _In_ RTL_ATOM Atom, - _Inout_opt_ PULONG RefCount, - _Inout_opt_ PULONG PinCount, - _Inout_opt_ PWSTR AtomName, + _Out_opt_ PULONG RefCount, + _Out_opt_ PULONG PinCount, + _Out_opt_z_bytecap_(*NameLength) PWSTR AtomName, _Inout_opt_ PULONG NameLength ); diff --git a/include/psdk/aclapi.h b/include/psdk/aclapi.h index 4b3b5e1336a..ad78bb76b0a 100644 --- a/include/psdk/aclapi.h +++ b/include/psdk/aclapi.h @@ -8,64 +8,196 @@ extern "C" { #endif -VOID WINAPI BuildExplicitAccessWithNameA(PEXPLICIT_ACCESS_A,LPSTR,DWORD,ACCESS_MODE,DWORD); -VOID WINAPI BuildExplicitAccessWithNameW(PEXPLICIT_ACCESS_W,LPWSTR,DWORD,ACCESS_MODE,DWORD); -DWORD WINAPI BuildSecurityDescriptorA(PTRUSTEE_A,PTRUSTEE_A ,ULONG,PEXPLICIT_ACCESS_A, - ULONG,PEXPLICIT_ACCESS_A,PSECURITY_DESCRIPTOR,PULONG,PSECURITY_DESCRIPTOR*); -DWORD WINAPI BuildSecurityDescriptorW(PTRUSTEE_W,PTRUSTEE_W ,ULONG,PEXPLICIT_ACCESS_W, - ULONG,PEXPLICIT_ACCESS_W,PSECURITY_DESCRIPTOR,PULONG,PSECURITY_DESCRIPTOR*); -VOID WINAPI BuildTrusteeWithNameA(PTRUSTEE_A,LPSTR); -VOID WINAPI BuildTrusteeWithNameW(PTRUSTEE_W,LPWSTR); -VOID WINAPI BuildTrusteeWithObjectsAndNameA(PTRUSTEE_A,POBJECTS_AND_NAME_A,SE_OBJECT_TYPE, - LPSTR,LPSTR,LPSTR); -VOID WINAPI BuildTrusteeWithObjectsAndNameW(PTRUSTEE_W,POBJECTS_AND_NAME_W,SE_OBJECT_TYPE, - LPWSTR,LPWSTR,LPWSTR); -VOID WINAPI BuildTrusteeWithObjectsAndSidA(PTRUSTEE_A,POBJECTS_AND_SID,GUID*,GUID*,PSID); -VOID WINAPI BuildTrusteeWithObjectsAndSidW(PTRUSTEE_W,POBJECTS_AND_SID,GUID*,GUID*,PSID); -VOID WINAPI BuildTrusteeWithSidA(PTRUSTEE_A,PSID); -VOID WINAPI BuildTrusteeWithSidW(PTRUSTEE_W,PSID); +VOID WINAPI BuildExplicitAccessWithNameA(_Inout_ PEXPLICIT_ACCESS_A, _In_opt_ LPSTR, _In_ DWORD, _In_ ACCESS_MODE, _In_ DWORD); +VOID WINAPI BuildExplicitAccessWithNameW(_Inout_ PEXPLICIT_ACCESS_W, _In_opt_ LPWSTR, _In_ DWORD, _In_ ACCESS_MODE, _In_ DWORD); + +DWORD +WINAPI +BuildSecurityDescriptorA( + _In_opt_ PTRUSTEE_A pOwner, + _In_opt_ PTRUSTEE_A pGroup, + _In_ ULONG cCountOfAccessEntries, + _In_reads_opt_(cCountOfAccessEntries) PEXPLICIT_ACCESS_A pListOfAccessEntries, + _In_ ULONG cCountOfAuditEntries, + _In_reads_opt_(cCountOfAuditEntries) PEXPLICIT_ACCESS_A pListOfAuditEntries, + _In_opt_ PSECURITY_DESCRIPTOR pOldSD, + _Out_ PULONG pSizeNewSD, + _Outptr_result_bytebuffer_(*pSizeNewSD) PSECURITY_DESCRIPTOR *pNewSD); + +DWORD +WINAPI +BuildSecurityDescriptorW( + _In_opt_ PTRUSTEE_W pOwner, + _In_opt_ PTRUSTEE_W pGroup, + _In_ ULONG cCountOfAccessEntries, + _In_reads_opt_(cCountOfAccessEntries) PEXPLICIT_ACCESS_W pListOfAccessEntries, + _In_ ULONG cCountOfAuditEntries, + _In_reads_opt_(cCountOfAuditEntries) PEXPLICIT_ACCESS_W pListOfAuditEntries, + _In_opt_ PSECURITY_DESCRIPTOR pOldSD, + _Out_ PULONG pSizeNewSD, + _Outptr_result_bytebuffer_(*pSizeNewSD) PSECURITY_DESCRIPTOR *pNewSD); + +VOID WINAPI BuildTrusteeWithNameA(_Inout_ PTRUSTEE_A, _In_opt_ LPSTR); +VOID WINAPI BuildTrusteeWithNameW(_Inout_ PTRUSTEE_W, _In_opt_ LPWSTR); +VOID WINAPI BuildTrusteeWithObjectsAndNameA(_Inout_ PTRUSTEE_A, _In_opt_ POBJECTS_AND_NAME_A, _In_opt_ SE_OBJECT_TYPE, _In_opt_ LPSTR, _In_opt_ LPSTR, _In_opt_ LPSTR); +VOID WINAPI BuildTrusteeWithObjectsAndNameW(_Inout_ PTRUSTEE_W, _In_opt_ POBJECTS_AND_NAME_W, _In_opt_ SE_OBJECT_TYPE, _In_opt_ LPWSTR, _In_opt_ LPWSTR, _In_opt_ LPWSTR); +VOID WINAPI BuildTrusteeWithObjectsAndSidA(_Inout_ PTRUSTEE_A, _In_opt_ POBJECTS_AND_SID, _In_opt_ GUID*, _In_opt_ GUID*, _In_opt_ PSID); +VOID WINAPI BuildTrusteeWithObjectsAndSidW(_Inout_ PTRUSTEE_W, _In_opt_ POBJECTS_AND_SID, _In_opt_ GUID*, _In_opt_ GUID*, _In_opt_ PSID); +VOID WINAPI BuildTrusteeWithSidA(_Inout_ PTRUSTEE_A, _In_opt_ PSID); +VOID WINAPI BuildTrusteeWithSidW(_Inout_ PTRUSTEE_W, _In_opt_ PSID); + #if (_WIN32_WINNT >= 0x0501) -DWORD WINAPI FreeInheritedFromArray(PINHERITED_FROMW,USHORT,PFN_OBJECT_MGR_FUNCTS); +DWORD +WINAPI +FreeInheritedFromArray( + _In_reads_(AceCnt) PINHERITED_FROMW pInheritArray, + _In_ USHORT AceCnt, + _In_opt_ PFN_OBJECT_MGR_FUNCTS pfnArray); #endif -DWORD WINAPI GetAuditedPermissionsFromAclA(PACL,PTRUSTEE_A,PACCESS_MASK,PACCESS_MASK); -DWORD WINAPI GetAuditedPermissionsFromAclW(PACL,PTRUSTEE_W,PACCESS_MASK,PACCESS_MASK); -DWORD WINAPI GetEffectiveRightsFromAclA(PACL,PTRUSTEE_A,PACCESS_MASK); -DWORD WINAPI GetEffectiveRightsFromAclW(PACL,PTRUSTEE_W,PACCESS_MASK); -DWORD WINAPI GetExplicitEntriesFromAclA(PACL,PULONG,PEXPLICIT_ACCESS_A*); -DWORD WINAPI GetExplicitEntriesFromAclW(PACL,PULONG,PEXPLICIT_ACCESS_W*); + +DWORD WINAPI GetAuditedPermissionsFromAclA(_In_ PACL, _In_ PTRUSTEE_A, _Out_ PACCESS_MASK, _Out_ PACCESS_MASK); +DWORD WINAPI GetAuditedPermissionsFromAclW(_In_ PACL, _In_ PTRUSTEE_W, _Out_ PACCESS_MASK, _Out_ PACCESS_MASK); +DWORD WINAPI GetEffectiveRightsFromAclA(_In_ PACL, _In_ PTRUSTEE_A, _Out_ PACCESS_MASK); +DWORD WINAPI GetEffectiveRightsFromAclW(_In_ PACL, _In_ PTRUSTEE_W, _Out_ PACCESS_MASK); + +DWORD +WINAPI +GetExplicitEntriesFromAclA( + _In_ PACL pacl, + _Out_ PULONG pcCountOfExplicitEntries, + _Outptr_result_buffer_(*pcCountOfExplicitEntries) PEXPLICIT_ACCESS_A *pListOfExplicitEntries); + +DWORD +WINAPI +GetExplicitEntriesFromAclW( + _In_ PACL pacl, + _Out_ PULONG pcCountOfExplicitEntries, + _Outptr_result_buffer_(*pcCountOfExplicitEntries) PEXPLICIT_ACCESS_W *pListOfExplicitEntries); + #if (_WIN32_WINNT >= 0x0501) -DWORD WINAPI GetInheritanceSourceA(LPSTR,SE_OBJECT_TYPE,SECURITY_INFORMATION,BOOL,GUID**,DWORD,PACL,PFN_OBJECT_MGR_FUNCTS,PGENERIC_MAPPING,PINHERITED_FROMA); -DWORD WINAPI GetInheritanceSourceW(LPWSTR,SE_OBJECT_TYPE,SECURITY_INFORMATION,BOOL,GUID**,DWORD,PACL,PFN_OBJECT_MGR_FUNCTS,PGENERIC_MAPPING,PINHERITED_FROMW); + +DWORD +WINAPI +GetInheritanceSourceA( + _In_ LPSTR pObjectName, + _In_ SE_OBJECT_TYPE ObjectType, + _In_ SECURITY_INFORMATION SecurityInfo, + _In_ BOOL Container, + _In_reads_opt_(GuidCount) GUID **pObjectClassGuids, + _In_ DWORD GuidCount, + _In_ PACL pAcl, + _In_opt_ PFN_OBJECT_MGR_FUNCTS pfnArray, + _In_ PGENERIC_MAPPING pGenericMapping, + _Out_ PINHERITED_FROMA pInheritArray); + +DWORD +WINAPI +GetInheritanceSourceW( + _In_ LPWSTR pObjectName, + _In_ SE_OBJECT_TYPE ObjectType, + _In_ SECURITY_INFORMATION SecurityInfo, + _In_ BOOL Container, + _In_reads_opt_(GuidCount) GUID **pObjectClassGuids, + _In_ DWORD GuidCount, + _In_ PACL pAcl, + _In_opt_ PFN_OBJECT_MGR_FUNCTS pfnArray, + _In_ PGENERIC_MAPPING pGenericMapping, + _Out_ PINHERITED_FROMW pInheritArray); + #endif -DWORD WINAPI GetNamedSecurityInfoA(LPSTR,SE_OBJECT_TYPE,SECURITY_INFORMATION, - PSID*,PSID*,PACL*,PACL*,PSECURITY_DESCRIPTOR*); -DWORD WINAPI GetNamedSecurityInfoW(LPWSTR,SE_OBJECT_TYPE,SECURITY_INFORMATION, - PSID*,PSID*,PACL*,PACL*,PSECURITY_DESCRIPTOR*); -DWORD WINAPI GetSecurityInfo(HANDLE,SE_OBJECT_TYPE,SECURITY_INFORMATION, - PSID*,PSID*,PACL*,PACL*,PSECURITY_DESCRIPTOR*); -TRUSTEE_FORM WINAPI GetTrusteeFormA(PTRUSTEE_A); -TRUSTEE_FORM WINAPI GetTrusteeFormW(PTRUSTEE_W); -LPSTR WINAPI GetTrusteeNameA(PTRUSTEE_A); -LPWSTR WINAPI GetTrusteeNameW(PTRUSTEE_W); -TRUSTEE_TYPE WINAPI GetTrusteeTypeA(PTRUSTEE_A); -TRUSTEE_TYPE WINAPI GetTrusteeTypeW(PTRUSTEE_W); -DWORD WINAPI LookupSecurityDescriptorPartsA(PTRUSTEE_A*,PTRUSTEE_A*,PULONG,PEXPLICIT_ACCESS_A*, - PULONG,PEXPLICIT_ACCESS_A*,PSECURITY_DESCRIPTOR); -DWORD WINAPI LookupSecurityDescriptorPartsW(PTRUSTEE_W*,PTRUSTEE_W*,PULONG,PEXPLICIT_ACCESS_W*, - PULONG,PEXPLICIT_ACCESS_W*,PSECURITY_DESCRIPTOR); -DWORD WINAPI SetEntriesInAclA(ULONG,PEXPLICIT_ACCESS_A,PACL,PACL*); -DWORD WINAPI SetEntriesInAclW(ULONG,PEXPLICIT_ACCESS_W,PACL,PACL*); -DWORD WINAPI SetNamedSecurityInfoA(LPSTR,SE_OBJECT_TYPE,SECURITY_INFORMATION,PSID,PSID,PACL,PACL); -DWORD WINAPI SetNamedSecurityInfoW(LPWSTR,SE_OBJECT_TYPE,SECURITY_INFORMATION,PSID,PSID,PACL,PACL); -DWORD WINAPI SetSecurityInfo(HANDLE,SE_OBJECT_TYPE,SECURITY_INFORMATION,PSID,PSID,PACL,PACL); -VOID WINAPI BuildImpersonateExplicitAccessWithNameA(PEXPLICIT_ACCESS_A,LPSTR,PTRUSTEE_A,DWORD,ACCESS_MODE,DWORD); -VOID WINAPI BuildImpersonateExplicitAccessWithNameW(PEXPLICIT_ACCESS_W,LPWSTR,PTRUSTEE_W,DWORD,ACCESS_MODE,DWORD); -VOID WINAPI BuildImpersonateTrusteeA(PTRUSTEE_A,PTRUSTEE_A); -VOID WINAPI BuildImpersonateTrusteeW(PTRUSTEE_W,PTRUSTEE_W); -PTRUSTEE_A WINAPI GetMultipleTrusteeA(PTRUSTEE_A); -PTRUSTEE_W WINAPI GetMultipleTrusteeW(PTRUSTEE_W); -MULTIPLE_TRUSTEE_OPERATION WINAPI GetMultipleTrusteeOperationA(PTRUSTEE_A); -MULTIPLE_TRUSTEE_OPERATION WINAPI GetMultipleTrusteeOperationW(PTRUSTEE_W); + +DWORD +WINAPI +GetNamedSecurityInfoA( + _In_ LPSTR pObjectName, + _In_ SE_OBJECT_TYPE ObjectType, + _In_ SECURITY_INFORMATION SecurityInfo, + _Out_opt_ PSID *ppsidOwner, + _Out_opt_ PSID *ppsidGroup, + _Out_opt_ PACL *ppDacl, + _Out_opt_ PACL *ppSacl, + _Out_ PSECURITY_DESCRIPTOR *ppSecurityDescriptor); + +DWORD +WINAPI +GetNamedSecurityInfoW( + _In_ LPWSTR pObjectName, + _In_ SE_OBJECT_TYPE ObjectType, + _In_ SECURITY_INFORMATION SecurityInfo, + _Out_opt_ PSID *ppsidOwner, + _Out_opt_ PSID *ppsidGroup, + _Out_opt_ PACL *ppDacl, + _Out_opt_ PACL *ppSacl, + _Out_ PSECURITY_DESCRIPTOR *ppSecurityDescriptor); + +DWORD +WINAPI +GetSecurityInfo( + _In_ HANDLE handle, + _In_ SE_OBJECT_TYPE ObjectType, + _In_ SECURITY_INFORMATION SecurityInfo, + _Out_opt_ PSID *ppsidOwner, + _Out_opt_ PSID *ppsidGroup, + _Out_opt_ PACL *ppDacl, + _Out_opt_ PACL *ppSacl, + _Out_opt_ PSECURITY_DESCRIPTOR *ppSecurityDescriptor); + +TRUSTEE_FORM WINAPI GetTrusteeFormA(_In_ PTRUSTEE_A); +TRUSTEE_FORM WINAPI GetTrusteeFormW(_In_ PTRUSTEE_W); +LPSTR WINAPI GetTrusteeNameA(_In_ PTRUSTEE_A); +LPWSTR WINAPI GetTrusteeNameW(_In_ PTRUSTEE_W); +TRUSTEE_TYPE WINAPI GetTrusteeTypeA(_In_opt_ PTRUSTEE_A); +TRUSTEE_TYPE WINAPI GetTrusteeTypeW(_In_opt_ PTRUSTEE_W); + +DWORD +WINAPI +LookupSecurityDescriptorPartsA( + _Out_opt_ PTRUSTEE_A *ppOwner, + _Out_opt_ PTRUSTEE_A *ppGroup, + _Out_opt_ PULONG pcCountOfAccessEntries, + _Outptr_result_buffer_maybenull_(*pcCountOfAccessEntries) PEXPLICIT_ACCESS_A *ppListOfAccessEntries, + _Out_opt_ PULONG pcCountOfAuditEntries, + _Outptr_result_buffer_maybenull_(*pcCountOfAuditEntries) PEXPLICIT_ACCESS_A *ppListOfAuditEntries, + _In_ PSECURITY_DESCRIPTOR pSD); + +DWORD +WINAPI +LookupSecurityDescriptorPartsW( + _Out_opt_ PTRUSTEE_W *ppOwner, + _Out_opt_ PTRUSTEE_W *ppGroup, + _Out_opt_ PULONG pcCountOfAccessEntries, + _Outptr_result_buffer_maybenull_(*pcCountOfAccessEntries) PEXPLICIT_ACCESS_W *ppListOfAccessEntries, + _Out_opt_ PULONG pcCountOfAuditEntries, + _Outptr_result_buffer_maybenull_(*pcCountOfAuditEntries) PEXPLICIT_ACCESS_W *ppListOfAuditEntries, + _In_ PSECURITY_DESCRIPTOR pSD); + +DWORD +WINAPI +SetEntriesInAclA( + _In_ ULONG cCountOfExplicitEntries, + _In_reads_opt_(cCountOfExplicitEntries) PEXPLICIT_ACCESS_A pListOfExplicitEntries, + _In_opt_ PACL OldAcl, + _Out_ PACL *NewAcl); + +DWORD +WINAPI +SetEntriesInAclW( + _In_ ULONG cCountOfExplicitEntries, + _In_reads_opt_(cCountOfExplicitEntries) PEXPLICIT_ACCESS_W pListOfExplicitEntries, + _In_opt_ PACL OldAcl, + _Out_ PACL *NewAcl); + +DWORD WINAPI SetNamedSecurityInfoA(_In_ LPSTR, _In_ SE_OBJECT_TYPE, _In_ SECURITY_INFORMATION, _In_opt_ PSID, _In_opt_ PSID, _In_opt_ PACL, _In_opt_ PACL); +DWORD WINAPI SetNamedSecurityInfoW(_In_ LPWSTR, _In_ SE_OBJECT_TYPE, _In_ SECURITY_INFORMATION, _In_opt_ PSID, _In_opt_ PSID, _In_opt_ PACL, _In_opt_ PACL); +DWORD WINAPI SetSecurityInfo(_In_ HANDLE, _In_ SE_OBJECT_TYPE, _In_ SECURITY_INFORMATION, _In_opt_ PSID, _In_opt_ PSID, _In_opt_ PACL, _In_opt_ PACL); +VOID WINAPI BuildImpersonateExplicitAccessWithNameA(_Inout_ PEXPLICIT_ACCESS_A, _In_opt_ LPSTR, _In_opt_ PTRUSTEE_A, _In_ DWORD, _In_ ACCESS_MODE, _In_ DWORD); +VOID WINAPI BuildImpersonateExplicitAccessWithNameW(_Inout_ PEXPLICIT_ACCESS_W, _In_opt_ LPWSTR, _In_opt_ PTRUSTEE_W, _In_ DWORD, _In_ ACCESS_MODE, _In_ DWORD); +VOID WINAPI BuildImpersonateTrusteeA(_Inout_ PTRUSTEE_A, _In_opt_ PTRUSTEE_A); +VOID WINAPI BuildImpersonateTrusteeW(_Inout_ PTRUSTEE_W, _In_opt_ PTRUSTEE_W); +PTRUSTEE_A WINAPI GetMultipleTrusteeA(_In_opt_ PTRUSTEE_A); +PTRUSTEE_W WINAPI GetMultipleTrusteeW(_In_opt_ PTRUSTEE_W); +MULTIPLE_TRUSTEE_OPERATION WINAPI GetMultipleTrusteeOperationA(_In_opt_ PTRUSTEE_A); +MULTIPLE_TRUSTEE_OPERATION WINAPI GetMultipleTrusteeOperationW(_In_opt_ PTRUSTEE_W); #ifdef UNICODE #define BuildExplicitAccessWithName BuildExplicitAccessWithNameW diff --git a/include/psdk/ddraw.h b/include/psdk/ddraw.h index 47ce451fb08..a7cf71eaa48 100644 --- a/include/psdk/ddraw.h +++ b/include/psdk/ddraw.h @@ -706,6 +706,7 @@ struct IDirectDrawClipper; typedef struct IDirectDraw *LPDIRECTDRAW; typedef struct IDirectDraw2 *LPDIRECTDRAW2; +typedef struct IDirectDraw3 *LPDIRECTDRAW3; typedef struct IDirectDraw4 *LPDIRECTDRAW4; typedef struct IDirectDraw7 *LPDIRECTDRAW7; typedef struct IDirectDrawSurface *LPDIRECTDRAWSURFACE; @@ -1213,8 +1214,8 @@ typedef struct _DDRGBA #if (defined (WIN32) || defined( _WIN32 ) ) && !defined( _NO_COM ) - typedef BOOL (* LPDDENUMCALLBACKA)(GUID *, LPSTR, LPSTR, LPVOID); - typedef BOOL (* LPDDENUMCALLBACKW)(GUID *, LPWSTR, LPWSTR, LPVOID); + typedef BOOL (WINAPI *LPDDENUMCALLBACKA)(GUID *, LPSTR, LPSTR, LPVOID); + typedef BOOL (WINAPI *LPDDENUMCALLBACKW)(GUID *, LPWSTR, LPWSTR, LPVOID); extern HRESULT WINAPI DirectDrawEnumerateW( LPDDENUMCALLBACKW lpCallback, LPVOID lpContext ); extern HRESULT WINAPI DirectDrawEnumerateA( LPDDENUMCALLBACKA lpCallback, LPVOID lpContext ); @@ -1223,8 +1224,8 @@ typedef struct _DDRGBA DECLARE_HANDLE(HMONITOR); #endif - typedef BOOL (*LPDDENUMCALLBACKEXA)(GUID *, LPSTR, LPSTR, LPVOID, HMONITOR); - typedef BOOL (*LPDDENUMCALLBACKEXW)(GUID *, LPWSTR, LPWSTR, LPVOID, HMONITOR); + typedef BOOL (WINAPI *LPDDENUMCALLBACKEXA)(GUID *, LPSTR, LPSTR, LPVOID, HMONITOR); + typedef BOOL (WINAPI *LPDDENUMCALLBACKEXW)(GUID *, LPWSTR, LPWSTR, LPVOID, HMONITOR); extern HRESULT WINAPI DirectDrawEnumerateExW( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags); extern HRESULT WINAPI DirectDrawEnumerateExA( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags); @@ -1556,6 +1557,94 @@ typedef struct _DDOVERLAYFX #endif #endif +#if defined( _WIN32 ) && !defined( _NO_COM ) + #undef INTERFACE + #define INTERFACE IDirectDraw3 + DECLARE_INTERFACE_(IDirectDraw3,IUnknown) + { + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + STDMETHOD(Compact)(THIS) PURE; + STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER *, IUnknown * ) PURE; + STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown * ) PURE; + STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC, LPDIRECTDRAWSURFACE *, IUnknown *) PURE; + STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE * ) PURE; + STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE; + STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE; + STDMETHOD(FlipToGDISurface)(THIS) PURE; + STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE; + STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE; + STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE; + STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE *) PURE; + STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE; + STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE; + STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE; + STDMETHOD(Initialize)(THIS_ GUID *) PURE; + STDMETHOD(RestoreDisplayMode)(THIS) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; + STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE; + STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE; + STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS, LPDWORD, LPDWORD) PURE; + STDMETHOD(GetSurfaceFromDC)(THIS_ HDC, LPDIRECTDRAWSURFACE*) PURE; +}; + + #if !defined(__cplusplus) || defined(CINTERFACE) + #define IDirectDraw3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) + #define IDirectDraw3_AddRef(p) (p)->lpVtbl->AddRef(p) + #define IDirectDraw3_Release(p) (p)->lpVtbl->Release(p) + #define IDirectDraw3_Compact(p) (p)->lpVtbl->Compact(p) + #define IDirectDraw3_CreateClipper(p,a,b,c) (p)->lpVtbl->CreateClipper(p,a,b,c) + #define IDirectDraw3_CreatePalette(p,a,b,c,d) (p)->lpVtbl->CreatePalette(p,a,b,c,d) + #define IDirectDraw3_CreateSurface(p,a,b,c) (p)->lpVtbl->CreateSurface(p,a,b,c) + #define IDirectDraw3_DuplicateSurface(p,a,b) (p)->lpVtbl->DuplicateSurface(p,a,b) + #define IDirectDraw3_EnumDisplayModes(p,a,b,c,d) (p)->lpVtbl->EnumDisplayModes(p,a,b,c,d) + #define IDirectDraw3_EnumSurfaces(p,a,b,c,d) (p)->lpVtbl->EnumSurfaces(p,a,b,c,d) + #define IDirectDraw3_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) + #define IDirectDraw3_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) + #define IDirectDraw3_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) + #define IDirectDraw3_GetFourCCCodes(p,a,b) (p)->lpVtbl->GetFourCCCodes(p,a,b) + #define IDirectDraw3_GetGDISurface(p,a) (p)->lpVtbl->GetGDISurface(p,a) + #define IDirectDraw3_GetMonitorFrequency(p,a) (p)->lpVtbl->GetMonitorFrequency(p,a) + #define IDirectDraw3_GetScanLine(p,a) (p)->lpVtbl->GetScanLine(p,a) + #define IDirectDraw3_GetVerticalBlankStatus(p,a) (p)->lpVtbl->GetVerticalBlankStatus(p,a) + #define IDirectDraw3_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) + #define IDirectDraw3_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) + #define IDirectDraw3_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) + #define IDirectDraw3_SetDisplayMode(p,a,b,c,d,e) (p)->lpVtbl->SetDisplayMode(p,a,b,c,d,e) + #define IDirectDraw3_WaitForVerticalBlank(p,a,b) (p)->lpVtbl->WaitForVerticalBlank(p,a,b) + #define IDirectDraw3_GetAvailableVidMem(p,a,b,c) (p)->lpVtbl->GetAvailableVidMem(p,a,b,c) + #define IDirectDraw3_GetSurfaceFromDC(p,a,b) (p)->lpVtbl->GetSurfaceFromDC(p,a,b) + #else + #define IDirectDraw3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) + #define IDirectDraw3_AddRef(p) (p)->AddRef() + #define IDirectDraw3_Release(p) (p)->Release() + #define IDirectDraw3_Compact(p) (p)->Compact() + #define IDirectDraw3_CreateClipper(p,a,b,c) (p)->CreateClipper(a,b,c) + #define IDirectDraw3_CreatePalette(p,a,b,c,d) (p)->CreatePalette(a,b,c,d) + #define IDirectDraw3_CreateSurface(p,a,b,c) (p)->CreateSurface(a,b,c) + #define IDirectDraw3_DuplicateSurface(p,a,b) (p)->DuplicateSurface(a,b) + #define IDirectDraw3_EnumDisplayModes(p,a,b,c,d) (p)->EnumDisplayModes(a,b,c,d) + #define IDirectDraw3_EnumSurfaces(p,a,b,c,d) (p)->EnumSurfaces(a,b,c,d) + #define IDirectDraw3_FlipToGDISurface(p) (p)->FlipToGDISurface() + #define IDirectDraw3_GetCaps(p,a,b) (p)->GetCaps(a,b) + #define IDirectDraw3_GetDisplayMode(p,a) (p)->GetDisplayMode(a) + #define IDirectDraw3_GetFourCCCodes(p,a,b) (p)->GetFourCCCodes(a,b) + #define IDirectDraw3_GetGDISurface(p,a) (p)->GetGDISurface(a) + #define IDirectDraw3_GetMonitorFrequency(p,a) (p)->GetMonitorFrequency(a) + #define IDirectDraw3_GetScanLine(p,a) (p)->GetScanLine(a) + #define IDirectDraw3_GetVerticalBlankStatus(p,a) (p)->GetVerticalBlankStatus(a) + #define IDirectDraw3_Initialize(p,a) (p)->Initialize(a) + #define IDirectDraw3_RestoreDisplayMode(p) (p)->RestoreDisplayMode() + #define IDirectDraw3_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) + #define IDirectDraw3_SetDisplayMode(p,a,b,c,d,e) (p)->SetDisplayMode(a,b,c,d,e) + #define IDirectDraw3_WaitForVerticalBlank(p,a,b) (p)->WaitForVerticalBlank(a,b) + #define IDirectDraw3_GetAvailableVidMem(p,a,b,c) (p)->GetAvailableVidMem(a,b,c) + #define IDirectDraw3_GetSurfaceFromDC(p,a,b) (p)->GetSurfaceFromDC(a,b) + #endif +#endif + + #if defined( _WIN32 ) && !defined( _NO_COM ) #undef INTERFACE #define INTERFACE IDirectDraw4 diff --git a/include/psdk/driverspecs.h b/include/psdk/driverspecs.h index f43e488c38d..162e8ec669c 100644 --- a/include/psdk/driverspecs.h +++ b/include/psdk/driverspecs.h @@ -34,7 +34,7 @@ #define _IRQL_uses_cancel_ #define __drv_setsIRQL(irql) -#define _Dispatch_type_ _Function_class_ +#define _Dispatch_type_ _Function_class_ #define _Kernel_clear_do_init_(yesNo) _Post_ _SA_annotes1(SAL_clearDoInit,yesNo) #define _Kernel_float_restored_ _Post_ _SA_annotes0(SAL_floatRestored) #define _Kernel_float_saved_ _Post_ _SA_annotes0(SAL_floatSaved) @@ -45,44 +45,44 @@ #define _Kernel_requires_resource_not_held_(kind) _Pre_ _SA_annotes1(SAL_neverHold, #kind) #define _Kernel_acquires_resource_(kind) _Post_ _SA_annotes1(SAL_acquire, #kind) -#define __drv_acquiresCancelSpinLock -#define __drv_acquiresCriticalRegion -#define __drv_acquiresExclusiveResource(kind) -#define __drv_acquiresExclusiveResourceGlobal(kind,param) -#define __drv_acquiresPriorityRegion -#define __drv_acquiresResource(kind) -#define __drv_acquiresResourceGlobal(kind,param) -#define __drv_aliasesMem _Post_ _SA_annotes0(SAL_IsAliased) -#define __drv_allocatesMem(kind) _Post_ _SA_annotes1(SAL_NeedsRelease,__yes) -#define __drv_arg(expr,annotes) _At_(expr,annotes) -#define __drv_at(expr,annotes) _At_(expr,annotes) -#define __drv_callbackType(kind) _SA_annotes1(SAL_callbackType, #kind) -#define __drv_clearDoInit -#define __drv_completionType(kindlist) -#define __drv_constant -#define __drv_defined(x) -#define __drv_deref(annotes) -#define __drv_dispatchType_other -#define __drv_dispatchType(x) -#define __drv_floatRestored -#define __drv_floatSaved -#define __drv_floatUsed -#define __drv_formatString(kind) -#define __drv_freesMem(kind) _Post_ _SA_annotes1(SAL_NeedsRelease,__no) -#define __drv_fun(annotes) -#define __drv_functionClass -#define __drv_holdsCancelSpinLock() _Holds_resource_global_("CancelSpinLock",) -#define __drv_holdsCriticalRegion() _Holds_resource_global_("CriticalRegion",) -#define __drv_holdsPriorityRegion() _Holds_resource_global_("PriorityRegion",) -#define __drv_in_deref(annotes) -#define __drv_in(annotes) -#define __drv_innerAcquiresGlobal(kind,param) +#define __drv_acquiresCancelSpinLock _Acquires_nonreentrant_lock_(_Global_cancel_spin_lock_) +#define __drv_acquiresCriticalRegion _Acquires_lock_(_Global_critical_region_) +#define __drv_acquiresExclusiveResource(kind) _Acquires_nonreentrant_lock_(_Curr_) +#define __drv_acquiresExclusiveResourceGlobal(kind,param) _Acquires_nonreentrant_lock_(param) +#define __drv_acquiresPriorityRegion _Acquires_lock_(_Global_priority_region_) +#define __drv_acquiresResource(kind) _Acquires_lock_(_Curr_) +#define __drv_acquiresResourceGlobal(kind,param) _Acquires_lock_(param) +#define __drv_aliasesMem _Post_ _SA_annotes0(SAL_IsAliased) +#define __drv_allocatesMem(kind) _Post_ _SA_annotes1(SAL_NeedsRelease,__yes) +#define __drv_arg(expr,annotes) _At_(expr,annotes) +#define __drv_at(expr,annotes) _At_(expr,annotes) +#define __drv_callbackType(kind) _SA_annotes1(SAL_callbackType, #kind) +#define __drv_clearDoInit _Kernel_clear_do_init_ +#define __drv_completionType(kindlist) _SA_annotes1(SAL_completionType, #kindlist) +#define __drv_constant _Literal_ +#define __drv_defined(x) _Macro_defined_(#x) +#define __drv_deref(annotes) __deref _Group_(annotes) +#define __drv_dispatchType_other _Dispatch_type_(IRP_MJ_OTHER) +#define __drv_dispatchType(x) _Dispatch_type_(x) +#define __drv_floatRestored _Kernel_float_restored_ +#define __drv_floatSaved _Kernel_float_saved_ +#define __drv_floatUsed _Kernel_float_used_ +#define __drv_formatString(kind) _SA_annotes1(SAL_IsFormatString, #kind) +#define __drv_freesMem(kind) _Post_ _SA_annotes1(SAL_NeedsRelease,__no) +#define __drv_fun(annotes) _At_(return, annotes) +#define __drv_functionClass _Function_class_ +#define __drv_holdsCancelSpinLock() _Holds_resource_global_("CancelSpinLock",) +#define __drv_holdsCriticalRegion() _Holds_resource_global_("CriticalRegion",) +#define __drv_holdsPriorityRegion() _Holds_resource_global_("PriorityRegion",) +#define __drv_in_deref(annotes) _Pre_ __deref _Group_(annotes) +#define __drv_in(annotes) _Pre_ _Group_(annotes) +#define __drv_innerAcquiresGlobal(kind,param) _Post_ _SA_annotes2(SAL_acquireGlobal, #kind, param\t) #define __drv_innerMustHoldGlobal(kind,param) #define __drv_innerNeverHoldGlobal(kind,param) #define __drv_innerReleasesGlobal(kind,param) #define __drv_interlocked #define __drv_IoGetDmaAdapter -#define __drv_isCancelIRQL _IRQL_is_cancel_ +#define __drv_isCancelIRQL _IRQL_is_cancel_ #define __drv_isObjectPointer #define __drv_KMDF #define __drv_maxFunctionIRQL diff --git a/include/psdk/ntgdi.h b/include/psdk/ntgdi.h index 8bd27f39633..53a7e21c3a8 100644 --- a/include/psdk/ntgdi.h +++ b/include/psdk/ntgdi.h @@ -1169,6 +1169,7 @@ APIENTRY NtGdiGetColorSpaceforBitmap( _In_ HBITMAP hsurf); +_Success_(return != FALSE) W32KAPI BOOL APIENTRY @@ -2253,6 +2254,7 @@ NtGdiGetTextExtent( _Out_ LPSIZE psize, _In_ UINT flOpts); +_Success_(return != FALSE) W32KAPI BOOL APIENTRY @@ -2372,6 +2374,7 @@ NtGdiMoveTo( _In_ INT y, _Out_opt_ LPPOINT pptOut); +_Success_(return != 0) W32KAPI INT APIENTRY diff --git a/include/psdk/sal.h b/include/psdk/sal.h index 4e14876315d..6fd8a036e81 100644 --- a/include/psdk/sal.h +++ b/include/psdk/sal.h @@ -35,7 +35,7 @@ #endif // ] /* Check for deprecated use of declspecs for sal */ -#if _USE_DECLSPECS_FOR_SAL // [ +#if defined(_USE_DECLSPECS_FOR_SAL) && _USE_DECLSPECS_FOR_SAL // [ #pragma message("declspecs for sal are deprecated.") #ifdef _PREFAST_ // [ #error Support for _USE_DECLSPECS_FOR_SAL is dropped @@ -445,7 +445,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; //#define _Deref_out_opt_ //#define _Deref_out_opt_z_ #define _Deref_out_range_(lb,ub) _SAL2_NAME(_Deref_out_range_) _Group_(_Post_ [SAL_notref] [SAL_deref] [SAL_annotes(Name="SAL_range", p1=_SA_SPECSTRIZE(lb), p2=_SA_SPECSTRIZE(ub))]) -//#define _Deref_out_z_ +#define _Deref_out_z_ _SAL11_NAME(_Deref_out_z_) _Group_(_Out_ _Deref_post_z_) //#define _Deref_out_z_bytecap_c_(size) //#define _Deref_out_z_cap_c_(size) #define _Deref_post_bytecap_(size) _SAL11_NAME(_Deref_post_bytecap_) _Group_([SA_Post(Deref=1,Null=SA_No,Notref=1)] [SA_Post(Deref=1,WritableBytes="\n" _SA_SPECSTRIZE(size))]) @@ -475,7 +475,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; //#define _Deref_post_opt_count_(size) //#define _Deref_post_opt_count_c_(size) //#define _Deref_post_opt_count_x_(size) -//#define _Deref_post_opt_valid_ +#define _Deref_post_opt_valid_ _SAL11_NAME(_Deref_post_opt_valid_) _Group_([SA_Post(Deref=1,Null=SA_Maybe,Notref=1)] [SA_Post(Valid=SA_Yes)]) //#define _Deref_post_opt_valid_bytecap_(size) //#define _Deref_post_opt_valid_bytecap_c_(size) //#define _Deref_post_opt_valid_bytecap_x_(size) @@ -496,7 +496,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; //#define _Deref_post_valid_cap_(size) //#define _Deref_post_valid_cap_c_(size) //#define _Deref_post_valid_cap_x_(size) -//#define _Deref_post_z_ +#define _Deref_post_z_ _SAL11_NAME(_Deref_post_z_) _Group_([SA_Post(Deref=1,Null=SA_No,Notref=1)] [SA_Post(Deref=1,NullTerminated=SA_Yes)] [SA_Post(Valid=SA_Yes)]) //#define _Deref_post_z_bytecap_(size) //#define _Deref_post_z_bytecap_c_(size) //#define _Deref_post_z_bytecap_x_(size) @@ -531,7 +531,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; //#define _Deref_pre_opt_count_(size) //#define _Deref_pre_opt_count_c_(size) //#define _Deref_pre_opt_count_x_(size) -//#define _Deref_pre_opt_valid_ +#define _Deref_pre_opt_valid_ _SAL11_NAME(_Deref_pre_opt_valid_) _Group_([SA_Pre(Deref=1,Null=SA_Maybe,Notref=1)] [SA_Pre(Valid=SA_Yes)]) //#define _Deref_pre_opt_valid_bytecap_(size) //#define _Deref_pre_opt_valid_bytecap_c_(size) //#define _Deref_pre_opt_valid_bytecap_x_(size) @@ -554,7 +554,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; //#define _Deref_pre_valid_cap_c_(size) //#define _Deref_pre_valid_cap_x_(size) //#define _Deref_pre_writeonly_ -//#define _Deref_pre_z_ +#define _Deref_pre_z_ _SAL11_NAME(_Deref_pre_z_) _Group_([SA_Pre(Deref=1,Null=SA_No,Notref=1)] [SA_Pre(Deref=1,NullTerminated=SA_Yes)] [SA_Pre(Valid=SA_Yes)]) //#define _Deref_pre_z_bytecap_(size) //#define _Deref_pre_z_bytecap_c_(size) //#define _Deref_pre_z_bytecap_x_(size) @@ -577,7 +577,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; //#define _Deref_prepost_opt_cap_x_(size) //#define _Deref_prepost_opt_count_(size) //#define _Deref_prepost_opt_count_x_(size) -//#define _Deref_prepost_opt_valid_ +#define _Deref_prepost_opt_valid_ _SAL11_NAME(_Deref_prepost_opt_valid_) _Group_(_Deref_pre_opt_valid_ _Deref_post_opt_valid_) //#define _Deref_prepost_opt_valid_bytecap_(size) //#define _Deref_prepost_opt_valid_bytecap_x_(size) //#define _Deref_prepost_opt_valid_cap_(size) @@ -590,7 +590,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; //#define _Deref_prepost_valid_bytecap_x_(size) //#define _Deref_prepost_valid_cap_(size) //#define _Deref_prepost_valid_cap_x_(size) -//#define _Deref_prepost_z_ +#define _Deref_prepost_z_ _SAL11_NAME(_Deref_prepost_z_) _Group_(_Deref_pre_z_ _Deref_post_z_) //#define _Deref_prepost_z_bytecap_(size) //#define _Deref_prepost_z_cap_(size) //#define _Deref_ret_bound_ @@ -600,6 +600,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; //#define _Deref2_pre_readonly_ #define _Field_range_(min,max) _SAL2_NAME(_Field_range_) _Group_(_SA_annotes2(SAL_range,min,max)) #define _Field_size_(size) _SAL2_NAME(_Field_size_) _Group_(_Notnull_ _Writable_elements_(size)) +#define _Field_size_opt_(size) _SAL2_NAME(_Field_size_opt_) _Group_(_Maybenull_ _Writable_elements_(size)) #define _Field_size_bytes_(size) _SAL2_NAME(_Field_size_bytes_) _Group_(_Notnull_ _Writable_bytes_(size)) //#define _Field_size_bytes_full_(size) //#define _Field_size_bytes_full_opt_(size) @@ -608,8 +609,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; #define _Field_size_bytes_part_opt_(size, count) _SAL2_NAME(_Field_size_bytes_part_opt_) _Group_(_Maybenull_ _Writable_bytes_(size) _Readable_bytes_(count)) //#define _Field_size_full_(size) //#define _Field_size_full_opt_(size) -//#define _Field_size_opt_(size) -//#define _Field_size_part_(size, count) +#define _Field_size_part_(size,count) _SAL2_NAME(_Field_size_part_) _Group_(_Notnull_ _Writable_elements_(size) _Readable_elements_(count)) //#define _Field_size_part_opt_(size, count) //#define _Field_z_ #define _Function_class_(x) _SA_annotes1(SAL_functionClassNew, _SA_SPECSTRIZE(x)) @@ -681,7 +681,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; //#define _Inout_opt_count_c_(size) //#define _Inout_opt_count_x_(size) //#define _Inout_opt_ptrdiff_count_(size) -//#define _Inout_opt_z_ +#define _Inout_opt_z_ _SAL2_NAME(_Inout_opt_z_) _Group_(_Prepost_opt_z_) //#define _Inout_opt_z_bytecap_(size) //#define _Inout_opt_z_bytecap_c_(size) //#define _Inout_opt_z_bytecap_x_(size) @@ -699,15 +699,15 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; #define _Inout_updates_bytes_(size) _SAL2_NAME(_Inout_updates_bytes_) _Group_(_Pre_bytecap_(size) [SA_Pre(Valid=SA_Yes)] [SA_Post(Valid=SA_Yes)] ) //#define _Inout_updates_bytes_all_(size) //#define _Inout_updates_bytes_all_opt_(size) -//#define _Inout_updates_bytes_opt_(size) -#define _Inout_updates_bytes_to_(size,count) _SAL2_NAME(_Inout_updates_bytes_to_) _Group_(_Out_writes_bytes_to_(size,count) [SA_Pre(Valid=SA_Yes)] [SA_Pre(ValidBytes="\n" _SA_SPECSTRIZE(count))] ) -#define _Inout_updates_bytes_to_opt_(size,count) _SAL2_NAME(_Inout_updates_bytes_to_opt_) _Group_(_Out_writes_bytes_to_opt_(size,count) [SA_Pre(Valid=SA_Yes)] [SA_Pre(ValidBytes="\n" _SA_SPECSTRIZE(count))] ) +#define _Inout_updates_bytes_opt_(size) _SAL2_NAME(_Inout_updates_bytes_opt_) _Group_(_Pre_opt_bytecap_(size) [SA_Pre(Valid=SA_Yes)] [SA_Post(Valid=SA_Yes)]) +#define _Inout_updates_bytes_to_(size,count) _SAL2_NAME(_Inout_updates_bytes_to_) _Group_(_Out_writes_bytes_to_(size,count) [SA_Pre(Valid=SA_Yes)] [SA_Pre(ValidBytes="\n" _SA_SPECSTRIZE(count))]) +#define _Inout_updates_bytes_to_opt_(size,count) _SAL2_NAME(_Inout_updates_bytes_to_opt_) _Group_(_Out_writes_bytes_to_opt_(size,count) [SA_Pre(Valid=SA_Yes)] [SA_Pre(ValidBytes="\n" _SA_SPECSTRIZE(count))]) #define _Inout_updates_opt_(size) _SAL2_NAME(_Inout_updates_opt_) _Group_(_Pre_opt_cap_(size) [SA_Pre(Valid=SA_Yes)] [SA_Post(Valid=SA_Yes)]) -//#define _Inout_updates_opt_z_(size) +#define _Inout_updates_opt_z_(size) _SAL2_NAME(_Inout_updates_opt_z_) _Group_(_Pre_opt_cap_(size) [SA_Pre(Valid=SA_Yes)] [SA_Post(Valid=SA_Yes)] [SA_Pre(NullTerminated=SA_Yes)] [SA_Post(NullTerminated=SA_Yes)]) //#define _Inout_updates_to_(size,count) //#define _Inout_updates_to_opt_(size,count) #define _Inout_updates_z_(size) _SAL2_NAME(_Inout_updates_z_) _Group_(_Pre_cap_(size) [SA_Pre(Valid=SA_Yes)] [SA_Post(Valid=SA_Yes)] [SA_Pre(NullTerminated=SA_Yes)] [SA_Post(NullTerminated=SA_Yes)]) -//#define _Inout_z_ +#define _Inout_z_ _SAL2_NAME(_Inout_z_) _Group_(_Prepost_z_) //#define _Inout_z_bytecap_(size) //#define _Inout_z_bytecap_c_(size) //#define _Inout_z_bytecap_x_(size) @@ -763,7 +763,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; //#define _Out_opt_capcount_(capcount) //#define _Out_opt_capcount_x_(capcount) //#define _Out_opt_ptrdiff_cap_(size) -//#define _Out_opt_z_bytecap_(size) +#define _Out_opt_z_bytecap_(size) _SAL11_NAME(_Out_opt_z_bytecap_) _Group_(_Pre_opt_bytecap_(size) [SA_Post(Valid=SA_Yes)] _Post_z_) //#define _Out_opt_z_bytecap_c_(size) //#define _Out_opt_z_bytecap_post_bytecount_(cap,count) //#define _Out_opt_z_bytecap_x_(size) @@ -777,23 +777,23 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; //#define _Out_ptrdiff_cap_(size) #define _Out_range_(lb,ub) _SAL2_NAME(_Out_range_) _Group_(_Post_ _SA_annotes2(SAL_range, lb, ub)) #define _Out_writes_(size) _SAL2_NAME(_Out_writes_) _Group_(_Pre_cap_(size) [SA_Post(Valid=SA_Yes)]) -//#define _Out_writes_all_(size) -//#define _Out_writes_all_opt_(size) +#define _Out_writes_all_(size) _SAL2_NAME(_Out_writes_all_) _Group_(_Out_writes_to_(_Old_(size), _Old_(size))) +#define _Out_writes_all_opt_(size) _SAL2_NAME(_Out_writes_all_opt_) _Group_(_Out_writes_to_opt_(_Old_(size), _Old_(size))) #define _Out_writes_bytes_(size) _SAL2_NAME(_Out_writes_bytes_) _Group_(_Pre_bytecap_(size) [SA_Post(Valid=SA_Yes)]) #define _Out_writes_bytes_all_(size) _SAL2_NAME(_Out_writes_bytes_all_) _Group_(_Out_writes_bytes_to_(_Old_(size), _Old_(size))) -//#define _Out_writes_bytes_all_opt_(size) +#define _Out_writes_bytes_all_opt_(size) _SAL2_NAME(_Out_writes_bytes_all_opt_) _Group_(_Out_writes_bytes_to_opt_(_Old_(size), _Old_(size))) #define _Out_writes_bytes_opt_(size) _SAL2_NAME(_Out_writes_bytes_opt_) _Group_(_Pre_opt_bytecap_(size) [SA_Post(Valid=SA_Yes)]) #define _Out_writes_bytes_to_(size,count) _SAL2_NAME(_Out_writes_bytes_to_) _Group_(_Pre_bytecap_(size) [SA_Post(Valid=SA_Yes)] _Post_bytecount_(count)) #define _Out_writes_bytes_to_opt_(size,count) _SAL2_NAME(_Out_writes_bytes_to_opt_) _Group_(_Pre_opt_bytecap_(size) [SA_Post(Valid=SA_Yes)] _Post_bytecount_(count) ) #define _Out_writes_opt_(size) _SAL2_NAME(_Out_writes_opt_) _Group_(_Pre_opt_cap_(size) [SA_Post(Valid=SA_Yes)]) -//#define _Out_writes_opt_z_(size) +#define _Out_writes_opt_z_(size) _SAL2_NAME(_Out_writes_opt_z_) _Group_(_Pre_opt_cap_(size) [SA_Post(Valid=SA_Yes)] _Post_z_) #define _Out_writes_to_(size,count) _SAL2_NAME(_Out_writes_to_) _Group_(_Pre_cap_(size) [SA_Post(Valid=SA_Yes)] _Post_count_(count)) #define _Out_writes_to_opt_(size,count) _SAL2_NAME(_Out_writes_to_opt_) _Group_(_Pre_opt_cap_(size) [SA_Post(Valid=SA_Yes)] _Post_count_(count)) //#define _Out_writes_to_ptr_(ptr) //#define _Out_writes_to_ptr_opt_(ptr) //#define _Out_writes_to_ptr_opt_z_(ptr) //#define _Out_writes_to_ptr_z_(ptr) -//#define _Out_writes_z_(size) +#define _Out_writes_z_(size) _SAL2_NAME(_Out_writes_z_) _Group_(_Pre_cap_(size) [SA_Post(Valid=SA_Yes)] _Post_z_) #define _Out_z_bytecap_(size) _SAL11_NAME(_Out_z_bytecap_) _Group_(_Pre_bytecap_(size) [SA_Post(Valid=SA_Yes)] _Post_z_) //#define _Out_z_bytecap_c_(size) #define _Out_z_bytecap_post_bytecount_(cap,count) _SAL11_NAME(_Out_z_bytecap_post_bytecount_) _Group_(_Pre_bytecap_(cap) [SA_Post(Valid=SA_Yes)] _Post_z_bytecount_(count)) @@ -826,16 +826,16 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; #define _Outptr_result_buffer_(size) _SAL2_NAME(_Outptr_result_buffer_) _Group_([SA_Pre(Null=SA_No,Notref=1)] [SA_Pre(WritableElementsConst=1,Notref=1)] [SA_Post(Valid=SA_Yes)] [SA_Post(Deref=1,Null=SA_No,Notref=1,WritableElements="\n" _SA_SPECSTRIZE(size))] ) //#define _Outptr_result_buffer_all_(size) //#define _Outptr_result_buffer_all_maybenull_(size) -//#define _Outptr_result_buffer_maybenull_(size) +#define _Outptr_result_buffer_maybenull_(size) _SAL2_NAME(_Outptr_result_buffer_maybenull_) _Group_([SA_Pre(Null=SA_No,Notref=1)] [SA_Pre(WritableElementsConst=1,Notref=1)] [SA_Post(Valid=SA_Yes)] [SA_Post(Deref=1,Null=SA_Maybe,Notref=1,WritableElements="\n" _SA_SPECSTRIZE(size))]) //#define _Outptr_result_buffer_to_(size, count) //#define _Outptr_result_buffer_to_maybenull_(size, count) #define _Outptr_result_bytebuffer_(size) _SAL2_NAME(_Outptr_result_bytebuffer_) _Group_([SA_Pre(Null=SA_No,Notref=1)] [SA_Pre(WritableElementsConst=1,Notref=1)] [SA_Post(Valid=SA_Yes)] [SA_Post(Deref=1,Null=SA_No,Notref=1,WritableBytes="\n" _SA_SPECSTRIZE(size))]) //#define _Outptr_result_bytebuffer_all_(size) //#define _Outptr_result_bytebuffer_all_maybenull_(size) //#define _Outptr_result_bytebuffer_maybenull_(size) -//#define _Outptr_result_bytebuffer_to_(size, count) +#define _Outptr_result_bytebuffer_to_(size, count) _SAL2_NAME(_Outptr_result_bytebuffer_to_) _Group_([SA_Pre(Null=SA_No,Notref=1)] [SA_Pre(WritableElementsConst=1,Notref=1)] [SA_Post(Valid=SA_Yes)] [SA_Post(Deref=1,Null=SA_No,Notref=1,WritableBytes="\n" _SA_SPECSTRIZE(size), ValidBytes="\n" _SA_SPECSTRIZE(count))]) //#define _Outptr_result_bytebuffer_to_maybenull_(size, count) -//#define _Outptr_result_maybenull_ +#define _Outptr_result_maybenull_ _SAL2_NAME(_Outptr_result_maybenull_) _Group_([SA_Pre(Null=SA_No,Notref=1)] [SA_Pre(WritableElementsConst=1,Notref=1)] [SA_Post(Valid=SA_Yes)] [SA_Post(Deref=1,Null=SA_Maybe,Notref=1,ValidElements="\n""1")] ) //#define _Outptr_result_maybenull_z_ #define _Outptr_result_nullonfailure_ _SAL2_NAME(_Outptr_result_nullonfailure_) _Group_(_Outptr_ [SAL_context(p1="SAL_failed")] _Group_([SAL_post] _Deref_post_null_) ) //#define _Outptr_result_z_ @@ -867,12 +867,12 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; #define _Post_equal_to_(expr) _SAL2_NAME(_Post_equal_to_) _Group_(_Out_range_(==,expr)) #define _Post_invalid_ _SAL2_NAME(_Post_invalid_) _Group_([SA_Post(Deref=1,Valid=SA_No)]) #define _Post_maybenull_ _SAL2_NAME(_Post_maybenull_) _Group_([SA_Post(Null=SA_Maybe)]) -//#define _Post_maybez_ +#define _Post_maybez_ _SAL11_NAME(_Post_maybez_) _Group_([SA_Post(NullTerminated=SA_Maybe)]) #define _Post_notnull_ _SAL2_NAME(_Post_notnull_) _Group_([SA_Post(Null=SA_No)]) //#define _Post_null_ #define _Post_ptr_invalid_ _SAL2_NAME(_Post_ptr_invalid_) _Group_([SA_Post(Valid=SA_No)]) -#define _Post_readable_byte_size_(size) _SAL2_NAME(_Post_readable_byte_size_) _Group_([SA_Post(ValidBytes="\n" _SA_SPECSTRIZE(size))] [SA_Post(Valid=SA_Yes)] ) -//#define _Post_readable_size_(size) +#define _Post_readable_byte_size_(size) _SAL2_NAME(_Post_readable_byte_size_) _Group_([SA_Post(ValidBytes="\n" _SA_SPECSTRIZE(size))] [SA_Post(Valid=SA_Yes)]) +#define _Post_readable_size_(size) _SAL2_NAME(_Post_readable_size_) _Group_([SA_Post(ValidElements="\n" _SA_SPECSTRIZE(size))] [SA_Post(Valid=SA_Yes)]) #define _Post_satisfies_(cond) _SAL2_NAME(_Post_satisfies_) _Group_([SAL_post] [SAL_annotes(Name="SAL_satisfies", p1=_SA_SPECSTRIZE(cond))]) #define _Post_valid_ _SAL2_NAME(_Post_valid_) _Group_([SA_Post(Valid=SA_Yes)]) #define _Post_writable_byte_size_(size) _SAL2_NAME(_Post_writable_byte_size_) _Group_([SA_Post(WritableBytes="\n" _SA_SPECSTRIZE(size))] ) @@ -897,13 +897,13 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; //#define _Pre_cap_m_(mult,size) //#define _Pre_cap_x_(size) #define _Pre_count_(size) _SAL11_NAME(_Pre_count_) _Group_([SA_Pre(Null=SA_No,Notref=1)] [SA_Pre(ValidElements="\n" _SA_SPECSTRIZE(size))] [SA_Pre(Valid=SA_Yes)]) -//#define _Pre_count_c_(size) +#define _Pre_count_c_(size) _SAL11_NAME(_Pre_count_c_) _Group_([SA_Pre(Null=SA_No,Notref=1)] [SA_Pre(ValidElementsConst=size)] [SA_Pre(Valid=SA_Yes)]) //#define _Pre_count_x_(size) //#define _Pre_defensive_ //#define _Pre_equal_to_(expr) //#define _Pre_invalid_ #define _Pre_maybenull_ _SAL2_NAME(_Pre_maybenull_) _Group_([SA_Pre(Null=SA_Maybe,Notref=1)]) -//#define _Pre_notnull_ +#define _Pre_notnull_ _SAL2_NAME(_Pre_notnull_) _Group_([SA_Pre(Null=SA_No,Notref=1)]) //#define _Pre_null_ #define _Pre_opt_bytecap_(size) _SAL11_NAME(_Pre_opt_bytecap_) _Group_([SA_Pre(Null=SA_Maybe,Notref=1)] [SA_Pre(WritableBytes="\n" _SA_SPECSTRIZE(size))] ) //#define _Pre_opt_bytecap_c_(size) @@ -929,7 +929,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; //#define _Pre_opt_valid_cap_(size) //#define _Pre_opt_valid_cap_c_(size) //#define _Pre_opt_valid_cap_x_(size) -//#define _Pre_opt_z_ +#define _Pre_opt_z_ _SAL11_NAME(_Pre_opt_z_) _Group_([SA_Pre(Null=SA_Maybe,Notref=1)] [SA_Pre(NullTerminated=SA_Yes)] [SA_Pre(Valid=SA_Yes)]) //#define _Pre_opt_z_bytecap_(size) //#define _Pre_opt_z_bytecap_c_(size) //#define _Pre_opt_z_bytecap_x_(size) @@ -953,14 +953,14 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; //#define _Pre_writable_byte_size_(size) //#define _Pre_writable_size_(size) //#define _Pre_writeonly_ -//#define _Pre_z_ +#define _Pre_z_ _SAL2_NAME(_Pre_z_) _Group_([SA_Pre(NullTerminated=SA_Yes)] [SA_Pre(Valid=SA_Yes)]) //#define _Pre_z_bytecap_(size) //#define _Pre_z_bytecap_c_(size) //#define _Pre_z_bytecap_x_(size) //#define _Pre_z_cap_(size) //#define _Pre_z_cap_c_(size) //#define _Pre_z_cap_x_(size) -#define _Prepost_bytecount_(size) _SAL11_NAME(_Deref_prepost_bytecount_) _Group_(_Deref_pre_bytecount_(size) _Deref_post_bytecount_(size)) +#define _Prepost_bytecount_(size) _SAL11_NAME(_Prepost_bytecount_) _Group_(_Pre_bytecount_(size) _Post_bytecount_(size)) //#define _Prepost_bytecount_c_(size) //#define _Prepost_bytecount_x_(size) //#define _Prepost_count_(size) @@ -973,9 +973,9 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; //#define _Prepost_opt_count_c_(size) //#define _Prepost_opt_count_x_(size) #define _Prepost_opt_valid_ _SAL2_NAME(_Prepost_opt_valid_) _Group_(_Pre_opt_valid_ _Post_valid_) -//#define _Prepost_opt_z_ +#define _Prepost_opt_z_ _SAL11_NAME(_Prepost_opt_z_) _Group_(_Pre_opt_z_ _Post_z_) #define _Prepost_valid_ _SAL11_NAME(_Prepost_valid_) _Group_(_Pre_valid_ _Post_valid_) -//#define _Prepost_z_ +#define _Prepost_z_ _SAL2_NAME(_Prepost_z_) _Group_(_Pre_z_ _Post_z_) #define _Printf_format_string_ _SAL2_NAME(_Printf_format_string_) _Group_([SA_FormatString(Style="printf")] ) //#define _Raises_SEH_exception_ #define _Maybe_raises_SEH_exception_ @@ -1001,7 +1001,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; //#define _Ret_count_x_(size) #define _Ret_maybenull_ _SAL2_NAME(_Ret_maybenull_) _Group_([SA_Post(Null=SA_Maybe)]) //#define _Ret_maybenull_z_ -//#define _Ret_notnull_ +#define _Ret_notnull_ _SAL2_NAME(_Ret_notnull_) _Group_([SA_Post(Null=SA_No)]) //#define _Ret_null_ //#define _Ret_opt_ #define _Ret_opt_bytecap_(size) _SAL11_NAME(_Ret_opt_bytecap_) _Group_([SA_Post(Null=SA_Maybe,Notref=1)] [SA_Post(WritableBytes="\n" _SA_SPECSTRIZE(size))]) @@ -1040,7 +1040,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default}; //#define _Ret_z_cap_(size) //#define _Ret_z_count_(size) #define _Return_type_success_(expr) _SAL2_NAME(_Return_type_success_) _Group_([SA_Success(Condition=_SA_SPECSTRIZE(expr))]) -//#define _Scanf_format_string_ +#define _Scanf_format_string_ _SAL2_NAME(_Scanf_format_string_) _Group_([SA_FormatString(Style="scanf")]) //#define _Scanf_s_format_string_ #define _Struct_size_bytes_(size) _SAL2_NAME(_Struct_size_bytes_) _Group_(_Writable_bytes_(byteCount(size))) #define _Success_(expr) _SAL2_NAME(_Success_) _Group_([SA_Success(Condition=_SA_SPECSTRIZE(expr))]) diff --git a/include/psdk/setupapi.h b/include/psdk/setupapi.h index d8e9da5b690..c53847a483b 100644 --- a/include/psdk/setupapi.h +++ b/include/psdk/setupapi.h @@ -1133,296 +1133,1188 @@ WINSETUPAPI PVOID WINAPI MyRealloc(PVOID, DWORD); WINSETUPAPI LONG WINAPI QueryRegistryValue(HKEY, PCWSTR, PBYTE*, PDWORD, PDWORD); WINSETUPAPI DWORD WINAPI RetreiveFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR*); -WINSETUPAPI BOOL WINAPI SetupAddInstallSectionToDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,PVOID,UINT); -WINSETUPAPI BOOL WINAPI SetupAddInstallSectionToDiskSpaceListW(HDSKSPC,HINF,HINF,PCWSTR,PVOID,UINT); -WINSETUPAPI BOOL WINAPI SetupAddSectionToDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,UINT,PVOID,UINT); -WINSETUPAPI BOOL WINAPI SetupAddSectionToDiskSpaceListW(HDSKSPC,HINF,HINF,PCWSTR,UINT,PVOID,UINT); -WINSETUPAPI BOOL WINAPI SetupAddToDiskSpaceListA(HDSKSPC,PCSTR,LONGLONG,UINT,PVOID,UINT); -WINSETUPAPI BOOL WINAPI SetupAddToDiskSpaceListW(HDSKSPC,PCWSTR,LONGLONG,UINT,PVOID,UINT); -WINSETUPAPI BOOL WINAPI SetupAddToSourceListA(DWORD,PCSTR); -WINSETUPAPI BOOL WINAPI SetupAddToSourceListW(DWORD,PCWSTR); -WINSETUPAPI BOOL WINAPI SetupAdjustDiskSpaceListA(HDSKSPC,LPCSTR,LONGLONG,PVOID,UINT); -WINSETUPAPI BOOL WINAPI SetupAdjustDiskSpaceListW(HDSKSPC,LPCWSTR,LONGLONG,PVOID,UINT); -WINSETUPAPI UINT WINAPI SetupBackupErrorA(HWND,PCSTR,PCSTR,PCSTR,UINT,DWORD); -WINSETUPAPI UINT WINAPI SetupBackupErrorW(HWND,PCWSTR,PCWSTR,PCWSTR,UINT,DWORD); +WINSETUPAPI BOOL WINAPI SetupAddInstallSectionToDiskSpaceListA(_In_ HDSKSPC, _In_ HINF, _In_opt_ HINF, _In_ PCSTR, _Reserved_ PVOID, _Reserved_ UINT); +WINSETUPAPI BOOL WINAPI SetupAddInstallSectionToDiskSpaceListW(_In_ HDSKSPC, _In_ HINF, _In_opt_ HINF, _In_ PCWSTR, _Reserved_ PVOID, _Reserved_ UINT); +WINSETUPAPI BOOL WINAPI SetupAddSectionToDiskSpaceListA(_In_ HDSKSPC, _In_ HINF, _In_opt_ HINF, _In_ PCSTR, _In_ UINT, _Reserved_ PVOID, _Reserved_ UINT); +WINSETUPAPI BOOL WINAPI SetupAddSectionToDiskSpaceListW(_In_ HDSKSPC, _In_ HINF, _In_opt_ HINF, _In_ PCWSTR, _In_ UINT, _Reserved_ PVOID, _Reserved_ UINT); +WINSETUPAPI BOOL WINAPI SetupAddToDiskSpaceListA(_In_ HDSKSPC, _In_ PCSTR, _In_ LONGLONG, _In_ UINT, _Reserved_ PVOID, _Reserved_ UINT); +WINSETUPAPI BOOL WINAPI SetupAddToDiskSpaceListW(_In_ HDSKSPC, _In_ PCWSTR, _In_ LONGLONG, _In_ UINT, _Reserved_ PVOID, _Reserved_ UINT); +WINSETUPAPI BOOL WINAPI SetupAddToSourceListA(_In_ DWORD, _In_ PCSTR); +WINSETUPAPI BOOL WINAPI SetupAddToSourceListW(_In_ DWORD, _In_ PCWSTR); +WINSETUPAPI BOOL WINAPI SetupAdjustDiskSpaceListA(_In_ HDSKSPC, _In_ LPCSTR, _In_ LONGLONG, _Reserved_ PVOID, _Reserved_ UINT); +WINSETUPAPI BOOL WINAPI SetupAdjustDiskSpaceListW(_In_ HDSKSPC, _In_ LPCWSTR, _In_ LONGLONG, _Reserved_ PVOID, _Reserved_ UINT); +WINSETUPAPI UINT WINAPI SetupBackupErrorA(_In_ HWND, _In_opt_ PCSTR, _In_ PCSTR, _In_opt_ PCSTR, _In_ UINT, _In_ DWORD); +WINSETUPAPI UINT WINAPI SetupBackupErrorW(_In_ HWND, _In_opt_ PCWSTR, _In_ PCWSTR, _In_opt_ PCWSTR, _In_ UINT, _In_ DWORD); WINSETUPAPI BOOL WINAPI SetupCancelTemporary(VOID); -WINSETUPAPI BOOL WINAPI SetupCloseFileQueue(HSPFILEQ); -WINSETUPAPI VOID WINAPI SetupCloseInfFile(HINF); +WINSETUPAPI BOOL WINAPI SetupCloseFileQueue(_In_ HSPFILEQ); +WINSETUPAPI VOID WINAPI SetupCloseInfFile(_In_ HINF); WINSETUPAPI VOID WINAPI SetupCloseLog(VOID); -WINSETUPAPI BOOL WINAPI SetupCommitFileQueueA(HWND,HSPFILEQ,PSP_FILE_CALLBACK_A,PVOID); -WINSETUPAPI BOOL WINAPI SetupCommitFileQueueW(HWND,HSPFILEQ,PSP_FILE_CALLBACK_W,PVOID); -WINSETUPAPI UINT WINAPI SetupCopyErrorA(HWND,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,UINT,DWORD,PSTR,DWORD,PDWORD); -WINSETUPAPI UINT WINAPI SetupCopyErrorW(HWND,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,UINT,DWORD,PWSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupCopyOEMInfA(PCSTR,PCSTR,DWORD,DWORD,PSTR,DWORD,PDWORD,PSTR*); -WINSETUPAPI BOOL WINAPI SetupCopyOEMInfW(PCWSTR,PCWSTR,DWORD,DWORD,PWSTR,DWORD,PDWORD,PWSTR*); -WINSETUPAPI HDSKSPC WINAPI SetupCreateDiskSpaceListA(PVOID,DWORD,UINT); -WINSETUPAPI HDSKSPC WINAPI SetupCreateDiskSpaceListW(PVOID,DWORD,UINT); -WINSETUPAPI DWORD WINAPI SetupDecompressOrCopyFileA(PCSTR,PCSTR,PUINT); -WINSETUPAPI DWORD WINAPI SetupDecompressOrCopyFileW(PCWSTR,PCWSTR,PUINT); -WINSETUPAPI UINT WINAPI SetupDefaultQueueCallbackA(PVOID,UINT,UINT_PTR,UINT_PTR); -WINSETUPAPI UINT WINAPI SetupDefaultQueueCallbackW(PVOID,UINT,UINT_PTR,UINT_PTR); -WINSETUPAPI UINT WINAPI SetupDeleteErrorA(HWND,PCSTR,PCSTR,UINT,DWORD); -WINSETUPAPI UINT WINAPI SetupDeleteErrorW(HWND,PCWSTR,PCWSTR,UINT,DWORD); -WINSETUPAPI BOOL WINAPI SetupDestroyDiskSpaceList(HDSKSPC); -WINSETUPAPI BOOL WINAPI SetupDiAskForOEMDisk(HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiBuildClassInfoList(DWORD,LPGUID,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiBuildClassInfoListExA(DWORD,LPGUID,DWORD,PDWORD,PCSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiBuildClassInfoListExW(DWORD,LPGUID,DWORD,PDWORD,PCWSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiBuildDriverInfoList(HDEVINFO,PSP_DEVINFO_DATA,DWORD); -WINSETUPAPI BOOL WINAPI SetupDiCallClassInstaller(DI_FUNCTION,HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiCancelDriverInfoSearch(HDEVINFO); -WINSETUPAPI BOOL WINAPI SetupDiChangeState(HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiClassGuidsFromNameA(PCSTR,LPGUID,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiClassGuidsFromNameW(PCWSTR,LPGUID,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiClassGuidsFromNameExA(PCSTR,LPGUID,DWORD,PDWORD,PCSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiClassGuidsFromNameExW(PCWSTR,LPGUID,DWORD,PDWORD,PCWSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiClassNameFromGuidA(CONST GUID*,PSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiClassNameFromGuidW(CONST GUID*,PWSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiClassNameFromGuidExA(CONST GUID*,PSTR,DWORD,PDWORD,PCSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiClassNameFromGuidExW(CONST GUID*,PWSTR,DWORD,PDWORD,PCWSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiCreateDeviceInfoA(HDEVINFO,PCSTR,CONST GUID*,PCSTR,HWND,DWORD,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiCreateDeviceInfoW(HDEVINFO,PCWSTR,CONST GUID*,PCWSTR,HWND,DWORD,PSP_DEVINFO_DATA); -WINSETUPAPI HDEVINFO WINAPI SetupDiCreateDeviceInfoList(CONST GUID*,HWND); -WINSETUPAPI HDEVINFO WINAPI SetupDiCreateDeviceInfoListExA(CONST GUID*,HWND,PCSTR,PVOID); -WINSETUPAPI HDEVINFO WINAPI SetupDiCreateDeviceInfoListExW(CONST GUID*,HWND,PCWSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiCreateDeviceInterfaceA(HDEVINFO,PSP_DEVINFO_DATA,CONST GUID*,PCSTR,DWORD,PSP_DEVICE_INTERFACE_DATA); -WINSETUPAPI BOOL WINAPI SetupDiCreateDeviceInterfaceW(HDEVINFO,PSP_DEVINFO_DATA,CONST GUID*,PCWSTR,DWORD,PSP_DEVICE_INTERFACE_DATA); -WINSETUPAPI HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyA(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,DWORD,REGSAM,HINF,PCSTR); -WINSETUPAPI HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyW(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,DWORD,REGSAM,HINF,PCWSTR); -WINSETUPAPI HKEY WINAPI SetupDiCreateDevRegKeyA(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,DWORD,HINF,PCSTR); -WINSETUPAPI HKEY WINAPI SetupDiCreateDevRegKeyW(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,DWORD,HINF,PCWSTR); -WINSETUPAPI BOOL WINAPI SetupDiDeleteDeviceInfo(HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiDeleteDeviceInterfaceData(HDEVINFO,PSP_DEVICE_INTERFACE_DATA); -WINSETUPAPI BOOL WINAPI SetupDiDeleteDeviceInterfaceRegKey(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,DWORD); -WINSETUPAPI BOOL WINAPI SetupDiDeleteDevRegKey(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,DWORD); -WINSETUPAPI BOOL WINAPI SetupDiDestroyClassImageList(PSP_CLASSIMAGELIST_DATA); -WINSETUPAPI BOOL WINAPI SetupDiDestroyDeviceInfoList(HDEVINFO); -WINSETUPAPI BOOL WINAPI SetupDiDestroyDriverInfoList(HDEVINFO,PSP_DEVINFO_DATA,DWORD); -WINSETUPAPI INT WINAPI SetupDiDrawMiniIcon(HDC,RECT,INT,DWORD); -WINSETUPAPI BOOL WINAPI SetupDiEnumDeviceInfo(HDEVINFO,DWORD,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiEnumDeviceInterfaces(HDEVINFO,PSP_DEVINFO_DATA,CONST GUID*,DWORD,PSP_DEVICE_INTERFACE_DATA); -WINSETUPAPI BOOL WINAPI SetupDiEnumDriverInfoA(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,PSP_DRVINFO_DATA_A); -WINSETUPAPI BOOL WINAPI SetupDiEnumDriverInfoW(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,PSP_DRVINFO_DATA_W); -WINSETUPAPI BOOL WINAPI SetupDiGetActualSectionToInstallA(HINF,PCSTR,PSTR,DWORD,PDWORD,PSTR*); -WINSETUPAPI BOOL WINAPI SetupDiGetActualSectionToInstallExA(HINF,PCSTR,PSP_ALTPLATFORM_INFO,PSTR,DWORD,PDWORD,PSTR*,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiGetActualSectionToInstallExW(HINF,PCWSTR,PSP_ALTPLATFORM_INFO,PWSTR,DWORD,PDWORD,PWSTR*,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiGetActualSectionToInstallW(HINF,PCWSTR,PWSTR,DWORD,PDWORD,PWSTR*); -WINSETUPAPI BOOL WINAPI SetupDiGetClassBitmapIndex(CONST GUID*,PINT); -WINSETUPAPI BOOL WINAPI SetupDiGetClassDescriptionA(CONST GUID*,PSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiGetClassDescriptionW(CONST GUID*,PWSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiGetClassDescriptionExA(CONST GUID*,PSTR,DWORD,PDWORD,PCSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiGetClassDescriptionExW(CONST GUID*,PWSTR,DWORD,PDWORD,PCWSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiGetClassDevPropertySheetsA(HDEVINFO,PSP_DEVINFO_DATA,LPPROPSHEETHEADERA,DWORD,PDWORD,DWORD); -WINSETUPAPI BOOL WINAPI SetupDiGetClassDevPropertySheetsW(HDEVINFO,PSP_DEVINFO_DATA,LPPROPSHEETHEADERW,DWORD,PDWORD,DWORD); -WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsA(CONST GUID*,PCSTR,HWND,DWORD); -WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsW(CONST GUID*,PCWSTR,HWND,DWORD); -WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsExA(CONST GUID*,PCSTR,HWND,DWORD,HDEVINFO,PCSTR,PVOID); -WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsExW(CONST GUID*,PCWSTR,HWND,DWORD,HDEVINFO,PCWSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiGetClassImageIndex(PSP_CLASSIMAGELIST_DATA,CONST GUID*,PINT); -WINSETUPAPI BOOL WINAPI SetupDiGetClassImageList(PSP_CLASSIMAGELIST_DATA); -WINSETUPAPI BOOL WINAPI SetupDiGetClassImageListExA(PSP_CLASSIMAGELIST_DATA,PCSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiGetClassImageListExW(PSP_CLASSIMAGELIST_DATA,PCWSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiGetClassInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_CLASSINSTALL_HEADER,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiGetClassInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_CLASSINSTALL_HEADER,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiGetClassRegistryPropertyA(LPGUID,DWORD,PDWORD,PBYTE,DWORD,PDWORD,PCSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiGetClassRegistryPropertyW(LPGUID,DWORD,PDWORD,PBYTE,DWORD,PDWORD,PCWSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInfoListClass(HDEVINFO,LPGUID); -WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInfoListDetailA(HDEVINFO,PSP_DEVINFO_LIST_DETAIL_DATA_A); -WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInfoListDetailW(HDEVINFO,PSP_DEVINFO_LIST_DETAIL_DATA_W); -WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DEVINSTALL_PARAMS_A); -WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DEVINSTALL_PARAMS_W); -WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInstanceIdA(HDEVINFO,PSP_DEVINFO_DATA,PSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInstanceIdW(HDEVINFO,PSP_DEVINFO_DATA,PWSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInterfaceAlias(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,CONST GUID*,PSP_DEVICE_INTERFACE_DATA); -WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInterfaceDetailA(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,PSP_DEVICE_INTERFACE_DETAIL_DATA_A,DWORD,PDWORD,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInterfaceDetailW(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,PSP_DEVICE_INTERFACE_DETAIL_DATA_W,DWORD,PDWORD,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiGetDeviceRegistryPropertyA(HDEVINFO,PSP_DEVINFO_DATA,DWORD,PDWORD,PBYTE,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiGetDeviceRegistryPropertyW(HDEVINFO,PSP_DEVINFO_DATA,DWORD,PDWORD,PBYTE,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiGetDriverInfoDetailA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_A,PSP_DRVINFO_DETAIL_DATA_A,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiGetDriverInfoDetailW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_W,PSP_DRVINFO_DETAIL_DATA_W,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiGetDriverInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_A,PSP_DRVINSTALL_PARAMS); -WINSETUPAPI BOOL WINAPI SetupDiGetDriverInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_W,PSP_DRVINSTALL_PARAMS); -WINSETUPAPI BOOL WINAPI SetupDiGetHwProfileFriendlyNameA(DWORD,PSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiGetHwProfileFriendlyNameExA(DWORD,PSTR,DWORD,PDWORD,PCSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiGetHwProfileFriendlyNameExW(DWORD,PWSTR,DWORD,PDWORD,PCWSTR,PVOID); +WINSETUPAPI BOOL WINAPI SetupCommitFileQueueA(_In_opt_ HWND, _In_ HSPFILEQ, _In_ PSP_FILE_CALLBACK_A, _In_ PVOID); +WINSETUPAPI BOOL WINAPI SetupCommitFileQueueW(_In_opt_ HWND, _In_ HSPFILEQ, _In_ PSP_FILE_CALLBACK_W, _In_ PVOID); + +WINSETUPAPI +UINT +WINAPI +SetupCopyErrorA( + _In_ HWND hwndParent, + _In_opt_ PCSTR DialogTitle, + _In_opt_ PCSTR DiskName, + _In_ PCSTR PathToSource, + _In_ PCSTR SourceFile, + _In_opt_ PCSTR TargetPathFile, + _In_ UINT Win32ErrorCode, + _In_ DWORD Style, + _Out_writes_opt_(PathBufferSize) PSTR PathBuffer, + _In_ DWORD PathBufferSize, + _Out_opt_ PDWORD PathRequiredSize); + +WINSETUPAPI +UINT +WINAPI +SetupCopyErrorW( + _In_ HWND hwndParent, + _In_opt_ PCWSTR DialogTitle, + _In_opt_ PCWSTR DiskName, + _In_ PCWSTR PathToSource, + _In_ PCWSTR SourceFile, + _In_opt_ PCWSTR TargetPathFile, + _In_ UINT Win32ErrorCode, + _In_ DWORD Style, + _Out_writes_opt_(PathBufferSize) PWSTR PathBuffer, + _In_ DWORD PathBufferSize, + _Out_opt_ PDWORD PathRequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupCopyOEMInfA( + _In_ PCSTR SourceInfFileName, + _In_opt_ PCSTR OEMSourceMediaLocation, + _In_ DWORD OEMSourceMediaType, + _In_ DWORD CopyStyle, + _Out_writes_opt_(DestinationInfFileNameSize) PSTR DestinationInfFileName, + _In_ DWORD DestinationInfFileNameSize, + _Out_opt_ PDWORD RequiredSize, + _Out_opt_ PSTR *DestinationInfFileNameComponent); + +WINSETUPAPI +BOOL +WINAPI +SetupCopyOEMInfW( + _In_ PCWSTR SourceInfFileName, + _In_opt_ PCWSTR OEMSourceMediaLocation, + _In_ DWORD OEMSourceMediaType, + _In_ DWORD CopyStyle, + _Out_writes_opt_(DestinationInfFileNameSize) PWSTR DestinationInfFileName, + _In_ DWORD DestinationInfFileNameSize, + _Out_opt_ PDWORD RequiredSize, + _Out_opt_ PWSTR *DestinationInfFileNameComponent); + +WINSETUPAPI HDSKSPC WINAPI SetupCreateDiskSpaceListA(_Reserved_ PVOID, _Reserved_ DWORD, _In_ UINT); +WINSETUPAPI HDSKSPC WINAPI SetupCreateDiskSpaceListW(_Reserved_ PVOID, _Reserved_ DWORD, _In_ UINT); +WINSETUPAPI DWORD WINAPI SetupDecompressOrCopyFileA(_In_ PCSTR, _In_ PCSTR, _In_opt_ PUINT); +WINSETUPAPI DWORD WINAPI SetupDecompressOrCopyFileW(_In_ PCWSTR, _In_ PCWSTR, _In_opt_ PUINT); +WINSETUPAPI UINT WINAPI SetupDefaultQueueCallbackA(_In_ PVOID, _In_ UINT, _In_ UINT_PTR, _In_ UINT_PTR); +WINSETUPAPI UINT WINAPI SetupDefaultQueueCallbackW(_In_ PVOID, _In_ UINT, _In_ UINT_PTR, _In_ UINT_PTR); +WINSETUPAPI UINT WINAPI SetupDeleteErrorA(_In_ HWND, _In_opt_ PCSTR, _In_ PCSTR, _In_ UINT, _In_ DWORD); +WINSETUPAPI UINT WINAPI SetupDeleteErrorW(_In_ HWND, _In_opt_ PCWSTR, _In_ PCWSTR, _In_ UINT, _In_ DWORD); +WINSETUPAPI BOOL WINAPI SetupDestroyDiskSpaceList(_Inout_ HDSKSPC); +WINSETUPAPI BOOL WINAPI SetupDiAskForOEMDisk(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiBuildClassInfoList( + _In_ DWORD Flags, + _Out_writes_to_opt_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList, + _In_ DWORD ClassGuidListSize, + _Out_ PDWORD RequiredSize); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiBuildClassInfoListExA( + _In_ DWORD Flags, + _Out_writes_to_opt_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList, + _In_ DWORD ClassGuidListSize, + _Out_ PDWORD RequiredSize, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiBuildClassInfoListExW( + _In_ DWORD Flags, + _Out_writes_to_opt_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList, + _In_ DWORD ClassGuidListSize, + _Out_ PDWORD RequiredSize, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved); + +WINSETUPAPI BOOL WINAPI SetupDiBuildDriverInfoList(_In_ HDEVINFO, _Inout_opt_ PSP_DEVINFO_DATA, _In_ DWORD); +WINSETUPAPI BOOL WINAPI SetupDiCallClassInstaller(_In_ DI_FUNCTION, _In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupDiCancelDriverInfoSearch(_In_ HDEVINFO); +WINSETUPAPI BOOL WINAPI SetupDiChangeState(_In_ HDEVINFO, _Inout_ PSP_DEVINFO_DATA); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiClassGuidsFromNameA( + _In_ PCSTR ClassName, + _Out_writes_to_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList, + _In_ DWORD ClassGuidListSize, + _Out_ PDWORD RequiredSize); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiClassGuidsFromNameW( + _In_ PCWSTR ClassName, + _Out_writes_to_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList, + _In_ DWORD ClassGuidListSize, + _Out_ PDWORD RequiredSize); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiClassGuidsFromNameExA( + _In_ PCSTR ClassName, + _Out_writes_to_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList, + _In_ DWORD ClassGuidListSize, + _Out_ PDWORD RequiredSize, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiClassGuidsFromNameExW( + _In_ PCWSTR ClassName, + _Out_writes_to_(ClassGuidListSize, *RequiredSize) LPGUID ClassGuidList, + _In_ DWORD ClassGuidListSize, + _Out_ PDWORD RequiredSize, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved); + +WINSETUPAPI +BOOL +WINAPI +SetupDiClassNameFromGuidA( + _In_ CONST GUID *ClassGuid, + _Out_writes_(ClassNameSize) PSTR ClassName, + _In_ DWORD ClassNameSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupDiClassNameFromGuidW( + _In_ CONST GUID *ClassGuid, + _Out_writes_(ClassNameSize) PWSTR ClassName, + _In_ DWORD ClassNameSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupDiClassNameFromGuidExA( + _In_ CONST GUID *ClassGuid, + _Out_writes_(ClassNameSize) PSTR ClassName, + _In_ DWORD ClassNameSize, + _Out_opt_ PDWORD RequiredSize, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved); + +WINSETUPAPI +BOOL +WINAPI +SetupDiClassNameFromGuidExW( + _In_ CONST GUID *ClassGuid, + _Out_writes_(ClassNameSize) PWSTR ClassName, + _In_ DWORD ClassNameSize, + _Out_opt_ PDWORD RequiredSize, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved); + +WINSETUPAPI BOOL WINAPI SetupDiCreateDeviceInfoA(_In_ HDEVINFO, _In_ PCSTR, _In_ CONST GUID*, _In_opt_ PCSTR, _In_opt_ HWND, _In_ DWORD, _Out_opt_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupDiCreateDeviceInfoW(_In_ HDEVINFO, _In_ PCWSTR, _In_ CONST GUID*, _In_opt_ PCWSTR, _In_opt_ HWND, _In_ DWORD, _Out_opt_ PSP_DEVINFO_DATA); +_Check_return_ WINSETUPAPI HDEVINFO WINAPI SetupDiCreateDeviceInfoList(_In_opt_ CONST GUID*, _In_opt_ HWND); +_Check_return_ WINSETUPAPI HDEVINFO WINAPI SetupDiCreateDeviceInfoListExA(_In_opt_ CONST GUID*, _In_opt_ HWND, _In_opt_ PCSTR, _Reserved_ PVOID); +_Check_return_ WINSETUPAPI HDEVINFO WINAPI SetupDiCreateDeviceInfoListExW(_In_opt_ CONST GUID*, _In_opt_ HWND, _In_opt_ PCWSTR, _Reserved_ PVOID); +WINSETUPAPI BOOL WINAPI SetupDiCreateDeviceInterfaceA(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA, _In_ CONST GUID*, _In_opt_ PCSTR, _In_ DWORD, _Out_opt_ PSP_DEVICE_INTERFACE_DATA); +WINSETUPAPI BOOL WINAPI SetupDiCreateDeviceInterfaceW(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA, _In_ CONST GUID*, _In_opt_ PCWSTR, _In_ DWORD, _Out_opt_ PSP_DEVICE_INTERFACE_DATA); +_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyA(_In_ HDEVINFO, _In_ PSP_DEVICE_INTERFACE_DATA, _Reserved_ DWORD, _In_ REGSAM, _In_opt_ HINF, _In_opt_ PCSTR); +_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyW(_In_ HDEVINFO, _In_ PSP_DEVICE_INTERFACE_DATA, _Reserved_ DWORD, _In_ REGSAM, _In_opt_ HINF, _In_opt_ PCWSTR); +_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiCreateDevRegKeyA(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ HINF, _In_opt_ PCSTR); +_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiCreateDevRegKeyW(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ HINF, _In_opt_ PCWSTR); +WINSETUPAPI BOOL WINAPI SetupDiDeleteDeviceInfo(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupDiDeleteDeviceInterfaceData(_In_ HDEVINFO, _In_ PSP_DEVICE_INTERFACE_DATA); +WINSETUPAPI BOOL WINAPI SetupDiDeleteDeviceInterfaceRegKey(_In_ HDEVINFO, _In_ PSP_DEVICE_INTERFACE_DATA, _Reserved_ DWORD); +WINSETUPAPI BOOL WINAPI SetupDiDeleteDevRegKey(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA, _In_ DWORD, _In_ DWORD, _In_ DWORD); +WINSETUPAPI BOOL WINAPI SetupDiDestroyClassImageList(_In_ PSP_CLASSIMAGELIST_DATA); +WINSETUPAPI BOOL WINAPI SetupDiDestroyDeviceInfoList(_In_ HDEVINFO); +WINSETUPAPI BOOL WINAPI SetupDiDestroyDriverInfoList(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ DWORD); +WINSETUPAPI INT WINAPI SetupDiDrawMiniIcon(_In_ HDC, _In_ RECT, _In_ INT, _In_ DWORD); +WINSETUPAPI BOOL WINAPI SetupDiEnumDeviceInfo(_In_ HDEVINFO, _In_ DWORD, _Out_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupDiEnumDeviceInterfaces(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ CONST GUID*, _In_ DWORD, _Out_ PSP_DEVICE_INTERFACE_DATA); +WINSETUPAPI BOOL WINAPI SetupDiEnumDriverInfoA(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ DWORD, _In_ DWORD, _Out_ PSP_DRVINFO_DATA_A); +WINSETUPAPI BOOL WINAPI SetupDiEnumDriverInfoW(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ DWORD, _In_ DWORD, _Out_ PSP_DRVINFO_DATA_W); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetActualSectionToInstallA( + _In_ HINF InfHandle, + _In_ PCSTR InfSectionName, + _Out_writes_opt_(InfSectionWithExtSize) PSTR InfSectionWithExt, + _In_ DWORD InfSectionWithExtSize, + _Out_opt_ PDWORD RequiredSize, + _Out_opt_ PSTR *Extension); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetActualSectionToInstallW( + _In_ HINF InfHandle, + _In_ PCWSTR InfSectionName, + _Out_writes_opt_(InfSectionWithExtSize) PWSTR InfSectionWithExt, + _In_ DWORD InfSectionWithExtSize, + _Out_opt_ PDWORD RequiredSize, + _Out_opt_ PWSTR *Extension); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetActualSectionToInstallExA( + _In_ HINF InfHandle, + _In_ PCSTR InfSectionName, + _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo, + _Out_writes_opt_(InfSectionWithExtSize) PSTR InfSectionWithExt, + _In_ DWORD InfSectionWithExtSize, + _Out_opt_ PDWORD RequiredSize, + _Out_opt_ PSTR *Extension, + _Reserved_ PVOID Reserved); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetActualSectionToInstallExW( + _In_ HINF InfHandle, + _In_ PCWSTR InfSectionName, + _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo, + _Out_writes_opt_(InfSectionWithExtSize) PWSTR InfSectionWithExt, + _In_ DWORD InfSectionWithExtSize, + _Out_opt_ PDWORD RequiredSize, + _Out_opt_ PWSTR *Extension, + _Reserved_ PVOID Reserved); + +WINSETUPAPI BOOL WINAPI SetupDiGetClassBitmapIndex(_In_opt_ CONST GUID*, _Out_ PINT); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassDescriptionA( + _In_ CONST GUID *ClassGuid, + _Out_writes_(ClassDescriptionSize) PSTR ClassDescription, + _In_ DWORD ClassDescriptionSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassDescriptionW( + _In_ CONST GUID *ClassGuid, + _Out_writes_(ClassDescriptionSize) PWSTR ClassDescription, + _In_ DWORD ClassDescriptionSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassDescriptionExA( + _In_ CONST GUID *ClassGuid, + _Out_writes_(ClassDescriptionSize) PSTR ClassDescription, + _In_ DWORD ClassDescriptionSize, + _Out_opt_ PDWORD RequiredSize, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassDescriptionExW( + _In_ CONST GUID *ClassGuid, + _Out_writes_(ClassDescriptionSize) PWSTR ClassDescription, + _In_ DWORD ClassDescriptionSize, + _Out_opt_ PDWORD RequiredSize, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved); + +WINSETUPAPI BOOL WINAPI SetupDiGetClassDevPropertySheetsA(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ LPPROPSHEETHEADERA, _In_ DWORD, _Out_opt_ PDWORD, _In_ DWORD); +WINSETUPAPI BOOL WINAPI SetupDiGetClassDevPropertySheetsW(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ LPPROPSHEETHEADERW, _In_ DWORD, _Out_opt_ PDWORD, _In_ DWORD); +_Check_return_ WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsA(_In_opt_ CONST GUID*, _In_opt_ PCSTR, _In_opt_ HWND, _In_ DWORD); +_Check_return_ WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsW(_In_opt_ CONST GUID*, _In_opt_ PCWSTR, _In_opt_ HWND, _In_ DWORD); +_Check_return_ WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsExA(_In_opt_ CONST GUID*, _In_opt_ PCSTR, _In_opt_ HWND, _In_ DWORD, _In_opt_ HDEVINFO, _In_opt_ PCSTR, _Reserved_ PVOID); +_Check_return_ WINSETUPAPI HDEVINFO WINAPI SetupDiGetClassDevsExW(_In_opt_ CONST GUID*, _In_opt_ PCWSTR, _In_opt_ HWND, _In_ DWORD, _In_opt_ HDEVINFO, _In_opt_ PCWSTR, _Reserved_ PVOID); +WINSETUPAPI BOOL WINAPI SetupDiGetClassImageIndex(_In_ PSP_CLASSIMAGELIST_DATA, _In_ CONST GUID*, _Out_ PINT); +WINSETUPAPI BOOL WINAPI SetupDiGetClassImageList(_Out_ PSP_CLASSIMAGELIST_DATA); +WINSETUPAPI BOOL WINAPI SetupDiGetClassImageListExA(_Out_ PSP_CLASSIMAGELIST_DATA, _In_opt_ PCSTR, _Reserved_ PVOID); +WINSETUPAPI BOOL WINAPI SetupDiGetClassImageListExW(_Out_ PSP_CLASSIMAGELIST_DATA, _In_opt_ PCWSTR, _Reserved_ PVOID); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassInstallParamsA( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _Out_writes_bytes_to_opt_(ClassInstallParamsSize, *RequiredSize) PSP_CLASSINSTALL_HEADER ClassInstallParams, + _In_ DWORD ClassInstallParamsSize, + _Out_opt_ PDWORD RequiredSize); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassInstallParamsW( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _Out_writes_bytes_to_opt_(ClassInstallParamsSize, *RequiredSize) PSP_CLASSINSTALL_HEADER ClassInstallParams, + _In_ DWORD ClassInstallParamsSize, + _Out_opt_ PDWORD RequiredSize); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassRegistryPropertyA( + _In_ CONST GUID *ClassGuid, + _In_ DWORD Property, + _Out_opt_ PDWORD PropertyRegDataType, + _Out_writes_bytes_to_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _Out_opt_ PDWORD RequiredSize, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetClassRegistryPropertyW( + _In_ CONST GUID *ClassGuid, + _In_ DWORD Property, + _Out_opt_ PDWORD PropertyRegDataType, + _Out_writes_bytes_to_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _Out_opt_ PDWORD RequiredSize, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved); + +WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInfoListClass(_In_ HDEVINFO, _Out_ LPGUID); +WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInfoListDetailA(_In_ HDEVINFO, _Out_ PSP_DEVINFO_LIST_DETAIL_DATA_A); +WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInfoListDetailW(_In_ HDEVINFO, _Out_ PSP_DEVINFO_LIST_DETAIL_DATA_W); +WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInstallParamsA(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _Out_ PSP_DEVINSTALL_PARAMS_A); +WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInstallParamsW(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _Out_ PSP_DEVINSTALL_PARAMS_W); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceInstanceIdA( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _Out_writes_opt_(DeviceInstanceIdSize) PSTR DeviceInstanceId, + _In_ DWORD DeviceInstanceIdSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceInstanceIdW( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _Out_writes_opt_(DeviceInstanceIdSize) PWSTR DeviceInstanceId, + _In_ DWORD DeviceInstanceIdSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInterfaceAlias(_In_ HDEVINFO, _In_ PSP_DEVICE_INTERFACE_DATA, _In_ CONST GUID*, _Out_ PSP_DEVICE_INTERFACE_DATA); + +_Success_(return != FALSE) +_At_((LPSTR)DeviceInterfaceDetailData->DevicePath, _Post_z_) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceInterfaceDetailA( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, + _Inout_updates_bytes_to_opt_(DeviceInterfaceDetailDataSize, *RequiredSize) PSP_DEVICE_INTERFACE_DETAIL_DATA_A DeviceInterfaceDetailData, + _In_ DWORD DeviceInterfaceDetailDataSize, + _Out_opt_ _Out_range_(>=, sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A)) PDWORD RequiredSize, + _Out_opt_ PSP_DEVINFO_DATA DeviceInfoData); + +_Success_(return != FALSE) +_At_((LPWSTR)DeviceInterfaceDetailData->DevicePath, _Post_z_) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceInterfaceDetailW( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, + _Out_writes_bytes_to_opt_(DeviceInterfaceDetailDataSize, *RequiredSize) PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData, + _In_ DWORD DeviceInterfaceDetailDataSize, + _Out_opt_ _Out_range_(>=, sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W)) PDWORD RequiredSize, + _Out_opt_ PSP_DEVINFO_DATA DeviceInfoData); + +_Success_(return != FALSE) +_When_((*PropertyRegDataType == REG_SZ), _At_((PSTR) PropertyBuffer, _Post_valid_)) +_When_((*PropertyRegDataType == REG_MULTI_SZ), _At_((PZZSTR) PropertyBuffer, _Post_valid_)) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceRegistryPropertyA( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ DWORD Property, + _Out_opt_ PDWORD PropertyRegDataType, + _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _Out_opt_ PDWORD RequiredSize); + +_Success_(return != FALSE) +_When_((*PropertyRegDataType == REG_SZ), _At_((PWSTR) PropertyBuffer, _Post_valid_)) +_When_((*PropertyRegDataType == REG_MULTI_SZ), _At_((PZZWSTR) PropertyBuffer, _Post_valid_)) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDeviceRegistryPropertyW( + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ DWORD Property, + _Out_opt_ PDWORD PropertyRegDataType, + _Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDriverInfoDetailA( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ PSP_DRVINFO_DATA_A DriverInfoData, + _Inout_updates_bytes_opt_(DriverInfoDetailDataSize) PSP_DRVINFO_DETAIL_DATA_A DriverInfoDetailData, + _In_ DWORD DriverInfoDetailDataSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetDriverInfoDetailW( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ PSP_DRVINFO_DATA_W DriverInfoData, + _Inout_updates_bytes_opt_(DriverInfoDetailDataSize) PSP_DRVINFO_DETAIL_DATA_W DriverInfoDetailData, + _In_ DWORD DriverInfoDetailDataSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI BOOL WINAPI SetupDiGetDriverInstallParamsA(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ PSP_DRVINFO_DATA_A, _Out_ PSP_DRVINSTALL_PARAMS); +WINSETUPAPI BOOL WINAPI SetupDiGetDriverInstallParamsW(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ PSP_DRVINFO_DATA_W, _Out_ PSP_DRVINSTALL_PARAMS); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetHwProfileFriendlyNameA( + _In_ DWORD HwProfile, + _Out_writes_(FriendlyNameSize) PSTR FriendlyName, + _In_ DWORD FriendlyNameSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetHwProfileFriendlyNameW( + _In_ DWORD HwProfile, + _Out_writes_(FriendlyNameSize) PWSTR FriendlyName, + _In_ DWORD FriendlyNameSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetHwProfileFriendlyNameExA( + _In_ DWORD HwProfile, + _Out_writes_(FriendlyNameSize) PSTR FriendlyName, + _In_ DWORD FriendlyNameSize, + _Out_opt_ PDWORD RequiredSize, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetHwProfileFriendlyNameExW( + _In_ DWORD HwProfile, + _Out_writes_(FriendlyNameSize) PWSTR FriendlyName, + _In_ DWORD FriendlyNameSize, + _Out_opt_ PDWORD RequiredSize, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved); + WINSETUPAPI BOOL WINAPI SetupDiGetHwProfileFriendlyNameW(DWORD,PWSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiGetHwProfileList(PDWORD,DWORD,PDWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiGetHwProfileListExA(PDWORD,DWORD,PDWORD,PDWORD,PCSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiGetHwProfileListExW(PDWORD,DWORD,PDWORD,PDWORD,PCWSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiGetINFClassA(PCSTR,LPGUID,PSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiGetINFClassW(PCWSTR,LPGUID,PWSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupDiGetSelectedDevice(HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiGetSelectedDriverA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_A); -WINSETUPAPI BOOL WINAPI SetupDiGetSelectedDriverW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_W); -WINSETUPAPI HPROPSHEETPAGE WINAPI SetupDiGetWizardage(HDEVINFO,PSP_DEVINFO_DATA,PSP_INSTALLWIZARD_DATA,DWORD,DWORD); -WINSETUPAPI BOOL WINAPI SetupDiInstallClassA(HWND,PCSTR,DWORD,HSPFILEQ); -WINSETUPAPI BOOL WINAPI SetupDiInstallClassW(HWND,PCWSTR,DWORD,HSPFILEQ); -WINSETUPAPI BOOL WINAPI SetupDiInstallClassExA(HWND,PCSTR,DWORD,HSPFILEQ,CONST GUID*,PVOID,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiInstallClassExW(HWND,PCWSTR,DWORD,HSPFILEQ,CONST GUID*,PVOID,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiInstallDevice(HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiInstallDeviceInterfaces(HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiInstallDriverFiles(HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiLoadClassIcon(CONST GUID*,HICON*,PINT); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetHwProfileList( + _Out_writes_to_(HwProfileListSize, *RequiredSize) PDWORD HwProfileList, + _In_ DWORD HwProfileListSize, + _Out_ PDWORD RequiredSize, + _Out_opt_ PDWORD CurrentlyActiveIndex); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetHwProfileListExA( + _Out_writes_to_(HwProfileListSize, *RequiredSize) PDWORD HwProfileList, + _In_ DWORD HwProfileListSize, + _Out_ PDWORD RequiredSize, + _Out_opt_ PDWORD CurrentlyActiveIndex, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupDiGetHwProfileListExW( + _Out_writes_to_(HwProfileListSize, *RequiredSize) PDWORD HwProfileList, + _In_ DWORD HwProfileListSize, + _Out_ PDWORD RequiredSize, + _Out_opt_ PDWORD CurrentlyActiveIndex, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetINFClassA( + _In_ PCSTR InfName, + _Out_ LPGUID ClassGuid, + _Out_writes_(ClassNameSize) PSTR ClassName, + _In_ DWORD ClassNameSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupDiGetINFClassW( + _In_ PCWSTR InfName, + _Out_ LPGUID ClassGuid, + _Out_writes_(ClassNameSize) PWSTR ClassName, + _In_ DWORD ClassNameSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI BOOL WINAPI SetupDiGetSelectedDevice(_In_ HDEVINFO, _Out_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupDiGetSelectedDriverA(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _Out_ PSP_DRVINFO_DATA_A); +WINSETUPAPI BOOL WINAPI SetupDiGetSelectedDriverW(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _Out_ PSP_DRVINFO_DATA_W); +WINSETUPAPI HPROPSHEETPAGE WINAPI SetupDiGetWizardPage(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ PSP_INSTALLWIZARD_DATA, _In_ DWORD, _In_ DWORD); +WINSETUPAPI BOOL WINAPI SetupDiInstallClassA(_In_opt_ HWND, _In_ PCSTR, _In_ DWORD, _In_opt_ HSPFILEQ); +WINSETUPAPI BOOL WINAPI SetupDiInstallClassW(_In_opt_ HWND, _In_ PCWSTR, _In_ DWORD, _In_opt_ HSPFILEQ); +WINSETUPAPI BOOL WINAPI SetupDiInstallClassExA(_In_opt_ HWND, _In_opt_ PCSTR, _In_ DWORD, _In_opt_ HSPFILEQ, _In_opt_ CONST GUID*, _Reserved_ PVOID, _Reserved_ PVOID); +WINSETUPAPI BOOL WINAPI SetupDiInstallClassExW(_In_opt_ HWND, _In_opt_ PCWSTR, _In_ DWORD, _In_opt_ HSPFILEQ, _In_opt_ CONST GUID*, _Reserved_ PVOID, _Reserved_ PVOID); +WINSETUPAPI BOOL WINAPI SetupDiInstallDevice(_In_ HDEVINFO, _Inout_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupDiInstallDeviceInterfaces(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupDiInstallDriverFiles(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupDiLoadClassIcon(_In_ CONST GUID*, _Out_opt_ HICON*, _Out_opt_ PINT); WINSETUPAPI BOOL WINAPI SetupDiMoveDuplicateDevice(HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI HKEY WINAPI SetupDiOpenClassRegKey(CONST GUID*,REGSAM); -WINSETUPAPI HKEY WINAPI SetupDiOpenClassRegKeyExA(CONST GUID*,REGSAM,DWORD,PCSTR,PVOID); -WINSETUPAPI HKEY WINAPI SetupDiOpenClassRegKeyExW(CONST GUID*,REGSAM,DWORD,PCWSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiOpenDeviceInfoA(HDEVINFO,PCSTR,HWND,DWORD,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiOpenDeviceInfoW(HDEVINFO,PCWSTR,HWND,DWORD,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiOpenDeviceInterfaceA(HDEVINFO,PCSTR,DWORD,PSP_DEVICE_INTERFACE_DATA); -WINSETUPAPI BOOL WINAPI SetupDiOpenDeviceInterfaceW(HDEVINFO,PCWSTR,DWORD,PSP_DEVICE_INTERFACE_DATA); -WINSETUPAPI HKEY WINAPI SetupDiOpenDeviceInterfaceRegKey(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,DWORD,REGSAM); -WINSETUPAPI HKEY WINAPI SetupDiOpenDevRegKey(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,DWORD,REGSAM); -WINSETUPAPI BOOL WINAPI SetupDiRegisterCoDeviceInstallers(HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiRegisterDeviceInfo(HDEVINFO,PSP_DEVINFO_DATA,DWORD,PSP_DETSIG_CMPPROC,PVOID,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiRemoveDevice(HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiRemoveDeviceInterface(HDEVINFO,PSP_DEVICE_INTERFACE_DATA); -WINSETUPAPI BOOL WINAPI SetupDiSelectBestCompatDrv(HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiSelectDevice(HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiSelectOEMDrv(HWND,HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiSetClassInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_CLASSINSTALL_HEADER,DWORD); -WINSETUPAPI BOOL WINAPI SetupDiSetClassInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_CLASSINSTALL_HEADER,DWORD); -WINSETUPAPI BOOL WINAPI SetupDiSetClassRegistryPropertyA(LPGUID,DWORD,CONST BYTE*,DWORD,PCSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiSetClassRegistryPropertyW(LPGUID,DWORD,CONST BYTE*,DWORD,PCWSTR,PVOID); -WINSETUPAPI BOOL WINAPI SetupDiSetDeviceInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DEVINSTALL_PARAMS_A); -WINSETUPAPI BOOL WINAPI SetupDiSetDeviceInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DEVINSTALL_PARAMS_W); -WINSETUPAPI BOOL WINAPI SetupDiSetDeviceRegistryPropertyA(HDEVINFO,PSP_DEVINFO_DATA,DWORD,CONST BYTE*,DWORD); -WINSETUPAPI BOOL WINAPI SetupDiSetDeviceRegistryPropertyW(HDEVINFO,PSP_DEVINFO_DATA,DWORD,CONST BYTE*,DWORD); -WINSETUPAPI BOOL WINAPI SetupDiSetDriverInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_A,PSP_DRVINSTALL_PARAMS); -WINSETUPAPI BOOL WINAPI SetupDiSetDriverInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_W,PSP_DRVINSTALL_PARAMS); -WINSETUPAPI BOOL WINAPI SetupDiSetSelectedDevice(HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupDiSetSelectedDriverA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_A); -WINSETUPAPI BOOL WINAPI SetupDiSetSelectedDriverW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_W); -WINSETUPAPI BOOL WINAPI SetupDiUnremoveDevice(HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI HDSKSPC WINAPI SetupDuplicateDiskSpaceListA(HDSKSPC,PVOID,DWORD,UINT); -WINSETUPAPI HDSKSPC WINAPI SetupDuplicateDiskSpaceListW(HDSKSPC,PVOID,DWORD,UINT); -WINSETUPAPI BOOL WINAPI SetupFindFirstLineA(HINF,PCSTR,PCSTR,PINFCONTEXT); -WINSETUPAPI BOOL WINAPI SetupFindFirstLineW(HINF,PCWSTR,PCWSTR,PINFCONTEXT); -WINSETUPAPI BOOL WINAPI SetupFindNextLine(PINFCONTEXT,PINFCONTEXT); -WINSETUPAPI BOOL WINAPI SetupFindNextMatchLineA(PINFCONTEXT,PCSTR,PINFCONTEXT); -WINSETUPAPI BOOL WINAPI SetupFindNextMatchLineW(PINFCONTEXT,PCWSTR,PINFCONTEXT); +_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiOpenClassRegKey(_In_opt_ CONST GUID*, _In_ REGSAM); +_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiOpenClassRegKeyExA(_In_opt_ CONST GUID*, _In_ REGSAM, _In_ DWORD, _In_opt_ PCSTR, _Reserved_ PVOID); +_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiOpenClassRegKeyExW(_In_opt_ CONST GUID*, _In_ REGSAM, _In_ DWORD, _In_opt_ PCWSTR, _Reserved_ PVOID); +WINSETUPAPI BOOL WINAPI SetupDiOpenDeviceInfoA(_In_ HDEVINFO, _In_ PCSTR, _In_opt_ HWND, _In_ DWORD, _Out_opt_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupDiOpenDeviceInfoW(_In_ HDEVINFO, _In_ PCWSTR, _In_opt_ HWND, _In_ DWORD, _Out_opt_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupDiOpenDeviceInterfaceA(_In_ HDEVINFO, _In_ PCSTR, _In_ DWORD, _Out_opt_ PSP_DEVICE_INTERFACE_DATA); +WINSETUPAPI BOOL WINAPI SetupDiOpenDeviceInterfaceW(_In_ HDEVINFO, _In_ PCWSTR, _In_ DWORD, _Out_opt_ PSP_DEVICE_INTERFACE_DATA); +_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiOpenDeviceInterfaceRegKey(_In_ HDEVINFO, _In_ PSP_DEVICE_INTERFACE_DATA, _Reserved_ DWORD, _In_ REGSAM); +_Check_return_ WINSETUPAPI HKEY WINAPI SetupDiOpenDevRegKey(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ REGSAM); +WINSETUPAPI BOOL WINAPI SetupDiRegisterCoDeviceInstallers(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupDiRegisterDeviceInfo(_In_ HDEVINFO, _Inout_ PSP_DEVINFO_DATA, _In_ DWORD, _In_opt_ PSP_DETSIG_CMPPROC, _In_opt_ PVOID, _Out_opt_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupDiRemoveDevice(_In_ HDEVINFO, _Inout_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupDiRemoveDeviceInterface(_In_ HDEVINFO, _Inout_ PSP_DEVICE_INTERFACE_DATA); +WINSETUPAPI BOOL WINAPI SetupDiSelectBestCompatDrv(_In_ HDEVINFO, _Inout_opt_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupDiSelectDevice(_In_ HDEVINFO, _Inout_opt_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupDiSelectOEMDrv(_In_opt_ HWND, _In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA); + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetClassInstallParamsA( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_reads_bytes_opt_(ClassInstallParamsSize) PSP_CLASSINSTALL_HEADER ClassInstallParams, + _In_ DWORD ClassInstallParamsSize); + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetClassInstallParamsW( + _In_ HDEVINFO DeviceInfoSet, + _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, + _In_reads_bytes_opt_(ClassInstallParamsSize) PSP_CLASSINSTALL_HEADER ClassInstallParams, + _In_ DWORD ClassInstallParamsSize); + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetClassRegistryPropertyA( + _In_ CONST GUID *ClassGuid, + _In_ DWORD Property, + _In_reads_bytes_opt_(PropertyBufferSize) CONST BYTE *PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _In_opt_ PCSTR MachineName, + _Reserved_ PVOID Reserved); + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetClassRegistryPropertyW( + _In_ CONST GUID *ClassGuid, + _In_ DWORD Property, + _In_reads_bytes_opt_(PropertyBufferSize) CONST BYTE *PropertyBuffer, + _In_ DWORD PropertyBufferSize, + _In_opt_ PCWSTR MachineName, + _Reserved_ PVOID Reserved); + +WINSETUPAPI BOOL WINAPI SetupDiSetDeviceInstallParamsA(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ PSP_DEVINSTALL_PARAMS_A); +WINSETUPAPI BOOL WINAPI SetupDiSetDeviceInstallParamsW(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ PSP_DEVINSTALL_PARAMS_W); + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetDeviceRegistryPropertyA( + _In_ HDEVINFO DeviceInfoSet, + _Inout_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ DWORD Property, + _In_reads_bytes_opt_(PropertyBufferSize) CONST BYTE *PropertyBuffer, + _In_ DWORD PropertyBufferSize); + +WINSETUPAPI +BOOL +WINAPI +SetupDiSetDeviceRegistryPropertyW( + _In_ HDEVINFO DeviceInfoSet, + _Inout_ PSP_DEVINFO_DATA DeviceInfoData, + _In_ DWORD Property, + _In_reads_bytes_opt_(PropertyBufferSize) CONST BYTE *PropertyBuffer, + _In_ DWORD PropertyBufferSize); + +WINSETUPAPI BOOL WINAPI SetupDiSetDriverInstallParamsA(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ PSP_DRVINFO_DATA_A, _In_ PSP_DRVINSTALL_PARAMS); +WINSETUPAPI BOOL WINAPI SetupDiSetDriverInstallParamsW(_In_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _In_ PSP_DRVINFO_DATA_W, _In_ PSP_DRVINSTALL_PARAMS); +WINSETUPAPI BOOL WINAPI SetupDiSetSelectedDevice(_In_ HDEVINFO, _In_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupDiSetSelectedDriverA(_In_ HDEVINFO, _Inout_opt_ PSP_DEVINFO_DATA, _Inout_opt_ PSP_DRVINFO_DATA_A); +WINSETUPAPI BOOL WINAPI SetupDiSetSelectedDriverW(_In_ HDEVINFO, _Inout_opt_ PSP_DEVINFO_DATA, _Inout_opt_ PSP_DRVINFO_DATA_W); +WINSETUPAPI BOOL WINAPI SetupDiUnremoveDevice(_In_ HDEVINFO, _Inout_ PSP_DEVINFO_DATA); +WINSETUPAPI HDSKSPC WINAPI SetupDuplicateDiskSpaceListA(_In_ HDSKSPC, _Reserved_ PVOID, _Reserved_ DWORD, _In_ UINT); +WINSETUPAPI HDSKSPC WINAPI SetupDuplicateDiskSpaceListW(_In_ HDSKSPC, _Reserved_ PVOID, _Reserved_ DWORD, _In_ UINT); +WINSETUPAPI BOOL WINAPI SetupFindFirstLineA(_In_ HINF, _In_ PCSTR, _In_opt_ PCSTR, _Out_ PINFCONTEXT); +WINSETUPAPI BOOL WINAPI SetupFindFirstLineW(_In_ HINF, _In_ PCWSTR, _In_opt_ PCWSTR, _Out_ PINFCONTEXT); +WINSETUPAPI BOOL WINAPI SetupFindNextLine(_In_ PINFCONTEXT, _Out_ PINFCONTEXT); +WINSETUPAPI BOOL WINAPI SetupFindNextMatchLineA(_In_ PINFCONTEXT, _In_opt_ PCSTR, _Out_ PINFCONTEXT); +WINSETUPAPI BOOL WINAPI SetupFindNextMatchLineW(_In_ PINFCONTEXT, _In_opt_ PCWSTR, _Out_ PINFCONTEXT); WINSETUPAPI BOOL WINAPI SetupFreeA(PCSTR**,UINT); WINSETUPAPI BOOL WINAPI SetupFreeW(PCWSTR**,UINT); -WINSETUPAPI BOOL WINAPI SetupGetBackupInformationA(HSPFILEQ,PSP_BACKUP_QUEUE_PARAMS_A); -WINSETUPAPI BOOL WINAPI SetupGetBackupInformationW(HSPFILEQ,PSP_BACKUP_QUEUE_PARAMS_W); -WINSETUPAPI BOOL WINAPI SetupGetBinaryField(PINFCONTEXT,DWORD,PBYTE,DWORD,LPDWORD); -WINSETUPAPI DWORD WINAPI SetupGetFieldCount(PINFCONTEXT); -WINSETUPAPI DWORD WINAPI SetupGetFileCompressionInfoA(PCSTR,PSTR*,PDWORD,PDWORD,PUINT); -WINSETUPAPI DWORD WINAPI SetupGetFileCompressionInfoW(PCWSTR,PWSTR*,PDWORD,PDWORD,PUINT); -WINSETUPAPI BOOL WINAPI SetupGetFileCompressionInfoExA(PCSTR,PSTR,DWORD,PDWORD,PDWORD,PDWORD,PUINT); -WINSETUPAPI BOOL WINAPI SetupGetFileCompressionInfoExW(PCWSTR,PWSTR,DWORD,PDWORD,PDWORD,PDWORD,PUINT); -WINSETUPAPI BOOL WINAPI SetupGetInfFileListA(PCSTR,DWORD,PSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupGetInfFileListW(PCWSTR,DWORD,PWSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupGetInfInformationA(LPCVOID,DWORD,PSP_INF_INFORMATION,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupGetInfInformationW(LPCVOID,DWORD,PSP_INF_INFORMATION,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupGetIntField(PINFCONTEXT,DWORD,PINT); -WINSETUPAPI BOOL WINAPI SetupGetLineByIndexA(HINF,PCSTR,DWORD,PINFCONTEXT); -WINSETUPAPI BOOL WINAPI SetupGetLineByIndexW(HINF,PCWSTR,DWORD,PINFCONTEXT); -WINSETUPAPI LONG WINAPI SetupGetLineCountA(HINF,PCSTR); -WINSETUPAPI LONG WINAPI SetupGetLineCountW(HINF,PCWSTR); -WINSETUPAPI BOOL WINAPI SetupGetLineTextA(PINFCONTEXT,HINF,PCSTR,PCSTR,PSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupGetLineTextW(PINFCONTEXT,HINF,PCWSTR,PCWSTR,PWSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupGetMultiSzFieldA(PINFCONTEXT,DWORD,PSTR,DWORD,LPDWORD); -WINSETUPAPI BOOL WINAPI SetupGetMultiSzFieldW(PINFCONTEXT,DWORD,PWSTR,DWORD,LPDWORD); -WINSETUPAPI BOOL WINAPI SetupGetSourceFileLocationA(HINF,PINFCONTEXT,PCSTR,PUINT,PSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupGetSourceFileLocationW(HINF,PINFCONTEXT,PCWSTR,PUINT,PWSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupGetSourceFileSizeA(HINF,PINFCONTEXT,PCSTR,PCSTR,PDWORD,UINT); -WINSETUPAPI BOOL WINAPI SetupGetSourceFileSizeW(HINF,PINFCONTEXT,PCWSTR,PCWSTR,PDWORD,UINT); -WINSETUPAPI BOOL WINAPI SetupGetSourceInfoA(HINF,UINT,UINT,PSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupGetSourceInfoW(HINF,UINT,UINT,PWSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupGetStringFieldA(PINFCONTEXT,DWORD,PSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupGetStringFieldW(PINFCONTEXT,DWORD,PWSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupGetTargetPathA(HINF,PINFCONTEXT,PCSTR,PSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupGetTargetPathW(HINF,PINFCONTEXT,PCWSTR,PWSTR,DWORD,PDWORD); -WINSETUPAPI PVOID WINAPI SetupInitDefaultQueueCallback(HWND); -WINSETUPAPI PVOID WINAPI SetupInitDefaultQueueCallbackEx(HWND,HWND,UINT,DWORD,PVOID); -WINSETUPAPI HSPFILELOG WINAPI SetupInitializeFileLogA(PCSTR,DWORD); -WINSETUPAPI HSPFILELOG WINAPI SetupInitializeFileLogW(PCWSTR,DWORD); -WINSETUPAPI BOOL WINAPI SetupInstallFileA(HINF,PINFCONTEXT,PCSTR,PCSTR,PCSTR,DWORD,PSP_FILE_CALLBACK_A,PVOID); -WINSETUPAPI BOOL WINAPI SetupInstallFileW(HINF,PINFCONTEXT,PCWSTR,PCWSTR,PCWSTR,DWORD,PSP_FILE_CALLBACK_W,PVOID); -WINSETUPAPI BOOL WINAPI SetupInstallFileExA(HINF,PINFCONTEXT,PCSTR,PCSTR,PCSTR,DWORD,PSP_FILE_CALLBACK_A,PVOID,PBOOL); -WINSETUPAPI BOOL WINAPI SetupInstallFileExW(HINF,PINFCONTEXT,PCWSTR,PCWSTR,PCWSTR,DWORD,PSP_FILE_CALLBACK_W,PVOID,PBOOL); -WINSETUPAPI BOOL WINAPI SetupInstallFilesFromInfSectionA(HINF,HINF,HSPFILEQ,PCSTR,PCSTR,UINT); -WINSETUPAPI BOOL WINAPI SetupInstallFilesFromInfSectionW(HINF,HINF,HSPFILEQ,PCWSTR,PCWSTR,UINT); -WINSETUPAPI BOOL WINAPI SetupInstallFromInfSectionA(HWND,HINF,PCSTR,UINT,HKEY,PCSTR,UINT,PSP_FILE_CALLBACK_A,PVOID,HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupInstallFromInfSectionW(HWND,HINF,PCWSTR,UINT,HKEY,PCWSTR,UINT,PSP_FILE_CALLBACK_W,PVOID,HDEVINFO,PSP_DEVINFO_DATA); -WINSETUPAPI BOOL WINAPI SetupInstallServicesFromInfSectionA(HINF,PCSTR,DWORD); -WINSETUPAPI BOOL WINAPI SetupInstallServicesFromInfSectionW(HINF,PCWSTR,DWORD); -WINSETUPAPI BOOL WINAPI SetupInstallServicesFromInfSectionExA(HINF,PCSTR,DWORD,HDEVINFO,PSP_DEVINFO_DATA,PVOID,PVOID); -WINSETUPAPI BOOL WINAPI SetupInstallServicesFromInfSectionExW(HINF,PCWSTR,DWORD,HDEVINFO,PSP_DEVINFO_DATA,PVOID,PVOID); -WINSETUPAPI BOOL WINAPI SetupIterateCabinetA(PCSTR,DWORD,PSP_FILE_CALLBACK_A,PVOID); -WINSETUPAPI BOOL WINAPI SetupIterateCabinetW(PCWSTR,DWORD,PSP_FILE_CALLBACK_W,PVOID); -WINSETUPAPI BOOL WINAPI SetupLogErrorA(LPCSTR,LogSeverity); -WINSETUPAPI BOOL WINAPI SetupLogErrorW(LPCWSTR,LogSeverity); -WINSETUPAPI BOOL WINAPI SetupLogFileA(HSPFILELOG,PCSTR,PCSTR,PCSTR,DWORD,PCSTR,PCSTR,PCSTR,DWORD); -WINSETUPAPI BOOL WINAPI SetupLogFileW(HSPFILELOG,PCWSTR,PCWSTR,PCWSTR,DWORD,PCWSTR,PCWSTR,PCWSTR,DWORD); -WINSETUPAPI BOOL WINAPI SetupOpenAppendInfFileA(PCSTR,HINF,PUINT); -WINSETUPAPI BOOL WINAPI SetupOpenAppendInfFileW(PCWSTR,HINF,PUINT); +WINSETUPAPI BOOL WINAPI SetupGetBackupInformationA(_In_ HSPFILEQ, _Inout_ PSP_BACKUP_QUEUE_PARAMS_A); +WINSETUPAPI BOOL WINAPI SetupGetBackupInformationW(_In_ HSPFILEQ, _Inout_ PSP_BACKUP_QUEUE_PARAMS_W); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupGetBinaryField( + _In_ PINFCONTEXT Context, + _In_ DWORD FieldIndex, + _Out_writes_bytes_to_opt_(ReturnBufferSize, *RequiredSize) PBYTE ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ LPDWORD RequiredSize); + +WINSETUPAPI DWORD WINAPI SetupGetFieldCount(_In_ PINFCONTEXT); +WINSETUPAPI DWORD WINAPI SetupGetFileCompressionInfoA(_In_ PCSTR, _Out_ PSTR*, _Out_ PDWORD, _Out_ PDWORD, _Out_ PUINT); +WINSETUPAPI DWORD WINAPI SetupGetFileCompressionInfoW(_In_ PCWSTR, _Out_ PWSTR*, _Out_ PDWORD, _Out_ PDWORD, _Out_ PUINT); + +WINSETUPAPI +BOOL +WINAPI +SetupGetFileCompressionInfoExA( + _In_ PCSTR SourceFileName, + _In_reads_opt_(ActualSourceFileNameBufferLen) PSTR ActualSourceFileNameBuffer, + _In_ DWORD ActualSourceFileNameBufferLen, + _Out_opt_ PDWORD RequiredBufferLen, + _Out_ PDWORD SourceFileSize, + _Out_ PDWORD TargetFileSize, + _Out_ PUINT CompressionType); + +WINSETUPAPI +BOOL +WINAPI +SetupGetFileCompressionInfoExW( + _In_ PCWSTR SourceFileName, + _In_reads_opt_(ActualSourceFileNameBufferLen) PWSTR ActualSourceFileNameBuffer, + _In_ DWORD ActualSourceFileNameBufferLen, + _Out_opt_ PDWORD RequiredBufferLen, + _Out_ PDWORD SourceFileSize, + _Out_ PDWORD TargetFileSize, + _Out_ PUINT CompressionType); + +WINSETUPAPI +BOOL +WINAPI +SetupGetInfFileListA( + _In_opt_ PCSTR DirectoryPath, + _In_ DWORD InfStyle, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupGetInfFileListW( + _In_opt_ PCWSTR DirectoryPath, + _In_ DWORD InfStyle, + _Out_writes_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupGetInfInformationA( + _In_ LPCVOID InfSpec, + _In_ DWORD SearchControl, + _Out_writes_bytes_to_opt_(ReturnBufferSize, *RequiredSize) PSP_INF_INFORMATION ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +_Success_(return != FALSE) +WINSETUPAPI +BOOL +WINAPI +SetupGetInfInformationW( + _In_ LPCVOID InfSpec, + _In_ DWORD SearchControl, + _Out_writes_bytes_to_opt_(ReturnBufferSize, *RequiredSize) PSP_INF_INFORMATION ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI BOOL WINAPI SetupGetIntField(_In_ PINFCONTEXT, _In_ DWORD, _Out_ PINT); +WINSETUPAPI BOOL WINAPI SetupGetLineByIndexA(_In_ HINF, _In_ PCSTR, _In_ DWORD, _Out_ PINFCONTEXT); +WINSETUPAPI BOOL WINAPI SetupGetLineByIndexW(_In_ HINF, _In_ PCWSTR, _In_ DWORD, _Out_ PINFCONTEXT); +WINSETUPAPI LONG WINAPI SetupGetLineCountA(_In_ HINF, _In_ PCSTR); +WINSETUPAPI LONG WINAPI SetupGetLineCountW(_In_ HINF, _In_ PCWSTR); + +WINSETUPAPI +BOOL +WINAPI +SetupGetLineTextA( + _In_opt_ PINFCONTEXT Context, + _In_opt_ HINF InfHandle, + _In_opt_ PCSTR Section, + _In_opt_ PCSTR Key, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupGetLineTextW( + _In_opt_ PINFCONTEXT Context, + _In_opt_ HINF InfHandle, + _In_opt_ PCWSTR Section, + _In_opt_ PCWSTR Key, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupGetMultiSzFieldA( + _In_ PINFCONTEXT Context, + _In_ DWORD FieldIndex, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ LPDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupGetMultiSzFieldW( + _In_ PINFCONTEXT Context, + _In_ DWORD FieldIndex, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ LPDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupGetSourceFileLocationA( + _In_ HINF InfHandle, + _In_opt_ PINFCONTEXT InfContext, + _In_opt_ PCSTR FileName, + _Out_ PUINT SourceId, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupGetSourceFileLocationW( + _In_ HINF InfHandle, + _In_opt_ PINFCONTEXT InfContext, + _In_opt_ PCWSTR FileName, + _Out_ PUINT SourceId, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI BOOL WINAPI SetupGetSourceFileSizeA(_In_ HINF, _In_opt_ PINFCONTEXT, _In_opt_ PCSTR, _In_opt_ PCSTR, _Out_ PDWORD, _In_ UINT); +WINSETUPAPI BOOL WINAPI SetupGetSourceFileSizeW(_In_ HINF, _In_opt_ PINFCONTEXT, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _Out_ PDWORD, _In_ UINT); + +WINSETUPAPI +BOOL +WINAPI +SetupGetSourceInfoA( + _In_ HINF InfHandle, + _In_ UINT SourceId, + _In_ UINT InfoDesired, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupGetSourceInfoW( + _In_ HINF InfHandle, + _In_ UINT SourceId, + _In_ UINT InfoDesired, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupGetStringFieldA( + _In_ PINFCONTEXT Context, + _In_ DWORD FieldIndex, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupGetStringFieldW( + _In_ PINFCONTEXT Context, + _In_ DWORD FieldIndex, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupGetTargetPathA( + _In_ HINF InfHandle, + _In_opt_ PINFCONTEXT InfContext, + _In_opt_ PCSTR Section, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupGetTargetPathW( + _In_ HINF InfHandle, + _In_opt_ PINFCONTEXT InfContext, + _In_opt_ PCWSTR Section, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI PVOID WINAPI SetupInitDefaultQueueCallback(_In_opt_ HWND); +WINSETUPAPI PVOID WINAPI SetupInitDefaultQueueCallbackEx(_In_opt_ HWND, _In_opt_ HWND, _In_ UINT, _Reserved_ DWORD, _Reserved_ PVOID); +WINSETUPAPI HSPFILELOG WINAPI SetupInitializeFileLogA(_In_opt_ PCSTR, _In_ DWORD); +WINSETUPAPI HSPFILELOG WINAPI SetupInitializeFileLogW(_In_opt_ PCWSTR, _In_ DWORD); +WINSETUPAPI BOOL WINAPI SetupInstallFileA(_In_opt_ HINF, _In_opt_ PINFCONTEXT, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_ DWORD, _In_opt_ PSP_FILE_CALLBACK_A, _In_opt_ PVOID); +WINSETUPAPI BOOL WINAPI SetupInstallFileW(_In_opt_ HINF, _In_opt_ PINFCONTEXT, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_ DWORD, _In_opt_ PSP_FILE_CALLBACK_W, _In_opt_ PVOID); +WINSETUPAPI BOOL WINAPI SetupInstallFileExA(_In_opt_ HINF, _In_opt_ PINFCONTEXT, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_ DWORD, _In_opt_ PSP_FILE_CALLBACK_A, _In_opt_ PVOID, _Out_ PBOOL); +WINSETUPAPI BOOL WINAPI SetupInstallFileExW(_In_opt_ HINF, _In_opt_ PINFCONTEXT, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_ DWORD, _In_opt_ PSP_FILE_CALLBACK_W, _In_opt_ PVOID, _Out_ PBOOL); +WINSETUPAPI BOOL WINAPI SetupInstallFilesFromInfSectionA(_In_ HINF, _In_opt_ HINF, _In_ HSPFILEQ, _In_ PCSTR, _In_opt_ PCSTR, _In_ UINT); +WINSETUPAPI BOOL WINAPI SetupInstallFilesFromInfSectionW(_In_ HINF, _In_opt_ HINF, _In_ HSPFILEQ, _In_ PCWSTR, _In_opt_ PCWSTR, _In_ UINT); +WINSETUPAPI BOOL WINAPI SetupInstallFromInfSectionA(_In_opt_ HWND, _In_ HINF, _In_ PCSTR, _In_ UINT, _In_opt_ HKEY, _In_opt_ PCSTR, _In_ UINT, _In_opt_ PSP_FILE_CALLBACK_A, _In_opt_ PVOID, _In_opt_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupInstallFromInfSectionW(_In_opt_ HWND, _In_ HINF, _In_ PCWSTR, _In_ UINT, _In_opt_ HKEY, _In_opt_ PCWSTR, _In_ UINT, _In_opt_ PSP_FILE_CALLBACK_W, _In_opt_ PVOID, _In_opt_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA); +WINSETUPAPI BOOL WINAPI SetupInstallServicesFromInfSectionA(_In_ HINF, _In_ PCSTR, _In_ DWORD); +WINSETUPAPI BOOL WINAPI SetupInstallServicesFromInfSectionW(_In_ HINF, _In_ PCWSTR, _In_ DWORD); +WINSETUPAPI BOOL WINAPI SetupInstallServicesFromInfSectionExA(_In_ HINF, _In_ PCSTR, _In_ DWORD, _In_opt_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _Reserved_ PVOID, _Reserved_ PVOID); +WINSETUPAPI BOOL WINAPI SetupInstallServicesFromInfSectionExW(_In_ HINF, _In_ PCWSTR, _In_ DWORD, _In_opt_ HDEVINFO, _In_opt_ PSP_DEVINFO_DATA, _Reserved_ PVOID, _Reserved_ PVOID); +WINSETUPAPI BOOL WINAPI SetupIterateCabinetA(_In_ PCSTR, _Reserved_ DWORD, _In_ PSP_FILE_CALLBACK_A, _In_ PVOID); +WINSETUPAPI BOOL WINAPI SetupIterateCabinetW(_In_ PCWSTR, _Reserved_ DWORD, _In_ PSP_FILE_CALLBACK_W, _In_ PVOID); +WINSETUPAPI BOOL WINAPI SetupLogErrorA(_In_ LPCSTR, _In_ LogSeverity); +WINSETUPAPI BOOL WINAPI SetupLogErrorW(_In_ LPCWSTR, _In_ LogSeverity); +WINSETUPAPI BOOL WINAPI SetupLogFileA(_In_ HSPFILELOG, _In_opt_ PCSTR, _In_ PCSTR, _In_ PCSTR, _In_ DWORD, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_ DWORD); +WINSETUPAPI BOOL WINAPI SetupLogFileW(_In_ HSPFILELOG, _In_opt_ PCWSTR, _In_ PCWSTR, _In_ PCWSTR, _In_ DWORD, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_ DWORD); + +WINSETUPAPI +BOOL +WINAPI +SetupOpenAppendInfFileA( + _In_opt_ PCSTR FileName, + _In_ HINF InfHandle, + _Out_opt_ PUINT ErrorLine); + +WINSETUPAPI +BOOL +WINAPI +SetupOpenAppendInfFileW( + _In_opt_ PCWSTR FileName, + _In_ HINF InfHandle, + _Out_opt_ PUINT ErrorLine); + WINSETUPAPI HSPFILEQ WINAPI SetupOpenFileQueue(VOID); -WINSETUPAPI HINF WINAPI SetupOpenInfFileA(PCSTR,PCSTR,DWORD,PUINT); -WINSETUPAPI HINF WINAPI SetupOpenInfFileW(PCWSTR,PCWSTR,DWORD,PUINT); -WINSETUPAPI BOOL WINAPI SetupOpenLog(BOOL); + +WINSETUPAPI +HINF +WINAPI +SetupOpenInfFileA( + _In_ PCSTR FileName, + _In_opt_ PCSTR InfClass, + _In_ DWORD InfStyle, + _Out_opt_ PUINT ErrorLine); + +WINSETUPAPI +HINF +WINAPI +SetupOpenInfFileW( + _In_ PCWSTR FileName, + _In_opt_ PCWSTR InfClass, + _In_ DWORD InfStyle, + _Out_opt_ PUINT ErrorLine); + +WINSETUPAPI BOOL WINAPI SetupOpenLog(_In_ BOOL); WINSETUPAPI HINF WINAPI SetupOpenMasterInf(VOID); -WINSETUPAPI UINT WINAPI SetupPromptForDiskA(HWND,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,DWORD,PSTR,DWORD,PDWORD); -WINSETUPAPI UINT WINAPI SetupPromptForDiskW(HWND,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,DWORD,PWSTR,DWORD,PDWORD); -WINSETUPAPI INT WINAPI SetupPromptReboot(HSPFILEQ,HWND,BOOL); + +WINSETUPAPI +UINT +WINAPI +SetupPromptForDiskA( + _In_ HWND hwndParent, + _In_opt_ PCSTR DialogTitle, + _In_opt_ PCSTR DiskName, + _In_opt_ PCSTR PathToSource, + _In_ PCSTR FileSought, + _In_opt_ PCSTR TagFile, + _In_ DWORD DiskPromptStyle, + _Out_writes_opt_(PathBufferSize) PSTR PathBuffer, + _In_ DWORD PathBufferSize, + _Out_opt_ PDWORD PathRequiredSize); + +WINSETUPAPI +UINT +WINAPI +SetupPromptForDiskW( + _In_ HWND hwndParent, + _In_opt_ PCWSTR DialogTitle, + _In_opt_ PCWSTR DiskName, + _In_opt_ PCWSTR PathToSource, + _In_ PCWSTR FileSought, + _In_opt_ PCWSTR TagFile, + _In_ DWORD DiskPromptStyle, + _Out_writes_opt_(PathBufferSize) PWSTR PathBuffer, + _In_ DWORD PathBufferSize, + _Out_opt_ PDWORD PathRequiredSize); + +WINSETUPAPI INT WINAPI SetupPromptReboot(_In_opt_ HSPFILEQ, _In_opt_ HWND, _In_ BOOL); WINSETUPAPI BOOL WINAPI SetupQueryA(DWORD,PCSTR**,PUINT); WINSETUPAPI BOOL WINAPI SetupQueryW(DWORD,PCWSTR**,PUINT); -WINSETUPAPI BOOL WINAPI SetupQueryDrivesInDiskSpaceListA(HDSKSPC,PSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupQueryDrivesInDiskSpaceListW(HDSKSPC,PWSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupQueryFileLogA(HSPFILELOG,PCSTR,PCSTR,SetupFileLogInfo,PSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupQueryFileLogW(HSPFILELOG,PCWSTR,PCWSTR,SetupFileLogInfo,PWSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupQueryInfFileInformationA(PSP_INF_INFORMATION,UINT,PSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupQueryInfFileInformationW(PSP_INF_INFORMATION,UINT,PWSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupQueryInfOriginalFileInformationA(PSP_INF_INFORMATION,UINT,PSP_ALTPLATFORM_INFO,PSP_ORIGINAL_FILE_INFO_A); -WINSETUPAPI BOOL WINAPI SetupQueryInfOriginalFileInformationW(PSP_INF_INFORMATION,UINT,PSP_ALTPLATFORM_INFO,PSP_ORIGINAL_FILE_INFO_W); -WINSETUPAPI BOOL WINAPI SetupQueryInfVersionInformationA(PSP_INF_INFORMATION,UINT,PSTR,PSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupQueryInfVersionInformationW(PSP_INF_INFORMATION,UINT,PCWSTR,PWSTR,DWORD,PDWORD); -WINSETUPAPI BOOL WINAPI SetupQuerySpaceRequiredOnDriveA(HDSKSPC,PCSTR,LONGLONG*,PVOID,UINT); -WINSETUPAPI BOOL WINAPI SetupQuerySpaceRequiredOnDriveW(HDSKSPC,PCWSTR,LONGLONG*,PVOID,UINT); -WINSETUPAPI BOOL WINAPI SetupQueueCopyA(HSPFILEQ,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,DWORD); -WINSETUPAPI BOOL WINAPI SetupQueueCopyW(HSPFILEQ,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,DWORD); -WINSETUPAPI BOOL WINAPI SetupQueueCopyIndirectA(PSP_FILE_COPY_PARAMS_A); -WINSETUPAPI BOOL WINAPI SetupQueueCopyIndirectW(PSP_FILE_COPY_PARAMS_W); -WINSETUPAPI BOOL WINAPI SetupQueueCopySectionA(HSPFILEQ,PCSTR,HINF,HINF,PCSTR,DWORD); -WINSETUPAPI BOOL WINAPI SetupQueueCopySectionW(HSPFILEQ,PCWSTR,HINF,HINF,PCWSTR,DWORD); -WINSETUPAPI BOOL WINAPI SetupQueueDefaultCopyA(HSPFILEQ,HINF,PCSTR,PCSTR,PCSTR,DWORD); -WINSETUPAPI BOOL WINAPI SetupQueueDefaultCopyW(HSPFILEQ,HINF,PCWSTR,PCWSTR,PCWSTR,DWORD); -WINSETUPAPI BOOL WINAPI SetupQueueDeleteA(HSPFILEQ,PCSTR,PCSTR); -WINSETUPAPI BOOL WINAPI SetupQueueDeleteW(HSPFILEQ,PCWSTR,PCWSTR); -WINSETUPAPI BOOL WINAPI SetupQueueDeleteSectionA(HSPFILEQ,HINF,HINF,PCSTR); -WINSETUPAPI BOOL WINAPI SetupQueueDeleteSectionW(HSPFILEQ,HINF,HINF,PCWSTR); -WINSETUPAPI BOOL WINAPI SetupQueueRenameA(HSPFILEQ,PCSTR,PCSTR,PCSTR,PCSTR); -WINSETUPAPI BOOL WINAPI SetupQueueRenameW(HSPFILEQ,PCWSTR,PCWSTR,PCWSTR,PCWSTR); -WINSETUPAPI BOOL WINAPI SetupQueueRenameSectionA(HSPFILEQ,HINF,HINF,PCSTR); -WINSETUPAPI BOOL WINAPI SetupQueueRenameSectionW(HSPFILEQ,HINF,HINF,PCWSTR); -WINSETUPAPI BOOL WINAPI SetupRemoveFileLogEntryA(HSPFILELOG,PCSTR,PCSTR); -WINSETUPAPI BOOL WINAPI SetupRemoveFileLogEntryW(HSPFILELOG,PCWSTR,PCWSTR); -WINSETUPAPI BOOL WINAPI SetupRemoveFromDiskSpaceListA(HDSKSPC,PCSTR,UINT,PVOID,UINT); -WINSETUPAPI BOOL WINAPI SetupRemoveFromDiskSpaceListW(HDSKSPC,PCWSTR,UINT,PVOID,UINT); -WINSETUPAPI BOOL WINAPI SetupRemoveFromSourceListA(DWORD,PCSTR); -WINSETUPAPI BOOL WINAPI SetupRemoveFromSourceListW(DWORD,PCWSTR); -WINSETUPAPI BOOL WINAPI SetupRemoveInstallSectionFromDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,PVOID,UINT); -WINSETUPAPI BOOL WINAPI SetupRemoveInstallSectionFromDiskSpaceListW(HDSKSPC,HINF,HINF,PCWSTR,PVOID,UINT); -WINSETUPAPI BOOL WINAPI SetupRemoveSectionFromDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,UINT,PVOID,UINT); -WINSETUPAPI BOOL WINAPI SetupRemoveSectionFromDiskSpaceListW(HDSKSPC,HINF,HINF,PCWSTR,UINT,PVOID,UINT); -WINSETUPAPI UINT WINAPI SetupRenameErrorA(HWND,PCSTR,PCSTR,PCSTR,UINT,DWORD); -WINSETUPAPI UINT WINAPI SetupRenameErrorW(HWND,PCWSTR,PCWSTR,PCWSTR,UINT,DWORD); -WINSETUPAPI BOOL WINAPI SetupScanFileQueueA(HSPFILEQ,DWORD,HWND,PSP_FILE_CALLBACK_A,PVOID,PDWORD); -WINSETUPAPI BOOL WINAPI SetupScanFileQueueW(HSPFILEQ,DWORD,HWND,PSP_FILE_CALLBACK_W,PVOID,PDWORD); -WINSETUPAPI BOOL WINAPI SetupSetDirectoryIdA(HINF,DWORD,PCSTR); -WINSETUPAPI BOOL WINAPI SetupSetDirectoryIdW(HINF,DWORD,PCWSTR); -WINSETUPAPI BOOL WINAPI SetupSetDirectoryIdExA(HINF,DWORD,PCSTR,DWORD,DWORD,PVOID); -WINSETUPAPI BOOL WINAPI SetupSetDirectoryIdExW(HINF,DWORD,PCWSTR,DWORD,DWORD,PVOID); -WINSETUPAPI BOOL WINAPI SetupSetFileQueueAlternatePlatformA(HSPFILEQ,PSP_ALTPLATFORM_INFO,PCSTR); -WINSETUPAPI BOOL WINAPI SetupSetFileQueueAlternatePlatformW(HSPFILEQ,PSP_ALTPLATFORM_INFO,PCWSTR); -WINSETUPAPI BOOL WINAPI SetupSetNonInteractiveMode(BOOL); -WINSETUPAPI BOOL WINAPI SetupSetPlatformPathOverrideA(PCSTR); -WINSETUPAPI BOOL WINAPI SetupSetPlatformPathOverrideW(PCWSTR); -WINSETUPAPI BOOL WINAPI SetupSetSourceListA(DWORD,PCSTR*,UINT); -WINSETUPAPI BOOL WINAPI SetupSetSourceListW(DWORD,PCWSTR*,UINT); -WINSETUPAPI VOID WINAPI SetupTermDefaultQueueCallback(PVOID); -WINSETUPAPI BOOL WINAPI SetupTerminateFileLog(HSPFILELOG); + +WINSETUPAPI +BOOL +WINAPI +SetupQueryDrivesInDiskSpaceListA( + _In_ HDSKSPC DiskSpace, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupQueryDrivesInDiskSpaceListW( + _In_ HDSKSPC DiskSpace, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupQueryFileLogA( + _In_ HSPFILELOG FileLogHandle, + _In_opt_ PCSTR LogSectionName, + _In_ PCSTR TargetFilename, + _In_ SetupFileLogInfo DesiredInfo, + _Out_writes_opt_(ReturnBufferSize) PSTR DataOut, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupQueryFileLogW( + _In_ HSPFILELOG FileLogHandle, + _In_opt_ PCWSTR LogSectionName, + _In_ PCWSTR TargetFilename, + _In_ SetupFileLogInfo DesiredInfo, + _Out_writes_opt_(ReturnBufferSize) PWSTR DataOut, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupQueryInfFileInformationA( + _In_ PSP_INF_INFORMATION InfInformation, + _In_ UINT InfIndex, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupQueryInfFileInformationW( + _In_ PSP_INF_INFORMATION InfInformation, + _In_ UINT InfIndex, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupQueryInfOriginalFileInformationA( + _In_ PSP_INF_INFORMATION InfInformation, + _In_ UINT InfIndex, + _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo, + _Out_ PSP_ORIGINAL_FILE_INFO_A OriginalFileInfo); + +WINSETUPAPI +BOOL +WINAPI +SetupQueryInfOriginalFileInformationW( + _In_ PSP_INF_INFORMATION InfInformation, + _In_ UINT InfIndex, + _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo, + _Out_ PSP_ORIGINAL_FILE_INFO_W OriginalFileInfo); + +WINSETUPAPI +BOOL +WINAPI +SetupQueryInfVersionInformationA( + _In_ PSP_INF_INFORMATION InfInformation, + _In_ UINT InfIndex, + _In_opt_ PCSTR Key, + _Out_writes_opt_(ReturnBufferSize) PSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI +BOOL +WINAPI +SetupQueryInfVersionInformationW( + _In_ PSP_INF_INFORMATION InfInformation, + _In_ UINT InfIndex, + _In_opt_ PCWSTR Key, + _Out_writes_opt_(ReturnBufferSize) PWSTR ReturnBuffer, + _In_ DWORD ReturnBufferSize, + _Out_opt_ PDWORD RequiredSize); + +WINSETUPAPI BOOL WINAPI SetupQuerySpaceRequiredOnDriveA(_In_ HDSKSPC, _In_ PCSTR, _Out_ LONGLONG*, _Reserved_ PVOID, _Reserved_ UINT); +WINSETUPAPI BOOL WINAPI SetupQuerySpaceRequiredOnDriveW(_In_ HDSKSPC, _In_ PCWSTR, _Out_ LONGLONG*, _Reserved_ PVOID, _Reserved_ UINT); +WINSETUPAPI BOOL WINAPI SetupQueueCopyA(_In_ HSPFILEQ, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_ PCSTR, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_ PCSTR, _In_opt_ PCSTR, _In_ DWORD); +WINSETUPAPI BOOL WINAPI SetupQueueCopyW(_In_ HSPFILEQ, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_ PCWSTR, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_ PCWSTR, _In_opt_ PCWSTR, _In_ DWORD); +WINSETUPAPI BOOL WINAPI SetupQueueCopyIndirectA(_In_ PSP_FILE_COPY_PARAMS_A); +WINSETUPAPI BOOL WINAPI SetupQueueCopyIndirectW(_In_ PSP_FILE_COPY_PARAMS_W); +WINSETUPAPI BOOL WINAPI SetupQueueCopySectionA(_In_ HSPFILEQ, _In_opt_ PCSTR, _In_ HINF, _In_opt_ HINF, _In_ PCSTR, _In_ DWORD); +WINSETUPAPI BOOL WINAPI SetupQueueCopySectionW(_In_ HSPFILEQ, _In_opt_ PCWSTR, _In_ HINF, _In_opt_ HINF, _In_ PCWSTR, _In_ DWORD); +WINSETUPAPI BOOL WINAPI SetupQueueDefaultCopyA(_In_ HSPFILEQ, _In_ HINF, _In_opt_ PCSTR, _In_ PCSTR, _In_opt_ PCSTR, _In_ DWORD); +WINSETUPAPI BOOL WINAPI SetupQueueDefaultCopyW(_In_ HSPFILEQ, _In_ HINF, _In_opt_ PCWSTR, _In_ PCWSTR, _In_opt_ PCWSTR, _In_ DWORD); +WINSETUPAPI BOOL WINAPI SetupQueueDeleteA(_In_ HSPFILEQ, _In_ PCSTR, _In_opt_ PCSTR); +WINSETUPAPI BOOL WINAPI SetupQueueDeleteW(_In_ HSPFILEQ, _In_ PCWSTR, _In_opt_ PCWSTR); +WINSETUPAPI BOOL WINAPI SetupQueueDeleteSectionA(_In_ HSPFILEQ, _In_ HINF, _In_opt_ HINF, _In_ PCSTR); +WINSETUPAPI BOOL WINAPI SetupQueueDeleteSectionW(_In_ HSPFILEQ, _In_ HINF, _In_opt_ HINF, _In_ PCWSTR); +WINSETUPAPI BOOL WINAPI SetupQueueRenameA(_In_ HSPFILEQ, _In_ PCSTR, _In_opt_ PCSTR, _In_opt_ PCSTR, _In_ PCSTR); +WINSETUPAPI BOOL WINAPI SetupQueueRenameW(_In_ HSPFILEQ, _In_ PCWSTR, _In_opt_ PCWSTR, _In_opt_ PCWSTR, _In_ PCWSTR); +WINSETUPAPI BOOL WINAPI SetupQueueRenameSectionA(_In_ HSPFILEQ, _In_ HINF, _In_opt_ HINF, _In_ PCSTR); +WINSETUPAPI BOOL WINAPI SetupQueueRenameSectionW(_In_ HSPFILEQ, _In_ HINF, _In_opt_ HINF, _In_ PCWSTR); +WINSETUPAPI BOOL WINAPI SetupRemoveFileLogEntryA(_In_ HSPFILELOG, _In_opt_ PCSTR, _In_opt_ PCSTR); +WINSETUPAPI BOOL WINAPI SetupRemoveFileLogEntryW(_In_ HSPFILELOG, _In_opt_ PCWSTR, _In_opt_ PCWSTR); +WINSETUPAPI BOOL WINAPI SetupRemoveFromDiskSpaceListA(_In_ HDSKSPC, _In_ PCSTR, _In_ UINT, _Reserved_ PVOID, _Reserved_ UINT); +WINSETUPAPI BOOL WINAPI SetupRemoveFromDiskSpaceListW(_In_ HDSKSPC, _In_ PCWSTR, _In_ UINT, _Reserved_ PVOID, _Reserved_ UINT); +WINSETUPAPI BOOL WINAPI SetupRemoveFromSourceListA(_In_ DWORD, _In_ PCSTR); +WINSETUPAPI BOOL WINAPI SetupRemoveFromSourceListW(_In_ DWORD, _In_ PCWSTR); +WINSETUPAPI BOOL WINAPI SetupRemoveInstallSectionFromDiskSpaceListA(_In_ HDSKSPC, _In_ HINF, _In_opt_ HINF, _In_ PCSTR, _Reserved_ PVOID, _Reserved_ UINT); +WINSETUPAPI BOOL WINAPI SetupRemoveInstallSectionFromDiskSpaceListW(_In_ HDSKSPC, _In_ HINF, _In_opt_ HINF, _In_ PCWSTR, _Reserved_ PVOID, _Reserved_ UINT); +WINSETUPAPI BOOL WINAPI SetupRemoveSectionFromDiskSpaceListA(_In_ HDSKSPC, _In_ HINF, _In_opt_ HINF, _In_ PCSTR, _In_ UINT, _Reserved_ PVOID, _Reserved_ UINT); +WINSETUPAPI BOOL WINAPI SetupRemoveSectionFromDiskSpaceListW(_In_ HDSKSPC, _In_ HINF, _In_opt_ HINF, _In_ PCWSTR, _In_ UINT, _Reserved_ PVOID, _Reserved_ UINT); +WINSETUPAPI UINT WINAPI SetupRenameErrorA(_In_ HWND, _In_opt_ PCSTR, _In_ PCSTR, _In_ PCSTR, _In_ UINT, _In_ DWORD); +WINSETUPAPI UINT WINAPI SetupRenameErrorW(_In_ HWND, _In_opt_ PCWSTR, _In_ PCWSTR, _In_ PCWSTR, _In_ UINT, _In_ DWORD); +WINSETUPAPI BOOL WINAPI SetupScanFileQueueA(_In_ HSPFILEQ, _In_ DWORD, _In_opt_ HWND, _In_opt_ PSP_FILE_CALLBACK_A, _In_opt_ PVOID, _Out_ PDWORD); +WINSETUPAPI BOOL WINAPI SetupScanFileQueueW(_In_ HSPFILEQ, _In_ DWORD, _In_opt_ HWND, _In_opt_ PSP_FILE_CALLBACK_W, _In_opt_ PVOID, _Out_ PDWORD); +WINSETUPAPI BOOL WINAPI SetupSetDirectoryIdA(_In_ HINF, _In_ DWORD, _In_opt_ PCSTR); +WINSETUPAPI BOOL WINAPI SetupSetDirectoryIdW(_In_ HINF, _In_ DWORD, _In_opt_ PCWSTR); +WINSETUPAPI BOOL WINAPI SetupSetDirectoryIdExA(_In_ HINF, _In_ DWORD, _In_opt_ PCSTR, _In_ DWORD, _Reserved_ DWORD, _Reserved_ PVOID); +WINSETUPAPI BOOL WINAPI SetupSetDirectoryIdExW(_In_ HINF, _In_ DWORD, _In_opt_ PCWSTR, _In_ DWORD, _Reserved_ DWORD, _Reserved_ PVOID); +WINSETUPAPI BOOL WINAPI SetupSetFileQueueAlternatePlatformA(_In_ HSPFILEQ, _In_opt_ PSP_ALTPLATFORM_INFO, _In_opt_ PCSTR); +WINSETUPAPI BOOL WINAPI SetupSetFileQueueAlternatePlatformW(_In_ HSPFILEQ, _In_opt_ PSP_ALTPLATFORM_INFO, _In_opt_ PCWSTR); +WINSETUPAPI BOOL WINAPI SetupSetNonInteractiveMode(_In_ BOOL); +WINSETUPAPI BOOL WINAPI SetupSetPlatformPathOverrideA(_In_opt_ PCSTR); +WINSETUPAPI BOOL WINAPI SetupSetPlatformPathOverrideW(_In_opt_ PCWSTR); + +WINSETUPAPI +BOOL +WINAPI +SetupSetSourceListA( + _In_ DWORD Flags, + _In_reads_(SourceCount) PCSTR *SourceList, + _In_ UINT SourceCount); + +WINSETUPAPI +BOOL +WINAPI +SetupSetSourceListW( + _In_ DWORD Flags, + _In_reads_(SourceCount) PCWSTR *SourceList, + _In_ UINT SourceCount); + +WINSETUPAPI VOID WINAPI SetupTermDefaultQueueCallback(_In_ PVOID); +WINSETUPAPI BOOL WINAPI SetupTerminateFileLog(_In_ HSPFILELOG); WINSETUPAPI DWORD WINAPI StampFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR); diff --git a/include/psdk/winddi.h b/include/psdk/winddi.h index 27f8a029ef3..85b5278d095 100644 --- a/include/psdk/winddi.h +++ b/include/psdk/winddi.h @@ -41,8 +41,10 @@ extern "C" { #define DECLSPEC_IMPORT __attribute__((dllimport)) #endif -#ifndef WIN32KAPI -#define WIN32KAPI DECLSPEC_ADDRSAFE +#if defined(_ENGINE_EXPORT_) +#define ENGAPI +#else +#define ENGAPI DECLSPEC_IMPORT #endif #define DDI_DRIVER_VERSION_NT4 0x00020000 @@ -1157,33 +1159,33 @@ typedef VOID (APIENTRY CALLBACK *WNDOBJCHANGEPROC)( _In_ FLONG fl); -WIN32KAPI +ENGAPI HANDLE APIENTRY BRUSHOBJ_hGetColorTransform( _In_ BRUSHOBJ *pbo); _Ret_opt_bytecount_(cj) -WIN32KAPI +ENGAPI PVOID APIENTRY BRUSHOBJ_pvAllocRbrush( _In_ BRUSHOBJ *pbo, _In_ ULONG cj); -WIN32KAPI +ENGAPI PVOID APIENTRY BRUSHOBJ_pvGetRbrush( _In_ BRUSHOBJ *pbo); -WIN32KAPI +ENGAPI ULONG APIENTRY BRUSHOBJ_ulGetBrushColor( _In_ BRUSHOBJ *pbo); -WIN32KAPI +ENGAPI BOOL APIENTRY CLIPOBJ_bEnum( @@ -1203,7 +1205,7 @@ CLIPOBJ_bEnum( #define CD_LEFTUP 0x00000003 #define CD_ANY 0x00000004 -WIN32KAPI +ENGAPI ULONG APIENTRY CLIPOBJ_cEnumStart( @@ -1213,21 +1215,21 @@ CLIPOBJ_cEnumStart( _In_ ULONG iDirection, _In_ ULONG cLimit); -WIN32KAPI +ENGAPI PATHOBJ* APIENTRY CLIPOBJ_ppoGetPath( _In_ CLIPOBJ *pco); #if (NTDDI_VERSION >= NTDDI_VISTA) -WIN32KAPI +ENGAPI HANDLE APIENTRY CLIPOBJ_GetRgn( _In_ CLIPOBJ* pco); #endif -WIN32KAPI +ENGAPI VOID APIENTRY EngAcquireSemaphore( @@ -1247,7 +1249,7 @@ EngAcquireSemaphore( _Must_inspect_result_ _When_(fl & FL_ZERO_MEMORY, _Ret_opt_bytecount_(cjMemSize)) _When_(!(fl & FL_ZERO_MEMORY), _Ret_opt_bytecap_(cjMemSize)) -WIN32KAPI +ENGAPI PVOID APIENTRY EngAllocMem( @@ -1257,7 +1259,7 @@ EngAllocMem( _Must_inspect_result_ _Ret_opt_bytecount_(cjMemSize) -WIN32KAPI +ENGAPI PVOID APIENTRY EngAllocPrivateUserMem( @@ -1267,7 +1269,7 @@ EngAllocPrivateUserMem( _Must_inspect_result_ _Ret_opt_bytecount_(cjMemSize) -WIN32KAPI +ENGAPI PVOID APIENTRY EngAllocUserMem( @@ -1276,7 +1278,7 @@ EngAllocUserMem( #endif /* USERMODE_DRIVER */ -WIN32KAPI +ENGAPI BOOL APIENTRY EngAlphaBlend( @@ -1312,7 +1314,7 @@ EngAlphaBlend( #define HOOK_FLAGS 0x0003b5ff #endif -WIN32KAPI +ENGAPI BOOL APIENTRY EngAssociateSurface( @@ -1320,11 +1322,11 @@ EngAssociateSurface( _In_ HDEV hdev, _In_ FLONG flHooks); -WIN32KAPI +ENGAPI BOOL APIENTRY EngBitBlt( - _In_ SURFOBJ *psoTrg, + _Inout_ SURFOBJ *psoTrg, _In_opt_ SURFOBJ *psoSrc, _In_opt_ SURFOBJ *psoMask, _In_opt_ CLIPOBJ *pco, @@ -1336,19 +1338,19 @@ EngBitBlt( _In_opt_ POINTL *pptlBrush, _In_ ROP4 rop4); -WIN32KAPI +ENGAPI BOOL APIENTRY EngCheckAbort( _In_ SURFOBJ *pso); -WIN32KAPI +ENGAPI VOID APIENTRY EngClearEvent( _In_ PEVENT pEvent); -WIN32KAPI +ENGAPI FD_GLYPHSET* APIENTRY EngComputeGlyphSet( @@ -1360,14 +1362,14 @@ EngComputeGlyphSet( #define ECS_TEARDOWN 0x00000001 #define ECS_REDRAW 0x00000002 -WIN32KAPI +ENGAPI BOOL APIENTRY EngControlSprites( _Inout_ WNDOBJ *pwo, _In_ FLONG fl); -WIN32KAPI +ENGAPI BOOL APIENTRY EngCopyBits( @@ -1378,7 +1380,7 @@ EngCopyBits( _In_ RECTL *prclDest, _In_ POINTL *pptlSrc); -WIN32KAPI +ENGAPI HBITMAP APIENTRY EngCreateBitmap( @@ -1388,13 +1390,13 @@ EngCreateBitmap( _In_ FLONG fl, _In_opt_ PVOID pvBits); -WIN32KAPI +ENGAPI CLIPOBJ* APIENTRY EngCreateClip(VOID); _Must_inspect_result_ -WIN32KAPI +ENGAPI HBITMAP APIENTRY EngCreateDeviceBitmap( @@ -1403,7 +1405,7 @@ EngCreateDeviceBitmap( _In_ ULONG iFormatCompat); _Must_inspect_result_ -WIN32KAPI +ENGAPI HSURF APIENTRY EngCreateDeviceSurface( @@ -1412,7 +1414,7 @@ EngCreateDeviceSurface( _In_ ULONG iFormatCompat); _Must_inspect_result_ -WIN32KAPI +ENGAPI HDRVOBJ APIENTRY EngCreateDriverObj( @@ -1422,11 +1424,11 @@ EngCreateDriverObj( _Must_inspect_result_ _Success_(return != FALSE) -WIN32KAPI +ENGAPI BOOL APIENTRY EngCreateEvent( - _When_(return != FALSE, _Outptr_) PEVENT *ppEvent); + _Outptr_ PEVENT *ppEvent); /* EngCreatePalette.iMode constants */ #define PAL_INDEXED 0x00000001 @@ -1436,7 +1438,7 @@ EngCreateEvent( #define PAL_CMYK 0x00000010 _Must_inspect_result_ -WIN32KAPI +ENGAPI HPALETTE APIENTRY EngCreatePalette( @@ -1447,12 +1449,12 @@ EngCreatePalette( _In_ FLONG flGreen, _In_ FLONG flBlue); -WIN32KAPI +ENGAPI PATHOBJ* APIENTRY EngCreatePath(VOID); -WIN32KAPI +ENGAPI HSEMAPHORE APIENTRY EngCreateSemaphore(VOID); @@ -1472,7 +1474,7 @@ EngCreateSemaphore(VOID); #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ _Must_inspect_result_ -WIN32KAPI +ENGAPI WNDOBJ* APIENTRY EngCreateWnd( @@ -1483,12 +1485,12 @@ EngCreateWnd( _In_ INT iPixelFormat); _Analysis_noreturn_ -WIN32KAPI +ENGAPI VOID APIENTRY EngDebugBreak(VOID); -WIN32KAPI +ENGAPI VOID APIENTRY EngDebugPrint( @@ -1496,13 +1498,13 @@ EngDebugPrint( _In_z_ PCHAR DebugMessage, _In_ va_list ap); -WIN32KAPI +ENGAPI VOID APIENTRY EngDeleteClip( _In_ _Post_ptr_invalid_ CLIPOBJ *pco); -WIN32KAPI +ENGAPI BOOL APIENTRY EngDeleteDriverObj( @@ -1510,56 +1512,56 @@ EngDeleteDriverObj( _In_ BOOL bCallBack, _In_ BOOL bLocked); -WIN32KAPI +ENGAPI BOOL APIENTRY EngDeleteEvent( _In_ _Post_ptr_invalid_ PEVENT pEvent); -WIN32KAPI +ENGAPI BOOL APIENTRY EngDeleteFile( _In_ LPWSTR pwszFileName); -WIN32KAPI +ENGAPI BOOL APIENTRY EngDeletePalette( _In_ _Post_ptr_invalid_ HPALETTE hpal); -WIN32KAPI +ENGAPI VOID APIENTRY EngDeletePath( _In_ _Post_ptr_invalid_ PATHOBJ *ppo); -WIN32KAPI +ENGAPI VOID APIENTRY EngDeleteSafeSemaphore( _Inout_ ENGSAFESEMAPHORE *pssem); -WIN32KAPI +ENGAPI VOID APIENTRY EngDeleteSemaphore( _In_ _Post_ptr_invalid_ HSEMAPHORE hsem); -WIN32KAPI +ENGAPI BOOL APIENTRY EngDeleteSurface( _In_ _Post_ptr_invalid_ HSURF hsurf); -WIN32KAPI +ENGAPI VOID APIENTRY EngDeleteWnd( _In_ _Post_ptr_invalid_ WNDOBJ *pwo); _Success_(return==0) -WIN32KAPI +ENGAPI DWORD APIENTRY EngDeviceIoControl( @@ -1574,7 +1576,7 @@ EngDeviceIoControl( #define DM_DEFAULT 0x00000001 #define DM_MONOCHROME 0x00000002 -WIN32KAPI +ENGAPI ULONG APIENTRY EngDitherColor( @@ -1585,7 +1587,7 @@ EngDitherColor( _When_(iMode == DM_MONOCHROME, _Out_writes_bytes_(8)) ULONG *pul); -WIN32KAPI +ENGAPI BOOL APIENTRY EngEnumForms( @@ -1596,7 +1598,7 @@ EngEnumForms( _Out_ LPDWORD pcbNeeded, _Out_ LPDWORD pcReturned); -WIN32KAPI +ENGAPI BOOL APIENTRY EngEraseSurface( @@ -1604,7 +1606,7 @@ EngEraseSurface( _In_ RECTL *prcl, _In_ ULONG iColor); -WIN32KAPI +ENGAPI BOOL APIENTRY EngFillPath( @@ -1616,14 +1618,14 @@ EngFillPath( _In_ MIX mix, _In_ FLONG flOptions); -WIN32KAPI +ENGAPI PVOID APIENTRY EngFindImageProcAddress( _In_ HANDLE hModule, _In_ LPSTR lpProcName); -WIN32KAPI +ENGAPI PVOID APIENTRY EngFindResource( @@ -1634,7 +1636,7 @@ EngFindResource( _Must_inspect_result_ _Ret_opt_bytecap_(cjSize) -WIN32KAPI +ENGAPI PVOID APIENTRY EngFntCacheAlloc( @@ -1645,14 +1647,14 @@ EngFntCacheAlloc( #define ENG_FNT_CACHE_READ_FAULT 0x00000001 #define ENG_FNT_CACHE_WRITE_FAULT 0x00000002 -WIN32KAPI +ENGAPI VOID APIENTRY EngFntCacheFault( _In_ ULONG ulFastCheckSum, _In_ ULONG iFaultMode); -WIN32KAPI +ENGAPI PVOID APIENTRY EngFntCacheLookUp( @@ -1667,20 +1669,20 @@ EngFntCacheLookUp( #else /* !USERMODE_DRIVER */ -WIN32KAPI +ENGAPI VOID APIENTRY EngFreeMem( _In_ _Post_ptr_invalid_ PVOID pv); -WIN32KAPI +ENGAPI VOID APIENTRY EngFreePrivateUserMem( _In_ PDD_SURFACE_LOCAL psl, _In_ _Post_ptr_invalid_ PVOID pv); -WIN32KAPI +ENGAPI VOID APIENTRY EngFreeUserMem( @@ -1688,52 +1690,52 @@ EngFreeUserMem( #endif /* !USERMODE_DRIVER */ -WIN32KAPI +ENGAPI VOID APIENTRY EngFreeModule( _In_ HANDLE h); -WIN32KAPI +ENGAPI VOID APIENTRY EngGetCurrentCodePage( _Out_ PUSHORT OemCodePage, _Out_ PUSHORT AnsiCodePage); -WIN32KAPI +ENGAPI HANDLE APIENTRY EngGetCurrentProcessId(VOID); -WIN32KAPI +ENGAPI HANDLE APIENTRY EngGetCurrentThreadId(VOID); _Must_inspect_result_ _Ret_z_ -WIN32KAPI +ENGAPI LPWSTR APIENTRY EngGetDriverName( _In_ HDEV hdev); -WIN32KAPI +ENGAPI BOOL APIENTRY EngGetFileChangeTime( _In_ HANDLE h, _Out_ LARGE_INTEGER *pChangeTime); -WIN32KAPI +ENGAPI BOOL APIENTRY EngGetFilePath( _In_ HANDLE h, _Out_ WCHAR (*pDest)[MAX_PATH+1]); -WIN32KAPI +ENGAPI BOOL APIENTRY EngGetForm( @@ -1747,13 +1749,13 @@ EngGetForm( #ifdef USERMODE_DRIVER #define EngGetLastError GetLastError #else -WIN32KAPI +ENGAPI ULONG APIENTRY EngGetLastError(VOID); #endif -WIN32KAPI +ENGAPI BOOL APIENTRY EngGetPrinter( @@ -1763,7 +1765,7 @@ EngGetPrinter( _In_ DWORD cbBuf, _Out_ LPDWORD pcbNeeded); -WIN32KAPI +ENGAPI DWORD APIENTRY EngGetPrinterData( @@ -1774,13 +1776,13 @@ EngGetPrinterData( _In_ DWORD cjSize, _Out_ LPDWORD pcjNeeded); -WIN32KAPI +ENGAPI LPWSTR APIENTRY EngGetPrinterDataFileName( _In_ HDEV hdev); -WIN32KAPI +ENGAPI BOOL APIENTRY EngGetPrinterDriver( @@ -1791,12 +1793,12 @@ EngGetPrinterDriver( _In_ DWORD cjBufSize, _Out_ DWORD *pcjNeeded); -WIN32KAPI +ENGAPI HANDLE APIENTRY EngGetProcessHandle(VOID); -WIN32KAPI +ENGAPI BOOL APIENTRY EngGetType1FontList( @@ -1807,7 +1809,7 @@ EngGetType1FontList( _Out_ PULONG pulRemoteFonts, _Out_ LARGE_INTEGER *pLastModified); -WIN32KAPI +ENGAPI BOOL APIENTRY EngGradientFill( @@ -1826,32 +1828,32 @@ EngGradientFill( #define EHN_RESTORED 0x00000000 #define EHN_ERROR 0x00000001 -WIN32KAPI +ENGAPI ULONG APIENTRY EngHangNotification( _In_ HDEV hDev, _Reserved_ PVOID Reserved); -WIN32KAPI +ENGAPI BOOL APIENTRY EngInitializeSafeSemaphore( _Out_ ENGSAFESEMAPHORE *pssem); -WIN32KAPI +ENGAPI BOOL APIENTRY EngIsSemaphoreOwned( _In_ HSEMAPHORE hsem); -WIN32KAPI +ENGAPI BOOL APIENTRY EngIsSemaphoreOwnedByCurrentThread( _In_ HSEMAPHORE hsem); -WIN32KAPI +ENGAPI BOOL APIENTRY EngLineTo( @@ -1865,49 +1867,49 @@ EngLineTo( _In_opt_ RECTL *prclBounds, _In_ MIX mix); -WIN32KAPI +ENGAPI HANDLE APIENTRY EngLoadImage( _In_ LPWSTR pwszDriver); -WIN32KAPI +ENGAPI HANDLE APIENTRY EngLoadModule( _In_ LPWSTR pwsz); -WIN32KAPI +ENGAPI HANDLE APIENTRY EngLoadModuleForWrite( _In_ LPWSTR pwsz, _In_ ULONG cjSizeOfModule); -WIN32KAPI +ENGAPI PDD_SURFACE_LOCAL APIENTRY EngLockDirectDrawSurface( _In_ HANDLE hSurface); -WIN32KAPI +ENGAPI DRIVEROBJ* APIENTRY EngLockDriverObj( _In_ HDRVOBJ hdo); -WIN32KAPI +ENGAPI SURFOBJ* APIENTRY EngLockSurface( _In_ HSURF hsurf); -WIN32KAPI +ENGAPI BOOL APIENTRY EngLpkInstalled(VOID); -WIN32KAPI +ENGAPI PEVENT APIENTRY EngMapEvent( @@ -1919,7 +1921,7 @@ EngMapEvent( _Success_(return != 0) _When_(cjSize != 0, _At_(return, _Out_writes_bytes_(cjSize))) -WIN32KAPI +ENGAPI PVOID APIENTRY EngMapFile( @@ -1927,7 +1929,7 @@ EngMapFile( _In_ ULONG cjSize, _Out_ ULONG_PTR *piFile); -WIN32KAPI +ENGAPI BOOL APIENTRY EngMapFontFile( @@ -1935,7 +1937,7 @@ EngMapFontFile( _Outptr_result_bytebuffer_(*pcjBuf) PULONG *ppjBuf, _Out_ ULONG *pcjBuf); -WIN32KAPI +ENGAPI BOOL APIENTRY EngMapFontFileFD( @@ -1943,14 +1945,14 @@ EngMapFontFileFD( _Outptr_result_bytebuffer_(*pcjBuf) PULONG *ppjBuf, _Out_ ULONG *pcjBuf); -WIN32KAPI +ENGAPI PVOID APIENTRY EngMapModule( _In_ HANDLE h, _Out_ PULONG pSize); -WIN32KAPI +ENGAPI BOOL APIENTRY EngMarkBandingSurface( @@ -1960,7 +1962,7 @@ EngMarkBandingSurface( #define MS_NOTSYSTEMMEMORY 0x00000001 #define MS_SHAREDACCESS 0x00000002 -WIN32KAPI +ENGAPI BOOL APIENTRY EngModifySurface( @@ -1973,7 +1975,7 @@ EngModifySurface( _In_ LONG lDelta, _Reserved_ PVOID pvReserved); -WIN32KAPI +ENGAPI VOID APIENTRY EngMovePointer( @@ -1985,7 +1987,7 @@ EngMovePointer( #ifdef USERMODE_DRIVER #define EngMulDiv MulDiv #else /* !USERMODE_DRIVER */ -WIN32KAPI +ENGAPI INT APIENTRY EngMulDiv( @@ -1994,7 +1996,7 @@ EngMulDiv( _In_ INT c); #endif /* !USERMODE_DRIVER */ -WIN32KAPI +ENGAPI VOID APIENTRY EngMultiByteToUnicodeN( @@ -2004,7 +2006,7 @@ EngMultiByteToUnicodeN( _In_reads_bytes_(BytesInMultiByteString) PCHAR MultiByteString, _In_ ULONG BytesInMultiByteString); -WIN32KAPI +ENGAPI INT APIENTRY EngMultiByteToWideChar( @@ -2014,7 +2016,7 @@ EngMultiByteToWideChar( _In_reads_bytes_opt_(cjMultiByteString) LPSTR MultiByteString, _In_ INT cjMultiByteString); -WIN32KAPI +ENGAPI BOOL APIENTRY EngPaint( @@ -2024,7 +2026,7 @@ EngPaint( _In_ POINTL *pptlBrushOrg, _In_ MIX mix); -WIN32KAPI +ENGAPI BOOL APIENTRY EngPlgBlt( @@ -2040,7 +2042,7 @@ EngPlgBlt( _When_(psoMsk, _In_) POINTL *pptl, _In_ ULONG iMode); -WIN32KAPI +ENGAPI VOID APIENTRY EngProbeForRead( @@ -2052,7 +2054,7 @@ EngProbeForRead( #endif _In_ ULONG Alignment); -WIN32KAPI +ENGAPI VOID APIENTRY EngProbeForReadAndWrite( @@ -2069,7 +2071,7 @@ typedef enum _ENG_DEVICE_ATTRIBUTE { QDA_ACCELERATION_LEVEL } ENG_DEVICE_ATTRIBUTE; -WIN32KAPI +ENGAPI BOOL APIENTRY EngQueryDeviceAttribute( @@ -2080,19 +2082,19 @@ EngQueryDeviceAttribute( _Out_writes_bytes_(cjOutSize) PVOID pvOut, _In_ ULONG cjOutSize); -WIN32KAPI +ENGAPI LARGE_INTEGER APIENTRY EngQueryFileTimeStamp( _In_ LPWSTR pwsz); -WIN32KAPI +ENGAPI VOID APIENTRY EngQueryLocalTime( _Out_ PENG_TIME_FIELDS ptf); -WIN32KAPI +ENGAPI ULONG APIENTRY EngQueryPalette( @@ -2101,13 +2103,13 @@ EngQueryPalette( _In_ ULONG cColors, _Out_writes_opt_(cColors) ULONG *pulColors); -WIN32KAPI +ENGAPI VOID APIENTRY EngQueryPerformanceCounter( _Out_ LONGLONG *pPerformanceCount); -WIN32KAPI +ENGAPI VOID APIENTRY EngQueryPerformanceFrequency( @@ -2124,46 +2126,61 @@ typedef enum _ENG_SYSTEM_ATTRIBUTE { #define QSA_SSE 0x00002000 #define QSA_3DNOW 0x00004000 -WIN32KAPI +_Check_return_ +_Success_(return) +ENGAPI BOOL APIENTRY EngQuerySystemAttribute( _In_ ENG_SYSTEM_ATTRIBUTE CapNum, - _When_(return != FALSE, _Out_) PDWORD pCapability); + _Out_ PDWORD pCapability); -WIN32KAPI +ENGAPI LONG APIENTRY EngReadStateEvent( _In_ PEVENT pEvent); -WIN32KAPI +ENGAPI VOID APIENTRY EngReleaseSemaphore( _In_ HSEMAPHORE hsem); -WIN32KAPI +_Check_return_ +_Success_(return) +_Kernel_float_restored_ +_At_(*pBuffer, _Kernel_requires_resource_held_(EngFloatState) + _Kernel_releases_resource_(EngFloatState)) +ENGAPI BOOL APIENTRY EngRestoreFloatingPointState( - _In_ VOID *pBuffer); + _In_reads_(_Inexpressible_(statesize)) + PVOID pBuffer); -WIN32KAPI +_Check_return_ +_Success_(((pBuffer != NULL && cjBufferSize != 0) && return == 1) || + ((pBuffer == NULL || cjBufferSize == 0) && return > 0)) +_When_(pBuffer != NULL && cjBufferSize != 0 && return == 1, _Kernel_float_saved_ + _At_(*pBuffer, _Post_valid_ _Kernel_acquires_resource_(EngFloatState))) +_On_failure_(_Post_satisfies_(return == 0)) +ENGAPI ULONG APIENTRY EngSaveFloatingPointState( - _Inout_ VOID *pBuffer, - _In_ ULONG cjBufferSize); + _At_(*pBuffer, _Kernel_requires_resource_not_held_(EngFloatState)) + _Out_writes_bytes_opt_(cjBufferSize) PVOID pBuffer, + _Inout_ ULONG cjBufferSize); -WIN32KAPI +ENGAPI HANDLE APIENTRY EngSecureMem( _In_reads_bytes_(cjLength) PVOID Address, _In_ ULONG cjLength); -WIN32KAPI +ENGAPI LONG APIENTRY EngSetEvent( @@ -2172,14 +2189,14 @@ EngSetEvent( #ifdef USERMODE_DRIVER #define EngSetLastError SetLastError #else -WIN32KAPI +ENGAPI VOID APIENTRY EngSetLastError( _In_ ULONG iError); #endif -WIN32KAPI +ENGAPI ULONG APIENTRY EngSetPointerShape( @@ -2194,7 +2211,7 @@ EngSetPointerShape( _In_ RECTL *prcl, _In_ FLONG fl); -WIN32KAPI +ENGAPI BOOL APIENTRY EngSetPointerTag( @@ -2204,7 +2221,7 @@ EngSetPointerTag( _Reserved_ XLATEOBJ *pxlo, _In_ FLONG fl); -WIN32KAPI +ENGAPI DWORD APIENTRY EngSetPrinterData( @@ -2216,7 +2233,7 @@ EngSetPrinterData( typedef int (CDECL *SORTCOMP)(const void *pv1, const void *pv2); -WIN32KAPI +ENGAPI VOID APIENTRY EngSort( @@ -2225,7 +2242,7 @@ EngSort( _In_ ULONG cjElem, _In_ SORTCOMP pfnComp); -WIN32KAPI +ENGAPI BOOL APIENTRY EngStretchBlt( @@ -2241,7 +2258,7 @@ EngStretchBlt( _When_(psoMask, _In_) POINTL *pptlMask, _In_ ULONG iMode); -WIN32KAPI +ENGAPI BOOL APIENTRY EngStretchBltROP( @@ -2259,7 +2276,7 @@ EngStretchBltROP( _In_opt_ BRUSHOBJ *pbo, _In_ DWORD rop4); -WIN32KAPI +ENGAPI BOOL APIENTRY EngStrokeAndFillPath( @@ -2274,7 +2291,7 @@ EngStrokeAndFillPath( _In_ MIX mixFill, _In_ FLONG flOptions); -WIN32KAPI +ENGAPI BOOL APIENTRY EngStrokePath( @@ -2287,7 +2304,7 @@ EngStrokePath( _In_ LINEATTRS *plineattrs, _In_ MIX mix); -WIN32KAPI +ENGAPI BOOL APIENTRY EngTextOut( @@ -2302,7 +2319,7 @@ EngTextOut( _In_ POINTL *pptlOrg, _In_ MIX mix); -WIN32KAPI +ENGAPI BOOL APIENTRY EngTransparentBlt( @@ -2315,7 +2332,7 @@ EngTransparentBlt( _In_ ULONG iTransColor, _In_ ULONG ulReserved); -WIN32KAPI +ENGAPI VOID APIENTRY EngUnicodeToMultiByteN( @@ -2325,68 +2342,68 @@ EngUnicodeToMultiByteN( _In_reads_bytes_(cjUnicodeString) PWSTR pwszUnicodeString, _In_ ULONG cjUnicodeString); -WIN32KAPI +ENGAPI VOID APIENTRY EngUnloadImage( _In_ HANDLE hModule); -WIN32KAPI +ENGAPI BOOL APIENTRY EngUnlockDirectDrawSurface( _In_ PDD_SURFACE_LOCAL pSurface); -WIN32KAPI +ENGAPI BOOL APIENTRY EngUnlockDriverObj( _In_ _Post_ptr_invalid_ HDRVOBJ hdo); -WIN32KAPI +ENGAPI VOID APIENTRY EngUnlockSurface( _In_ _Post_ptr_invalid_ SURFOBJ *pso); -WIN32KAPI +ENGAPI BOOL APIENTRY EngUnmapEvent( _In_ PEVENT pEvent); -WIN32KAPI +ENGAPI BOOL APIENTRY EngUnmapFile( _In_ ULONG_PTR iFile); -WIN32KAPI +ENGAPI VOID APIENTRY EngUnmapFontFile( _In_ ULONG_PTR iFile); -WIN32KAPI +ENGAPI VOID APIENTRY EngUnmapFontFileFD( _In_ ULONG_PTR iFile); -WIN32KAPI +ENGAPI VOID APIENTRY EngUnsecureMem( _In_ HANDLE hSecure); -WIN32KAPI +ENGAPI BOOL APIENTRY EngWaitForSingleObject( _In_ PEVENT pEvent, _In_opt_ PLARGE_INTEGER pTimeOut); -WIN32KAPI +ENGAPI INT APIENTRY EngWideCharToMultiByte( @@ -2396,7 +2413,7 @@ EngWideCharToMultiByte( _Out_z_bytecap_(cjMultiByteString) LPSTR pszMultiByteString, _In_ INT cjMultiByteString); -WIN32KAPI +ENGAPI BOOL APIENTRY EngWritePrinter( @@ -2406,158 +2423,158 @@ EngWritePrinter( _Out_ LPDWORD pcWritten); #if defined(_X86_) && !defined(USERMODE_DRIVER) -WIN32KAPI +ENGAPI VOID APIENTRY FLOATOBJ_Add( _Inout_ PFLOATOBJ pf, _In_ PFLOATOBJ pf1); -WIN32KAPI +ENGAPI VOID APIENTRY FLOATOBJ_AddFloat( _Inout_ PFLOATOBJ pf, _In_ FLOATL f); -WIN32KAPI +ENGAPI VOID APIENTRY FLOATOBJ_AddLong( _Inout_ PFLOATOBJ pf, _In_ LONG l); -WIN32KAPI +ENGAPI VOID APIENTRY FLOATOBJ_Div( _Inout_ PFLOATOBJ pf, _In_ PFLOATOBJ pf1); -WIN32KAPI +ENGAPI VOID APIENTRY FLOATOBJ_DivFloat( _Inout_ PFLOATOBJ pf, _In_ FLOATL f); -WIN32KAPI +ENGAPI VOID APIENTRY FLOATOBJ_DivLong( _Inout_ PFLOATOBJ pf, _In_ LONG l); -WIN32KAPI +ENGAPI BOOL APIENTRY FLOATOBJ_Equal( _In_ PFLOATOBJ pf, _In_ PFLOATOBJ pf1); -WIN32KAPI +ENGAPI BOOL APIENTRY FLOATOBJ_EqualLong( _In_ PFLOATOBJ pf, _In_ LONG l); -WIN32KAPI +ENGAPI LONG APIENTRY FLOATOBJ_GetFloat( _In_ PFLOATOBJ pf); -WIN32KAPI +ENGAPI LONG APIENTRY FLOATOBJ_GetLong( _In_ PFLOATOBJ pf); -WIN32KAPI +ENGAPI BOOL APIENTRY FLOATOBJ_GreaterThan( _In_ PFLOATOBJ pf, _In_ PFLOATOBJ pf1); -WIN32KAPI +ENGAPI BOOL APIENTRY FLOATOBJ_GreaterThanLong( _In_ PFLOATOBJ pf, _In_ LONG l); -WIN32KAPI +ENGAPI BOOL APIENTRY FLOATOBJ_LessThan( _In_ PFLOATOBJ pf, _In_ PFLOATOBJ pf1); -WIN32KAPI +ENGAPI BOOL APIENTRY FLOATOBJ_LessThanLong( _In_ PFLOATOBJ pf, _In_ LONG l); -WIN32KAPI +ENGAPI VOID APIENTRY FLOATOBJ_Mul( _Inout_ PFLOATOBJ pf, _In_ PFLOATOBJ pf1); -WIN32KAPI +ENGAPI VOID APIENTRY FLOATOBJ_MulFloat( _Inout_ PFLOATOBJ pf, _In_ FLOATL f); -WIN32KAPI +ENGAPI VOID APIENTRY FLOATOBJ_MulLong( _Inout_ PFLOATOBJ pf, _In_ LONG l); -WIN32KAPI +ENGAPI VOID APIENTRY FLOATOBJ_Neg( _Inout_ PFLOATOBJ pf); -WIN32KAPI +ENGAPI VOID APIENTRY FLOATOBJ_SetFloat( _Out_ PFLOATOBJ pf, _In_ FLOATL f); -WIN32KAPI +ENGAPI VOID APIENTRY FLOATOBJ_SetLong( _Out_ PFLOATOBJ pf, _In_ LONG l); -WIN32KAPI +ENGAPI VOID APIENTRY FLOATOBJ_Sub( _Inout_ PFLOATOBJ pf, _In_ PFLOATOBJ pf1); -WIN32KAPI +ENGAPI VOID APIENTRY FLOATOBJ_SubFloat( _Inout_ PFLOATOBJ pf, _In_ FLOATL f); -WIN32KAPI +ENGAPI VOID APIENTRY FLOATOBJ_SubLong( @@ -2592,14 +2609,14 @@ FLOATOBJ_SubLong( #endif -WIN32KAPI +ENGAPI ULONG APIENTRY FONTOBJ_cGetAllGlyphHandles( _In_ FONTOBJ *pfo, _Out_opt_ HGLYPH *phg); -WIN32KAPI +ENGAPI ULONG APIENTRY FONTOBJ_cGetGlyphs( @@ -2609,20 +2626,20 @@ FONTOBJ_cGetGlyphs( _In_count_(cGlyph) HGLYPH *phg, _Out_ PVOID *ppvGlyph); -WIN32KAPI +ENGAPI FD_GLYPHSET* APIENTRY FONTOBJ_pfdg( _In_ FONTOBJ *pfo); -WIN32KAPI +ENGAPI IFIMETRICS* APIENTRY FONTOBJ_pifi( _In_ FONTOBJ *pfo); _Ret_opt_bytecount_(*pcjTable) -WIN32KAPI +ENGAPI PBYTE APIENTRY FONTOBJ_pjOpenTypeTablePointer( @@ -2630,7 +2647,7 @@ FONTOBJ_pjOpenTypeTablePointer( _In_ ULONG ulTag, _Out_ ULONG *pcjTable); -WIN32KAPI +ENGAPI PFD_GLYPHATTR APIENTRY FONTOBJ_pQueryGlyphAttrs( @@ -2638,27 +2655,27 @@ FONTOBJ_pQueryGlyphAttrs( _In_ ULONG iMode); _Ret_opt_bytecount_(*pcjFile) -WIN32KAPI +ENGAPI PVOID APIENTRY FONTOBJ_pvTrueTypeFontFile( _In_ FONTOBJ *pfo, _Out_ ULONG *pcjFile); -WIN32KAPI +ENGAPI LPWSTR APIENTRY FONTOBJ_pwszFontFilePaths( _In_ FONTOBJ *pfo, _Out_ ULONG *pcwc); -WIN32KAPI +ENGAPI XFORMOBJ* APIENTRY FONTOBJ_pxoGetXform( _In_ FONTOBJ *pfo); -WIN32KAPI +ENGAPI VOID APIENTRY FONTOBJ_vGetInfo( @@ -2673,7 +2690,7 @@ FONTOBJ_pGetGammaTables( _In_ FONTOBJ *pfo); #endif -WIN32KAPI +ENGAPI LONG APIENTRY HT_ComputeRGBGammaTable( @@ -2684,7 +2701,7 @@ HT_ComputeRGBGammaTable( _In_ USHORT BlueGamma, _Out_writes_bytes_(GammaTableEntries * 3) LPBYTE pGammaTable); -WIN32KAPI +ENGAPI LONG APIENTRY HT_Get8BPPFormatPalette( @@ -2693,7 +2710,7 @@ HT_Get8BPPFormatPalette( _In_ USHORT GreenGamma, _In_ USHORT BlueGamma); -WIN32KAPI +ENGAPI LONG APIENTRY HT_Get8BPPMaskPalette( @@ -2704,14 +2721,14 @@ HT_Get8BPPMaskPalette( _In_ USHORT GreenGamma, _In_ USHORT BlueGamma); -WIN32KAPI +ENGAPI LONG APIENTRY HTUI_DeviceColorAdjustment( _In_ LPSTR pDeviceName, _Out_ PDEVHTADJDATA pDevHTAdjData); -WIN32KAPI +ENGAPI ULONG APIENTRY PALOBJ_cGetColors( @@ -2720,20 +2737,20 @@ PALOBJ_cGetColors( _In_ ULONG cColors, _Out_writes_(cColors) ULONG *pulColors); -WIN32KAPI +ENGAPI BOOL APIENTRY PATHOBJ_bCloseFigure( _In_ PATHOBJ *ppo); -WIN32KAPI +ENGAPI BOOL APIENTRY PATHOBJ_bEnum( _In_ PATHOBJ *ppo, _Out_ PATHDATA *ppd); -WIN32KAPI +ENGAPI BOOL APIENTRY PATHOBJ_bEnumClipLines( @@ -2741,14 +2758,14 @@ PATHOBJ_bEnumClipLines( _In_ ULONG cj, _Out_bytecap_(cj) CLIPLINE *pcl); -WIN32KAPI +ENGAPI BOOL APIENTRY PATHOBJ_bMoveTo( _In_ PATHOBJ *ppo, _In_ POINTFIX ptfx); -WIN32KAPI +ENGAPI BOOL APIENTRY PATHOBJ_bPolyBezierTo( @@ -2756,7 +2773,7 @@ PATHOBJ_bPolyBezierTo( _In_count_(cptfx) POINTFIX *pptfx, _In_ ULONG cptfx); -WIN32KAPI +ENGAPI BOOL APIENTRY PATHOBJ_bPolyLineTo( @@ -2764,13 +2781,13 @@ PATHOBJ_bPolyLineTo( _In_count_(cptfx) POINTFIX *pptfx, _In_ ULONG cptfx); -WIN32KAPI +ENGAPI VOID APIENTRY PATHOBJ_vEnumStart( _Inout_ PATHOBJ *ppo); -WIN32KAPI +ENGAPI VOID APIENTRY PATHOBJ_vEnumStartClipLines( @@ -2779,14 +2796,14 @@ PATHOBJ_vEnumStartClipLines( _In_ SURFOBJ *pso, _In_ LINEATTRS *pla); -WIN32KAPI +ENGAPI VOID APIENTRY PATHOBJ_vGetBounds( _In_ PATHOBJ *ppo, _Out_ PRECTFX prectfx); -WIN32KAPI +ENGAPI BOOL APIENTRY STROBJ_bEnum( @@ -2794,7 +2811,7 @@ STROBJ_bEnum( _Out_ ULONG *pc, _Out_ PGLYPHPOS *ppgpos); // FIXME_ size? -WIN32KAPI +ENGAPI BOOL APIENTRY STROBJ_bEnumPositionsOnly( @@ -2802,7 +2819,7 @@ STROBJ_bEnumPositionsOnly( _Out_ ULONG *pc, _Out_ PGLYPHPOS *ppgpos); // FIXME_ size? -WIN32KAPI +ENGAPI BOOL APIENTRY STROBJ_bGetAdvanceWidths( @@ -2811,31 +2828,31 @@ STROBJ_bGetAdvanceWidths( _In_ ULONG c, _Out_cap_(c) POINTQF *pptqD); -WIN32KAPI +ENGAPI DWORD APIENTRY STROBJ_dwGetCodePage( _In_ STROBJ *pstro); -WIN32KAPI +ENGAPI FIX APIENTRY STROBJ_fxBreakExtra( _In_ STROBJ *pstro); -WIN32KAPI +ENGAPI FIX APIENTRY STROBJ_fxCharacterExtra( _In_ STROBJ *pstro); -WIN32KAPI +ENGAPI VOID APIENTRY STROBJ_vEnumStart( _Inout_ STROBJ *pstro); -WIN32KAPI +ENGAPI BOOL APIENTRY WNDOBJ_bEnum( @@ -2843,7 +2860,7 @@ WNDOBJ_bEnum( _In_ ULONG cj, _Out_bytecap_(cj) ULONG *pul); -WIN32KAPI +ENGAPI ULONG APIENTRY WNDOBJ_cEnumStart( @@ -2852,7 +2869,7 @@ WNDOBJ_cEnumStart( _In_ ULONG iDirection, _In_ ULONG cLimit); -WIN32KAPI +ENGAPI VOID APIENTRY WNDOBJ_vSetConsumer( @@ -2865,7 +2882,7 @@ WNDOBJ_vSetConsumer( #define XF_LTOFX 2L #define XF_INV_FXTOL 3L -WIN32KAPI +ENGAPI BOOL APIENTRY XFORMOBJ_bApplyXform( @@ -2876,7 +2893,7 @@ XFORMOBJ_bApplyXform( _Out_writes_bytes_(cPoints * sizeof(POINTL)) PVOID pvOut); #if !defined(USERMODE_DRIVER) -WIN32KAPI +ENGAPI ULONG APIENTRY XFORMOBJ_iGetFloatObjXform( @@ -2886,7 +2903,7 @@ XFORMOBJ_iGetFloatObjXform( #define XFORMOBJ_iGetFloatObjXform XFORMOBJ_iGetXform #endif -WIN32KAPI +ENGAPI ULONG APIENTRY XFORMOBJ_iGetXform( @@ -2900,7 +2917,7 @@ XFORMOBJ_iGetXform( #define XO_SRCBITFIELDS 4 #define XO_DESTBITFIELDS 5 -WIN32KAPI +ENGAPI ULONG APIENTRY XLATEOBJ_cGetPalette( @@ -2909,20 +2926,20 @@ XLATEOBJ_cGetPalette( _In_ ULONG cPal, _Out_cap_(cPal) ULONG *pPal); -WIN32KAPI +ENGAPI HANDLE APIENTRY XLATEOBJ_hGetColorTransform( _In_ XLATEOBJ *pxlo); -WIN32KAPI +ENGAPI ULONG APIENTRY XLATEOBJ_iXlate( _In_ XLATEOBJ *pxlo, _In_ ULONG iColor); -WIN32KAPI +ENGAPI ULONG* APIENTRY XLATEOBJ_piVector( diff --git a/include/psdk/wingdi.h b/include/psdk/wingdi.h index 3e81b84fb6d..3f0122431ec 100644 --- a/include/psdk/wingdi.h +++ b/include/psdk/wingdi.h @@ -1799,10 +1799,10 @@ typedef struct tagPALETTEENTRY { #ifndef _LOGPALETTE_DEFINED #define _LOGPALETTE_DEFINED typedef struct tagLOGPALETTE { - WORD palVersion; - WORD palNumEntries; - PALETTEENTRY palPalEntry[1]; -} LOGPALETTE,*NPLOGPALETTE,*PLOGPALETTE,*LPLOGPALETTE; + WORD palVersion; + WORD palNumEntries; + _Field_size_opt_(palNumEntries) PALETTEENTRY palPalEntry[1]; +} LOGPALETTE, *NPLOGPALETTE, *PLOGPALETTE, *LPLOGPALETTE; #endif typedef struct tagEMRCREATEPALETTE { @@ -2871,8 +2871,22 @@ typedef FARPROC LINEDDAPROC; typedef BOOL (CALLBACK *ABORTPROC)(HDC,int); -typedef int (CALLBACK *MFENUMPROC)(HDC,HANDLETABLE*,METARECORD*,int,LPARAM); -typedef int (CALLBACK *ENHMFENUMPROC)(HDC,HANDLETABLE*,const ENHMETARECORD*,int,LPARAM); +typedef int +(CALLBACK *MFENUMPROC)( + _In_ HDC hdc, + _In_reads_(nObj) HANDLETABLE FAR* lpht, + _In_ METARECORD FAR* lpMR, + _In_ int nObj, + _In_opt_ LPARAM param); + +typedef int +(CALLBACK *ENHMFENUMPROC)( + _In_ HDC hdc, + _In_reads_(nHandles) HANDLETABLE FAR* lpht, + _In_ CONST ENHMETARECORD * lpmr, + _In_ int nHandles, + _In_opt_ LPARAM data); + typedef int (CALLBACK *ICMENUMPROCA)(LPSTR,LPARAM); typedef int (CALLBACK *ICMENUMPROCW)(LPWSTR,LPARAM); typedef UINT (CALLBACK *LPFNDEVMODE)(HWND,HMODULE,LPDEVMODEA,LPSTR,LPSTR,LPDEVMODEA,LPSTR,UINT); @@ -2884,130 +2898,303 @@ typedef DWORD (CALLBACK *LPFNDEVCAPS)(LPSTR,LPSTR,UINT,LPSTR,LPDEVMODEA); #define MAKEROP4(f,b) (DWORD)((((b)<<8)&0xFF000000)|(f)) #define PALETTEINDEX(i) ((0x01000000|(COLORREF)(WORD)(i))) #define PALETTERGB(r,g,b) (0x02000000|RGB(r,g,b)) -int WINAPI AbortDoc(HDC); -BOOL WINAPI AbortPath(HDC); +int WINAPI AbortDoc(_In_ HDC); +BOOL WINAPI AbortPath(_In_ HDC); int WINAPI AddFontResourceA(LPCSTR); int WINAPI AddFontResourceW(LPCWSTR); #if (_WIN32_WINNT >= 0x0500) -HANDLE WINAPI AddFontMemResourceEx(PVOID,DWORD,PVOID,DWORD *); -int WINAPI AddFontResourceExA(LPCSTR,DWORD,PVOID); -int WINAPI AddFontResourceExW(LPCWSTR,DWORD,PVOID); + +HANDLE +WINAPI +AddFontMemResourceEx( + _In_reads_bytes_(cjSize) PVOID pFileView, + _In_ DWORD cjSize, + _Reserved_ PVOID pvResrved, + _In_ DWORD* pNumFonts); + +int WINAPI AddFontResourceExA(_In_ LPCSTR, _In_ DWORD, _Reserved_ PVOID); +int WINAPI AddFontResourceExW(_In_ LPCWSTR, _In_ DWORD, _Reserved_ PVOID); + #endif -BOOL WINAPI AngleArc(HDC,int,int,DWORD,FLOAT,FLOAT); -BOOL WINAPI AnimatePalette(HPALETTE,UINT,UINT,const PALETTEENTRY*); -BOOL WINAPI Arc(HDC,int,int,int,int,int,int,int,int); -BOOL WINAPI ArcTo(HDC,int,int,int,int,int,int,int,int); -BOOL WINAPI BeginPath(HDC); -BOOL WINAPI BitBlt(HDC,int,int,int,int,HDC,int,int,DWORD); -BOOL WINAPI CancelDC(HDC); -BOOL WINAPI CheckColorsInGamut(HDC,PVOID,PVOID,DWORD); -BOOL WINAPI Chord(HDC,int,int,int,int,int,int,int,int); -int WINAPI ChoosePixelFormat(HDC,CONST PIXELFORMATDESCRIPTOR*); -HENHMETAFILE WINAPI CloseEnhMetaFile(HDC); -BOOL WINAPI CloseFigure(HDC); -HMETAFILE WINAPI CloseMetaFile(HDC); -BOOL WINAPI ColorMatchToTarget(HDC,HDC,DWORD); -int WINAPI CombineRgn(HRGN,HRGN,HRGN,int); -BOOL WINAPI CombineTransform(LPXFORM,const XFORM*,const XFORM*); -HENHMETAFILE WINAPI CopyEnhMetaFileA(HENHMETAFILE,LPCSTR); -HENHMETAFILE WINAPI CopyEnhMetaFileW(HENHMETAFILE,LPCWSTR); -HMETAFILE WINAPI CopyMetaFileA(HMETAFILE,LPCSTR); -HMETAFILE WINAPI CopyMetaFileW(HMETAFILE,LPCWSTR); -HBITMAP WINAPI CreateBitmap(int,int,UINT,UINT,CONST VOID*); -HBITMAP WINAPI CreateBitmapIndirect(const BITMAP*); -HBRUSH WINAPI CreateBrushIndirect(const LOGBRUSH*); -HCOLORSPACE WINAPI CreateColorSpaceA(LPLOGCOLORSPACEA); -HCOLORSPACE WINAPI CreateColorSpaceW(LPLOGCOLORSPACEW); -HBITMAP WINAPI CreateCompatibleBitmap(HDC,int,int); -HDC WINAPI CreateCompatibleDC(HDC); -HDC WINAPI CreateDCA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*); -HDC WINAPI CreateDCW(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*); -HBITMAP WINAPI CreateDIBitmap(HDC,CONST BITMAPINFOHEADER*,DWORD,CONST VOID*,CONST BITMAPINFO*,UINT); -HBRUSH WINAPI CreateDIBPatternBrush(HGLOBAL,UINT); -HBRUSH WINAPI CreateDIBPatternBrushPt(CONST VOID*,UINT); -HBITMAP WINAPI CreateDIBSection(HDC,const BITMAPINFO*,UINT,PVOID*,HANDLE,DWORD); -HBITMAP WINAPI CreateDiscardableBitmap(HDC,int,int); -HRGN WINAPI CreateEllipticRgn(int,int,int,int); -HRGN WINAPI CreateEllipticRgnIndirect(LPCRECT); -HDC WINAPI CreateEnhMetaFileA(HDC,LPCSTR,LPCRECT,LPCSTR); -HDC WINAPI CreateEnhMetaFileW(HDC,LPCWSTR,LPCRECT,LPCWSTR); -HFONT WINAPI CreateFontA(int,int,int,int,int,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPCSTR); -HFONT WINAPI CreateFontW(int,int,int,int,int,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,LPCWSTR); -HFONT WINAPI CreateFontIndirectA(const LOGFONTA*); -HFONT WINAPI CreateFontIndirectW(const LOGFONTW*); + +BOOL WINAPI AngleArc(_In_ HDC, _In_ int, _In_ int, _In_ DWORD, _In_ FLOAT, _In_ FLOAT); + +BOOL +WINAPI +AnimatePalette( + _In_ HPALETTE hPal, + _In_ UINT iStartIndex, + _In_ UINT cEntries, + _In_reads_(cEntries) CONST PALETTEENTRY *ppe); + +BOOL WINAPI Arc(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int); +BOOL WINAPI ArcTo(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int); +BOOL WINAPI BeginPath(_In_ HDC); +BOOL WINAPI BitBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ HDC, _In_ int, _In_ int, _In_ DWORD); +BOOL WINAPI CancelDC(_In_ HDC); + +BOOL +WINAPI +CheckColorsInGamut( + _In_ HDC hdc, + _In_reads_(nCount) LPVOID lpRGBTriple, + _Out_writes_bytes_(nCount) LPVOID dlpBuffer, + _In_ DWORD nCount); + +BOOL WINAPI Chord(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int); +int WINAPI ChoosePixelFormat(_In_ HDC, _In_ CONST PIXELFORMATDESCRIPTOR*); +HENHMETAFILE WINAPI CloseEnhMetaFile(_In_ HDC); +BOOL WINAPI CloseFigure(_In_ HDC); +HMETAFILE WINAPI CloseMetaFile(_In_ HDC); +BOOL WINAPI ColorMatchToTarget(_In_ HDC, _In_ HDC, _In_ DWORD); +int WINAPI CombineRgn(_In_opt_ HRGN, _In_opt_ HRGN, _In_opt_ HRGN, _In_ int); +BOOL WINAPI CombineTransform(_Out_ LPXFORM, _In_ const XFORM*, _In_ const XFORM*); +HENHMETAFILE WINAPI CopyEnhMetaFileA(_In_ HENHMETAFILE, _In_opt_ LPCSTR); +HENHMETAFILE WINAPI CopyEnhMetaFileW(_In_ HENHMETAFILE, _In_opt_ LPCWSTR); +HMETAFILE WINAPI CopyMetaFileA(_In_ HMETAFILE, _In_opt_ LPCSTR); +HMETAFILE WINAPI CopyMetaFileW(_In_ HMETAFILE, _In_opt_ LPCWSTR); +HBITMAP WINAPI CreateBitmap(_In_ int, _In_ int, _In_ UINT, _In_ UINT, _In_opt_ CONST VOID*); +HBITMAP WINAPI CreateBitmapIndirect(_In_ const BITMAP*); +HBRUSH WINAPI CreateBrushIndirect(_In_ const LOGBRUSH*); +HCOLORSPACE WINAPI CreateColorSpaceA(_In_ LPLOGCOLORSPACEA); +HCOLORSPACE WINAPI CreateColorSpaceW(_In_ LPLOGCOLORSPACEW); +HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC, _In_ int, _In_ int); +HDC WINAPI CreateCompatibleDC(_In_opt_ HDC); +HDC WINAPI CreateDCA(_In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_opt_ const DEVMODEA*); +HDC WINAPI CreateDCW(_In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_opt_ const DEVMODEW*); +HBITMAP WINAPI CreateDIBitmap(_In_ HDC, _In_opt_ CONST BITMAPINFOHEADER*, _In_ DWORD, _In_opt_ CONST VOID*, _In_opt_ CONST BITMAPINFO*, _In_ UINT); +HBRUSH WINAPI CreateDIBPatternBrush(_In_ HGLOBAL, _In_ UINT); +HBRUSH WINAPI CreateDIBPatternBrushPt(_In_ CONST VOID*, _In_ UINT); + +#define GDI_WIDTHBYTES(bits) ((DWORD)(((bits) + 31) & (~31)) / 8) +#define GDI_DIBWIDTHBYTES(bi) (DWORD)GDI_WIDTHBYTES((DWORD)(bi).biWidth * (DWORD)(bi).biBitCount) +#define GDI__DIBSIZE(bi) (GDI_DIBWIDTHBYTES(bi) * (DWORD)(bi).biHeight) +#define GDI_DIBSIZE(bi) ((bi).biHeight < 0 ? (-1) * (GDI__DIBSIZE(bi)) : GDI__DIBSIZE(bi)) + +_Success_(return != NULL) +HBITMAP +WINAPI +CreateDIBSection( + _In_opt_ HDC hdc, + _In_ const BITMAPINFO *pbmi, + _In_ UINT usage, + _When_((pbmi->bmiHeader.biBitCount != 0), _Outptr_result_bytebuffer_(GDI_DIBSIZE((pbmi->bmiHeader)))) + _When_((pbmi->bmiHeader.biBitCount == 0), _Outptr_result_bytebuffer_((pbmi->bmiHeader).biSizeImage)) + VOID **ppvBits, + _In_opt_ HANDLE hSection, + _In_ DWORD offset); + +HBITMAP WINAPI CreateDiscardableBitmap(_In_ HDC, _In_ int, _In_ int); +HRGN WINAPI CreateEllipticRgn(_In_ int, _In_ int, _In_ int, _In_ int); +HRGN WINAPI CreateEllipticRgnIndirect(_In_ LPCRECT); +HDC WINAPI CreateEnhMetaFileA(_In_opt_ HDC, _In_opt_ LPCSTR, _In_opt_ LPCRECT, _In_opt_ LPCSTR); +HDC WINAPI CreateEnhMetaFileW(_In_opt_ HDC, _In_opt_ LPCWSTR, _In_opt_ LPCRECT, _In_opt_ LPCWSTR); +HFONT WINAPI CreateFontA(_In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ LPCSTR); +HFONT WINAPI CreateFontW(_In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ LPCWSTR); +HFONT WINAPI CreateFontIndirectA(_In_ const LOGFONTA*); +HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW*); HFONT WINAPI CreateFontIndirectExA(const ENUMLOGFONTEXDVA *); HFONT WINAPI CreateFontIndirectExW(const ENUMLOGFONTEXDVW *); -HPALETTE WINAPI CreateHalftonePalette(HDC); -HBRUSH WINAPI CreateHatchBrush(int,COLORREF); -HDC WINAPI CreateICA(LPCSTR,LPCSTR,LPCSTR,const DEVMODEA*); -HDC WINAPI CreateICW(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODEW*); -HDC WINAPI CreateMetaFileA(LPCSTR); -HDC WINAPI CreateMetaFileW(LPCWSTR); -HPALETTE WINAPI CreatePalette(const LOGPALETTE*); -HBRUSH WINAPI CreatePatternBrush(HBITMAP); -HPEN WINAPI CreatePen(int,int,COLORREF); -HPEN WINAPI CreatePenIndirect(const LOGPEN*); -HRGN WINAPI CreatePolygonRgn(const POINT*,int,int); -HRGN WINAPI CreatePolyPolygonRgn(const POINT*,const INT*,int,int); -HRGN WINAPI CreateRectRgn(int,int,int,int); -HRGN WINAPI CreateRectRgnIndirect(LPCRECT); -HRGN WINAPI CreateRoundRectRgn(int,int,int,int,int,int); -BOOL WINAPI CreateScalableFontResourceA(DWORD,LPCSTR,LPCSTR,LPCSTR); -BOOL WINAPI CreateScalableFontResourceW(DWORD,LPCWSTR,LPCWSTR,LPCWSTR); -HBRUSH WINAPI CreateSolidBrush(COLORREF); -BOOL WINAPI DeleteColorSpace(HCOLORSPACE); -BOOL WINAPI DeleteDC(HDC); -BOOL WINAPI DeleteEnhMetaFile(HENHMETAFILE); -BOOL WINAPI DeleteMetaFile(HMETAFILE); -BOOL WINAPI DeleteObject(HGDIOBJ); -int WINAPI DescribePixelFormat(HDC,int,UINT,LPPIXELFORMATDESCRIPTOR); -DWORD WINAPI DeviceCapabilitiesA(LPCSTR,LPCSTR,WORD,LPSTR,const DEVMODEA*); -DWORD WINAPI DeviceCapabilitiesW(LPCWSTR,LPCWSTR,WORD,LPWSTR,const DEVMODEW*); -BOOL WINAPI DPtoLP(HDC,LPPOINT,int); -int WINAPI DrawEscape(HDC,int,int,LPCSTR); -BOOL WINAPI Ellipse(HDC,int,int,int,int); -int WINAPI EndDoc(HDC); -int WINAPI EndPage(HDC); -BOOL WINAPI EndPath(HDC); -BOOL WINAPI EnumEnhMetaFile(HDC,HENHMETAFILE,ENHMFENUMPROC,PVOID,LPCRECT); -int WINAPI EnumFontFamiliesA(HDC,LPCSTR,FONTENUMPROCA,LPARAM); -int WINAPI EnumFontFamiliesW(HDC,LPCWSTR,FONTENUMPROCW,LPARAM); -int WINAPI EnumFontFamiliesExA(HDC,PLOGFONTA,FONTENUMPROCA,LPARAM,DWORD); -int WINAPI EnumFontFamiliesExW(HDC,PLOGFONTW,FONTENUMPROCW,LPARAM,DWORD); -int WINAPI EnumFontsA(HDC,LPCSTR,FONTENUMPROCA,LPARAM); -int WINAPI EnumFontsW(HDC,LPCWSTR,FONTENUMPROCW,LPARAM); -int WINAPI EnumICMProfilesA(HDC,ICMENUMPROCA,LPARAM); -int WINAPI EnumICMProfilesW(HDC,ICMENUMPROCW,LPARAM); -BOOL WINAPI EnumMetaFile(HDC,HMETAFILE,MFENUMPROC,LPARAM); -int WINAPI EnumObjects(HDC,int,GOBJENUMPROC,LPARAM); -BOOL WINAPI EqualRgn(HRGN,HRGN); -int WINAPI Escape(HDC,int,int,LPCSTR,PVOID); -int WINAPI ExcludeClipRect(HDC,int,int,int,int); +HPALETTE WINAPI CreateHalftonePalette(_In_opt_ HDC); +HBRUSH WINAPI CreateHatchBrush(_In_ int, _In_ COLORREF); +HDC WINAPI CreateICA(_In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_opt_ const DEVMODEA*); +HDC WINAPI CreateICW(_In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_opt_ const DEVMODEW*); +HDC WINAPI CreateMetaFileA(_In_opt_ LPCSTR); +HDC WINAPI CreateMetaFileW(_In_opt_ LPCWSTR); + +HPALETTE +WINAPI +CreatePalette( + _In_reads_(_Inexpressible_(2*sizeof(WORD) + plpal->palNumEntries * sizeof(PALETTEENTRY))) const LOGPALETTE*); + +HBRUSH WINAPI CreatePatternBrush(_In_ HBITMAP); +HPEN WINAPI CreatePen(_In_ int, _In_ int, _In_ COLORREF); +HPEN WINAPI CreatePenIndirect(_In_ const LOGPEN*); + +HRGN +WINAPI +CreatePolygonRgn( + _In_reads_(cPoint) const POINT *pptl, + _In_ int cPoint, + _In_ int iMode); + +HRGN +WINAPI +CreatePolyPolygonRgn( + _In_ const POINT *pptl, + _In_reads_(cPoly) const INT *pc, + _In_ int cPoly, + _In_ int iMode); + +HRGN WINAPI CreateRectRgn(_In_ int, _In_ int, _In_ int, _In_ int); +HRGN WINAPI CreateRectRgnIndirect(_In_ LPCRECT); +HRGN WINAPI CreateRoundRectRgn(_In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int); +BOOL WINAPI CreateScalableFontResourceA(_In_ DWORD, _In_ LPCSTR, _In_ LPCSTR, _In_opt_ LPCSTR); +BOOL WINAPI CreateScalableFontResourceW(_In_ DWORD, _In_ LPCWSTR, _In_ LPCWSTR, _In_opt_ LPCWSTR); +HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF); +BOOL WINAPI DeleteColorSpace(_In_ HCOLORSPACE); +BOOL WINAPI DeleteDC(_In_ HDC); +BOOL WINAPI DeleteEnhMetaFile(_In_opt_ HENHMETAFILE); +BOOL WINAPI DeleteMetaFile(_In_ HMETAFILE); +BOOL WINAPI DeleteObject(_In_ HGDIOBJ); + +int +WINAPI +DescribePixelFormat( + _In_ HDC hdc, + _In_ int iPixelFormat, + _In_ UINT nBytes, + _Out_writes_bytes_opt_(nBytes) LPPIXELFORMATDESCRIPTOR ppfd); + +DWORD +WINAPI +DeviceCapabilitiesA( + _In_ LPCSTR pDevice, + _In_opt_ LPCSTR pPort, + _In_ WORD fwCapability, + _Out_writes_opt_(_Inexpressible_(1)) LPSTR pOutput, + _In_opt_ const DEVMODEA *pDevMode); + +DWORD +WINAPI +DeviceCapabilitiesW( + _In_ LPCWSTR pDevice, + _In_opt_ LPCWSTR pPort, + _In_ WORD fwCapability, + _Out_writes_opt_(_Inexpressible_(1)) LPWSTR pOutput, + _In_opt_ const DEVMODEW *pDevMode); + +BOOL +WINAPI +DPtoLP( + _In_ HDC hdc, + _Inout_updates_(c) LPPOINT lppt, + _In_ int c); + +int +WINAPI +DrawEscape( + _In_ HDC hdc, + _In_ int iEscape, + _In_ int cjIn, + _In_reads_bytes_opt_(cjIn) LPCSTR lpIn); + +BOOL WINAPI Ellipse(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int); +int WINAPI EndDoc(_In_ HDC); +int WINAPI EndPage(_In_ HDC); +BOOL WINAPI EndPath(_In_ HDC); +BOOL WINAPI EnumEnhMetaFile(_In_opt_ HDC, _In_ HENHMETAFILE, _In_ ENHMFENUMPROC, _In_opt_ PVOID, _In_opt_ LPCRECT); +int WINAPI EnumFontFamiliesA(_In_ HDC, _In_opt_ LPCSTR, _In_ FONTENUMPROCA, _In_ LPARAM); +int WINAPI EnumFontFamiliesW(_In_ HDC, _In_opt_ LPCWSTR, _In_ FONTENUMPROCW, _In_ LPARAM); +int WINAPI EnumFontFamiliesExA(_In_ HDC, _In_ PLOGFONTA, _In_ FONTENUMPROCA, _In_ LPARAM, _In_ DWORD); +int WINAPI EnumFontFamiliesExW(_In_ HDC, _In_ PLOGFONTW, _In_ FONTENUMPROCW, _In_ LPARAM, _In_ DWORD); +int WINAPI EnumFontsA(_In_ HDC, _In_opt_ LPCSTR, _In_ FONTENUMPROCA, _In_ LPARAM); +int WINAPI EnumFontsW(_In_ HDC, _In_opt_ LPCWSTR, _In_ FONTENUMPROCW, _In_ LPARAM); +int WINAPI EnumICMProfilesA(_In_ HDC, _In_ ICMENUMPROCA, _In_opt_ LPARAM); +int WINAPI EnumICMProfilesW(_In_ HDC, _In_ ICMENUMPROCW, _In_opt_ LPARAM); +BOOL WINAPI EnumMetaFile(_In_ HDC, _In_ HMETAFILE, _In_ MFENUMPROC, _In_opt_ LPARAM); +int WINAPI EnumObjects(_In_ HDC, _In_ int, _In_ GOBJENUMPROC, _In_ LPARAM); +BOOL WINAPI EqualRgn(_In_ HRGN, _In_ HRGN); + +int +WINAPI +Escape( + _In_ HDC hdc, + _In_ int iEscape, + _In_ int cjIn, + _In_reads_bytes_opt_(cjIn) LPCSTR pvIn, + _Out_opt_ LPVOID pvOut); + +int WINAPI ExcludeClipRect(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int); int WINAPI ExcludeUpdateRgn(HDC,HWND); -HPEN WINAPI ExtCreatePen(DWORD,DWORD,const LOGBRUSH*,DWORD,const DWORD*); -HRGN WINAPI ExtCreateRegion(const XFORM*,DWORD,const RGNDATA*); -int WINAPI ExtEscape(HDC,int,int,LPCSTR,int,LPSTR); -BOOL WINAPI ExtFloodFill(HDC,int,int,COLORREF,UINT); -int WINAPI ExtSelectClipRgn(HDC,HRGN,int); -BOOL WINAPI ExtTextOutA(HDC,int,int,UINT,LPCRECT,LPCSTR,UINT,const INT*); -BOOL WINAPI ExtTextOutW(HDC,int,int,UINT,LPCRECT,LPCWSTR,UINT,const INT*); -BOOL WINAPI FillPath(HDC); + +HPEN +WINAPI +ExtCreatePen( + _In_ DWORD iPenStyle, + _In_ DWORD cWidth, + _In_ const LOGBRUSH *plbrush, + _In_ DWORD cStyle, + _In_reads_opt_(cStyle) const DWORD *pstyle); + +HRGN +WINAPI +ExtCreateRegion( + _In_opt_ const XFORM *lpx, + _In_ DWORD nCount, + _In_reads_bytes_(nCount) const RGNDATA *lpData); + +int +WINAPI +ExtEscape( + _In_ HDC hdc, + _In_ int iEscape, + _In_ int cjInput, + _In_reads_bytes_opt_(cjInput) LPCSTR lpInData, + _In_ int cjOutput, + _Out_writes_bytes_opt_(cjOutput) LPSTR lpOutData); + +BOOL WINAPI ExtFloodFill(_In_ HDC, _In_ int, _In_ int, _In_ COLORREF, _In_ UINT); +int WINAPI ExtSelectClipRgn(_In_ HDC, _In_opt_ HRGN, _In_ int); + +BOOL +WINAPI +ExtTextOutA( + _In_ HDC hdc, + _In_ int x, + _In_ int y, + _In_ UINT options, + _In_opt_ const RECT *lprect, + _In_reads_opt_(c) LPCSTR lpString, + _In_ UINT c, + _In_reads_opt_(c) const INT *lpDx); + +BOOL +WINAPI +ExtTextOutW( + _In_ HDC hdc, + _In_ int x, + _In_ int y, + _In_ UINT options, + _In_opt_ const RECT *lprect, + _In_reads_opt_(c) LPCWSTR lpString, + _In_ UINT c, + _In_reads_opt_(c) const INT *lpDx); + +BOOL WINAPI FillPath(_In_ HDC); int WINAPI FillRect(HDC,LPCRECT,HBRUSH); -int WINAPI FillRgn(HDC,HRGN,HBRUSH); -BOOL WINAPI FixBrushOrgEx(HDC,int,int,LPPOINT); -BOOL WINAPI FlattenPath(HDC); -BOOL WINAPI FloodFill(HDC,int,int,COLORREF); -BOOL WINAPI FrameRgn(HDC,HRGN,HBRUSH,INT,INT); -BOOL WINAPI GdiAlphaBlend(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION); -BOOL WINAPI GdiComment(HDC,UINT,const BYTE*); +int WINAPI FillRgn(_In_ HDC, _In_ HRGN, _In_ HBRUSH); +BOOL WINAPI FixBrushOrgEx(_In_ HDC, _In_ int, _In_ int, _In_opt_ LPPOINT); +BOOL WINAPI FlattenPath(_In_ HDC); +BOOL WINAPI FloodFill(_In_ HDC, _In_ int, _In_ int, _In_ COLORREF); +BOOL WINAPI FrameRgn(_In_ HDC, _In_ HRGN, _In_ HBRUSH, _In_ int, _In_ int); +BOOL WINAPI GdiAlphaBlend(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BLENDFUNCTION); + +BOOL +WINAPI +GdiComment( + _In_ HDC hdc, + _In_ UINT nSize, + _In_reads_bytes_(nSize) const BYTE *lpData); + DEVMODEW * WINAPI GdiConvertToDevmodeW(const DEVMODEA *); BOOL WINAPI GdiFlush(void); LONG WINAPI GdiGetCharDimensions(HDC, LPTEXTMETRICW, LONG *); DWORD WINAPI GdiGetCodePage(HDC); DWORD WINAPI GdiGetBatchLimit(void); -DWORD WINAPI GdiSetBatchLimit(DWORD); -BOOL WINAPI GdiGradientFill(HDC,PTRIVERTEX,ULONG,PVOID,ULONG,ULONG); -BOOL WINAPI GdiTransparentBlt(HDC,int,int,int,int,HDC,int,int,int,int,UINT); +DWORD WINAPI GdiSetBatchLimit(_In_ DWORD); + +BOOL +WINAPI +GdiGradientFill( + _In_ HDC hdc, + _In_reads_(nVertex) PTRIVERTEX pVertex, + _In_ ULONG nVertex, + _In_ PVOID pMesh, + _In_ ULONG nCount, + _In_ ULONG ulMode); + +BOOL WINAPI GdiTransparentBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT); BOOL WINAPI GdiIsMetaFileDC(HDC); #define GetCValue(cmyk) ((BYTE)(cmyk)) #define GetMValue(cmyk) ((BYTE)((cmyk)>> 8)) @@ -3017,243 +3204,819 @@ BOOL WINAPI GdiIsMetaFileDC(HDC); #define GetRValue(c) ((BYTE)(c)) #define GetGValue(c) ((BYTE)(((WORD)(c))>>8)) #define GetBValue(c) ((BYTE)((c)>>16)) -int WINAPI GetArcDirection(HDC); -BOOL WINAPI GetAspectRatioFilterEx(HDC,LPSIZE); -LONG WINAPI GetBitmapBits(HBITMAP,LONG,PVOID); -BOOL WINAPI GetBitmapDimensionEx(HBITMAP,LPSIZE); -COLORREF WINAPI GetBkColor(HDC); -int WINAPI GetBkMode(HDC); -UINT WINAPI GetBoundsRect(HDC,LPRECT,UINT); -BOOL WINAPI GetBrushOrgEx(HDC,LPPOINT); -BOOL WINAPI GetCharABCWidthsA(HDC,UINT,UINT,LPABC); -BOOL WINAPI GetCharABCWidthsW(HDC,UINT,UINT,LPABC); -BOOL WINAPI GetCharABCWidthsFloatA(HDC,UINT,UINT,LPABCFLOAT); -BOOL WINAPI GetCharABCWidthsFloatW(HDC,UINT,UINT,LPABCFLOAT); -BOOL WINAPI GetCharABCWidthsI(HDC,UINT,UINT,LPWORD,LPABC); -DWORD WINAPI GetCharacterPlacementA(HDC,LPCSTR,int,int,LPGCP_RESULTSA,DWORD); -DWORD WINAPI GetCharacterPlacementW(HDC,LPCWSTR,int,int,LPGCP_RESULTSW,DWORD); -BOOL WINAPI GetCharWidth32A(HDC,UINT,UINT,LPINT); -BOOL WINAPI GetCharWidth32W(HDC,UINT,UINT,LPINT); -BOOL WINAPI GetCharWidthA(HDC,UINT,UINT,LPINT); -BOOL WINAPI GetCharWidthW(HDC,UINT,UINT,LPINT); -BOOL WINAPI GetCharWidthI(HDC,UINT,UINT,LPWORD,LPINT); -BOOL WINAPI GetCharWidthFloatA(HDC,UINT,UINT,PFLOAT); -BOOL WINAPI GetCharWidthFloatW(HDC,UINT,UINT,PFLOAT); -int WINAPI GetClipBox(HDC,LPRECT); -int WINAPI GetClipRgn(HDC,HRGN); -BOOL WINAPI GetColorAdjustment(HDC,LPCOLORADJUSTMENT); -HCOLORSPACE WINAPI GetColorSpace(HDC); -HGDIOBJ WINAPI GetCurrentObject(HDC,UINT); -BOOL WINAPI GetCurrentPositionEx(HDC,LPPOINT); +int WINAPI GetArcDirection(_In_ HDC); +BOOL WINAPI GetAspectRatioFilterEx(_In_ HDC, _Out_ LPSIZE); + +LONG +WINAPI +GetBitmapBits( + _In_ HBITMAP hbit, + _In_ LONG cb, + _Out_writes_bytes_(cb) LPVOID lpvBits); + +BOOL WINAPI GetBitmapDimensionEx(_In_ HBITMAP, _Out_ LPSIZE); +COLORREF WINAPI GetBkColor(_In_ HDC); +int WINAPI GetBkMode(_In_ HDC); +UINT WINAPI GetBoundsRect(_In_ HDC, _Out_ LPRECT, _In_ UINT); +BOOL WINAPI GetBrushOrgEx(_In_ HDC, _Out_ LPPOINT); + +BOOL +WINAPI +GetCharABCWidthsA( + _In_ HDC hdc, + _In_ UINT wFirst, + _In_ UINT wLast, + _Out_writes_(wLast - wFirst + 1) LPABC lpABC); + +BOOL +WINAPI +GetCharABCWidthsW( + _In_ HDC hdc, + _In_ UINT wFirst, + _In_ UINT wLast, + _Out_writes_(wLast - wFirst + 1) LPABC lpABC); + +BOOL +WINAPI +GetCharABCWidthsFloatA( + _In_ HDC hdc, + _In_ UINT iFirst, + _In_ UINT iLast, + _Out_writes_(iLast + 1 - iFirst) LPABCFLOAT lpABC); + +BOOL +WINAPI +GetCharABCWidthsFloatW( + _In_ HDC hdc, + _In_ UINT iFirst, + _In_ UINT iLast, + _Out_writes_(iLast + 1 - iFirst) LPABCFLOAT lpABC); + +BOOL +WINAPI +GetCharABCWidthsI( + _In_ HDC hdc, + _In_ UINT giFirst, + _In_ UINT cgi, + _In_reads_opt_(cgi) LPWORD pgi, + _Out_writes_(cgi) LPABC pabc); + +DWORD +WINAPI +GetCharacterPlacementA( + _In_ HDC hdc, + _In_reads_(nCount) LPCSTR lpString, + _In_ int nCount, + _In_ int nMexExtent, + _Inout_ LPGCP_RESULTSA lpResults, + _In_ DWORD dwFlags); + +DWORD +WINAPI +GetCharacterPlacementW( + _In_ HDC hdc, + _In_reads_(nCount) LPCWSTR lpString, + _In_ int nCount, + _In_ int nMexExtent, + _Inout_ LPGCP_RESULTSW lpResults, + _In_ DWORD dwFlags); + +BOOL +WINAPI +GetCharWidth32A( + _In_ HDC hdc, + _In_ UINT iFirst, + _In_ UINT iLast, + _Out_writes_(iLast + 1 - iFirst) LPINT lpBuffer); + +BOOL +WINAPI +GetCharWidth32W( + _In_ HDC hdc, + _In_ UINT iFirst, + _In_ UINT iLast, + _Out_writes_(iLast + 1 - iFirst) LPINT lpBuffer); + +BOOL +WINAPI +GetCharWidthA( + _In_ HDC hdc, + _In_ UINT iFirst, + _In_ UINT iLast, + _Out_writes_(iLast + 1 - iFirst) LPINT lpBuffer); + +BOOL +WINAPI +GetCharWidthW( + _In_ HDC hdc, + _In_ UINT iFirst, + _In_ UINT iLast, + _Out_writes_(iLast + 1 - iFirst) LPINT lpBuffer); + +BOOL +WINAPI +GetCharWidthI( + _In_ HDC hdc, + _In_ UINT giFirst, + _In_ UINT cgi, + _In_reads_opt_(cgi) LPWORD pgi, + _Out_writes_(cgi) LPINT piWidths); + +BOOL +WINAPI +GetCharWidthFloatA( + _In_ HDC hdc, + _In_ UINT iFirst, + _In_ UINT iLast, + _Out_writes_(iLast + 1 - iFirst) PFLOAT lpBuffer); + +BOOL +WINAPI +GetCharWidthFloatW( + _In_ HDC hdc, + _In_ UINT iFirst, + _In_ UINT iLast, + _Out_writes_(iLast + 1 - iFirst) PFLOAT lpBuffer); + +int WINAPI GetClipBox(_In_ HDC, _Out_ LPRECT); +int WINAPI GetClipRgn(_In_ HDC, _In_ HRGN); +BOOL WINAPI GetColorAdjustment(_In_ HDC, _Out_ LPCOLORADJUSTMENT); +HCOLORSPACE WINAPI GetColorSpace(_In_ HDC); +HGDIOBJ WINAPI GetCurrentObject(_In_ HDC, _In_ UINT); +BOOL WINAPI GetCurrentPositionEx(_In_ HDC, _Out_ LPPOINT); HCURSOR WINAPI GetCursor(void); -BOOL WINAPI GetDCOrgEx(HDC,LPPOINT); +BOOL WINAPI GetDCOrgEx(_In_ HDC, _Out_ LPPOINT); #if (_WIN32_WINNT >= 0x0500) -COLORREF WINAPI GetDCBrushColor(HDC); -COLORREF WINAPI GetDCPenColor(HDC); +COLORREF WINAPI GetDCBrushColor(_In_ HDC); +COLORREF WINAPI GetDCPenColor(_In_ HDC); #endif -int WINAPI GetDeviceCaps(HDC,int); -BOOL WINAPI GetDeviceGammaRamp(HDC,PVOID); -UINT WINAPI GetDIBColorTable(HDC,UINT,UINT,RGBQUAD*); -int WINAPI GetDIBits(HDC,HBITMAP,UINT,UINT,PVOID,LPBITMAPINFO,UINT); -HENHMETAFILE WINAPI GetEnhMetaFileA(LPCSTR); -HENHMETAFILE WINAPI GetEnhMetaFileW(LPCWSTR); -UINT WINAPI GetEnhMetaFileBits(HENHMETAFILE,UINT,LPBYTE); -UINT WINAPI GetEnhMetaFileDescriptionA(HENHMETAFILE,UINT,LPSTR); -UINT WINAPI GetEnhMetaFileDescriptionW(HENHMETAFILE,UINT,LPWSTR); -UINT WINAPI GetEnhMetaFileHeader(HENHMETAFILE,UINT,LPENHMETAHEADER); -UINT WINAPI GetEnhMetaFilePaletteEntries(HENHMETAFILE,UINT,LPPALETTEENTRY); -UINT WINAPI GetEnhMetaFilePixelFormat(HENHMETAFILE,UINT,PIXELFORMATDESCRIPTOR*); -DWORD WINAPI GetFontData(HDC,DWORD,DWORD,PVOID,DWORD); -DWORD WINAPI GetFontLanguageInfo(HDC); +int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int); + +BOOL +WINAPI +GetDeviceGammaRamp( + _In_ HDC hdc, + _Out_writes_bytes_(3*256*2) LPVOID lpRamp); + +_Ret_range_(0,cEntries) +UINT +WINAPI +GetDIBColorTable( + _In_ HDC hdc, + _In_ UINT iStart, + _In_ UINT cEntries, + _Out_writes_to_(cEntries,return) RGBQUAD *prgbq); + +int +WINAPI +GetDIBits( + _In_ HDC hdc, + _In_ HBITMAP hbm, + _In_ UINT start, + _In_ UINT cLines, + _Out_opt_ LPVOID lpvBits, + _At_((LPBITMAPINFOHEADER)lpbmi, _Inout_) LPBITMAPINFO lpbmi, + _In_ UINT usage); + +HENHMETAFILE WINAPI GetEnhMetaFileA(_In_ LPCSTR); +HENHMETAFILE WINAPI GetEnhMetaFileW(_In_ LPCWSTR); + +UINT +WINAPI +GetEnhMetaFileBits( + _In_ HENHMETAFILE hEMF, + _In_ UINT nSize, + _Out_writes_bytes_opt_(nSize) LPBYTE lpData); + +UINT +WINAPI +GetEnhMetaFileDescriptionA( + _In_ HENHMETAFILE hemf, + _In_ UINT cchBuffer, + _Out_writes_opt_(cchBuffer) LPSTR lpDescription); + +UINT +WINAPI +GetEnhMetaFileDescriptionW( + _In_ HENHMETAFILE hemf, + _In_ UINT cchBuffer, + _Out_writes_opt_(cchBuffer) LPWSTR lpDescription); + +UINT +WINAPI +GetEnhMetaFileHeader( + _In_ HENHMETAFILE hemf, + _In_ UINT nSize, + _Out_writes_bytes_opt_(nSize) LPENHMETAHEADER lpEnhMetaHeader); + +UINT +WINAPI +GetEnhMetaFilePaletteEntries( + _In_ HENHMETAFILE hemf, + _In_ UINT nNumEntries, + _Out_writes_opt_(nNumEntries) LPPALETTEENTRY lpPaletteEntries); + +UINT +WINAPI +GetEnhMetaFilePixelFormat( + _In_ HENHMETAFILE hemf, + _In_ UINT cbBuffer, + _Out_writes_bytes_opt_(cbBuffer) PIXELFORMATDESCRIPTOR *ppfd); + +_Success_(return != GDI_ERROR) +DWORD +WINAPI +GetFontData( + _In_ HDC hdc, + _In_ DWORD dwTable, + _In_ DWORD dwOffset, + _Out_writes_bytes_to_opt_(cjBuffer, return) PVOID pvBuffer, + _In_ DWORD cjBuffer); + +DWORD WINAPI GetFontLanguageInfo(_In_ HDC); #if (_WIN32_WINNT >= 0x0500) -DWORD WINAPI GetFontUnicodeRanges(HDC,LPGLYPHSET); +DWORD WINAPI GetFontUnicodeRanges(_In_ HDC, _Out_opt_ LPGLYPHSET); #endif -DWORD WINAPI GetGlyphIndicesA(HDC,LPCSTR,INT,LPWORD,DWORD); -DWORD WINAPI GetGlyphIndicesW(HDC,LPCWSTR,INT,LPWORD,DWORD); -DWORD WINAPI GetGlyphOutlineA(HDC,UINT,UINT,LPGLYPHMETRICS,DWORD,PVOID,const MAT2*); -DWORD WINAPI GetGlyphOutlineW(HDC,UINT,UINT,LPGLYPHMETRICS,DWORD,PVOID,const MAT2*); -int WINAPI GetGraphicsMode(HDC); -BOOL WINAPI GetICMProfileA(HDC,LPDWORD,LPSTR); -BOOL WINAPI GetICMProfileW(HDC,LPDWORD,LPWSTR); -DWORD WINAPI GetKerningPairsA(HDC,DWORD,LPKERNINGPAIR); -DWORD WINAPI GetKerningPairsW(HDC,DWORD,LPKERNINGPAIR); -BOOL WINAPI GetLogColorSpaceA(HCOLORSPACE,LPLOGCOLORSPACEA,DWORD); -BOOL WINAPI GetLogColorSpaceW(HCOLORSPACE,LPLOGCOLORSPACEW,DWORD); -int WINAPI GetMapMode(HDC); -HMETAFILE WINAPI GetMetaFileA(LPCSTR); -HMETAFILE WINAPI GetMetaFileW(LPCWSTR); -UINT WINAPI GetMetaFileBitsEx(HMETAFILE,UINT,PVOID); -int WINAPI GetMetaRgn(HDC,HRGN); -BOOL WINAPI GetMiterLimit(HDC,PFLOAT); -COLORREF WINAPI GetNearestColor(HDC,COLORREF); -UINT WINAPI GetNearestPaletteIndex(HPALETTE,COLORREF); -int WINAPI GetObjectA(HGDIOBJ,int,PVOID); -int WINAPI GetObjectW(HGDIOBJ,int,PVOID); -DWORD WINAPI GetObjectType(HGDIOBJ); -UINT WINAPI GetOutlineTextMetricsA(HDC,UINT,LPOUTLINETEXTMETRICA); -UINT WINAPI GetOutlineTextMetricsW(HDC,UINT,LPOUTLINETEXTMETRICW); -UINT WINAPI GetPaletteEntries(HPALETTE,UINT,UINT,LPPALETTEENTRY); -int WINAPI GetPath(HDC,LPPOINT,PBYTE,int); -COLORREF WINAPI GetPixel(HDC,int,int); -int WINAPI GetPixelFormat(HDC); -int WINAPI GetPolyFillMode(HDC); -BOOL WINAPI GetRasterizerCaps(LPRASTERIZER_STATUS,UINT); -int WINAPI GetRandomRgn (HDC,HRGN,INT); -DWORD WINAPI GetRegionData(HRGN,DWORD,LPRGNDATA); -int WINAPI GetRgnBox(HRGN,LPRECT); -int WINAPI GetROP2(HDC); -HGDIOBJ WINAPI GetStockObject(int); -int WINAPI GetStretchBltMode(HDC); -UINT WINAPI GetSystemPaletteEntries(HDC,UINT,UINT,LPPALETTEENTRY); -UINT WINAPI GetSystemPaletteUse(HDC); -UINT WINAPI GetTextAlign(HDC); -int WINAPI GetTextCharacterExtra(HDC); -int WINAPI GetTextCharset(HDC); -int WINAPI GetTextCharsetInfo(HDC,LPFONTSIGNATURE,DWORD); -COLORREF WINAPI GetTextColor(HDC); -BOOL WINAPI GetTextExtentExPointA(HDC,LPCSTR,int,int,LPINT,LPINT,LPSIZE); -BOOL WINAPI GetTextExtentExPointW(HDC,LPCWSTR,int,int,LPINT,LPINT,LPSIZE); -BOOL WINAPI GetTextExtentExPointI(HDC,LPWORD,int,int,LPINT,LPINT,LPSIZE); -BOOL WINAPI GetTextExtentPointA(HDC,LPCSTR,int,LPSIZE); -BOOL WINAPI GetTextExtentPointW(HDC,LPCWSTR,int,LPSIZE); -BOOL WINAPI GetTextExtentPointI(HDC,LPWORD,int,LPSIZE); -BOOL WINAPI GetTextExtentPoint32A(HDC,LPCSTR,int,LPSIZE); -BOOL WINAPI GetTextExtentPoint32W( HDC,LPCWSTR,int,LPSIZE); -int WINAPI GetTextFaceA(HDC,int,LPSTR); -int WINAPI GetTextFaceW(HDC,int,LPWSTR); -BOOL WINAPI GetTextMetricsA(HDC,LPTEXTMETRICA); -BOOL WINAPI GetTextMetricsW(HDC,LPTEXTMETRICW); + +DWORD +WINAPI +GetGlyphIndicesA( + _In_ HDC hdc, + _In_reads_(c) LPCSTR lpstr, + _In_ int c, + _Out_writes_(c) LPWORD pgi, + _In_ DWORD fl); + +DWORD +WINAPI +GetGlyphIndicesW( + _In_ HDC hdc, + _In_reads_(c) LPCWSTR lpstr, + _In_ int c, + _Out_writes_(c) LPWORD pgi, + _In_ DWORD fl); + +DWORD +WINAPI +GetGlyphOutlineA( + _In_ HDC hdc, + _In_ UINT uChar, + _In_ UINT fuFormat, + _Out_ LPGLYPHMETRICS lpgm, + _In_ DWORD cjBuffer, + _Out_writes_bytes_opt_(cjBuffer) LPVOID pvBuffer, + _In_ CONST MAT2 *lpmat2); + +DWORD +WINAPI +GetGlyphOutlineW( + _In_ HDC hdc, + _In_ UINT uChar, + _In_ UINT fuFormat, + _Out_ LPGLYPHMETRICS lpgm, + _In_ DWORD cjBuffer, + _Out_writes_bytes_opt_(cjBuffer) LPVOID pvBuffer, + _In_ CONST MAT2 *lpmat2); + +int WINAPI GetGraphicsMode(_In_ HDC); + +BOOL +WINAPI +GetICMProfileA( + _In_ HDC hdc, + _Inout_ LPDWORD pBufSize, + _Out_writes_opt_(*pBufSize) LPSTR pszFilename); + +BOOL +WINAPI +GetICMProfileW( + _In_ HDC hdc, + _Inout_ LPDWORD pBufSize, + _Out_writes_opt_(*pBufSize) LPWSTR pszFilename); + +DWORD +WINAPI +GetKerningPairsA( + _In_ HDC hdc, + _In_ DWORD nPairs, + _Out_writes_to_opt_(nPairs, return) LPKERNINGPAIR lpKernPair); + +DWORD +WINAPI +GetKerningPairsW( + _In_ HDC hdc, + _In_ DWORD nPairs, + _Out_writes_to_opt_(nPairs, return) LPKERNINGPAIR lpKernPair); + +BOOL +WINAPI +GetLogColorSpaceA( + _In_ HCOLORSPACE hColorSpace, + _Out_writes_bytes_(nSize) LPLOGCOLORSPACEA lpBuffer, + _In_ DWORD nSize); + +BOOL +WINAPI +GetLogColorSpaceW( + _In_ HCOLORSPACE hColorSpace, + _Out_writes_bytes_(nSize) LPLOGCOLORSPACEW lpBuffer, + _In_ DWORD nSize); + +int WINAPI GetMapMode(_In_ HDC); +HMETAFILE WINAPI GetMetaFileA(_In_ LPCSTR); +HMETAFILE WINAPI GetMetaFileW(_In_ LPCWSTR); + +UINT +WINAPI +GetMetaFileBitsEx( + _In_ HMETAFILE hMF, + _In_ UINT cbBuffer, + _Out_writes_bytes_opt_(cbBuffer) LPVOID lpData); + +int WINAPI GetMetaRgn(_In_ HDC, _In_ HRGN); +BOOL WINAPI GetMiterLimit(_In_ HDC, _Out_ PFLOAT); +COLORREF WINAPI GetNearestColor(_In_ HDC, _In_ COLORREF); +UINT WINAPI GetNearestPaletteIndex(_In_ HPALETTE, _In_ COLORREF); + +int +WINAPI +GetObjectA( + _In_ HANDLE h, + _In_ int c, + _Out_writes_bytes_opt_(c) LPVOID pv); + +int +WINAPI +GetObjectW( + _In_ HANDLE h, + _In_ int c, + _Out_writes_bytes_opt_(c) LPVOID pv); + +DWORD WINAPI GetObjectType(_In_ HGDIOBJ); + +UINT +WINAPI +GetOutlineTextMetricsA( + _In_ HDC hdc, + _In_ UINT cjCopy, + _Out_writes_bytes_opt_(cjCopy) LPOUTLINETEXTMETRICA potm); + +UINT +WINAPI +GetOutlineTextMetricsW( + _In_ HDC hdc, + _In_ UINT cjCopy, + _Out_writes_bytes_opt_(cjCopy) LPOUTLINETEXTMETRICW potm); + +_Ret_range_(0,cEntries) +UINT +WINAPI +GetPaletteEntries( + _In_ HPALETTE hpal, + _In_ UINT iStart, + _In_ UINT cEntries, + _Out_writes_to_opt_(cEntries,return) LPPALETTEENTRY pPalEntries); + +int +WINAPI +GetPath( + _In_ HDC hdc, + _Out_writes_opt_(cpt) LPPOINT apt, + _Out_writes_opt_(cpt) LPBYTE aj, + int cpt); + +COLORREF WINAPI GetPixel(_In_ HDC, _In_ int, _In_ int); +int WINAPI GetPixelFormat(_In_ HDC); +int WINAPI GetPolyFillMode(_In_ HDC); + +BOOL +WINAPI +GetRasterizerCaps( + _Out_writes_bytes_(cjBytes) LPRASTERIZER_STATUS lpraststat, + _In_ UINT cjBytes); + +int WINAPI GetRandomRgn(_In_ HDC, _In_ HRGN, _In_ INT); + +DWORD +WINAPI +GetRegionData( + _In_ HRGN hrgn, + _In_ DWORD nCount, + _Out_writes_bytes_to_opt_(nCount, return) LPRGNDATA lpRgnData); + +int WINAPI GetRgnBox(_In_ HRGN, _Out_ LPRECT); +int WINAPI GetROP2(_In_ HDC); +HGDIOBJ WINAPI GetStockObject(_In_ int); +int WINAPI GetStretchBltMode(_In_ HDC); + +UINT +WINAPI +GetSystemPaletteEntries( + _In_ HDC hdc, + _In_ UINT iStart, + _In_ UINT cEntries, + _Out_writes_opt_(cEntries) LPPALETTEENTRY pPalEntries); + +UINT WINAPI GetSystemPaletteUse(_In_ HDC); +UINT WINAPI GetTextAlign(_In_ HDC); +int WINAPI GetTextCharacterExtra(_In_ HDC); +int WINAPI GetTextCharset(_In_ HDC); +int WINAPI GetTextCharsetInfo(_In_ HDC, _Out_opt_ LPFONTSIGNATURE, _In_ DWORD); +COLORREF WINAPI GetTextColor(_In_ HDC); + +BOOL +WINAPI +GetTextExtentExPointA( + _In_ HDC hdc, + _In_reads_(cchString) LPCSTR lpszString, + _In_ int cchString, + _In_ int nMaxExtent, + _Out_opt_ LPINT lpnFit, + _Out_writes_to_opt_ (cchString, *lpnFit) LPINT lpnDx, + _Out_ LPSIZE lpSize); + +BOOL +WINAPI +GetTextExtentExPointW( + _In_ HDC hdc, + _In_reads_(cchString) LPCWSTR lpszString, + _In_ int cchString, + _In_ int nMaxExtent, + _Out_opt_ LPINT lpnFit, + _Out_writes_to_opt_ (cchString, *lpnFit) LPINT lpnDx, + _Out_ LPSIZE lpSize); + +BOOL +WINAPI +GetTextExtentExPointI( + _In_ HDC hdc, + _In_reads_(cwchString) LPWORD lpwszString, + _In_ int cwchString, + _In_ int nMaxExtent, + _Out_opt_ LPINT lpnFit, + _Out_writes_to_opt_(cwchString, *lpnFit) LPINT lpnDx, + _Out_ LPSIZE lpSize); + +BOOL +WINAPI +GetTextExtentPointA( + _In_ HDC hdc, + _In_reads_(c) LPCSTR lpString, + _In_ int c, + _Out_ LPSIZE lpsz); + +BOOL +WINAPI +GetTextExtentPointW( + _In_ HDC hdc, + _In_reads_(c) LPCWSTR lpString, + _In_ int c, + _Out_ LPSIZE lpsz); + +BOOL +WINAPI +GetTextExtentPointI( + _In_ HDC hdc, + _In_reads_(cgi) LPWORD pgiIn, + _In_ int cgi, + _Out_ LPSIZE psize); + +BOOL +WINAPI +GetTextExtentPoint32A( + _In_ HDC hdc, + _In_reads_(c) LPCSTR lpString, + _In_ int c, + _Out_ LPSIZE psizl); + +BOOL +WINAPI +GetTextExtentPoint32W( + _In_ HDC hdc, + _In_reads_(c) LPCWSTR lpString, + _In_ int c, + _Out_ LPSIZE psizl); + +int +WINAPI +GetTextFaceA( + _In_ HDC hdc, + _In_ int c, + _Out_writes_to_opt_(c, return) LPSTR lpName); + +int +WINAPI +GetTextFaceW( + _In_ HDC hdc, + _In_ int c, + _Out_writes_to_opt_(c, return) LPWSTR lpName); + +BOOL WINAPI GetTextMetricsA(_In_ HDC, _Out_ LPTEXTMETRICA); +BOOL WINAPI GetTextMetricsW(_In_ HDC, _Out_ LPTEXTMETRICW); BOOL WINAPI GetTransform(HDC,DWORD,XFORM*); -BOOL WINAPI GetViewportExtEx(HDC,LPSIZE); -BOOL WINAPI GetViewportOrgEx(HDC,LPPOINT); -BOOL WINAPI GetWindowExtEx(HDC,LPSIZE); -BOOL WINAPI GetWindowOrgEx(HDC,LPPOINT); -UINT WINAPI GetWinMetaFileBits(HENHMETAFILE,UINT,LPBYTE,INT,HDC); -BOOL WINAPI GetWorldTransform(HDC,LPXFORM); -int WINAPI IntersectClipRect(HDC,int,int,int,int); -BOOL WINAPI InvertRgn(HDC,HRGN); -BOOL WINAPI LineDDA(int,int,int,int,LINEDDAPROC,LPARAM); -BOOL WINAPI LineTo(HDC,int,int); -BOOL WINAPI LPtoDP(HDC,LPPOINT,int); -BOOL WINAPI MaskBlt(HDC,int,int,int,int,HDC,int,int,HBITMAP,int,int,DWORD); -BOOL WINAPI ModifyWorldTransform(HDC,const XFORM*,DWORD); -BOOL WINAPI MoveToEx(HDC,int,int,LPPOINT); -int WINAPI OffsetClipRgn(HDC,int,int); -int WINAPI OffsetRgn(HRGN,int,int); -BOOL WINAPI OffsetViewportOrgEx(HDC,int,int,LPPOINT); -BOOL WINAPI OffsetWindowOrgEx(HDC,int,int,LPPOINT); -BOOL WINAPI PaintRgn(HDC,HRGN); -BOOL WINAPI PatBlt(HDC,int,int,int,int,DWORD); -HRGN WINAPI PathToRegion(HDC); -BOOL WINAPI Pie(HDC,int,int,int,int,int,int,int,int); -BOOL WINAPI PlayEnhMetaFile(HDC,HENHMETAFILE,LPCRECT); -BOOL WINAPI PlayEnhMetaFileRecord(HDC,LPHANDLETABLE,const ENHMETARECORD*,UINT); -BOOL WINAPI PlayMetaFile(HDC,HMETAFILE); -BOOL WINAPI PlayMetaFileRecord(HDC,LPHANDLETABLE,LPMETARECORD,UINT); -BOOL WINAPI PlgBlt(HDC,const POINT*,HDC,int,int,int,int,HBITMAP,int,int); -BOOL WINAPI PolyBezier(HDC,const POINT*,DWORD); -BOOL WINAPI PolyBezierTo(HDC,const POINT*,DWORD); -BOOL WINAPI PolyDraw(HDC,const POINT*,const BYTE*,int); -BOOL WINAPI Polygon(HDC,const POINT*,int); -BOOL WINAPI Polyline(HDC,const POINT*,int); -BOOL WINAPI PolylineTo(HDC,const POINT*,DWORD); -BOOL WINAPI PolyPolygon(HDC,const POINT*,const INT*,int); -BOOL WINAPI PolyPolyline(HDC,const POINT*,const DWORD*,DWORD); -BOOL WINAPI PolyTextOutA(HDC,const POLYTEXTA*,int); -BOOL WINAPI PolyTextOutW(HDC,const POLYTEXTW*,int); -BOOL WINAPI PtInRegion(HRGN,int,int); -BOOL WINAPI PtVisible(HDC,int,int); -UINT WINAPI RealizePalette(HDC); -BOOL WINAPI Rectangle(HDC,int,int,int,int); -BOOL WINAPI RectInRegion(HRGN,LPCRECT); -BOOL WINAPI RectVisible(HDC,LPCRECT); -BOOL WINAPI RemoveFontResourceA(LPCSTR); -BOOL WINAPI RemoveFontResourceW(LPCWSTR); +BOOL WINAPI GetViewportExtEx(_In_ HDC, _Out_ LPSIZE); +BOOL WINAPI GetViewportOrgEx(_In_ HDC, _Out_ LPPOINT); +BOOL WINAPI GetWindowExtEx(_In_ HDC, _Out_ LPSIZE); +BOOL WINAPI GetWindowOrgEx(_In_ HDC, _Out_ LPPOINT); + +UINT +WINAPI +GetWinMetaFileBits( + _In_ HENHMETAFILE hemf, + _In_ UINT cbData16, + _Out_writes_bytes_opt_(cbData16) LPBYTE pData16, + _In_ INT iMapMode, + _In_ HDC hdcRef); + +BOOL WINAPI GetWorldTransform(_In_ HDC, _Out_ LPXFORM); +int WINAPI IntersectClipRect(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int); +BOOL WINAPI InvertRgn(_In_ HDC, _In_ HRGN); +BOOL WINAPI LineDDA(_In_ int, _In_ int, _In_ int, _In_ int, _In_ LINEDDAPROC, _In_opt_ LPARAM); +BOOL WINAPI LineTo(_In_ HDC, _In_ int, _In_ int); + +BOOL +WINAPI +LPtoDP( + _In_ HDC hdc, + _Inout_updates_(c) LPPOINT lppt, + _In_ int c); + +BOOL WINAPI MaskBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ HDC, _In_ int, _In_ int, _In_ HBITMAP, _In_ int, _In_ int, _In_ DWORD); +BOOL WINAPI ModifyWorldTransform(_In_ HDC, _In_opt_ const XFORM*, _In_ DWORD); +BOOL WINAPI MoveToEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT); +int WINAPI OffsetClipRgn(_In_ HDC, _In_ int, _In_ int); +int WINAPI OffsetRgn(_In_ HRGN, _In_ int, _In_ int); +BOOL WINAPI OffsetViewportOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT); +BOOL WINAPI OffsetWindowOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT); +BOOL WINAPI PaintRgn(_In_ HDC, _In_ HRGN); +BOOL WINAPI PatBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD); +HRGN WINAPI PathToRegion(_In_ HDC); +BOOL WINAPI Pie(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int); +BOOL WINAPI PlayEnhMetaFile(_In_ HDC, _In_ HENHMETAFILE, _In_ LPCRECT); + +BOOL +WINAPI +PlayEnhMetaFileRecord( + _In_ HDC hdc, + _In_reads_(cht) LPHANDLETABLE pht, + _In_ CONST ENHMETARECORD *pmr, + _In_ UINT cht); + +BOOL WINAPI PlayMetaFile(_In_ HDC, _In_ HMETAFILE); + +BOOL +WINAPI +PlayMetaFileRecord( + _In_ HDC hdc, + _In_reads_(noObjs) LPHANDLETABLE lpHandleTable, + _In_ LPMETARECORD lpMR, + _In_ UINT noObjs); + +BOOL +WINAPI +PlgBlt( + _In_ HDC hdcDest, + _In_reads_(3) const POINT *lpPoint, + _In_ HDC hdcSrc, + _In_ int xSrc, + _In_ int ySrc, + _In_ int width, + _In_ int height, + _In_opt_ HBITMAP hbmMask, + _In_ int xMask, + _In_ int yMask); + +BOOL +WINAPI +PolyBezier( + _In_ HDC hdc, + _In_reads_(cpt) const POINT *apt, + _In_ DWORD cpt); + +BOOL +WINAPI +PolyBezierTo( + _In_ HDC hdc, + _In_reads_(cpt) const POINT *apt, + _In_ DWORD cpt); + +BOOL +WINAPI +PolyDraw( + _In_ HDC hdc, + _In_reads_(cpt) const POINT * apt, + _In_reads_(cpt) const BYTE * aj, + _In_ int cpt); + +BOOL +WINAPI +Polygon( + _In_ HDC hdc, + _In_reads_(cpt) const POINT *apt, + _In_ int cpt); + +BOOL +WINAPI +Polyline( + _In_ HDC hdc, + _In_reads_(cpt) const POINT *apt, + _In_ int cpt); + +BOOL +WINAPI +PolylineTo( + _In_ HDC hdc, + _In_reads_(cpt) const POINT *apt, + _In_ DWORD cpt); + +BOOL +WINAPI +PolyPolygon( + _In_ HDC hdc, + _In_ const POINT *apt, + _In_reads_(csz) const INT *asz, + _In_ int csz); + +BOOL +WINAPI +PolyPolyline( + _In_ HDC hdc, + _In_ const POINT *apt, + _In_reads_(csz) const DWORD *asz, + _In_ DWORD csz); + +BOOL +WINAPI +PolyTextOutA( + _In_ HDC hdc, + _In_reads_(nstrings) const POLYTEXTA *ppt, + _In_ int nstrings); + +BOOL +WINAPI +PolyTextOutW( + _In_ HDC hdc, + _In_reads_(nstrings) const POLYTEXTW *ppt, + _In_ int nstrings); + +BOOL WINAPI PtInRegion(_In_ HRGN, _In_ int, _In_ int); +BOOL WINAPI PtVisible(_In_ HDC, _In_ int, _In_ int); +UINT WINAPI RealizePalette(_In_ HDC); +BOOL WINAPI Rectangle(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int); +BOOL WINAPI RectInRegion(_In_ HRGN, _In_ LPCRECT); +BOOL WINAPI RectVisible(_In_ HDC, _In_ LPCRECT); +BOOL WINAPI RemoveFontResourceA(_In_ LPCSTR); +BOOL WINAPI RemoveFontResourceW(_In_ LPCWSTR); #if (_WIN32_WINNT >= 0x0500) -BOOL WINAPI RemoveFontMemResourceEx(HANDLE); -BOOL WINAPI RemoveFontResourceExA(LPCSTR,DWORD,PVOID); -BOOL WINAPI RemoveFontResourceExW(LPCWSTR,DWORD,PVOID); +BOOL WINAPI RemoveFontMemResourceEx(_In_ HANDLE); +BOOL WINAPI RemoveFontResourceExA(_In_ LPCSTR, _In_ DWORD, _Reserved_ PVOID); +BOOL WINAPI RemoveFontResourceExW(_In_ LPCWSTR, _In_ DWORD, _Reserved_ PVOID); #endif -HDC WINAPI ResetDCA(HDC,const DEVMODEA*); -HDC WINAPI ResetDCW(HDC,const DEVMODEW*); -BOOL WINAPI ResizePalette(HPALETTE,UINT); -BOOL WINAPI RestoreDC(HDC,int); -BOOL WINAPI RoundRect(HDC,int,int,int,int,int,int); -int WINAPI SaveDC(HDC); -BOOL WINAPI ScaleViewportExtEx(HDC,int,int,int,int,LPSIZE); -BOOL WINAPI ScaleWindowExtEx(HDC,int,int,int,int,LPSIZE); -BOOL WINAPI SelectClipPath(HDC,int); -int WINAPI SelectClipRgn(HDC,HRGN); -HGDIOBJ WINAPI SelectObject(HDC,HGDIOBJ); -HPALETTE WINAPI SelectPalette(HDC,HPALETTE,BOOL); -int WINAPI SetAbortProc(HDC,ABORTPROC); -int WINAPI SetArcDirection(HDC,int); -LONG WINAPI SetBitmapBits(HBITMAP,DWORD,CONST VOID*); -BOOL WINAPI SetBitmapDimensionEx(HBITMAP,int,int,LPSIZE); -COLORREF WINAPI SetBkColor(HDC,COLORREF); -int WINAPI SetBkMode(HDC,int); -UINT WINAPI SetBoundsRect(HDC,LPCRECT,UINT); -BOOL WINAPI SetBrushOrgEx(HDC,int,int,LPPOINT); -BOOL WINAPI SetColorAdjustment(HDC,const COLORADJUSTMENT*); -HCOLORSPACE WINAPI SetColorSpace(HDC,HCOLORSPACE); +HDC WINAPI ResetDCA(_In_ HDC, _In_ const DEVMODEA*); +HDC WINAPI ResetDCW(_In_ HDC, _In_ const DEVMODEW*); +BOOL WINAPI ResizePalette(_In_ HPALETTE, _In_ UINT); +BOOL WINAPI RestoreDC(_In_ HDC, _In_ int); +BOOL WINAPI RoundRect(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int); +int WINAPI SaveDC(_In_ HDC); +BOOL WINAPI ScaleViewportExtEx(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _Out_opt_ LPSIZE); +BOOL WINAPI ScaleWindowExtEx(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _Out_opt_ LPSIZE); +BOOL WINAPI SelectClipPath(_In_ HDC, _In_ int); +int WINAPI SelectClipRgn(_In_ HDC, _In_opt_ HRGN); +HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ); +HPALETTE WINAPI SelectPalette(_In_ HDC, _In_ HPALETTE, _In_ BOOL); +int WINAPI SetAbortProc(_In_ HDC, _In_ ABORTPROC); +int WINAPI SetArcDirection(_In_ HDC, _In_ int); + +LONG +WINAPI +SetBitmapBits( + _In_ HBITMAP hbm, + _In_ DWORD cb, + _In_reads_bytes_(cb) CONST VOID *pvBits); + +BOOL WINAPI SetBitmapDimensionEx(_In_ HBITMAP, _In_ int, _In_ int, _Out_opt_ LPSIZE); +COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF); +int WINAPI SetBkMode(_In_ HDC, _In_ int); +UINT WINAPI SetBoundsRect(_In_ HDC, _In_opt_ LPCRECT, _In_ UINT); +BOOL WINAPI SetBrushOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT); +BOOL WINAPI SetColorAdjustment(_In_ HDC, _In_ const COLORADJUSTMENT*); +HCOLORSPACE WINAPI SetColorSpace(_In_ HDC, _In_ HCOLORSPACE); #if (_WIN32_WINNT >= 0x0500) -COLORREF WINAPI SetDCBrushColor(HDC,COLORREF); -COLORREF WINAPI SetDCPenColor(HDC,COLORREF); +COLORREF WINAPI SetDCBrushColor(_In_ HDC, _In_ COLORREF); +COLORREF WINAPI SetDCPenColor(_In_ HDC, _In_ COLORREF); #endif -BOOL WINAPI SetDeviceGammaRamp(HDC,PVOID); -UINT WINAPI SetDIBColorTable(HDC,UINT,UINT,const RGBQUAD*); -int WINAPI SetDIBits(HDC,HBITMAP,UINT,UINT,CONST VOID*,CONST BITMAPINFO*,UINT); -int WINAPI SetDIBitsToDevice(HDC,int,int,DWORD,DWORD,int,int,UINT,UINT,CONST VOID*,CONST BITMAPINFO*,UINT); -HENHMETAFILE WINAPI SetEnhMetaFileBits(UINT,const BYTE*); -int WINAPI SetGraphicsMode(HDC,int); -int WINAPI SetICMMode(HDC,int); -BOOL WINAPI SetICMProfileA(HDC,LPSTR); -BOOL WINAPI SetICMProfileW(HDC,LPWSTR); -int WINAPI SetMapMode(HDC,int); -DWORD WINAPI SetMapperFlags(HDC,DWORD); + +BOOL +WINAPI +SetDeviceGammaRamp( + _In_ HDC hdc, + _In_reads_bytes_(3*256*2) LPVOID lpRamp); + +UINT +WINAPI +SetDIBColorTable( + _In_ HDC hdc, + _In_ UINT iStart, + _In_ UINT cEntries, + _In_reads_(cEntries) const RGBQUAD *prgbq); + +int WINAPI SetDIBits(_In_opt_ HDC, _In_ HBITMAP, _In_ UINT, _In_ UINT, _In_ CONST VOID*, _In_ CONST BITMAPINFO*, _In_ UINT); +int WINAPI SetDIBitsToDevice(_In_ HDC, _In_ int, _In_ int, _In_ DWORD, _In_ DWORD, _In_ int, _In_ int, _In_ UINT, _In_ UINT, _In_ CONST VOID*, _In_ CONST BITMAPINFO*, _In_ UINT); + +HENHMETAFILE +WINAPI +SetEnhMetaFileBits( + _In_ UINT nSize, + _In_reads_bytes_(nSize) const BYTE * pb); + +int WINAPI SetGraphicsMode(_In_ HDC, _In_ int); +int WINAPI SetICMMode(_In_ HDC, _In_ int); +BOOL WINAPI SetICMProfileA(_In_ HDC, _In_ LPSTR); +BOOL WINAPI SetICMProfileW(_In_ HDC, _In_ LPWSTR); +int WINAPI SetMapMode(_In_ HDC, _In_ int); +DWORD WINAPI SetMapperFlags(_In_ HDC, _In_ DWORD); #if (_WIN32_WINNT >= 0x0500) -DWORD WINAPI SetLayout(HDC,DWORD); -DWORD WINAPI GetLayout(HDC); +DWORD WINAPI SetLayout(_In_ HDC, _In_ DWORD); +DWORD WINAPI GetLayout(_In_ HDC); #endif -HMETAFILE WINAPI SetMetaFileBitsEx(UINT,const BYTE *); -int WINAPI SetMetaRgn(HDC); -BOOL WINAPI SetMiterLimit(HDC,FLOAT,PFLOAT); -UINT WINAPI SetPaletteEntries(HPALETTE,UINT,UINT,const PALETTEENTRY*); -COLORREF WINAPI SetPixel(HDC,int,int,COLORREF); -BOOL WINAPI SetPixelFormat(HDC,int,const PIXELFORMATDESCRIPTOR*); -BOOL WINAPI SetPixelV(HDC,int,int,COLORREF); -int WINAPI SetPolyFillMode(HDC,int); -BOOL WINAPI SetRectRgn(HRGN,int,int,int,int); + +HMETAFILE +WINAPI +SetMetaFileBitsEx( + _In_ UINT cbBuffer, + _In_reads_bytes_(cbBuffer) CONST BYTE *lpData); + +int WINAPI SetMetaRgn(_In_ HDC); +BOOL WINAPI SetMiterLimit(_In_ HDC, _In_ FLOAT, _Out_opt_ PFLOAT); + +UINT +WINAPI +SetPaletteEntries( + _In_ HPALETTE hpal, + _In_ UINT iStart, + _In_ UINT cEntries, + _In_reads_(cEntries) CONST PALETTEENTRY *pPalEntries); + +COLORREF WINAPI SetPixel(_In_ HDC, _In_ int, _In_ int, _In_ COLORREF); +BOOL WINAPI SetPixelFormat(_In_ HDC, _In_ int, _In_ const PIXELFORMATDESCRIPTOR*); +BOOL WINAPI SetPixelV(_In_ HDC, _In_ int, _In_ int, _In_ COLORREF); +int WINAPI SetPolyFillMode(_In_ HDC, _In_ int); +BOOL WINAPI SetRectRgn(_In_ HRGN, _In_ int, _In_ int, _In_ int, _In_ int); INT WINAPI SetRelAbs(HDC,INT); -int WINAPI SetROP2(HDC,int); -int WINAPI SetStretchBltMode(HDC,int); -UINT WINAPI SetSystemPaletteUse(HDC,UINT); -UINT WINAPI SetTextAlign(HDC,UINT); -int WINAPI SetTextCharacterExtra(HDC,int); -COLORREF WINAPI SetTextColor(HDC,COLORREF); -BOOL WINAPI SetTextJustification(HDC,int,int); -BOOL WINAPI SetViewportExtEx(HDC,int,int,LPSIZE); -BOOL WINAPI SetViewportOrgEx(HDC,int,int,LPPOINT); -BOOL WINAPI SetWindowExtEx(HDC,int,int,LPSIZE); -BOOL WINAPI SetWindowOrgEx(HDC,int,int,LPPOINT); -HENHMETAFILE WINAPI SetWinMetaFileBits(UINT,const BYTE*,HDC,const METAFILEPICT*); -BOOL WINAPI SetWorldTransform(HDC,const XFORM *); -int WINAPI StartDocA(HDC,const DOCINFOA*); -int WINAPI StartDocW(HDC,const DOCINFOW*); -int WINAPI StartPage(HDC); -BOOL WINAPI StretchBlt(HDC,int,int,int,int,HDC,int,int,int,int,DWORD); -int WINAPI StretchDIBits(HDC,int,int,int,int,int,int,int,int,const VOID *,const BITMAPINFO *,UINT,DWORD); -BOOL WINAPI StrokeAndFillPath(HDC); -BOOL WINAPI StrokePath(HDC); +int WINAPI SetROP2(_In_ HDC, _In_ int); +int WINAPI SetStretchBltMode(_In_ HDC, _In_ int); +UINT WINAPI SetSystemPaletteUse(_In_ HDC, _In_ UINT); +UINT WINAPI SetTextAlign(_In_ HDC, _In_ UINT); +int WINAPI SetTextCharacterExtra(_In_ HDC, _In_ int); +COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF); +BOOL WINAPI SetTextJustification(_In_ HDC, _In_ int, _In_ int); +BOOL WINAPI SetViewportExtEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPSIZE); +BOOL WINAPI SetViewportOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT); +BOOL WINAPI SetWindowExtEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPSIZE); +BOOL WINAPI SetWindowOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT); + +HENHMETAFILE +WINAPI +SetWinMetaFileBits( + _In_ UINT nSize, + _In_reads_bytes_(nSize) const BYTE *lpMeta16Data, + _In_opt_ HDC hdcRef, + _In_opt_ const METAFILEPICT *lpMFP); + +BOOL WINAPI SetWorldTransform(_In_ HDC, _In_ const XFORM *); +int WINAPI StartDocA(_In_ HDC, _In_ const DOCINFOA*); +int WINAPI StartDocW(_In_ HDC, _In_ const DOCINFOW*); +int WINAPI StartPage(_In_ HDC); +BOOL WINAPI StretchBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD); +int WINAPI StretchDIBits(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ const VOID *, _In_ const BITMAPINFO *, _In_ UINT, _In_ DWORD); +BOOL WINAPI StrokeAndFillPath(_In_ HDC); +BOOL WINAPI StrokePath(_In_ HDC); BOOL WINAPI SwapBuffers(HDC); -BOOL WINAPI TextOutA(HDC,int,int,LPCSTR,int); -BOOL WINAPI TextOutW(HDC,int,int,LPCWSTR,int); -BOOL WINAPI TranslateCharsetInfo(PDWORD,LPCHARSETINFO,DWORD); -BOOL WINAPI UnrealizeObject(HGDIOBJ); -BOOL WINAPI UpdateColors(HDC); -BOOL WINAPI UpdateICMRegKeyA(DWORD,LPSTR,LPSTR,UINT); -BOOL WINAPI UpdateICMRegKeyW(DWORD,LPWSTR,LPWSTR,UINT); -BOOL WINAPI WidenPath(HDC); + +BOOL +WINAPI +TextOutA( + _In_ HDC hdc, + _In_ int x, + _In_ int y, + _In_reads_(c) LPCSTR lpString, + _In_ int c); + +BOOL +WINAPI +TextOutW( + _In_ HDC hdc, + _In_ int x, + _In_ int y, + _In_reads_(c) LPCWSTR lpString, + _In_ int c); + +BOOL WINAPI TranslateCharsetInfo(_Inout_ PDWORD, _Out_ LPCHARSETINFO, _In_ DWORD); +BOOL WINAPI UnrealizeObject(_In_ HGDIOBJ); +BOOL WINAPI UpdateColors(_In_ HDC); +BOOL WINAPI UpdateICMRegKeyA(_Reserved_ DWORD, _In_ LPSTR, _In_ LPSTR, _In_ UINT); +BOOL WINAPI UpdateICMRegKeyW(_Reserved_ DWORD, _In_ LPWSTR, _In_ LPWSTR, _In_ UINT); +BOOL WINAPI WidenPath(_In_ HDC); BOOL WINAPI wglCopyContext(HGLRC,HGLRC,UINT); HGLRC WINAPI wglCreateContext(HDC); HGLRC WINAPI wglCreateLayerContext(HDC,int); @@ -3274,9 +4037,21 @@ BOOL WINAPI wglUseFontOutlinesA(HDC,DWORD,DWORD,DWORD,FLOAT,FLOAT,int,LPGLYPHMET BOOL WINAPI wglUseFontOutlinesW(HDC,DWORD,DWORD,DWORD,FLOAT,FLOAT,int,LPGLYPHMETRICSFLOAT); #if (WINVER>= 0x0500) -BOOL WINAPI AlphaBlend(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION); -BOOL WINAPI GradientFill(HDC,PTRIVERTEX,ULONG,PVOID,ULONG,ULONG); -BOOL WINAPI TransparentBlt(HDC,int,int,int,int,HDC,int,int,int,int,UINT); + +BOOL WINAPI AlphaBlend(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BLENDFUNCTION); + +BOOL +WINAPI +GradientFill( + _In_ HDC hdc, + _In_reads_(nVertex) PTRIVERTEX pVertex, + _In_ ULONG nVertex, + _In_ PVOID pMesh, + _In_ ULONG nMesh, + _In_ ULONG ulMode); + +BOOL WINAPI TransparentBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT); + #endif #ifdef UNICODE diff --git a/include/psdk/winnt.h b/include/psdk/winnt.h index 053bfbea3ee..d66d9b0b776 100644 --- a/include/psdk/winnt.h +++ b/include/psdk/winnt.h @@ -312,19 +312,33 @@ typedef void* __ptr64 PVOID64; #endif typedef wchar_t WCHAR; -typedef WCHAR *PWCHAR,*LPWCH,*PWCH,*NWPSTR,*LPWSTR,*PWSTR,*PZZWSTR; -typedef CONST WCHAR *LPCWCH,*PCWCH,*LPCWSTR,*PCWSTR,*PCZZWSTR; -typedef CHAR *PCHAR,*LPCH,*PCH,*NPSTR,*LPSTR,*PSTR; -typedef CONST CHAR *LPCCH,*PCCH,*PCSTR,*LPCSTR; -typedef PWSTR *PZPWSTR; -typedef CONST PWSTR *PCZPWSTR; -typedef WCHAR UNALIGNED *LPUWSTR,*PUWSTR; -typedef PCWSTR *PZPCWSTR; -typedef CONST WCHAR UNALIGNED *LPCUWSTR,*PCUWSTR; -typedef PSTR *PZPSTR; -typedef CONST PSTR *PCZPSTR; -typedef PCSTR *PZPCSTR; +typedef _Null_terminated_ WCHAR *NWPSTR, *LPWSTR, *PWSTR; +typedef _Null_terminated_ PWSTR *PZPWSTR; +typedef _Null_terminated_ CONST PWSTR *PCZPWSTR; +typedef _Null_terminated_ WCHAR UNALIGNED *LPUWSTR, *PUWSTR; +typedef _Null_terminated_ CONST WCHAR *LPCWSTR, *PCWSTR; +typedef _Null_terminated_ PCWSTR *PZPCWSTR; +typedef _Null_terminated_ CONST WCHAR UNALIGNED *LPCUWSTR, *PCUWSTR; + +typedef _NullNull_terminated_ WCHAR *PZZWSTR; +typedef _NullNull_terminated_ CONST WCHAR *PCZZWSTR; +typedef _NullNull_terminated_ WCHAR UNALIGNED *PUZZWSTR; +typedef _NullNull_terminated_ CONST WCHAR UNALIGNED *PCUZZWSTR; + +typedef WCHAR *PWCHAR, *LPWCH, *PWCH; +typedef CONST WCHAR *LPCWCH, *PCWCH; +typedef CHAR *PCHAR, *LPCH, *PCH; +typedef CONST CHAR *LPCCH, *PCCH; + +typedef _Null_terminated_ CHAR *NPSTR, *LPSTR, *PSTR; +typedef _Null_terminated_ PSTR *PZPSTR; +typedef _Null_terminated_ CONST PSTR *PCZPSTR; +typedef _Null_terminated_ CONST CHAR *LPCSTR, *PCSTR; +typedef _Null_terminated_ PCSTR *PZPCSTR; + +typedef _NullNull_terminated_ CHAR *PZZSTR; +typedef _NullNull_terminated_ CONST CHAR *PCZZSTR; #ifdef UNICODE #ifndef _TCHAR_DEFINED @@ -2420,13 +2434,15 @@ typedef struct _ACL_SIZE_INFORMATION { } ACL_SIZE_INFORMATION, *PACL_SIZE_INFORMATION; typedef +_IRQL_requires_same_ +_Function_class_(EXCEPTION_ROUTINE) EXCEPTION_DISPOSITION NTAPI EXCEPTION_ROUTINE( - _Inout_ struct _EXCEPTION_RECORD *ExceptionRecord, - _In_ PVOID EstablisherFrame, - _Inout_ struct _CONTEXT *ContextRecord, - _In_ PVOID DispatcherContext); + _Inout_ struct _EXCEPTION_RECORD *ExceptionRecord, + _In_ PVOID EstablisherFrame, + _Inout_ struct _CONTEXT *ContextRecord, + _In_ PVOID DispatcherContext); typedef EXCEPTION_ROUTINE *PEXCEPTION_ROUTINE; @@ -2726,8 +2742,22 @@ typedef struct _UNWIND_HISTORY_TABLE UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE]; } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE; -typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64 ControlPc,PVOID Context); -typedef DWORD (*POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK)(HANDLE Process,PVOID TableAddress,PDWORD Entries,PRUNTIME_FUNCTION *Functions); +typedef +_Function_class_(GET_RUNTIME_FUNCTION_CALLBACK) +PRUNTIME_FUNCTION +(*PGET_RUNTIME_FUNCTION_CALLBACK)( + _In_ DWORD64 ControlPc, + _In_opt_ PVOID Context); + +typedef +_Function_class_(OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK) +_Must_inspect_result_ +DWORD +(*POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK)( + _In_ HANDLE Process, + _In_ PVOID TableAddress, + _Out_ PDWORD Entries, + _Out_ PRUNTIME_FUNCTION *Functions); #define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback" @@ -3817,45 +3847,40 @@ typedef SLIST_HEADER SLIST_HEADER32, *PSLIST_HEADER32; NTSYSAPI VOID NTAPI -RtlInitializeSListHead ( - IN PSLIST_HEADER ListHead - ); +RtlInitializeSListHead( + _Out_ PSLIST_HEADER ListHead); + +_Must_inspect_result_ +NTSYSAPI +PSLIST_ENTRY +NTAPI +RtlFirstEntrySList( + _In_ const SLIST_HEADER *ListHead); NTSYSAPI PSLIST_ENTRY NTAPI -RtlFirstEntrySList ( - IN const SLIST_HEADER *ListHead - ); +RtlInterlockedPopEntrySList( + _Inout_ PSLIST_HEADER ListHead); NTSYSAPI PSLIST_ENTRY NTAPI -RtlInterlockedPopEntrySList ( - IN PSLIST_HEADER ListHead - ); +RtlInterlockedPushEntrySList( + _Inout_ PSLIST_HEADER ListHead, + _Inout_ __drv_aliasesMem PSLIST_ENTRY ListEntry); NTSYSAPI PSLIST_ENTRY NTAPI -RtlInterlockedPushEntrySList ( - IN PSLIST_HEADER ListHead, - IN PSLIST_ENTRY ListEntry - ); - -NTSYSAPI -PSLIST_ENTRY -NTAPI -RtlInterlockedFlushSList ( - IN PSLIST_HEADER ListHead - ); +RtlInterlockedFlushSList( + _Inout_ PSLIST_HEADER ListHead); NTSYSAPI WORD NTAPI -RtlQueryDepthSList ( - IN PSLIST_HEADER ListHead - ); +RtlQueryDepthSList( + _In_ PSLIST_HEADER ListHead); #ifndef _RTL_RUN_ONCE_DEF #define _RTL_RUN_ONCE_DEF @@ -3921,9 +3946,8 @@ NTSYSAPI PVOID NTAPI RtlPcToFileHeader( - IN PVOID PcValue, - PVOID* BaseOfImage -); + _In_ PVOID PcValue, + _Out_ PVOID* BaseOfImage); NTSYSAPI VOID @@ -5321,7 +5345,7 @@ typedef OSVERSIONINFOEXA OSVERSIONINFOEX,*POSVERSIONINFOEX,*LPOSVERSIONINFOEX; #define VER_SET_CONDITION(lc,t,c) ((lc) = VerSetConditionMask((lc),(t),(c))) #if (_WIN32_WINNT >= 0x0500) -ULONGLONG WINAPI VerSetConditionMask(ULONGLONG,DWORD,BYTE); +ULONGLONG WINAPI VerSetConditionMask(_In_ ULONGLONG, _In_ DWORD, _In_ BYTE); #endif typedef enum _HEAP_INFORMATION_CLASS { @@ -5370,14 +5394,14 @@ typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION { } DUMMYUNIONNAME; } SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION; +_Check_return_ NTSYSAPI SIZE_T NTAPI RtlCompareMemory ( - const VOID *Source1, - const VOID *Source2, - SIZE_T Length - ); + _In_ const VOID *Source1, + _In_ const VOID *Source2, + _In_ SIZE_T Length); #define RtlMoveMemory memmove #define RtlCopyMemory memcpy @@ -5386,8 +5410,8 @@ RtlCompareMemory ( FORCEINLINE PVOID -RtlSecureZeroMemory(IN PVOID Buffer, - IN SIZE_T Length) +RtlSecureZeroMemory(_Out_writes_bytes_all_(Length) PVOID Buffer, + _In_ SIZE_T Length) { volatile char *VolatilePointer; @@ -5560,6 +5584,7 @@ MemoryBarrier(VOID) #define YieldProcessor _mm_pause +__analysis_noreturn FORCEINLINE VOID DbgRaiseAssertionFailure(VOID) diff --git a/include/psdk/winreg.h b/include/psdk/winreg.h index 354a47b568c..63ee6a26d9e 100644 --- a/include/psdk/winreg.h +++ b/include/psdk/winreg.h @@ -62,7 +62,7 @@ extern "C" { #ifndef RC_INVOKED typedef ACCESS_MASK REGSAM; -typedef LONG LSTATUS; +typedef _Return_type_success_(return==ERROR_SUCCESS) LONG LSTATUS; typedef struct value_entA { LPSTR ve_valuename; DWORD ve_valuelen; @@ -75,103 +75,367 @@ typedef struct value_entW { DWORD ve_valueptr; DWORD ve_type; } VALENTW,*PVALENTW; -BOOL WINAPI AbortSystemShutdownA(LPCSTR); -BOOL WINAPI AbortSystemShutdownW(LPCWSTR); + +BOOL WINAPI AbortSystemShutdownA(_In_opt_ LPCSTR); +BOOL WINAPI AbortSystemShutdownW(_In_opt_ LPCWSTR); + #if (_WIN32_WINNT >= 0x0600) -DWORD WINAPI InitiateShutdownA(LPSTR, LPSTR, DWORD, DWORD, DWORD); -DWORD WINAPI InitiateShutdownW(LPWSTR, LPWSTR, DWORD, DWORD, DWORD); +DWORD WINAPI InitiateShutdownA(_In_opt_ LPSTR, _In_opt_ LPSTR, _In_ DWORD, _In_ DWORD, _In_ DWORD); +DWORD WINAPI InitiateShutdownW(_In_opt_ LPWSTR, _In_opt_ LPWSTR, _In_ DWORD, _In_ DWORD, _In_ DWORD); #endif -BOOL WINAPI InitiateSystemShutdownA(LPSTR,LPSTR,DWORD,BOOL,BOOL); -BOOL WINAPI InitiateSystemShutdownW(LPWSTR,LPWSTR,DWORD,BOOL,BOOL); -BOOL WINAPI InitiateSystemShutdownExA(LPSTR,LPSTR,DWORD,BOOL,BOOL,DWORD); -BOOL WINAPI InitiateSystemShutdownExW(LPWSTR,LPWSTR,DWORD,BOOL,BOOL,DWORD); -LONG WINAPI RegCloseKey(HKEY); -LONG WINAPI RegConnectRegistryA(LPCSTR,HKEY,PHKEY); -LONG WINAPI RegConnectRegistryW(LPCWSTR,HKEY,PHKEY); + +BOOL WINAPI InitiateSystemShutdownA(_In_opt_ LPSTR, _In_opt_ LPSTR, _In_ DWORD, _In_ BOOL, _In_ BOOL); +BOOL WINAPI InitiateSystemShutdownW(_In_opt_ LPWSTR, _In_opt_ LPWSTR, _In_ DWORD, _In_ BOOL, _In_ BOOL); +BOOL WINAPI InitiateSystemShutdownExA(_In_opt_ LPSTR, _In_opt_ LPSTR, _In_ DWORD, _In_ BOOL, _In_ BOOL, _In_ DWORD); +BOOL WINAPI InitiateSystemShutdownExW(_In_opt_ LPWSTR, _In_opt_ LPWSTR, _In_ DWORD, _In_ BOOL, _In_ BOOL, _In_ DWORD); +LSTATUS WINAPI RegCloseKey(_In_ HKEY); +LSTATUS WINAPI RegConnectRegistryA(_In_opt_ LPCSTR, _In_ HKEY, _Out_ PHKEY); +LSTATUS WINAPI RegConnectRegistryW(_In_opt_ LPCWSTR,_In_ HKEY, _Out_ PHKEY); + #if (_WIN32_WINNT >= 0x0600) -LONG WINAPI RegCopyTreeA(HKEY,LPCSTR,HKEY); -LONG WINAPI RegCopyTreeW(HKEY,LPCWSTR,HKEY); +LSTATUS WINAPI RegCopyTreeA(_In_ HKEY, _In_opt_ LPCSTR, _In_ HKEY); +LSTATUS WINAPI RegCopyTreeW(_In_ HKEY, _In_opt_ LPCWSTR, _In_ HKEY); #endif -LONG WINAPI RegCreateKeyA(HKEY,LPCSTR,PHKEY); -LONG WINAPI RegCreateKeyExA(HKEY,LPCSTR,DWORD,LPSTR,DWORD,REGSAM,LPSECURITY_ATTRIBUTES,PHKEY,PDWORD); -LONG WINAPI RegCreateKeyExW(HKEY,LPCWSTR,DWORD,LPWSTR,DWORD,REGSAM,LPSECURITY_ATTRIBUTES,PHKEY,PDWORD); -LONG WINAPI RegCreateKeyW(HKEY,LPCWSTR,PHKEY); -LONG WINAPI RegDeleteKeyA(HKEY,LPCSTR); -LONG WINAPI RegDeleteKeyExA (HKEY,LPCSTR,REGSAM,DWORD); -LONG WINAPI RegDeleteKeyExW (HKEY,LPCWSTR,REGSAM,DWORD); + +LSTATUS WINAPI RegCreateKeyA(_In_ HKEY, _In_opt_ LPCSTR, _Out_ PHKEY); +LSTATUS WINAPI RegCreateKeyW(_In_ HKEY, _In_opt_ LPCWSTR, _Out_ PHKEY); +LSTATUS WINAPI RegCreateKeyExA(_In_ HKEY, _In_ LPCSTR, _Reserved_ DWORD, _In_opt_ LPSTR, _In_ DWORD, _In_ REGSAM, _In_opt_ LPSECURITY_ATTRIBUTES, _Out_ PHKEY, _Out_opt_ PDWORD); +LSTATUS WINAPI RegCreateKeyExW(_In_ HKEY, _In_ LPCWSTR, _Reserved_ DWORD, _In_opt_ LPWSTR, _In_ DWORD, _In_ REGSAM, _In_opt_ LPSECURITY_ATTRIBUTES, _Out_ PHKEY, _Out_opt_ PDWORD); +LSTATUS WINAPI RegDeleteKeyA(_In_ HKEY, _In_ LPCSTR); +LSTATUS WINAPI RegDeleteKeyW(_In_ HKEY, _In_ LPCWSTR); +LSTATUS WINAPI RegDeleteKeyExA(_In_ HKEY, _In_ LPCSTR, _In_ REGSAM, _Reserved_ DWORD); +LSTATUS WINAPI RegDeleteKeyExW(_In_ HKEY, _In_ LPCWSTR, _In_ REGSAM, _Reserved_ DWORD); + #if (_WIN32_WINNT >= 0x0600) -LONG WINAPI RegDeleteKeyValueA(HKEY,LPCSTR,LPCSTR); -LONG WINAPI RegDeleteKeyValueW(HKEY,LPCWSTR,LPCWSTR); +LSTATUS WINAPI RegDeleteKeyValueA(_In_ HKEY, _In_opt_ LPCSTR, _In_opt_ LPCSTR); +LSTATUS WINAPI RegDeleteKeyValueW(_In_ HKEY, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR); +LSTATUS WINAPI RegDeleteTreeA(_In_ HKEY, _In_opt_ LPCSTR); +LSTATUS WINAPI RegDeleteTreeW(_In_ HKEY, _In_opt_ LPCWSTR); #endif -LONG WINAPI RegDeleteKeyW(HKEY,LPCWSTR); -#if (_WIN32_WINNT >= 0x0600) -LONG WINAPI RegDeleteTreeA(HKEY,LPCSTR); -LONG WINAPI RegDeleteTreeW(HKEY,LPCWSTR); -#endif -LONG WINAPI RegDeleteValueA(HKEY,LPCSTR); -LONG WINAPI RegDeleteValueW(HKEY,LPCWSTR); + +LSTATUS WINAPI RegDeleteValueA(_In_ HKEY, _In_opt_ LPCSTR); +LSTATUS WINAPI RegDeleteValueW(_In_ HKEY, _In_opt_ LPCWSTR); + #if (_WIN32_WINNT >= 0x0500) LONG WINAPI RegDisablePredefinedCache(VOID); -LONG WINAPI RegSaveKeyExA(HKEY,LPCSTR,LPSECURITY_ATTRIBUTES,DWORD); -LONG WINAPI RegSaveKeyExW(HKEY,LPCWSTR,LPSECURITY_ATTRIBUTES,DWORD); +LSTATUS WINAPI RegSaveKeyExA(_In_ HKEY, _In_ LPCSTR, _In_opt_ LPSECURITY_ATTRIBUTES, _In_ DWORD); +LSTATUS WINAPI RegSaveKeyExW(_In_ HKEY, _In_ LPCWSTR, _In_opt_ LPSECURITY_ATTRIBUTES, _In_ DWORD); #endif + #if (_WIN32_WINNT >= 0x0600) LONG WINAPI RegDisablePredefinedCacheEx(VOID); -LONG WINAPI RegDisableReflectionKey(HKEY); -LONG WINAPI RegEnableReflectionKey(HKEY); +LONG WINAPI RegDisableReflectionKey(_In_ HKEY); +LONG WINAPI RegEnableReflectionKey(_In_ HKEY); #endif -LONG WINAPI RegEnumKeyA(HKEY,DWORD,LPSTR,DWORD); -LONG WINAPI RegEnumKeyW(HKEY,DWORD,LPWSTR,DWORD); -LONG WINAPI RegEnumKeyExA(HKEY,DWORD,LPSTR,PDWORD,PDWORD,LPSTR,PDWORD,PFILETIME); -LONG WINAPI RegEnumKeyExW(HKEY,DWORD,LPWSTR,PDWORD,PDWORD,LPWSTR,PDWORD,PFILETIME); -LONG WINAPI RegEnumValueA(HKEY,DWORD,LPSTR,PDWORD,PDWORD,PDWORD,LPBYTE,PDWORD); -LONG WINAPI RegEnumValueW(HKEY,DWORD,LPWSTR,PDWORD,PDWORD,PDWORD,LPBYTE,PDWORD); + +LSTATUS +WINAPI +RegEnumKeyA( + _In_ HKEY hKey, + _In_ DWORD dwIndex, + _Out_writes_opt_(cchName) LPSTR lpName, + _In_ DWORD cchName); + +LSTATUS +WINAPI +RegEnumKeyW( + _In_ HKEY hKey, + _In_ DWORD dwIndex, + _Out_writes_opt_(cchName) LPWSTR lpName, + _In_ DWORD cchName); + +LSTATUS +WINAPI +RegEnumKeyExA( + _In_ HKEY hKey, + _In_ DWORD dwIndex, + _Out_writes_to_opt_(*lpcchName, *lpcchName + 1) LPSTR lpName, + _Inout_ LPDWORD lpcchName, + _Reserved_ LPDWORD lpReserved, + _Out_writes_to_opt_(*lpcchClass,*lpcchClass + 1) LPSTR lpClass, + _Inout_opt_ LPDWORD lpcchClass, + _Out_opt_ PFILETIME lpftLastWriteTime); + +LSTATUS +WINAPI +RegEnumKeyExW( + _In_ HKEY hKey, + _In_ DWORD dwIndex, + _Out_writes_to_opt_(*lpcchName, *lpcchName + 1) LPWSTR lpName, + _Inout_ LPDWORD lpcchName, + _Reserved_ LPDWORD lpReserved, + _Out_writes_to_opt_(*lpcchClass,*lpcchClass + 1) LPWSTR lpClass, + _Inout_opt_ LPDWORD lpcchClass, + _Out_opt_ PFILETIME lpftLastWriteTime); + +LSTATUS +WINAPI +RegEnumValueA( + _In_ HKEY hKey, + _In_ DWORD dwIndex, + _Out_writes_to_opt_(*lpcchValueName, *lpcchValueName + 1) LPSTR lpValueName, + _Inout_ LPDWORD lpcchValueName, + _Reserved_ LPDWORD lpReserved, + _Out_opt_ LPDWORD lpType, + _Out_writes_bytes_to_opt_(*lpcbData, *lpcbData) __out_data_source(REGISTRY) LPBYTE lpData, + _Inout_opt_ LPDWORD lpcbData); + +LSTATUS +WINAPI +RegEnumValueW( + _In_ HKEY hKey, + _In_ DWORD dwIndex, + _Out_writes_to_opt_(*lpcchValueName, *lpcchValueName + 1) LPWSTR lpValueName, + _Inout_ LPDWORD lpcchValueName, + _Reserved_ LPDWORD lpReserved, + _Out_opt_ LPDWORD lpType, + _Out_writes_bytes_to_opt_(*lpcbData, *lpcbData) __out_data_source(REGISTRY) LPBYTE lpData, + _Inout_opt_ LPDWORD lpcbData); + #if (_WIN32_WINNT >= 0x0600) -LONG WINAPI RegGetValueA(HKEY,LPCSTR,LPCSTR,DWORD,LPDWORD,PVOID,LPDWORD); -LONG WINAPI RegGetValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,LPDWORD,PVOID,LPDWORD); + +LSTATUS +WINAPI +RegGetValueA( + _In_ HKEY hkey, + _In_opt_ LPCSTR lpSubKey, + _In_opt_ LPCSTR lpValue, + _In_ DWORD dwFlags, + _Out_opt_ LPDWORD pdwType, + _When_((dwFlags & 0x7F) == RRF_RT_REG_SZ || (dwFlags & 0x7F) == RRF_RT_REG_EXPAND_SZ || + (dwFlags & 0x7F) == (RRF_RT_REG_SZ | RRF_RT_REG_EXPAND_SZ) || *pdwType == REG_SZ || + *pdwType == REG_EXPAND_SZ, _Post_z_) + _When_((dwFlags & 0x7F) == RRF_RT_REG_MULTI_SZ || *pdwType == REG_MULTI_SZ, _Post_ _NullNull_terminated_) + _Out_writes_bytes_to_opt_(*pcbData,*pcbData) PVOID pvData, + _Inout_opt_ LPDWORD pcbData); + +LSTATUS +WINAPI +RegGetValueW( + _In_ HKEY hkey, + _In_opt_ LPCWSTR lpSubKey, + _In_opt_ LPCWSTR lpValue, + _In_ DWORD dwFlags, + _Out_opt_ LPDWORD pdwType, + _When_((dwFlags & 0x7F) == RRF_RT_REG_SZ || (dwFlags & 0x7F) == RRF_RT_REG_EXPAND_SZ || + (dwFlags & 0x7F) == (RRF_RT_REG_SZ | RRF_RT_REG_EXPAND_SZ) || *pdwType == REG_SZ || + *pdwType == REG_EXPAND_SZ, _Post_z_) + _When_((dwFlags & 0x7F) == RRF_RT_REG_MULTI_SZ || *pdwType == REG_MULTI_SZ, _Post_ _NullNull_terminated_) + _Out_writes_bytes_to_opt_(*pcbData,*pcbData) PVOID pvData, + _Inout_opt_ LPDWORD pcbData); + #endif -LONG WINAPI RegFlushKey(HKEY); -LONG WINAPI RegGetKeySecurity(HKEY,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,PDWORD); -LONG WINAPI RegLoadKeyA(HKEY,LPCSTR,LPCSTR); -LONG WINAPI RegLoadKeyW(HKEY,LPCWSTR,LPCWSTR); + +LSTATUS WINAPI RegFlushKey(_In_ HKEY); + +LSTATUS +WINAPI +RegGetKeySecurity( + _In_ HKEY hKey, + _In_ SECURITY_INFORMATION SecurityInformation, + _Out_writes_bytes_opt_(*lpcbSecurityDescriptor) PSECURITY_DESCRIPTOR pSecurityDescriptor, + _Inout_ LPDWORD lpcbSecurityDescriptor); + +LSTATUS WINAPI RegLoadKeyA(_In_ HKEY, _In_opt_ LPCSTR, _In_ LPCSTR); +LSTATUS WINAPI RegLoadKeyW(_In_ HKEY, _In_opt_ LPCWSTR, _In_ LPCWSTR); + #if (_WIN32_WINNT >= 0x0600) -LONG WINAPI RegLoadMUIStringA(HKEY,LPCSTR,LPSTR,DWORD,LPDWORD,DWORD,LPCSTR); -LONG WINAPI RegLoadMUIStringW(HKEY,LPCWSTR,LPWSTR,DWORD,LPDWORD,DWORD,LPCWSTR); + +LSTATUS +WINAPI +RegLoadMUIStringA( + _In_ HKEY hKey, + _In_opt_ LPCSTR pszValue, + _Out_writes_bytes_opt_(cbOutBuf) LPSTR pszOutBuf, + _In_ DWORD cbOutBuf, + _Out_opt_ LPDWORD pcbData, + _In_ DWORD Flags, + _In_opt_ LPCSTR pszDirectory); + +LSTATUS +WINAPI +RegLoadMUIStringW( + _In_ HKEY hKey, + _In_opt_ LPCWSTR pszValue, + _Out_writes_bytes_opt_(cbOutBuf) LPWSTR pszOutBuf, + _In_ DWORD cbOutBuf, + _Out_opt_ LPDWORD pcbData, + _In_ DWORD Flags, + _In_opt_ LPCWSTR pszDirectory); + #endif -LONG WINAPI RegNotifyChangeKeyValue(HKEY,BOOL,DWORD,HANDLE,BOOL); -LONG WINAPI RegOpenCurrentUser(REGSAM,PHKEY); -LONG WINAPI RegOpenKeyA(HKEY,LPCSTR,PHKEY); -LONG WINAPI RegOpenKeyExA(HKEY,LPCSTR,DWORD,REGSAM,PHKEY); -LONG WINAPI RegOpenKeyExW(HKEY,LPCWSTR,DWORD,REGSAM,PHKEY); -LONG WINAPI RegOpenKeyW(HKEY,LPCWSTR,PHKEY); -LONG WINAPI RegQueryInfoKeyA(HKEY,LPSTR,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PFILETIME); -LONG WINAPI RegQueryInfoKeyW(HKEY,LPWSTR,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PDWORD,PFILETIME); -LONG WINAPI RegQueryMultipleValuesA(HKEY,PVALENTA,DWORD,LPSTR,LPDWORD); -LONG WINAPI RegQueryMultipleValuesW(HKEY,PVALENTW,DWORD,LPWSTR,LPDWORD); + +LSTATUS WINAPI RegNotifyChangeKeyValue(_In_ HKEY, _In_ BOOL, _In_ DWORD, _In_opt_ HANDLE, _In_ BOOL); +LSTATUS WINAPI RegOpenCurrentUser(_In_ REGSAM, _Out_ PHKEY); +LSTATUS WINAPI RegOpenKeyA(_In_ HKEY, _In_opt_ LPCSTR, _Out_ PHKEY); +LSTATUS WINAPI RegOpenKeyW(_In_ HKEY, _In_opt_ LPCWSTR, _Out_ PHKEY); +LSTATUS WINAPI RegOpenKeyExA(_In_ HKEY, _In_opt_ LPCSTR, _In_opt_ DWORD, _In_ REGSAM, _Out_ PHKEY); +LSTATUS WINAPI RegOpenKeyExW(_In_ HKEY, _In_opt_ LPCWSTR, _In_opt_ DWORD, _In_ REGSAM, _Out_ PHKEY); + +LSTATUS +WINAPI +RegQueryInfoKeyA( + _In_ HKEY hKey, + _Out_writes_to_opt_(*lpcchClass, *lpcchClass + 1) LPSTR lpClass, + _Inout_opt_ LPDWORD lpcchClass, + _Reserved_ LPDWORD lpReserved, + _Out_opt_ LPDWORD lpcSubKeys, + _Out_opt_ LPDWORD lpcbMaxSubKeyLen, + _Out_opt_ LPDWORD lpcbMaxClassLen, + _Out_opt_ LPDWORD lpcValues, + _Out_opt_ LPDWORD lpcbMaxValueNameLen, + _Out_opt_ LPDWORD lpcbMaxValueLen, + _Out_opt_ LPDWORD lpcbSecurityDescriptor, + _Out_opt_ PFILETIME lpftLastWriteTime); + +LSTATUS +WINAPI +RegQueryInfoKeyW( + _In_ HKEY hKey, + _Out_writes_to_opt_(*lpcchClass, *lpcchClass + 1) LPWSTR lpClass, + _Inout_opt_ LPDWORD lpcchClass, + _Reserved_ LPDWORD lpReserved, + _Out_opt_ LPDWORD lpcSubKeys, + _Out_opt_ LPDWORD lpcbMaxSubKeyLen, + _Out_opt_ LPDWORD lpcbMaxClassLen, + _Out_opt_ LPDWORD lpcValues, + _Out_opt_ LPDWORD lpcbMaxValueNameLen, + _Out_opt_ LPDWORD lpcbMaxValueLen, + _Out_opt_ LPDWORD lpcbSecurityDescriptor, + _Out_opt_ PFILETIME lpftLastWriteTime); + +LSTATUS +WINAPI +RegQueryMultipleValuesA( + _In_ HKEY hKey, + _Out_writes_(num_vals) PVALENTA val_list, + _In_ DWORD num_vals, + _Out_writes_bytes_to_opt_(*ldwTotsize, *ldwTotsize) __out_data_source(REGISTRY) LPSTR lpValueBuf, + _Inout_opt_ LPDWORD ldwTotsize); + +LSTATUS +WINAPI +RegQueryMultipleValuesW( + _In_ HKEY hKey, + _Out_writes_(num_vals) PVALENTW val_list, + _In_ DWORD num_vals, + _Out_writes_bytes_to_opt_(*ldwTotsize, *ldwTotsize) __out_data_source(REGISTRY) LPWSTR lpValueBuf, + _Inout_opt_ LPDWORD ldwTotsize); + #if (_WIN32_WINNT >= 0x0600) -LONG WINAPI RegQueryReflectionKey(HKEY,BOOL*); +LONG WINAPI RegQueryReflectionKey(_In_ HKEY, _Out_ BOOL*); #endif -LONG WINAPI RegQueryValueA(HKEY,LPCSTR,LPSTR,PLONG); -LONG WINAPI RegQueryValueExA(HKEY,LPCSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD); -LONG WINAPI RegQueryValueExW(HKEY,LPCWSTR,LPDWORD,LPDWORD,LPBYTE,LPDWORD); -LONG WINAPI RegQueryValueW(HKEY,LPCWSTR,LPWSTR,PLONG); -LONG WINAPI RegReplaceKeyA(HKEY,LPCSTR,LPCSTR,LPCSTR); -LONG WINAPI RegReplaceKeyW(HKEY,LPCWSTR,LPCWSTR,LPCWSTR); -LONG WINAPI RegRestoreKeyA(HKEY,LPCSTR,DWORD); -LONG WINAPI RegRestoreKeyW(HKEY,LPCWSTR,DWORD); -LONG WINAPI RegSaveKeyA(HKEY,LPCSTR,LPSECURITY_ATTRIBUTES); -LONG WINAPI RegSaveKeyW(HKEY,LPCWSTR,LPSECURITY_ATTRIBUTES); -LONG WINAPI RegSetKeySecurity(HKEY,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR); + +LSTATUS +WINAPI +RegQueryValueA( + _In_ HKEY hKey, + _In_opt_ LPCSTR lpSubKey, + _Out_writes_bytes_to_opt_(*lpcbData, *lpcbData) __out_data_source(REGISTRY) LPSTR lpData, + _Inout_opt_ PLONG lpcbData); + +LSTATUS +WINAPI +RegQueryValueW( + _In_ HKEY hKey, + _In_opt_ LPCWSTR lpSubKey, + _Out_writes_bytes_to_opt_(*lpcbData, *lpcbData) __out_data_source(REGISTRY) LPWSTR lpData, + _Inout_opt_ PLONG lpcbData); + +LSTATUS +WINAPI +RegQueryValueExA( + _In_ HKEY hKey, + _In_opt_ LPCSTR lpValueName, + _Reserved_ LPDWORD lpReserved, + _Out_opt_ LPDWORD lpType, + _Out_writes_bytes_to_opt_(*lpcbData, *lpcbData) __out_data_source(REGISTRY) LPBYTE lpData, + _When_(lpData == NULL, _Out_opt_) + _When_(lpData != NULL, _Inout_opt_) LPDWORD lpcbData); + +LSTATUS +WINAPI +RegQueryValueExW( + _In_ HKEY hKey, + _In_opt_ LPCWSTR lpValueName, + _Reserved_ LPDWORD lpReserved, + _Out_opt_ LPDWORD lpType, + _Out_writes_bytes_to_opt_(*lpcbData, *lpcbData) __out_data_source(REGISTRY) LPBYTE lpData, + _When_(lpData == NULL, _Out_opt_) + _When_(lpData != NULL, _Inout_opt_) LPDWORD lpcbData); + +LSTATUS WINAPI RegReplaceKeyA(_In_ HKEY, _In_opt_ LPCSTR, _In_ LPCSTR, _In_ LPCSTR); +LSTATUS WINAPI RegReplaceKeyW(_In_ HKEY, _In_opt_ LPCWSTR, _In_ LPCWSTR, _In_ LPCWSTR); +LSTATUS WINAPI RegRestoreKeyA(_In_ HKEY, _In_ LPCSTR, _In_ DWORD); +LSTATUS WINAPI RegRestoreKeyW(_In_ HKEY, _In_ LPCWSTR, _In_ DWORD); +LSTATUS WINAPI RegSaveKeyA(_In_ HKEY, _In_ LPCSTR, _In_opt_ LPSECURITY_ATTRIBUTES); +LSTATUS WINAPI RegSaveKeyW(_In_ HKEY, _In_ LPCWSTR, _In_opt_ LPSECURITY_ATTRIBUTES); +LSTATUS WINAPI RegSetKeySecurity(_In_ HKEY, _In_ SECURITY_INFORMATION, _In_ PSECURITY_DESCRIPTOR); + #if (_WIN32_WINNT >= 0x0600) -LONG WINAPI RegSetKeyValueA(HKEY,LPCSTR,LPCSTR,DWORD,LPCVOID,DWORD); -LONG WINAPI RegSetKeyValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,LPCVOID,DWORD); + +LSTATUS +WINAPI +RegSetKeyValueA( + _In_ HKEY hKey, + _In_opt_ LPCSTR lpSubKey, + _In_opt_ LPCSTR lpValueName, + _In_ DWORD dwType, + _In_reads_bytes_opt_(cbData) LPCVOID lpData, + _In_ DWORD cbData); + +LSTATUS +WINAPI +RegSetKeyValueW( + _In_ HKEY hKey, + _In_opt_ LPCWSTR lpSubKey, + _In_opt_ LPCWSTR lpValueName, + _In_ DWORD dwType, + _In_reads_bytes_opt_(cbData) LPCVOID lpData, + _In_ DWORD cbData); + #endif -LONG WINAPI RegSetValueA(HKEY,LPCSTR,DWORD,LPCSTR,DWORD); -LONG WINAPI RegSetValueExA(HKEY,LPCSTR,DWORD,DWORD,const BYTE*,DWORD); -LONG WINAPI RegSetValueExW(HKEY,LPCWSTR,DWORD,DWORD,const BYTE*,DWORD); -LONG WINAPI RegSetValueW(HKEY,LPCWSTR,DWORD,LPCWSTR,DWORD); -LONG WINAPI RegUnLoadKeyA(HKEY,LPCSTR); -LONG WINAPI RegUnLoadKeyW(HKEY,LPCWSTR); + +LSTATUS +WINAPI +RegSetValueA( + _In_ HKEY hKey, + _In_opt_ LPCSTR lpSubKey, + _In_ DWORD dwType, + _In_reads_bytes_opt_(cbData) LPCSTR lpData, + _In_ DWORD cbData); + +LSTATUS +WINAPI +RegSetValueW( + _In_ HKEY hKey, + _In_opt_ LPCWSTR lpSubKey, + _In_ DWORD dwType, + _In_reads_bytes_opt_(cbData) LPCWSTR lpData, + _In_ DWORD cbData); + +LSTATUS +WINAPI +RegSetValueExA( + _In_ HKEY hKey, + _In_opt_ LPCSTR lpValueName, + _Reserved_ DWORD Reserved, + _In_ DWORD dwType, + _In_reads_bytes_opt_(cbData) const BYTE *lpData, + _In_ DWORD cbData); + +LSTATUS +WINAPI +RegSetValueExW( + _In_ HKEY hKey, + _In_opt_ LPCWSTR lpValueName, + _Reserved_ DWORD Reserved, + _In_ DWORD dwType, + _In_reads_bytes_opt_(cbData) const BYTE *lpData, + _In_ DWORD cbData); + +LSTATUS WINAPI RegUnLoadKeyA(_In_ HKEY, _In_opt_ LPCSTR); +LSTATUS WINAPI RegUnLoadKeyW(_In_ HKEY, _In_opt_ LPCWSTR); #ifdef UNICODE typedef VALENTW VALENT,*PVALENT; diff --git a/include/psdk/winsvc.h b/include/psdk/winsvc.h index a0a82bf4354..8f629cd7833 100644 --- a/include/psdk/winsvc.h +++ b/include/psdk/winsvc.h @@ -205,51 +205,253 @@ typedef struct _SERVICE_FAILURE_ACTIONSW { SC_ACTION * lpsaActions; } SERVICE_FAILURE_ACTIONSW,*LPSERVICE_FAILURE_ACTIONSW; -BOOL WINAPI ChangeServiceConfigA(SC_HANDLE,DWORD,DWORD,DWORD,LPCSTR,LPCSTR,LPDWORD,LPCSTR,LPCSTR,LPCSTR,LPCSTR); -BOOL WINAPI ChangeServiceConfigW(SC_HANDLE,DWORD,DWORD,DWORD,LPCWSTR,LPCWSTR,LPDWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR); -BOOL WINAPI ChangeServiceConfig2A(SC_HANDLE,DWORD,LPVOID); -BOOL WINAPI ChangeServiceConfig2W(SC_HANDLE,DWORD,LPVOID); -BOOL WINAPI CloseServiceHandle(SC_HANDLE); -BOOL WINAPI ControlService(SC_HANDLE,DWORD,LPSERVICE_STATUS); -SC_HANDLE WINAPI CreateServiceA(SC_HANDLE,LPCSTR,LPCSTR,DWORD,DWORD,DWORD,DWORD,LPCSTR,LPCSTR,PDWORD,LPCSTR,LPCSTR,LPCSTR); -SC_HANDLE WINAPI CreateServiceW(SC_HANDLE,LPCWSTR,LPCWSTR,DWORD,DWORD,DWORD,DWORD,LPCWSTR,LPCWSTR,PDWORD,LPCWSTR,LPCWSTR,LPCWSTR); -BOOL WINAPI DeleteService(SC_HANDLE); -BOOL WINAPI EnumDependentServicesA(SC_HANDLE,DWORD,LPENUM_SERVICE_STATUSA,DWORD,PDWORD,PDWORD); -BOOL WINAPI EnumDependentServicesW(SC_HANDLE,DWORD,LPENUM_SERVICE_STATUSW,DWORD,PDWORD,PDWORD); -BOOL WINAPI EnumServicesStatusA(SC_HANDLE,DWORD,DWORD,LPENUM_SERVICE_STATUSA,DWORD,PDWORD,PDWORD,PDWORD); -BOOL WINAPI EnumServicesStatusW(SC_HANDLE,DWORD,DWORD,LPENUM_SERVICE_STATUSW,DWORD,PDWORD,PDWORD,PDWORD); -BOOL WINAPI EnumServicesStatusExA(SC_HANDLE,SC_ENUM_TYPE,DWORD,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD,LPDWORD,LPCSTR); -BOOL WINAPI EnumServicesStatusExW(SC_HANDLE,SC_ENUM_TYPE,DWORD,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD,LPDWORD,LPCWSTR); -BOOL WINAPI GetServiceDisplayNameA(SC_HANDLE,LPCSTR,LPSTR,PDWORD); -BOOL WINAPI GetServiceDisplayNameW(SC_HANDLE,LPCWSTR,LPWSTR,PDWORD); -BOOL WINAPI GetServiceKeyNameA(SC_HANDLE,LPCSTR,LPSTR,PDWORD); -BOOL WINAPI GetServiceKeyNameW(SC_HANDLE,LPCWSTR,LPWSTR,PDWORD); -SC_LOCK WINAPI LockServiceDatabase(SC_HANDLE); -BOOL WINAPI NotifyBootConfigStatus(BOOL); -SC_HANDLE WINAPI OpenSCManagerA(LPCSTR,LPCSTR,DWORD); -SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR,LPCWSTR,DWORD); -SC_HANDLE WINAPI OpenServiceA(SC_HANDLE,LPCSTR,DWORD); -SC_HANDLE WINAPI OpenServiceW(SC_HANDLE,LPCWSTR,DWORD); -BOOL WINAPI QueryServiceConfigA(SC_HANDLE,LPQUERY_SERVICE_CONFIGA,DWORD,PDWORD); -BOOL WINAPI QueryServiceConfigW(SC_HANDLE,LPQUERY_SERVICE_CONFIGW,DWORD,PDWORD); -BOOL WINAPI QueryServiceConfig2A(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD); -BOOL WINAPI QueryServiceConfig2W(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD); -BOOL WINAPI QueryServiceLockStatusA(SC_HANDLE,LPQUERY_SERVICE_LOCK_STATUSA,DWORD,PDWORD); -BOOL WINAPI QueryServiceLockStatusW(SC_HANDLE,LPQUERY_SERVICE_LOCK_STATUSW,DWORD,PDWORD); -BOOL WINAPI QueryServiceObjectSecurity(SC_HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD); -BOOL WINAPI QueryServiceStatus(SC_HANDLE,LPSERVICE_STATUS); -BOOL WINAPI QueryServiceStatusEx(SC_HANDLE,SC_STATUS_TYPE,LPBYTE,DWORD,LPDWORD); -SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerA(LPCSTR,LPHANDLER_FUNCTION); -SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW(LPCWSTR,LPHANDLER_FUNCTION); -SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExA(LPCSTR,LPHANDLER_FUNCTION_EX,LPVOID); -SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW(LPCWSTR,LPHANDLER_FUNCTION_EX,LPVOID); -BOOL WINAPI SetServiceObjectSecurity(SC_HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR); -BOOL WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE,LPSERVICE_STATUS); -BOOL WINAPI StartServiceA(SC_HANDLE,DWORD,LPCSTR*); -BOOL WINAPI StartServiceCtrlDispatcherA(const SERVICE_TABLE_ENTRYA*); -BOOL WINAPI StartServiceCtrlDispatcherW(const SERVICE_TABLE_ENTRYW*); -BOOL WINAPI StartServiceW(SC_HANDLE,DWORD,LPCWSTR*); -BOOL WINAPI UnlockServiceDatabase(SC_LOCK); +typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOA { + LPSTR pmszRequiredPrivileges; +} SERVICE_REQUIRED_PRIVILEGES_INFOA, *LPSERVICE_REQUIRED_PRIVILEGES_INFOA; + +typedef struct _SERVICE_REQUIRED_PRIVILEGES_INFOW { + LPWSTR pmszRequiredPrivileges; +} SERVICE_REQUIRED_PRIVILEGES_INFOW, *LPSERVICE_REQUIRED_PRIVILEGES_INFOW; + +BOOL WINAPI ChangeServiceConfigA(_In_ SC_HANDLE, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _Out_opt_ LPDWORD, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_opt_ LPCSTR); +BOOL WINAPI ChangeServiceConfigW(_In_ SC_HANDLE, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _Out_opt_ LPDWORD, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR); +BOOL WINAPI ChangeServiceConfig2A(_In_ SC_HANDLE, _In_ DWORD, _In_opt_ LPVOID); +BOOL WINAPI ChangeServiceConfig2W(_In_ SC_HANDLE, _In_ DWORD, _In_opt_ LPVOID); +BOOL WINAPI CloseServiceHandle(_In_ SC_HANDLE); +BOOL WINAPI ControlService(_In_ SC_HANDLE, _In_ DWORD, _Out_ LPSERVICE_STATUS); +_Must_inspect_result_ SC_HANDLE WINAPI CreateServiceA(_In_ SC_HANDLE, _In_ LPCSTR, _In_opt_ LPCSTR, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _Out_opt_ PDWORD, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_opt_ LPCSTR); +_Must_inspect_result_ SC_HANDLE WINAPI CreateServiceW(_In_ SC_HANDLE, _In_ LPCWSTR, _In_opt_ LPCWSTR, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _Out_opt_ PDWORD, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR); +BOOL WINAPI DeleteService(_In_ SC_HANDLE); + +_Must_inspect_result_ +BOOL +WINAPI +EnumDependentServicesA( + _In_ SC_HANDLE hService, + _In_ DWORD dwServiceState, + _Out_writes_bytes_opt_(cbBufSize) LPENUM_SERVICE_STATUSA lpServices, + _In_ DWORD cbBufSize, + _Out_ LPDWORD pcbBytesNeeded, + _Out_ LPDWORD lpServicesReturned); + +_Must_inspect_result_ +BOOL +WINAPI +EnumDependentServicesW( + _In_ SC_HANDLE hService, + _In_ DWORD dwServiceState, + _Out_writes_bytes_opt_(cbBufSize) LPENUM_SERVICE_STATUSW lpServices, + _In_ DWORD cbBufSize, + _Out_ LPDWORD pcbBytesNeeded, + _Out_ LPDWORD lpServicesReturned); + +_Must_inspect_result_ +BOOL +WINAPI +EnumServicesStatusA( + _In_ SC_HANDLE hSCManager, + _In_ DWORD dwServiceType, + _In_ DWORD dwServiceState, + _Out_writes_bytes_opt_(cbBufSize) LPENUM_SERVICE_STATUSA lpServices, + _In_ DWORD cbBufSize, + _Out_ LPDWORD pcbBytesNeeded, + _Out_ LPDWORD lpServicesReturned, + _Inout_opt_ LPDWORD lpResumeHandle); + +_Must_inspect_result_ +BOOL +WINAPI +EnumServicesStatusW( + _In_ SC_HANDLE hSCManager, + _In_ DWORD dwServiceType, + _In_ DWORD dwServiceState, + _Out_writes_bytes_opt_(cbBufSize) LPENUM_SERVICE_STATUSW lpServices, + _In_ DWORD cbBufSize, + _Out_ LPDWORD pcbBytesNeeded, + _Out_ LPDWORD lpServicesReturned, + _Inout_opt_ LPDWORD lpResumeHandle); + +_Must_inspect_result_ +BOOL +WINAPI +EnumServicesStatusExA( + _In_ SC_HANDLE hSCManager, + _In_ SC_ENUM_TYPE InfoLevel, + _In_ DWORD dwServiceType, + _In_ DWORD dwServiceState, + _Out_writes_bytes_opt_(cbBufSize) LPBYTE lpServices, + _In_ DWORD cbBufSize, + _Out_ LPDWORD pcbBytesNeeded, + _Out_ LPDWORD lpServicesReturned, + _Inout_opt_ LPDWORD lpResumeHandle, + _In_opt_ LPCSTR pszGroupName); + +_Must_inspect_result_ +BOOL +WINAPI +EnumServicesStatusExW( + _In_ SC_HANDLE hSCManager, + _In_ SC_ENUM_TYPE InfoLevel, + _In_ DWORD dwServiceType, + _In_ DWORD dwServiceState, + _Out_writes_bytes_opt_(cbBufSize) LPBYTE lpServices, + _In_ DWORD cbBufSize, + _Out_ LPDWORD pcbBytesNeeded, + _Out_ LPDWORD lpServicesReturned, + _Inout_opt_ LPDWORD lpResumeHandle, + _In_opt_ LPCWSTR pszGroupName); + +_Must_inspect_result_ +BOOL +WINAPI +GetServiceDisplayNameA( + _In_ SC_HANDLE hSCManager, + _In_ LPCSTR lpServiceName, + _Out_writes_opt_(*lpcchBuffer) LPSTR lpDisplayName, + _Inout_ LPDWORD lpcchBuffer); + +_Must_inspect_result_ +BOOL +WINAPI +GetServiceDisplayNameW( + _In_ SC_HANDLE hSCManager, + _In_ LPCWSTR lpServiceName, + _Out_writes_opt_(*lpcchBuffer) LPWSTR lpDisplayName, + _Inout_ LPDWORD lpcchBuffer); + +_Must_inspect_result_ +BOOL +WINAPI +GetServiceKeyNameA( + _In_ SC_HANDLE hSCManager, + _In_ LPCSTR lpDisplayName, + _Out_writes_opt_(*lpcchBuffer) LPSTR lpServiceName, + _Inout_ LPDWORD lpcchBuffer); + +_Must_inspect_result_ +BOOL +WINAPI +GetServiceKeyNameW( + _In_ SC_HANDLE hSCManager, + _In_ LPCWSTR lpDisplayName, + _Out_writes_opt_(*lpcchBuffer) LPWSTR lpServiceName, + _Inout_ LPDWORD lpcchBuffer); + +SC_LOCK WINAPI LockServiceDatabase(_In_ SC_HANDLE); +BOOL WINAPI NotifyBootConfigStatus(_In_ BOOL); +_Must_inspect_result_ SC_HANDLE WINAPI OpenSCManagerA(_In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_ DWORD); +_Must_inspect_result_ SC_HANDLE WINAPI OpenSCManagerW(_In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ DWORD); +_Must_inspect_result_ SC_HANDLE WINAPI OpenServiceA(_In_ SC_HANDLE, _In_ LPCSTR, _In_ DWORD); +_Must_inspect_result_ SC_HANDLE WINAPI OpenServiceW(_In_ SC_HANDLE, _In_ LPCWSTR, _In_ DWORD); + +_Must_inspect_result_ +BOOL +WINAPI +QueryServiceConfigA( + _In_ SC_HANDLE hService, + _Out_writes_bytes_opt_(cbBufSize) LPQUERY_SERVICE_CONFIGA lpServiceConfig, + _In_ DWORD cbBufSize, + _Out_ LPDWORD pcbBytesNeeded); + +_Must_inspect_result_ +BOOL +WINAPI +QueryServiceConfigW( + _In_ SC_HANDLE hService, + _Out_writes_bytes_opt_(cbBufSize) LPQUERY_SERVICE_CONFIGW lpServiceConfig, + _In_ DWORD cbBufSize, + _Out_ LPDWORD pcbBytesNeeded); + +_When_(dwInfoLevel == SERVICE_CONFIG_DESCRIPTION, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_DESCRIPTIONA)))) +_When_(dwInfoLevel == SERVICE_CONFIG_FAILURE_ACTIONS, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_FAILURE_ACTIONSA)))) +_When_(dwInfoLevel == SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_REQUIRED_PRIVILEGES_INFOA)))) +_Must_inspect_result_ +BOOL +WINAPI +QueryServiceConfig2A( + _In_ SC_HANDLE hService, + _In_ DWORD dwInfoLevel, + _Out_writes_bytes_opt_(cbBufSize) LPBYTE lpBuffer, + _In_ DWORD cbBufSize, + _Out_ LPDWORD pcbBytesNeeded); + +_When_(dwInfoLevel == SERVICE_CONFIG_DESCRIPTION, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_DESCRIPTIONW)))) +_When_(dwInfoLevel == SERVICE_CONFIG_FAILURE_ACTIONS, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_FAILURE_ACTIONSW)))) +_When_(dwInfoLevel == SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO, _At_(cbBufSize, _In_range_(>=, sizeof(LPSERVICE_REQUIRED_PRIVILEGES_INFOW)))) +_Must_inspect_result_ +BOOL +WINAPI +QueryServiceConfig2W( + _In_ SC_HANDLE hService, + _In_ DWORD dwInfoLevel, + _Out_writes_bytes_opt_(cbBufSize) LPBYTE lpBuffer, + _In_ DWORD cbBufSize, + _Out_ LPDWORD pcbBytesNeeded); + +_Must_inspect_result_ +BOOL +WINAPI +QueryServiceLockStatusA( + _In_ SC_HANDLE hSCManager, + _Out_writes_bytes_opt_(cbBufSize) LPQUERY_SERVICE_LOCK_STATUSA lpLockStatus, + _In_ DWORD cbBufSize, + _Out_ LPDWORD pcbBytesNeeded); + +_Must_inspect_result_ +BOOL +WINAPI +QueryServiceLockStatusW( + _In_ SC_HANDLE hSCManager, + _Out_writes_bytes_opt_(cbBufSize) LPQUERY_SERVICE_LOCK_STATUSW lpLockStatus, + _In_ DWORD cbBufSize, + _Out_ LPDWORD pcbBytesNeeded); + +_Must_inspect_result_ +BOOL +WINAPI +QueryServiceObjectSecurity( + _In_ SC_HANDLE hService, + _In_ SECURITY_INFORMATION dwSecurityInformation, + _Out_writes_bytes_opt_(cbBufSize) PSECURITY_DESCRIPTOR lpSecurityDescriptor, + _In_ DWORD cbBufSize, + _Out_ LPDWORD pcbBytesNeeded); + +_Must_inspect_result_ BOOL WINAPI QueryServiceStatus(_In_ SC_HANDLE, _Out_ LPSERVICE_STATUS); + +_Must_inspect_result_ +BOOL +WINAPI +QueryServiceStatusEx( + _In_ SC_HANDLE hService, + _In_ SC_STATUS_TYPE InfoLevel, + _Out_writes_bytes_opt_(cbBufSize) LPBYTE lpBuffer, + _In_ DWORD cbBufSize, + _Out_ LPDWORD pcbBytesNeeded); + +_Must_inspect_result_ SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerA(_In_ LPCSTR, _In_ LPHANDLER_FUNCTION); +_Must_inspect_result_ SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW(_In_ LPCWSTR, _In_ LPHANDLER_FUNCTION); +_Must_inspect_result_ SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExA(_In_ LPCSTR, _In_ LPHANDLER_FUNCTION_EX, _In_opt_ LPVOID); +_Must_inspect_result_ SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW(_In_ LPCWSTR, _In_ LPHANDLER_FUNCTION_EX, _In_opt_ LPVOID); +BOOL WINAPI SetServiceObjectSecurity(_In_ SC_HANDLE, _In_ SECURITY_INFORMATION, _In_ PSECURITY_DESCRIPTOR); +BOOL WINAPI SetServiceStatus(_In_ SERVICE_STATUS_HANDLE, _In_ LPSERVICE_STATUS); + +BOOL +WINAPI +StartServiceA( + _In_ SC_HANDLE hService, + _In_ DWORD dwNumServiceArgs, + _In_reads_opt_(dwNumServiceArgs) LPCSTR *lpServiceArgVectors); + +BOOL +WINAPI +StartServiceW( + _In_ SC_HANDLE hService, + _In_ DWORD dwNumServiceArgs, + _In_reads_opt_(dwNumServiceArgs) LPCWSTR *lpServiceArgVectors); + +BOOL WINAPI StartServiceCtrlDispatcherA(_In_ const SERVICE_TABLE_ENTRYA*); +BOOL WINAPI StartServiceCtrlDispatcherW(_In_ const SERVICE_TABLE_ENTRYW*); +BOOL WINAPI UnlockServiceDatabase(_In_ SC_LOCK); #ifdef UNICODE typedef ENUM_SERVICE_STATUSW ENUM_SERVICE_STATUS,*LPENUM_SERVICE_STATUS; @@ -263,6 +465,8 @@ typedef SERVICE_DESCRIPTIONW SERVICE_DESCRIPTION; typedef LPSERVICE_DESCRIPTIONW LPSERVICE_DESCRIPTION; typedef SERVICE_FAILURE_ACTIONSW SERVICE_FAILURE_ACTIONS; typedef LPSERVICE_FAILURE_ACTIONSW LPSERVICE_FAILURE_ACTIONS; +typedef SERVICE_REQUIRED_PRIVILEGES_INFOW SERVICE_REQUIRED_PRIVILEGES_INFO; +typedef LPSERVICE_REQUIRED_PRIVILEGES_INFOW LPSERVICE_REQUIRED_PRIVILEGES_INFO; #define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEW #define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEW #define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERW @@ -295,6 +499,8 @@ typedef SERVICE_DESCRIPTIONA SERVICE_DESCRIPTION; typedef LPSERVICE_DESCRIPTIONA LPSERVICE_DESCRIPTION; typedef SERVICE_FAILURE_ACTIONSA SERVICE_FAILURE_ACTIONS; typedef LPSERVICE_FAILURE_ACTIONSA LPSERVICE_FAILURE_ACTIONS; +typedef SERVICE_REQUIRED_PRIVILEGES_INFOA SERVICE_REQUIRED_PRIVILEGES_INFO; +typedef LPSERVICE_REQUIRED_PRIVILEGES_INFOA LPSERVICE_REQUIRED_PRIVILEGES_INFO; #define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEA #define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEA #define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERA diff --git a/include/psdk/winuser.h b/include/psdk/winuser.h index 24f4666da2c..4d8285138a3 100644 --- a/include/psdk/winuser.h +++ b/include/psdk/winuser.h @@ -4358,7 +4358,6 @@ BOOL WINAPI FlashWindow(_In_ HWND, _In_ BOOL); BOOL WINAPI FlashWindowEx(_In_ PFLASHWINFO); #endif int WINAPI FrameRect(_In_ HDC, _In_ LPCRECT, _In_ HBRUSH); -BOOL WINAPI FrameRgn(HDC,HRGN,HBRUSH,int,int); HWND WINAPI GetActiveWindow(void); HWND WINAPI GetAncestor(_In_ HWND, _In_ UINT); SHORT WINAPI GetAsyncKeyState(_In_ int); @@ -4678,7 +4677,6 @@ GetUserObjectSecurity( HWND WINAPI GetWindow(_In_ HWND, _In_ UINT); DWORD WINAPI GetWindowContextHelpId(_In_ HWND); HDC WINAPI GetWindowDC(_In_opt_ HWND); -BOOL WINAPI GetWindowExtEx(HDC,LPSIZE); BOOL WINAPI GetWindowPlacement(_In_ HWND, _Inout_ WINDOWPLACEMENT*); BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT); int WINAPI GetWindowRgn(_In_ HWND, _In_ HRGN); diff --git a/include/reactos/libs/libjpeg/jerror.h b/include/reactos/libs/libjpeg/jerror.h index 1cfb2b19d85..a4b661f716d 100644 --- a/include/reactos/libs/libjpeg/jerror.h +++ b/include/reactos/libs/libjpeg/jerror.h @@ -2,7 +2,7 @@ * jerror.h * * Copyright (C) 1994-1997, Thomas G. Lane. - * Modified 1997-2009 by Guido Vollbeding. + * Modified 1997-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -106,11 +106,11 @@ JMESSAGE(JERR_QUANT_COMPONENTS, "Cannot quantize more than %d color components") JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors") JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors") +JMESSAGE(JERR_SOF_BEFORE, "Invalid JPEG file structure: %s before SOF") JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers") JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker") JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x") JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers") -JMESSAGE(JERR_SOS_NO_SOF, "Invalid JPEG file structure: SOS before SOF") JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s") JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file") JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file") diff --git a/include/reactos/libs/libjpeg/jmorecfg.h b/include/reactos/libs/libjpeg/jmorecfg.h index b543a04fd55..2407edbef8c 100644 --- a/include/reactos/libs/libjpeg/jmorecfg.h +++ b/include/reactos/libs/libjpeg/jmorecfg.h @@ -2,7 +2,7 @@ * jmorecfg.h * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 1997-2009 by Guido Vollbeding. + * Modified 1997-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -187,63 +187,14 @@ typedef unsigned int JDIMENSION; * or code profilers that require it. */ -#ifdef _WIN32 -# if defined(ALL_STATIC) -# if defined(JPEG_DLL) -# undef JPEG_DLL -# endif -# if !defined(JPEG_STATIC) -# define JPEG_STATIC -# endif -# endif -# if defined(JPEG_DLL) -# if defined(JPEG_STATIC) -# undef JPEG_STATIC -# endif -# endif -# if defined(JPEG_DLL) -/* building a DLL */ -# define JPEG_IMPEXP __declspec(dllexport) -# elif defined(JPEG_STATIC) -/* building or linking to a static library */ -# define JPEG_IMPEXP -# else -/* linking to the DLL */ -# define JPEG_IMPEXP __declspec(dllimport) -# endif -# if !defined(JPEG_API) -# define JPEG_API __cdecl -# endif -/* The only remaining magic that is necessary for cygwin */ -#elif defined(__CYGWIN__) -# if !defined(JPEG_IMPEXP) -# define JPEG_IMPEXP -# endif -# if !defined(JPEG_API) -# define JPEG_API __cdecl -# endif -#endif - -/* Ensure our magic doesn't hurt other platforms */ -#if !defined(JPEG_IMPEXP) -# define JPEG_IMPEXP -#endif -#if !defined(JPEG_API) -# define JPEG_API -#endif - /* a function called through method pointers: */ #define METHODDEF(type) static type /* a function used only in its module: */ #define LOCAL(type) static type /* a function referenced thru EXTERNs: */ -#define GLOBAL(type) type JPEG_API +#define GLOBAL(type) type /* a reference to a GLOBAL function: */ -#ifndef EXTERN -# define EXTERN(type) extern JPEG_IMPEXP type JPEG_API -/* a reference to a "GLOBAL" function exported by sourcefiles of utility progs */ -#endif /* EXTERN */ -#define EXTERN_1(type) extern type JPEG_API +#define EXTERN(type) extern type /* This macro is used to declare a "method", that is, a function pointer. @@ -259,6 +210,26 @@ typedef unsigned int JDIMENSION; #endif +/* The noreturn type identifier is used to declare functions + * which cannot return. + * Compilers can thus create more optimized code and perform + * better checks for warnings and errors. + * Static analyzer tools can make improved inferences about + * execution paths and are prevented from giving false alerts. + * + * Unfortunately, the proposed specifications of corresponding + * extensions in the Dec 2011 ISO C standard revision (C11), + * GCC, MSVC, etc. are not viable. + * Thus we introduce a user defined type to declare noreturn + * functions at least for clarity. A proper compiler would + * have a suitable noreturn type to match in place of void. + */ + +#ifndef HAVE_NORETURN_T +typedef void noreturn_t; +#endif + + /* Here is the pseudo-keyword for declaring pointers that must be "far" * on 80x86 machines. Most of the specialized coding for 80x86 is handled * by just saying "FAR *" where such a pointer is needed. In a few places @@ -281,15 +252,16 @@ typedef unsigned int JDIMENSION; * Defining HAVE_BOOLEAN before including jpeglib.h should make it work. */ -#ifndef HAVE_BOOLEAN -typedef int boolean; -#endif +#ifdef HAVE_BOOLEAN #ifndef FALSE /* in case these macros already exist */ #define FALSE 0 /* values of boolean */ #endif #ifndef TRUE #define TRUE 1 #endif +#else +typedef enum { FALSE = 0, TRUE = 1 } boolean; +#endif /* @@ -361,9 +333,7 @@ typedef int boolean; * the offsets will also change the order in which colormap data is organized. * RESTRICTIONS: * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats. - * 2. These macros only affect RGB<=>YCbCr color conversion, so they are not - * useful if you are using JPEG color spaces other than YCbCr or grayscale. - * 3. The color quantizer modules will not behave desirably if RGB_PIXELSIZE + * 2. The color quantizer modules will not behave desirably if RGB_PIXELSIZE * is not 3 (they don't understand about dummy color components!). So you * can't use color quantization if you change that value. */ diff --git a/include/reactos/libs/libjpeg/jpegint.h b/include/reactos/libs/libjpeg/jpegint.h index 0c27a4e4a03..c0d5c142022 100644 --- a/include/reactos/libs/libjpeg/jpegint.h +++ b/include/reactos/libs/libjpeg/jpegint.h @@ -2,7 +2,7 @@ * jpegint.h * * Copyright (C) 1991-1997, Thomas G. Lane. - * Modified 1997-2009 by Guido Vollbeding. + * Modified 1997-2011 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -321,21 +321,41 @@ struct jpeg_color_quantizer { #define jinit_memory_mgr jIMemMgr #define jdiv_round_up jDivRound #define jround_up jRound +#define jzero_far jZeroFar #define jcopy_sample_rows jCopySamples #define jcopy_block_row jCopyBlocks -#define jzero_far jZeroFar #define jpeg_zigzag_order jZIGTable #define jpeg_natural_order jZAGTable -#define jpeg_natural_order7 jZAGTable7 -#define jpeg_natural_order6 jZAGTable6 -#define jpeg_natural_order5 jZAGTable5 -#define jpeg_natural_order4 jZAGTable4 -#define jpeg_natural_order3 jZAGTable3 -#define jpeg_natural_order2 jZAGTable2 +#define jpeg_natural_order7 jZAG7Table +#define jpeg_natural_order6 jZAG6Table +#define jpeg_natural_order5 jZAG5Table +#define jpeg_natural_order4 jZAG4Table +#define jpeg_natural_order3 jZAG3Table +#define jpeg_natural_order2 jZAG2Table #define jpeg_aritab jAriTab #endif /* NEED_SHORT_EXTERNAL_NAMES */ +/* On normal machines we can apply MEMCOPY() and MEMZERO() to sample arrays + * and coefficient-block arrays. This won't work on 80x86 because the arrays + * are FAR and we're assuming a small-pointer memory model. However, some + * DOS compilers provide far-pointer versions of memcpy() and memset() even + * in the small-model libraries. These will be used if USE_FMEM is defined. + * Otherwise, the routines in jutils.c do it the hard way. + */ + +#ifndef NEED_FAR_POINTERS /* normal case, same as regular macro */ +#define FMEMZERO(target,size) MEMZERO(target,size) +#else /* 80x86 case */ +#ifdef USE_FMEM +#define FMEMZERO(target,size) _fmemset((void FAR *)(target), 0, (size_t)(size)) +#else +EXTERN(void) jzero_far JPP((void FAR * target, size_t bytestozero)); +#define FMEMZERO(target,size) jzero_far(target, size) +#endif +#endif + + /* Compression module initialization routines */ EXTERN(void) jinit_compress_master JPP((j_compress_ptr cinfo)); EXTERN(void) jinit_c_master_control JPP((j_compress_ptr cinfo, @@ -381,7 +401,6 @@ EXTERN(void) jcopy_sample_rows JPP((JSAMPARRAY input_array, int source_row, int num_rows, JDIMENSION num_cols)); EXTERN(void) jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row, JDIMENSION num_blocks)); -EXTERN(void) jzero_far JPP((void FAR * target, size_t bytestozero)); /* Constant tables in jutils.c */ #if 0 /* This table is not actually needed in v6a */ extern const int jpeg_zigzag_order[]; /* natural coef order to zigzag order */ diff --git a/include/reactos/libs/libjpeg/jpeglib.h b/include/reactos/libs/libjpeg/jpeglib.h index 1eb1fac033f..0a6dac44c33 100644 --- a/include/reactos/libs/libjpeg/jpeglib.h +++ b/include/reactos/libs/libjpeg/jpeglib.h @@ -2,7 +2,7 @@ * jpeglib.h * * Copyright (C) 1991-1998, Thomas G. Lane. - * Modified 2002-2010 by Guido Vollbeding. + * Modified 2002-2012 by Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -34,12 +34,12 @@ extern "C" { #endif /* Version IDs for the JPEG library. - * Might be useful for tests like "#if JPEG_LIB_VERSION >= 80". + * Might be useful for tests like "#if JPEG_LIB_VERSION >= 90". */ -#define JPEG_LIB_VERSION 80 /* Compatibility version 8.0 */ -#define JPEG_LIB_VERSION_MAJOR 8 -#define JPEG_LIB_VERSION_MINOR 3 +#define JPEG_LIB_VERSION 90 /* Compatibility version 9.0 */ +#define JPEG_LIB_VERSION_MAJOR 9 +#define JPEG_LIB_VERSION_MINOR 0 /* Various constants determining the sizes of things. @@ -47,7 +47,7 @@ extern "C" { * if you want to be compatible. */ -#define DCTSIZE 8 /* The basic DCT block is 8x8 samples */ +#define DCTSIZE 8 /* The basic DCT block is 8x8 coefficients */ #define DCTSIZE2 64 /* DCTSIZE squared; # of elements in a block */ #define NUM_QUANT_TBLS 4 /* Quantization tables are numbered 0..3 */ #define NUM_HUFF_TBLS 4 /* Huffman tables are numbered 0..3 */ @@ -221,6 +221,13 @@ typedef enum { JCS_YCCK /* Y/Cb/Cr/K */ } J_COLOR_SPACE; +/* Supported color transforms. */ + +typedef enum { + JCT_NONE = 0, + JCT_SUBTRACT_GREEN = 1 +} J_COLOR_TRANSFORM; + /* DCT/IDCT algorithm options. */ typedef enum { @@ -369,7 +376,10 @@ struct jpeg_compress_struct { UINT16 X_density; /* Horizontal pixel density */ UINT16 Y_density; /* Vertical pixel density */ boolean write_Adobe_marker; /* should an Adobe marker be written? */ - + + J_COLOR_TRANSFORM color_transform; + /* Color transform identifier, writes LSE marker if nonzero */ + /* State variable: index of next scanline to be written to * jpeg_write_scanlines(). Application may use this to control its * processing loop, e.g., "while (next_scanline < image_height)". @@ -589,6 +599,9 @@ struct jpeg_decompress_struct { boolean saw_Adobe_marker; /* TRUE iff an Adobe APP14 marker was found */ UINT8 Adobe_transform; /* Color transform code from Adobe marker */ + J_COLOR_TRANSFORM color_transform; + /* Color transform identifier derived from LSE marker, otherwise zero */ + boolean CCIR601_sampling; /* TRUE=first samples are cosited */ /* Aside from the specific data retained from APPn markers known to the @@ -681,7 +694,7 @@ struct jpeg_decompress_struct { struct jpeg_error_mgr { /* Error exit handler: does not return to caller */ - JMETHOD(void, error_exit, (j_common_ptr cinfo)); + JMETHOD(noreturn_t, error_exit, (j_common_ptr cinfo)); /* Conditionally emit a trace or warning message */ JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level)); /* Routine that actually outputs a trace or error message */ diff --git a/include/reactos/libs/libjpeg/jversion.h b/include/reactos/libs/libjpeg/jversion.h index e868538c884..232085f13b7 100644 --- a/include/reactos/libs/libjpeg/jversion.h +++ b/include/reactos/libs/libjpeg/jversion.h @@ -1,7 +1,7 @@ /* * jversion.h * - * Copyright (C) 1991-2011, Thomas G. Lane, Guido Vollbeding. + * Copyright (C) 1991-2013, Thomas G. Lane, Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -9,6 +9,6 @@ */ -#define JVERSION "8c 16-Jan-2011" +#define JVERSION "9 13-Jan-2013" -#define JCOPYRIGHT "Copyright (C) 2011, Thomas G. Lane, Guido Vollbeding" +#define JCOPYRIGHT "Copyright (C) 2013, Thomas G. Lane, Guido Vollbeding" diff --git a/include/reactos/libs/libjpeg/transupp.h b/include/reactos/libs/libjpeg/transupp.h index 7c16c19c440..9aa0af385a8 100644 --- a/include/reactos/libs/libjpeg/transupp.h +++ b/include/reactos/libs/libjpeg/transupp.h @@ -1,7 +1,7 @@ /* * transupp.h * - * Copyright (C) 1997-2009, Thomas G. Lane, Guido Vollbeding. + * Copyright (C) 1997-2011, Thomas G. Lane, Guido Vollbeding. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * @@ -57,6 +57,7 @@ * corner up and/or left to make it so, simultaneously increasing the region * dimensions to keep the lower right crop corner unchanged. (Thus, the * output image covers at least the requested region, but may cover more.) + * The adjustment of the region dimensions may be optionally disabled. * * We also provide a lossless-resize option, which is kind of a lossless-crop * operation in the DCT coefficient block domain - it discards higher-order @@ -106,13 +107,15 @@ typedef enum { /* * Codes for crop parameters, which can individually be unspecified, - * positive, or negative. (Negative width or height makes no sense, though.) + * positive or negative for xoffset or yoffset, + * positive or forced for width or height. */ typedef enum { - JCROP_UNSET, - JCROP_POS, - JCROP_NEG + JCROP_UNSET, + JCROP_POS, + JCROP_NEG, + JCROP_FORCE } JCROP_CODE; /* @@ -133,9 +136,9 @@ typedef struct { * These can be filled in by jtransform_parse_crop_spec(). */ JDIMENSION crop_width; /* Width of selected region */ - JCROP_CODE crop_width_set; + JCROP_CODE crop_width_set; /* (forced disables adjustment) */ JDIMENSION crop_height; /* Height of selected region */ - JCROP_CODE crop_height_set; + JCROP_CODE crop_height_set; /* (forced disables adjustment) */ JDIMENSION crop_xoffset; /* X offset of selected region */ JCROP_CODE crop_xoffset_set; /* (negative measures from right edge) */ JDIMENSION crop_yoffset; /* Y offset of selected region */ diff --git a/include/reactos/libs/libpng/png.h b/include/reactos/libs/libpng/png.h index 4c37e58a4c1..a0896647611 100644 --- a/include/reactos/libs/libpng/png.h +++ b/include/reactos/libs/libpng/png.h @@ -1,8 +1,8 @@ /* png.h - header file for PNG reference library * - * libpng version 1.5.12 - July 11, 2012 - * Copyright (c) 1998-2012 Glenn Randers-Pehrson + * libpng version 1.5.14 - January 24, 2013 + * Copyright (c) 1998-2013 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -11,7 +11,7 @@ * Authors and maintainers: * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat * libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger - * libpng versions 0.97, January 1998, through 1.5.12 - July 11, 2012: Glenn + * libpng versions 0.97, January 1998, through 1.5.14 - January 24, 2013: Glenn * See also "Contributing Authors", below. * * Note about libpng version numbers: @@ -178,6 +178,12 @@ * 1.5.11rc01-05 15 10511 15.so.15.11[.0] * 1.5.11 15 10511 15.so.15.11[.0] * 1.5.12 15 10512 15.so.15.12[.0] + * 1.5.13beta01-02 15 10513 15.so.15.13[.0] + * 1.5.13rc01 15 10513 15.so.15.13[.0] + * 1.5.13 15 10513 15.so.15.13[.0] + * 1.5.14beta01-08 15 10514 15.so.15.14[.0] + * 1.5.14rc01-03 15 10514 15.so.15.14[.0] + * 1.5.14 15 10514 15.so.15.14[.0] * * Henceforth the source version will match the shared-library major * and minor numbers; the shared-library major version number will be @@ -209,8 +215,8 @@ * * This code is released under the libpng license. * - * libpng versions 1.2.6, August 15, 2004, through 1.5.12, July 11, 2012, are - * Copyright (c) 2004, 2006-2012 Glenn Randers-Pehrson, and are + * libpng versions 1.2.6, August 15, 2004, through 1.5.14, January 24, 2013, are + * Copyright (c) 2004, 2006-2013 Glenn Randers-Pehrson, and are * distributed according to the same disclaimer and license as libpng-1.2.5 * with the following individual added to the list of Contributing Authors: * @@ -321,13 +327,13 @@ * Y2K compliance in libpng: * ========================= * - * July 11, 2012 + * January 24, 2013 * * Since the PNG Development group is an ad-hoc body, we can't make * an official declaration. * * This is your unofficial assurance that libpng from version 0.71 and - * upward through 1.5.12 are Y2K compliant. It is my belief that + * upward through 1.5.14 are Y2K compliant. It is my belief that * earlier versions were also Y2K compliant. * * Libpng only has two year fields. One is a 2-byte unsigned integer @@ -386,9 +392,9 @@ */ /* Version information for png.h - this should match the version in png.c */ -#define PNG_LIBPNG_VER_STRING "1.5.12" +#define PNG_LIBPNG_VER_STRING "1.5.14" #define PNG_HEADER_VERSION_STRING \ - " libpng version 1.5.12 - July 11, 2012\n" + " libpng version 1.5.14 - January 24, 2013\n" #define PNG_LIBPNG_VER_SONUM 15 #define PNG_LIBPNG_VER_DLLNUM 15 @@ -396,7 +402,7 @@ /* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */ #define PNG_LIBPNG_VER_MAJOR 1 #define PNG_LIBPNG_VER_MINOR 5 -#define PNG_LIBPNG_VER_RELEASE 12 +#define PNG_LIBPNG_VER_RELEASE 14 /* This should match the numeric part of the final component of * PNG_LIBPNG_VER_STRING, omitting any leading zero: @@ -427,7 +433,7 @@ * version 1.0.0 was mis-numbered 100 instead of 10000). From * version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release */ -#define PNG_LIBPNG_VER 10512 /* 1.5.12 */ +#define PNG_LIBPNG_VER 10514 /* 1.5.14 */ /* Library configuration: these options cannot be changed after * the library has been built. @@ -549,7 +555,7 @@ extern "C" { /* This triggers a compiler error in png.c, if png.c and png.h * do not agree upon the version number. */ -typedef char* png_libpng_version_1_5_12; +typedef char* png_libpng_version_1_5_14; /* Three color definitions. The order of the red, green, and blue, (and the * exact size) is not important, although the size of the fields need to @@ -1158,9 +1164,9 @@ PNG_EXPORT(31, void, png_set_gray_to_rgb, (png_structp png_ptr)); #define PNG_RGB_TO_GRAY_DEFAULT (-1)/*for red/green coefficients*/ PNG_FP_EXPORT(32, void, png_set_rgb_to_gray, (png_structp png_ptr, - int error_action, double red, double green)); + int error_action, double red, double green)) PNG_FIXED_EXPORT(33, void, png_set_rgb_to_gray_fixed, (png_structp png_ptr, - int error_action, png_fixed_point red, png_fixed_point green)); + int error_action, png_fixed_point red, png_fixed_point green)) PNG_EXPORT(34, png_byte, png_get_rgb_to_gray_status, (png_const_structp png_ptr)); @@ -1228,9 +1234,9 @@ PNG_EXPORT(35, void, png_build_grayscale_palette, (int bit_depth, #define PNG_ALPHA_BROKEN 3 /* the alpha channel is gamma encoded */ PNG_FP_EXPORT(227, void, png_set_alpha_mode, (png_structp png_ptr, int mode, - double output_gamma)); + double output_gamma)) PNG_FIXED_EXPORT(228, void, png_set_alpha_mode_fixed, (png_structp png_ptr, - int mode, png_fixed_point output_gamma)); + int mode, png_fixed_point output_gamma)) #endif #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_ALPHA_MODE_SUPPORTED) @@ -1453,10 +1459,10 @@ PNG_EXPORT(46, void, png_set_invert_mono, (png_structp png_ptr)); */ PNG_FP_EXPORT(47, void, png_set_background, (png_structp png_ptr, png_const_color_16p background_color, int background_gamma_code, - int need_expand, double background_gamma)); + int need_expand, double background_gamma)) PNG_FIXED_EXPORT(215, void, png_set_background_fixed, (png_structp png_ptr, png_const_color_16p background_color, int background_gamma_code, - int need_expand, png_fixed_point background_gamma)); + int need_expand, png_fixed_point background_gamma)) #endif #ifdef PNG_READ_BACKGROUND_SUPPORTED # define PNG_BACKGROUND_GAMMA_UNKNOWN 0 @@ -1505,9 +1511,9 @@ PNG_EXPORT(49, void, png_set_quantize, */ PNG_FP_EXPORT(50, void, png_set_gamma, (png_structp png_ptr, double screen_gamma, - double override_file_gamma)); + double override_file_gamma)) PNG_FIXED_EXPORT(208, void, png_set_gamma_fixed, (png_structp png_ptr, - png_fixed_point screen_gamma, png_fixed_point override_file_gamma)); + png_fixed_point screen_gamma, png_fixed_point override_file_gamma)) #endif #ifdef PNG_WRITE_FLUSH_SUPPORTED @@ -1667,11 +1673,11 @@ PNG_EXPORT(67, void, png_set_filter, */ PNG_FP_EXPORT(68, void, png_set_filter_heuristics, (png_structp png_ptr, int heuristic_method, int num_weights, png_const_doublep filter_weights, - png_const_doublep filter_costs)); + png_const_doublep filter_costs)) PNG_FIXED_EXPORT(209, void, png_set_filter_heuristics_fixed, (png_structp png_ptr, int heuristic_method, int num_weights, png_const_fixed_point_p - filter_weights, png_const_fixed_point_p filter_costs)); + filter_weights, png_const_fixed_point_p filter_costs)) #endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */ /* Heuristic used for row filter selection. These defines should NOT be @@ -2053,9 +2059,9 @@ PNG_EXPORT(124, png_uint_32, png_get_y_pixels_per_meter, /* Returns pixel aspect ratio, computed from pHYs chunk data. */ PNG_FP_EXPORT(125, float, png_get_pixel_aspect_ratio, - (png_const_structp png_ptr, png_const_infop info_ptr)); + (png_const_structp png_ptr, png_const_infop info_ptr)) PNG_FIXED_EXPORT(210, png_fixed_point, png_get_pixel_aspect_ratio_fixed, - (png_const_structp png_ptr, png_const_infop info_ptr)); + (png_const_structp png_ptr, png_const_infop info_ptr)) /* Returns image x, y offset in pixels or microns, from oFFs chunk data. */ PNG_EXPORT(126, png_int_32, png_get_x_offset_pixels, @@ -2088,11 +2094,11 @@ PNG_EXPORT(132, void, png_set_bKGD, (png_structp png_ptr, png_infop info_ptr, PNG_FP_EXPORT(133, png_uint_32, png_get_cHRM, (png_const_structp png_ptr, png_const_infop info_ptr, double *white_x, double *white_y, double *red_x, double *red_y, double *green_x, double *green_y, double *blue_x, - double *blue_y)); + double *blue_y)) PNG_FP_EXPORT(230, png_uint_32, png_get_cHRM_XYZ, (png_structp png_ptr, png_const_infop info_ptr, double *red_X, double *red_Y, double *red_Z, double *green_X, double *green_Y, double *green_Z, double *blue_X, - double *blue_Y, double *blue_Z)); + double *blue_Y, double *blue_Z)) #ifdef PNG_FIXED_POINT_SUPPORTED /* Otherwise not implemented */ PNG_FIXED_EXPORT(134, png_uint_32, png_get_cHRM_fixed, (png_const_structp png_ptr, @@ -2100,7 +2106,7 @@ PNG_FIXED_EXPORT(134, png_uint_32, png_get_cHRM_fixed, png_fixed_point *int_white_y, png_fixed_point *int_red_x, png_fixed_point *int_red_y, png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point *int_blue_x, - png_fixed_point *int_blue_y)); + png_fixed_point *int_blue_y)) #endif PNG_FIXED_EXPORT(231, png_uint_32, png_get_cHRM_XYZ_fixed, (png_structp png_ptr, png_const_infop info_ptr, @@ -2108,46 +2114,46 @@ PNG_FIXED_EXPORT(231, png_uint_32, png_get_cHRM_XYZ_fixed, png_fixed_point *int_red_Z, png_fixed_point *int_green_X, png_fixed_point *int_green_Y, png_fixed_point *int_green_Z, png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y, - png_fixed_point *int_blue_Z)); + png_fixed_point *int_blue_Z)) #endif #ifdef PNG_cHRM_SUPPORTED PNG_FP_EXPORT(135, void, png_set_cHRM, (png_structp png_ptr, png_infop info_ptr, double white_x, double white_y, double red_x, double red_y, double green_x, - double green_y, double blue_x, double blue_y)); + double green_y, double blue_x, double blue_y)) PNG_FP_EXPORT(232, void, png_set_cHRM_XYZ, (png_structp png_ptr, png_infop info_ptr, double red_X, double red_Y, double red_Z, double green_X, double green_Y, double green_Z, double blue_X, - double blue_Y, double blue_Z)); + double blue_Y, double blue_Z)) PNG_FIXED_EXPORT(136, void, png_set_cHRM_fixed, (png_structp png_ptr, png_infop info_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y, png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, - png_fixed_point int_blue_y)); + png_fixed_point int_blue_y)) PNG_FIXED_EXPORT(233, void, png_set_cHRM_XYZ_fixed, (png_structp png_ptr, png_infop info_ptr, png_fixed_point int_red_X, png_fixed_point int_red_Y, png_fixed_point int_red_Z, png_fixed_point int_green_X, png_fixed_point int_green_Y, png_fixed_point int_green_Z, png_fixed_point int_blue_X, png_fixed_point int_blue_Y, - png_fixed_point int_blue_Z)); + png_fixed_point int_blue_Z)) #endif #ifdef PNG_gAMA_SUPPORTED PNG_FP_EXPORT(137, png_uint_32, png_get_gAMA, (png_const_structp png_ptr, png_const_infop info_ptr, - double *file_gamma)); + double *file_gamma)) PNG_FIXED_EXPORT(138, png_uint_32, png_get_gAMA_fixed, (png_const_structp png_ptr, png_const_infop info_ptr, - png_fixed_point *int_file_gamma)); + png_fixed_point *int_file_gamma)) #endif #ifdef PNG_gAMA_SUPPORTED PNG_FP_EXPORT(139, void, png_set_gAMA, (png_structp png_ptr, - png_infop info_ptr, double file_gamma)); + png_infop info_ptr, double file_gamma)) PNG_FIXED_EXPORT(140, void, png_set_gAMA_fixed, (png_structp png_ptr, - png_infop info_ptr, png_fixed_point int_file_gamma)); + png_infop info_ptr, png_fixed_point int_file_gamma)) #endif #ifdef PNG_hIST_SUPPORTED @@ -2313,7 +2319,7 @@ PNG_EXPORT(167, void, png_set_tRNS, #ifdef PNG_sCAL_SUPPORTED PNG_FP_EXPORT(168, png_uint_32, png_get_sCAL, (png_const_structp png_ptr, png_const_infop info_ptr, - int *unit, double *width, double *height)); + int *unit, double *width, double *height)) #ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED /* NOTE: this API is currently implemented using floating point arithmetic, * consequently it can only be used on systems with floating point support. @@ -2323,7 +2329,7 @@ PNG_FP_EXPORT(168, png_uint_32, png_get_sCAL, PNG_FIXED_EXPORT(214, png_uint_32, png_get_sCAL_fixed, (png_structp png_ptr, png_const_infop info_ptr, int *unit, png_fixed_point *width, - png_fixed_point *height)); + png_fixed_point *height)) #endif PNG_EXPORT(169, png_uint_32, png_get_sCAL_s, (png_const_structp png_ptr, png_const_infop info_ptr, @@ -2331,10 +2337,10 @@ PNG_EXPORT(169, png_uint_32, png_get_sCAL_s, PNG_FP_EXPORT(170, void, png_set_sCAL, (png_structp png_ptr, png_infop info_ptr, - int unit, double width, double height)); + int unit, double width, double height)) PNG_FIXED_EXPORT(213, void, png_set_sCAL_fixed, (png_structp png_ptr, png_infop info_ptr, int unit, png_fixed_point width, - png_fixed_point height)); + png_fixed_point height)) PNG_EXPORT(171, void, png_set_sCAL_s, (png_structp png_ptr, png_infop info_ptr, int unit, png_const_charp swidth, png_const_charp sheight)); @@ -2447,17 +2453,17 @@ PNG_EXPORT(195, png_uint_32, png_get_y_pixels_per_inch, (png_const_structp png_ptr, png_const_infop info_ptr)); PNG_FP_EXPORT(196, float, png_get_x_offset_inches, - (png_const_structp png_ptr, png_const_infop info_ptr)); + (png_const_structp png_ptr, png_const_infop info_ptr)) #ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */ PNG_FIXED_EXPORT(211, png_fixed_point, png_get_x_offset_inches_fixed, - (png_structp png_ptr, png_const_infop info_ptr)); + (png_structp png_ptr, png_const_infop info_ptr)) #endif PNG_FP_EXPORT(197, float, png_get_y_offset_inches, (png_const_structp png_ptr, - png_const_infop info_ptr)); + png_const_infop info_ptr)) #ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */ PNG_FIXED_EXPORT(212, png_fixed_point, png_get_y_offset_inches_fixed, - (png_structp png_ptr, png_const_infop info_ptr)); + (png_structp png_ptr, png_const_infop info_ptr)) #endif # ifdef PNG_pHYs_SUPPORTED diff --git a/include/reactos/libs/libpng/pngconf.h b/include/reactos/libs/libpng/pngconf.h index 5c3eb1454df..f6b38a6a00d 100644 --- a/include/reactos/libs/libpng/pngconf.h +++ b/include/reactos/libs/libpng/pngconf.h @@ -1,9 +1,9 @@ /* pngconf.h - machine configurable file for libpng * - * libpng version 1.5.12 - July 11, 2012 + * libpng version 1.5.14 - January 24, 2013 * - * Copyright (c) 1998-2012 Glenn Randers-Pehrson + * Copyright (c) 1998-2013 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * @@ -177,18 +177,16 @@ * ========================== * This code is used at build time to find PNG_IMPEXP, the API settings * and PNG_EXPORT_TYPE(), it may also set a macro to indicate the DLL - * import processing is possible. On Windows/x86 systems it also sets + * import processing is possible. On Windows systems it also sets * compiler-specific macros to the values required to change the calling * conventions of the various functions. */ -#if ( defined(_Windows) || defined(_WINDOWS) || defined(WIN32) ||\ - defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) ) &&\ - ( defined(_X86_) || defined(_X64_) || defined(_M_IX86) ||\ - defined(_M_X64) || defined(_M_IA64) ) - /* Windows system (DOS doesn't support DLLs) running on x86/x64. Includes - * builds under Cygwin or MinGW. Also includes Watcom builds but these need - * special treatment because they are not compatible with GCC or Visual C - * because of different calling conventions. +#if defined(_Windows) || defined(_WINDOWS) || defined(WIN32) ||\ + defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) + /* Windows system (DOS doesn't support DLLs). Includes builds under Cygwin or + * MinGW on any architecture currently supported by Windows. Also includes + * Watcom builds but these need special treatment because they are not + * compatible with GCC or Visual C because of different calling conventions. */ # if PNG_API_RULE == 2 /* If this line results in an error, either because __watcall is not @@ -202,6 +200,9 @@ # if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800)) # define PNGCAPI __cdecl # if PNG_API_RULE == 1 + /* If this line results in an error __stdcall is not understood and + * PNG_API_RULE should not have been set to '1'. + */ # define PNGAPI __stdcall # endif # else @@ -239,7 +240,7 @@ # endif # endif /* compiler */ -#else /* !Windows/x86 */ +#else /* !Windows */ # if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__) # define PNGAPI _System # else /* !Windows/x86 && !OS/2 */ @@ -344,21 +345,23 @@ # ifndef PNG_NORETURN # define PNG_NORETURN __attribute__((__noreturn__)) # endif -# ifndef PNG_ALLOCATED -# define PNG_ALLOCATED __attribute__((__malloc__)) -# endif -# ifndef PNG_DEPRECATED -# define PNG_DEPRECATED __attribute__((__deprecated__)) -# endif -# ifndef PNG_PRIVATE -# if 0 /* Doesn't work so we use deprecated instead*/ -# define PNG_PRIVATE \ - __attribute__((warning("This function is not exported by libpng."))) -# else -# define PNG_PRIVATE \ - __attribute__((__deprecated__)) +# if __GNUC__ >= 3 +# ifndef PNG_ALLOCATED +# define PNG_ALLOCATED __attribute__((__malloc__)) # endif -# endif +# ifndef PNG_DEPRECATED +# define PNG_DEPRECATED __attribute__((__deprecated__)) +# endif +# ifndef PNG_PRIVATE +# if 0 /* Doesn't work so we use deprecated instead*/ +# define PNG_PRIVATE \ + __attribute__((warning("This function is not exported by libpng."))) +# else +# define PNG_PRIVATE \ + __attribute__((__deprecated__)) +# endif +# endif +# endif /* __GNUC__ >= 3 */ # endif /* __GNUC__ */ # if defined(_MSC_VER) && (_MSC_VER >= 1300) @@ -400,7 +403,7 @@ #ifndef PNG_FP_EXPORT /* A floating point API. */ # ifdef PNG_FLOATING_POINT_SUPPORTED # define PNG_FP_EXPORT(ordinal, type, name, args)\ - PNG_EXPORT(ordinal, type, name, args) + PNG_EXPORT(ordinal, type, name, args); # else /* No floating point APIs */ # define PNG_FP_EXPORT(ordinal, type, name, args) # endif @@ -408,7 +411,7 @@ #ifndef PNG_FIXED_EXPORT /* A fixed point API. */ # ifdef PNG_FIXED_POINT_SUPPORTED # define PNG_FIXED_EXPORT(ordinal, type, name, args)\ - PNG_EXPORT(ordinal, type, name, args) + PNG_EXPORT(ordinal, type, name, args); # else /* No fixed point APIs */ # define PNG_FIXED_EXPORT(ordinal, type, name, args) # endif diff --git a/include/reactos/libs/libpng/pnglibconf.h b/include/reactos/libs/libpng/pnglibconf.h index d93adabaa6c..b5f56840cd8 100644 --- a/include/reactos/libs/libpng/pnglibconf.h +++ b/include/reactos/libs/libpng/pnglibconf.h @@ -3,7 +3,7 @@ /* pnglibconf.h - library build configuration */ -/* Libpng 1.5.12 - July 11, 2012 */ +/* Libpng 1.5.14 - January 24, 2013 */ /* Copyright (c) 1998-2012 Glenn Randers-Pehrson */ diff --git a/include/reactos/libs/libtiff/t4.h b/include/reactos/libs/libtiff/t4.h index 870704ffe8a..b908f54f094 100644 --- a/include/reactos/libs/libtiff/t4.h +++ b/include/reactos/libs/libtiff/t4.h @@ -1,26 +1,26 @@ -/* $Id: t4.h,v 1.1.1.1.2.1 2010-06-08 18:50:41 bfriesen Exp $ */ +/* $Id: t4.h,v 1.3 2010-03-10 18:56:48 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. * - * Permission to use, copy, modify, distribute, and sell this software and + * Permission to use, copy, modify, distribute, and sell this software and * its documentation for any purpose is hereby granted without fee, provided * that (i) the above copyright notices and this permission notice appear in * all copies of the software and related documentation, and (ii) the names of * Sam Leffler and Silicon Graphics may not be used in any advertising or * publicity relating to the software without the specific, prior written * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. */ @@ -33,18 +33,18 @@ * worthwhile to make code & length 8 bits. */ typedef struct tableentry { - unsigned short length; /* bit length of g3 code */ - unsigned short code; /* g3 code */ - short runlen; /* run length in bits */ + unsigned short length; /* bit length of g3 code */ + unsigned short code; /* g3 code */ + short runlen; /* run length in bits */ } tableentry; -#define EOL 0x001 /* EOL code value - 0000 0000 0000 1 */ +#define EOL 0x001 /* EOL code value - 0000 0000 0000 1 */ /* status values returned instead of a run length */ -#define G3CODE_EOL -1 /* NB: ACT_EOL - ACT_WRUNT */ -#define G3CODE_INVALID -2 /* NB: ACT_INVALID - ACT_WRUNT */ -#define G3CODE_EOF -3 /* end of input data */ -#define G3CODE_INCOMP -4 /* incomplete run code */ +#define G3CODE_EOL -1 /* NB: ACT_EOL - ACT_WRUNT */ +#define G3CODE_INVALID -2 /* NB: ACT_INVALID - ACT_WRUNT */ +#define G3CODE_EOF -3 /* end of input data */ +#define G3CODE_INCOMP -4 /* incomplete run code */ /* * Note that these tables are ordered such that the @@ -279,8 +279,8 @@ const tableentry TIFFFaxBlackCodes[] = { { 12, 0x0, G3CODE_INVALID }, /* 0000 0000 0000 */ }; #else -extern const tableentry TIFFFaxWhiteCodes[]; -extern const tableentry TIFFFaxBlackCodes[]; +extern const tableentry TIFFFaxWhiteCodes[]; +extern const tableentry TIFFFaxBlackCodes[]; #endif #endif /* _T4_ */ /* diff --git a/include/reactos/libs/libtiff/tif_config.h b/include/reactos/libs/libtiff/tif_config.h index 4dd77dd8cf1..cdc6803a57c 100644 --- a/include/reactos/libs/libtiff/tif_config.h +++ b/include/reactos/libs/libtiff/tif_config.h @@ -38,6 +38,11 @@ /* Unsigned 64-bit type */ #define TIFF_UINT64_T unsigned __int64 +/* Unsigned 64-bit type formatter */ +#define TIFF_UINT64_FORMAT "%I64u" + +#define TIFF_SSIZE_FORMAT "%ld" + /* Set the native cpu bit order */ #define HOST_FILLORDER FILLORDER_LSB2MSB diff --git a/include/reactos/libs/libtiff/tif_config.vc.h b/include/reactos/libs/libtiff/tif_config.vc.h index 4dd77dd8cf1..c297cf3c498 100644 --- a/include/reactos/libs/libtiff/tif_config.vc.h +++ b/include/reactos/libs/libtiff/tif_config.vc.h @@ -32,15 +32,23 @@ /* The size of a `long', as computed by sizeof. */ #define SIZEOF_LONG 4 +/* Signed 64-bit type formatter */ +#define TIFF_INT64_FORMAT "%I64d" + /* Signed 64-bit type */ #define TIFF_INT64_T signed __int64 +/* Unsigned 64-bit type formatter */ +#define TIFF_UINT64_FORMAT "%I64u" + /* Unsigned 64-bit type */ #define TIFF_UINT64_T unsigned __int64 /* Set the native cpu bit order */ #define HOST_FILLORDER FILLORDER_LSB2MSB +#define snprintf _snprintf + /* Define to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ /* #undef WORDS_BIGENDIAN */ diff --git a/include/reactos/libs/libtiff/tif_config.wince.h b/include/reactos/libs/libtiff/tif_config.wince.h new file mode 100644 index 00000000000..94e92bbf946 --- /dev/null +++ b/include/reactos/libs/libtiff/tif_config.wince.h @@ -0,0 +1,71 @@ +/* $Id: tif_config.wince.h,v 1.3 2010-03-10 18:56:48 bfriesen Exp $ */ + +/* + * TIFF library configuration header for Windows CE platform. + */ +#ifndef _WIN32_WCE +# error This version of tif_config.h header is dedicated for Windows CE platform! +#endif + +/* Define to 1 if you have the header file. */ +#define HAVE_ASSERT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define as 0 or 1 according to the floating point format suported by the + machine */ +#define HAVE_IEEEFP 1 + +/* Define to 1 if you have the `jbg_newlen' function. */ +#define HAVE_JBG_NEWLEN 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#define HAVE_IO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SEARCH_H 1 + +/* Define to 1 if you have the `setmode' function. */ +#define HAVE_SETMODE 1 + +/* Define to 1 if you have the `bsearch' function. */ +#define HAVE_BSEARCH 1 +#define bsearch wceex_bsearch + +/* Define to 1 if you have the `lfind' function. */ +#define HAVE_LFIND 1 +#define lfind wceex_lfind + +/* The size of a `int', as computed by sizeof. */ +#define SIZEOF_INT 4 + +/* Set the native cpu bit order */ +#define HOST_FILLORDER FILLORDER_LSB2MSB + +/* Define to 1 if your processor stores words with the most significant byte + first (like Motorola and SPARC, unlike Intel and VAX). */ +/* #undef WORDS_BIGENDIAN */ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +# ifndef inline +# define inline __inline +# endif +#endif + + +/* + * Local Variables: + * mode: c + * c-basic-offset: 8 + * fill-column: 78 + * End: + */ diff --git a/include/reactos/libs/libtiff/tif_dir.h b/include/reactos/libs/libtiff/tif_dir.h index 515af19942c..6af5f3dc37e 100644 --- a/include/reactos/libs/libtiff/tif_dir.h +++ b/include/reactos/libs/libtiff/tif_dir.h @@ -1,4 +1,4 @@ -/* $Id: tif_dir.h,v 1.30.2.3 2010-06-09 21:15:27 bfriesen Exp $ */ +/* $Id: tif_dir.h,v 1.54 2011-02-18 20:53:05 fwarmerdam Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -30,13 +30,41 @@ * ``Library-private'' Directory-related Definitions. */ +typedef struct { + const TIFFField *info; + int count; + void *value; +} TIFFTagValue; + +/* + * TIFF Image File Directories are comprised of a table of field + * descriptors of the form shown below. The table is sorted in + * ascending order by tag. The values associated with each entry are + * disjoint and may appear anywhere in the file (so long as they are + * placed on a word boundary). + * + * If the value is 4 bytes or less, in ClassicTIFF, or 8 bytes or less in + * BigTIFF, then it is placed in the offset field to save space. If so, + * it is left-justified in the offset field. + */ +typedef struct { + uint16 tdir_tag; /* see below */ + uint16 tdir_type; /* data type; see below */ + uint64 tdir_count; /* number of items; length in spec */ + union { + uint16 toff_short; + uint32 toff_long; + uint64 toff_long8; + } tdir_offset; /* either offset or the data itself if fits */ +} TIFFDirEntry; + /* * Internal format of a TIFF directory entry. */ -typedef struct { -#define FIELD_SETLONGS 4 +typedef struct { +#define FIELD_SETLONGS 4 /* bit vector of fields that are set */ - unsigned long td_fieldsset[FIELD_SETLONGS]; + unsigned long td_fieldsset[FIELD_SETLONGS]; uint32 td_imagewidth, td_imagelength, td_imagedepth; uint32 td_tilewidth, td_tilelength, td_tiledepth; @@ -51,7 +79,8 @@ typedef struct { uint16 td_samplesperpixel; uint32 td_rowsperstrip; uint16 td_minsamplevalue, td_maxsamplevalue; - double td_sminsamplevalue, td_smaxsamplevalue; + double* td_sminsamplevalue; + double* td_smaxsamplevalue; float td_xresolution, td_yresolution; uint16 td_resolutionunit; uint16 td_planarconfig; @@ -64,19 +93,23 @@ typedef struct { /* even though the name is misleading, td_stripsperimage is the number * of striles (=strips or tiles) per plane, and td_nstrips the total * number of striles */ - tstrile_t td_stripsperimage; - tstrile_t td_nstrips; /* size of offset & bytecount arrays */ - toff_t* td_stripoffset; - toff_t* td_stripbytecount; /* FIXME: it should be tsize_t array */ + uint32 td_stripsperimage; + uint32 td_nstrips; /* size of offset & bytecount arrays */ + uint64* td_stripoffset; + uint64* td_stripbytecount; int td_stripbytecountsorted; /* is the bytecount array sorted ascending? */ +#if defined(DEFER_STRILE_LOAD) + TIFFDirEntry td_stripoffset_entry; /* for deferred loading */ + TIFFDirEntry td_stripbytecount_entry; /* for deferred loading */ +#endif uint16 td_nsubifd; - uint32* td_subifd; + uint64* td_subifd; /* YCbCr parameters */ uint16 td_ycbcrsubsampling[2]; uint16 td_ycbcrpositioning; /* Colorimetry parameters */ - float* td_refblackwhite; uint16* td_transferfunction[3]; + float* td_refblackwhite; /* CMYK parameters */ int td_inknameslen; char* td_inknames; @@ -86,115 +119,178 @@ typedef struct { } TIFFDirectory; /* - * Field flags used to indicate fields that have - * been set in a directory, and to reference fields - * when manipulating a directory. + * Field flags used to indicate fields that have been set in a directory, and + * to reference fields when manipulating a directory. */ /* - * FIELD_IGNORE is used to signify tags that are to - * be processed but otherwise ignored. This permits - * antiquated tags to be quietly read and discarded. - * Note that a bit *is* allocated for ignored tags; - * this is understood by the directory reading logic - * which uses this fact to avoid special-case handling - */ -#define FIELD_IGNORE 0 + * FIELD_IGNORE is used to signify tags that are to be processed but otherwise + * ignored. This permits antiquated tags to be quietly read and discarded. + * Note that a bit *is* allocated for ignored tags; this is understood by the + * directory reading logic which uses this fact to avoid special-case handling + */ +#define FIELD_IGNORE 0 /* multi-item fields */ -#define FIELD_IMAGEDIMENSIONS 1 -#define FIELD_TILEDIMENSIONS 2 -#define FIELD_RESOLUTION 3 -#define FIELD_POSITION 4 +#define FIELD_IMAGEDIMENSIONS 1 +#define FIELD_TILEDIMENSIONS 2 +#define FIELD_RESOLUTION 3 +#define FIELD_POSITION 4 /* single-item fields */ -#define FIELD_SUBFILETYPE 5 -#define FIELD_BITSPERSAMPLE 6 -#define FIELD_COMPRESSION 7 -#define FIELD_PHOTOMETRIC 8 -#define FIELD_THRESHHOLDING 9 -#define FIELD_FILLORDER 10 -#define FIELD_ORIENTATION 15 -#define FIELD_SAMPLESPERPIXEL 16 -#define FIELD_ROWSPERSTRIP 17 -#define FIELD_MINSAMPLEVALUE 18 -#define FIELD_MAXSAMPLEVALUE 19 -#define FIELD_PLANARCONFIG 20 -#define FIELD_RESOLUTIONUNIT 22 -#define FIELD_PAGENUMBER 23 -#define FIELD_STRIPBYTECOUNTS 24 -#define FIELD_STRIPOFFSETS 25 -#define FIELD_COLORMAP 26 -#define FIELD_EXTRASAMPLES 31 -#define FIELD_SAMPLEFORMAT 32 -#define FIELD_SMINSAMPLEVALUE 33 -#define FIELD_SMAXSAMPLEVALUE 34 -#define FIELD_IMAGEDEPTH 35 -#define FIELD_TILEDEPTH 36 -#define FIELD_HALFTONEHINTS 37 -#define FIELD_YCBCRSUBSAMPLING 39 -#define FIELD_YCBCRPOSITIONING 40 -#define FIELD_REFBLACKWHITE 41 -#define FIELD_TRANSFERFUNCTION 44 -#define FIELD_INKNAMES 46 -#define FIELD_SUBIFD 49 -/* FIELD_CUSTOM (see tiffio.h) 65 */ +#define FIELD_SUBFILETYPE 5 +#define FIELD_BITSPERSAMPLE 6 +#define FIELD_COMPRESSION 7 +#define FIELD_PHOTOMETRIC 8 +#define FIELD_THRESHHOLDING 9 +#define FIELD_FILLORDER 10 +#define FIELD_ORIENTATION 15 +#define FIELD_SAMPLESPERPIXEL 16 +#define FIELD_ROWSPERSTRIP 17 +#define FIELD_MINSAMPLEVALUE 18 +#define FIELD_MAXSAMPLEVALUE 19 +#define FIELD_PLANARCONFIG 20 +#define FIELD_RESOLUTIONUNIT 22 +#define FIELD_PAGENUMBER 23 +#define FIELD_STRIPBYTECOUNTS 24 +#define FIELD_STRIPOFFSETS 25 +#define FIELD_COLORMAP 26 +#define FIELD_EXTRASAMPLES 31 +#define FIELD_SAMPLEFORMAT 32 +#define FIELD_SMINSAMPLEVALUE 33 +#define FIELD_SMAXSAMPLEVALUE 34 +#define FIELD_IMAGEDEPTH 35 +#define FIELD_TILEDEPTH 36 +#define FIELD_HALFTONEHINTS 37 +#define FIELD_YCBCRSUBSAMPLING 39 +#define FIELD_YCBCRPOSITIONING 40 +#define FIELD_REFBLACKWHITE 41 +#define FIELD_TRANSFERFUNCTION 44 +#define FIELD_INKNAMES 46 +#define FIELD_SUBIFD 49 +/* FIELD_CUSTOM (see tiffio.h) 65 */ /* end of support for well-known tags; codec-private tags follow */ -#define FIELD_CODEC 66 /* base of codec-private tags */ +#define FIELD_CODEC 66 /* base of codec-private tags */ /* - * Pseudo-tags don't normally need field bits since they - * are not written to an output file (by definition). - * The library also has express logic to always query a - * codec for a pseudo-tag so allocating a field bit for - * one is a waste. If codec wants to promote the notion - * of a pseudo-tag being ``set'' or ``unset'' then it can - * do using internal state flags without polluting the - * field bit space defined for real tags. + * Pseudo-tags don't normally need field bits since they are not written to an + * output file (by definition). The library also has express logic to always + * query a codec for a pseudo-tag so allocating a field bit for one is a + * waste. If codec wants to promote the notion of a pseudo-tag being ``set'' + * or ``unset'' then it can do using internal state flags without polluting + * the field bit space defined for real tags. */ -#define FIELD_PSEUDO 0 +#define FIELD_PSEUDO 0 -#define FIELD_LAST (32*FIELD_SETLONGS-1) +#define FIELD_LAST (32*FIELD_SETLONGS-1) -#define TIFFExtractData(tif, type, v) \ - ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \ - ((v) >> (tif)->tif_typeshift[type]) & (tif)->tif_typemask[type] : \ - (v) & (tif)->tif_typemask[type])) -#define TIFFInsertData(tif, type, v) \ - ((uint32) ((tif)->tif_header.tiff_magic == TIFF_BIGENDIAN ? \ - ((v) & (tif)->tif_typemask[type]) << (tif)->tif_typeshift[type] : \ - (v) & (tif)->tif_typemask[type])) - - -#define BITn(n) (((unsigned long)1L)<<((n)&0x1f)) -#define BITFIELDn(tif, n) ((tif)->tif_dir.td_fieldsset[(n)/32]) -#define TIFFFieldSet(tif, field) (BITFIELDn(tif, field) & BITn(field)) +#define BITn(n) (((unsigned long)1L)<<((n)&0x1f)) +#define BITFIELDn(tif, n) ((tif)->tif_dir.td_fieldsset[(n)/32]) +#define TIFFFieldSet(tif, field) (BITFIELDn(tif, field) & BITn(field)) #define TIFFSetFieldBit(tif, field) (BITFIELDn(tif, field) |= BITn(field)) #define TIFFClrFieldBit(tif, field) (BITFIELDn(tif, field) &= ~BITn(field)) -#define FieldSet(fields, f) (fields[(f)/32] & BITn(f)) -#define ResetFieldBit(fields, f) (fields[(f)/32] &= ~BITn(f)) +#define FieldSet(fields, f) (fields[(f)/32] & BITn(f)) +#define ResetFieldBit(fields, f) (fields[(f)/32] &= ~BITn(f)) + +typedef enum { + TIFF_SETGET_UNDEFINED = 0, + TIFF_SETGET_ASCII = 1, + TIFF_SETGET_UINT8 = 2, + TIFF_SETGET_SINT8 = 3, + TIFF_SETGET_UINT16 = 4, + TIFF_SETGET_SINT16 = 5, + TIFF_SETGET_UINT32 = 6, + TIFF_SETGET_SINT32 = 7, + TIFF_SETGET_UINT64 = 8, + TIFF_SETGET_SINT64 = 9, + TIFF_SETGET_FLOAT = 10, + TIFF_SETGET_DOUBLE = 11, + TIFF_SETGET_IFD8 = 12, + TIFF_SETGET_INT = 13, + TIFF_SETGET_UINT16_PAIR = 14, + TIFF_SETGET_C0_ASCII = 15, + TIFF_SETGET_C0_UINT8 = 16, + TIFF_SETGET_C0_SINT8 = 17, + TIFF_SETGET_C0_UINT16 = 18, + TIFF_SETGET_C0_SINT16 = 19, + TIFF_SETGET_C0_UINT32 = 20, + TIFF_SETGET_C0_SINT32 = 21, + TIFF_SETGET_C0_UINT64 = 22, + TIFF_SETGET_C0_SINT64 = 23, + TIFF_SETGET_C0_FLOAT = 24, + TIFF_SETGET_C0_DOUBLE = 25, + TIFF_SETGET_C0_IFD8 = 26, + TIFF_SETGET_C16_ASCII = 27, + TIFF_SETGET_C16_UINT8 = 28, + TIFF_SETGET_C16_SINT8 = 29, + TIFF_SETGET_C16_UINT16 = 30, + TIFF_SETGET_C16_SINT16 = 31, + TIFF_SETGET_C16_UINT32 = 32, + TIFF_SETGET_C16_SINT32 = 33, + TIFF_SETGET_C16_UINT64 = 34, + TIFF_SETGET_C16_SINT64 = 35, + TIFF_SETGET_C16_FLOAT = 36, + TIFF_SETGET_C16_DOUBLE = 37, + TIFF_SETGET_C16_IFD8 = 38, + TIFF_SETGET_C32_ASCII = 39, + TIFF_SETGET_C32_UINT8 = 40, + TIFF_SETGET_C32_SINT8 = 41, + TIFF_SETGET_C32_UINT16 = 42, + TIFF_SETGET_C32_SINT16 = 43, + TIFF_SETGET_C32_UINT32 = 44, + TIFF_SETGET_C32_SINT32 = 45, + TIFF_SETGET_C32_UINT64 = 46, + TIFF_SETGET_C32_SINT64 = 47, + TIFF_SETGET_C32_FLOAT = 48, + TIFF_SETGET_C32_DOUBLE = 49, + TIFF_SETGET_C32_IFD8 = 50, + TIFF_SETGET_OTHER = 51 +} TIFFSetGetFieldType; #if defined(__cplusplus) extern "C" { #endif -extern const TIFFFieldInfo *_TIFFGetFieldInfo(size_t *); -extern const TIFFFieldInfo *_TIFFGetExifFieldInfo(size_t *); -extern void _TIFFSetupFieldInfo(TIFF*, const TIFFFieldInfo[], size_t); -extern int _TIFFMergeFieldInfo(TIFF*, const TIFFFieldInfo[], int); -extern void _TIFFPrintFieldInfo(TIFF*, FILE*); -extern TIFFDataType _TIFFSampleToTagType(TIFF*); -extern const TIFFFieldInfo* _TIFFFindOrRegisterFieldInfo( TIFF *tif, - ttag_t tag, - TIFFDataType dt ); -extern TIFFFieldInfo* _TIFFCreateAnonFieldInfo( TIFF *tif, ttag_t tag, - TIFFDataType dt ); -#define _TIFFFindFieldInfo TIFFFindFieldInfo -#define _TIFFFindFieldInfoByName TIFFFindFieldInfoByName -#define _TIFFFieldWithTag TIFFFieldWithTag -#define _TIFFFieldWithName TIFFFieldWithName +extern const TIFFFieldArray* _TIFFGetFields(void); +extern const TIFFFieldArray* _TIFFGetExifFields(void); +extern void _TIFFSetupFields(TIFF* tif, const TIFFFieldArray* infoarray); +extern void _TIFFPrintFieldInfo(TIFF*, FILE*); + +extern int _TIFFFillStriles(TIFF*); + +typedef enum { + tfiatImage, + tfiatExif, + tfiatOther +} TIFFFieldArrayType; + +struct _TIFFFieldArray { + TIFFFieldArrayType type; /* array type, will be used to determine if IFD is image and such */ + uint32 allocated_size; /* 0 if array is constant, other if modified by future definition extension support */ + uint32 count; /* number of elements in fields array */ + TIFFField* fields; /* actual field info */ +}; + +struct _TIFFField { + uint32 field_tag; /* field's tag */ + short field_readcount; /* read count/TIFF_VARIABLE/TIFF_SPP */ + short field_writecount; /* write count/TIFF_VARIABLE */ + TIFFDataType field_type; /* type of associated data */ + uint32 reserved; /* reserved for future extension */ + TIFFSetGetFieldType set_field_type; /* type to be passed to TIFFSetField */ + TIFFSetGetFieldType get_field_type; /* type to be passed to TIFFGetField */ + unsigned short field_bit; /* bit in fieldsset bit vector */ + unsigned char field_oktochange; /* if true, can change while writing */ + unsigned char field_passcount; /* if true, pass dir count on set */ + char* field_name; /* ASCII name */ + TIFFFieldArray* field_subfields; /* if field points to child ifds, child ifd field definition array */ +}; + +extern int _TIFFMergeFields(TIFF*, const TIFFField[], uint32); +extern const TIFFField* _TIFFFindOrRegisterField(TIFF *, uint32, TIFFDataType); +extern TIFFField* _TIFFCreateAnonField(TIFF *, uint32, TIFFDataType); #if defined(__cplusplus) } @@ -202,6 +298,7 @@ extern TIFFFieldInfo* _TIFFCreateAnonFieldInfo( TIFF *tif, ttag_t tag, #endif /* _TIFFDIR_ */ /* vim: set ts=8 sts=8 sw=8 noet: */ + /* * Local Variables: * mode: c diff --git a/include/reactos/libs/libtiff/tif_fax3.h b/include/reactos/libs/libtiff/tif_fax3.h index 40718bcfa71..b0f46c9a43f 100644 --- a/include/reactos/libs/libtiff/tif_fax3.h +++ b/include/reactos/libs/libtiff/tif_fax3.h @@ -1,4 +1,4 @@ -/* $Id: tif_fax3.h,v 1.5.2.1 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Id: tif_fax3.h,v 1.9 2011-03-10 20:23:07 fwarmerdam Exp $ */ /* * Copyright (c) 1990-1997 Sam Leffler @@ -52,7 +52,7 @@ * data in the run array as needed (e.g. to append zero runs to bring * the count up to a nice multiple). */ -typedef void (*TIFFFaxFillFunc)(unsigned char*, uint32*, uint32*, uint32); +typedef void (*TIFFFaxFillFunc)(unsigned char*, uint32*, uint32*, uint32); /* * The default run filler; made external for other decoders. @@ -60,36 +60,36 @@ typedef void (*TIFFFaxFillFunc)(unsigned char*, uint32*, uint32*, uint32); #if defined(__cplusplus) extern "C" { #endif -extern void _TIFFFax3fillruns(unsigned char*, uint32*, uint32*, uint32); +extern void _TIFFFax3fillruns(unsigned char*, uint32*, uint32*, uint32); #if defined(__cplusplus) } #endif /* finite state machine codes */ -#define S_Null 0 -#define S_Pass 1 -#define S_Horiz 2 -#define S_V0 3 -#define S_VR 4 -#define S_VL 5 -#define S_Ext 6 -#define S_TermW 7 -#define S_TermB 8 -#define S_MakeUpW 9 -#define S_MakeUpB 10 -#define S_MakeUp 11 -#define S_EOL 12 +#define S_Null 0 +#define S_Pass 1 +#define S_Horiz 2 +#define S_V0 3 +#define S_VR 4 +#define S_VL 5 +#define S_Ext 6 +#define S_TermW 7 +#define S_TermB 8 +#define S_MakeUpW 9 +#define S_MakeUpB 10 +#define S_MakeUp 11 +#define S_EOL 12 -typedef struct { /* state table entry */ - unsigned char State; /* see above */ - unsigned char Width; /* width of code in bits */ - uint32 Param; /* unsigned 32-bit run length in bits */ +typedef struct { /* state table entry */ + unsigned char State; /* see above */ + unsigned char Width; /* width of code in bits */ + uint32 Param; /* unsigned 32-bit run length in bits */ } TIFFFaxTabEnt; -extern const TIFFFaxTabEnt TIFFFaxMainTable[]; -extern const TIFFFaxTabEnt TIFFFaxWhiteTable[]; -extern const TIFFFaxTabEnt TIFFFaxBlackTable[]; +extern const TIFFFaxTabEnt TIFFFaxMainTable[]; +extern const TIFFFaxTabEnt TIFFFaxWhiteTable[]; +extern const TIFFFaxTabEnt TIFFFaxBlackTable[]; /* * The following macros define the majority of the G3/G4 decoder @@ -478,6 +478,12 @@ done1d: \ break; \ case S_VL: \ CHECK_b1; \ + if (b1 <= (int) (a0 + TabEnt->Param)) { \ + if (b1 < (int) (a0 + TabEnt->Param) || pa != thisrun) { \ + unexpected("VL", a0); \ + goto eol2d; \ + } \ + } \ SETVALUE(b1 - a0 - TabEnt->Param); \ b1 -= *--pb; \ break; \ diff --git a/include/reactos/libs/libtiff/tif_predict.h b/include/reactos/libs/libtiff/tif_predict.h index da0ad9892b0..dc7144c69e6 100644 --- a/include/reactos/libs/libtiff/tif_predict.h +++ b/include/reactos/libs/libtiff/tif_predict.h @@ -1,26 +1,26 @@ -/* $Id: tif_predict.h,v 1.3.2.2 2010-06-08 18:50:42 bfriesen Exp $ */ +/* $Id: tif_predict.h,v 1.8 2010-03-10 18:56:49 bfriesen Exp $ */ /* * Copyright (c) 1995-1997 Sam Leffler * Copyright (c) 1995-1997 Silicon Graphics, Inc. * - * Permission to use, copy, modify, distribute, and sell this software and + * Permission to use, copy, modify, distribute, and sell this software and * its documentation for any purpose is hereby granted without fee, provided * that (i) the above copyright notices and this permission notice appear in * all copies of the software and related documentation, and (ii) the names of * Sam Leffler and Silicon Graphics may not be used in any advertising or * publicity relating to the software without the specific, prior written * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF - * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF + * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE * OF THIS SOFTWARE. */ @@ -36,32 +36,32 @@ * the predictor code can cast tif_data to find its state. */ typedef struct { - int predictor; /* predictor tag value */ - int stride; /* sample stride over data */ - tsize_t rowsize; /* tile/strip row size */ + int predictor; /* predictor tag value */ + tmsize_t stride; /* sample stride over data */ + tmsize_t rowsize; /* tile/strip row size */ - TIFFCodeMethod encoderow; /* parent codec encode/decode row */ - TIFFCodeMethod encodestrip; /* parent codec encode/decode strip */ - TIFFCodeMethod encodetile; /* parent codec encode/decode tile */ - TIFFPostMethod encodepfunc; /* horizontal differencer */ - - TIFFCodeMethod decoderow; /* parent codec encode/decode row */ - TIFFCodeMethod decodestrip; /* parent codec encode/decode strip */ - TIFFCodeMethod decodetile; /* parent codec encode/decode tile */ - TIFFPostMethod decodepfunc; /* horizontal accumulator */ + TIFFCodeMethod encoderow; /* parent codec encode/decode row */ + TIFFCodeMethod encodestrip; /* parent codec encode/decode strip */ + TIFFCodeMethod encodetile; /* parent codec encode/decode tile */ + TIFFPostMethod encodepfunc; /* horizontal differencer */ - TIFFVGetMethod vgetparent; /* super-class method */ - TIFFVSetMethod vsetparent; /* super-class method */ - TIFFPrintMethod printdir; /* super-class method */ - TIFFBoolMethod setupdecode; /* super-class method */ - TIFFBoolMethod setupencode; /* super-class method */ + TIFFCodeMethod decoderow; /* parent codec encode/decode row */ + TIFFCodeMethod decodestrip; /* parent codec encode/decode strip */ + TIFFCodeMethod decodetile; /* parent codec encode/decode tile */ + TIFFPostMethod decodepfunc; /* horizontal accumulator */ + + TIFFVGetMethod vgetparent; /* super-class method */ + TIFFVSetMethod vsetparent; /* super-class method */ + TIFFPrintMethod printdir; /* super-class method */ + TIFFBoolMethod setupdecode; /* super-class method */ + TIFFBoolMethod setupencode; /* super-class method */ } TIFFPredictorState; #if defined(__cplusplus) extern "C" { #endif -extern int TIFFPredictorInit(TIFF*); -extern int TIFFPredictorCleanup(TIFF*); +extern int TIFFPredictorInit(TIFF*); +extern int TIFFPredictorCleanup(TIFF*); #if defined(__cplusplus) } #endif diff --git a/include/reactos/libs/libtiff/tiff.h b/include/reactos/libs/libtiff/tiff.h index 0d4ab9f819f..19b4e7976d4 100644 --- a/include/reactos/libs/libtiff/tiff.h +++ b/include/reactos/libs/libtiff/tiff.h @@ -1,4 +1,4 @@ -/* $Id: tiff.h,v 1.43.2.1 2010-06-08 18:50:43 bfriesen Exp $ */ +/* $Id: tiff.h,v 1.68 2012-08-19 16:56:35 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -39,87 +39,75 @@ * Suite 200 * Seattle, WA 98104 * 206-622-5500 - * + * * (http://partners.adobe.com/asn/developer/PDFS/TN/TIFF6.pdf) * - * For Big TIFF design notes see the following link + * For BigTIFF design notes see the following links * http://www.remotesensing.org/libtiff/bigtiffdesign.html + * http://www.awaresystems.be/imaging/tiff/bigtiff.html */ -#define TIFF_VERSION 42 -#define TIFF_BIGTIFF_VERSION 43 -#define TIFF_BIGENDIAN 0x4d4d -#define TIFF_LITTLEENDIAN 0x4949 -#define MDI_LITTLEENDIAN 0x5045 -#define MDI_BIGENDIAN 0x4550 +#define TIFF_VERSION_CLASSIC 42 +#define TIFF_VERSION_BIG 43 + +#define TIFF_BIGENDIAN 0x4d4d +#define TIFF_LITTLEENDIAN 0x4949 +#define MDI_LITTLEENDIAN 0x5045 +#define MDI_BIGENDIAN 0x4550 + /* * Intrinsic data types required by the file format: * - * 8-bit quantities int8/uint8 - * 16-bit quantities int16/uint16 - * 32-bit quantities int32/uint32 - * strings unsigned char* + * 8-bit quantities int8/uint8 + * 16-bit quantities int16/uint16 + * 32-bit quantities int32/uint32 + * 64-bit quantities int64/uint64 + * strings unsigned char* */ -#ifndef HAVE_INT8 -typedef signed char int8; /* NB: non-ANSI compilers may not grok */ -#endif -typedef unsigned char uint8; -#ifndef HAVE_INT16 -typedef short int16; -#endif -typedef unsigned short uint16; /* sizeof (uint16) must == 2 */ -#if SIZEOF_INT == 4 -#ifndef HAVE_INT32 -typedef int int32; -#endif -typedef unsigned int uint32; /* sizeof (uint32) must == 4 */ -#elif SIZEOF_LONG == 4 -#ifndef HAVE_INT32 -typedef long int32; -#endif -typedef unsigned long uint32; /* sizeof (uint32) must == 4 */ -#endif +typedef TIFF_INT8_T int8; +typedef TIFF_UINT8_T uint8; -/* For TIFFReassignTagToIgnore */ -enum TIFFIgnoreSense /* IGNORE tag table */ -{ - TIS_STORE, - TIS_EXTRACT, - TIS_EMPTY -}; +typedef TIFF_INT16_T int16; +typedef TIFF_UINT16_T uint16; + +typedef TIFF_INT32_T int32; +typedef TIFF_UINT32_T uint32; + +typedef TIFF_INT64_T int64; +typedef TIFF_UINT64_T uint64; + +/* + * Some types as promoted in a variable argument list + * We use uint16_vap rather then directly using int, because this way + * we document the type we actually want to pass through, conceptually, + * rather then confusing the issue by merely stating the type it gets + * promoted to + */ + +typedef int uint16_vap; /* * TIFF header. */ -typedef struct { - uint16 tiff_magic; /* magic number (defines byte order) */ -#define TIFF_MAGIC_SIZE 2 - uint16 tiff_version; /* TIFF version number */ -#define TIFF_VERSION_SIZE 2 - uint32 tiff_diroff; /* byte offset to first directory */ -#define TIFF_DIROFFSET_SIZE 4 -} TIFFHeader; +typedef struct { + uint16 tiff_magic; /* magic number (defines byte order) */ + uint16 tiff_version; /* TIFF version number */ +} TIFFHeaderCommon; +typedef struct { + uint16 tiff_magic; /* magic number (defines byte order) */ + uint16 tiff_version; /* TIFF version number */ + uint32 tiff_diroff; /* byte offset to first directory */ +} TIFFHeaderClassic; +typedef struct { + uint16 tiff_magic; /* magic number (defines byte order) */ + uint16 tiff_version; /* TIFF version number */ + uint16 tiff_offsetsize; /* size of offsets, should be 8 */ + uint16 tiff_unused; /* unused word, should be 0 */ + uint64 tiff_diroff; /* byte offset to first directory */ +} TIFFHeaderBig; -/* - * TIFF Image File Directories are comprised of a table of field - * descriptors of the form shown below. The table is sorted in - * ascending order by tag. The values associated with each entry are - * disjoint and may appear anywhere in the file (so long as they are - * placed on a word boundary). - * - * If the value is 4 bytes or less, then it is placed in the offset - * field to save space. If the value is less than 4 bytes, it is - * left-justified in the offset field. - */ -typedef struct { - uint16 tdir_tag; /* see below */ - uint16 tdir_type; /* data type; see below */ - uint32 tdir_count; /* number of items; length in spec */ - uint32 tdir_offset; /* byte offset to field data */ -} TIFFDirEntry; - /* * NB: In the comments below, * - items marked with a + are obsoleted by revision 5.0, @@ -134,21 +122,24 @@ typedef struct { * * Note: RATIONALs are the ratio of two 32-bit integer values. */ -typedef enum { - TIFF_NOTYPE = 0, /* placeholder */ - TIFF_BYTE = 1, /* 8-bit unsigned integer */ - TIFF_ASCII = 2, /* 8-bit bytes w/ last byte null */ - TIFF_SHORT = 3, /* 16-bit unsigned integer */ - TIFF_LONG = 4, /* 32-bit unsigned integer */ - TIFF_RATIONAL = 5, /* 64-bit unsigned fraction */ - TIFF_SBYTE = 6, /* !8-bit signed integer */ - TIFF_UNDEFINED = 7, /* !8-bit untyped data */ - TIFF_SSHORT = 8, /* !16-bit signed integer */ - TIFF_SLONG = 9, /* !32-bit signed integer */ - TIFF_SRATIONAL = 10, /* !64-bit signed fraction */ - TIFF_FLOAT = 11, /* !32-bit IEEE floating point */ - TIFF_DOUBLE = 12, /* !64-bit IEEE floating point */ - TIFF_IFD = 13 /* %32-bit unsigned integer (offset) */ +typedef enum { + TIFF_NOTYPE = 0, /* placeholder */ + TIFF_BYTE = 1, /* 8-bit unsigned integer */ + TIFF_ASCII = 2, /* 8-bit bytes w/ last byte null */ + TIFF_SHORT = 3, /* 16-bit unsigned integer */ + TIFF_LONG = 4, /* 32-bit unsigned integer */ + TIFF_RATIONAL = 5, /* 64-bit unsigned fraction */ + TIFF_SBYTE = 6, /* !8-bit signed integer */ + TIFF_UNDEFINED = 7, /* !8-bit untyped data */ + TIFF_SSHORT = 8, /* !16-bit signed integer */ + TIFF_SLONG = 9, /* !32-bit signed integer */ + TIFF_SRATIONAL = 10, /* !64-bit signed fraction */ + TIFF_FLOAT = 11, /* !32-bit IEEE floating point */ + TIFF_DOUBLE = 12, /* !64-bit IEEE floating point */ + TIFF_IFD = 13, /* %32-bit unsigned integer (offset) */ + TIFF_LONG8 = 16, /* BigTIFF 64-bit unsigned integer */ + TIFF_SLONG8 = 17, /* BigTIFF 64-bit signed integer */ + TIFF_IFD8 = 18 /* BigTIFF 64-bit unsigned integer (offset) */ } TIFFDataType; /* @@ -175,6 +166,8 @@ typedef enum { #define COMPRESSION_LZW 5 /* Lempel-Ziv & Welch */ #define COMPRESSION_OJPEG 6 /* !6.0 JPEG */ #define COMPRESSION_JPEG 7 /* %JPEG DCT compression */ +#define COMPRESSION_T85 9 /* !TIFF/FX T.85 JBIG compression */ +#define COMPRESSION_T43 10 /* !TIFF/FX T.43 colour by layered JBIG compression */ #define COMPRESSION_NEXT 32766 /* NeXT 2-bit RLE */ #define COMPRESSION_CCITTRLEW 32771 /* #1 w/ word alignment */ #define COMPRESSION_PACKBITS 32773 /* Macintosh RLE */ @@ -196,6 +189,7 @@ typedef enum { #define COMPRESSION_SGILOG 34676 /* SGI Log Luminance RLE */ #define COMPRESSION_SGILOG24 34677 /* SGI Log 24-bit packed */ #define COMPRESSION_JP2000 34712 /* Leadtools JPEG2000 */ +#define COMPRESSION_LZMA 34925 /* LZMA2 */ #define TIFFTAG_PHOTOMETRIC 262 /* photometric interpretation */ #define PHOTOMETRIC_MINISWHITE 0 /* min value is white */ #define PHOTOMETRIC_MINISBLACK 1 /* min value is black */ @@ -327,6 +321,30 @@ typedef enum { [Adobe TIFF Technote 3] */ #define TIFFTAG_JPEGTABLES 347 /* %JPEG table stream */ #define TIFFTAG_OPIPROXY 351 /* %OPI Proxy [Adobe TIFF technote] */ +/* Tags 400-435 are from the TIFF/FX spec */ +#define TIFFTAG_GLOBALPARAMETERSIFD 400 /* ! */ +#define TIFFTAG_PROFILETYPE 401 /* ! */ +#define PROFILETYPE_UNSPECIFIED 0 /* ! */ +#define PROFILETYPE_G3_FAX 1 /* ! */ +#define TIFFTAG_FAXPROFILE 402 /* ! */ +#define FAXPROFILE_S 1 /* !TIFF/FX FAX profile S */ +#define FAXPROFILE_F 2 /* !TIFF/FX FAX profile F */ +#define FAXPROFILE_J 3 /* !TIFF/FX FAX profile J */ +#define FAXPROFILE_C 4 /* !TIFF/FX FAX profile C */ +#define FAXPROFILE_L 5 /* !TIFF/FX FAX profile L */ +#define FAXPROFILE_M 6 /* !TIFF/FX FAX profile LM */ +#define TIFFTAG_CODINGMETHODS 403 /* !TIFF/FX coding methods */ +#define CODINGMETHODS_T4_1D (1 << 1) /* !T.4 1D */ +#define CODINGMETHODS_T4_2D (1 << 2) /* !T.4 2D */ +#define CODINGMETHODS_T6 (1 << 3) /* !T.6 */ +#define CODINGMETHODS_T85 (1 << 4) /* !T.85 JBIG */ +#define CODINGMETHODS_T42 (1 << 5) /* !T.42 JPEG */ +#define CODINGMETHODS_T43 (1 << 6) /* !T.43 colour by layered JBIG */ +#define TIFFTAG_VERSIONYEAR 404 /* !TIFF/FX version year */ +#define TIFFTAG_MODENUMBER 405 /* !TIFF/FX mode number */ +#define TIFFTAG_DECODE 433 /* !TIFF/FX decode */ +#define TIFFTAG_IMAGEBASECOLOR 434 /* !TIFF/FX image base colour */ +#define TIFFTAG_T82OPTIONS 435 /* !TIFF/FX T.82 options */ /* * Tags 512-521 are obsoleted by Technical Note #2 which specifies a * revised JPEG-in-TIFF scheme. @@ -348,6 +366,7 @@ typedef enum { #define YCBCRPOSITION_CENTERED 1 /* !as in PostScript Level 2 */ #define YCBCRPOSITION_COSITED 2 /* !as in CCIR 601-1 */ #define TIFFTAG_REFERENCEBLACKWHITE 532 /* !colorimetry info */ +#define TIFFTAG_STRIPROWCOUNTS 559 /* !TIFF/FX strip row counts */ #define TIFFTAG_XMLPACKET 700 /* %XML packet [Adobe XMP Specification, January 2004 */ @@ -414,6 +433,7 @@ typedef enum { #define TIFFTAG_EXIFIFD 34665 /* Pointer to EXIF private directory */ /* tag 34750 is a private tag registered to Adobe? */ #define TIFFTAG_ICCPROFILE 34675 /* ICC profile data */ +#define TIFFTAG_IMAGELAYER 34732 /* !TIFF/FX image layer information */ /* tag 34750 is a private tag registered to Pixel Magic */ #define TIFFTAG_JBIGOPTIONS 34750 /* JBIG options */ #define TIFFTAG_GPSIFD 34853 /* Pointer to GPS private directory */ @@ -576,6 +596,10 @@ typedef enum { #define TIFFTAG_SGILOGENCODE 65561 /* SGILog data encoding control*/ #define SGILOGENCODE_NODITHER 0 /* do not dither encoded values*/ #define SGILOGENCODE_RANDITHER 1 /* randomly dither encd values */ +#define TIFFTAG_LZMAPRESET 65562 /* LZMA2 preset (compression level) */ +#define TIFFTAG_PERSAMPLE 65563 /* interface for per sample tags */ +#define PERSAMPLE_MERGED 0 /* present as a single value */ +#define PERSAMPLE_MULTI 1 /* present as multiple values */ /* * EXIF tags diff --git a/include/reactos/libs/libtiff/tiffconf.h b/include/reactos/libs/libtiff/tiffconf.h index b7d59e0712d..80755f8e69e 100644 --- a/include/reactos/libs/libtiff/tiffconf.h +++ b/include/reactos/libs/libtiff/tiffconf.h @@ -100,4 +100,42 @@ #define PHOTOSHOP_SUPPORT #define IPTC_SUPPORT +/* Signed 16-bit type */ +#define TIFF_INT16_T signed short + +/* Signed 32-bit type */ +#define TIFF_INT32_T int + +/* Signed 64-bit type */ +#ifndef TIFF_INT64_T +#define TIFF_INT64_T signed long long +#endif + +/* Signed 8-bit type */ +#define TIFF_INT8_T signed char + +/* Unsigned 16-bit type */ +#define TIFF_UINT16_T unsigned short + +/* Unsigned 32-bit type */ +#define TIFF_UINT32_T unsigned int + +/* Unsigned 64-bit type */ +#ifndef TIFF_UINT64_T +#define TIFF_UINT64_T unsigned long long +#endif + +/* Unsigned 8-bit type */ +#define TIFF_UINT8_T unsigned char + +/* Signed 8-bit type */ +#define TIFF_INT8_T signed char + +/* Signed size type */ +#if defined(_WIN64) +#define TIFF_SSIZE_T signed long long int +#else +#define TIFF_SSIZE_T signed long int +#endif + #endif /* _TIFFCONF_ */ diff --git a/include/reactos/libs/libtiff/tiffconf.vc.h b/include/reactos/libs/libtiff/tiffconf.vc.h index 3d14847a277..680f839f1e8 100644 --- a/include/reactos/libs/libtiff/tiffconf.vc.h +++ b/include/reactos/libs/libtiff/tiffconf.vc.h @@ -19,8 +19,29 @@ /* The size of a `int', as computed by sizeof. */ #define SIZEOF_INT 4 -/* The size of a `long', as computed by sizeof. */ -#define SIZEOF_LONG 4 +/* Signed 8-bit type */ +#define TIFF_INT8_T signed char + +/* Unsigned 8-bit type */ +#define TIFF_UINT8_T unsigned char + +/* Signed 16-bit type */ +#define TIFF_INT16_T signed short + +/* Unsigned 16-bit type */ +#define TIFF_UINT16_T unsigned short + +/* Signed 32-bit type formatter */ +#define TIFF_INT32_FORMAT "%d" + +/* Signed 32-bit type */ +#define TIFF_INT32_T signed int + +/* Unsigned 32-bit type formatter */ +#define TIFF_UINT32_FORMAT "%u" + +/* Unsigned 32-bit type */ +#define TIFF_UINT32_T unsigned int /* Signed 64-bit type formatter */ #define TIFF_INT64_FORMAT "%I64d" @@ -34,6 +55,23 @@ /* Unsigned 64-bit type */ #define TIFF_UINT64_T unsigned __int64 +/* Signed size type */ +#if defined(_WIN64) +#define TIFF_SSIZE_T signed __int64 +#else +#define TIFF_SSIZE_T signed int +#endif + +/* Signed size type formatter */ +#if defined(_WIN64) +#define TIFF_SSIZE_FORMAT "%I64d" +#else +#define TIFF_SSIZE_FORMAT "%ld" +#endif + +/* Pointer difference type */ +#define TIFF_PTRDIFF_T long + /* Compatibility stuff. */ /* Define as 0 or 1 according to the floating point format suported by the @@ -53,6 +91,9 @@ /* Support JPEG compression (requires IJG JPEG library) */ /* #undef JPEG_SUPPORT */ +/* Support JBIG compression (requires JBIG-KIT library) */ +/* #undef JBIG_SUPPORT */ + /* Support LogLuv high dynamic range encoding */ #define LOGLUV_SUPPORT 1 @@ -94,6 +135,9 @@ lacking the tag (default enabled). */ #define CHECK_JPEG_YCBCR_SUBSAMPLING 1 +/* Support MS MDI magic number files as TIFF */ +/* #undef MDI_SUPPORT */ + /* * Feature support definitions. * XXX: These macros are obsoleted. Don't use them in your apps! diff --git a/include/reactos/libs/libtiff/tiffconf.wince.h b/include/reactos/libs/libtiff/tiffconf.wince.h new file mode 100644 index 00000000000..2ef3958a075 --- /dev/null +++ b/include/reactos/libs/libtiff/tiffconf.wince.h @@ -0,0 +1,121 @@ +/* $Id: tiffconf.wince.h,v 1.3 2010-03-10 18:56:49 bfriesen Exp $ */ + +/* + * Windows CE platform tiffconf.wince.h + * Created by Mateusz Loskot (mateusz@loskot.net) + * + * NOTE: Requires WCELIBCEX library with wceex_* functions, + * It's an extension to C library on Windows CE platform. + * For example, HAVE_STDIO_H definition indicates there are + * following files available: + * stdio.h - from Windows CE / Windows Mobile SDK + * wce_stdio.h - from WCELIBCEX library + */ + + +/* + Configuration defines for installed libtiff. + This file maintained for backward compatibility. Do not use definitions + from this file in your programs. +*/ + +#ifndef _WIN32_WCE +# error This version of tif_config.h header is dedicated for Windows CE platform! +#endif + + +#ifndef _TIFFCONF_ +#define _TIFFCONF_ + +/* Define to 1 if the system has the type `int16'. */ +/* #undef HAVE_INT16 */ + +/* Define to 1 if the system has the type `int32'. */ +/* #undef HAVE_INT32 */ + +/* Define to 1 if the system has the type `int8'. */ +/* #undef HAVE_INT8 */ + +/* The size of a `int', as computed by sizeof. */ +#define SIZEOF_INT 4 + +/* Compatibility stuff. */ + +/* Define as 0 or 1 according to the floating point format suported by the + machine */ +#define HAVE_IEEEFP 1 + +/* Set the native cpu bit order (FILLORDER_LSB2MSB or FILLORDER_MSB2LSB) */ +#define HOST_FILLORDER FILLORDER_LSB2MSB + +/* Native cpu byte order: 1 if big-endian (Motorola) or 0 if little-endian + (Intel) */ +#define HOST_BIGENDIAN 0 + +/* Support CCITT Group 3 & 4 algorithms */ +#define CCITT_SUPPORT 1 + +/* Support JPEG compression (requires IJG JPEG library) */ +/* #undef JPEG_SUPPORT */ + +/* Support LogLuv high dynamic range encoding */ +#define LOGLUV_SUPPORT 1 + +/* Support LZW algorithm */ +#define LZW_SUPPORT 1 + +/* Support NeXT 2-bit RLE algorithm */ +#define NEXT_SUPPORT 1 + +/* Support Old JPEG compresson (read contrib/ojpeg/README first! Compilation + fails with unpatched IJG JPEG library) */ +/* #undef OJPEG_SUPPORT */ + +/* Support Macintosh PackBits algorithm */ +#define PACKBITS_SUPPORT 1 + +/* Support Pixar log-format algorithm (requires Zlib) */ +/* #undef PIXARLOG_SUPPORT */ + +/* Support ThunderScan 4-bit RLE algorithm */ +#define THUNDER_SUPPORT 1 + +/* Support Deflate compression */ +/* #undef ZIP_SUPPORT */ + +/* Support strip chopping (whether or not to convert single-strip uncompressed + images to mutiple strips of ~8Kb to reduce memory usage) */ +#define STRIPCHOP_DEFAULT TIFF_STRIPCHOP + +/* Enable SubIFD tag (330) support */ +#define SUBIFD_SUPPORT 1 + +/* Treat extra sample as alpha (default enabled). The RGBA interface will + treat a fourth sample with no EXTRASAMPLE_ value as being ASSOCALPHA. Many + packages produce RGBA files but don't mark the alpha properly. */ +#define DEFAULT_EXTRASAMPLE_AS_ALPHA 1 + +/* Pick up YCbCr subsampling info from the JPEG data stream to support files + lacking the tag (default enabled). */ +#define CHECK_JPEG_YCBCR_SUBSAMPLING 1 + +/* + * Feature support definitions. + * XXX: These macros are obsoleted. Don't use them in your apps! + * Macros stays here for backward compatibility and should be always defined. + */ +#define COLORIMETRY_SUPPORT +#define YCBCR_SUPPORT +#define CMYK_SUPPORT +#define ICC_SUPPORT +#define PHOTOSHOP_SUPPORT +#define IPTC_SUPPORT + +#endif /* _TIFFCONF_ */ +/* + * Local Variables: + * mode: c + * c-basic-offset: 8 + * fill-column: 78 + * End: + */ diff --git a/include/reactos/libs/libtiff/tiffio.h b/include/reactos/libs/libtiff/tiffio.h index 71bd4f87702..b15553081dc 100644 --- a/include/reactos/libs/libtiff/tiffio.h +++ b/include/reactos/libs/libtiff/tiffio.h @@ -1,21 +1,21 @@ -/* $Id: tiffio.h,v 1.56.2.4 2010-06-08 18:50:43 bfriesen Exp $ */ +/* $Id: tiffio.h,v 1.91 2012-07-29 15:45:29 tgl Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. * - * Permission to use, copy, modify, distribute, and sell this software and + * Permission to use, copy, modify, distribute, and sell this software and * its documentation for any purpose is hereby granted without fee, provided * that (i) the above copyright notices and this permission notice appear in * all copies of the software and related documentation, and (ii) the names of * Sam Leffler and Silicon Graphics may not be used in any advertising or * publicity relating to the software without the specific, prior written * permission of Sam Leffler and Silicon Graphics. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * + * + * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, + * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY + * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, @@ -27,30 +27,6 @@ #ifndef _TIFFIO_ #define _TIFFIO_ -#ifndef __GNUC__ -# define __DLL_IMPORT__ __declspec(dllimport) -# define __DLL_EXPORT__ __declspec(dllexport) -#else -# define __DLL_IMPORT__ __attribute__((dllimport)) extern -# define __DLL_EXPORT__ __attribute__((dllexport)) extern -#endif - -#if (defined __WIN32__) || (defined _WIN32) -# ifdef BUILD_LIBTIFF_DLL -# define LIBTIFF_DLL_IMPEXP __DLL_EXPORT__ -# elif defined(LIBTIFF_STATIC) -# define LIBTIFF_DLL_IMPEXP -# elif defined (USE_LIBTIFF_DLL) -# define LIBTIFF_DLL_IMPEXP __DLL_IMPORT__ -# elif defined (USE_LIBTIFF_STATIC) -# define LIBTIFF_DLL_IMPEXP -# else /* assume USE_LIBTIFF_DLL */ -# define LIBTIFF_DLL_IMPEXP __DLL_IMPORT__ -# endif -#else /* __WIN32__ */ -# define LIBTIFF_DLL_IMPEXP -#endif - /* * TIFF I/O Library Definitions. */ @@ -61,7 +37,7 @@ * TIFF is defined as an incomplete type to hide the * library's internal data structures from clients. */ -typedef struct tiff TIFF; +typedef struct tiff TIFF; /* * The following typedefs define the intrinsic size of @@ -79,18 +55,27 @@ typedef struct tiff TIFF; * NB: tsize_t is int32 and not uint32 because some functions * return -1. * NB: toff_t is not off_t for many reasons; TIFFs max out at - * 32-bit file offsets being the most important, and to ensure - * that it is unsigned, rather than signed. + * 32-bit file offsets, and BigTIFF maxes out at 64-bit + * offsets being the most important, and to ensure use of + * a consistently unsigned type across architectures. + * Prior to libtiff 4.0, this was an unsigned 32 bit type. */ +/* + * this is the machine addressing size type, only it's signed, so make it + * int32 on 32bit machines, int64 on 64bit machines + */ +typedef TIFF_SSIZE_T tmsize_t; +typedef uint64 toff_t; /* file offset */ +/* the following are deprecated and should be replaced by their defining + counterparts */ typedef uint32 ttag_t; /* directory tag */ typedef uint16 tdir_t; /* directory index */ typedef uint16 tsample_t; /* sample number */ typedef uint32 tstrile_t; /* strip or tile number */ typedef tstrile_t tstrip_t; /* strip number */ typedef tstrile_t ttile_t; /* tile number */ -typedef int32 tsize_t; /* i/o size in bytes */ +typedef tmsize_t tsize_t; /* i/o size in bytes */ typedef void* tdata_t; /* image data ref */ -typedef uint32 toff_t; /* file offset */ #if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32)) #define __WIN32__ @@ -104,20 +89,10 @@ typedef uint32 toff_t; /* file offset */ */ #if defined(_WINDOWS) || defined(__WIN32__) || defined(_Windows) -# define BINMODE "b" # if !defined(__CYGWIN) && !defined(AVOID_WIN32_FILEIO) && !defined(USE_WIN32_FILEIO) # define AVOID_WIN32_FILEIO # endif -# include -# include -# ifdef SET_BINARY -# undef SET_BINARY -# endif /* SET_BINARY */ -# define SET_BINARY(f) do {if (!_isatty(f)) _setmode(f,_O_BINARY);} while (0) -#else /* Windows */ -# define BINMODE -# define SET_BINARY(f) (void)0 -#endif /* Windows */ +#endif #if defined(USE_WIN32_FILEIO) # define VC_EXTRALEAN @@ -125,12 +100,12 @@ typedef uint32 toff_t; /* file offset */ # define WIN32_NO_STATUS # include # ifdef __WIN32__ -DECLARE_HANDLE(thandle_t); /* Win32 file handle */ +DECLARE_HANDLE(thandle_t); /* Win32 file handle */ # else -typedef HFILE thandle_t; /* client data handle */ +typedef HFILE thandle_t; /* client data handle */ # endif /* __WIN32__ */ #else -typedef void* thandle_t; /* client data handle */ +typedef void* thandle_t; /* client data handle */ #endif /* USE_WIN32_FILEIO */ /* @@ -139,13 +114,13 @@ typedef void* thandle_t; /* client data handle */ * very large. Bit-or these flags to enable printing * multiple items. */ -#define TIFFPRINT_NONE 0x0 /* no extra info */ -#define TIFFPRINT_STRIPS 0x1 /* strips/tiles info */ -#define TIFFPRINT_CURVES 0x2 /* color/gray response curves */ -#define TIFFPRINT_COLORMAP 0x4 /* colormap */ -#define TIFFPRINT_JPEGQTABLES 0x100 /* JPEG Q matrices */ -#define TIFFPRINT_JPEGACTABLES 0x200 /* JPEG AC tables */ -#define TIFFPRINT_JPEGDCTABLES 0x200 /* JPEG DC tables */ +#define TIFFPRINT_NONE 0x0 /* no extra info */ +#define TIFFPRINT_STRIPS 0x1 /* strips/tiles info */ +#define TIFFPRINT_CURVES 0x2 /* color/gray response curves */ +#define TIFFPRINT_COLORMAP 0x4 /* colormap */ +#define TIFFPRINT_JPEGQTABLES 0x100 /* JPEG Q matrices */ +#define TIFFPRINT_JPEGACTABLES 0x200 /* JPEG AC tables */ +#define TIFFPRINT_JPEGDCTABLES 0x200 /* JPEG DC tables */ /* * Colour conversion stuff @@ -162,42 +137,42 @@ typedef void* thandle_t; /* client data handle */ /* Structure for holding information about a display device. */ -typedef unsigned char TIFFRGBValue; /* 8-bit samples */ +typedef unsigned char TIFFRGBValue; /* 8-bit samples */ typedef struct { - float d_mat[3][3]; /* XYZ -> luminance matrix */ - float d_YCR; /* Light o/p for reference white */ + float d_mat[3][3]; /* XYZ -> luminance matrix */ + float d_YCR; /* Light o/p for reference white */ float d_YCG; float d_YCB; - uint32 d_Vrwr; /* Pixel values for ref. white */ + uint32 d_Vrwr; /* Pixel values for ref. white */ uint32 d_Vrwg; uint32 d_Vrwb; - float d_Y0R; /* Residual light for black pixel */ + float d_Y0R; /* Residual light for black pixel */ float d_Y0G; float d_Y0B; - float d_gammaR; /* Gamma values for the three guns */ + float d_gammaR; /* Gamma values for the three guns */ float d_gammaG; float d_gammaB; } TIFFDisplay; -typedef struct { /* YCbCr->RGB support */ - TIFFRGBValue* clamptab; /* range clamping table */ - int* Cr_r_tab; - int* Cb_b_tab; - int32* Cr_g_tab; - int32* Cb_g_tab; - int32* Y_tab; +typedef struct { /* YCbCr->RGB support */ + TIFFRGBValue* clamptab; /* range clamping table */ + int* Cr_r_tab; + int* Cb_b_tab; + int32* Cr_g_tab; + int32* Cb_g_tab; + int32* Y_tab; } TIFFYCbCrToRGB; -typedef struct { /* CIE Lab 1976->RGB support */ - int range; /* Size of conversion table */ +typedef struct { /* CIE Lab 1976->RGB support */ + int range; /* Size of conversion table */ #define CIELABTORGB_TABLE_RANGE 1500 - float rstep, gstep, bstep; - float X0, Y0, Z0; /* Reference white point */ + float rstep, gstep, bstep; + float X0, Y0, Z0; /* Reference white point */ TIFFDisplay display; - float Yr2r[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yr to r */ - float Yg2g[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yg to g */ - float Yb2b[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yb to b */ + float Yr2r[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yr to r */ + float Yg2g[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yg to g */ + float Yb2b[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yb to b */ } TIFFCIELabToRGB; /* @@ -252,6 +227,9 @@ struct _TIFFRGBAImage { TIFFYCbCrToRGB* ycbcr; /* YCbCr conversion state */ TIFFCIELabToRGB* cielab; /* CIE L*a*b conversion state */ + uint8* UaToAa; /* Unassociated alpha to associated alpha convertion LUT */ + uint8* Bitdepth16To8; /* LUT for conversion from 16bit to 8bit values */ + int row_offset; int col_offset; }; @@ -260,10 +238,10 @@ struct _TIFFRGBAImage { * Macros for extracting components from the * packed ABGR form returned by TIFFReadRGBAImage. */ -#define TIFFGetR(abgr) ((abgr) & 0xff) -#define TIFFGetG(abgr) (((abgr) >> 8) & 0xff) -#define TIFFGetB(abgr) (((abgr) >> 16) & 0xff) -#define TIFFGetA(abgr) (((abgr) >> 24) & 0xff) +#define TIFFGetR(abgr) ((abgr) & 0xff) +#define TIFFGetG(abgr) (((abgr) >> 8) & 0xff) +#define TIFFGetB(abgr) (((abgr) >> 16) & 0xff) +#define TIFFGetA(abgr) (((abgr) >> 24) & 0xff) /* * A CODEC is a software package that implements decoding, @@ -272,11 +250,11 @@ struct _TIFFRGBAImage { * More codecs may be registered through calls to the library * and/or the builtin implementations may be overridden. */ -typedef int (*TIFFInitMethod)(TIFF*, int); +typedef int (*TIFFInitMethod)(TIFF*, int); typedef struct { - char* name; - uint16 scheme; - TIFFInitMethod init; + char* name; + uint16 scheme; + TIFFInitMethod init; } TIFFCodec; #include @@ -284,7 +262,7 @@ typedef struct { /* share internal LogLuv conversion routines? */ #ifndef LOGLUV_PUBLIC -#define LOGLUV_PUBLIC 1 +#define LOGLUV_PUBLIC 1 #endif #if !defined(__GNUC__) && !defined(__attribute__) @@ -294,48 +272,264 @@ typedef struct { #if defined(c_plusplus) || defined(__cplusplus) extern "C" { #endif -typedef void (*TIFFErrorHandler)(const char*, const char*, va_list); -typedef void (*TIFFErrorHandlerExt)(thandle_t, const char*, const char*, va_list); -typedef tsize_t (*TIFFReadWriteProc)(thandle_t, tdata_t, tsize_t); -typedef toff_t (*TIFFSeekProc)(thandle_t, toff_t, int); -typedef int (*TIFFCloseProc)(thandle_t); -typedef toff_t (*TIFFSizeProc)(thandle_t); -typedef int (*TIFFMapFileProc)(thandle_t, tdata_t*, toff_t*); -typedef void (*TIFFUnmapFileProc)(thandle_t, tdata_t, toff_t); -typedef void (*TIFFExtendProc)(TIFF*); +typedef void (*TIFFErrorHandler)(const char*, const char*, va_list); +typedef void (*TIFFErrorHandlerExt)(thandle_t, const char*, const char*, va_list); +typedef tmsize_t (*TIFFReadWriteProc)(thandle_t, void*, tmsize_t); +typedef toff_t (*TIFFSeekProc)(thandle_t, toff_t, int); +typedef int (*TIFFCloseProc)(thandle_t); +typedef toff_t (*TIFFSizeProc)(thandle_t); +typedef int (*TIFFMapFileProc)(thandle_t, void** base, toff_t* size); +typedef void (*TIFFUnmapFileProc)(thandle_t, void* base, toff_t size); +typedef void (*TIFFExtendProc)(TIFF*); -LIBTIFF_DLL_IMPEXP const char* TIFFGetVersion(void); +extern const char* TIFFGetVersion(void); -LIBTIFF_DLL_IMPEXP const TIFFCodec* TIFFFindCODEC(uint16); -LIBTIFF_DLL_IMPEXP TIFFCodec* TIFFRegisterCODEC(uint16, const char*, TIFFInitMethod); -LIBTIFF_DLL_IMPEXP void TIFFUnRegisterCODEC(TIFFCodec*); -LIBTIFF_DLL_IMPEXP int TIFFIsCODECConfigured(uint16); -LIBTIFF_DLL_IMPEXP TIFFCodec* TIFFGetConfiguredCODECs(void); +extern const TIFFCodec* TIFFFindCODEC(uint16); +extern TIFFCodec* TIFFRegisterCODEC(uint16, const char*, TIFFInitMethod); +extern void TIFFUnRegisterCODEC(TIFFCodec*); +extern int TIFFIsCODECConfigured(uint16); +extern TIFFCodec* TIFFGetConfiguredCODECs(void); /* * Auxiliary functions. */ -LIBTIFF_DLL_IMPEXP tdata_t _TIFFmalloc(tsize_t); -LIBTIFF_DLL_IMPEXP tdata_t _TIFFrealloc(tdata_t, tsize_t); -LIBTIFF_DLL_IMPEXP void _TIFFmemset(tdata_t, int, tsize_t); -LIBTIFF_DLL_IMPEXP void _TIFFmemcpy(tdata_t, const tdata_t, tsize_t); -LIBTIFF_DLL_IMPEXP int _TIFFmemcmp(const tdata_t, const tdata_t, tsize_t); -LIBTIFF_DLL_IMPEXP void _TIFFfree(tdata_t); +extern void* _TIFFmalloc(tmsize_t s); +extern void* _TIFFrealloc(void* p, tmsize_t s); +extern void _TIFFmemset(void* p, int v, tmsize_t c); +extern void _TIFFmemcpy(void* d, const void* s, tmsize_t c); +extern int _TIFFmemcmp(const void* p1, const void* p2, tmsize_t c); +extern void _TIFFfree(void* p); /* ** Stuff, related to tag handling and creating custom tags. */ -LIBTIFF_DLL_IMPEXP int TIFFGetTagListCount( TIFF * ); -LIBTIFF_DLL_IMPEXP ttag_t TIFFGetTagListEntry( TIFF *, int tag_index ); +extern int TIFFGetTagListCount( TIFF * ); +extern uint32 TIFFGetTagListEntry( TIFF *, int tag_index ); -#define TIFF_ANY TIFF_NOTYPE /* for field descriptor searching */ -#define TIFF_VARIABLE -1 /* marker for variable length tags */ -#define TIFF_SPP -2 /* marker for SamplesPerPixel tags */ -#define TIFF_VARIABLE2 -3 /* marker for uint32 var-length tags */ +#define TIFF_ANY TIFF_NOTYPE /* for field descriptor searching */ +#define TIFF_VARIABLE -1 /* marker for variable length tags */ +#define TIFF_SPP -2 /* marker for SamplesPerPixel tags */ +#define TIFF_VARIABLE2 -3 /* marker for uint32 var-length tags */ -#define FIELD_CUSTOM 65 +#define FIELD_CUSTOM 65 +typedef struct _TIFFField TIFFField; +typedef struct _TIFFFieldArray TIFFFieldArray; + +extern const TIFFField* TIFFFindField(TIFF *, uint32, TIFFDataType); +extern const TIFFField* TIFFFieldWithTag(TIFF*, uint32); +extern const TIFFField* TIFFFieldWithName(TIFF*, const char *); + +extern uint32 TIFFFieldTag(const TIFFField*); +extern const char* TIFFFieldName(const TIFFField*); +extern TIFFDataType TIFFFieldDataType(const TIFFField*); +extern int TIFFFieldPassCount(const TIFFField*); +extern int TIFFFieldReadCount(const TIFFField*); +extern int TIFFFieldWriteCount(const TIFFField*); + +typedef int (*TIFFVSetMethod)(TIFF*, uint32, va_list); +typedef int (*TIFFVGetMethod)(TIFF*, uint32, va_list); +typedef void (*TIFFPrintMethod)(TIFF*, FILE*, long); + +typedef struct { + TIFFVSetMethod vsetfield; /* tag set routine */ + TIFFVGetMethod vgetfield; /* tag get routine */ + TIFFPrintMethod printdir; /* directory print routine */ +} TIFFTagMethods; + +extern TIFFTagMethods *TIFFAccessTagMethods(TIFF *); +extern void *TIFFGetClientInfo(TIFF *, const char *); +extern void TIFFSetClientInfo(TIFF *, void *, const char *); + +extern void TIFFCleanup(TIFF* tif); +extern void TIFFClose(TIFF* tif); +extern int TIFFFlush(TIFF* tif); +extern int TIFFFlushData(TIFF* tif); +extern int TIFFGetField(TIFF* tif, uint32 tag, ...); +extern int TIFFVGetField(TIFF* tif, uint32 tag, va_list ap); +extern int TIFFGetFieldDefaulted(TIFF* tif, uint32 tag, ...); +extern int TIFFVGetFieldDefaulted(TIFF* tif, uint32 tag, va_list ap); +extern int TIFFReadDirectory(TIFF* tif); +extern int TIFFReadCustomDirectory(TIFF* tif, toff_t diroff, const TIFFFieldArray* infoarray); +extern int TIFFReadEXIFDirectory(TIFF* tif, toff_t diroff); +extern uint64 TIFFScanlineSize64(TIFF* tif); +extern tmsize_t TIFFScanlineSize(TIFF* tif); +extern uint64 TIFFRasterScanlineSize64(TIFF* tif); +extern tmsize_t TIFFRasterScanlineSize(TIFF* tif); +extern uint64 TIFFStripSize64(TIFF* tif); +extern tmsize_t TIFFStripSize(TIFF* tif); +extern uint64 TIFFRawStripSize64(TIFF* tif, uint32 strip); +extern tmsize_t TIFFRawStripSize(TIFF* tif, uint32 strip); +extern uint64 TIFFVStripSize64(TIFF* tif, uint32 nrows); +extern tmsize_t TIFFVStripSize(TIFF* tif, uint32 nrows); +extern uint64 TIFFTileRowSize64(TIFF* tif); +extern tmsize_t TIFFTileRowSize(TIFF* tif); +extern uint64 TIFFTileSize64(TIFF* tif); +extern tmsize_t TIFFTileSize(TIFF* tif); +extern uint64 TIFFVTileSize64(TIFF* tif, uint32 nrows); +extern tmsize_t TIFFVTileSize(TIFF* tif, uint32 nrows); +extern uint32 TIFFDefaultStripSize(TIFF* tif, uint32 request); +extern void TIFFDefaultTileSize(TIFF*, uint32*, uint32*); +extern int TIFFFileno(TIFF*); +extern int TIFFSetFileno(TIFF*, int); +extern thandle_t TIFFClientdata(TIFF*); +extern thandle_t TIFFSetClientdata(TIFF*, thandle_t); +extern int TIFFGetMode(TIFF*); +extern int TIFFSetMode(TIFF*, int); +extern int TIFFIsTiled(TIFF*); +extern int TIFFIsByteSwapped(TIFF*); +extern int TIFFIsUpSampled(TIFF*); +extern int TIFFIsMSB2LSB(TIFF*); +extern int TIFFIsBigEndian(TIFF*); +extern TIFFReadWriteProc TIFFGetReadProc(TIFF*); +extern TIFFReadWriteProc TIFFGetWriteProc(TIFF*); +extern TIFFSeekProc TIFFGetSeekProc(TIFF*); +extern TIFFCloseProc TIFFGetCloseProc(TIFF*); +extern TIFFSizeProc TIFFGetSizeProc(TIFF*); +extern TIFFMapFileProc TIFFGetMapFileProc(TIFF*); +extern TIFFUnmapFileProc TIFFGetUnmapFileProc(TIFF*); +extern uint32 TIFFCurrentRow(TIFF*); +extern uint16 TIFFCurrentDirectory(TIFF*); +extern uint16 TIFFNumberOfDirectories(TIFF*); +extern uint64 TIFFCurrentDirOffset(TIFF*); +extern uint32 TIFFCurrentStrip(TIFF*); +extern uint32 TIFFCurrentTile(TIFF* tif); +extern int TIFFReadBufferSetup(TIFF* tif, void* bp, tmsize_t size); +extern int TIFFWriteBufferSetup(TIFF* tif, void* bp, tmsize_t size); +extern int TIFFSetupStrips(TIFF *); +extern int TIFFWriteCheck(TIFF*, int, const char *); +extern void TIFFFreeDirectory(TIFF*); +extern int TIFFCreateDirectory(TIFF*); +extern int TIFFCreateCustomDirectory(TIFF*,const TIFFFieldArray*); +extern int TIFFCreateEXIFDirectory(TIFF*); +extern int TIFFLastDirectory(TIFF*); +extern int TIFFSetDirectory(TIFF*, uint16); +extern int TIFFSetSubDirectory(TIFF*, uint64); +extern int TIFFUnlinkDirectory(TIFF*, uint16); +extern int TIFFSetField(TIFF*, uint32, ...); +extern int TIFFVSetField(TIFF*, uint32, va_list); +extern int TIFFUnsetField(TIFF*, uint32); +extern int TIFFWriteDirectory(TIFF *); +extern int TIFFWriteCustomDirectory(TIFF *, uint64 *); +extern int TIFFCheckpointDirectory(TIFF *); +extern int TIFFRewriteDirectory(TIFF *); + +#if defined(c_plusplus) || defined(__cplusplus) +extern void TIFFPrintDirectory(TIFF*, FILE*, long = 0); +extern int TIFFReadScanline(TIFF* tif, void* buf, uint32 row, uint16 sample = 0); +extern int TIFFWriteScanline(TIFF* tif, void* buf, uint32 row, uint16 sample = 0); +extern int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int = 0); +extern int TIFFReadRGBAImageOriented(TIFF*, uint32, uint32, uint32*, + int = ORIENTATION_BOTLEFT, int = 0); +#else +extern void TIFFPrintDirectory(TIFF*, FILE*, long); +extern int TIFFReadScanline(TIFF* tif, void* buf, uint32 row, uint16 sample); +extern int TIFFWriteScanline(TIFF* tif, void* buf, uint32 row, uint16 sample); +extern int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int); +extern int TIFFReadRGBAImageOriented(TIFF*, uint32, uint32, uint32*, int, int); +#endif + +extern int TIFFReadRGBAStrip(TIFF*, uint32, uint32 * ); +extern int TIFFReadRGBATile(TIFF*, uint32, uint32, uint32 * ); +extern int TIFFRGBAImageOK(TIFF*, char [1024]); +extern int TIFFRGBAImageBegin(TIFFRGBAImage*, TIFF*, int, char [1024]); +extern int TIFFRGBAImageGet(TIFFRGBAImage*, uint32*, uint32, uint32); +extern void TIFFRGBAImageEnd(TIFFRGBAImage*); +extern TIFF* TIFFOpen(const char*, const char*); +# ifdef __WIN32__ +extern TIFF* TIFFOpenW(const wchar_t*, const char*); +# endif /* __WIN32__ */ +extern TIFF* TIFFFdOpen(int, const char*, const char*); +extern TIFF* TIFFClientOpen(const char*, const char*, + thandle_t, + TIFFReadWriteProc, TIFFReadWriteProc, + TIFFSeekProc, TIFFCloseProc, + TIFFSizeProc, + TIFFMapFileProc, TIFFUnmapFileProc); +extern const char* TIFFFileName(TIFF*); +extern const char* TIFFSetFileName(TIFF*, const char *); +extern void TIFFError(const char*, const char*, ...) __attribute__((__format__ (__printf__,2,3))); +extern void TIFFErrorExt(thandle_t, const char*, const char*, ...) __attribute__((__format__ (__printf__,3,4))); +extern void TIFFWarning(const char*, const char*, ...) __attribute__((__format__ (__printf__,2,3))); +extern void TIFFWarningExt(thandle_t, const char*, const char*, ...) __attribute__((__format__ (__printf__,3,4))); +extern TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler); +extern TIFFErrorHandlerExt TIFFSetErrorHandlerExt(TIFFErrorHandlerExt); +extern TIFFErrorHandler TIFFSetWarningHandler(TIFFErrorHandler); +extern TIFFErrorHandlerExt TIFFSetWarningHandlerExt(TIFFErrorHandlerExt); +extern TIFFExtendProc TIFFSetTagExtender(TIFFExtendProc); +extern uint32 TIFFComputeTile(TIFF* tif, uint32 x, uint32 y, uint32 z, uint16 s); +extern int TIFFCheckTile(TIFF* tif, uint32 x, uint32 y, uint32 z, uint16 s); +extern uint32 TIFFNumberOfTiles(TIFF*); +extern tmsize_t TIFFReadTile(TIFF* tif, void* buf, uint32 x, uint32 y, uint32 z, uint16 s); +extern tmsize_t TIFFWriteTile(TIFF* tif, void* buf, uint32 x, uint32 y, uint32 z, uint16 s); +extern uint32 TIFFComputeStrip(TIFF*, uint32, uint16); +extern uint32 TIFFNumberOfStrips(TIFF*); +extern tmsize_t TIFFReadEncodedStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size); +extern tmsize_t TIFFReadRawStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size); +extern tmsize_t TIFFReadEncodedTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size); +extern tmsize_t TIFFReadRawTile(TIFF* tif, uint32 tile, void* buf, tmsize_t size); +extern tmsize_t TIFFWriteEncodedStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc); +extern tmsize_t TIFFWriteRawStrip(TIFF* tif, uint32 strip, void* data, tmsize_t cc); +extern tmsize_t TIFFWriteEncodedTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc); +extern tmsize_t TIFFWriteRawTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc); +extern int TIFFDataWidth(TIFFDataType); /* table of tag datatype widths */ +extern void TIFFSetWriteOffset(TIFF* tif, toff_t off); +extern void TIFFSwabShort(uint16*); +extern void TIFFSwabLong(uint32*); +extern void TIFFSwabLong8(uint64*); +extern void TIFFSwabFloat(float*); +extern void TIFFSwabDouble(double*); +extern void TIFFSwabArrayOfShort(uint16* wp, tmsize_t n); +extern void TIFFSwabArrayOfTriples(uint8* tp, tmsize_t n); +extern void TIFFSwabArrayOfLong(uint32* lp, tmsize_t n); +extern void TIFFSwabArrayOfLong8(uint64* lp, tmsize_t n); +extern void TIFFSwabArrayOfFloat(float* fp, tmsize_t n); +extern void TIFFSwabArrayOfDouble(double* dp, tmsize_t n); +extern void TIFFReverseBits(uint8* cp, tmsize_t n); +extern const unsigned char* TIFFGetBitRevTable(int); + +#ifdef LOGLUV_PUBLIC +#define U_NEU 0.210526316 +#define V_NEU 0.473684211 +#define UVSCALE 410. +extern double LogL16toY(int); +extern double LogL10toY(int); +extern void XYZtoRGB24(float*, uint8*); +extern int uv_decode(double*, double*, int); +extern void LogLuv24toXYZ(uint32, float*); +extern void LogLuv32toXYZ(uint32, float*); +#if defined(c_plusplus) || defined(__cplusplus) +extern int LogL16fromY(double, int = SGILOGENCODE_NODITHER); +extern int LogL10fromY(double, int = SGILOGENCODE_NODITHER); +extern int uv_encode(double, double, int = SGILOGENCODE_NODITHER); +extern uint32 LogLuv24fromXYZ(float*, int = SGILOGENCODE_NODITHER); +extern uint32 LogLuv32fromXYZ(float*, int = SGILOGENCODE_NODITHER); +#else +extern int LogL16fromY(double, int); +extern int LogL10fromY(double, int); +extern int uv_encode(double, double, int); +extern uint32 LogLuv24fromXYZ(float*, int); +extern uint32 LogLuv32fromXYZ(float*, int); +#endif +#endif /* LOGLUV_PUBLIC */ + +extern int TIFFCIELabToRGBInit(TIFFCIELabToRGB*, const TIFFDisplay *, float*); +extern void TIFFCIELabToXYZ(TIFFCIELabToRGB *, uint32, int32, int32, + float *, float *, float *); +extern void TIFFXYZToRGB(TIFFCIELabToRGB *, float, float, float, + uint32 *, uint32 *, uint32 *); + +extern int TIFFYCbCrToRGBInit(TIFFYCbCrToRGB*, float*, float*); +extern void TIFFYCbCrtoRGB(TIFFYCbCrToRGB *, uint32, int32, int32, + uint32 *, uint32 *, uint32 *); + +/**************************************************************************** + * O B S O L E T E D I N T E R F A C E S + * + * Don't use this stuff in your applications, it may be removed in the future + * libtiff versions. + ****************************************************************************/ typedef struct { ttag_t field_tag; /* field's tag */ short field_readcount; /* read count/TIFF_VARIABLE/TIFF_SPP */ @@ -347,205 +541,8 @@ typedef struct { char *field_name; /* ASCII name */ } TIFFFieldInfo; -typedef struct _TIFFTagValue { - const TIFFFieldInfo *info; - int count; - void *value; -} TIFFTagValue; - -LIBTIFF_DLL_IMPEXP void TIFFMergeFieldInfo(TIFF*, const TIFFFieldInfo[], int); -LIBTIFF_DLL_IMPEXP const TIFFFieldInfo* TIFFFindFieldInfo(TIFF*, ttag_t, TIFFDataType); -LIBTIFF_DLL_IMPEXP const TIFFFieldInfo* TIFFFindFieldInfoByName(TIFF* , const char *, - TIFFDataType); -LIBTIFF_DLL_IMPEXP const TIFFFieldInfo* TIFFFieldWithTag(TIFF*, ttag_t); -LIBTIFF_DLL_IMPEXP const TIFFFieldInfo* TIFFFieldWithName(TIFF*, const char *); - -typedef int (*TIFFVSetMethod)(TIFF*, ttag_t, va_list); -typedef int (*TIFFVGetMethod)(TIFF*, ttag_t, va_list); -typedef void (*TIFFPrintMethod)(TIFF*, FILE*, long); - -typedef struct { - TIFFVSetMethod vsetfield; /* tag set routine */ - TIFFVGetMethod vgetfield; /* tag get routine */ - TIFFPrintMethod printdir; /* directory print routine */ -} TIFFTagMethods; +extern int TIFFMergeFieldInfo(TIFF*, const TIFFFieldInfo[], uint32); -LIBTIFF_DLL_IMPEXP TIFFTagMethods *TIFFAccessTagMethods( TIFF * ); -LIBTIFF_DLL_IMPEXP void *TIFFGetClientInfo( TIFF *, const char * ); -LIBTIFF_DLL_IMPEXP void TIFFSetClientInfo( TIFF *, void *, const char * ); - -LIBTIFF_DLL_IMPEXP void TIFFCleanup(TIFF*); -LIBTIFF_DLL_IMPEXP void TIFFClose(TIFF*); -LIBTIFF_DLL_IMPEXP int TIFFFlush(TIFF*); -LIBTIFF_DLL_IMPEXP int TIFFFlushData(TIFF*); -LIBTIFF_DLL_IMPEXP int TIFFGetField(TIFF*, ttag_t, ...); -LIBTIFF_DLL_IMPEXP int TIFFVGetField(TIFF*, ttag_t, va_list); -LIBTIFF_DLL_IMPEXP int TIFFGetFieldDefaulted(TIFF*, ttag_t, ...); -LIBTIFF_DLL_IMPEXP int TIFFVGetFieldDefaulted(TIFF*, ttag_t, va_list); -LIBTIFF_DLL_IMPEXP int TIFFReadDirectory(TIFF*); -LIBTIFF_DLL_IMPEXP int TIFFReadCustomDirectory(TIFF*, toff_t, const TIFFFieldInfo[], - size_t); -LIBTIFF_DLL_IMPEXP int TIFFReadEXIFDirectory(TIFF*, toff_t); -LIBTIFF_DLL_IMPEXP tsize_t TIFFScanlineSize(TIFF*); -LIBTIFF_DLL_IMPEXP tsize_t TIFFOldScanlineSize(TIFF*); -LIBTIFF_DLL_IMPEXP tsize_t TIFFNewScanlineSize(TIFF*); -LIBTIFF_DLL_IMPEXP tsize_t TIFFRasterScanlineSize(TIFF*); -LIBTIFF_DLL_IMPEXP tsize_t TIFFStripSize(TIFF*); -LIBTIFF_DLL_IMPEXP tsize_t TIFFRawStripSize(TIFF*, tstrip_t); -LIBTIFF_DLL_IMPEXP tsize_t TIFFVStripSize(TIFF*, uint32); -LIBTIFF_DLL_IMPEXP tsize_t TIFFTileRowSize(TIFF*); -LIBTIFF_DLL_IMPEXP tsize_t TIFFTileSize(TIFF*); -LIBTIFF_DLL_IMPEXP tsize_t TIFFVTileSize(TIFF*, uint32); -LIBTIFF_DLL_IMPEXP uint32 TIFFDefaultStripSize(TIFF*, uint32); -LIBTIFF_DLL_IMPEXP void TIFFDefaultTileSize(TIFF*, uint32*, uint32*); -LIBTIFF_DLL_IMPEXP int TIFFFileno(TIFF*); -LIBTIFF_DLL_IMPEXP int TIFFSetFileno(TIFF*, int); -LIBTIFF_DLL_IMPEXP thandle_t TIFFClientdata(TIFF*); -LIBTIFF_DLL_IMPEXP thandle_t TIFFSetClientdata(TIFF*, thandle_t); -LIBTIFF_DLL_IMPEXP int TIFFGetMode(TIFF*); -LIBTIFF_DLL_IMPEXP int TIFFSetMode(TIFF*, int); -LIBTIFF_DLL_IMPEXP int TIFFIsTiled(TIFF*); -LIBTIFF_DLL_IMPEXP int TIFFIsByteSwapped(TIFF*); -LIBTIFF_DLL_IMPEXP int TIFFIsUpSampled(TIFF*); -LIBTIFF_DLL_IMPEXP int TIFFIsMSB2LSB(TIFF*); -LIBTIFF_DLL_IMPEXP int TIFFIsBigEndian(TIFF*); -LIBTIFF_DLL_IMPEXP TIFFReadWriteProc TIFFGetReadProc(TIFF*); -LIBTIFF_DLL_IMPEXP TIFFReadWriteProc TIFFGetWriteProc(TIFF*); -LIBTIFF_DLL_IMPEXP TIFFSeekProc TIFFGetSeekProc(TIFF*); -LIBTIFF_DLL_IMPEXP TIFFCloseProc TIFFGetCloseProc(TIFF*); -LIBTIFF_DLL_IMPEXP TIFFSizeProc TIFFGetSizeProc(TIFF*); -LIBTIFF_DLL_IMPEXP TIFFMapFileProc TIFFGetMapFileProc(TIFF*); -LIBTIFF_DLL_IMPEXP TIFFUnmapFileProc TIFFGetUnmapFileProc(TIFF*); -LIBTIFF_DLL_IMPEXP uint32 TIFFCurrentRow(TIFF*); -LIBTIFF_DLL_IMPEXP tdir_t TIFFCurrentDirectory(TIFF*); -LIBTIFF_DLL_IMPEXP tdir_t TIFFNumberOfDirectories(TIFF*); -LIBTIFF_DLL_IMPEXP uint32 TIFFCurrentDirOffset(TIFF*); -LIBTIFF_DLL_IMPEXP tstrip_t TIFFCurrentStrip(TIFF*); -LIBTIFF_DLL_IMPEXP ttile_t TIFFCurrentTile(TIFF*); -LIBTIFF_DLL_IMPEXP int TIFFReadBufferSetup(TIFF*, tdata_t, tsize_t); -LIBTIFF_DLL_IMPEXP int TIFFWriteBufferSetup(TIFF*, tdata_t, tsize_t); -LIBTIFF_DLL_IMPEXP int TIFFSetupStrips(TIFF *); -LIBTIFF_DLL_IMPEXP int TIFFWriteCheck(TIFF*, int, const char *); -LIBTIFF_DLL_IMPEXP void TIFFFreeDirectory(TIFF*); -LIBTIFF_DLL_IMPEXP int TIFFCreateDirectory(TIFF*); -LIBTIFF_DLL_IMPEXP int TIFFLastDirectory(TIFF*); -LIBTIFF_DLL_IMPEXP int TIFFSetDirectory(TIFF*, tdir_t); -LIBTIFF_DLL_IMPEXP int TIFFSetSubDirectory(TIFF*, uint32); -LIBTIFF_DLL_IMPEXP int TIFFUnlinkDirectory(TIFF*, tdir_t); -LIBTIFF_DLL_IMPEXP int TIFFSetField(TIFF*, ttag_t, ...); -LIBTIFF_DLL_IMPEXP int TIFFVSetField(TIFF*, ttag_t, va_list); -LIBTIFF_DLL_IMPEXP int TIFFWriteDirectory(TIFF *); -LIBTIFF_DLL_IMPEXP int TIFFCheckpointDirectory(TIFF *); -LIBTIFF_DLL_IMPEXP int TIFFRewriteDirectory(TIFF *); -LIBTIFF_DLL_IMPEXP int TIFFReassignTagToIgnore(enum TIFFIgnoreSense, int); - -#if defined(c_plusplus) || defined(__cplusplus) -LIBTIFF_DLL_IMPEXP void TIFFPrintDirectory(TIFF*, FILE*, long = 0); -LIBTIFF_DLL_IMPEXP int TIFFReadScanline(TIFF*, tdata_t, uint32, tsample_t = 0); -LIBTIFF_DLL_IMPEXP int TIFFWriteScanline(TIFF*, tdata_t, uint32, tsample_t = 0); -LIBTIFF_DLL_IMPEXP int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int = 0); -LIBTIFF_DLL_IMPEXP int TIFFReadRGBAImageOriented(TIFF*, uint32, uint32, uint32*, - int = ORIENTATION_BOTLEFT, int = 0); -#else -LIBTIFF_DLL_IMPEXP void TIFFPrintDirectory(TIFF*, FILE*, long); -LIBTIFF_DLL_IMPEXP int TIFFReadScanline(TIFF*, tdata_t, uint32, tsample_t); -LIBTIFF_DLL_IMPEXP int TIFFWriteScanline(TIFF*, tdata_t, uint32, tsample_t); -LIBTIFF_DLL_IMPEXP int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int); -LIBTIFF_DLL_IMPEXP int TIFFReadRGBAImageOriented(TIFF*, uint32, uint32, uint32*, int, int); -#endif - -LIBTIFF_DLL_IMPEXP int TIFFReadRGBAStrip(TIFF*, tstrip_t, uint32 * ); -LIBTIFF_DLL_IMPEXP int TIFFReadRGBATile(TIFF*, uint32, uint32, uint32 * ); -LIBTIFF_DLL_IMPEXP int TIFFRGBAImageOK(TIFF*, char [1024]); -LIBTIFF_DLL_IMPEXP int TIFFRGBAImageBegin(TIFFRGBAImage*, TIFF*, int, char [1024]); -LIBTIFF_DLL_IMPEXP int TIFFRGBAImageGet(TIFFRGBAImage*, uint32*, uint32, uint32); -LIBTIFF_DLL_IMPEXP void TIFFRGBAImageEnd(TIFFRGBAImage*); -LIBTIFF_DLL_IMPEXP TIFF* TIFFOpen(const char*, const char*); -# ifdef __WIN32__ -LIBTIFF_DLL_IMPEXP TIFF* TIFFOpenW(const wchar_t*, const char*); -# endif /* __WIN32__ */ -LIBTIFF_DLL_IMPEXP TIFF* TIFFFdOpen(int, const char*, const char*); -LIBTIFF_DLL_IMPEXP TIFF* TIFFClientOpen(const char*, const char*, - thandle_t, - TIFFReadWriteProc, TIFFReadWriteProc, - TIFFSeekProc, TIFFCloseProc, - TIFFSizeProc, - TIFFMapFileProc, TIFFUnmapFileProc); -LIBTIFF_DLL_IMPEXP const char* TIFFFileName(TIFF*); -LIBTIFF_DLL_IMPEXP const char* TIFFSetFileName(TIFF*, const char *); -LIBTIFF_DLL_IMPEXP void TIFFError(const char*, const char*, ...) __attribute__((format (printf,2,3))); -LIBTIFF_DLL_IMPEXP void TIFFErrorExt(thandle_t, const char*, const char*, ...) __attribute__((format (printf,3,4))); -LIBTIFF_DLL_IMPEXP void TIFFWarning(const char*, const char*, ...) __attribute__((format (printf,2,3))); -LIBTIFF_DLL_IMPEXP void TIFFWarningExt(thandle_t, const char*, const char*, ...) __attribute__((format (printf,3,4))); -LIBTIFF_DLL_IMPEXP TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler); -LIBTIFF_DLL_IMPEXP TIFFErrorHandlerExt TIFFSetErrorHandlerExt(TIFFErrorHandlerExt); -LIBTIFF_DLL_IMPEXP TIFFErrorHandler TIFFSetWarningHandler(TIFFErrorHandler); -LIBTIFF_DLL_IMPEXP TIFFErrorHandlerExt TIFFSetWarningHandlerExt(TIFFErrorHandlerExt); -LIBTIFF_DLL_IMPEXP TIFFExtendProc TIFFSetTagExtender(TIFFExtendProc); -LIBTIFF_DLL_IMPEXP ttile_t TIFFComputeTile(TIFF*, uint32, uint32, uint32, tsample_t); -LIBTIFF_DLL_IMPEXP int TIFFCheckTile(TIFF*, uint32, uint32, uint32, tsample_t); -LIBTIFF_DLL_IMPEXP ttile_t TIFFNumberOfTiles(TIFF*); -LIBTIFF_DLL_IMPEXP tsize_t TIFFReadTile(TIFF*, - tdata_t, uint32, uint32, uint32, tsample_t); -LIBTIFF_DLL_IMPEXP tsize_t TIFFWriteTile(TIFF*, - tdata_t, uint32, uint32, uint32, tsample_t); -LIBTIFF_DLL_IMPEXP tstrip_t TIFFComputeStrip(TIFF*, uint32, tsample_t); -LIBTIFF_DLL_IMPEXP tstrip_t TIFFNumberOfStrips(TIFF*); -LIBTIFF_DLL_IMPEXP tsize_t TIFFReadEncodedStrip(TIFF*, tstrip_t, tdata_t, tsize_t); -LIBTIFF_DLL_IMPEXP tsize_t TIFFReadRawStrip(TIFF*, tstrip_t, tdata_t, tsize_t); -LIBTIFF_DLL_IMPEXP tsize_t TIFFReadEncodedTile(TIFF*, ttile_t, tdata_t, tsize_t); -LIBTIFF_DLL_IMPEXP tsize_t TIFFReadRawTile(TIFF*, ttile_t, tdata_t, tsize_t); -LIBTIFF_DLL_IMPEXP tsize_t TIFFWriteEncodedStrip(TIFF*, tstrip_t, tdata_t, tsize_t); -LIBTIFF_DLL_IMPEXP tsize_t TIFFWriteRawStrip(TIFF*, tstrip_t, tdata_t, tsize_t); -LIBTIFF_DLL_IMPEXP tsize_t TIFFWriteEncodedTile(TIFF*, ttile_t, tdata_t, tsize_t); -LIBTIFF_DLL_IMPEXP tsize_t TIFFWriteRawTile(TIFF*, ttile_t, tdata_t, tsize_t); -LIBTIFF_DLL_IMPEXP int TIFFDataWidth(TIFFDataType); /* table of tag datatype widths */ -LIBTIFF_DLL_IMPEXP void TIFFSetWriteOffset(TIFF*, toff_t); -LIBTIFF_DLL_IMPEXP void TIFFSwabShort(uint16*); -LIBTIFF_DLL_IMPEXP void TIFFSwabLong(uint32*); -LIBTIFF_DLL_IMPEXP void TIFFSwabDouble(double*); -LIBTIFF_DLL_IMPEXP void TIFFSwabArrayOfShort(uint16*, unsigned long); -LIBTIFF_DLL_IMPEXP void TIFFSwabArrayOfTriples(uint8*, unsigned long); -LIBTIFF_DLL_IMPEXP void TIFFSwabArrayOfLong(uint32*, unsigned long); -LIBTIFF_DLL_IMPEXP void TIFFSwabArrayOfDouble(double*, unsigned long); -LIBTIFF_DLL_IMPEXP void TIFFReverseBits(unsigned char *, unsigned long); -LIBTIFF_DLL_IMPEXP const unsigned char* TIFFGetBitRevTable(int); - -#ifdef LOGLUV_PUBLIC -#define U_NEU 0.210526316 -#define V_NEU 0.473684211 -#define UVSCALE 410. -LIBTIFF_DLL_IMPEXP double LogL16toY(int); -LIBTIFF_DLL_IMPEXP double LogL10toY(int); -LIBTIFF_DLL_IMPEXP void XYZtoRGB24(float*, uint8*); -LIBTIFF_DLL_IMPEXP int uv_decode(double*, double*, int); -LIBTIFF_DLL_IMPEXP void LogLuv24toXYZ(uint32, float*); -LIBTIFF_DLL_IMPEXP void LogLuv32toXYZ(uint32, float*); -#if defined(c_plusplus) || defined(__cplusplus) -LIBTIFF_DLL_IMPEXP int LogL16fromY(double, int = SGILOGENCODE_NODITHER); -LIBTIFF_DLL_IMPEXP int LogL10fromY(double, int = SGILOGENCODE_NODITHER); -LIBTIFF_DLL_IMPEXP int uv_encode(double, double, int = SGILOGENCODE_NODITHER); -LIBTIFF_DLL_IMPEXP uint32 LogLuv24fromXYZ(float*, int = SGILOGENCODE_NODITHER); -LIBTIFF_DLL_IMPEXP uint32 LogLuv32fromXYZ(float*, int = SGILOGENCODE_NODITHER); -#else -LIBTIFF_DLL_IMPEXP int LogL16fromY(double, int); -LIBTIFF_DLL_IMPEXP int LogL10fromY(double, int); -LIBTIFF_DLL_IMPEXP int uv_encode(double, double, int); -LIBTIFF_DLL_IMPEXP uint32 LogLuv24fromXYZ(float*, int); -LIBTIFF_DLL_IMPEXP uint32 LogLuv32fromXYZ(float*, int); -#endif -#endif /* LOGLUV_PUBLIC */ - -LIBTIFF_DLL_IMPEXP int TIFFCIELabToRGBInit(TIFFCIELabToRGB*, TIFFDisplay *, float*); -LIBTIFF_DLL_IMPEXP void TIFFCIELabToXYZ(TIFFCIELabToRGB *, uint32, int32, int32, - float *, float *, float *); -LIBTIFF_DLL_IMPEXP void TIFFXYZToRGB(TIFFCIELabToRGB *, float, float, float, - uint32 *, uint32 *, uint32 *); - -LIBTIFF_DLL_IMPEXP int TIFFYCbCrToRGBInit(TIFFYCbCrToRGB*, float*, float*); -LIBTIFF_DLL_IMPEXP void TIFFYCbCrtoRGB(TIFFYCbCrToRGB *, uint32, int32, int32, - uint32 *, uint32 *, uint32 *); - #if defined(c_plusplus) || defined(__cplusplus) } #endif diff --git a/include/reactos/libs/libtiff/tiffio.hxx b/include/reactos/libs/libtiff/tiffio.hxx index ee3fd32c742..ed994f11565 100644 --- a/include/reactos/libs/libtiff/tiffio.hxx +++ b/include/reactos/libs/libtiff/tiffio.hxx @@ -1,4 +1,4 @@ -/* $Id: tiffio.hxx,v 1.1.2.1 2010-06-08 18:50:43 bfriesen Exp $ */ +/* $Id: tiffio.hxx,v 1.3 2010-06-08 18:55:15 bfriesen Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -34,8 +34,8 @@ #include #include "tiff.h" -extern TIFF* TIFFStreamOpen(const char*, std::ostream *); -extern TIFF* TIFFStreamOpen(const char*, std::istream *); +extern TIFF* TIFFStreamOpen(const char*, std::ostream *); +extern TIFF* TIFFStreamOpen(const char*, std::istream *); #endif /* _TIFFIO_HXX_ */ diff --git a/include/reactos/libs/libtiff/tiffiop.h b/include/reactos/libs/libtiff/tiffiop.h index a064039f6b8..53357d85290 100644 --- a/include/reactos/libs/libtiff/tiffiop.h +++ b/include/reactos/libs/libtiff/tiffiop.h @@ -1,4 +1,4 @@ -/* $Id: tiffiop.h,v 1.51.2.6 2010-06-12 02:55:16 bfriesen Exp $ */ +/* $Id: tiffiop.h,v 1.84 2012-05-30 01:50:17 fwarmerdam Exp $ */ /* * Copyright (c) 1988-1997 Sam Leffler @@ -57,14 +57,8 @@ extern void *lfind(const void *, const void *, size_t *, size_t, int (*)(const void *, const void *)); #endif -/* - Libtiff itself does not require a 64-bit type, but bundled TIFF - utilities may use it. -*/ -typedef TIFF_INT64_T int64; -typedef TIFF_UINT64_T uint64; - #include "tiffio.h" + #include "tif_dir.h" #ifndef STRIP_SIZE_DEFAULT @@ -80,170 +74,184 @@ typedef TIFF_UINT64_T uint64; typedef struct client_info { struct client_info *next; - void *data; - char *name; + void *data; + char *name; } TIFFClientInfoLink; /* * Typedefs for ``method pointers'' used internally. + * these are depriciated and provided only for backwards compatibility */ -typedef unsigned char tidataval_t; /* internal image data value type */ -typedef tidataval_t* tidata_t; /* reference to internal image data */ +typedef unsigned char tidataval_t; /* internal image data value type */ +typedef tidataval_t* tidata_t; /* reference to internal image data */ -typedef void (*TIFFVoidMethod)(TIFF*); -typedef int (*TIFFBoolMethod)(TIFF*); -typedef int (*TIFFPreMethod)(TIFF*, tsample_t); -typedef int (*TIFFCodeMethod)(TIFF*, tidata_t, tsize_t, tsample_t); -typedef int (*TIFFSeekMethod)(TIFF*, uint32); -typedef void (*TIFFPostMethod)(TIFF*, tidata_t, tsize_t); -typedef uint32 (*TIFFStripMethod)(TIFF*, uint32); -typedef void (*TIFFTileMethod)(TIFF*, uint32*, uint32*); +typedef void (*TIFFVoidMethod)(TIFF*); +typedef int (*TIFFBoolMethod)(TIFF*); +typedef int (*TIFFPreMethod)(TIFF*, uint16); +typedef int (*TIFFCodeMethod)(TIFF* tif, uint8* buf, tmsize_t size, uint16 sample); +typedef int (*TIFFSeekMethod)(TIFF*, uint32); +typedef void (*TIFFPostMethod)(TIFF* tif, uint8* buf, tmsize_t size); +typedef uint32 (*TIFFStripMethod)(TIFF*, uint32); +typedef void (*TIFFTileMethod)(TIFF*, uint32*, uint32*); struct tiff { - char* tif_name; /* name of open file */ - int tif_fd; /* open file descriptor */ - int tif_mode; /* open mode (O_*) */ - uint32 tif_flags; -#define TIFF_FILLORDER 0x00003 /* natural bit fill order for machine */ -#define TIFF_DIRTYHEADER 0x00004 /* header must be written on close */ -#define TIFF_DIRTYDIRECT 0x00008 /* current directory must be written */ -#define TIFF_BUFFERSETUP 0x00010 /* data buffers setup */ -#define TIFF_CODERSETUP 0x00020 /* encoder/decoder setup done */ -#define TIFF_BEENWRITING 0x00040 /* written 1+ scanlines to file */ -#define TIFF_SWAB 0x00080 /* byte swap file information */ -#define TIFF_NOBITREV 0x00100 /* inhibit bit reversal logic */ -#define TIFF_MYBUFFER 0x00200 /* my raw data buffer; free on close */ -#define TIFF_ISTILED 0x00400 /* file is tile, not strip- based */ -#define TIFF_MAPPED 0x00800 /* file is mapped into memory */ -#define TIFF_POSTENCODE 0x01000 /* need call to postencode routine */ -#define TIFF_INSUBIFD 0x02000 /* currently writing a subifd */ -#define TIFF_UPSAMPLED 0x04000 /* library is doing data up-sampling */ -#define TIFF_STRIPCHOP 0x08000 /* enable strip chopping support */ -#define TIFF_HEADERONLY 0x10000 /* read header only, do not process */ - /* the first directory */ -#define TIFF_NOREADRAW 0x20000 /* skip reading of raw uncompressed */ - /* image data */ -#define TIFF_INCUSTOMIFD 0x40000 /* currently writing a custom IFD */ - toff_t tif_diroff; /* file offset of current directory */ - toff_t tif_nextdiroff; /* file offset of following directory */ - toff_t* tif_dirlist; /* list of offsets to already seen */ - /* directories to prevent IFD looping */ - tsize_t tif_dirlistsize;/* number of entires in offset list */ - uint16 tif_dirnumber; /* number of already seen directories */ - TIFFDirectory tif_dir; /* internal rep of current directory */ - TIFFDirectory tif_customdir; /* custom IFDs are separated from - the main ones */ - TIFFHeader tif_header; /* file's header block */ - const int* tif_typeshift; /* data type shift counts */ - const long* tif_typemask; /* data type masks */ - uint32 tif_row; /* current scanline */ - tdir_t tif_curdir; /* current directory (index) */ - tstrip_t tif_curstrip; /* current strip for read/write */ - toff_t tif_curoff; /* current offset for read/write */ - toff_t tif_dataoff; /* current offset for writing dir */ -/* SubIFD support */ - uint16 tif_nsubifd; /* remaining subifds to write */ - toff_t tif_subifdoff; /* offset for patching SubIFD link */ -/* tiling support */ - uint32 tif_col; /* current column (offset by row too) */ - ttile_t tif_curtile; /* current tile for read/write */ - tsize_t tif_tilesize; /* # of bytes in a tile */ -/* compression scheme hooks */ - int tif_decodestatus; - TIFFBoolMethod tif_setupdecode;/* called once before predecode */ - TIFFPreMethod tif_predecode; /* pre- row/strip/tile decoding */ - TIFFBoolMethod tif_setupencode;/* called once before preencode */ - int tif_encodestatus; - TIFFPreMethod tif_preencode; /* pre- row/strip/tile encoding */ - TIFFBoolMethod tif_postencode; /* post- row/strip/tile encoding */ - TIFFCodeMethod tif_decoderow; /* scanline decoding routine */ - TIFFCodeMethod tif_encoderow; /* scanline encoding routine */ - TIFFCodeMethod tif_decodestrip;/* strip decoding routine */ - TIFFCodeMethod tif_encodestrip;/* strip encoding routine */ - TIFFCodeMethod tif_decodetile; /* tile decoding routine */ - TIFFCodeMethod tif_encodetile; /* tile encoding routine */ - TIFFVoidMethod tif_close; /* cleanup-on-close routine */ - TIFFSeekMethod tif_seek; /* position within a strip routine */ - TIFFVoidMethod tif_cleanup; /* cleanup state routine */ - TIFFStripMethod tif_defstripsize;/* calculate/constrain strip size */ - TIFFTileMethod tif_deftilesize;/* calculate/constrain tile size */ - tidata_t tif_data; /* compression scheme private data */ -/* input/output buffering */ - tsize_t tif_scanlinesize;/* # of bytes in a scanline */ - tsize_t tif_scanlineskew;/* scanline skew for reading strips */ - tidata_t tif_rawdata; /* raw data buffer */ - tsize_t tif_rawdatasize;/* # of bytes in raw data buffer */ - tidata_t tif_rawcp; /* current spot in raw buffer */ - tsize_t tif_rawcc; /* bytes unread from raw buffer */ -/* memory-mapped file support */ - tidata_t tif_base; /* base of mapped file */ - toff_t tif_size; /* size of mapped file region (bytes) - FIXME: it should be tsize_t */ - TIFFMapFileProc tif_mapproc; /* map file method */ - TIFFUnmapFileProc tif_unmapproc;/* unmap file method */ -/* input/output callback methods */ - thandle_t tif_clientdata; /* callback parameter */ - TIFFReadWriteProc tif_readproc; /* read method */ - TIFFReadWriteProc tif_writeproc;/* write method */ - TIFFSeekProc tif_seekproc; /* lseek method */ - TIFFCloseProc tif_closeproc; /* close method */ - TIFFSizeProc tif_sizeproc; /* filesize method */ -/* post-decoding support */ - TIFFPostMethod tif_postdecode; /* post decoding routine */ -/* tag support */ - TIFFFieldInfo** tif_fieldinfo; /* sorted table of registered tags */ - size_t tif_nfields; /* # entries in registered tag table */ - const TIFFFieldInfo *tif_foundfield;/* cached pointer to already found tag */ - TIFFTagMethods tif_tagmethods; /* tag get/set/print routines */ - TIFFClientInfoLink *tif_clientinfo; /* extra client information. */ + char* tif_name; /* name of open file */ + int tif_fd; /* open file descriptor */ + int tif_mode; /* open mode (O_*) */ + uint32 tif_flags; + #define TIFF_FILLORDER 0x00003 /* natural bit fill order for machine */ + #define TIFF_DIRTYHEADER 0x00004 /* header must be written on close */ + #define TIFF_DIRTYDIRECT 0x00008 /* current directory must be written */ + #define TIFF_BUFFERSETUP 0x00010 /* data buffers setup */ + #define TIFF_CODERSETUP 0x00020 /* encoder/decoder setup done */ + #define TIFF_BEENWRITING 0x00040 /* written 1+ scanlines to file */ + #define TIFF_SWAB 0x00080 /* byte swap file information */ + #define TIFF_NOBITREV 0x00100 /* inhibit bit reversal logic */ + #define TIFF_MYBUFFER 0x00200 /* my raw data buffer; free on close */ + #define TIFF_ISTILED 0x00400 /* file is tile, not strip- based */ + #define TIFF_MAPPED 0x00800 /* file is mapped into memory */ + #define TIFF_POSTENCODE 0x01000 /* need call to postencode routine */ + #define TIFF_INSUBIFD 0x02000 /* currently writing a subifd */ + #define TIFF_UPSAMPLED 0x04000 /* library is doing data up-sampling */ + #define TIFF_STRIPCHOP 0x08000 /* enable strip chopping support */ + #define TIFF_HEADERONLY 0x10000 /* read header only, do not process the first directory */ + #define TIFF_NOREADRAW 0x20000 /* skip reading of raw uncompressed image data */ + #define TIFF_INCUSTOMIFD 0x40000 /* currently writing a custom IFD */ + #define TIFF_BIGTIFF 0x80000 /* read/write bigtiff */ + #define TIFF_BUF4WRITE 0x100000 /* rawcc bytes are for writing */ + #define TIFF_DIRTYSTRIP 0x200000 /* stripoffsets/stripbytecount dirty*/ + #define TIFF_PERSAMPLE 0x400000 /* get/set per sample tags as arrays */ + #define TIFF_BUFFERMMAP 0x800000 /* read buffer (tif_rawdata) points into mmap() memory */ + uint64 tif_diroff; /* file offset of current directory */ + uint64 tif_nextdiroff; /* file offset of following directory */ + uint64* tif_dirlist; /* list of offsets to already seen directories to prevent IFD looping */ + uint16 tif_dirlistsize; /* number of entires in offset list */ + uint16 tif_dirnumber; /* number of already seen directories */ + TIFFDirectory tif_dir; /* internal rep of current directory */ + TIFFDirectory tif_customdir; /* custom IFDs are separated from the main ones */ + union { + TIFFHeaderCommon common; + TIFFHeaderClassic classic; + TIFFHeaderBig big; + } tif_header; + uint16 tif_header_size; /* file's header block and its length */ + uint32 tif_row; /* current scanline */ + uint16 tif_curdir; /* current directory (index) */ + uint32 tif_curstrip; /* current strip for read/write */ + uint64 tif_curoff; /* current offset for read/write */ + uint64 tif_dataoff; /* current offset for writing dir */ + /* SubIFD support */ + uint16 tif_nsubifd; /* remaining subifds to write */ + uint64 tif_subifdoff; /* offset for patching SubIFD link */ + /* tiling support */ + uint32 tif_col; /* current column (offset by row too) */ + uint32 tif_curtile; /* current tile for read/write */ + tmsize_t tif_tilesize; /* # of bytes in a tile */ + /* compression scheme hooks */ + int tif_decodestatus; + TIFFBoolMethod tif_fixuptags; /* called in TIFFReadDirectory */ + TIFFBoolMethod tif_setupdecode; /* called once before predecode */ + TIFFPreMethod tif_predecode; /* pre- row/strip/tile decoding */ + TIFFBoolMethod tif_setupencode; /* called once before preencode */ + int tif_encodestatus; + TIFFPreMethod tif_preencode; /* pre- row/strip/tile encoding */ + TIFFBoolMethod tif_postencode; /* post- row/strip/tile encoding */ + TIFFCodeMethod tif_decoderow; /* scanline decoding routine */ + TIFFCodeMethod tif_encoderow; /* scanline encoding routine */ + TIFFCodeMethod tif_decodestrip; /* strip decoding routine */ + TIFFCodeMethod tif_encodestrip; /* strip encoding routine */ + TIFFCodeMethod tif_decodetile; /* tile decoding routine */ + TIFFCodeMethod tif_encodetile; /* tile encoding routine */ + TIFFVoidMethod tif_close; /* cleanup-on-close routine */ + TIFFSeekMethod tif_seek; /* position within a strip routine */ + TIFFVoidMethod tif_cleanup; /* cleanup state routine */ + TIFFStripMethod tif_defstripsize; /* calculate/constrain strip size */ + TIFFTileMethod tif_deftilesize; /* calculate/constrain tile size */ + uint8* tif_data; /* compression scheme private data */ + /* input/output buffering */ + tmsize_t tif_scanlinesize; /* # of bytes in a scanline */ + tmsize_t tif_scanlineskew; /* scanline skew for reading strips */ + uint8* tif_rawdata; /* raw data buffer */ + tmsize_t tif_rawdatasize; /* # of bytes in raw data buffer */ + tmsize_t tif_rawdataoff; /* rawdata offset within strip */ + tmsize_t tif_rawdataloaded;/* amount of data in rawdata */ + uint8* tif_rawcp; /* current spot in raw buffer */ + tmsize_t tif_rawcc; /* bytes unread from raw buffer */ + /* memory-mapped file support */ + uint8* tif_base; /* base of mapped file */ + tmsize_t tif_size; /* size of mapped file region (bytes, thus tmsize_t) */ + TIFFMapFileProc tif_mapproc; /* map file method */ + TIFFUnmapFileProc tif_unmapproc; /* unmap file method */ + /* input/output callback methods */ + thandle_t tif_clientdata; /* callback parameter */ + TIFFReadWriteProc tif_readproc; /* read method */ + TIFFReadWriteProc tif_writeproc; /* write method */ + TIFFSeekProc tif_seekproc; /* lseek method */ + TIFFCloseProc tif_closeproc; /* close method */ + TIFFSizeProc tif_sizeproc; /* filesize method */ + /* post-decoding support */ + TIFFPostMethod tif_postdecode; /* post decoding routine */ + /* tag support */ + TIFFField** tif_fields; /* sorted table of registered tags */ + size_t tif_nfields; /* # entries in registered tag table */ + const TIFFField* tif_foundfield; /* cached pointer to already found tag */ + TIFFTagMethods tif_tagmethods; /* tag get/set/print routines */ + TIFFClientInfoLink* tif_clientinfo; /* extra client information. */ + /* Backward compatibility stuff. We need these two fields for + * setting up an old tag extension scheme. */ + TIFFFieldArray* tif_fieldscompat; + size_t tif_nfieldscompat; }; -#define isPseudoTag(t) (t > 0xffff) /* is tag value normal or pseudo */ +#define isPseudoTag(t) (t > 0xffff) /* is tag value normal or pseudo */ -#define isTiled(tif) (((tif)->tif_flags & TIFF_ISTILED) != 0) -#define isMapped(tif) (((tif)->tif_flags & TIFF_MAPPED) != 0) -#define isFillOrder(tif, o) (((tif)->tif_flags & (o)) != 0) -#define isUpSampled(tif) (((tif)->tif_flags & TIFF_UPSAMPLED) != 0) -#define TIFFReadFile(tif, buf, size) \ - ((*(tif)->tif_readproc)((tif)->tif_clientdata,buf,size)) -#define TIFFWriteFile(tif, buf, size) \ - ((*(tif)->tif_writeproc)((tif)->tif_clientdata,buf,size)) -#define TIFFSeekFile(tif, off, whence) \ - ((*(tif)->tif_seekproc)((tif)->tif_clientdata,(toff_t)(off),whence)) -#define TIFFCloseFile(tif) \ +#define isTiled(tif) (((tif)->tif_flags & TIFF_ISTILED) != 0) +#define isMapped(tif) (((tif)->tif_flags & TIFF_MAPPED) != 0) +#define isFillOrder(tif, o) (((tif)->tif_flags & (o)) != 0) +#define isUpSampled(tif) (((tif)->tif_flags & TIFF_UPSAMPLED) != 0) +#define TIFFReadFile(tif, buf, size) \ + ((*(tif)->tif_readproc)((tif)->tif_clientdata,(buf),(size))) +#define TIFFWriteFile(tif, buf, size) \ + ((*(tif)->tif_writeproc)((tif)->tif_clientdata,(buf),(size))) +#define TIFFSeekFile(tif, off, whence) \ + ((*(tif)->tif_seekproc)((tif)->tif_clientdata,(off),(whence))) +#define TIFFCloseFile(tif) \ ((*(tif)->tif_closeproc)((tif)->tif_clientdata)) -#define TIFFGetFileSize(tif) \ +#define TIFFGetFileSize(tif) \ ((*(tif)->tif_sizeproc)((tif)->tif_clientdata)) -#define TIFFMapFileContents(tif, paddr, psize) \ - ((*(tif)->tif_mapproc)((tif)->tif_clientdata,paddr,psize)) -#define TIFFUnmapFileContents(tif, addr, size) \ - ((*(tif)->tif_unmapproc)((tif)->tif_clientdata,addr,size)) +#define TIFFMapFileContents(tif, paddr, psize) \ + ((*(tif)->tif_mapproc)((tif)->tif_clientdata,(paddr),(psize))) +#define TIFFUnmapFileContents(tif, addr, size) \ + ((*(tif)->tif_unmapproc)((tif)->tif_clientdata,(addr),(size))) /* * Default Read/Seek/Write definitions. */ #ifndef ReadOK -#define ReadOK(tif, buf, size) \ - (TIFFReadFile(tif, (tdata_t) buf, (tsize_t)(size)) == (tsize_t)(size)) +#define ReadOK(tif, buf, size) \ + (TIFFReadFile((tif),(buf),(size))==(size)) #endif #ifndef SeekOK -#define SeekOK(tif, off) \ - (TIFFSeekFile(tif, (toff_t) off, SEEK_SET) == (toff_t) off) +#define SeekOK(tif, off) \ + (TIFFSeekFile((tif),(off),SEEK_SET)==(off)) #endif #ifndef WriteOK -#define WriteOK(tif, buf, size) \ - (TIFFWriteFile(tif, (tdata_t) buf, (tsize_t) size) == (tsize_t) size) +#define WriteOK(tif, buf, size) \ + (TIFFWriteFile((tif),(buf),(size))==(size)) #endif /* NB: the uint32 casts are to silence certain ANSI-C compilers */ -#define TIFFhowmany(x, y) (((uint32)x < (0xffffffff - (uint32)(y-1))) ? \ +#define TIFFhowmany_32(x, y) (((uint32)x < (0xffffffff - (uint32)(y-1))) ? \ ((((uint32)(x))+(((uint32)(y))-1))/((uint32)(y))) : \ 0U) -#define TIFFhowmany8(x) (((x)&0x07)?((uint32)(x)>>3)+1:(uint32)(x)>>3) -#define TIFFroundup(x, y) (TIFFhowmany(x,y)*(y)) +#define TIFFhowmany8_32(x) (((x)&0x07)?((uint32)(x)>>3)+1:(uint32)(x)>>3) +#define TIFFroundup_32(x, y) (TIFFhowmany_32(x,y)*(y)) +#define TIFFhowmany_64(x, y) ((((uint64)(x))+(((uint64)(y))-1))/((uint64)(y))) +#define TIFFhowmany8_64(x) (((x)&0x07)?((uint64)(x)>>3)+1:(uint64)(x)>>3) +#define TIFFroundup_64(x, y) (TIFFhowmany_64(x,y)*(y)) /* Safe multiply which returns zero if there is an integer overflow */ -#define TIFFSafeMultiply(t,v,m) ((((t)m != (t)0) && (((t)((v*m)/m)) == (t)v)) ? (t)(v*m) : (t)0) +#define TIFFSafeMultiply(t,v,m) ((((t)(m) != (t)0) && (((t)(((v)*(m))/(m))) == (t)(v))) ? (t)((v)*(m)) : (t)0) #define TIFFmax(A,B) ((A)>(B)?(A):(B)) #define TIFFmin(A,B) ((A)<(B)?(A):(B)) @@ -253,86 +261,95 @@ struct tiff { #if defined(__cplusplus) extern "C" { #endif -extern int _TIFFgetMode(const char*, const char*); -extern int _TIFFNoRowEncode(TIFF*, tidata_t, tsize_t, tsample_t); -extern int _TIFFNoStripEncode(TIFF*, tidata_t, tsize_t, tsample_t); -extern int _TIFFNoTileEncode(TIFF*, tidata_t, tsize_t, tsample_t); -extern int _TIFFNoRowDecode(TIFF*, tidata_t, tsize_t, tsample_t); -extern int _TIFFNoStripDecode(TIFF*, tidata_t, tsize_t, tsample_t); -extern int _TIFFNoTileDecode(TIFF*, tidata_t, tsize_t, tsample_t); -extern void _TIFFNoPostDecode(TIFF*, tidata_t, tsize_t); -extern int _TIFFNoPreCode (TIFF*, tsample_t); -extern int _TIFFNoSeek(TIFF*, uint32); -extern void _TIFFSwab16BitData(TIFF*, tidata_t, tsize_t); -extern void _TIFFSwab24BitData(TIFF*, tidata_t, tsize_t); -extern void _TIFFSwab32BitData(TIFF*, tidata_t, tsize_t); -extern void _TIFFSwab64BitData(TIFF*, tidata_t, tsize_t); -extern int TIFFFlushData1(TIFF*); -extern int TIFFDefaultDirectory(TIFF*); -extern void _TIFFSetDefaultCompressionState(TIFF*); -extern int TIFFSetCompressionScheme(TIFF*, int); -extern int TIFFSetDefaultCompressionState(TIFF*); -extern uint32 _TIFFDefaultStripSize(TIFF*, uint32); -extern void _TIFFDefaultTileSize(TIFF*, uint32*, uint32*); -extern int _TIFFDataSize(TIFFDataType); +extern int _TIFFgetMode(const char* mode, const char* module); +extern int _TIFFNoRowEncode(TIFF* tif, uint8* pp, tmsize_t cc, uint16 s); +extern int _TIFFNoStripEncode(TIFF* tif, uint8* pp, tmsize_t cc, uint16 s); +extern int _TIFFNoTileEncode(TIFF*, uint8* pp, tmsize_t cc, uint16 s); +extern int _TIFFNoRowDecode(TIFF* tif, uint8* pp, tmsize_t cc, uint16 s); +extern int _TIFFNoStripDecode(TIFF* tif, uint8* pp, tmsize_t cc, uint16 s); +extern int _TIFFNoTileDecode(TIFF*, uint8* pp, tmsize_t cc, uint16 s); +extern void _TIFFNoPostDecode(TIFF* tif, uint8* buf, tmsize_t cc); +extern int _TIFFNoPreCode(TIFF* tif, uint16 s); +extern int _TIFFNoSeek(TIFF* tif, uint32 off); +extern void _TIFFSwab16BitData(TIFF* tif, uint8* buf, tmsize_t cc); +extern void _TIFFSwab24BitData(TIFF* tif, uint8* buf, tmsize_t cc); +extern void _TIFFSwab32BitData(TIFF* tif, uint8* buf, tmsize_t cc); +extern void _TIFFSwab64BitData(TIFF* tif, uint8* buf, tmsize_t cc); +extern int TIFFFlushData1(TIFF* tif); +extern int TIFFDefaultDirectory(TIFF* tif); +extern void _TIFFSetDefaultCompressionState(TIFF* tif); +extern int _TIFFRewriteField(TIFF *, uint16, TIFFDataType, tmsize_t, void *); +extern int TIFFSetCompressionScheme(TIFF* tif, int scheme); +extern int TIFFSetDefaultCompressionState(TIFF* tif); +extern uint32 _TIFFDefaultStripSize(TIFF* tif, uint32 s); +extern void _TIFFDefaultTileSize(TIFF* tif, uint32* tw, uint32* th); +extern int _TIFFDataSize(TIFFDataType type); -extern void _TIFFsetByteArray(void**, void*, uint32); -extern void _TIFFsetString(char**, char*); -extern void _TIFFsetShortArray(uint16**, uint16*, uint32); -extern void _TIFFsetLongArray(uint32**, uint32*, uint32); -extern void _TIFFsetFloatArray(float**, float*, uint32); -extern void _TIFFsetDoubleArray(double**, double*, uint32); +extern void _TIFFsetByteArray(void**, void*, uint32); +extern void _TIFFsetString(char**, char*); +extern void _TIFFsetShortArray(uint16**, uint16*, uint32); +extern void _TIFFsetLongArray(uint32**, uint32*, uint32); +extern void _TIFFsetFloatArray(float**, float*, uint32); +extern void _TIFFsetDoubleArray(double**, double*, uint32); -extern void _TIFFprintAscii(FILE*, const char*); -extern void _TIFFprintAsciiTag(FILE*, const char*, const char*); +extern void _TIFFprintAscii(FILE*, const char*); +extern void _TIFFprintAsciiTag(FILE*, const char*, const char*); -extern TIFFErrorHandler _TIFFwarningHandler; -extern TIFFErrorHandler _TIFFerrorHandler; -extern TIFFErrorHandlerExt _TIFFwarningHandlerExt; -extern TIFFErrorHandlerExt _TIFFerrorHandlerExt; +extern TIFFErrorHandler _TIFFwarningHandler; +extern TIFFErrorHandler _TIFFerrorHandler; +extern TIFFErrorHandlerExt _TIFFwarningHandlerExt; +extern TIFFErrorHandlerExt _TIFFerrorHandlerExt; -extern tdata_t _TIFFCheckMalloc(TIFF*, size_t, size_t, const char*); -extern tdata_t _TIFFCheckRealloc(TIFF*, tdata_t, size_t, size_t, const char*); +extern uint32 _TIFFMultiply32(TIFF*, uint32, uint32, const char*); +extern uint64 _TIFFMultiply64(TIFF*, uint64, uint64, const char*); +extern void* _TIFFCheckMalloc(TIFF*, tmsize_t, tmsize_t, const char*); +extern void* _TIFFCheckRealloc(TIFF*, void*, tmsize_t, tmsize_t, const char*); -extern int TIFFInitDumpMode(TIFF*, int); +extern double _TIFFUInt64ToDouble(uint64); +extern float _TIFFUInt64ToFloat(uint64); + +extern int TIFFInitDumpMode(TIFF*, int); #ifdef PACKBITS_SUPPORT -extern int TIFFInitPackBits(TIFF*, int); +extern int TIFFInitPackBits(TIFF*, int); #endif #ifdef CCITT_SUPPORT -extern int TIFFInitCCITTRLE(TIFF*, int), TIFFInitCCITTRLEW(TIFF*, int); -extern int TIFFInitCCITTFax3(TIFF*, int), TIFFInitCCITTFax4(TIFF*, int); +extern int TIFFInitCCITTRLE(TIFF*, int), TIFFInitCCITTRLEW(TIFF*, int); +extern int TIFFInitCCITTFax3(TIFF*, int), TIFFInitCCITTFax4(TIFF*, int); #endif #ifdef THUNDER_SUPPORT -extern int TIFFInitThunderScan(TIFF*, int); +extern int TIFFInitThunderScan(TIFF*, int); #endif #ifdef NEXT_SUPPORT -extern int TIFFInitNeXT(TIFF*, int); +extern int TIFFInitNeXT(TIFF*, int); #endif #ifdef LZW_SUPPORT -extern int TIFFInitLZW(TIFF*, int); +extern int TIFFInitLZW(TIFF*, int); #endif #ifdef OJPEG_SUPPORT -extern int TIFFInitOJPEG(TIFF*, int); +extern int TIFFInitOJPEG(TIFF*, int); #endif #ifdef JPEG_SUPPORT -extern int TIFFInitJPEG(TIFF*, int); +extern int TIFFInitJPEG(TIFF*, int); #endif #ifdef JBIG_SUPPORT -extern int TIFFInitJBIG(TIFF*, int); +extern int TIFFInitJBIG(TIFF*, int); #endif #ifdef ZIP_SUPPORT -extern int TIFFInitZIP(TIFF*, int); +extern int TIFFInitZIP(TIFF*, int); #endif #ifdef PIXARLOG_SUPPORT -extern int TIFFInitPixarLog(TIFF*, int); +extern int TIFFInitPixarLog(TIFF*, int); #endif #ifdef LOGLUV_SUPPORT -extern int TIFFInitSGILog(TIFF*, int); +extern int TIFFInitSGILog(TIFF*, int); +#endif +#ifdef LZMA_SUPPORT +extern int TIFFInitLZMA(TIFF*, int); #endif #ifdef VMS -extern const TIFFCodec _TIFFBuiltinCODECS[]; +extern const TIFFCodec _TIFFBuiltinCODECS[]; #else -extern TIFFCodec _TIFFBuiltinCODECS[]; +extern TIFFCodec _TIFFBuiltinCODECS[]; #endif #if defined(__cplusplus) diff --git a/include/reactos/libs/libtiff/tiffvers.h b/include/reactos/libs/libtiff/tiffvers.h index 314a22a0ae9..40edc813d5f 100644 --- a/include/reactos/libs/libtiff/tiffvers.h +++ b/include/reactos/libs/libtiff/tiffvers.h @@ -1,4 +1,4 @@ -#define TIFFLIB_VERSION_STR "LIBTIFF, Version 3.9.4\nCopyright (c) 1988-1996 Sam Leffler\nCopyright (c) 1991-1996 Silicon Graphics, Inc." +#define TIFFLIB_VERSION_STR "LIBTIFF, Version 4.0.3\nCopyright (c) 1988-1996 Sam Leffler\nCopyright (c) 1991-1996 Silicon Graphics, Inc." /* * This define can be used in code that requires * compilation-related definitions specific to a @@ -6,4 +6,4 @@ * version checking should be done based on the * string returned by TIFFGetVersion. */ -#define TIFFLIB_VERSION 20100615 +#define TIFFLIB_VERSION 20120922 diff --git a/include/reactos/libs/libxml/DOCBparser.h b/include/reactos/libs/libxml/DOCBparser.h index 461d4ee802d..9394fa71bdd 100644 --- a/include/reactos/libs/libxml/DOCBparser.h +++ b/include/reactos/libs/libxml/DOCBparser.h @@ -47,44 +47,44 @@ XMLPUBFUN int XMLCALL const unsigned char *in, int *inlen, int quoteChar); -XMLPUBFUN docbDocPtr XMLCALL +XMLPUBFUN docbDocPtr XMLCALL docbSAXParseDoc (xmlChar *cur, const char *encoding, docbSAXHandlerPtr sax, void *userData); -XMLPUBFUN docbDocPtr XMLCALL +XMLPUBFUN docbDocPtr XMLCALL docbParseDoc (xmlChar *cur, const char *encoding); -XMLPUBFUN docbDocPtr XMLCALL +XMLPUBFUN docbDocPtr XMLCALL docbSAXParseFile (const char *filename, const char *encoding, docbSAXHandlerPtr sax, void *userData); -XMLPUBFUN docbDocPtr XMLCALL +XMLPUBFUN docbDocPtr XMLCALL docbParseFile (const char *filename, const char *encoding); /** * Interfaces for the Push mode. */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL docbFreeParserCtxt (docbParserCtxtPtr ctxt); -XMLPUBFUN docbParserCtxtPtr XMLCALL +XMLPUBFUN docbParserCtxtPtr XMLCALL docbCreatePushParserCtxt(docbSAXHandlerPtr sax, void *user_data, const char *chunk, int size, const char *filename, xmlCharEncoding enc); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL docbParseChunk (docbParserCtxtPtr ctxt, const char *chunk, int size, int terminate); -XMLPUBFUN docbParserCtxtPtr XMLCALL +XMLPUBFUN docbParserCtxtPtr XMLCALL docbCreateFileParserCtxt(const char *filename, const char *encoding); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL docbParseDocument (docbParserCtxtPtr ctxt); #ifdef __cplusplus diff --git a/include/reactos/libs/libxml/HTMLparser.h b/include/reactos/libs/libxml/HTMLparser.h index fbcc811e0e6..551186cb0cc 100644 --- a/include/reactos/libs/libxml/HTMLparser.h +++ b/include/reactos/libs/libxml/HTMLparser.h @@ -83,87 +83,87 @@ struct _htmlEntityDesc { /* * There is only few public functions. */ -XMLPUBFUN const htmlElemDesc * XMLCALL +XMLPUBFUN const htmlElemDesc * XMLCALL htmlTagLookup (const xmlChar *tag); -XMLPUBFUN const htmlEntityDesc * XMLCALL +XMLPUBFUN const htmlEntityDesc * XMLCALL htmlEntityLookup(const xmlChar *name); -XMLPUBFUN const htmlEntityDesc * XMLCALL +XMLPUBFUN const htmlEntityDesc * XMLCALL htmlEntityValueLookup(unsigned int value); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL htmlIsAutoClosed(htmlDocPtr doc, htmlNodePtr elem); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL htmlAutoCloseTag(htmlDocPtr doc, const xmlChar *name, htmlNodePtr elem); -XMLPUBFUN const htmlEntityDesc * XMLCALL +XMLPUBFUN const htmlEntityDesc * XMLCALL htmlParseEntityRef(htmlParserCtxtPtr ctxt, const xmlChar **str); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL htmlParseCharRef(htmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL htmlParseElement(htmlParserCtxtPtr ctxt); -XMLPUBFUN htmlParserCtxtPtr XMLCALL +XMLPUBFUN htmlParserCtxtPtr XMLCALL htmlNewParserCtxt(void); -XMLPUBFUN htmlParserCtxtPtr XMLCALL +XMLPUBFUN htmlParserCtxtPtr XMLCALL htmlCreateMemoryParserCtxt(const char *buffer, int size); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL htmlParseDocument(htmlParserCtxtPtr ctxt); -XMLPUBFUN htmlDocPtr XMLCALL +XMLPUBFUN htmlDocPtr XMLCALL htmlSAXParseDoc (xmlChar *cur, const char *encoding, htmlSAXHandlerPtr sax, void *userData); -XMLPUBFUN htmlDocPtr XMLCALL +XMLPUBFUN htmlDocPtr XMLCALL htmlParseDoc (xmlChar *cur, const char *encoding); -XMLPUBFUN htmlDocPtr XMLCALL +XMLPUBFUN htmlDocPtr XMLCALL htmlSAXParseFile(const char *filename, const char *encoding, htmlSAXHandlerPtr sax, void *userData); -XMLPUBFUN htmlDocPtr XMLCALL +XMLPUBFUN htmlDocPtr XMLCALL htmlParseFile (const char *filename, const char *encoding); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL UTF8ToHtml (unsigned char *out, int *outlen, const unsigned char *in, int *inlen); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL htmlEncodeEntities(unsigned char *out, int *outlen, const unsigned char *in, int *inlen, int quoteChar); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL htmlIsScriptAttribute(const xmlChar *name); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL htmlHandleOmittedElem(int val); #ifdef LIBXML_PUSH_ENABLED /** * Interfaces for the Push mode. */ -XMLPUBFUN htmlParserCtxtPtr XMLCALL +XMLPUBFUN htmlParserCtxtPtr XMLCALL htmlCreatePushParserCtxt(htmlSAXHandlerPtr sax, void *user_data, const char *chunk, int size, const char *filename, xmlCharEncoding enc); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL htmlParseChunk (htmlParserCtxtPtr ctxt, const char *chunk, int size, int terminate); #endif /* LIBXML_PUSH_ENABLED */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL htmlFreeParserCtxt (htmlParserCtxtPtr ctxt); /* @@ -184,7 +184,8 @@ typedef enum { HTML_PARSE_NOBLANKS = 1<<8, /* remove blank nodes */ HTML_PARSE_NONET = 1<<11,/* Forbid network access */ HTML_PARSE_NOIMPLIED= 1<<13,/* Do not add implied html/body... elements */ - HTML_PARSE_COMPACT = 1<<16 /* compact small text nodes */ + HTML_PARSE_COMPACT = 1<<16,/* compact small text nodes */ + HTML_PARSE_IGNORE_ENC=1<<21 /* ignore internal document encoding hint */ } htmlParserOption; XMLPUBFUN void XMLCALL diff --git a/include/reactos/libs/libxml/HTMLtree.h b/include/reactos/libs/libxml/HTMLtree.h index 6ea82078958..c0e110330c5 100644 --- a/include/reactos/libs/libxml/HTMLtree.h +++ b/include/reactos/libs/libxml/HTMLtree.h @@ -62,78 +62,78 @@ extern "C" { XMLPUBFUN htmlDocPtr XMLCALL htmlNewDoc (const xmlChar *URI, const xmlChar *ExternalID); -XMLPUBFUN htmlDocPtr XMLCALL +XMLPUBFUN htmlDocPtr XMLCALL htmlNewDocNoDtD (const xmlChar *URI, const xmlChar *ExternalID); -XMLPUBFUN const xmlChar * XMLCALL +XMLPUBFUN const xmlChar * XMLCALL htmlGetMetaEncoding (htmlDocPtr doc); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL htmlSetMetaEncoding (htmlDocPtr doc, const xmlChar *encoding); #ifdef LIBXML_OUTPUT_ENABLED -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL htmlDocDumpMemory (xmlDocPtr cur, xmlChar **mem, int *size); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL htmlDocDumpMemoryFormat (xmlDocPtr cur, xmlChar **mem, int *size, int format); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL htmlDocDump (FILE *f, xmlDocPtr cur); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL htmlSaveFile (const char *filename, xmlDocPtr cur); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL htmlNodeDump (xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL htmlNodeDumpFile (FILE *out, xmlDocPtr doc, xmlNodePtr cur); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL htmlNodeDumpFileFormat (FILE *out, xmlDocPtr doc, xmlNodePtr cur, const char *encoding, int format); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL htmlSaveFileEnc (const char *filename, xmlDocPtr cur, const char *encoding); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL htmlSaveFileFormat (const char *filename, xmlDocPtr cur, const char *encoding, int format); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, const char *encoding, int format); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL htmlDocContentDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr cur, const char *encoding); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL htmlDocContentDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr cur, const char *encoding, int format); -XMLPUBFUN void XMLCALL - htmlNodeDumpOutput (xmlOutputBufferPtr buf, +XMLPUBFUN void XMLCALL + htmlNodeDumpOutput (xmlOutputBufferPtr buf, xmlDocPtr doc, - xmlNodePtr cur, + xmlNodePtr cur, const char *encoding); #endif /* LIBXML_OUTPUT_ENABLED */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL htmlIsBooleanAttr (const xmlChar *name); diff --git a/include/reactos/libs/libxml/Makefile.in b/include/reactos/libs/libxml/Makefile.in index 6e219c735eb..2c56fd4116e 100644 --- a/include/reactos/libs/libxml/Makefile.in +++ b/include/reactos/libs/libxml/Makefile.in @@ -1,9 +1,9 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. +# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,6 +14,7 @@ # PARTICULAR PURPOSE. @SET_MAKE@ + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ @@ -33,8 +34,9 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -subdir = include -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +subdir = include/libxml +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/xmlversion.h.in $(xmlinc_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ @@ -44,55 +46,52 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = +CONFIG_CLEAN_FILES = xmlversion.h CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ SOURCES = DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ - distdir +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(xmlincdir)" +HEADERS = $(xmlinc_HEADERS) ETAGS = etags CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -am__relativize = \ - dir0=`pwd`; \ - sed_first='s,^\([^/]*\)/.*$$,\1,'; \ - sed_rest='s,^[^/]*/*,,'; \ - sed_last='s,^.*/\([^/]*\)$$,\1,'; \ - sed_butlast='s,/*[^/]*$$,,'; \ - while test -n "$$dir1"; do \ - first=`echo "$$dir1" | sed -e "$$sed_first"`; \ - if test "$$first" != "."; then \ - if test "$$first" = ".."; then \ - dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ - dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ - else \ - first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ - if test "$$first2" = "$$first"; then \ - dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ - else \ - dir2="../$$dir2"; \ - fi; \ - dir0="$$dir0"/"$$first"; \ - fi; \ - fi; \ - dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ - done; \ - reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ -AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -129,6 +128,7 @@ HTML_DIR = @HTML_DIR@ HTML_OBJ = @HTML_OBJ@ HTTP_OBJ = @HTTP_OBJ@ ICONV_LIBS = @ICONV_LIBS@ +ICU_LIBS = @ICU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -149,7 +149,10 @@ LIBXML_VERSION_NUMBER = @LIBXML_VERSION_NUMBER@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LZMA_CFLAGS = @LZMA_CFLAGS@ +LZMA_LIBS = @LZMA_LIBS@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MODULE_EXTENSION = @MODULE_EXTENSION@ MODULE_PLATFORM_LIBS = @MODULE_PLATFORM_LIBS@ @@ -206,10 +209,8 @@ TEST_VTIME = @TEST_VTIME@ TEST_XINCLUDE = @TEST_XINCLUDE@ TEST_XPATH = @TEST_XPATH@ TEST_XPTR = @TEST_XPTR@ -THREADS_W32 = @THREADS_W32@ THREAD_CFLAGS = @THREAD_CFLAGS@ THREAD_LIBS = @THREAD_LIBS@ -U = @U@ VERSION = @VERSION@ VERSION_SCRIPT_FLAGS = @VERSION_SCRIPT_FLAGS@ WGET = @WGET@ @@ -227,6 +228,7 @@ WITH_ICONV = @WITH_ICONV@ WITH_ICU = @WITH_ICU@ WITH_ISO8859X = @WITH_ISO8859X@ WITH_LEGACY = @WITH_LEGACY@ +WITH_LZMA = @WITH_LZMA@ WITH_MEM_DEBUG = @WITH_MEM_DEBUG@ WITH_MODULES = @WITH_MODULES@ WITH_OUTPUT = @WITH_OUTPUT@ @@ -263,6 +265,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ @@ -311,9 +314,58 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -SUBDIRS = libxml -EXTRA_DIST = win32config.h wsockcompat.h -all: all-recursive +xmlincdir = $(includedir)/libxml2/libxml +xmlinc_HEADERS = \ + SAX.h \ + entities.h \ + encoding.h \ + parser.h \ + parserInternals.h \ + xmlerror.h \ + HTMLparser.h \ + HTMLtree.h \ + debugXML.h \ + tree.h \ + list.h \ + hash.h \ + xpath.h \ + xpathInternals.h \ + xpointer.h \ + xinclude.h \ + xmlIO.h \ + xmlmemory.h \ + nanohttp.h \ + nanoftp.h \ + uri.h \ + valid.h \ + xlink.h \ + xmlversion.h \ + DOCBparser.h \ + catalog.h \ + threads.h \ + globals.h \ + c14n.h \ + xmlautomata.h \ + xmlregexp.h \ + xmlmodule.h \ + xmlschemas.h \ + schemasInternals.h \ + xmlschemastypes.h \ + xmlstring.h \ + xmlunicode.h \ + xmlreader.h \ + relaxng.h \ + dict.h \ + SAX2.h \ + xmlexports.h \ + xmlwriter.h \ + chvalid.h \ + pattern.h \ + xmlsave.h \ + schematron.h + +EXTRA_DIST = xmlversion.h.in +all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @@ -325,9 +377,9 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/libxml/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu include/Makefile + $(AUTOMAKE) --gnu include/libxml/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -346,83 +398,33 @@ $(top_srcdir)/configure: $(am__configure_deps) $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): +xmlversion.h: $(top_builddir)/config.status $(srcdir)/xmlversion.h.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @fail= failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ +install-xmlincHEADERS: $(xmlinc_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(xmlincdir)" || $(MKDIR_P) "$(DESTDIR)$(xmlincdir)" + @list='$(xmlinc_HEADERS)'; test -n "$(xmlincdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(xmlincdir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(xmlincdir)" || exit $$?; \ done +uninstall-xmlincHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(xmlinc_HEADERS)'; test -n "$(xmlincdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(xmlincdir)'; $(am__uninstall_files_from_dir) + ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ @@ -433,23 +435,10 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) mkid -fID $$unique tags: TAGS -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ @@ -468,7 +457,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ fi; \ fi ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ @@ -518,53 +507,32 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - fi; \ - done - @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ - $(am__relativize); \ - new_distdir=$$reldir; \ - dir1=$$subdir; dir2="$(top_distdir)"; \ - $(am__relativize); \ - new_top_distdir=$$reldir; \ - echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ - echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ - ($(am__cd) $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$new_top_distdir" \ - distdir="$$new_distdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - am__skip_mode_fix=: \ - distdir) \ - || exit 1; \ - fi; \ - done check-am: all-am -check: check-recursive -all-am: Makefile -installdirs: installdirs-recursive -installdirs-am: -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive +check: check-am +all-am: Makefile $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(xmlincdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -installcheck: installcheck-recursive +installcheck: installcheck-am install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi mostlyclean-generic: clean-generic: @@ -576,88 +544,86 @@ distclean-generic: maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive +clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am -distclean: distclean-recursive +distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags -dvi: dvi-recursive +dvi: dvi-am dvi-am: -html: html-recursive +html: html-am html-am: -info: info-recursive +info: info-am info-am: -install-data-am: +install-data-am: install-xmlincHEADERS -install-dvi: install-dvi-recursive +install-dvi: install-dvi-am install-dvi-am: install-exec-am: -install-html: install-html-recursive +install-html: install-html-am install-html-am: -install-info: install-info-recursive +install-info: install-info-am install-info-am: install-man: -install-pdf: install-pdf-recursive +install-pdf: install-pdf-am install-pdf-am: -install-ps: install-ps-recursive +install-ps: install-ps-am install-ps-am: installcheck-am: -maintainer-clean: maintainer-clean-recursive +maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic -mostlyclean: mostlyclean-recursive +mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool -pdf: pdf-recursive +pdf: pdf-am pdf-am: -ps: ps-recursive +ps: ps-am ps-am: -uninstall-am: +uninstall-am: uninstall-xmlincHEADERS -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ - install-am install-strip tags-recursive +.MAKE: install-am install-strip -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am check check-am clean clean-generic clean-libtool \ - ctags ctags-recursive distclean distclean-generic \ +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ + install-ps install-ps-am install-strip install-xmlincHEADERS \ + installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-xmlincHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/include/reactos/libs/libxml/SAX.h b/include/reactos/libs/libxml/SAX.h index 0ca161b6089..20093ceb685 100644 --- a/include/reactos/libs/libxml/SAX.h +++ b/include/reactos/libs/libxml/SAX.h @@ -25,53 +25,53 @@ extern "C" { #endif XMLPUBFUN const xmlChar * XMLCALL getPublicId (void *ctx); -XMLPUBFUN const xmlChar * XMLCALL +XMLPUBFUN const xmlChar * XMLCALL getSystemId (void *ctx); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL setDocumentLocator (void *ctx, xmlSAXLocatorPtr loc); - -XMLPUBFUN int XMLCALL + +XMLPUBFUN int XMLCALL getLineNumber (void *ctx); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL getColumnNumber (void *ctx); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL isStandalone (void *ctx); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL hasInternalSubset (void *ctx); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL hasExternalSubset (void *ctx); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL internalSubset (void *ctx, const xmlChar *name, const xmlChar *ExternalID, const xmlChar *SystemID); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL externalSubset (void *ctx, const xmlChar *name, const xmlChar *ExternalID, const xmlChar *SystemID); -XMLPUBFUN xmlEntityPtr XMLCALL +XMLPUBFUN xmlEntityPtr XMLCALL getEntity (void *ctx, const xmlChar *name); -XMLPUBFUN xmlEntityPtr XMLCALL +XMLPUBFUN xmlEntityPtr XMLCALL getParameterEntity (void *ctx, const xmlChar *name); -XMLPUBFUN xmlParserInputPtr XMLCALL +XMLPUBFUN xmlParserInputPtr XMLCALL resolveEntity (void *ctx, const xmlChar *publicId, const xmlChar *systemId); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL entityDecl (void *ctx, const xmlChar *name, int type, const xmlChar *publicId, const xmlChar *systemId, xmlChar *content); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL attributeDecl (void *ctx, const xmlChar *elem, const xmlChar *fullname, @@ -79,87 +79,87 @@ XMLPUBFUN void XMLCALL int def, const xmlChar *defaultValue, xmlEnumerationPtr tree); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL elementDecl (void *ctx, const xmlChar *name, int type, xmlElementContentPtr content); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL notationDecl (void *ctx, const xmlChar *name, const xmlChar *publicId, const xmlChar *systemId); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL unparsedEntityDecl (void *ctx, const xmlChar *name, const xmlChar *publicId, const xmlChar *systemId, const xmlChar *notationName); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL startDocument (void *ctx); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL endDocument (void *ctx); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL attribute (void *ctx, const xmlChar *fullname, const xmlChar *value); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL startElement (void *ctx, const xmlChar *fullname, const xmlChar **atts); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL endElement (void *ctx, const xmlChar *name); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL reference (void *ctx, const xmlChar *name); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL characters (void *ctx, const xmlChar *ch, int len); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL ignorableWhitespace (void *ctx, const xmlChar *ch, int len); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL processingInstruction (void *ctx, const xmlChar *target, const xmlChar *data); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL globalNamespace (void *ctx, const xmlChar *href, const xmlChar *prefix); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL setNamespace (void *ctx, const xmlChar *name); -XMLPUBFUN xmlNsPtr XMLCALL +XMLPUBFUN xmlNsPtr XMLCALL getNamespace (void *ctx); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL checkNamespace (void *ctx, xmlChar *nameSpace); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL namespaceDecl (void *ctx, const xmlChar *href, const xmlChar *prefix); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL comment (void *ctx, const xmlChar *value); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL cdataBlock (void *ctx, const xmlChar *value, int len); #ifdef LIBXML_SAX1_ENABLED -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL initxmlDefaultSAXHandler (xmlSAXHandlerV1 *hdlr, int warning); #ifdef LIBXML_HTML_ENABLED -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL inithtmlDefaultSAXHandler (xmlSAXHandlerV1 *hdlr); #endif #ifdef LIBXML_DOCB_ENABLED -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL initdocbDefaultSAXHandler (xmlSAXHandlerV1 *hdlr); #endif #endif /* LIBXML_SAX1_ENABLED */ diff --git a/include/reactos/libs/libxml/SAX2.h b/include/reactos/libs/libxml/SAX2.h index 8d2db02d85f..daafd17eff8 100644 --- a/include/reactos/libs/libxml/SAX2.h +++ b/include/reactos/libs/libxml/SAX2.h @@ -23,53 +23,53 @@ extern "C" { #endif XMLPUBFUN const xmlChar * XMLCALL xmlSAX2GetPublicId (void *ctx); -XMLPUBFUN const xmlChar * XMLCALL +XMLPUBFUN const xmlChar * XMLCALL xmlSAX2GetSystemId (void *ctx); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2SetDocumentLocator (void *ctx, xmlSAXLocatorPtr loc); - -XMLPUBFUN int XMLCALL + +XMLPUBFUN int XMLCALL xmlSAX2GetLineNumber (void *ctx); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSAX2GetColumnNumber (void *ctx); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSAX2IsStandalone (void *ctx); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSAX2HasInternalSubset (void *ctx); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSAX2HasExternalSubset (void *ctx); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2InternalSubset (void *ctx, const xmlChar *name, const xmlChar *ExternalID, const xmlChar *SystemID); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2ExternalSubset (void *ctx, const xmlChar *name, const xmlChar *ExternalID, const xmlChar *SystemID); -XMLPUBFUN xmlEntityPtr XMLCALL +XMLPUBFUN xmlEntityPtr XMLCALL xmlSAX2GetEntity (void *ctx, const xmlChar *name); -XMLPUBFUN xmlEntityPtr XMLCALL +XMLPUBFUN xmlEntityPtr XMLCALL xmlSAX2GetParameterEntity (void *ctx, const xmlChar *name); -XMLPUBFUN xmlParserInputPtr XMLCALL +XMLPUBFUN xmlParserInputPtr XMLCALL xmlSAX2ResolveEntity (void *ctx, const xmlChar *publicId, const xmlChar *systemId); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2EntityDecl (void *ctx, const xmlChar *name, int type, const xmlChar *publicId, const xmlChar *systemId, xmlChar *content); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2AttributeDecl (void *ctx, const xmlChar *elem, const xmlChar *fullname, @@ -77,33 +77,33 @@ XMLPUBFUN void XMLCALL int def, const xmlChar *defaultValue, xmlEnumerationPtr tree); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2ElementDecl (void *ctx, const xmlChar *name, int type, xmlElementContentPtr content); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2NotationDecl (void *ctx, const xmlChar *name, const xmlChar *publicId, const xmlChar *systemId); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2UnparsedEntityDecl (void *ctx, const xmlChar *name, const xmlChar *publicId, const xmlChar *systemId, const xmlChar *notationName); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2StartDocument (void *ctx); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2EndDocument (void *ctx); #if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2StartElement (void *ctx, const xmlChar *fullname, const xmlChar **atts); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2EndElement (void *ctx, const xmlChar *name); #endif /* LIBXML_SAX1_ENABLED or LIBXML_HTML_ENABLED */ @@ -122,25 +122,25 @@ XMLPUBFUN void XMLCALL const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2Reference (void *ctx, const xmlChar *name); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2Characters (void *ctx, const xmlChar *ch, int len); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2IgnorableWhitespace (void *ctx, const xmlChar *ch, int len); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2ProcessingInstruction (void *ctx, const xmlChar *target, const xmlChar *data); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2Comment (void *ctx, const xmlChar *value); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2CDataBlock (void *ctx, const xmlChar *value, int len); @@ -153,22 +153,22 @@ XMLPUBFUN int XMLCALL XMLPUBFUN int XMLCALL xmlSAXVersion (xmlSAXHandler *hdlr, int version); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2InitDefaultSAXHandler (xmlSAXHandler *hdlr, int warning); #ifdef LIBXML_HTML_ENABLED -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2InitHtmlDefaultSAXHandler(xmlSAXHandler *hdlr); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL htmlDefaultSAXHandlerInit (void); #endif #ifdef LIBXML_DOCB_ENABLED -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSAX2InitDocbDefaultSAXHandler(xmlSAXHandler *hdlr); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL docbDefaultSAXHandlerInit (void); #endif -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDefaultSAXHandlerInit (void); #ifdef __cplusplus } diff --git a/include/reactos/libs/libxml/c14n.h b/include/reactos/libs/libxml/c14n.h index 3011af79ebb..b8971d92046 100644 --- a/include/reactos/libs/libxml/c14n.h +++ b/include/reactos/libs/libxml/c14n.h @@ -54,7 +54,7 @@ extern "C" { /* * xmlC14NMode: - * + * * Predefined values for C14N modes * */ diff --git a/include/reactos/libs/libxml/catalog.h b/include/reactos/libs/libxml/catalog.h index b4441370fcf..5a13f51b6c6 100644 --- a/include/reactos/libs/libxml/catalog.h +++ b/include/reactos/libs/libxml/catalog.h @@ -68,111 +68,111 @@ typedef xmlCatalog *xmlCatalogPtr; */ XMLPUBFUN xmlCatalogPtr XMLCALL xmlNewCatalog (int sgml); -XMLPUBFUN xmlCatalogPtr XMLCALL +XMLPUBFUN xmlCatalogPtr XMLCALL xmlLoadACatalog (const char *filename); -XMLPUBFUN xmlCatalogPtr XMLCALL +XMLPUBFUN xmlCatalogPtr XMLCALL xmlLoadSGMLSuperCatalog (const char *filename); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlConvertSGMLCatalog (xmlCatalogPtr catal); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlACatalogAdd (xmlCatalogPtr catal, const xmlChar *type, const xmlChar *orig, const xmlChar *replace); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlACatalogRemove (xmlCatalogPtr catal, const xmlChar *value); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlACatalogResolve (xmlCatalogPtr catal, const xmlChar *pubID, const xmlChar *sysID); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlACatalogResolveSystem(xmlCatalogPtr catal, const xmlChar *sysID); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlACatalogResolvePublic(xmlCatalogPtr catal, const xmlChar *pubID); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlACatalogResolveURI (xmlCatalogPtr catal, const xmlChar *URI); #ifdef LIBXML_OUTPUT_ENABLED -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlACatalogDump (xmlCatalogPtr catal, FILE *out); #endif /* LIBXML_OUTPUT_ENABLED */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeCatalog (xmlCatalogPtr catal); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlCatalogIsEmpty (xmlCatalogPtr catal); /* * Global operations. */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlInitializeCatalog (void); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlLoadCatalog (const char *filename); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlLoadCatalogs (const char *paths); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlCatalogCleanup (void); #ifdef LIBXML_OUTPUT_ENABLED -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlCatalogDump (FILE *out); #endif /* LIBXML_OUTPUT_ENABLED */ -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlCatalogResolve (const xmlChar *pubID, const xmlChar *sysID); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlCatalogResolveSystem (const xmlChar *sysID); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlCatalogResolvePublic (const xmlChar *pubID); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlCatalogResolveURI (const xmlChar *URI); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlCatalogAdd (const xmlChar *type, const xmlChar *orig, const xmlChar *replace); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlCatalogRemove (const xmlChar *value); -XMLPUBFUN xmlDocPtr XMLCALL +XMLPUBFUN xmlDocPtr XMLCALL xmlParseCatalogFile (const char *filename); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlCatalogConvert (void); /* * Strictly minimal interfaces for per-document catalogs used * by the parser. */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlCatalogFreeLocal (void *catalogs); -XMLPUBFUN void * XMLCALL +XMLPUBFUN void * XMLCALL xmlCatalogAddLocal (void *catalogs, const xmlChar *URL); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlCatalogLocalResolve (void *catalogs, const xmlChar *pubID, const xmlChar *sysID); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlCatalogLocalResolveURI(void *catalogs, const xmlChar *URI); /* * Preference settings. */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlCatalogSetDebug (int level); -XMLPUBFUN xmlCatalogPrefer XMLCALL +XMLPUBFUN xmlCatalogPrefer XMLCALL xmlCatalogSetDefaultPrefer(xmlCatalogPrefer prefer); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlCatalogSetDefaults (xmlCatalogAllow allow); -XMLPUBFUN xmlCatalogAllow XMLCALL +XMLPUBFUN xmlCatalogAllow XMLCALL xmlCatalogGetDefaults (void); /* DEPRECATED interfaces */ -XMLPUBFUN const xmlChar * XMLCALL +XMLPUBFUN const xmlChar * XMLCALL xmlCatalogGetSystem (const xmlChar *sysID); -XMLPUBFUN const xmlChar * XMLCALL +XMLPUBFUN const xmlChar * XMLCALL xmlCatalogGetPublic (const xmlChar *pubID); #ifdef __cplusplus diff --git a/include/reactos/libs/libxml/debugXML.h b/include/reactos/libs/libxml/debugXML.h index 5a9d20bcf5e..5b3be13d857 100644 --- a/include/reactos/libs/libxml/debugXML.h +++ b/include/reactos/libs/libxml/debugXML.h @@ -25,18 +25,18 @@ extern "C" { /* * The standard Dump routines. */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDebugDumpString (FILE *output, const xmlChar *str); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDebugDumpAttr (FILE *output, xmlAttrPtr attr, int depth); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDebugDumpAttrList (FILE *output, xmlAttrPtr attr, int depth); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDebugDumpOneNode (FILE *output, xmlNodePtr node, int depth); @@ -54,16 +54,16 @@ XMLPUBFUN void XMLCALL XMLPUBFUN void XMLCALL xmlDebugDumpDocument (FILE *output, xmlDocPtr doc); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDebugDumpDTD (FILE *output, xmlDtdPtr dtd); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDebugDumpEntities (FILE *output, xmlDocPtr doc); /**************************************************************** * * - * Checking routines * + * Checking routines * * * ****************************************************************/ @@ -73,16 +73,16 @@ XMLPUBFUN int XMLCALL /**************************************************************** * * - * XML shell helpers * + * XML shell helpers * * * ****************************************************************/ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlLsOneNode (FILE *output, xmlNodePtr node); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlLsCountNode (xmlNodePtr node); -XMLPUBFUN const char * XMLCALL +XMLPUBFUN const char * XMLCALL xmlBoolToText (int boolval); /**************************************************************** @@ -136,63 +136,63 @@ typedef int (* xmlShellCmd) (xmlShellCtxtPtr ctxt, xmlNodePtr node, xmlNodePtr node2); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlShellPrintXPathError (int errorType, const char *arg); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlShellPrintXPathResult(xmlXPathObjectPtr list); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlShellList (xmlShellCtxtPtr ctxt, char *arg, xmlNodePtr node, xmlNodePtr node2); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlShellBase (xmlShellCtxtPtr ctxt, char *arg, xmlNodePtr node, xmlNodePtr node2); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlShellDir (xmlShellCtxtPtr ctxt, char *arg, xmlNodePtr node, xmlNodePtr node2); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlShellLoad (xmlShellCtxtPtr ctxt, char *filename, xmlNodePtr node, xmlNodePtr node2); #ifdef LIBXML_OUTPUT_ENABLED -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlShellPrintNode (xmlNodePtr node); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlShellCat (xmlShellCtxtPtr ctxt, char *arg, xmlNodePtr node, xmlNodePtr node2); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlShellWrite (xmlShellCtxtPtr ctxt, char *filename, xmlNodePtr node, xmlNodePtr node2); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlShellSave (xmlShellCtxtPtr ctxt, char *filename, xmlNodePtr node, xmlNodePtr node2); #endif /* LIBXML_OUTPUT_ENABLED */ #ifdef LIBXML_VALID_ENABLED -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlShellValidate (xmlShellCtxtPtr ctxt, char *dtd, xmlNodePtr node, xmlNodePtr node2); #endif /* LIBXML_VALID_ENABLED */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlShellDu (xmlShellCtxtPtr ctxt, char *arg, xmlNodePtr tree, xmlNodePtr node2); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlShellPwd (xmlShellCtxtPtr ctxt, char *buffer, xmlNodePtr node, @@ -201,12 +201,12 @@ XMLPUBFUN int XMLCALL /* * The Shell interface. */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlShell (xmlDocPtr doc, char *filename, xmlShellReadlineFunc input, FILE *output); - + #endif /* LIBXML_XPATH_ENABLED */ #ifdef __cplusplus diff --git a/include/reactos/libs/libxml/dict.h b/include/reactos/libs/libxml/dict.h index abb8339cb89..7022ec8bee7 100644 --- a/include/reactos/libs/libxml/dict.h +++ b/include/reactos/libs/libxml/dict.h @@ -11,6 +11,7 @@ #ifndef __XML_DICT_H__ #define __XML_DICT_H__ +#include #include #include @@ -24,37 +25,47 @@ extern "C" { typedef struct _xmlDict xmlDict; typedef xmlDict *xmlDictPtr; +/* + * Initializer + */ +XMLPUBFUN int XMLCALL xmlInitializeDict(void); + /* * Constructor and destructor. */ XMLPUBFUN xmlDictPtr XMLCALL xmlDictCreate (void); +XMLPUBFUN size_t XMLCALL + xmlDictSetLimit (xmlDictPtr dict, + size_t limit); +XMLPUBFUN size_t XMLCALL + xmlDictGetUsage (xmlDictPtr dict); XMLPUBFUN xmlDictPtr XMLCALL xmlDictCreateSub(xmlDictPtr sub); XMLPUBFUN int XMLCALL xmlDictReference(xmlDictPtr dict); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDictFree (xmlDictPtr dict); /* * Lookup of entry in the dictionnary. */ -XMLPUBFUN const xmlChar * XMLCALL +XMLPUBFUN const xmlChar * XMLCALL xmlDictLookup (xmlDictPtr dict, const xmlChar *name, int len); -XMLPUBFUN const xmlChar * XMLCALL +XMLPUBFUN const xmlChar * XMLCALL xmlDictExists (xmlDictPtr dict, const xmlChar *name, int len); -XMLPUBFUN const xmlChar * XMLCALL +XMLPUBFUN const xmlChar * XMLCALL xmlDictQLookup (xmlDictPtr dict, const xmlChar *prefix, const xmlChar *name); XMLPUBFUN int XMLCALL xmlDictOwns (xmlDictPtr dict, const xmlChar *str); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlDictSize (xmlDictPtr dict); /* diff --git a/include/reactos/libs/libxml/encoding.h b/include/reactos/libs/libxml/encoding.h index 3a3b9b2d820..7967cc66a96 100644 --- a/include/reactos/libs/libxml/encoding.h +++ b/include/reactos/libs/libxml/encoding.h @@ -163,32 +163,32 @@ extern "C" { /* * Interfaces for encoding handlers. */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlInitCharEncodingHandlers (void); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlCleanupCharEncodingHandlers (void); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlRegisterCharEncodingHandler (xmlCharEncodingHandlerPtr handler); XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL xmlGetCharEncodingHandler (xmlCharEncoding enc); XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL xmlFindCharEncodingHandler (const char *name); XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL - xmlNewCharEncodingHandler (const char *name, - xmlCharEncodingInputFunc input, - xmlCharEncodingOutputFunc output); + xmlNewCharEncodingHandler (const char *name, + xmlCharEncodingInputFunc input, + xmlCharEncodingOutputFunc output); /* * Interfaces for encoding names and aliases. */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlAddEncodingAlias (const char *name, const char *alias); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlDelEncodingAlias (const char *alias); XMLPUBFUN const char * XMLCALL xmlGetEncodingAlias (const char *alias); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlCleanupEncodingAliases (void); XMLPUBFUN xmlCharEncoding XMLCALL xmlParseCharEncoding (const char *name); @@ -202,12 +202,12 @@ XMLPUBFUN xmlCharEncoding XMLCALL xmlDetectCharEncoding (const unsigned char *in, int len); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlCharEncOutFunc (xmlCharEncodingHandler *handler, xmlBufferPtr out, xmlBufferPtr in); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlCharEncInFunc (xmlCharEncodingHandler *handler, xmlBufferPtr out, xmlBufferPtr in); @@ -215,20 +215,20 @@ XMLPUBFUN int XMLCALL xmlCharEncFirstLine (xmlCharEncodingHandler *handler, xmlBufferPtr out, xmlBufferPtr in); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlCharEncCloseFunc (xmlCharEncodingHandler *handler); /* * Export a few useful functions */ #ifdef LIBXML_OUTPUT_ENABLED -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL UTF8Toisolat1 (unsigned char *out, int *outlen, const unsigned char *in, int *inlen); #endif /* LIBXML_OUTPUT_ENABLED */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL isolat1ToUTF8 (unsigned char *out, int *outlen, const unsigned char *in, diff --git a/include/reactos/libs/libxml/hash.h b/include/reactos/libs/libxml/hash.h index 7fe4be754c3..dc8ab7ec52c 100644 --- a/include/reactos/libs/libxml/hash.h +++ b/include/reactos/libs/libxml/hash.h @@ -1,7 +1,7 @@ /* * Summary: Chained hash tables - * Description: This module implements the hash table support used in - * various places in the library. + * Description: This module implements the hash table support used in + * various places in the library. * * Copy: See Copyright for the status of this software. * @@ -108,40 +108,40 @@ XMLPUBFUN xmlHashTablePtr XMLCALL XMLPUBFUN xmlHashTablePtr XMLCALL xmlHashCreateDict(int size, xmlDictPtr dict); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlHashFree (xmlHashTablePtr table, xmlHashDeallocator f); /* * Add a new entry to the hash table. */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlHashAddEntry (xmlHashTablePtr table, const xmlChar *name, void *userdata); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlHashUpdateEntry(xmlHashTablePtr table, const xmlChar *name, void *userdata, xmlHashDeallocator f); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlHashAddEntry2(xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, void *userdata); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlHashUpdateEntry2(xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, void *userdata, xmlHashDeallocator f); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlHashAddEntry3(xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, const xmlChar *name3, void *userdata); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlHashUpdateEntry3(xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, @@ -152,13 +152,13 @@ XMLPUBFUN int XMLCALL /* * Remove an entry from the hash table. */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name, xmlHashDeallocator f); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, xmlHashDeallocator f); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, const xmlChar *name3, xmlHashDeallocator f); @@ -166,29 +166,29 @@ XMLPUBFUN int XMLCALL /* * Retrieve the userdata. */ -XMLPUBFUN void * XMLCALL +XMLPUBFUN void * XMLCALL xmlHashLookup (xmlHashTablePtr table, const xmlChar *name); -XMLPUBFUN void * XMLCALL +XMLPUBFUN void * XMLCALL xmlHashLookup2 (xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2); -XMLPUBFUN void * XMLCALL +XMLPUBFUN void * XMLCALL xmlHashLookup3 (xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, const xmlChar *name3); -XMLPUBFUN void * XMLCALL +XMLPUBFUN void * XMLCALL xmlHashQLookup (xmlHashTablePtr table, const xmlChar *name, const xmlChar *prefix); -XMLPUBFUN void * XMLCALL +XMLPUBFUN void * XMLCALL xmlHashQLookup2 (xmlHashTablePtr table, const xmlChar *name, const xmlChar *prefix, const xmlChar *name2, const xmlChar *prefix2); -XMLPUBFUN void * XMLCALL +XMLPUBFUN void * XMLCALL xmlHashQLookup3 (xmlHashTablePtr table, const xmlChar *name, const xmlChar *prefix, @@ -200,27 +200,27 @@ XMLPUBFUN void * XMLCALL /* * Helpers. */ -XMLPUBFUN xmlHashTablePtr XMLCALL +XMLPUBFUN xmlHashTablePtr XMLCALL xmlHashCopy (xmlHashTablePtr table, xmlHashCopier f); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlHashSize (xmlHashTablePtr table); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlHashScan (xmlHashTablePtr table, xmlHashScanner f, void *data); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlHashScan3 (xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, const xmlChar *name3, xmlHashScanner f, void *data); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlHashScanFull (xmlHashTablePtr table, xmlHashScannerFull f, void *data); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlHashScanFull3(xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, diff --git a/include/reactos/libs/libxml/list.h b/include/reactos/libs/libxml/list.h index 1d83482430f..0504e0cff4a 100644 --- a/include/reactos/libs/libxml/list.h +++ b/include/reactos/libs/libxml/list.h @@ -1,6 +1,6 @@ /* * Summary: lists interfaces - * Description: this module implement the list support used in + * Description: this module implement the list support used in * various place in the library. * * Copy: See Copyright for the status of this software. @@ -55,76 +55,76 @@ typedef int (*xmlListWalker) (const void *data, const void *user); XMLPUBFUN xmlListPtr XMLCALL xmlListCreate (xmlListDeallocator deallocator, xmlListDataCompare compare); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlListDelete (xmlListPtr l); /* Basic Operators */ -XMLPUBFUN void * XMLCALL +XMLPUBFUN void * XMLCALL xmlListSearch (xmlListPtr l, void *data); -XMLPUBFUN void * XMLCALL +XMLPUBFUN void * XMLCALL xmlListReverseSearch (xmlListPtr l, void *data); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlListInsert (xmlListPtr l, void *data) ; -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlListAppend (xmlListPtr l, void *data) ; -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlListRemoveFirst (xmlListPtr l, void *data); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlListRemoveLast (xmlListPtr l, void *data); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlListRemoveAll (xmlListPtr l, void *data); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlListClear (xmlListPtr l); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlListEmpty (xmlListPtr l); -XMLPUBFUN xmlLinkPtr XMLCALL +XMLPUBFUN xmlLinkPtr XMLCALL xmlListFront (xmlListPtr l); -XMLPUBFUN xmlLinkPtr XMLCALL +XMLPUBFUN xmlLinkPtr XMLCALL xmlListEnd (xmlListPtr l); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlListSize (xmlListPtr l); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlListPopFront (xmlListPtr l); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlListPopBack (xmlListPtr l); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlListPushFront (xmlListPtr l, void *data); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlListPushBack (xmlListPtr l, void *data); /* Advanced Operators */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlListReverse (xmlListPtr l); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlListSort (xmlListPtr l); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlListWalk (xmlListPtr l, xmlListWalker walker, const void *user); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlListReverseWalk (xmlListPtr l, xmlListWalker walker, const void *user); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlListMerge (xmlListPtr l1, xmlListPtr l2); -XMLPUBFUN xmlListPtr XMLCALL +XMLPUBFUN xmlListPtr XMLCALL xmlListDup (const xmlListPtr old); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlListCopy (xmlListPtr cur, const xmlListPtr old); /* Link operators */ -XMLPUBFUN void * XMLCALL +XMLPUBFUN void * XMLCALL xmlLinkGetData (xmlLinkPtr lk); /* xmlListUnique() */ diff --git a/include/reactos/libs/libxml/nanoftp.h b/include/reactos/libs/libxml/nanoftp.h index 397bbba74f6..abb4bf7142b 100644 --- a/include/reactos/libs/libxml/nanoftp.h +++ b/include/reactos/libs/libxml/nanoftp.h @@ -31,6 +31,7 @@ * macro used to provide portability of code to windows sockets * the value to be used when the socket is not valid */ +#undef INVALID_SOCKET #define INVALID_SOCKET (-1) #endif diff --git a/include/reactos/libs/libxml/nanohttp.h b/include/reactos/libs/libxml/nanohttp.h index 1d8ac24b2af..22b8fb43381 100644 --- a/include/reactos/libs/libxml/nanohttp.h +++ b/include/reactos/libs/libxml/nanohttp.h @@ -7,7 +7,7 @@ * * Author: Daniel Veillard */ - + #ifndef __NANO_HTTP_H__ #define __NANO_HTTP_H__ @@ -20,22 +20,22 @@ extern "C" { #endif XMLPUBFUN void XMLCALL xmlNanoHTTPInit (void); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlNanoHTTPCleanup (void); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlNanoHTTPScanProxy (const char *URL); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlNanoHTTPFetch (const char *URL, const char *filename, char **contentType); -XMLPUBFUN void * XMLCALL +XMLPUBFUN void * XMLCALL xmlNanoHTTPMethod (const char *URL, const char *method, const char *input, char **contentType, const char *headers, int ilen); -XMLPUBFUN void * XMLCALL +XMLPUBFUN void * XMLCALL xmlNanoHTTPMethodRedir (const char *URL, const char *method, const char *input, @@ -43,16 +43,16 @@ XMLPUBFUN void * XMLCALL char **redir, const char *headers, int ilen); -XMLPUBFUN void * XMLCALL +XMLPUBFUN void * XMLCALL xmlNanoHTTPOpen (const char *URL, char **contentType); -XMLPUBFUN void * XMLCALL +XMLPUBFUN void * XMLCALL xmlNanoHTTPOpenRedir (const char *URL, char **contentType, char **redir); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlNanoHTTPReturnCode (void *ctx); -XMLPUBFUN const char * XMLCALL +XMLPUBFUN const char * XMLCALL xmlNanoHTTPAuthHeader (void *ctx); XMLPUBFUN const char * XMLCALL xmlNanoHTTPRedir (void *ctx); @@ -62,16 +62,16 @@ XMLPUBFUN const char * XMLCALL xmlNanoHTTPEncoding (void *ctx); XMLPUBFUN const char * XMLCALL xmlNanoHTTPMimeType (void *ctx); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlNanoHTTPRead (void *ctx, void *dest, int len); #ifdef LIBXML_OUTPUT_ENABLED -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlNanoHTTPSave (void *ctxt, const char *filename); #endif /* LIBXML_OUTPUT_ENABLED */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlNanoHTTPClose (void *ctx); #ifdef __cplusplus } diff --git a/include/reactos/libs/libxml/parser.h b/include/reactos/libs/libxml/parser.h index 47b3df15251..e1346e4a4d3 100644 --- a/include/reactos/libs/libxml/parser.h +++ b/include/reactos/libs/libxml/parser.h @@ -80,7 +80,7 @@ struct _xmlParserInput { * xmlParserNodeInfo: * * The parser can be asked to collect Node informations, i.e. at what - * place in the file they were detected. + * place in the file they were detected. * NOTE: This is off by default and not very well tested. */ typedef struct _xmlParserNodeInfo xmlParserNodeInfo; @@ -125,9 +125,9 @@ typedef enum { XML_PARSER_ENTITY_VALUE, /* within an entity value in a decl */ XML_PARSER_ATTRIBUTE_VALUE, /* within an attribute value */ XML_PARSER_SYSTEM_LITERAL, /* within a SYSTEM value */ - XML_PARSER_EPILOG, /* the Misc* after the last end tag */ + XML_PARSER_EPILOG, /* the Misc* after the last end tag */ XML_PARSER_IGNORE, /* within an IGNORED section */ - XML_PARSER_PUBLIC_LITERAL /* within a PUBLIC value */ + XML_PARSER_PUBLIC_LITERAL /* within a PUBLIC value */ } xmlParserInputState; /** @@ -221,7 +221,7 @@ struct _xmlParserCtxt { xmlValidCtxt vctxt; /* The validity context */ xmlParserInputState instate; /* current type of input */ - int token; /* next char look-ahead */ + int token; /* next char look-ahead */ char *directory; /* the data directory */ @@ -308,6 +308,8 @@ struct _xmlParserCtxt { int nodeInfoNr; /* Depth of the parsing stack */ int nodeInfoMax; /* Max depth of the parsing stack */ xmlParserNodeInfo *nodeInfoTab; /* array of nodeInfos */ + + int input_id; /* we need to label inputs */ }; /** @@ -398,8 +400,8 @@ typedef xmlEntityPtr (*getParameterEntitySAXFunc) (void *ctx, /** * entityDeclSAXFunc: * @ctx: the user data (XML parser context) - * @name: the entity name - * @type: the entity type + * @name: the entity name + * @type: the entity type * @publicId: The public ID of the entity * @systemId: The system ID of the entity * @content: the entity value (without processing). @@ -429,8 +431,8 @@ typedef void (*notationDeclSAXFunc)(void *ctx, * attributeDeclSAXFunc: * @ctx: the user data (XML parser context) * @elem: the name of the element - * @fullname: the attribute name - * @type: the attribute type + * @fullname: the attribute name + * @type: the attribute type * @def: the type of default value * @defaultValue: the attribute default value * @tree: the tree of enumerated value set @@ -447,8 +449,8 @@ typedef void (*attributeDeclSAXFunc)(void *ctx, /** * elementDeclSAXFunc: * @ctx: the user data (XML parser context) - * @name: the element name - * @type: the element type + * @name: the element name + * @type: the element type * @content: the element value tree * * An element definition has been parsed. @@ -535,7 +537,7 @@ typedef void (*attributeSAXFunc) (void *ctx, * @ctx: the user data (XML parser context) * @name: The entity name * - * Called when an entity reference is detected. + * Called when an entity reference is detected. */ typedef void (*referenceSAXFunc) (void *ctx, const xmlChar *name); @@ -599,7 +601,7 @@ typedef void (*cdataBlockSAXFunc) ( * @ctx: an XML parser context * @msg: the message to display/transmit * @...: extra parameters for the message display - * + * * Display and format a warning messages, callback. */ typedef void (XMLCDECL *warningSAXFunc) (void *ctx, @@ -609,7 +611,7 @@ typedef void (XMLCDECL *warningSAXFunc) (void *ctx, * @ctx: an XML parser context * @msg: the message to display/transmit * @...: extra parameters for the message display - * + * * Display and format an error messages, callback. */ typedef void (XMLCDECL *errorSAXFunc) (void *ctx, @@ -619,7 +621,7 @@ typedef void (XMLCDECL *errorSAXFunc) (void *ctx, * @ctx: an XML parser context * @msg: the message to display/transmit * @...: extra parameters for the message display - * + * * Display and format fatal error messages, callback. * Note: so far fatalError() SAX callbacks are not used, error() * get all the callbacks for errors. @@ -695,7 +697,7 @@ typedef void (*startElementNsSAX2Func) (void *ctx, int nb_attributes, int nb_defaulted, const xmlChar **attributes); - + /** * endElementNsSAX2Func: * @ctx: the user data (XML parser context) @@ -790,7 +792,7 @@ struct _xmlSAXHandlerV1 { * xmlExternalEntityLoader: * @URL: The System ID of the resource requested * @ID: The Public ID of the resource requested - * @context: the XML parser context + * @context: the XML parser context * * External entity loaders types. * @@ -816,18 +818,18 @@ extern "C" { /* * Init/Cleanup */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlInitParser (void); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlCleanupParser (void); /* * Input functions */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParserInputRead (xmlParserInputPtr in, int len); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParserInputGrow (xmlParserInputPtr in, int len); @@ -835,101 +837,101 @@ XMLPUBFUN int XMLCALL * Basic parsing Interfaces */ #ifdef LIBXML_SAX1_ENABLED -XMLPUBFUN xmlDocPtr XMLCALL +XMLPUBFUN xmlDocPtr XMLCALL xmlParseDoc (const xmlChar *cur); -XMLPUBFUN xmlDocPtr XMLCALL +XMLPUBFUN xmlDocPtr XMLCALL xmlParseFile (const char *filename); -XMLPUBFUN xmlDocPtr XMLCALL +XMLPUBFUN xmlDocPtr XMLCALL xmlParseMemory (const char *buffer, int size); #endif /* LIBXML_SAX1_ENABLED */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSubstituteEntitiesDefault(int val); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlKeepBlanksDefault (int val); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlStopParser (xmlParserCtxtPtr ctxt); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlPedanticParserDefault(int val); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlLineNumbersDefault (int val); #ifdef LIBXML_SAX1_ENABLED /* - * Recovery mode + * Recovery mode */ -XMLPUBFUN xmlDocPtr XMLCALL +XMLPUBFUN xmlDocPtr XMLCALL xmlRecoverDoc (const xmlChar *cur); -XMLPUBFUN xmlDocPtr XMLCALL +XMLPUBFUN xmlDocPtr XMLCALL xmlRecoverMemory (const char *buffer, int size); -XMLPUBFUN xmlDocPtr XMLCALL +XMLPUBFUN xmlDocPtr XMLCALL xmlRecoverFile (const char *filename); #endif /* LIBXML_SAX1_ENABLED */ /* * Less common routines and SAX interfaces */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParseDocument (xmlParserCtxtPtr ctxt); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParseExtParsedEnt (xmlParserCtxtPtr ctxt); #ifdef LIBXML_SAX1_ENABLED -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSAXUserParseFile (xmlSAXHandlerPtr sax, void *user_data, const char *filename); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSAXUserParseMemory (xmlSAXHandlerPtr sax, void *user_data, const char *buffer, int size); -XMLPUBFUN xmlDocPtr XMLCALL +XMLPUBFUN xmlDocPtr XMLCALL xmlSAXParseDoc (xmlSAXHandlerPtr sax, const xmlChar *cur, int recovery); -XMLPUBFUN xmlDocPtr XMLCALL +XMLPUBFUN xmlDocPtr XMLCALL xmlSAXParseMemory (xmlSAXHandlerPtr sax, const char *buffer, - int size, + int size, int recovery); -XMLPUBFUN xmlDocPtr XMLCALL +XMLPUBFUN xmlDocPtr XMLCALL xmlSAXParseMemoryWithData (xmlSAXHandlerPtr sax, const char *buffer, - int size, + int size, int recovery, void *data); -XMLPUBFUN xmlDocPtr XMLCALL +XMLPUBFUN xmlDocPtr XMLCALL xmlSAXParseFile (xmlSAXHandlerPtr sax, const char *filename, int recovery); -XMLPUBFUN xmlDocPtr XMLCALL +XMLPUBFUN xmlDocPtr XMLCALL xmlSAXParseFileWithData (xmlSAXHandlerPtr sax, const char *filename, int recovery, void *data); -XMLPUBFUN xmlDocPtr XMLCALL +XMLPUBFUN xmlDocPtr XMLCALL xmlSAXParseEntity (xmlSAXHandlerPtr sax, const char *filename); -XMLPUBFUN xmlDocPtr XMLCALL +XMLPUBFUN xmlDocPtr XMLCALL xmlParseEntity (const char *filename); #endif /* LIBXML_SAX1_ENABLED */ #ifdef LIBXML_VALID_ENABLED -XMLPUBFUN xmlDtdPtr XMLCALL +XMLPUBFUN xmlDtdPtr XMLCALL xmlSAXParseDTD (xmlSAXHandlerPtr sax, const xmlChar *ExternalID, const xmlChar *SystemID); -XMLPUBFUN xmlDtdPtr XMLCALL +XMLPUBFUN xmlDtdPtr XMLCALL xmlParseDTD (const xmlChar *ExternalID, const xmlChar *SystemID); -XMLPUBFUN xmlDtdPtr XMLCALL +XMLPUBFUN xmlDtdPtr XMLCALL xmlIOParseDTD (xmlSAXHandlerPtr sax, xmlParserInputBufferPtr input, xmlCharEncoding enc); #endif /* LIBXML_VALID_ENABLE */ #ifdef LIBXML_SAX1_ENABLED -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParseBalancedChunkMemory(xmlDocPtr doc, xmlSAXHandlerPtr sax, void *user_data, @@ -944,7 +946,7 @@ XMLPUBFUN xmlParserErrors XMLCALL int options, xmlNodePtr *lst); #ifdef LIBXML_SAX1_ENABLED -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParseBalancedChunkMemoryRecover(xmlDocPtr doc, xmlSAXHandlerPtr sax, void *user_data, @@ -952,7 +954,7 @@ XMLPUBFUN int XMLCALL const xmlChar *string, xmlNodePtr *lst, int recover); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParseExternalEntity (xmlDocPtr doc, xmlSAXHandlerPtr sax, void *user_data, @@ -961,7 +963,7 @@ XMLPUBFUN int XMLCALL const xmlChar *ID, xmlNodePtr *lst); #endif /* LIBXML_SAX1_ENABLED */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParseCtxtExternalEntity(xmlParserCtxtPtr ctx, const xmlChar *URL, const xmlChar *ID, @@ -970,35 +972,35 @@ XMLPUBFUN int XMLCALL /* * Parser contexts handling. */ -XMLPUBFUN xmlParserCtxtPtr XMLCALL +XMLPUBFUN xmlParserCtxtPtr XMLCALL xmlNewParserCtxt (void); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlInitParserCtxt (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlClearParserCtxt (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeParserCtxt (xmlParserCtxtPtr ctxt); #ifdef LIBXML_SAX1_ENABLED -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSetupParserForBuffer (xmlParserCtxtPtr ctxt, const xmlChar* buffer, const char *filename); #endif /* LIBXML_SAX1_ENABLED */ -XMLPUBFUN xmlParserCtxtPtr XMLCALL +XMLPUBFUN xmlParserCtxtPtr XMLCALL xmlCreateDocParserCtxt (const xmlChar *cur); #ifdef LIBXML_LEGACY_ENABLED /* * Reading/setting optional parsing features. */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlGetFeaturesList (int *len, const char **result); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlGetFeature (xmlParserCtxtPtr ctxt, const char *name, void *result); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSetFeature (xmlParserCtxtPtr ctxt, const char *name, void *value); @@ -1008,13 +1010,13 @@ XMLPUBFUN int XMLCALL /* * Interfaces for the Push mode. */ -XMLPUBFUN xmlParserCtxtPtr XMLCALL +XMLPUBFUN xmlParserCtxtPtr XMLCALL xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax, void *user_data, const char *chunk, int size, const char *filename); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParseChunk (xmlParserCtxtPtr ctxt, const char *chunk, int size, @@ -1025,7 +1027,7 @@ XMLPUBFUN int XMLCALL * Special I/O mode. */ -XMLPUBFUN xmlParserCtxtPtr XMLCALL +XMLPUBFUN xmlParserCtxtPtr XMLCALL xmlCreateIOParserCtxt (xmlSAXHandlerPtr sax, void *user_data, xmlInputReadCallback ioread, @@ -1033,7 +1035,7 @@ XMLPUBFUN xmlParserCtxtPtr XMLCALL void *ioctx, xmlCharEncoding enc); -XMLPUBFUN xmlParserInputPtr XMLCALL +XMLPUBFUN xmlParserInputPtr XMLCALL xmlNewIOInputStream (xmlParserCtxtPtr ctxt, xmlParserInputBufferPtr input, xmlCharEncoding enc); @@ -1044,14 +1046,14 @@ XMLPUBFUN xmlParserInputPtr XMLCALL XMLPUBFUN const xmlParserNodeInfo* XMLCALL xmlParserFindNodeInfo (const xmlParserCtxtPtr ctxt, const xmlNodePtr node); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlInitNodeInfoSeq (xmlParserNodeInfoSeqPtr seq); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlClearNodeInfoSeq (xmlParserNodeInfoSeqPtr seq); -XMLPUBFUN unsigned long XMLCALL +XMLPUBFUN unsigned long XMLCALL xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeqPtr seq, const xmlNodePtr node); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParserAddNodeInfo (xmlParserCtxtPtr ctxt, const xmlParserNodeInfoPtr info); @@ -1059,7 +1061,7 @@ XMLPUBFUN void XMLCALL * External entities handling actually implemented in xmlIO. */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSetExternalEntityLoader(xmlExternalEntityLoader f); XMLPUBFUN xmlExternalEntityLoader XMLCALL xmlGetExternalEntityLoader(void); @@ -1105,8 +1107,10 @@ typedef enum { crash if you try to modify the tree) */ XML_PARSE_OLD10 = 1<<17,/* parse using XML-1.0 before update 5 */ XML_PARSE_NOBASEFIX = 1<<18,/* do not fixup XINCLUDE xml:base uris */ - XML_PARSE_HUGE = 1<<19, /* relax any hardcoded limit from the parser */ - XML_PARSE_OLDSAX = 1<<20 /* parse using SAX2 interface from before 2.7.0 */ + XML_PARSE_HUGE = 1<<19,/* relax any hardcoded limit from the parser */ + XML_PARSE_OLDSAX = 1<<20,/* parse using SAX2 interface before 2.7.0 */ + XML_PARSE_IGNORE_ENC= 1<<21,/* ignore internal document encoding hint */ + XML_PARSE_BIG_LINES = 1<<22 /* Store big lines numbers in text PSVI field */ } xmlParserOption; XMLPUBFUN void XMLCALL @@ -1223,6 +1227,7 @@ typedef enum { XML_WITH_DEBUG_RUN = 30, XML_WITH_ZLIB = 31, XML_WITH_ICU = 32, + XML_WITH_LZMA = 33, XML_WITH_NONE = 99999 /* just to be sure of allocation size */ } xmlFeature; diff --git a/include/reactos/libs/libxml/parserInternals.h b/include/reactos/libs/libxml/parserInternals.h index a5e75b5e386..6065320eb13 100644 --- a/include/reactos/libs/libxml/parserInternals.h +++ b/include/reactos/libs/libxml/parserInternals.h @@ -1,5 +1,5 @@ /* - * Summary: internals routines exported by the parser. + * Summary: internals routines and limits exported by the parser. * Description: this module exports a number of internal parsing routines * they are not really all intended for applications but * can prove useful doing low level processing. @@ -36,9 +36,42 @@ XMLPUBVAR unsigned int xmlParserMaxDepth; * Maximum size allowed for a single text node when building a tree. * This is not a limitation of the parser but a safety boundary feature, * use XML_PARSE_HUGE option to override it. + * Introduced in 2.9.0 */ #define XML_MAX_TEXT_LENGTH 10000000 +/** + * XML_MAX_NAME_LENGTH: + * + * Maximum size allowed for a markup identitier + * This is not a limitation of the parser but a safety boundary feature, + * use XML_PARSE_HUGE option to override it. + * Note that with the use of parsing dictionaries overriding the limit + * may result in more runtime memory usage in face of "unfriendly' content + * Introduced in 2.9.0 + */ +#define XML_MAX_NAME_LENGTH 50000 + +/** + * XML_MAX_DICTIONARY_LIMIT: + * + * Maximum size allowed by the parser for a dictionary by default + * This is not a limitation of the parser but a safety boundary feature, + * use XML_PARSE_HUGE option to override it. + * Introduced in 2.9.0 + */ +#define XML_MAX_DICTIONARY_LIMIT 10000000 + +/** + * XML_MAX_LOOKUP_LIMIT: + * + * Maximum size allowed by the parser for ahead lookup + * This is an upper boundary enforced by the parser to avoid bad + * behaviour on "unfriendly' content + * Introduced in 2.9.0 + */ +#define XML_MAX_LOOKUP_LIMIT 10000000 + /** * XML_MAX_NAMELEN: * @@ -57,7 +90,7 @@ XMLPUBVAR unsigned int xmlParserMaxDepth; /************************************************************************ * * - * UNICODE version of the macros. * + * UNICODE version of the macros. * * * ************************************************************************/ /** @@ -153,7 +186,7 @@ XMLPUBVAR unsigned int xmlParserMaxDepth; * * Always false (all combining chars > 0xff) */ -#define IS_COMBINING_CH(c) 0 +#define IS_COMBINING_CH(c) 0 /** * IS_EXTENDER: @@ -194,7 +227,7 @@ XMLPUBVAR unsigned int xmlParserMaxDepth; * Macro to check the following production in the XML spec: * * - * [84] Letter ::= BaseChar | Ideographic + * [84] Letter ::= BaseChar | Ideographic */ #define IS_LETTER(c) (IS_BASECHAR(c) || IS_IDEOGRAPHIC(c)) @@ -251,7 +284,7 @@ XMLPUBVAR unsigned int xmlParserMaxDepth; * * Skips the end of line chars. */ -#define SKIP_EOL(p) \ +#define SKIP_EOL(p) \ if (*(p) == 0x13) { p++ ; if (*(p) == 0x10) p++; } \ if (*(p) == 0x10) { p++ ; if (*(p) == 0x13) p++; } @@ -288,25 +321,25 @@ XMLPUBFUN int XMLCALL xmlIsLetter (int c); /** * Parser context. */ -XMLPUBFUN xmlParserCtxtPtr XMLCALL +XMLPUBFUN xmlParserCtxtPtr XMLCALL xmlCreateFileParserCtxt (const char *filename); -XMLPUBFUN xmlParserCtxtPtr XMLCALL +XMLPUBFUN xmlParserCtxtPtr XMLCALL xmlCreateURLParserCtxt (const char *filename, int options); -XMLPUBFUN xmlParserCtxtPtr XMLCALL +XMLPUBFUN xmlParserCtxtPtr XMLCALL xmlCreateMemoryParserCtxt(const char *buffer, int size); -XMLPUBFUN xmlParserCtxtPtr XMLCALL +XMLPUBFUN xmlParserCtxtPtr XMLCALL xmlCreateEntityParserCtxt(const xmlChar *URL, const xmlChar *ID, const xmlChar *base); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSwitchEncoding (xmlParserCtxtPtr ctxt, xmlCharEncoding enc); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSwitchToEncoding (xmlParserCtxtPtr ctxt, xmlCharEncodingHandlerPtr handler); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSwitchInputEncoding (xmlParserCtxtPtr ctxt, xmlParserInputPtr input, xmlCharEncodingHandlerPtr handler); @@ -324,29 +357,29 @@ XMLPUBFUN void XMLCALL /** * Input Streams. */ -XMLPUBFUN xmlParserInputPtr XMLCALL +XMLPUBFUN xmlParserInputPtr XMLCALL xmlNewStringInputStream (xmlParserCtxtPtr ctxt, const xmlChar *buffer); -XMLPUBFUN xmlParserInputPtr XMLCALL +XMLPUBFUN xmlParserInputPtr XMLCALL xmlNewEntityInputStream (xmlParserCtxtPtr ctxt, xmlEntityPtr entity); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlPushInput (xmlParserCtxtPtr ctxt, xmlParserInputPtr input); -XMLPUBFUN xmlChar XMLCALL +XMLPUBFUN xmlChar XMLCALL xmlPopInput (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeInputStream (xmlParserInputPtr input); -XMLPUBFUN xmlParserInputPtr XMLCALL +XMLPUBFUN xmlParserInputPtr XMLCALL xmlNewInputFromFile (xmlParserCtxtPtr ctxt, const char *filename); -XMLPUBFUN xmlParserInputPtr XMLCALL +XMLPUBFUN xmlParserInputPtr XMLCALL xmlNewInputStream (xmlParserCtxtPtr ctxt); /** * Namespaces. */ -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlSplitQName (xmlParserCtxtPtr ctxt, const xmlChar *name, xmlChar **prefix); @@ -354,112 +387,112 @@ XMLPUBFUN xmlChar * XMLCALL /** * Generic production rules. */ -XMLPUBFUN const xmlChar * XMLCALL +XMLPUBFUN const xmlChar * XMLCALL xmlParseName (xmlParserCtxtPtr ctxt); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlParseNmtoken (xmlParserCtxtPtr ctxt); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlParseEntityValue (xmlParserCtxtPtr ctxt, xmlChar **orig); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlParseAttValue (xmlParserCtxtPtr ctxt); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlParseSystemLiteral (xmlParserCtxtPtr ctxt); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlParsePubidLiteral (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParseCharData (xmlParserCtxtPtr ctxt, int cdata); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlParseExternalID (xmlParserCtxtPtr ctxt, xmlChar **publicID, int strict); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParseComment (xmlParserCtxtPtr ctxt); -XMLPUBFUN const xmlChar * XMLCALL +XMLPUBFUN const xmlChar * XMLCALL xmlParsePITarget (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParsePI (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParseNotationDecl (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParseEntityDecl (xmlParserCtxtPtr ctxt); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParseDefaultDecl (xmlParserCtxtPtr ctxt, xmlChar **value); -XMLPUBFUN xmlEnumerationPtr XMLCALL +XMLPUBFUN xmlEnumerationPtr XMLCALL xmlParseNotationType (xmlParserCtxtPtr ctxt); -XMLPUBFUN xmlEnumerationPtr XMLCALL +XMLPUBFUN xmlEnumerationPtr XMLCALL xmlParseEnumerationType (xmlParserCtxtPtr ctxt); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParseEnumeratedType (xmlParserCtxtPtr ctxt, xmlEnumerationPtr *tree); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParseAttributeType (xmlParserCtxtPtr ctxt, xmlEnumerationPtr *tree); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt); -XMLPUBFUN xmlElementContentPtr XMLCALL +XMLPUBFUN xmlElementContentPtr XMLCALL xmlParseElementMixedContentDecl (xmlParserCtxtPtr ctxt, int inputchk); -XMLPUBFUN xmlElementContentPtr XMLCALL +XMLPUBFUN xmlElementContentPtr XMLCALL xmlParseElementChildrenContentDecl (xmlParserCtxtPtr ctxt, int inputchk); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParseElementContentDecl(xmlParserCtxtPtr ctxt, const xmlChar *name, xmlElementContentPtr *result); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParseElementDecl (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParseMarkupDecl (xmlParserCtxtPtr ctxt); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParseCharRef (xmlParserCtxtPtr ctxt); -XMLPUBFUN xmlEntityPtr XMLCALL +XMLPUBFUN xmlEntityPtr XMLCALL xmlParseEntityRef (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParseReference (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParsePEReference (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParseDocTypeDecl (xmlParserCtxtPtr ctxt); #ifdef LIBXML_SAX1_ENABLED -XMLPUBFUN const xmlChar * XMLCALL +XMLPUBFUN const xmlChar * XMLCALL xmlParseAttribute (xmlParserCtxtPtr ctxt, xmlChar **value); -XMLPUBFUN const xmlChar * XMLCALL +XMLPUBFUN const xmlChar * XMLCALL xmlParseStartTag (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParseEndTag (xmlParserCtxtPtr ctxt); #endif /* LIBXML_SAX1_ENABLED */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParseCDSect (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParseContent (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParseElement (xmlParserCtxtPtr ctxt); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlParseVersionNum (xmlParserCtxtPtr ctxt); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlParseVersionInfo (xmlParserCtxtPtr ctxt); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlParseEncName (xmlParserCtxtPtr ctxt); -XMLPUBFUN const xmlChar * XMLCALL +XMLPUBFUN const xmlChar * XMLCALL xmlParseEncodingDecl (xmlParserCtxtPtr ctxt); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParseSDDecl (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParseXMLDecl (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParseTextDecl (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParseMisc (xmlParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlParseExternalSubset (xmlParserCtxtPtr ctxt, const xmlChar *ExternalID, - const xmlChar *SystemID); + const xmlChar *SystemID); /** * XML_SUBSTITUTE_NONE: * @@ -483,7 +516,7 @@ XMLPUBFUN void XMLCALL * * Both general and parameter entities need to be substituted. */ -#define XML_SUBSTITUTE_BOTH 3 +#define XML_SUBSTITUTE_BOTH 3 XMLPUBFUN xmlChar * XMLCALL xmlStringDecodeEntities (xmlParserCtxtPtr ctxt, @@ -563,21 +596,21 @@ XMLPUBFUN htmlParserCtxtPtr XMLCALL htmlCreateFileParserCtxt(const char *filenam typedef void (*xmlEntityReferenceFunc) (xmlEntityPtr ent, xmlNodePtr firstNode, xmlNodePtr lastNode); - + XMLPUBFUN void XMLCALL xmlSetEntityReferenceFunc (xmlEntityReferenceFunc func); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlParseQuotedString (xmlParserCtxtPtr ctxt); XMLPUBFUN void XMLCALL xmlParseNamespace (xmlParserCtxtPtr ctxt); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlNamespaceParseNSDef (xmlParserCtxtPtr ctxt); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlScanName (xmlParserCtxtPtr ctxt); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlNamespaceParseNCName (xmlParserCtxtPtr ctxt); XMLPUBFUN void XMLCALL xmlParserHandleReference(xmlParserCtxtPtr ctxt); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlNamespaceParseQName (xmlParserCtxtPtr ctxt, xmlChar **prefix); /** @@ -590,7 +623,7 @@ XMLPUBFUN xmlChar * XMLCALL xmlChar end, xmlChar end2, xmlChar end3); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlHandleEntity (xmlParserCtxtPtr ctxt, xmlEntityPtr entity); diff --git a/include/reactos/libs/libxml/schemasInternals.h b/include/reactos/libs/libxml/schemasInternals.h index b68a6e12856..4f0ca9a1fd6 100644 --- a/include/reactos/libs/libxml/schemasInternals.h +++ b/include/reactos/libs/libxml/schemasInternals.h @@ -104,8 +104,8 @@ typedef enum { XML_SCHEMA_TYPE_IDC_UNIQUE, XML_SCHEMA_TYPE_IDC_KEY, XML_SCHEMA_TYPE_IDC_KEYREF, - XML_SCHEMA_TYPE_PARTICLE = 25, - XML_SCHEMA_TYPE_ATTRIBUTE_USE, + XML_SCHEMA_TYPE_PARTICLE = 25, + XML_SCHEMA_TYPE_ATTRIBUTE_USE, XML_SCHEMA_FACET_MININCLUSIVE = 1000, XML_SCHEMA_FACET_MINEXCLUSIVE, XML_SCHEMA_FACET_MAXINCLUSIVE, diff --git a/include/reactos/libs/libxml/schematron.h b/include/reactos/libs/libxml/schematron.h index f442826ccd3..364eaecde6b 100644 --- a/include/reactos/libs/libxml/schematron.h +++ b/include/reactos/libs/libxml/schematron.h @@ -69,17 +69,17 @@ typedef xmlSchematronValidCtxt *xmlSchematronValidCtxtPtr; /* * Interfaces for parsing. */ -XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL +XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL xmlSchematronNewParserCtxt (const char *URL); -XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL +XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL xmlSchematronNewMemParserCtxt(const char *buffer, int size); XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL xmlSchematronNewDocParserCtxt(xmlDocPtr doc); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSchematronFreeParserCtxt (xmlSchematronParserCtxtPtr ctxt); /***** -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSchematronSetParserErrors(xmlSchematronParserCtxtPtr ctxt, xmlSchematronValidityErrorFunc err, xmlSchematronValidityWarningFunc warn, @@ -92,9 +92,9 @@ XMLPUBFUN int XMLCALL XMLPUBFUN int XMLCALL xmlSchematronIsValid (xmlSchematronValidCtxtPtr ctxt); *****/ -XMLPUBFUN xmlSchematronPtr XMLCALL +XMLPUBFUN xmlSchematronPtr XMLCALL xmlSchematronParse (xmlSchematronParserCtxtPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSchematronFree (xmlSchematronPtr schema); /* * Interfaces for validating @@ -105,7 +105,7 @@ XMLPUBFUN void XMLCALL xmlStructuredErrorFunc serror, void *ctx); /****** -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSchematronSetValidErrors (xmlSchematronValidCtxtPtr ctxt, xmlSchematronValidityErrorFunc err, xmlSchematronValidityWarningFunc warn, @@ -125,12 +125,12 @@ XMLPUBFUN int XMLCALL xmlNodePtr elem); *******/ -XMLPUBFUN xmlSchematronValidCtxtPtr XMLCALL +XMLPUBFUN xmlSchematronValidCtxtPtr XMLCALL xmlSchematronNewValidCtxt (xmlSchematronPtr schema, - int options); -XMLPUBFUN void XMLCALL + int options); +XMLPUBFUN void XMLCALL xmlSchematronFreeValidCtxt (xmlSchematronValidCtxtPtr ctxt); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSchematronValidateDoc (xmlSchematronValidCtxtPtr ctxt, xmlDocPtr instance); diff --git a/include/reactos/libs/libxml/tree.h b/include/reactos/libs/libxml/tree.h index b733589bc85..da12daaecea 100644 --- a/include/reactos/libs/libxml/tree.h +++ b/include/reactos/libs/libxml/tree.h @@ -13,6 +13,7 @@ #define __XML_TREE_H__ #include +#include #include #include @@ -74,13 +75,15 @@ typedef enum { XML_BUFFER_ALLOC_DOUBLEIT, /* double each time one need to grow */ XML_BUFFER_ALLOC_EXACT, /* grow only to the minimal size */ XML_BUFFER_ALLOC_IMMUTABLE, /* immutable buffer */ - XML_BUFFER_ALLOC_IO /* special allocation scheme used for I/O */ + XML_BUFFER_ALLOC_IO, /* special allocation scheme used for I/O */ + XML_BUFFER_ALLOC_HYBRID /* exact up to a threshold, and doubleit thereafter */ } xmlBufferAllocationScheme; /** * xmlBuffer: * - * A buffer structure. + * A buffer structure, this old construct is limited to 2GB and + * is being deprecated, use API with xmlBuf instead */ typedef struct _xmlBuffer xmlBuffer; typedef xmlBuffer *xmlBufferPtr; @@ -92,6 +95,41 @@ struct _xmlBuffer { xmlChar *contentIO; /* in IO mode we may have a different base */ }; +/** + * xmlBuf: + * + * A buffer structure, new one, the actual structure internals are not public + */ + +typedef struct _xmlBuf xmlBuf; + +/** + * xmlBufPtr: + * + * A pointer to a buffer structure, the actual structure internals are not + * public + */ + +typedef xmlBuf *xmlBufPtr; + +/* + * A few public routines for xmlBuf. As those are expected to be used + * mostly internally the bulk of the routines are internal in buf.h + */ +XMLPUBFUN xmlChar* XMLCALL xmlBufContent (const xmlBufPtr buf); +XMLPUBFUN xmlChar* XMLCALL xmlBufEnd (const xmlBufPtr buf); +XMLPUBFUN size_t XMLCALL xmlBufUse (xmlBufPtr buf); +XMLPUBFUN size_t XMLCALL xmlBufShrink (xmlBufPtr buf, size_t len); + +/* + * LIBXML2_NEW_BUFFER: + * + * Macro used to express that the API use the new buffers for + * xmlParserInputBuffer and xmlOutputBuffer. The change was + * introduced in 2.9.0. + */ +#define LIBXML2_NEW_BUFFER + /** * XML_XML_NAMESPACE: * @@ -479,7 +517,7 @@ struct _xmlNode { /** * XML_GET_LINE: * - * Macro to extract the line number of an element node. + * Macro to extract the line number of an element node. */ #define XML_GET_LINE(n) \ (xmlGetLineNo(n)) @@ -522,7 +560,7 @@ struct _xmlDoc { /* End of common part */ int compression;/* level of zlib compression */ - int standalone; /* standalone document (no external refs) + int standalone; /* standalone document (no external refs) 1 if standalone="yes" 0 if standalone="no" -1 if there is no XML declaration @@ -553,9 +591,9 @@ typedef xmlDOMWrapCtxt *xmlDOMWrapCtxtPtr; /** * xmlDOMWrapAcquireNsFunction: * @ctxt: a DOM wrapper context - * @node: the context node (element or attribute) + * @node: the context node (element or attribute) * @nsName: the requested namespace name - * @nsPrefix: the requested namespace prefix + * @nsPrefix: the requested namespace prefix * * A function called to acquire namespaces (xmlNs) from the wrapper. * @@ -602,7 +640,7 @@ struct _xmlDOMWrapCtxt { /** * xmlRootNode: * - * Macro for compatibility naming layer with libxml1. Maps + * Macro for compatibility naming layer with libxml1. Maps * to "children". */ #ifndef xmlRootNode @@ -623,429 +661,436 @@ XMLPUBFUN int XMLCALL #endif #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateQName (const xmlChar *value, int space); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateName (const xmlChar *value, int space); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateNMToken (const xmlChar *value, int space); #endif -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlBuildQName (const xmlChar *ncname, const xmlChar *prefix, xmlChar *memory, int len); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlSplitQName2 (const xmlChar *name, xmlChar **prefix); -XMLPUBFUN const xmlChar * XMLCALL +XMLPUBFUN const xmlChar * XMLCALL xmlSplitQName3 (const xmlChar *name, int *len); /* - * Handling Buffers. + * Handling Buffers, the old ones see @xmlBuf for the new ones. */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSetBufferAllocationScheme(xmlBufferAllocationScheme scheme); -XMLPUBFUN xmlBufferAllocationScheme XMLCALL +XMLPUBFUN xmlBufferAllocationScheme XMLCALL xmlGetBufferAllocationScheme(void); -XMLPUBFUN xmlBufferPtr XMLCALL +XMLPUBFUN xmlBufferPtr XMLCALL xmlBufferCreate (void); -XMLPUBFUN xmlBufferPtr XMLCALL +XMLPUBFUN xmlBufferPtr XMLCALL xmlBufferCreateSize (size_t size); -XMLPUBFUN xmlBufferPtr XMLCALL +XMLPUBFUN xmlBufferPtr XMLCALL xmlBufferCreateStatic (void *mem, size_t size); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlBufferResize (xmlBufferPtr buf, unsigned int size); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlBufferFree (xmlBufferPtr buf); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlBufferDump (FILE *file, xmlBufferPtr buf); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlBufferAdd (xmlBufferPtr buf, const xmlChar *str, int len); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlBufferAddHead (xmlBufferPtr buf, const xmlChar *str, int len); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlBufferCat (xmlBufferPtr buf, const xmlChar *str); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlBufferCCat (xmlBufferPtr buf, const char *str); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlBufferShrink (xmlBufferPtr buf, unsigned int len); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlBufferGrow (xmlBufferPtr buf, unsigned int len); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlBufferEmpty (xmlBufferPtr buf); -XMLPUBFUN const xmlChar* XMLCALL +XMLPUBFUN const xmlChar* XMLCALL xmlBufferContent (const xmlBufferPtr buf); -XMLPUBFUN void XMLCALL +XMLPUBFUN xmlChar* XMLCALL + xmlBufferDetach (xmlBufferPtr buf); +XMLPUBFUN void XMLCALL xmlBufferSetAllocationScheme(xmlBufferPtr buf, xmlBufferAllocationScheme scheme); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlBufferLength (const xmlBufferPtr buf); /* * Creating/freeing new structures. */ -XMLPUBFUN xmlDtdPtr XMLCALL +XMLPUBFUN xmlDtdPtr XMLCALL xmlCreateIntSubset (xmlDocPtr doc, const xmlChar *name, const xmlChar *ExternalID, const xmlChar *SystemID); -XMLPUBFUN xmlDtdPtr XMLCALL +XMLPUBFUN xmlDtdPtr XMLCALL xmlNewDtd (xmlDocPtr doc, const xmlChar *name, const xmlChar *ExternalID, const xmlChar *SystemID); -XMLPUBFUN xmlDtdPtr XMLCALL +XMLPUBFUN xmlDtdPtr XMLCALL xmlGetIntSubset (xmlDocPtr doc); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeDtd (xmlDtdPtr cur); #ifdef LIBXML_LEGACY_ENABLED -XMLPUBFUN xmlNsPtr XMLCALL +XMLPUBFUN xmlNsPtr XMLCALL xmlNewGlobalNs (xmlDocPtr doc, const xmlChar *href, const xmlChar *prefix); #endif /* LIBXML_LEGACY_ENABLED */ -XMLPUBFUN xmlNsPtr XMLCALL +XMLPUBFUN xmlNsPtr XMLCALL xmlNewNs (xmlNodePtr node, const xmlChar *href, const xmlChar *prefix); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeNs (xmlNsPtr cur); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeNsList (xmlNsPtr cur); -XMLPUBFUN xmlDocPtr XMLCALL +XMLPUBFUN xmlDocPtr XMLCALL xmlNewDoc (const xmlChar *version); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeDoc (xmlDocPtr cur); -XMLPUBFUN xmlAttrPtr XMLCALL +XMLPUBFUN xmlAttrPtr XMLCALL xmlNewDocProp (xmlDocPtr doc, const xmlChar *name, const xmlChar *value); #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \ defined(LIBXML_SCHEMAS_ENABLED) -XMLPUBFUN xmlAttrPtr XMLCALL +XMLPUBFUN xmlAttrPtr XMLCALL xmlNewProp (xmlNodePtr node, const xmlChar *name, const xmlChar *value); #endif -XMLPUBFUN xmlAttrPtr XMLCALL +XMLPUBFUN xmlAttrPtr XMLCALL xmlNewNsProp (xmlNodePtr node, xmlNsPtr ns, const xmlChar *name, const xmlChar *value); -XMLPUBFUN xmlAttrPtr XMLCALL +XMLPUBFUN xmlAttrPtr XMLCALL xmlNewNsPropEatName (xmlNodePtr node, xmlNsPtr ns, xmlChar *name, const xmlChar *value); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreePropList (xmlAttrPtr cur); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeProp (xmlAttrPtr cur); -XMLPUBFUN xmlAttrPtr XMLCALL +XMLPUBFUN xmlAttrPtr XMLCALL xmlCopyProp (xmlNodePtr target, xmlAttrPtr cur); -XMLPUBFUN xmlAttrPtr XMLCALL +XMLPUBFUN xmlAttrPtr XMLCALL xmlCopyPropList (xmlNodePtr target, xmlAttrPtr cur); #ifdef LIBXML_TREE_ENABLED -XMLPUBFUN xmlDtdPtr XMLCALL +XMLPUBFUN xmlDtdPtr XMLCALL xmlCopyDtd (xmlDtdPtr dtd); #endif /* LIBXML_TREE_ENABLED */ #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) -XMLPUBFUN xmlDocPtr XMLCALL +XMLPUBFUN xmlDocPtr XMLCALL xmlCopyDoc (xmlDocPtr doc, int recursive); #endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */ /* * Creating new nodes. */ -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewDocNode (xmlDocPtr doc, xmlNsPtr ns, const xmlChar *name, const xmlChar *content); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewDocNodeEatName (xmlDocPtr doc, xmlNsPtr ns, xmlChar *name, const xmlChar *content); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewNode (xmlNsPtr ns, const xmlChar *name); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewNodeEatName (xmlNsPtr ns, xmlChar *name); #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewChild (xmlNodePtr parent, xmlNsPtr ns, const xmlChar *name, const xmlChar *content); #endif -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewDocText (xmlDocPtr doc, const xmlChar *content); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewText (const xmlChar *content); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewDocPI (xmlDocPtr doc, const xmlChar *name, const xmlChar *content); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewPI (const xmlChar *name, const xmlChar *content); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewDocTextLen (xmlDocPtr doc, const xmlChar *content, int len); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewTextLen (const xmlChar *content, int len); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewDocComment (xmlDocPtr doc, const xmlChar *content); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewComment (const xmlChar *content); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewCDataBlock (xmlDocPtr doc, const xmlChar *content, int len); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewCharRef (xmlDocPtr doc, const xmlChar *name); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewReference (xmlDocPtr doc, const xmlChar *name); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlCopyNode (const xmlNodePtr node, int recursive); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlDocCopyNode (const xmlNodePtr node, xmlDocPtr doc, int recursive); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlDocCopyNodeList (xmlDocPtr doc, const xmlNodePtr node); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlCopyNodeList (const xmlNodePtr node); #ifdef LIBXML_TREE_ENABLED -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewTextChild (xmlNodePtr parent, xmlNsPtr ns, const xmlChar *name, const xmlChar *content); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewDocRawNode (xmlDocPtr doc, xmlNsPtr ns, const xmlChar *name, const xmlChar *content); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlNewDocFragment (xmlDocPtr doc); #endif /* LIBXML_TREE_ENABLED */ /* * Navigating. */ -XMLPUBFUN long XMLCALL +XMLPUBFUN long XMLCALL xmlGetLineNo (xmlNodePtr node); #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlGetNodePath (xmlNodePtr node); #endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) */ -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlDocGetRootElement (xmlDocPtr doc); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlGetLastChild (xmlNodePtr parent); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlNodeIsText (xmlNodePtr node); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlIsBlankNode (xmlNodePtr node); /* * Changing the structure. */ #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlDocSetRootElement (xmlDocPtr doc, xmlNodePtr root); #endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */ #ifdef LIBXML_TREE_ENABLED -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlNodeSetName (xmlNodePtr cur, const xmlChar *name); #endif /* LIBXML_TREE_ENABLED */ -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlAddChild (xmlNodePtr parent, xmlNodePtr cur); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlAddChildList (xmlNodePtr parent, xmlNodePtr cur); #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlReplaceNode (xmlNodePtr old, xmlNodePtr cur); #endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */ #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \ defined(LIBXML_SCHEMAS_ENABLED) -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlAddPrevSibling (xmlNodePtr cur, xmlNodePtr elem); #endif /* LIBXML_TREE_ENABLED || LIBXML_HTML_ENABLED || LIBXML_SCHEMAS_ENABLED */ -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlAddSibling (xmlNodePtr cur, xmlNodePtr elem); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlAddNextSibling (xmlNodePtr cur, xmlNodePtr elem); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlUnlinkNode (xmlNodePtr cur); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlTextMerge (xmlNodePtr first, xmlNodePtr second); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlTextConcat (xmlNodePtr node, const xmlChar *content, int len); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeNodeList (xmlNodePtr cur); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeNode (xmlNodePtr cur); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSetTreeDoc (xmlNodePtr tree, xmlDocPtr doc); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSetListDoc (xmlNodePtr list, xmlDocPtr doc); /* * Namespaces. */ -XMLPUBFUN xmlNsPtr XMLCALL +XMLPUBFUN xmlNsPtr XMLCALL xmlSearchNs (xmlDocPtr doc, xmlNodePtr node, const xmlChar *nameSpace); -XMLPUBFUN xmlNsPtr XMLCALL +XMLPUBFUN xmlNsPtr XMLCALL xmlSearchNsByHref (xmlDocPtr doc, xmlNodePtr node, const xmlChar *href); #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) -XMLPUBFUN xmlNsPtr * XMLCALL +XMLPUBFUN xmlNsPtr * XMLCALL xmlGetNsList (xmlDocPtr doc, xmlNodePtr node); #endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSetNs (xmlNodePtr node, xmlNsPtr ns); -XMLPUBFUN xmlNsPtr XMLCALL +XMLPUBFUN xmlNsPtr XMLCALL xmlCopyNamespace (xmlNsPtr cur); -XMLPUBFUN xmlNsPtr XMLCALL +XMLPUBFUN xmlNsPtr XMLCALL xmlCopyNamespaceList (xmlNsPtr cur); /* * Changing the content. */ #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) -XMLPUBFUN xmlAttrPtr XMLCALL +XMLPUBFUN xmlAttrPtr XMLCALL xmlSetProp (xmlNodePtr node, const xmlChar *name, const xmlChar *value); -XMLPUBFUN xmlAttrPtr XMLCALL +XMLPUBFUN xmlAttrPtr XMLCALL xmlSetNsProp (xmlNodePtr node, xmlNsPtr ns, const xmlChar *name, const xmlChar *value); #endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) */ -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlGetNoNsProp (xmlNodePtr node, const xmlChar *name); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlGetProp (xmlNodePtr node, const xmlChar *name); -XMLPUBFUN xmlAttrPtr XMLCALL +XMLPUBFUN xmlAttrPtr XMLCALL xmlHasProp (xmlNodePtr node, const xmlChar *name); -XMLPUBFUN xmlAttrPtr XMLCALL +XMLPUBFUN xmlAttrPtr XMLCALL xmlHasNsProp (xmlNodePtr node, const xmlChar *name, const xmlChar *nameSpace); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlGetNsProp (xmlNodePtr node, const xmlChar *name, const xmlChar *nameSpace); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlStringGetNodeList (xmlDocPtr doc, const xmlChar *value); -XMLPUBFUN xmlNodePtr XMLCALL +XMLPUBFUN xmlNodePtr XMLCALL xmlStringLenGetNodeList (xmlDocPtr doc, const xmlChar *value, int len); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlNodeListGetString (xmlDocPtr doc, xmlNodePtr list, int inLine); #ifdef LIBXML_TREE_ENABLED -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlNodeListGetRawString (xmlDocPtr doc, xmlNodePtr list, int inLine); #endif /* LIBXML_TREE_ENABLED */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlNodeSetContent (xmlNodePtr cur, const xmlChar *content); #ifdef LIBXML_TREE_ENABLED -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlNodeSetContentLen (xmlNodePtr cur, const xmlChar *content, int len); #endif /* LIBXML_TREE_ENABLED */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlNodeAddContent (xmlNodePtr cur, const xmlChar *content); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlNodeAddContentLen (xmlNodePtr cur, const xmlChar *content, int len); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlNodeGetContent (xmlNodePtr cur); + XMLPUBFUN int XMLCALL xmlNodeBufGetContent (xmlBufferPtr buffer, xmlNodePtr cur); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN int XMLCALL + xmlBufGetNodeContent (xmlBufPtr buf, + xmlNodePtr cur); + +XMLPUBFUN xmlChar * XMLCALL xmlNodeGetLang (xmlNodePtr cur); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlNodeGetSpacePreserve (xmlNodePtr cur); #ifdef LIBXML_TREE_ENABLED -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlNodeSetLang (xmlNodePtr cur, const xmlChar *lang); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlNodeSetSpacePreserve (xmlNodePtr cur, int val); #endif /* LIBXML_TREE_ENABLED */ -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlNodeGetBase (xmlDocPtr doc, xmlNodePtr cur); #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlNodeSetBase (xmlNodePtr cur, const xmlChar *uri); #endif @@ -1053,14 +1098,14 @@ XMLPUBFUN void XMLCALL /* * Removing content. */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlRemoveProp (xmlAttrPtr cur); #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlUnsetNsProp (xmlNodePtr node, xmlNsPtr ns, const xmlChar *name); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlUnsetProp (xmlNodePtr node, const xmlChar *name); #endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */ @@ -1068,13 +1113,13 @@ XMLPUBFUN int XMLCALL /* * Internal, don't use. */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlBufferWriteCHAR (xmlBufferPtr buf, const xmlChar *string); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlBufferWriteChar (xmlBufferPtr buf, const char *string); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlBufferWriteQuotedString(xmlBufferPtr buf, const xmlChar *string); @@ -1089,7 +1134,7 @@ XMLPUBFUN void xmlAttrSerializeTxtContent(xmlBufferPtr buf, /* * Namespace handling. */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlReconciliateNs (xmlDocPtr doc, xmlNodePtr tree); #endif @@ -1098,61 +1143,67 @@ XMLPUBFUN int XMLCALL /* * Saving. */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDocDumpFormatMemory (xmlDocPtr cur, xmlChar **mem, int *size, int format); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDocDumpMemory (xmlDocPtr cur, xmlChar **mem, int *size); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDocDumpMemoryEnc (xmlDocPtr out_doc, xmlChar **doc_txt_ptr, int * doc_txt_len, const char *txt_encoding); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc, xmlChar **doc_txt_ptr, int * doc_txt_len, const char *txt_encoding, int format); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlDocFormatDump (FILE *f, xmlDocPtr cur, int format); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlDocDump (FILE *f, xmlDocPtr cur); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlElemDump (FILE *f, xmlDocPtr doc, xmlNodePtr cur); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSaveFile (const char *filename, xmlDocPtr cur); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSaveFormatFile (const char *filename, xmlDocPtr cur, int format); -XMLPUBFUN int XMLCALL +XMLPUBFUN size_t XMLCALL + xmlBufNodeDump (xmlBufPtr buf, + xmlDocPtr doc, + xmlNodePtr cur, + int level, + int format); +XMLPUBFUN int XMLCALL xmlNodeDump (xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, int level, int format); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSaveFileTo (xmlOutputBufferPtr buf, xmlDocPtr cur, const char *encoding); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSaveFormatFileTo (xmlOutputBufferPtr buf, xmlDocPtr cur, const char *encoding, int format); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlNodeDumpOutput (xmlOutputBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, @@ -1160,13 +1211,13 @@ XMLPUBFUN void XMLCALL int format, const char *encoding); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSaveFormatFileEnc (const char *filename, xmlDocPtr cur, const char *encoding, int format); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSaveFileEnc (const char *filename, xmlDocPtr cur, const char *encoding); @@ -1175,21 +1226,21 @@ XMLPUBFUN int XMLCALL /* * XHTML */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlIsXHTML (const xmlChar *systemID, const xmlChar *publicID); /* * Compression. */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlGetDocCompressMode (xmlDocPtr doc); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSetDocCompressMode (xmlDocPtr doc, int mode); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlGetCompressMode (void); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSetCompressMode (int mode); /* @@ -1207,7 +1258,7 @@ XMLPUBFUN int XMLCALL xmlDOMWrapAdoptNode (xmlDOMWrapCtxtPtr ctxt, xmlDocPtr sourceDoc, xmlNodePtr node, - xmlDocPtr destDoc, + xmlDocPtr destDoc, xmlNodePtr destParent, int options); XMLPUBFUN int XMLCALL diff --git a/include/reactos/libs/libxml/valid.h b/include/reactos/libs/libxml/valid.h index a2307f1212c..2bc7b380c1e 100644 --- a/include/reactos/libs/libxml/valid.h +++ b/include/reactos/libs/libxml/valid.h @@ -150,55 +150,55 @@ typedef struct _xmlHashTable xmlRefTable; typedef xmlRefTable *xmlRefTablePtr; /* Notation */ -XMLPUBFUN xmlNotationPtr XMLCALL +XMLPUBFUN xmlNotationPtr XMLCALL xmlAddNotationDecl (xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, const xmlChar *name, const xmlChar *PublicID, const xmlChar *SystemID); #ifdef LIBXML_TREE_ENABLED -XMLPUBFUN xmlNotationTablePtr XMLCALL +XMLPUBFUN xmlNotationTablePtr XMLCALL xmlCopyNotationTable (xmlNotationTablePtr table); #endif /* LIBXML_TREE_ENABLED */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeNotationTable (xmlNotationTablePtr table); #ifdef LIBXML_OUTPUT_ENABLED -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDumpNotationDecl (xmlBufferPtr buf, xmlNotationPtr nota); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDumpNotationTable (xmlBufferPtr buf, xmlNotationTablePtr table); #endif /* LIBXML_OUTPUT_ENABLED */ /* Element Content */ /* the non Doc version are being deprecated */ -XMLPUBFUN xmlElementContentPtr XMLCALL +XMLPUBFUN xmlElementContentPtr XMLCALL xmlNewElementContent (const xmlChar *name, xmlElementContentType type); -XMLPUBFUN xmlElementContentPtr XMLCALL +XMLPUBFUN xmlElementContentPtr XMLCALL xmlCopyElementContent (xmlElementContentPtr content); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeElementContent (xmlElementContentPtr cur); /* the new versions with doc argument */ -XMLPUBFUN xmlElementContentPtr XMLCALL +XMLPUBFUN xmlElementContentPtr XMLCALL xmlNewDocElementContent (xmlDocPtr doc, const xmlChar *name, xmlElementContentType type); -XMLPUBFUN xmlElementContentPtr XMLCALL +XMLPUBFUN xmlElementContentPtr XMLCALL xmlCopyDocElementContent(xmlDocPtr doc, xmlElementContentPtr content); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSnprintfElementContent(char *buf, int size, xmlElementContentPtr content, int englob); #ifdef LIBXML_OUTPUT_ENABLED /* DEPRECATED */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSprintfElementContent(char *buf, xmlElementContentPtr content, int englob); @@ -206,39 +206,39 @@ XMLPUBFUN void XMLCALL /* DEPRECATED */ /* Element */ -XMLPUBFUN xmlElementPtr XMLCALL +XMLPUBFUN xmlElementPtr XMLCALL xmlAddElementDecl (xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, const xmlChar *name, xmlElementTypeVal type, xmlElementContentPtr content); #ifdef LIBXML_TREE_ENABLED -XMLPUBFUN xmlElementTablePtr XMLCALL +XMLPUBFUN xmlElementTablePtr XMLCALL xmlCopyElementTable (xmlElementTablePtr table); #endif /* LIBXML_TREE_ENABLED */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeElementTable (xmlElementTablePtr table); #ifdef LIBXML_OUTPUT_ENABLED -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDumpElementTable (xmlBufferPtr buf, xmlElementTablePtr table); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDumpElementDecl (xmlBufferPtr buf, xmlElementPtr elem); #endif /* LIBXML_OUTPUT_ENABLED */ /* Enumeration */ -XMLPUBFUN xmlEnumerationPtr XMLCALL +XMLPUBFUN xmlEnumerationPtr XMLCALL xmlCreateEnumeration (const xmlChar *name); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeEnumeration (xmlEnumerationPtr cur); #ifdef LIBXML_TREE_ENABLED -XMLPUBFUN xmlEnumerationPtr XMLCALL +XMLPUBFUN xmlEnumerationPtr XMLCALL xmlCopyEnumeration (xmlEnumerationPtr cur); #endif /* LIBXML_TREE_ENABLED */ /* Attribute */ -XMLPUBFUN xmlAttributePtr XMLCALL +XMLPUBFUN xmlAttributePtr XMLCALL xmlAddAttributeDecl (xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, const xmlChar *elem, @@ -249,55 +249,55 @@ XMLPUBFUN xmlAttributePtr XMLCALL const xmlChar *defaultValue, xmlEnumerationPtr tree); #ifdef LIBXML_TREE_ENABLED -XMLPUBFUN xmlAttributeTablePtr XMLCALL +XMLPUBFUN xmlAttributeTablePtr XMLCALL xmlCopyAttributeTable (xmlAttributeTablePtr table); #endif /* LIBXML_TREE_ENABLED */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeAttributeTable (xmlAttributeTablePtr table); #ifdef LIBXML_OUTPUT_ENABLED -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDumpAttributeTable (xmlBufferPtr buf, xmlAttributeTablePtr table); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlDumpAttributeDecl (xmlBufferPtr buf, xmlAttributePtr attr); #endif /* LIBXML_OUTPUT_ENABLED */ /* IDs */ -XMLPUBFUN xmlIDPtr XMLCALL +XMLPUBFUN xmlIDPtr XMLCALL xmlAddID (xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value, xmlAttrPtr attr); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeIDTable (xmlIDTablePtr table); -XMLPUBFUN xmlAttrPtr XMLCALL +XMLPUBFUN xmlAttrPtr XMLCALL xmlGetID (xmlDocPtr doc, const xmlChar *ID); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlIsID (xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr); -XMLPUBFUN int XMLCALL - xmlRemoveID (xmlDocPtr doc, +XMLPUBFUN int XMLCALL + xmlRemoveID (xmlDocPtr doc, xmlAttrPtr attr); /* IDREFs */ -XMLPUBFUN xmlRefPtr XMLCALL +XMLPUBFUN xmlRefPtr XMLCALL xmlAddRef (xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value, xmlAttrPtr attr); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeRefTable (xmlRefTablePtr table); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlIsRef (xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr); -XMLPUBFUN int XMLCALL - xmlRemoveRef (xmlDocPtr doc, +XMLPUBFUN int XMLCALL + xmlRemoveRef (xmlDocPtr doc, xmlAttrPtr attr); -XMLPUBFUN xmlListPtr XMLCALL +XMLPUBFUN xmlListPtr XMLCALL xmlGetRefs (xmlDocPtr doc, const xmlChar *ID); @@ -306,146 +306,146 @@ XMLPUBFUN xmlListPtr XMLCALL */ #ifdef LIBXML_VALID_ENABLED /* Allocate/Release Validation Contexts */ -XMLPUBFUN xmlValidCtxtPtr XMLCALL +XMLPUBFUN xmlValidCtxtPtr XMLCALL xmlNewValidCtxt(void); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeValidCtxt(xmlValidCtxtPtr); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateRoot (xmlValidCtxtPtr ctxt, xmlDocPtr doc); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateElementDecl (xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlElementPtr elem); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlValidNormalizeAttributeValue(xmlDocPtr doc, xmlNodePtr elem, const xmlChar *name, const xmlChar *value); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem, const xmlChar *name, const xmlChar *value); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlAttributePtr attr); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateAttributeValue(xmlAttributeType type, const xmlChar *value); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateNotationDecl (xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNotationPtr nota); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateDtd (xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlDtdPtr dtd); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateDtdFinal (xmlValidCtxtPtr ctxt, xmlDocPtr doc); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateDocument (xmlValidCtxtPtr ctxt, xmlDocPtr doc); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateElement (xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateOneElement (xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateOneAttribute (xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr, const xmlChar *value); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateOneNamespace (xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem, const xmlChar *prefix, xmlNsPtr ns, const xmlChar *value); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt, xmlDocPtr doc); #endif /* LIBXML_VALID_ENABLED */ #if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateNotationUse (xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *notationName); #endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlIsMixedElement (xmlDocPtr doc, const xmlChar *name); -XMLPUBFUN xmlAttributePtr XMLCALL +XMLPUBFUN xmlAttributePtr XMLCALL xmlGetDtdAttrDesc (xmlDtdPtr dtd, const xmlChar *elem, const xmlChar *name); -XMLPUBFUN xmlAttributePtr XMLCALL +XMLPUBFUN xmlAttributePtr XMLCALL xmlGetDtdQAttrDesc (xmlDtdPtr dtd, const xmlChar *elem, const xmlChar *name, const xmlChar *prefix); -XMLPUBFUN xmlNotationPtr XMLCALL +XMLPUBFUN xmlNotationPtr XMLCALL xmlGetDtdNotationDesc (xmlDtdPtr dtd, const xmlChar *name); -XMLPUBFUN xmlElementPtr XMLCALL +XMLPUBFUN xmlElementPtr XMLCALL xmlGetDtdQElementDesc (xmlDtdPtr dtd, const xmlChar *name, const xmlChar *prefix); -XMLPUBFUN xmlElementPtr XMLCALL +XMLPUBFUN xmlElementPtr XMLCALL xmlGetDtdElementDesc (xmlDtdPtr dtd, const xmlChar *name); #ifdef LIBXML_VALID_ENABLED -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidGetPotentialChildren(xmlElementContent *ctree, const xmlChar **names, int *len, int max); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidGetValidElements(xmlNode *prev, xmlNode *next, const xmlChar **names, int max); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateNameValue (const xmlChar *value); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateNamesValue (const xmlChar *value); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateNmtokenValue (const xmlChar *value); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidateNmtokensValue(const xmlChar *value); #ifdef LIBXML_REGEXP_ENABLED /* * Validation based on the regexp support */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidBuildContentModel(xmlValidCtxtPtr ctxt, xmlElementPtr elem); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidatePushElement (xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem, const xmlChar *qname); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidatePushCData (xmlValidCtxtPtr ctxt, const xmlChar *data, int len); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlValidatePopElement (xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem, diff --git a/include/reactos/libs/libxml/xlink.h b/include/reactos/libs/libxml/xlink.h index 083c7eda406..a209a9976d8 100644 --- a/include/reactos/libs/libxml/xlink.h +++ b/include/reactos/libs/libxml/xlink.h @@ -57,7 +57,7 @@ typedef enum { * xlinkNodeDetectFunc: * @ctx: user data pointer * @node: the node to check - * + * * This is the prototype for the link detection routine. * It calls the default link detection callbacks upon link detection. */ @@ -157,26 +157,26 @@ struct _xlinkHandler { /* * The default detection routine, can be overridden, they call the default - * detection callbacks. + * detection callbacks. */ -XMLPUBFUN xlinkNodeDetectFunc XMLCALL +XMLPUBFUN xlinkNodeDetectFunc XMLCALL xlinkGetDefaultDetect (void); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xlinkSetDefaultDetect (xlinkNodeDetectFunc func); /* * Routines to set/get the default handlers. */ -XMLPUBFUN xlinkHandlerPtr XMLCALL +XMLPUBFUN xlinkHandlerPtr XMLCALL xlinkGetDefaultHandler (void); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xlinkSetDefaultHandler (xlinkHandlerPtr handler); /* * Link detection module itself. */ -XMLPUBFUN xlinkType XMLCALL +XMLPUBFUN xlinkType XMLCALL xlinkIsLink (xmlDocPtr doc, xmlNodePtr node); diff --git a/include/reactos/libs/libxml/xmlIO.h b/include/reactos/libs/libxml/xmlIO.h index eea9ed6c035..6c241a8dde9 100644 --- a/include/reactos/libs/libxml/xmlIO.h +++ b/include/reactos/libs/libxml/xmlIO.h @@ -26,7 +26,7 @@ extern "C" { * xmlInputMatchCallback: * @filename: the filename or URI * - * Callback used in the I/O Input API to detect if the current handler + * Callback used in the I/O Input API to detect if the current handler * can provide input fonctionnalities for this resource. * * Returns 1 if yes and 0 if another Input module should be used @@ -72,7 +72,7 @@ typedef int (XMLCALL *xmlInputCloseCallback) (void * context); * xmlOutputMatchCallback: * @filename: the filename or URI * - * Callback used in the I/O Output API to detect if the current handler + * Callback used in the I/O Output API to detect if the current handler * can provide output fonctionnalities for this resource. * * Returns 1 if yes and 0 if another Output module should be used @@ -126,11 +126,11 @@ struct _xmlParserInputBuffer { void* context; xmlInputReadCallback readcallback; xmlInputCloseCallback closecallback; - + xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */ - - xmlBufferPtr buffer; /* Local buffer encoded in UTF-8 */ - xmlBufferPtr raw; /* if encoder != NULL buffer for raw input */ + + xmlBufPtr buffer; /* Local buffer encoded in UTF-8 */ + xmlBufPtr raw; /* if encoder != NULL buffer for raw input */ int compressed; /* -1=unknown, 0=not compressed, 1=compressed */ int error; unsigned long rawconsumed;/* amount consumed from raw */ @@ -142,11 +142,11 @@ struct _xmlOutputBuffer { void* context; xmlOutputWriteCallback writecallback; xmlOutputCloseCallback closecallback; - + xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */ - - xmlBufferPtr buffer; /* Local buffer encoded in UTF-8 or ISOLatin */ - xmlBufferPtr conv; /* if encoder != NULL buffer for output */ + + xmlBufPtr buffer; /* Local buffer encoded in UTF-8 or ISOLatin */ + xmlBufPtr conv; /* if encoder != NULL buffer for output */ int written; /* total number of byte written */ int error; }; @@ -155,13 +155,13 @@ struct _xmlOutputBuffer { /* * Interfaces for input */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlCleanupInputCallbacks (void); XMLPUBFUN int XMLCALL xmlPopInputCallbacks (void); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlRegisterDefaultInputCallbacks (void); XMLPUBFUN xmlParserInputBufferPtr XMLCALL xmlAllocParserInputBuffer (xmlCharEncoding enc); @@ -186,22 +186,22 @@ XMLPUBFUN xmlParserInputBufferPtr XMLCALL xmlInputCloseCallback ioclose, void *ioctx, xmlCharEncoding enc); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParserInputBufferRead (xmlParserInputBufferPtr in, int len); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParserInputBufferGrow (xmlParserInputBufferPtr in, int len); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlParserInputBufferPush (xmlParserInputBufferPtr in, int len, const char *buf); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeParserInputBuffer (xmlParserInputBufferPtr in); -XMLPUBFUN char * XMLCALL +XMLPUBFUN char * XMLCALL xmlParserGetDirectory (const char *filename); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlRegisterInputCallbacks (xmlInputMatchCallback matchFunc, xmlInputOpenCallback openFunc, xmlInputReadCallback readFunc, @@ -215,9 +215,9 @@ xmlParserInputBufferPtr /* * Interfaces for output */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlCleanupOutputCallbacks (void); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlRegisterDefaultOutputCallbacks(void); XMLPUBFUN xmlOutputBufferPtr XMLCALL xmlAllocOutputBuffer (xmlCharEncodingHandlerPtr encoder); @@ -245,24 +245,30 @@ XMLPUBFUN xmlOutputBufferPtr XMLCALL void *ioctx, xmlCharEncodingHandlerPtr encoder); -XMLPUBFUN int XMLCALL +/* Couple of APIs to get the output without digging into the buffers */ +XMLPUBFUN const xmlChar * XMLCALL + xmlOutputBufferGetContent (xmlOutputBufferPtr out); +XMLPUBFUN size_t XMLCALL + xmlOutputBufferGetSize (xmlOutputBufferPtr out); + +XMLPUBFUN int XMLCALL xmlOutputBufferWrite (xmlOutputBufferPtr out, int len, const char *buf); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlOutputBufferWriteString (xmlOutputBufferPtr out, const char *str); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlOutputBufferWriteEscape (xmlOutputBufferPtr out, const xmlChar *str, xmlCharEncodingOutputFunc escaping); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlOutputBufferFlush (xmlOutputBufferPtr out); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlOutputBufferClose (xmlOutputBufferPtr out); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlRegisterOutputCallbacks (xmlOutputMatchCallback matchFunc, xmlOutputOpenCallback openFunc, xmlOutputWriteCallback writeFunc, @@ -275,10 +281,10 @@ xmlOutputBufferPtr #ifdef LIBXML_HTTP_ENABLED /* This function only exists if HTTP support built into the library */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlRegisterHTTPPostCallbacks (void ); #endif /* LIBXML_HTTP_ENABLED */ - + #endif /* LIBXML_OUTPUT_ENABLED */ XMLPUBFUN xmlParserInputPtr XMLCALL @@ -288,69 +294,69 @@ XMLPUBFUN xmlParserInputPtr XMLCALL /* * A predefined entity loader disabling network accesses */ -XMLPUBFUN xmlParserInputPtr XMLCALL +XMLPUBFUN xmlParserInputPtr XMLCALL xmlNoNetExternalEntityLoader (const char *URL, const char *ID, xmlParserCtxtPtr ctxt); -/* - * xmlNormalizeWindowsPath is obsolete, don't use it. +/* + * xmlNormalizeWindowsPath is obsolete, don't use it. * Check xmlCanonicPath in uri.h for a better alternative. */ -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlNormalizeWindowsPath (const xmlChar *path); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlCheckFilename (const char *path); /** - * Default 'file://' protocol callbacks + * Default 'file://' protocol callbacks */ -XMLPUBFUN int XMLCALL - xmlFileMatch (const char *filename); -XMLPUBFUN void * XMLCALL - xmlFileOpen (const char *filename); -XMLPUBFUN int XMLCALL - xmlFileRead (void * context, - char * buffer, +XMLPUBFUN int XMLCALL + xmlFileMatch (const char *filename); +XMLPUBFUN void * XMLCALL + xmlFileOpen (const char *filename); +XMLPUBFUN int XMLCALL + xmlFileRead (void * context, + char * buffer, int len); -XMLPUBFUN int XMLCALL - xmlFileClose (void * context); +XMLPUBFUN int XMLCALL + xmlFileClose (void * context); /** - * Default 'http://' protocol callbacks + * Default 'http://' protocol callbacks */ #ifdef LIBXML_HTTP_ENABLED -XMLPUBFUN int XMLCALL - xmlIOHTTPMatch (const char *filename); -XMLPUBFUN void * XMLCALL - xmlIOHTTPOpen (const char *filename); +XMLPUBFUN int XMLCALL + xmlIOHTTPMatch (const char *filename); +XMLPUBFUN void * XMLCALL + xmlIOHTTPOpen (const char *filename); #ifdef LIBXML_OUTPUT_ENABLED -XMLPUBFUN void * XMLCALL +XMLPUBFUN void * XMLCALL xmlIOHTTPOpenW (const char * post_uri, int compression ); #endif /* LIBXML_OUTPUT_ENABLED */ -XMLPUBFUN int XMLCALL - xmlIOHTTPRead (void * context, - char * buffer, +XMLPUBFUN int XMLCALL + xmlIOHTTPRead (void * context, + char * buffer, int len); -XMLPUBFUN int XMLCALL - xmlIOHTTPClose (void * context); +XMLPUBFUN int XMLCALL + xmlIOHTTPClose (void * context); #endif /* LIBXML_HTTP_ENABLED */ /** - * Default 'ftp://' protocol callbacks + * Default 'ftp://' protocol callbacks */ -#ifdef LIBXML_FTP_ENABLED -XMLPUBFUN int XMLCALL - xmlIOFTPMatch (const char *filename); -XMLPUBFUN void * XMLCALL - xmlIOFTPOpen (const char *filename); -XMLPUBFUN int XMLCALL - xmlIOFTPRead (void * context, - char * buffer, +#ifdef LIBXML_FTP_ENABLED +XMLPUBFUN int XMLCALL + xmlIOFTPMatch (const char *filename); +XMLPUBFUN void * XMLCALL + xmlIOFTPOpen (const char *filename); +XMLPUBFUN int XMLCALL + xmlIOFTPRead (void * context, + char * buffer, int len); -XMLPUBFUN int XMLCALL - xmlIOFTPClose (void * context); +XMLPUBFUN int XMLCALL + xmlIOFTPClose (void * context); #endif /* LIBXML_FTP_ENABLED */ #ifdef __cplusplus diff --git a/include/reactos/libs/libxml/xmlautomata.h b/include/reactos/libs/libxml/xmlautomata.h index f98b55e2b8f..bf1b131c653 100644 --- a/include/reactos/libs/libxml/xmlautomata.h +++ b/include/reactos/libs/libxml/xmlautomata.h @@ -40,25 +40,25 @@ typedef xmlAutomataState *xmlAutomataStatePtr; /* * Building API */ -XMLPUBFUN xmlAutomataPtr XMLCALL +XMLPUBFUN xmlAutomataPtr XMLCALL xmlNewAutomata (void); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlFreeAutomata (xmlAutomataPtr am); -XMLPUBFUN xmlAutomataStatePtr XMLCALL +XMLPUBFUN xmlAutomataStatePtr XMLCALL xmlAutomataGetInitState (xmlAutomataPtr am); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlAutomataSetFinalState (xmlAutomataPtr am, xmlAutomataStatePtr state); -XMLPUBFUN xmlAutomataStatePtr XMLCALL +XMLPUBFUN xmlAutomataStatePtr XMLCALL xmlAutomataNewState (xmlAutomataPtr am); -XMLPUBFUN xmlAutomataStatePtr XMLCALL +XMLPUBFUN xmlAutomataStatePtr XMLCALL xmlAutomataNewTransition (xmlAutomataPtr am, xmlAutomataStatePtr from, xmlAutomataStatePtr to, const xmlChar *token, void *data); -XMLPUBFUN xmlAutomataStatePtr XMLCALL +XMLPUBFUN xmlAutomataStatePtr XMLCALL xmlAutomataNewTransition2 (xmlAutomataPtr am, xmlAutomataStatePtr from, xmlAutomataStatePtr to, @@ -73,7 +73,7 @@ XMLPUBFUN xmlAutomataStatePtr XMLCALL const xmlChar *token2, void *data); -XMLPUBFUN xmlAutomataStatePtr XMLCALL +XMLPUBFUN xmlAutomataStatePtr XMLCALL xmlAutomataNewCountTrans (xmlAutomataPtr am, xmlAutomataStatePtr from, xmlAutomataStatePtr to, @@ -81,7 +81,7 @@ XMLPUBFUN xmlAutomataStatePtr XMLCALL int min, int max, void *data); -XMLPUBFUN xmlAutomataStatePtr XMLCALL +XMLPUBFUN xmlAutomataStatePtr XMLCALL xmlAutomataNewCountTrans2 (xmlAutomataPtr am, xmlAutomataStatePtr from, xmlAutomataStatePtr to, @@ -90,7 +90,7 @@ XMLPUBFUN xmlAutomataStatePtr XMLCALL int min, int max, void *data); -XMLPUBFUN xmlAutomataStatePtr XMLCALL +XMLPUBFUN xmlAutomataStatePtr XMLCALL xmlAutomataNewOnceTrans (xmlAutomataPtr am, xmlAutomataStatePtr from, xmlAutomataStatePtr to, @@ -99,46 +99,46 @@ XMLPUBFUN xmlAutomataStatePtr XMLCALL int max, void *data); XMLPUBFUN xmlAutomataStatePtr XMLCALL - xmlAutomataNewOnceTrans2 (xmlAutomataPtr am, + xmlAutomataNewOnceTrans2 (xmlAutomataPtr am, xmlAutomataStatePtr from, - xmlAutomataStatePtr to, + xmlAutomataStatePtr to, const xmlChar *token, const xmlChar *token2, - int min, - int max, + int min, + int max, void *data); -XMLPUBFUN xmlAutomataStatePtr XMLCALL +XMLPUBFUN xmlAutomataStatePtr XMLCALL xmlAutomataNewAllTrans (xmlAutomataPtr am, xmlAutomataStatePtr from, xmlAutomataStatePtr to, int lax); -XMLPUBFUN xmlAutomataStatePtr XMLCALL +XMLPUBFUN xmlAutomataStatePtr XMLCALL xmlAutomataNewEpsilon (xmlAutomataPtr am, xmlAutomataStatePtr from, xmlAutomataStatePtr to); -XMLPUBFUN xmlAutomataStatePtr XMLCALL +XMLPUBFUN xmlAutomataStatePtr XMLCALL xmlAutomataNewCountedTrans (xmlAutomataPtr am, xmlAutomataStatePtr from, xmlAutomataStatePtr to, int counter); -XMLPUBFUN xmlAutomataStatePtr XMLCALL +XMLPUBFUN xmlAutomataStatePtr XMLCALL xmlAutomataNewCounterTrans (xmlAutomataPtr am, xmlAutomataStatePtr from, xmlAutomataStatePtr to, int counter); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlAutomataNewCounter (xmlAutomataPtr am, int min, int max); -XMLPUBFUN xmlRegexpPtr XMLCALL +XMLPUBFUN xmlRegexpPtr XMLCALL xmlAutomataCompile (xmlAutomataPtr am); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlAutomataIsDeterminist (xmlAutomataPtr am); #ifdef __cplusplus } -#endif +#endif #endif /* LIBXML_AUTOMATA_ENABLED */ #endif /* LIBXML_REGEXP_ENABLED */ diff --git a/include/reactos/libs/libxml/xmlerror.h b/include/reactos/libs/libxml/xmlerror.h index e9242112359..48ea145d9f7 100644 --- a/include/reactos/libs/libxml/xmlerror.h +++ b/include/reactos/libs/libxml/xmlerror.h @@ -62,7 +62,9 @@ typedef enum { XML_FROM_WRITER, /* The xmlwriter module */ XML_FROM_MODULE, /* The dynamically loaded module module*/ XML_FROM_I18N, /* The module handling character conversion */ - XML_FROM_SCHEMATRONV /* The Schematron validator module */ + XML_FROM_SCHEMATRONV,/* The Schematron validator module */ + XML_FROM_BUFFER, /* The buffers module */ + XML_FROM_URI /* The URI module */ } xmlErrorDomain; /** @@ -205,6 +207,7 @@ typedef enum { XML_WAR_ENTITY_REDEFINED, /* 107 */ XML_ERR_UNKNOWN_VERSION, /* 108 */ XML_ERR_VERSION_MISMATCH, /* 109 */ + XML_ERR_NAME_TOO_LONG, /* 110 */ XML_NS_ERR_XML_NAMESPACE = 200, XML_NS_ERR_UNDEFINED_NAMESPACE, /* 201 */ XML_NS_ERR_QNAME, /* 202 */ @@ -825,11 +828,8 @@ typedef enum { XML_I18N_NO_HANDLER, /* 6001 */ XML_I18N_EXCESS_HANDLER, /* 6002 */ XML_I18N_CONV_FAILED, /* 6003 */ - XML_I18N_NO_OUTPUT /* 6004 */ -#if 0 - XML_CHECK_, /* 5033 */ - XML_CHECK_X /* 503 */ -#endif + XML_I18N_NO_OUTPUT, /* 6004 */ + XML_BUF_OVERFLOW = 7000 } xmlParserErrors; /** diff --git a/include/reactos/libs/libxml/xmlexports.h b/include/reactos/libs/libxml/xmlexports.h index 9c6790c80f4..2c79f814b45 100644 --- a/include/reactos/libs/libxml/xmlexports.h +++ b/include/reactos/libs/libxml/xmlexports.h @@ -43,7 +43,7 @@ /** * XMLCDECL: * - * Macro which declares the calling convention for exported functions that + * Macro which declares the calling convention for exported functions that * use '...'. */ #define XMLCDECL @@ -115,7 +115,7 @@ */ #if defined(IN_LIBXML) && !defined(LIBXML_STATIC) #define XMLPUBFUN __declspec(dllexport) - #define XMLPUBVAR __declspec(dllexport) + #define XMLPUBVAR __declspec(dllexport) extern #else #define XMLPUBFUN #if !defined(LIBXML_STATIC) diff --git a/include/reactos/libs/libxml/xmlmodule.h b/include/reactos/libs/libxml/xmlmodule.h index 8f4a56035b8..9667820070a 100644 --- a/include/reactos/libs/libxml/xmlmodule.h +++ b/include/reactos/libs/libxml/xmlmodule.h @@ -50,7 +50,7 @@ XMLPUBFUN int XMLCALL xmlModuleFree (xmlModulePtr module); #ifdef __cplusplus } -#endif +#endif #endif /* LIBXML_MODULES_ENABLED */ diff --git a/include/reactos/libs/libxml/xmlreader.h b/include/reactos/libs/libxml/xmlreader.h index 696448258bd..2c99e3a765d 100644 --- a/include/reactos/libs/libxml/xmlreader.h +++ b/include/reactos/libs/libxml/xmlreader.h @@ -130,16 +130,16 @@ XMLPUBFUN int XMLCALL #ifdef LIBXML_WRITER_ENABLED XMLPUBFUN xmlChar * XMLCALL - xmlTextReaderReadInnerXml (xmlTextReaderPtr reader); + xmlTextReaderReadInnerXml(xmlTextReaderPtr reader); XMLPUBFUN xmlChar * XMLCALL - xmlTextReaderReadOuterXml (xmlTextReaderPtr reader); + xmlTextReaderReadOuterXml(xmlTextReaderPtr reader); #endif XMLPUBFUN xmlChar * XMLCALL - xmlTextReaderReadString (xmlTextReaderPtr reader); + xmlTextReaderReadString (xmlTextReaderPtr reader); XMLPUBFUN int XMLCALL - xmlTextReaderReadAttributeValue (xmlTextReaderPtr reader); + xmlTextReaderReadAttributeValue(xmlTextReaderPtr reader); /* * Attributes of the node @@ -284,6 +284,11 @@ XMLPUBFUN int XMLCALL XMLPUBFUN int XMLCALL xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader, const char *rng); +XMLPUBFUN int XMLCALL + xmlTextReaderRelaxNGValidateCtxt(xmlTextReaderPtr reader, + xmlRelaxNGValidCtxtPtr ctxt, + int options); + XMLPUBFUN int XMLCALL xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader, xmlRelaxNGPtr schema); @@ -392,27 +397,26 @@ typedef void * xmlTextReaderLocatorPtr; * * Signature of an error callback from a reader parser */ -typedef void (XMLCALL *xmlTextReaderErrorFunc)(void *arg, - const char *msg, - xmlParserSeverities severity, - xmlTextReaderLocatorPtr locator); +typedef void (XMLCALL *xmlTextReaderErrorFunc)(void *arg, + const char *msg, + xmlParserSeverities severity, + xmlTextReaderLocatorPtr locator); XMLPUBFUN int XMLCALL - xmlTextReaderLocatorLineNumber(xmlTextReaderLocatorPtr locator); -/*int xmlTextReaderLocatorLinePosition(xmlTextReaderLocatorPtr locator);*/ + xmlTextReaderLocatorLineNumber(xmlTextReaderLocatorPtr locator); XMLPUBFUN xmlChar * XMLCALL - xmlTextReaderLocatorBaseURI (xmlTextReaderLocatorPtr locator); + xmlTextReaderLocatorBaseURI (xmlTextReaderLocatorPtr locator); XMLPUBFUN void XMLCALL - xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader, - xmlTextReaderErrorFunc f, - void *arg); + xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader, + xmlTextReaderErrorFunc f, + void *arg); XMLPUBFUN void XMLCALL - xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader, - xmlStructuredErrorFunc f, - void *arg); + xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader, + xmlStructuredErrorFunc f, + void *arg); XMLPUBFUN void XMLCALL - xmlTextReaderGetErrorHandler(xmlTextReaderPtr reader, - xmlTextReaderErrorFunc *f, - void **arg); + xmlTextReaderGetErrorHandler(xmlTextReaderPtr reader, + xmlTextReaderErrorFunc *f, + void **arg); #endif /* LIBXML_READER_ENABLED */ diff --git a/include/reactos/libs/libxml/xmlschemas.h b/include/reactos/libs/libxml/xmlschemas.h index 752bc3ad79c..97930c7c3f4 100644 --- a/include/reactos/libs/libxml/xmlschemas.h +++ b/include/reactos/libs/libxml/xmlschemas.h @@ -92,7 +92,8 @@ typedef xmlSchema *xmlSchemaPtr; * * Signature of an error callback from an XSD validation */ -typedef void (XMLCDECL *xmlSchemaValidityErrorFunc) (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); +typedef void (XMLCDECL *xmlSchemaValidityErrorFunc) + (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); /** * xmlSchemaValidityWarningFunc: @@ -102,7 +103,8 @@ typedef void (XMLCDECL *xmlSchemaValidityErrorFunc) (void *ctx, const char *msg, * * Signature of a warning callback from an XSD validation */ -typedef void (XMLCDECL *xmlSchemaValidityWarningFunc) (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); +typedef void (XMLCDECL *xmlSchemaValidityWarningFunc) + (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); /** * A schemas validation context @@ -113,6 +115,22 @@ typedef xmlSchemaParserCtxt *xmlSchemaParserCtxtPtr; typedef struct _xmlSchemaValidCtxt xmlSchemaValidCtxt; typedef xmlSchemaValidCtxt *xmlSchemaValidCtxtPtr; +/** + * xmlSchemaValidityLocatorFunc: + * @ctx: user provided context + * @file: returned file information + * @line: returned line information + * + * A schemas validation locator, a callback called by the validator. + * This is used when file or node informations are not available + * to find out what file and line number are affected + * + * Returns: 0 in case of success and -1 in case of error + */ + +typedef int (XMLCDECL *xmlSchemaValidityLocatorFunc) (void *ctx, + const char **file, unsigned long *line); + /* * Interfaces for parsing. */ @@ -171,6 +189,9 @@ XMLPUBFUN int XMLCALL XMLPUBFUN int XMLCALL xmlSchemaSetValidOptions (xmlSchemaValidCtxtPtr ctxt, int options); +XMLPUBFUN void XMLCALL + xmlSchemaValidateSetFilename(xmlSchemaValidCtxtPtr vctxt, + const char *filename); XMLPUBFUN int XMLCALL xmlSchemaValidCtxtGetOptions(xmlSchemaValidCtxtPtr ctxt); @@ -210,6 +231,13 @@ XMLPUBFUN xmlSchemaSAXPlugPtr XMLCALL void **user_data); XMLPUBFUN int XMLCALL xmlSchemaSAXUnplug (xmlSchemaSAXPlugPtr plug); + + +XMLPUBFUN void XMLCALL + xmlSchemaValidateSetLocator (xmlSchemaValidCtxtPtr vctxt, + xmlSchemaValidityLocatorFunc f, + void *ctxt); + #ifdef __cplusplus } #endif diff --git a/include/reactos/libs/libxml/xmlschemastypes.h b/include/reactos/libs/libxml/xmlschemastypes.h index 9a3a7a175e5..35d48d414be 100644 --- a/include/reactos/libs/libxml/xmlschemastypes.h +++ b/include/reactos/libs/libxml/xmlschemastypes.h @@ -30,23 +30,23 @@ typedef enum { XML_SCHEMA_WHITESPACE_COLLAPSE = 3 } xmlSchemaWhitespaceValueType; -XMLPUBFUN void XMLCALL - xmlSchemaInitTypes (void); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL + xmlSchemaInitTypes (void); +XMLPUBFUN void XMLCALL xmlSchemaCleanupTypes (void); -XMLPUBFUN xmlSchemaTypePtr XMLCALL +XMLPUBFUN xmlSchemaTypePtr XMLCALL xmlSchemaGetPredefinedType (const xmlChar *name, const xmlChar *ns); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSchemaValidatePredefinedType (xmlSchemaTypePtr type, const xmlChar *value, xmlSchemaValPtr *val); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSchemaValPredefTypeNode (xmlSchemaTypePtr type, const xmlChar *value, xmlSchemaValPtr *val, xmlNodePtr node); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSchemaValidateFacet (xmlSchemaTypePtr base, xmlSchemaFacetPtr facet, const xmlChar *value, @@ -54,25 +54,25 @@ XMLPUBFUN int XMLCALL XMLPUBFUN int XMLCALL xmlSchemaValidateFacetWhtsp (xmlSchemaFacetPtr facet, xmlSchemaWhitespaceValueType fws, - xmlSchemaValType valType, + xmlSchemaValType valType, const xmlChar *value, xmlSchemaValPtr val, xmlSchemaWhitespaceValueType ws); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSchemaFreeValue (xmlSchemaValPtr val); -XMLPUBFUN xmlSchemaFacetPtr XMLCALL +XMLPUBFUN xmlSchemaFacetPtr XMLCALL xmlSchemaNewFacet (void); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSchemaCheckFacet (xmlSchemaFacetPtr facet, xmlSchemaTypePtr typeDecl, xmlSchemaParserCtxtPtr ctxt, const xmlChar *name); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlSchemaFreeFacet (xmlSchemaFacetPtr facet); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlSchemaCompareValues (xmlSchemaValPtr x, xmlSchemaValPtr y); -XMLPUBFUN xmlSchemaTypePtr XMLCALL +XMLPUBFUN xmlSchemaTypePtr XMLCALL xmlSchemaGetBuiltInListSimpleTypeItemType (xmlSchemaTypePtr type); XMLPUBFUN int XMLCALL xmlSchemaValidateListSimpleTypeFacet (xmlSchemaFacetPtr facet, @@ -82,7 +82,7 @@ XMLPUBFUN int XMLCALL XMLPUBFUN xmlSchemaTypePtr XMLCALL xmlSchemaGetBuiltInType (xmlSchemaValType type); XMLPUBFUN int XMLCALL - xmlSchemaIsBuiltInTypeFacet (xmlSchemaTypePtr type, + xmlSchemaIsBuiltInTypeFacet (xmlSchemaTypePtr type, int facetType); XMLPUBFUN xmlChar * XMLCALL xmlSchemaCollapseString (const xmlChar *value); @@ -91,7 +91,7 @@ XMLPUBFUN xmlChar * XMLCALL XMLPUBFUN unsigned long XMLCALL xmlSchemaGetFacetValueAsULong (xmlSchemaFacetPtr facet); XMLPUBFUN int XMLCALL - xmlSchemaValidateLengthFacet (xmlSchemaTypePtr type, + xmlSchemaValidateLengthFacet (xmlSchemaTypePtr type, xmlSchemaFacetPtr facet, const xmlChar *value, xmlSchemaValPtr val, @@ -100,19 +100,19 @@ XMLPUBFUN int XMLCALL xmlSchemaValidateLengthFacetWhtsp(xmlSchemaFacetPtr facet, xmlSchemaValType valType, const xmlChar *value, - xmlSchemaValPtr val, + xmlSchemaValPtr val, unsigned long *length, xmlSchemaWhitespaceValueType ws); XMLPUBFUN int XMLCALL - xmlSchemaValPredefTypeNodeNoNorm(xmlSchemaTypePtr type, + xmlSchemaValPredefTypeNodeNoNorm(xmlSchemaTypePtr type, const xmlChar *value, - xmlSchemaValPtr *val, + xmlSchemaValPtr *val, xmlNodePtr node); XMLPUBFUN int XMLCALL xmlSchemaGetCanonValue (xmlSchemaValPtr val, const xmlChar **retValue); XMLPUBFUN int XMLCALL - xmlSchemaGetCanonValueWhtsp (xmlSchemaValPtr val, + xmlSchemaGetCanonValueWhtsp (xmlSchemaValPtr val, const xmlChar **retValue, xmlSchemaWhitespaceValueType ws); XMLPUBFUN int XMLCALL diff --git a/include/reactos/libs/libxml/xmlstring.h b/include/reactos/libs/libxml/xmlstring.h index 0bc68888656..20362365825 100644 --- a/include/reactos/libs/libxml/xmlstring.h +++ b/include/reactos/libs/libxml/xmlstring.h @@ -113,16 +113,16 @@ XMLPUBFUN int XMLCALL XMLPUBFUN int XMLCALL xmlUTF8Strsize (const xmlChar *utf, int len); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlUTF8Strndup (const xmlChar *utf, int len); -XMLPUBFUN const xmlChar * XMLCALL +XMLPUBFUN const xmlChar * XMLCALL xmlUTF8Strpos (const xmlChar *utf, int pos); XMLPUBFUN int XMLCALL xmlUTF8Strloc (const xmlChar *utf, const xmlChar *utfchar); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlUTF8Strsub (const xmlChar *utf, int start, int len); diff --git a/include/reactos/libs/libxml/xmlversion.h b/include/reactos/libs/libxml/xmlversion.h index b96855d5c89..06d55f09c5f 100644 --- a/include/reactos/libs/libxml/xmlversion.h +++ b/include/reactos/libs/libxml/xmlversion.h @@ -29,28 +29,28 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version); * * the version string like "1.2.3" */ -#define LIBXML_DOTTED_VERSION "2.7.8" +#define LIBXML_DOTTED_VERSION "2.9.0" /** * LIBXML_VERSION: * * the version number: 1.2.3 value is 10203 */ -#define LIBXML_VERSION 20708 +#define LIBXML_VERSION 20900 /** * LIBXML_VERSION_STRING: * * the version number string, 1.2.3 value is "10203" */ -#define LIBXML_VERSION_STRING "20708" +#define LIBXML_VERSION_STRING "20900" /** * LIBXML_VERSION_EXTRA: * * extra version information, used to show a CVS compilation */ -#define LIBXML_VERSION_EXTRA "-GITv2.7.7-40-g82143f4" +#define LIBXML_VERSION_EXTRA "-GITv2.9.0-rc2-5-g7651606" /** * LIBXML_TEST_VERSION: @@ -58,7 +58,7 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version); * Macro to check that the libxml version in use is compatible with * the version the software has been compiled against */ -#define LIBXML_TEST_VERSION xmlCheckVersion(20708); +#define LIBXML_TEST_VERSION xmlCheckVersion(20900); #ifndef VMS #if 0 @@ -391,6 +391,15 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version); #define LIBXML_ZLIB_ENABLED #endif +/** + * LIBXML_LZMA_ENABLED: + * + * Whether the Lzma support is compiled in + */ +#if 0 +#define LIBXML_LZMA_ENABLED +#endif + #ifdef __GNUC__ #ifdef HAVE_ANSIDECL_H #include @@ -403,7 +412,11 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version); */ #ifndef ATTRIBUTE_UNUSED -#define ATTRIBUTE_UNUSED __attribute__((unused)) +# if ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 7))) +# define ATTRIBUTE_UNUSED __attribute__((unused)) +# else +# define ATTRIBUTE_UNUSED +# endif #endif /** diff --git a/include/reactos/libs/libxml/xmlversion.h.in b/include/reactos/libs/libxml/xmlversion.h.in index 95856541617..c98e7ca76f9 100644 --- a/include/reactos/libs/libxml/xmlversion.h.in +++ b/include/reactos/libs/libxml/xmlversion.h.in @@ -391,6 +391,15 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version); #define LIBXML_ZLIB_ENABLED #endif +/** + * LIBXML_LZMA_ENABLED: + * + * Whether the Lzma support is compiled in + */ +#if @WITH_LZMA@ +#define LIBXML_LZMA_ENABLED +#endif + #ifdef __GNUC__ #ifdef HAVE_ANSIDECL_H #include @@ -403,7 +412,11 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version); */ #ifndef ATTRIBUTE_UNUSED -#define ATTRIBUTE_UNUSED __attribute__((unused)) +# if ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 7))) +# define ATTRIBUTE_UNUSED __attribute__((unused)) +# else +# define ATTRIBUTE_UNUSED +# endif #endif /** diff --git a/include/reactos/libs/libxml/xmlwriter.h b/include/reactos/libs/libxml/xmlwriter.h index 91e683c88cf..dd5add34166 100644 --- a/include/reactos/libs/libxml/xmlwriter.h +++ b/include/reactos/libs/libxml/xmlwriter.h @@ -1,4 +1,3 @@ - /* * Summary: text writing API for XML * Description: text writing API for XML @@ -471,6 +470,10 @@ extern "C" { xmlTextWriterSetIndentString(xmlTextWriterPtr writer, const xmlChar * str); + XMLPUBFUN int XMLCALL + xmlTextWriterSetQuoteChar(xmlTextWriterPtr writer, xmlChar quotechar); + + /* * misc */ diff --git a/include/reactos/libs/libxml/xpath.h b/include/reactos/libs/libxml/xpath.h index 1a9e30eba1a..8819a290428 100644 --- a/include/reactos/libs/libxml/xpath.h +++ b/include/reactos/libs/libxml/xpath.h @@ -33,7 +33,7 @@ extern "C" { #endif #endif /* LIBXML_XPATH_ENABLED or LIBXML_SCHEMAS_ENABLED */ - + #ifdef LIBXML_XPATH_ENABLED typedef struct _xmlXPathContext xmlXPathContext; @@ -68,7 +68,9 @@ typedef enum { XPATH_UNDEF_PREFIX_ERROR, XPATH_ENCODING_ERROR, XPATH_INVALID_CHAR_ERROR, - XPATH_INVALID_CTXT + XPATH_INVALID_CTXT, + XPATH_STACK_ERROR, + XPATH_FORBID_VARIABLE_ERROR } xmlXPathError; /* @@ -271,11 +273,11 @@ typedef xmlXPathFunction (*xmlXPathFuncLookupFunc) (void *ctxt, * * Expression evaluation occurs with respect to a context. * he context consists of: - * - a node (the context node) - * - a node list (the context node list) - * - a set of variable bindings - * - a function library - * - the set of namespace declarations in scope for the expression + * - a node (the context node) + * - a node list (the context node list) + * - a set of variable bindings + * - a function library + * - the set of namespace declarations in scope for the expression * Following the switch to hash tables, this need to be trimmed up at * the next binary incompatible release. * The node may be modified when the context is passed to libxml2 @@ -380,6 +382,8 @@ struct _xmlXPathParserContext { xmlXPathCompExprPtr comp; /* the precompiled expression */ int xptr; /* it this an XPointer expression */ xmlNodePtr ancestor; /* used for walking preceding axis */ + + int valueFrame; /* used to limit Pop on the stack */ }; /************************************************************************ @@ -417,7 +421,7 @@ XMLPUBVAR double xmlXPathNINF; * @index is out of range (0 to length-1) */ #define xmlXPathNodeSetItem(ns, index) \ - ((((ns) != NULL) && \ + ((((ns) != NULL) && \ ((index) >= 0) && ((index) < (ns)->nodeNr)) ? \ (ns)->nodeTab[(index)] \ : NULL) @@ -433,64 +437,64 @@ XMLPUBVAR double xmlXPathNINF; (((ns) == NULL) || ((ns)->nodeNr == 0) || ((ns)->nodeTab == NULL)) -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPathFreeObject (xmlXPathObjectPtr obj); -XMLPUBFUN xmlNodeSetPtr XMLCALL +XMLPUBFUN xmlNodeSetPtr XMLCALL xmlXPathNodeSetCreate (xmlNodePtr val); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPathFreeNodeSetList (xmlXPathObjectPtr obj); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPathFreeNodeSet (xmlNodeSetPtr obj); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathObjectCopy (xmlXPathObjectPtr val); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlXPathCmpNodes (xmlNodePtr node1, xmlNodePtr node2); /** * Conversion functions to basic types. */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlXPathCastNumberToBoolean (double val); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlXPathCastStringToBoolean (const xmlChar * val); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlXPathCastNodeSetToBoolean(xmlNodeSetPtr ns); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlXPathCastToBoolean (xmlXPathObjectPtr val); -XMLPUBFUN double XMLCALL +XMLPUBFUN double XMLCALL xmlXPathCastBooleanToNumber (int val); -XMLPUBFUN double XMLCALL +XMLPUBFUN double XMLCALL xmlXPathCastStringToNumber (const xmlChar * val); -XMLPUBFUN double XMLCALL +XMLPUBFUN double XMLCALL xmlXPathCastNodeToNumber (xmlNodePtr node); -XMLPUBFUN double XMLCALL +XMLPUBFUN double XMLCALL xmlXPathCastNodeSetToNumber (xmlNodeSetPtr ns); -XMLPUBFUN double XMLCALL +XMLPUBFUN double XMLCALL xmlXPathCastToNumber (xmlXPathObjectPtr val); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlXPathCastBooleanToString (int val); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlXPathCastNumberToString (double val); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlXPathCastNodeToString (xmlNodePtr node); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlXPathCastNodeSetToString (xmlNodeSetPtr ns); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlXPathCastToString (xmlXPathObjectPtr val); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathConvertBoolean (xmlXPathObjectPtr val); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathConvertNumber (xmlXPathObjectPtr val); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathConvertString (xmlXPathObjectPtr val); /** * Context handling. */ -XMLPUBFUN xmlXPathContextPtr XMLCALL +XMLPUBFUN xmlXPathContextPtr XMLCALL xmlXPathNewContext (xmlDocPtr doc); XMLPUBFUN void XMLCALL xmlXPathFreeContext (xmlXPathContextPtr ctxt); @@ -502,36 +506,36 @@ XMLPUBFUN int XMLCALL /** * Evaluation functions. */ -XMLPUBFUN long XMLCALL +XMLPUBFUN long XMLCALL xmlXPathOrderDocElems (xmlDocPtr doc); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathEval (const xmlChar *str, xmlXPathContextPtr ctx); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathEvalExpression (const xmlChar *str, xmlXPathContextPtr ctxt); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlXPathEvalPredicate (xmlXPathContextPtr ctxt, xmlXPathObjectPtr res); /** * Separate compilation/evaluation entry points. */ -XMLPUBFUN xmlXPathCompExprPtr XMLCALL +XMLPUBFUN xmlXPathCompExprPtr XMLCALL xmlXPathCompile (const xmlChar *str); -XMLPUBFUN xmlXPathCompExprPtr XMLCALL +XMLPUBFUN xmlXPathCompExprPtr XMLCALL xmlXPathCtxtCompile (xmlXPathContextPtr ctxt, - const xmlChar *str); -XMLPUBFUN xmlXPathObjectPtr XMLCALL + const xmlChar *str); +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathCompiledEval (xmlXPathCompExprPtr comp, xmlXPathContextPtr ctx); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlXPathCompiledEvalToBoolean(xmlXPathCompExprPtr comp, xmlXPathContextPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPathFreeCompExpr (xmlXPathCompExprPtr comp); #endif /* LIBXML_XPATH_ENABLED */ #if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPathInit (void); XMLPUBFUN int XMLCALL xmlXPathIsNaN (double val); diff --git a/include/reactos/libs/libxml/xpathInternals.h b/include/reactos/libs/libxml/xpathInternals.h index dcd524343e3..70c9db96f18 100644 --- a/include/reactos/libs/libxml/xpathInternals.h +++ b/include/reactos/libs/libxml/xpathInternals.h @@ -100,16 +100,16 @@ extern "C" { */ #define xmlXPathGetContextNode(ctxt) ((ctxt)->context->node) -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlXPathPopBoolean (xmlXPathParserContextPtr ctxt); -XMLPUBFUN double XMLCALL - xmlXPathPopNumber (xmlXPathParserContextPtr ctxt); -XMLPUBFUN xmlChar * XMLCALL - xmlXPathPopString (xmlXPathParserContextPtr ctxt); -XMLPUBFUN xmlNodeSetPtr XMLCALL - xmlXPathPopNodeSet (xmlXPathParserContextPtr ctxt); -XMLPUBFUN void * XMLCALL - xmlXPathPopExternal (xmlXPathParserContextPtr ctxt); +XMLPUBFUN double XMLCALL + xmlXPathPopNumber (xmlXPathParserContextPtr ctxt); +XMLPUBFUN xmlChar * XMLCALL + xmlXPathPopString (xmlXPathParserContextPtr ctxt); +XMLPUBFUN xmlNodeSetPtr XMLCALL + xmlXPathPopNodeSet (xmlXPathParserContextPtr ctxt); +XMLPUBFUN void * XMLCALL + xmlXPathPopExternal (xmlXPathParserContextPtr ctxt); /** * xmlXPathReturnBoolean: @@ -296,7 +296,9 @@ XMLPUBFUN void * XMLCALL #define CHECK_ARITY(x) \ if (ctxt == NULL) return; \ if (nargs != (x)) \ - XP_ERROR(XPATH_INVALID_ARITY); + XP_ERROR(XPATH_INVALID_ARITY); \ + if (ctxt->valueNr < ctxt->valueFrame + (x)) \ + XP_ERROR(XPATH_STACK_ERROR); /** * CAST_TO_STRING: @@ -329,7 +331,7 @@ XMLPUBFUN void * XMLCALL * Variable Lookup forwarding. */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPathRegisterVariableLookup (xmlXPathContextPtr ctxt, xmlXPathVariableLookupFunc f, void *data); @@ -338,7 +340,7 @@ XMLPUBFUN void XMLCALL * Function Lookup forwarding. */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPathRegisterFuncLookup (xmlXPathContextPtr ctxt, xmlXPathFuncLookupFunc f, void *funcCtxt); @@ -346,7 +348,7 @@ XMLPUBFUN void XMLCALL /* * Error reporting. */ -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPatherror (xmlXPathParserContextPtr ctxt, const char *file, int line, @@ -357,11 +359,11 @@ XMLPUBFUN void XMLCALL int error); #ifdef LIBXML_DEBUG_ENABLED -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPathDebugDumpObject (FILE *output, xmlXPathObjectPtr cur, int depth); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPathDebugDumpCompExpr(FILE *output, xmlXPathCompExprPtr comp, int depth); @@ -369,48 +371,48 @@ XMLPUBFUN void XMLCALL /** * NodeSet handling. */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlXPathNodeSetContains (xmlNodeSetPtr cur, xmlNodePtr val); -XMLPUBFUN xmlNodeSetPtr XMLCALL +XMLPUBFUN xmlNodeSetPtr XMLCALL xmlXPathDifference (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2); -XMLPUBFUN xmlNodeSetPtr XMLCALL +XMLPUBFUN xmlNodeSetPtr XMLCALL xmlXPathIntersection (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2); -XMLPUBFUN xmlNodeSetPtr XMLCALL +XMLPUBFUN xmlNodeSetPtr XMLCALL xmlXPathDistinctSorted (xmlNodeSetPtr nodes); -XMLPUBFUN xmlNodeSetPtr XMLCALL +XMLPUBFUN xmlNodeSetPtr XMLCALL xmlXPathDistinct (xmlNodeSetPtr nodes); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlXPathHasSameNodes (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2); -XMLPUBFUN xmlNodeSetPtr XMLCALL +XMLPUBFUN xmlNodeSetPtr XMLCALL xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes, xmlNodePtr node); -XMLPUBFUN xmlNodeSetPtr XMLCALL +XMLPUBFUN xmlNodeSetPtr XMLCALL xmlXPathLeadingSorted (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2); -XMLPUBFUN xmlNodeSetPtr XMLCALL +XMLPUBFUN xmlNodeSetPtr XMLCALL xmlXPathNodeLeading (xmlNodeSetPtr nodes, xmlNodePtr node); -XMLPUBFUN xmlNodeSetPtr XMLCALL +XMLPUBFUN xmlNodeSetPtr XMLCALL xmlXPathLeading (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2); -XMLPUBFUN xmlNodeSetPtr XMLCALL +XMLPUBFUN xmlNodeSetPtr XMLCALL xmlXPathNodeTrailingSorted (xmlNodeSetPtr nodes, xmlNodePtr node); -XMLPUBFUN xmlNodeSetPtr XMLCALL +XMLPUBFUN xmlNodeSetPtr XMLCALL xmlXPathTrailingSorted (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2); -XMLPUBFUN xmlNodeSetPtr XMLCALL +XMLPUBFUN xmlNodeSetPtr XMLCALL xmlXPathNodeTrailing (xmlNodeSetPtr nodes, xmlNodePtr node); -XMLPUBFUN xmlNodeSetPtr XMLCALL +XMLPUBFUN xmlNodeSetPtr XMLCALL xmlXPathTrailing (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2); @@ -419,51 +421,51 @@ XMLPUBFUN xmlNodeSetPtr XMLCALL * Extending a context. */ -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlXPathRegisterNs (xmlXPathContextPtr ctxt, const xmlChar *prefix, const xmlChar *ns_uri); -XMLPUBFUN const xmlChar * XMLCALL +XMLPUBFUN const xmlChar * XMLCALL xmlXPathNsLookup (xmlXPathContextPtr ctxt, const xmlChar *prefix); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPathRegisteredNsCleanup (xmlXPathContextPtr ctxt); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlXPathRegisterFunc (xmlXPathContextPtr ctxt, const xmlChar *name, xmlXPathFunction f); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlXPathRegisterFuncNS (xmlXPathContextPtr ctxt, const xmlChar *name, const xmlChar *ns_uri, xmlXPathFunction f); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlXPathRegisterVariable (xmlXPathContextPtr ctxt, const xmlChar *name, xmlXPathObjectPtr value); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL xmlXPathRegisterVariableNS (xmlXPathContextPtr ctxt, const xmlChar *name, const xmlChar *ns_uri, xmlXPathObjectPtr value); -XMLPUBFUN xmlXPathFunction XMLCALL +XMLPUBFUN xmlXPathFunction XMLCALL xmlXPathFunctionLookup (xmlXPathContextPtr ctxt, const xmlChar *name); -XMLPUBFUN xmlXPathFunction XMLCALL +XMLPUBFUN xmlXPathFunction XMLCALL xmlXPathFunctionLookupNS (xmlXPathContextPtr ctxt, const xmlChar *name, const xmlChar *ns_uri); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPathRegisteredFuncsCleanup (xmlXPathContextPtr ctxt); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathVariableLookup (xmlXPathContextPtr ctxt, const xmlChar *name); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathVariableLookupNS (xmlXPathContextPtr ctxt, const xmlChar *name, const xmlChar *ns_uri); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt); /** @@ -471,79 +473,79 @@ XMLPUBFUN void XMLCALL */ XMLPUBFUN xmlXPathParserContextPtr XMLCALL xmlXPathNewParserContext (const xmlChar *str, - xmlXPathContextPtr ctxt); -XMLPUBFUN void XMLCALL + xmlXPathContextPtr ctxt); +XMLPUBFUN void XMLCALL xmlXPathFreeParserContext (xmlXPathParserContextPtr ctxt); /* TODO: remap to xmlXPathValuePop and Push. */ -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL valuePop (xmlXPathParserContextPtr ctxt); -XMLPUBFUN int XMLCALL +XMLPUBFUN int XMLCALL valuePush (xmlXPathParserContextPtr ctxt, - xmlXPathObjectPtr value); + xmlXPathObjectPtr value); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathNewString (const xmlChar *val); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathNewCString (const char *val); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathWrapString (xmlChar *val); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathWrapCString (char * val); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathNewFloat (double val); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathNewBoolean (int val); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathNewNodeSet (xmlNodePtr val); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathNewValueTree (xmlNodePtr val); -XMLPUBFUN void XMLCALL +XMLPUBFUN int XMLCALL xmlXPathNodeSetAdd (xmlNodeSetPtr cur, xmlNodePtr val); -XMLPUBFUN void XMLCALL +XMLPUBFUN int XMLCALL xmlXPathNodeSetAddUnique (xmlNodeSetPtr cur, xmlNodePtr val); -XMLPUBFUN void XMLCALL - xmlXPathNodeSetAddNs (xmlNodeSetPtr cur, - xmlNodePtr node, +XMLPUBFUN int XMLCALL + xmlXPathNodeSetAddNs (xmlNodeSetPtr cur, + xmlNodePtr node, xmlNsPtr ns); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPathNodeSetSort (xmlNodeSetPtr set); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPathRoot (xmlXPathParserContextPtr ctxt); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPathEvalExpr (xmlXPathParserContextPtr ctxt); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlXPathParseName (xmlXPathParserContextPtr ctxt); -XMLPUBFUN xmlChar * XMLCALL +XMLPUBFUN xmlChar * XMLCALL xmlXPathParseNCName (xmlXPathParserContextPtr ctxt); /* * Existing functions. */ -XMLPUBFUN double XMLCALL +XMLPUBFUN double XMLCALL xmlXPathStringEvalNumber (const xmlChar *str); -XMLPUBFUN int XMLCALL - xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt, +XMLPUBFUN int XMLCALL + xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr res); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPathRegisterAllFunctions (xmlXPathContextPtr ctxt); -XMLPUBFUN xmlNodeSetPtr XMLCALL - xmlXPathNodeSetMerge (xmlNodeSetPtr val1, +XMLPUBFUN xmlNodeSetPtr XMLCALL + xmlXPathNodeSetMerge (xmlNodeSetPtr val1, xmlNodeSetPtr val2); -XMLPUBFUN void XMLCALL - xmlXPathNodeSetDel (xmlNodeSetPtr cur, +XMLPUBFUN void XMLCALL + xmlXPathNodeSetDel (xmlNodeSetPtr cur, xmlNodePtr val); -XMLPUBFUN void XMLCALL - xmlXPathNodeSetRemove (xmlNodeSetPtr cur, +XMLPUBFUN void XMLCALL + xmlXPathNodeSetRemove (xmlNodeSetPtr cur, int val); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathNewNodeSetList (xmlNodeSetPtr val); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathWrapNodeSet (xmlNodeSetPtr val); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPathWrapExternal (void *val); XMLPUBFUN int XMLCALL xmlXPathEqualValues(xmlXPathParserContextPtr ctxt); @@ -621,7 +623,7 @@ XMLPUBFUN void XMLCALL xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, in * Really internal functions */ XMLPUBFUN void XMLCALL xmlXPathNodeSetFreeNs(xmlNsPtr ns); - + #ifdef __cplusplus } #endif diff --git a/include/reactos/libs/libxml/xpointer.h b/include/reactos/libs/libxml/xpointer.h index dde1dfb3d16..b99112b87a1 100644 --- a/include/reactos/libs/libxml/xpointer.h +++ b/include/reactos/libs/libxml/xpointer.h @@ -7,7 +7,7 @@ * * Added support for the element() scheme described in: * W3C Proposed Recommendation 13 November 2002 - * http://www.w3.org/TR/2002/PR-xptr-element-20021113/ + * http://www.w3.org/TR/2002/PR-xptr-element-20021113/ * * Copy: See Copyright for the status of this software. * @@ -43,68 +43,68 @@ struct _xmlLocationSet { * Handling of location sets. */ -XMLPUBFUN xmlLocationSetPtr XMLCALL +XMLPUBFUN xmlLocationSetPtr XMLCALL xmlXPtrLocationSetCreate (xmlXPathObjectPtr val); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPtrFreeLocationSet (xmlLocationSetPtr obj); -XMLPUBFUN xmlLocationSetPtr XMLCALL +XMLPUBFUN xmlLocationSetPtr XMLCALL xmlXPtrLocationSetMerge (xmlLocationSetPtr val1, xmlLocationSetPtr val2); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPtrNewRange (xmlNodePtr start, int startindex, xmlNodePtr end, int endindex); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPtrNewRangePoints (xmlXPathObjectPtr start, xmlXPathObjectPtr end); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPtrNewRangeNodePoint (xmlNodePtr start, xmlXPathObjectPtr end); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPtrNewRangePointNode (xmlXPathObjectPtr start, xmlNodePtr end); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPtrNewRangeNodes (xmlNodePtr start, xmlNodePtr end); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPtrNewLocationSetNodes (xmlNodePtr start, xmlNodePtr end); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPtrNewLocationSetNodeSet(xmlNodeSetPtr set); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPtrNewRangeNodeObject (xmlNodePtr start, xmlXPathObjectPtr end); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPtrNewCollapsedRange (xmlNodePtr start); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPtrLocationSetAdd (xmlLocationSetPtr cur, xmlXPathObjectPtr val); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPtrWrapLocationSet (xmlLocationSetPtr val); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPtrLocationSetDel (xmlLocationSetPtr cur, xmlXPathObjectPtr val); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPtrLocationSetRemove (xmlLocationSetPtr cur, int val); /* * Functions. */ -XMLPUBFUN xmlXPathContextPtr XMLCALL +XMLPUBFUN xmlXPathContextPtr XMLCALL xmlXPtrNewContext (xmlDocPtr doc, xmlNodePtr here, xmlNodePtr origin); -XMLPUBFUN xmlXPathObjectPtr XMLCALL +XMLPUBFUN xmlXPathObjectPtr XMLCALL xmlXPtrEval (const xmlChar *str, xmlXPathContextPtr ctx); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPtrRangeToFunction (xmlXPathParserContextPtr ctxt, - int nargs); -XMLPUBFUN xmlNodePtr XMLCALL + int nargs); +XMLPUBFUN xmlNodePtr XMLCALL xmlXPtrBuildNodeList (xmlXPathObjectPtr obj); -XMLPUBFUN void XMLCALL +XMLPUBFUN void XMLCALL xmlXPtrEvalRangePredicate (xmlXPathParserContextPtr ctxt); #ifdef __cplusplus } diff --git a/include/reactos/libs/libxslt/libxslt.h b/include/reactos/libs/libxslt/libxslt.h index 2b9f52a9fd5..2f6f20d8ea8 100644 --- a/include/reactos/libs/libxslt/libxslt.h +++ b/include/reactos/libs/libxslt/libxslt.h @@ -23,7 +23,7 @@ #if (defined (__CYGWIN__) || defined _MSC_VER) && !defined IN_LIBXSLT && !defined LIBXSLT_STATIC #define LIBXSLT_PUBLIC __declspec(dllimport) #else -#define LIBXSLT_PUBLIC +#define LIBXSLT_PUBLIC #endif #endif diff --git a/include/reactos/libs/libxslt/numbersInternals.h b/include/reactos/libs/libxslt/numbersInternals.h index 7b3cb17bf7b..8524592811a 100644 --- a/include/reactos/libs/libxslt/numbersInternals.h +++ b/include/reactos/libs/libxslt/numbersInternals.h @@ -17,6 +17,8 @@ extern "C" { #endif +struct _xsltCompMatch; + /** * xsltNumberData: * @@ -24,7 +26,7 @@ extern "C" { */ typedef struct _xsltNumberData xsltNumberData; typedef xsltNumberData *xsltNumberDataPtr; - + struct _xsltNumberData { const xmlChar *level; const xmlChar *count; @@ -37,6 +39,8 @@ struct _xsltNumberData { int groupingCharacterLen; xmlDocPtr doc; xmlNodePtr node; + struct _xsltCompMatch *countPat; + struct _xsltCompMatch *fromPat; /* * accelerators diff --git a/include/reactos/libs/libxslt/transform.h b/include/reactos/libs/libxslt/transform.h index 105ac2d98c9..2cfbec2e3da 100644 --- a/include/reactos/libs/libxslt/transform.h +++ b/include/reactos/libs/libxslt/transform.h @@ -24,51 +24,55 @@ extern "C" { /** * XInclude default processing. */ -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltSetXIncludeDefault (int xinclude); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltGetXIncludeDefault (void); /** * Export context to users. */ -XSLTPUBFUN xsltTransformContextPtr XSLTCALL +XSLTPUBFUN xsltTransformContextPtr XSLTCALL xsltNewTransformContext (xsltStylesheetPtr style, xmlDocPtr doc); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltFreeTransformContext(xsltTransformContextPtr ctxt); -XSLTPUBFUN xmlDocPtr XSLTCALL +XSLTPUBFUN xmlDocPtr XSLTCALL xsltApplyStylesheetUser (xsltStylesheetPtr style, xmlDocPtr doc, const char **params, const char *output, FILE * profile, xsltTransformContextPtr userCtxt); +XSLTPUBFUN void XSLTCALL + xsltProcessOneNode (xsltTransformContextPtr ctxt, + xmlNodePtr node, + xsltStackElemPtr params); /** * Private Interfaces. */ -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltApplyStripSpaces (xsltTransformContextPtr ctxt, xmlNodePtr node); -XSLTPUBFUN xmlDocPtr XSLTCALL +XSLTPUBFUN xmlDocPtr XSLTCALL xsltApplyStylesheet (xsltStylesheetPtr style, xmlDocPtr doc, const char **params); -XSLTPUBFUN xmlDocPtr XSLTCALL +XSLTPUBFUN xmlDocPtr XSLTCALL xsltProfileStylesheet (xsltStylesheetPtr style, xmlDocPtr doc, const char **params, FILE * output); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltRunStylesheet (xsltStylesheetPtr style, xmlDocPtr doc, const char **params, const char *output, xmlSAXHandlerPtr SAX, xmlOutputBufferPtr IObuf); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltRunStylesheetUser (xsltStylesheetPtr style, xmlDocPtr doc, const char **params, @@ -77,101 +81,101 @@ XSLTPUBFUN int XSLTCALL xmlOutputBufferPtr IObuf, FILE * profile, xsltTransformContextPtr userCtxt); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltApplyOneTemplate (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr list, xsltTemplatePtr templ, xsltStackElemPtr params); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltDocumentElem (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltSort (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltCopy (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltText (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltElement (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltComment (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltAttribute (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltProcessingInstruction(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltCopyOf (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltValueOf (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltNumber (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltApplyImports (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltCallTemplate (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltApplyTemplates (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltChoose (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltIf (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltForEach (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltStylePreCompPtr comp); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltRegisterAllElement (xsltTransformContextPtr ctxt); -XSLTPUBFUN xmlNodePtr XSLTCALL +XSLTPUBFUN xmlNodePtr XSLTCALL xsltCopyTextString (xsltTransformContextPtr ctxt, xmlNodePtr target, const xmlChar *string, @@ -189,7 +193,7 @@ XSLTPUBFUN int XSLTCALL /* * Hook for the debugger if activated. */ -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xslHandleDebugger (xmlNodePtr cur, xmlNodePtr node, xsltTemplatePtr templ, diff --git a/include/reactos/libs/libxslt/xslt.h b/include/reactos/libs/libxslt/xslt.h index 849b03c4cbd..02f491a58ec 100644 --- a/include/reactos/libs/libxslt/xslt.h +++ b/include/reactos/libs/libxslt/xslt.h @@ -43,7 +43,7 @@ extern "C" { * * The XSLT specification namespace. */ -#define XSLT_NAMESPACE ((xmlChar *) "http://www.w3.org/1999/XSL/Transform") +#define XSLT_NAMESPACE ((const xmlChar *)"http://www.w3.org/1999/XSL/Transform") /** * XSLT_PARSE_OPTIONS: @@ -61,6 +61,13 @@ extern "C" { */ XSLTPUBVAR int xsltMaxDepth; +/** + * * xsltMaxVars: + * * + * * This value is used to detect templates loops. + * */ +XSLTPUBVAR int xsltMaxVars; + /** * xsltEngineVersion: * @@ -92,7 +99,7 @@ XSLTPUBFUN void XSLTCALL /* * Global cleanup function. */ -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltCleanupGlobals (void); #ifdef __cplusplus diff --git a/include/reactos/libs/libxslt/xsltInternals.h b/include/reactos/libs/libxslt/xsltInternals.h index f176264ccb0..95e8fe6e81f 100644 --- a/include/reactos/libs/libxslt/xsltInternals.h +++ b/include/reactos/libs/libxslt/xsltInternals.h @@ -1,7 +1,7 @@ /* * Summary: internal data structures, constants and functions * Description: Internal data structures, constants and functions used - * by the XSLT engine. + * by the XSLT engine. * They are not part of the API or ABI, i.e. they can change * without prior notice, use carefully. * @@ -21,6 +21,7 @@ #include #include #include "xsltexports.h" +#include "xsltlocale.h" #include "numbersInternals.h" #ifdef __cplusplus @@ -100,7 +101,7 @@ extern const xmlChar *xsltXSLTAttrMarker; * XSLT_REFACTORED_XSLT_NSCOMP * * Internal define to enable the pointer-comparison of - * namespaces of XSLT elements. + * namespaces of XSLT elements. */ /* #define XSLT_REFACTORED_XSLT_NSCOMP */ @@ -293,6 +294,11 @@ struct _xsltTemplate { int nbCalls; /* the number of time the template was called */ unsigned long time; /* the time spent in this template */ void *params; /* xsl:param instructions */ + + int templNr; /* Nb of templates in the stack */ + int templMax; /* Size of the templtes stack */ + xsltTemplatePtr *templCalledTab; /* templates called */ + int *templCountTab; /* .. and how often */ }; /** @@ -473,7 +479,7 @@ struct _xsltElemPreComp { xsltElemPreCompPtr next; /* next item in the global chained list hold by xsltStylesheet. */ xsltStyleType type; /* type of the element */ - xsltTransformFunction func; /* handling function */ + xsltTransformFunction func; /* handling function */ xmlNodePtr inst; /* the node in the stylesheet's tree corresponding to this item */ @@ -505,7 +511,7 @@ XSLTPUBFUN void XSLTCALL XSLTPUBFUN void XSLTCALL xsltPointerListClear (xsltPointerListPtr list); XSLTPUBFUN int XSLTCALL - xsltPointerListAddSize (xsltPointerListPtr list, + xsltPointerListAddSize (xsltPointerListPtr list, void *item, int initialSize); @@ -520,12 +526,12 @@ typedef xsltNsListContainer *xsltNsListContainerPtr; struct _xsltNsListContainer { xmlNsPtr *list; int totalNumber; - int xpathNumber; + int xpathNumber; }; /** * XSLT_ITEM_COMPATIBILITY_FIELDS: - * + * * Fields for API compatibility to the structure * _xsltElemPreComp which is used for extension functions. * Note that @next is used for storage; it does not reflect a next @@ -548,7 +554,7 @@ struct _xsltNsListContainer { /* xsltStylePreCompPtr parent;\ xsltStylePreCompPtr children;\ - xsltStylePreCompPtr nextItem; + xsltStylePreCompPtr nextItem; */ /** @@ -569,7 +575,7 @@ struct _xsltNsListContainer { XSLT_ITEM_NSINSCOPE_FIELDS /** - * _xsltStylePreComp: + * _xsltStylePreComp: * * The abstract basic structure for items of the XSLT processor. * This includes: @@ -584,7 +590,7 @@ struct _xsltNsListContainer { struct _xsltStylePreComp { xsltElemPreCompPtr next; /* next item in the global chained list hold by xsltStylesheet */ - xsltStyleType type; /* type of the item */ + xsltStyleType type; /* type of the item */ xsltTransformFunction func; /* handling function */ xmlNodePtr inst; /* the node in the stylesheet's tree corresponding to this item. */ @@ -594,7 +600,7 @@ struct _xsltStylePreComp { /** * xsltStyleBasicEmptyItem: - * + * * Abstract structure only used as a short-cut for * XSLT items with no extra fields. * NOTE that it is intended that this structure looks the same as @@ -609,7 +615,7 @@ struct _xsltStyleBasicEmptyItem { /** * xsltStyleBasicExpressionItem: - * + * * Abstract structure only used as a short-cut for * XSLT items with just an expression. */ @@ -631,7 +637,7 @@ struct _xsltStyleBasicExpressionItem { /** * xsltStyleItemElement: - * + * * * * @@ -1142,7 +1149,7 @@ typedef struct _xsltStyleItemExtElement xsltStyleItemExtElement; typedef xsltStyleItemExtElement *xsltStyleItemExtElementPtr; struct _xsltStyleItemExtElement { XSLT_ITEM_COMMON_FIELDS - xsltElemPreCompPtr item; + xsltElemPreCompPtr item; }; /************************************************************************ @@ -1158,7 +1165,7 @@ struct _xsltEffectiveNs { xsltEffectiveNsPtr next; /* next item in the list */ const xmlChar *prefix; const xmlChar *nsName; - /* + /* * Indicates if eclared on the literal result element; dunno if really * needed. */ @@ -1194,7 +1201,7 @@ struct _xsltStyleItemLRElementInfo { typedef struct _xsltNsAlias xsltNsAlias; typedef xsltNsAlias *xsltNsAliasPtr; struct _xsltNsAlias { - xsltNsAliasPtr next; /* next in the list */ + xsltNsAliasPtr next; /* next in the list */ xmlNsPtr literalNs; xmlNsPtr targetNs; xmlDocPtr docOfTargetNs; @@ -1211,7 +1218,7 @@ struct _xsltNsMap { xmlNodePtr elem; /* the element holding the ns-decl */ xmlNsPtr ns; /* the xmlNs structure holding the XML namespace name */ const xmlChar *origNsName; /* the original XML namespace name */ - const xmlChar *newNsName; /* the mapped XML namespace name */ + const xmlChar *newNsName; /* the mapped XML namespace name */ }; #endif @@ -1246,10 +1253,6 @@ struct _xsltVarInfo { const xmlChar *nsName; }; -#define XSLT_ELEMENT_CATEGORY_XSLT 0 -#define XSLT_ELEMENT_CATEGORY_EXTENSION 1 -#define XSLT_ELEMENT_CATEGORY_LRE 2 - /** * xsltCompilerNodeInfo: * @@ -1270,13 +1273,13 @@ struct _xsltCompilerNodeInfo { /* The current in-scope namespaces */ xsltNsListContainerPtr inScopeNs; /* The current excluded result namespaces */ - xsltPointerListPtr exclResultNs; + xsltPointerListPtr exclResultNs; /* The current extension instruction namespaces */ xsltPointerListPtr extElemNs; /* The current info for literal result elements. */ xsltStyleItemLRElementInfoPtr litResElemInfo; - /* + /* * Set to 1 if in-scope namespaces changed, * or excluded result namespaces changed, * or extension element namespaces changed. @@ -1291,7 +1294,7 @@ struct _xsltCompilerNodeInfo { /* whether the content of an extension element was processed */ int extContentHandled; /* the type of the current child */ - xsltStyleType curChildType; + xsltStyleType curChildType; }; /** @@ -1299,7 +1302,7 @@ struct _xsltCompilerNodeInfo { * * get pointer to compiler context */ -#define XSLT_CCTXT(style) ((xsltCompilerCtxtPtr) style->compCtxt) +#define XSLT_CCTXT(style) ((xsltCompilerCtxtPtr) style->compCtxt) typedef enum { XSLT_ERROR_SEVERITY_ERROR = 0, @@ -1312,7 +1315,7 @@ struct _xsltCompilerCtxt { void *errorCtxt; /* user specific error context */ /* * used for error/warning reports; e.g. XSLT_ERROR_SEVERITY_WARNING */ - xsltErrorSeverityType errSeverity; + xsltErrorSeverityType errSeverity; int warnings; /* TODO: number of warnings found at compilation */ int errors; /* TODO: number of errors found at @@ -1322,7 +1325,7 @@ struct _xsltCompilerCtxt { int simplified; /* whether this is a simplified stylesheet */ /* TODO: structured/unstructured error contexts. */ int depth; /* Current depth of processing */ - + xsltCompilerNodeInfoPtr inode; xsltCompilerNodeInfoPtr inodeList; xsltCompilerNodeInfoPtr inodeLast; @@ -1335,7 +1338,7 @@ struct _xsltCompilerCtxt { in a parsing episode */ int maxNodeInfos; /* TEMP TODO: just for the interest */ int maxLREs; /* TEMP TODO: just for the interest */ - /* + /* * In order to keep the old behaviour, applying strict rules of * the spec can be turned off. This has effect only on special * mechanisms like whitespace-stripping in the stylesheet. @@ -1350,7 +1353,7 @@ struct _xsltCompilerCtxt { xsltNsAliasPtr nsAliases; xsltVarInfoPtr ivars; /* Storage of local in-scope variables/params. */ xsltVarInfoPtr ivar; /* topmost local variable/param. */ -}; +}; #else /* XSLT_REFACTORED */ /* @@ -1381,6 +1384,7 @@ struct _xsltStylePreComp { int descending; /* sort */ const xmlChar *lang; /* sort */ int has_lang; /* sort */ + xsltLocale locale; /* sort */ const xmlChar *case_order; /* sort */ int lower_first; /* sort */ @@ -1417,9 +1421,6 @@ struct _xsltStylePreComp { #endif /* XSLT_REFACTORED */ -#define XSLT_VAR_GLOBAL 1<<0 -#define XSLT_VAR_IN_SELECT 1<<1 -#define XSLT_TCTXT_VARIABLE(c) ((xsltStackElemPtr) (c)->contextVariable) /* * The in-memory structure corresponding to an XSLT Variable * or Param. @@ -1475,7 +1476,7 @@ struct _xsltPrincipalStylesheetData { #endif }; - + #endif /* * Note that we added a @compCtxt field to anchor an stylesheet compilation @@ -1520,7 +1521,7 @@ struct _xsltStylesheet { void *textMatch; /* template based on text() */ void *piMatch; /* template based on processing-instruction() */ void *commentMatch; /* template based on comment() */ - + /* * Namespace aliases. * NOTE: Not used in the refactored code. @@ -1541,7 +1542,7 @@ struct _xsltStylesheet { execution of XPath expressions; unfortunately it restricts the stylesheet to have distinct prefixes. - TODO: We need to get rid of this. + TODO: We need to get rid of this. */ void *nsDefs; /* ATTENTION TODO: This is currently used to store xsltExtDefPtr (in extensions.c) and @@ -1562,7 +1563,7 @@ struct _xsltStylesheet { xmlChar *encoding; /* encoding string */ int omitXmlDeclaration; /* omit-xml-declaration = "yes" | "no" */ - /* + /* * Number formatting. */ xsltDecimalFormatPtr decimalFormat; @@ -1632,8 +1633,12 @@ struct _xsltStylesheet { */ xsltCompilerCtxtPtr compCtxt; /* TODO: Change this to (void *). */ - xsltPrincipalStylesheetDataPtr principalData; + xsltPrincipalStylesheetDataPtr principalData; #endif + /* + * Forwards-compatible processing + */ + int forwards_compatible; }; typedef struct _xsltTransformCache xsltTransformCache; @@ -1778,6 +1783,9 @@ struct _xsltTransformContext { exits */ xmlDocPtr localRVTBase; int keyInitLevel; /* Needed to catch recursive keys issues */ + int funcLevel; /* Needed to catch recursive functions issues */ + int maxTemplateDepth; + int maxTemplateVars; }; /** @@ -1831,62 +1839,62 @@ struct _xsltTransformContext { xsltDecimalFormatPtr xsltDecimalFormatGetByName(xsltStylesheetPtr sheet, xmlChar *name); */ -XSLTPUBFUN xsltStylesheetPtr XSLTCALL +XSLTPUBFUN xsltStylesheetPtr XSLTCALL xsltNewStylesheet (void); -XSLTPUBFUN xsltStylesheetPtr XSLTCALL +XSLTPUBFUN xsltStylesheetPtr XSLTCALL xsltParseStylesheetFile (const xmlChar* filename); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltFreeStylesheet (xsltStylesheetPtr style); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltIsBlank (xmlChar *str); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltFreeStackElemList (xsltStackElemPtr elem); -XSLTPUBFUN xsltDecimalFormatPtr XSLTCALL +XSLTPUBFUN xsltDecimalFormatPtr XSLTCALL xsltDecimalFormatGetByName(xsltStylesheetPtr style, xmlChar *name); -XSLTPUBFUN xsltStylesheetPtr XSLTCALL +XSLTPUBFUN xsltStylesheetPtr XSLTCALL xsltParseStylesheetProcess(xsltStylesheetPtr ret, xmlDocPtr doc); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltParseStylesheetOutput(xsltStylesheetPtr style, xmlNodePtr cur); -XSLTPUBFUN xsltStylesheetPtr XSLTCALL +XSLTPUBFUN xsltStylesheetPtr XSLTCALL xsltParseStylesheetDoc (xmlDocPtr doc); -XSLTPUBFUN xsltStylesheetPtr XSLTCALL +XSLTPUBFUN xsltStylesheetPtr XSLTCALL xsltParseStylesheetImportedDoc(xmlDocPtr doc, xsltStylesheetPtr style); -XSLTPUBFUN xsltStylesheetPtr XSLTCALL +XSLTPUBFUN xsltStylesheetPtr XSLTCALL xsltLoadStylesheetPI (xmlDocPtr doc); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltNumberFormat (xsltTransformContextPtr ctxt, xsltNumberDataPtr data, xmlNodePtr node); -XSLTPUBFUN xmlXPathError XSLTCALL +XSLTPUBFUN xmlXPathError XSLTCALL xsltFormatNumberConversion(xsltDecimalFormatPtr self, xmlChar *format, double number, xmlChar **result); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltParseTemplateContent(xsltStylesheetPtr style, xmlNodePtr templ); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltAllocateExtra (xsltStylesheetPtr style); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltAllocateExtraCtxt (xsltTransformContextPtr ctxt); /* * Extra functions for Result Value Trees */ -XSLTPUBFUN xmlDocPtr XSLTCALL +XSLTPUBFUN xmlDocPtr XSLTCALL xsltCreateRVT (xsltTransformContextPtr ctxt); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltRegisterTmpRVT (xsltTransformContextPtr ctxt, xmlDocPtr RVT); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltRegisterLocalRVT (xsltTransformContextPtr ctxt, xmlDocPtr RVT); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltRegisterPersistRVT (xsltTransformContextPtr ctxt, xmlDocPtr RVT); XSLTPUBFUN int XSLTCALL @@ -1901,14 +1909,6 @@ XSLTPUBFUN void XSLTCALL XSLTPUBFUN void XSLTCALL xsltReleaseRVT (xsltTransformContextPtr ctxt, xmlDocPtr RVT); -XSLTPUBFUN int XSLTCALL - xsltTransStorageAdd (xsltTransformContextPtr ctxt, - void *id, - void *data); -XSLTPUBFUN void * XSLTCALL - xsltTransStorageRemove (xsltTransformContextPtr ctxt, - void *id); - /* * Extra functions for Attribute Value Templates */ @@ -1935,7 +1935,7 @@ XSLTPUBFUN void XSLTCALL * * ************************************************************************/ -#ifdef XSLT_REFACTORED +#ifdef XSLT_REFACTORED XSLTPUBFUN void XSLTCALL xsltParseSequenceConstructor( xsltCompilerCtxtPtr cctxt, diff --git a/include/reactos/libs/libxslt/xsltconfig.h b/include/reactos/libs/libxslt/xsltconfig.h index d93865c0177..a57b255e28b 100644 --- a/include/reactos/libs/libxslt/xsltconfig.h +++ b/include/reactos/libs/libxslt/xsltconfig.h @@ -20,28 +20,28 @@ extern "C" { * * the version string like "1.2.3" */ -#define LIBXSLT_DOTTED_VERSION "1.1.26" +#define LIBXSLT_DOTTED_VERSION "1.1.28" /** * LIBXSLT_VERSION: * * the version number: 1.2.3 value is 10203 */ -#define LIBXSLT_VERSION 10126 +#define LIBXSLT_VERSION 10128 /** * LIBXSLT_VERSION_STRING: * * the version number string, 1.2.3 value is "10203" */ -#define LIBXSLT_VERSION_STRING "10126" +#define LIBXSLT_VERSION_STRING "10128" /** * LIBXSLT_VERSION_EXTRA: * * extra version information, used to show a CVS compilation */ -#define LIBXSLT_VERSION_EXTRA "-GITv1.1.26" +#define LIBXSLT_VERSION_EXTRA "-GITv1.1.27-16-g9382efe" /** * WITH_XSLT_DEBUG: diff --git a/include/reactos/libs/libxslt/xsltlocale.h b/include/reactos/libs/libxslt/xsltlocale.h index 59343b0aa26..f156ea3dfba 100644 --- a/include/reactos/libs/libxslt/xsltlocale.h +++ b/include/reactos/libs/libxslt/xsltlocale.h @@ -28,7 +28,11 @@ typedef xmlChar xsltLocaleChar; #elif defined(XSLT_LOCALE_WINAPI) -#include +//#include + +#define WIN32_NO_STATUS +#include +#include #include typedef LCID xsltLocale; @@ -53,5 +57,6 @@ xsltLocale xsltNewLocale(const xmlChar *langName); void xsltFreeLocale(xsltLocale locale); xsltLocaleChar *xsltStrxfrm(xsltLocale locale, const xmlChar *string); int xsltLocaleStrcmp(xsltLocale locale, const xsltLocaleChar *str1, const xsltLocaleChar *str2); +void xsltFreeLocales(void); #endif /* __XML_XSLTLOCALE_H__ */ diff --git a/include/reactos/libs/libxslt/xsltutils.h b/include/reactos/libs/libxslt/xsltutils.h index 3886be3448e..a86f8445441 100644 --- a/include/reactos/libs/libxslt/xsltutils.h +++ b/include/reactos/libs/libxslt/xsltutils.h @@ -31,7 +31,7 @@ extern "C" { * * Macro to flag unimplemented blocks. */ -#define XSLT_TODO \ +#define XSLT_TODO \ xsltGenericError(xsltGenericErrorContext, \ "Unimplemented block at %s:%d\n", \ __FILE__, __LINE__); @@ -41,7 +41,7 @@ extern "C" { * * Macro to flag that a problem was detected internally. */ -#define XSLT_STRANGE \ +#define XSLT_STRANGE \ xsltGenericError(xsltGenericErrorContext, \ "Internal error at %s:%d\n", \ __FILE__, __LINE__); @@ -52,8 +52,8 @@ extern "C" { * Checks that the element pertains to XSLT namespace. */ #define IS_XSLT_ELEM(n) \ - (((n) != NULL) && ((n)->ns != NULL) && \ - (xmlStrEqual((n)->ns->href, XSLT_NAMESPACE))) + (((n) != NULL) && ((n)->type == XML_ELEMENT_NODE) && \ + ((n)->ns != NULL) && (xmlStrEqual((n)->ns->href, XSLT_NAMESPACE))) /** * IS_XSLT_NAME: @@ -77,7 +77,7 @@ extern "C" { ((n)->type == XML_DOCUMENT_NODE) || \ ((n)->type == XML_HTML_DOCUMENT_NODE) || \ ((n)->type == XML_COMMENT_NODE) || \ - ((n)->type == XML_PI_NODE))) + ((n)->type == XML_PI_NODE))) /* * Our own version of namespaced atributes lookup. @@ -100,24 +100,24 @@ XSLTPUBFUN int XSLTCALL */ typedef enum { XSLT_TRACE_ALL = -1, - XSLT_TRACE_NONE = 0, - XSLT_TRACE_COPY_TEXT = 1<<0, - XSLT_TRACE_PROCESS_NODE = 1<<1, - XSLT_TRACE_APPLY_TEMPLATE = 1<<2, - XSLT_TRACE_COPY = 1<<3, - XSLT_TRACE_COMMENT = 1<<4, - XSLT_TRACE_PI = 1<<5, - XSLT_TRACE_COPY_OF = 1<<6, - XSLT_TRACE_VALUE_OF = 1<<7, - XSLT_TRACE_CALL_TEMPLATE = 1<<8, - XSLT_TRACE_APPLY_TEMPLATES = 1<<9, - XSLT_TRACE_CHOOSE = 1<<10, - XSLT_TRACE_IF = 1<<11, - XSLT_TRACE_FOR_EACH = 1<<12, - XSLT_TRACE_STRIP_SPACES = 1<<13, - XSLT_TRACE_TEMPLATES = 1<<14, - XSLT_TRACE_KEYS = 1<<15, - XSLT_TRACE_VARIABLES = 1<<16 + XSLT_TRACE_NONE = 0, + XSLT_TRACE_COPY_TEXT = 1<<0, + XSLT_TRACE_PROCESS_NODE = 1<<1, + XSLT_TRACE_APPLY_TEMPLATE = 1<<2, + XSLT_TRACE_COPY = 1<<3, + XSLT_TRACE_COMMENT = 1<<4, + XSLT_TRACE_PI = 1<<5, + XSLT_TRACE_COPY_OF = 1<<6, + XSLT_TRACE_VALUE_OF = 1<<7, + XSLT_TRACE_CALL_TEMPLATE = 1<<8, + XSLT_TRACE_APPLY_TEMPLATES = 1<<9, + XSLT_TRACE_CHOOSE = 1<<10, + XSLT_TRACE_IF = 1<<11, + XSLT_TRACE_FOR_EACH = 1<<12, + XSLT_TRACE_STRIP_SPACES = 1<<13, + XSLT_TRACE_TEMPLATES = 1<<14, + XSLT_TRACE_KEYS = 1<<15, + XSLT_TRACE_VARIABLES = 1<<16 } xsltDebugTraceCodes; /** @@ -142,26 +142,26 @@ XSLTPUBVAR void *xsltGenericErrorContext; XSLTPUBVAR xmlGenericErrorFunc xsltGenericDebug; XSLTPUBVAR void *xsltGenericDebugContext; -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xsltPrintErrorContext (xsltTransformContextPtr ctxt, xsltStylesheetPtr style, xmlNodePtr node); -XSLTPUBFUN void XSLTCALL - xsltMessage (xsltTransformContextPtr ctxt, +XSLTPUBFUN void XSLTCALL + xsltMessage (xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst); -XSLTPUBFUN void XSLTCALL - xsltSetGenericErrorFunc (void *ctx, +XSLTPUBFUN void XSLTCALL + xsltSetGenericErrorFunc (void *ctx, xmlGenericErrorFunc handler); -XSLTPUBFUN void XSLTCALL - xsltSetGenericDebugFunc (void *ctx, +XSLTPUBFUN void XSLTCALL + xsltSetGenericDebugFunc (void *ctx, xmlGenericErrorFunc handler); -XSLTPUBFUN void XSLTCALL - xsltSetTransformErrorFunc (xsltTransformContextPtr ctxt, +XSLTPUBFUN void XSLTCALL + xsltSetTransformErrorFunc (xsltTransformContextPtr ctxt, void *ctx, xmlGenericErrorFunc handler); -XSLTPUBFUN void XSLTCALL - xsltTransformError (xsltTransformContextPtr ctxt, +XSLTPUBFUN void XSLTCALL + xsltTransformError (xsltTransformContextPtr ctxt, xsltStylesheetPtr style, xmlNodePtr node, const char *msg, @@ -174,23 +174,23 @@ XSLTPUBFUN int XSLTCALL * Sorting. */ -XSLTPUBFUN void XSLTCALL - xsltDocumentSortFunction (xmlNodeSetPtr list); -XSLTPUBFUN void XSLTCALL - xsltSetSortFunc (xsltSortFunc handler); -XSLTPUBFUN void XSLTCALL - xsltSetCtxtSortFunc (xsltTransformContextPtr ctxt, +XSLTPUBFUN void XSLTCALL + xsltDocumentSortFunction (xmlNodeSetPtr list); +XSLTPUBFUN void XSLTCALL + xsltSetSortFunc (xsltSortFunc handler); +XSLTPUBFUN void XSLTCALL + xsltSetCtxtSortFunc (xsltTransformContextPtr ctxt, xsltSortFunc handler); -XSLTPUBFUN void XSLTCALL - xsltDefaultSortFunction (xsltTransformContextPtr ctxt, +XSLTPUBFUN void XSLTCALL + xsltDefaultSortFunction (xsltTransformContextPtr ctxt, xmlNodePtr *sorts, int nbsorts); -XSLTPUBFUN void XSLTCALL - xsltDoSortFunction (xsltTransformContextPtr ctxt, +XSLTPUBFUN void XSLTCALL + xsltDoSortFunction (xsltTransformContextPtr ctxt, xmlNodePtr * sorts, int nbsorts); -XSLTPUBFUN xmlXPathObjectPtr * XSLTCALL - xsltComputeSortResult (xsltTransformContextPtr ctxt, +XSLTPUBFUN xmlXPathObjectPtr * XSLTCALL + xsltComputeSortResult (xsltTransformContextPtr ctxt, xmlNodePtr sort); /* @@ -201,8 +201,8 @@ XSLTPUBFUN const xmlChar * XSLTCALL xsltSplitQName (xmlDictPtr dict, const xmlChar *name, const xmlChar **prefix); -XSLTPUBFUN const xmlChar * XSLTCALL - xsltGetQNameURI (xmlNodePtr node, +XSLTPUBFUN const xmlChar * XSLTCALL + xsltGetQNameURI (xmlNodePtr node, xmlChar **name); XSLTPUBFUN const xmlChar * XSLTCALL @@ -213,27 +213,27 @@ XSLTPUBFUN const xmlChar * XSLTCALL /* * Output, reuse libxml I/O buffers. */ -XSLTPUBFUN int XSLTCALL - xsltSaveResultTo (xmlOutputBufferPtr buf, +XSLTPUBFUN int XSLTCALL + xsltSaveResultTo (xmlOutputBufferPtr buf, xmlDocPtr result, xsltStylesheetPtr style); -XSLTPUBFUN int XSLTCALL - xsltSaveResultToFilename (const char *URI, +XSLTPUBFUN int XSLTCALL + xsltSaveResultToFilename (const char *URI, xmlDocPtr result, xsltStylesheetPtr style, int compression); -XSLTPUBFUN int XSLTCALL - xsltSaveResultToFile (FILE *file, +XSLTPUBFUN int XSLTCALL + xsltSaveResultToFile (FILE *file, xmlDocPtr result, xsltStylesheetPtr style); -XSLTPUBFUN int XSLTCALL - xsltSaveResultToFd (int fd, +XSLTPUBFUN int XSLTCALL + xsltSaveResultToFd (int fd, xmlDocPtr result, xsltStylesheetPtr style); -XSLTPUBFUN int XSLTCALL - xsltSaveResultToString (xmlChar **doc_txt_ptr, - int * doc_txt_len, - xmlDocPtr result, +XSLTPUBFUN int XSLTCALL + xsltSaveResultToString (xmlChar **doc_txt_ptr, + int * doc_txt_len, + xmlDocPtr result, xsltStylesheetPtr style); /* @@ -242,20 +242,24 @@ XSLTPUBFUN int XSLTCALL XSLTPUBFUN xmlXPathCompExprPtr XSLTCALL xsltXPathCompile (xsltStylesheetPtr style, const xmlChar *str); +XSLTPUBFUN xmlXPathCompExprPtr XSLTCALL + xsltXPathCompileFlags (xsltStylesheetPtr style, + const xmlChar *str, + int flags); /* * Profiling. */ -XSLTPUBFUN void XSLTCALL - xsltSaveProfiling (xsltTransformContextPtr ctxt, +XSLTPUBFUN void XSLTCALL + xsltSaveProfiling (xsltTransformContextPtr ctxt, FILE *output); -XSLTPUBFUN xmlDocPtr XSLTCALL - xsltGetProfileInformation (xsltTransformContextPtr ctxt); +XSLTPUBFUN xmlDocPtr XSLTCALL + xsltGetProfileInformation (xsltTransformContextPtr ctxt); -XSLTPUBFUN long XSLTCALL - xsltTimestamp (void); -XSLTPUBFUN void XSLTCALL - xsltCalibrateAdjust (long delta); +XSLTPUBFUN long XSLTCALL + xsltTimestamp (void); +XSLTPUBFUN void XSLTCALL + xsltCalibrateAdjust (long delta); /** * XSLT_TIMESTAMP_TICS_PER_SEC: @@ -292,12 +296,12 @@ XSLTPUBFUN void XSLTCALL xsltSetDebuggerStatus (int value); XSLTPUBFUN int XSLTCALL xsltGetDebuggerStatus (void); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xsltSetDebuggerCallbacks (int no, void *block); -XSLTPUBFUN int XSLTCALL +XSLTPUBFUN int XSLTCALL xslAddCall (xsltTemplatePtr templ, xmlNodePtr source); -XSLTPUBFUN void XSLTCALL +XSLTPUBFUN void XSLTCALL xslDropCall (void); #ifdef __cplusplus diff --git a/include/reactos/libs/pseh/pseh3.h b/include/reactos/libs/pseh/pseh3.h index 7e051d645de..dedddf007e3 100644 --- a/include/reactos/libs/pseh/pseh3.h +++ b/include/reactos/libs/pseh/pseh3.h @@ -150,7 +150,7 @@ void * __cdecl __attribute__((error("Can only be used inside an exception filter (__builtin_constant_p(_FilterExpression) ? (void*)(unsigned long)(unsigned char)(unsigned long)(_FilterExpression) : _Filter) #define _SEH3$_DEFINE_DUMMY_FINALLY(_Name) \ - auto inline __attribute__((always_inline,gnu_inline)) int _Name(int Action) { return 0; } + auto inline __attribute__((always_inline,gnu_inline)) int _Name(int Action) { (void)Action; return 0; } #define _SEH3$_DECLARE_CLEANUP_FUNC(_Name) \ auto inline __attribute__((always_inline,gnu_inline)) void _Name(volatile SEH3$_REGISTRATION_FRAME *p) @@ -158,6 +158,7 @@ void * __cdecl __attribute__((error("Can only be used inside an exception filter #define _SEH3$_DEFINE_CLEANUP_FUNC(_Name) \ _SEH3$_DECLARE_CLEANUP_FUNC(_Name) \ { \ + (void)p; \ /* Unregister the frame */ \ if (_SEH3$_TryLevel == 1) _SEH3$_UnregisterFrame(&_SEH3$_TrylevelFrame); \ else _SEH3$_UnregisterTryLevel(&_SEH3$_TrylevelFrame); \ diff --git a/include/reactos/subsys/lsass/lsass.h b/include/reactos/subsys/lsass/lsass.h index 28c4abd1a59..5eb709acdf9 100644 --- a/include/reactos/subsys/lsass/lsass.h +++ b/include/reactos/subsys/lsass/lsass.h @@ -14,132 +14,140 @@ #include #define LSASS_MAX_LOGON_PROCESS_NAME_LENGTH 127 +#define LSASS_MAX_PACKAGE_NAME_LENGTH 127 -#define LSASS_REQUEST_REGISTER_LOGON_PROCESS (1) -#define LSASS_REQUEST_CALL_AUTHENTICATION_PACKAGE (2) -#define LSASS_REQUEST_DEREGISTER_LOGON_PROCESS (3) -#define LSASS_REQUEST_LOGON_USER (4) -#define LSASS_REQUEST_LOOKUP_AUTHENTICATION_PACKAGE (5) -#define LSASS_REQUEST_MAXIMUM (6) - -typedef struct _LSASS_LOOKUP_AUTHENTICATION_PACKAGE_REQUEST +typedef enum _LSA_API_NUMBER { - ULONG PackageNameLength; - WCHAR PackageName[0]; -} LSASS_LOOKUP_AUTHENTICATION_PACKAGE_REQUEST, - *PLSASS_LOOKUP_AUTHENTICATION_PACKAGE_REQUEST; - -typedef struct _LSASS_LOOKUP_AUTHENTICATION_PACKAGE_REPLY -{ - ULONG Package; -} LSASS_LOOKUP_AUTHENTICATION_PACKAGE_REPLY, - *PLSASS_LOOKUP_AUTHENTICATION_PACKAGE_REPLY; - -typedef struct _LSASS_DEREGISTER_LOGON_PROCESS_REQUEST -{ - ULONG Dummy; -} LSASS_DEREGISTER_LOGON_PROCESS_REQUEST, - *PLSASS_DEREGISTER_LOGON_PROCES_REQUEST; - -typedef struct _LSASS_DEREGISTER_LOGON_PROCESS_REPLY -{ - ULONG Dummy; -} LSASS_DEREGISTER_LOGON_PROCESS_REPLY, - *PLSASS_DEREGISTER_LOGON_PROCESS_REPLY; - -typedef struct _LSASS_CALL_AUTHENTICATION_PACKAGE_REQUEST -{ - ULONG AuthenticationPackage; - ULONG InBufferLength; - UCHAR InBuffer[0]; -} LSASS_CALL_AUTHENTICATION_PACKAGE_REQUEST, -*PLSASS_CALL_AUTHENTICATION_PACKAGE_REQUEST; - -typedef struct _LSASS_CALL_AUTHENTICATION_PACKAGE_REPLY -{ - ULONG OutBufferLength; - UCHAR OutBuffer[0]; -} LSASS_CALL_AUTHENTICATION_PACKAGE_REPLY, -*PLSASS_CALL_AUTHENTICATION_PACKAGE_REPLY; - -typedef struct _LSASS_LOGON_USER_REQUEST -{ - ULONG OriginNameLength; - PWSTR OriginName; - SECURITY_LOGON_TYPE LogonType; - ULONG AuthenticationPackage; - PVOID AuthenticationInformation; - ULONG AuthenticationInformationLength; - ULONG LocalGroupsCount; - PSID_AND_ATTRIBUTES LocalGroups; - TOKEN_SOURCE SourceContext; - UCHAR Data[1]; -} LSASS_LOGON_USER_REQUEST, *PLSASS_LOGON_USER_REQUEST; - -typedef struct _LSASS_LOGON_USER_REPLY -{ - PVOID ProfileBuffer; - ULONG ProfileBufferLength; - LUID LogonId; - HANDLE Token; - QUOTA_LIMITS Quotas; - NTSTATUS SubStatus; - UCHAR Data[1]; -} LSASS_LOGON_USER_REPLY, *PLSASS_LOGON_USER_REPLY; - -typedef struct _LSASS_REGISTER_LOGON_PROCESS_REQUEST -{ - ULONG Length; - WCHAR LogonProcessNameBuffer[127]; -} LSASS_REGISTER_LOGON_PROCESS_REQUEST, *PLSASS_REGISTER_LOGON_PROCESS_REQUEST; - -typedef struct _LSASS_REGISTER_LOGON_PROCESS_REPLY -{ - LSA_OPERATIONAL_MODE OperationalMode; -} LSASS_REGISTER_LOGON_PROCESS_REPLY, *PLSASS_REGISTER_LOGON_PROCESS_REPLY; + LSASS_REQUEST_CALL_AUTHENTICATION_PACKAGE, + LSASS_REQUEST_DEREGISTER_LOGON_PROCESS, + LSASS_REQUEST_LOGON_USER, + LSASS_REQUEST_LOOKUP_AUTHENTICATION_PACKAGE, + LSASS_REQUEST_MAXIMUM +} LSA_API_NUMBER, *PLSA_API_NUMBER; -typedef struct _LSASS_CONNECT_DATA +typedef struct _LSA_CONNECTION_INFO { NTSTATUS Status; LSA_OPERATIONAL_MODE OperationalMode; ULONG Length; CHAR LogonProcessNameBuffer[LSASS_MAX_LOGON_PROCESS_NAME_LENGTH + 1]; -} LSASS_CONNECT_DATA, *PLSASS_CONNECT_DATA; +} LSA_CONNECTION_INFO, *PLSA_CONNECTION_INFO; -typedef union _LSASS_REQUEST +typedef struct _LSA_LOGON_USER_MSG { - PORT_MESSAGE Header; - struct { - UCHAR LpcHeader[sizeof(PORT_MESSAGE)]; - ULONG Type; - union + union + { + struct { - LSASS_REGISTER_LOGON_PROCESS_REQUEST RegisterLogonProcessRequest; - LSASS_LOGON_USER_REQUEST LogonUserRequest; - LSASS_CALL_AUTHENTICATION_PACKAGE_REQUEST - CallAuthenticationPackageRequest; - LSASS_DEREGISTER_LOGON_PROCESS_REPLY DeregisterLogonProcessRequest; - LSASS_LOOKUP_AUTHENTICATION_PACKAGE_REQUEST - LookupAuthenticationPackageRequest; - } d; - }; -} LSASS_REQUEST, *PLSASS_REQUEST; + LSA_STRING OriginName; + SECURITY_LOGON_TYPE LogonType; + ULONG AuthenticationPackage; + PVOID AuthenticationInformation; + ULONG AuthenticationInformationLength; + PTOKEN_GROUPS LocalGroups; + ULONG LocalGroupsCount; + TOKEN_SOURCE SourceContext; + } Request; -typedef struct _LSASS_REPLY + struct + { + PVOID ProfileBuffer; + ULONG ProfileBufferLength; + LUID LogonId; + HANDLE Token; + QUOTA_LIMITS Quotas; + NTSTATUS SubStatus; + } Reply; + }; +} LSA_LOGON_USER_MSG, *PLSA_LOGON_USER_MSG; + + +typedef struct _LSA_CALL_AUTHENTICATION_PACKAGE_MSG { - PORT_MESSAGE Header; - NTSTATUS Status; - union - { - LSASS_REGISTER_LOGON_PROCESS_REPLY RegisterLogonProcessReply; - LSASS_LOGON_USER_REPLY LogonUserReply; - LSASS_CALL_AUTHENTICATION_PACKAGE_REPLY CallAuthenticationPackageReply; - LSASS_DEREGISTER_LOGON_PROCESS_REPLY DeregisterLogonProcessReply; - LSASS_LOOKUP_AUTHENTICATION_PACKAGE_REPLY - LookupAuthenticationPackageReply; - } d; -} LSASS_REPLY, *PLSASS_REPLY; + union + { + struct + { +#if 0 + ULONG AuthenticationPackage; + ULONG InBufferLength; + UCHAR InBuffer[0]; +#endif + ULONG AuthenticationPackage; + PVOID ProtocolSubmitBuffer; + ULONG SubmitBufferLength; + } Request; + struct + { +#if 0 + ULONG OutBufferLength; + UCHAR OutBuffer[0]; +#endif + PVOID ProtocolReturnBuffer; + ULONG ReturnBufferLength; + NTSTATUS ProtocolStatus; + } Reply; + }; +} LSA_CALL_AUTHENTICATION_PACKAGE_MSG, *PLSA_CALL_AUTHENTICATION_PACKAGE_MSG; + + +typedef struct _LSA_DEREGISTER_LOGON_PROCESS_MSG +{ + union + { + struct + { + ULONG Dummy; + } Request; + struct + { + ULONG Dummy; + } Reply; + }; +} LSA_DEREGISTER_LOGON_PROCESS_MSG, *PLSA_DEREGISTER_LOGON_PROCESS_MSG; + + +typedef struct _LSA_LOOKUP_AUTHENTICATION_PACKAGE_MSG +{ + union + { + struct + { + ULONG PackageNameLength; + CHAR PackageName[LSASS_MAX_PACKAGE_NAME_LENGTH + 1]; + } Request; + struct + { + ULONG Package; + } Reply; + }; +} LSA_LOOKUP_AUTHENTICATION_PACKAGE_MSG, *PLSA_LOOKUP_AUTHENTICATION_PACKAGE_MSG; + + +typedef struct _LSA_API_MSG +{ + PORT_MESSAGE h; + union + { + LSA_CONNECTION_INFO ConnectInfo; + struct + { + LSA_API_NUMBER ApiNumber; + NTSTATUS Status; + union + { + LSA_LOGON_USER_MSG LogonUser; + LSA_CALL_AUTHENTICATION_PACKAGE_MSG CallAuthenticationPackage; + LSA_DEREGISTER_LOGON_PROCESS_MSG DeregisterLogonProcess; + LSA_LOOKUP_AUTHENTICATION_PACKAGE_MSG LookupAuthenticationPackage; + }; + }; + }; +} LSA_API_MSG, *PLSA_API_MSG; + +#define LSA_PORT_DATA_SIZE(c) (sizeof(ULONG)+sizeof(NTSTATUS)+sizeof(c)) +#define LSA_PORT_MESSAGE_SIZE (sizeof(LSA_API_MSG)) #endif /* __INCLUDE_LSASS_LSASS_H */ diff --git a/include/reactos/wine/CMakeLists.txt b/include/reactos/wine/CMakeLists.txt index f7bc58c49e7..228da16f35f 100644 --- a/include/reactos/wine/CMakeLists.txt +++ b/include/reactos/wine/CMakeLists.txt @@ -1,4 +1,4 @@ add_idl_headers(wineheaders itss.idl) -add_iid_library(itss_guid itss.idl) \ No newline at end of file +add_iid_library(itss_guid itss.idl) diff --git a/include/reactos/wine/debug.h b/include/reactos/wine/debug.h index aba1306a6fd..54ac2c68ac7 100644 --- a/include/reactos/wine/debug.h +++ b/include/reactos/wine/debug.h @@ -245,9 +245,9 @@ static __inline const char *wine_dbgstr_longlong( ULONGLONG ll ) #define WINE_ERR_ON(ch) __WINE_IS_DEBUG_ON(_ERR,&__wine_dbch_##ch) #define WINE_DECLARE_DEBUG_CHANNEL(ch) \ - static struct __wine_debug_channel __wine_dbch_##ch = { ~0, #ch } + static struct __wine_debug_channel __wine_dbch_##ch = { (unsigned char)~0, #ch } #define WINE_DEFAULT_DEBUG_CHANNEL(ch) \ - static struct __wine_debug_channel __wine_dbch_##ch = { ~0, #ch }; \ + static struct __wine_debug_channel __wine_dbch_##ch = { (unsigned char)~0, #ch }; \ static struct __wine_debug_channel * const __wine_dbch___default = &__wine_dbch_##ch #define WINE_DPRINTF wine_dbg_printf diff --git a/include/reactos/wine/wgl.h b/include/reactos/wine/wgl.h new file mode 100644 index 00000000000..d3cfc7e2428 --- /dev/null +++ b/include/reactos/wine/wgl.h @@ -0,0 +1,5081 @@ +/* Automatically generated from http://www.opengl.org/registry/api files; DO NOT EDIT! */ + +#ifndef __WINE_WGL_H +#define __WINE_WGL_H + +#ifndef GLAPIENTRY +#define GLAPIENTRY __stdcall +#endif + +typedef unsigned int GLbitfield; +typedef unsigned char GLboolean; +typedef signed char GLbyte; +typedef char GLchar; +typedef char GLcharARB; +typedef double GLclampd; +typedef float GLclampf; +typedef double GLdouble; +typedef unsigned int GLenum; +typedef float GLfloat; +typedef unsigned short GLhalfNV; +typedef unsigned int GLhandleARB; +typedef int GLint; +typedef INT64 GLint64; +typedef INT_PTR GLintptr; +typedef INT_PTR GLintptrARB; +typedef short GLshort; +typedef int GLsizei; +typedef INT_PTR GLsizeiptr; +typedef INT_PTR GLsizeiptrARB; +typedef const unsigned char * GLstring; +typedef struct __GLsync * GLsync; +typedef unsigned char GLubyte; +typedef unsigned int GLuint; +typedef UINT64 GLuint64; +typedef unsigned short GLushort; +typedef INT_PTR GLvdpauSurfaceNV; +typedef void GLvoid; + +#define GL_1PASS_EXT 0x80A1 +#define GL_1PASS_SGIS 0x80A1 +#define GL_2D 0x0600 +#define GL_2PASS_0_EXT 0x80A2 +#define GL_2PASS_0_SGIS 0x80A2 +#define GL_2PASS_1_EXT 0x80A3 +#define GL_2PASS_1_SGIS 0x80A3 +#define GL_2X_BIT_ATI 0x00000001 +#define GL_2_BYTES 0x1407 +#define GL_3D 0x0601 +#define GL_3DC_XY_AMD 0x87FA +#define GL_3DC_X_AMD 0x87F9 +#define GL_3D_COLOR 0x0602 +#define GL_3D_COLOR_TEXTURE 0x0603 +#define GL_3_BYTES 0x1408 +#define GL_422_AVERAGE_EXT 0x80CE +#define GL_422_EXT 0x80CC +#define GL_422_REV_AVERAGE_EXT 0x80CF +#define GL_422_REV_EXT 0x80CD +#define GL_4D_COLOR_TEXTURE 0x0604 +#define GL_4PASS_0_EXT 0x80A4 +#define GL_4PASS_0_SGIS 0x80A4 +#define GL_4PASS_1_EXT 0x80A5 +#define GL_4PASS_1_SGIS 0x80A5 +#define GL_4PASS_2_EXT 0x80A6 +#define GL_4PASS_2_SGIS 0x80A6 +#define GL_4PASS_3_EXT 0x80A7 +#define GL_4PASS_3_SGIS 0x80A7 +#define GL_4X_BIT_ATI 0x00000002 +#define GL_4_BYTES 0x1409 +#define GL_8X_BIT_ATI 0x00000004 +#define GL_ABGR_EXT 0x8000 +#define GL_ACCUM 0x0100 +#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD +#define GL_ACCUM_ALPHA_BITS 0x0D5B +#define GL_ACCUM_BLUE_BITS 0x0D5A +#define GL_ACCUM_BUFFER_BIT 0x00000200 +#define GL_ACCUM_CLEAR_VALUE 0x0B80 +#define GL_ACCUM_GREEN_BITS 0x0D59 +#define GL_ACCUM_RED_BITS 0x0D58 +#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_ACTIVE_PROGRAM 0x8259 +#define GL_ACTIVE_PROGRAM_EXT 0x8B8D +#define GL_ACTIVE_RESOURCES 0x92F5 +#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 +#define GL_ACTIVE_SUBROUTINES 0x8DE5 +#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 +#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 +#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_ACTIVE_VARIABLES 0x9305 +#define GL_ACTIVE_VARYINGS_NV 0x8C81 +#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 +#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 +#define GL_ADD 0x0104 +#define GL_ADD_ATI 0x8963 +#define GL_ADD_BLEND_IMG 0x8C09 +#define GL_ADD_SIGNED 0x8574 +#define GL_ADD_SIGNED_ARB 0x8574 +#define GL_ADD_SIGNED_EXT 0x8574 +#define GL_ADJACENT_PAIRS_NV 0x90AE +#define GL_AFFINE_2D_NV 0x9092 +#define GL_AFFINE_3D_NV 0x9094 +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 +#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 +#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E +#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F +#define GL_ALL_ATTRIB_BITS 0xFFFFFFFF +#define GL_ALL_BARRIER_BITS 0xFFFFFFFF +#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_ALL_SHADER_BITS 0xFFFFFFFF +#define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF +#define GL_ALPHA 0x1906 +#define GL_ALPHA12 0x803D +#define GL_ALPHA12_EXT 0x803D +#define GL_ALPHA16 0x803E +#define GL_ALPHA16F_ARB 0x881C +#define GL_ALPHA16I_EXT 0x8D8A +#define GL_ALPHA16UI_EXT 0x8D78 +#define GL_ALPHA16_EXT 0x803E +#define GL_ALPHA16_SNORM 0x9018 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_ALPHA32I_EXT 0x8D84 +#define GL_ALPHA32UI_EXT 0x8D72 +#define GL_ALPHA4 0x803B +#define GL_ALPHA4_EXT 0x803B +#define GL_ALPHA8 0x803C +#define GL_ALPHA8I_EXT 0x8D90 +#define GL_ALPHA8UI_EXT 0x8D7E +#define GL_ALPHA8_EXT 0x803C +#define GL_ALPHA8_SNORM 0x9014 +#define GL_ALPHA_BIAS 0x0D1D +#define GL_ALPHA_BITS 0x0D55 +#define GL_ALPHA_FLOAT16_APPLE 0x881C +#define GL_ALPHA_FLOAT16_ATI 0x881C +#define GL_ALPHA_FLOAT32_APPLE 0x8816 +#define GL_ALPHA_FLOAT32_ATI 0x8816 +#define GL_ALPHA_INTEGER 0x8D97 +#define GL_ALPHA_INTEGER_EXT 0x8D97 +#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 +#define GL_ALPHA_MAX_SGIX 0x8321 +#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 +#define GL_ALPHA_MIN_SGIX 0x8320 +#define GL_ALPHA_SCALE 0x0D1C +#define GL_ALPHA_SNORM 0x9010 +#define GL_ALPHA_TEST 0x0BC0 +#define GL_ALPHA_TEST_FUNC 0x0BC1 +#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 +#define GL_ALPHA_TEST_QCOM 0x0BC0 +#define GL_ALPHA_TEST_REF 0x0BC2 +#define GL_ALPHA_TEST_REF_QCOM 0x0BC2 +#define GL_ALREADY_SIGNALED 0x911A +#define GL_ALREADY_SIGNALED_APPLE 0x911A +#define GL_ALWAYS 0x0207 +#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C +#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D +#define GL_AMBIENT 0x1200 +#define GL_AMBIENT_AND_DIFFUSE 0x1602 +#define GL_AND 0x1501 +#define GL_AND_INVERTED 0x1504 +#define GL_AND_REVERSE 0x1502 +#define GL_ANY_SAMPLES_PASSED 0x8C2F +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A +#define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F +#define GL_ARC_TO_NV 0xFE +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 +#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 +#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 +#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 +#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 +#define GL_ARRAY_SIZE 0x92FB +#define GL_ARRAY_STRIDE 0x92FE +#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D +#define GL_ASYNC_HISTOGRAM_SGIX 0x832C +#define GL_ASYNC_MARKER_SGIX 0x8329 +#define GL_ASYNC_READ_PIXELS_SGIX 0x835E +#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C +#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 +#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE +#define GL_ATC_RGB_AMD 0x8C92 +#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 +#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 +#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 +#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 +#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 +#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 +#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 +#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ATTENUATION_EXT 0x834D +#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 +#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 +#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 +#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 +#define GL_ATTRIB_STACK_DEPTH 0x0BB0 +#define GL_AUTO_GENERATE_MIPMAP 0x8295 +#define GL_AUTO_NORMAL 0x0D80 +#define GL_AUX0 0x0409 +#define GL_AUX1 0x040A +#define GL_AUX2 0x040B +#define GL_AUX3 0x040C +#define GL_AUX_BUFFERS 0x0C00 +#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 +#define GL_AVERAGE_EXT 0x8335 +#define GL_AVERAGE_HP 0x8160 +#define GL_BACK 0x0405 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_NORMALS_HINT_PGI 0x1A223 +#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 +#define GL_BACK_RIGHT 0x0403 +#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 +#define GL_BEVEL_NV 0x90A6 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_BGRA_EXT 0x80E1 +#define GL_BGRA_INTEGER 0x8D9B +#define GL_BGRA_INTEGER_EXT 0x8D9B +#define GL_BGR_EXT 0x80E0 +#define GL_BGR_INTEGER 0x8D9A +#define GL_BGR_INTEGER_EXT 0x8D9A +#define GL_BIAS_BIT_ATI 0x00000008 +#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 +#define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0 +#define GL_BINORMAL_ARRAY_EXT 0x843A +#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 +#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 +#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 +#define GL_BITMAP 0x1A00 +#define GL_BITMAP_TOKEN 0x0704 +#define GL_BLEND 0x0BE2 +#define GL_BLEND_COLOR 0x8005 +#define GL_BLEND_COLOR_EXT 0x8005 +#define GL_BLEND_DST 0x0BE0 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_DST_ALPHA_EXT 0x80CA +#define GL_BLEND_DST_ALPHA_OES 0x80CA +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_DST_RGB_EXT 0x80C8 +#define GL_BLEND_DST_RGB_OES 0x80C8 +#define GL_BLEND_EQUATION 0x8009 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D +#define GL_BLEND_EQUATION_ALPHA_OES 0x883D +#define GL_BLEND_EQUATION_EXT 0x8009 +#define GL_BLEND_EQUATION_OES 0x8009 +#define GL_BLEND_EQUATION_RGB 0x8009 +#define GL_BLEND_EQUATION_RGB_EXT 0x8009 +#define GL_BLEND_EQUATION_RGB_OES 0x8009 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_BLEND_SRC_ALPHA_EXT 0x80CB +#define GL_BLEND_SRC_ALPHA_OES 0x80CB +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_SRC_RGB_EXT 0x80C9 +#define GL_BLEND_SRC_RGB_OES 0x80C9 +#define GL_BLOCK_INDEX 0x92FD +#define GL_BLUE 0x1905 +#define GL_BLUE_BIAS 0x0D1B +#define GL_BLUE_BITS 0x0D54 +#define GL_BLUE_BIT_ATI 0x00000004 +#define GL_BLUE_INTEGER 0x8D96 +#define GL_BLUE_INTEGER_EXT 0x8D96 +#define GL_BLUE_MAX_CLAMP_INGR 0x8566 +#define GL_BLUE_MIN_CLAMP_INGR 0x8562 +#define GL_BLUE_SCALE 0x0D1A +#define GL_BOLD_BIT_NV 0x01 +#define GL_BOOL 0x8B56 +#define GL_BOOL_ARB 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC2_ARB 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC3_ARB 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_BOOL_VEC4_ARB 0x8B59 +#define GL_BOUNDING_BOX_NV 0x908D +#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C +#define GL_BUFFER 0x82E0 +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_ACCESS_ARB 0x88BB +#define GL_BUFFER_ACCESS_FLAGS 0x911F +#define GL_BUFFER_ACCESS_OES 0x88BB +#define GL_BUFFER_BINDING 0x9302 +#define GL_BUFFER_DATA_SIZE 0x9303 +#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 +#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAPPED_ARB 0x88BC +#define GL_BUFFER_MAPPED_OES 0x88BC +#define GL_BUFFER_MAP_LENGTH 0x9120 +#define GL_BUFFER_MAP_OFFSET 0x9121 +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_BUFFER_MAP_POINTER_ARB 0x88BD +#define GL_BUFFER_MAP_POINTER_OES 0x88BD +#define GL_BUFFER_OBJECT_APPLE 0x85B3 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_SIZE_ARB 0x8764 +#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 +#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 +#define GL_BUFFER_USAGE 0x8765 +#define GL_BUFFER_USAGE_ARB 0x8765 +#define GL_BUFFER_VARIABLE 0x92E5 +#define GL_BUMP_ENVMAP_ATI 0x877B +#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 +#define GL_BUMP_ROT_MATRIX_ATI 0x8775 +#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 +#define GL_BUMP_TARGET_ATI 0x877C +#define GL_BUMP_TEX_UNITS_ATI 0x8778 +#define GL_BYTE 0x1400 +#define GL_C3F_V3F 0x2A24 +#define GL_C4F_N3F_V3F 0x2A26 +#define GL_C4UB_V2F 0x2A22 +#define GL_C4UB_V3F 0x2A23 +#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 +#define GL_CAVEAT_SUPPORT 0x82B8 +#define GL_CCW 0x0901 +#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 +#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA +#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC +#define GL_CLAMP 0x2900 +#define GL_CLAMP_FRAGMENT_COLOR 0x891B +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B +#define GL_CLAMP_READ_COLOR 0x891C +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_CLAMP_TO_BORDER_ARB 0x812D +#define GL_CLAMP_TO_BORDER_SGIS 0x812D +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_CLAMP_TO_EDGE_SGIS 0x812F +#define GL_CLAMP_VERTEX_COLOR 0x891A +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#define GL_CLEAR 0x1500 +#define GL_CLEAR_BUFFER 0x82B4 +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF +#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 +#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 +#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 +#define GL_CLIP_DISTANCE0 0x3000 +#define GL_CLIP_DISTANCE1 0x3001 +#define GL_CLIP_DISTANCE2 0x3002 +#define GL_CLIP_DISTANCE3 0x3003 +#define GL_CLIP_DISTANCE4 0x3004 +#define GL_CLIP_DISTANCE5 0x3005 +#define GL_CLIP_DISTANCE6 0x3006 +#define GL_CLIP_DISTANCE7 0x3007 +#define GL_CLIP_DISTANCE_NV 0x8C7A +#define GL_CLIP_FAR_HINT_PGI 0x1A221 +#define GL_CLIP_NEAR_HINT_PGI 0x1A220 +#define GL_CLIP_PLANE0 0x3000 +#define GL_CLIP_PLANE1 0x3001 +#define GL_CLIP_PLANE2 0x3002 +#define GL_CLIP_PLANE3 0x3003 +#define GL_CLIP_PLANE4 0x3004 +#define GL_CLIP_PLANE5 0x3005 +#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 +#define GL_CLOSE_PATH_NV 0x00 +#define GL_CMYKA_EXT 0x800D +#define GL_CMYK_EXT 0x800C +#define GL_CND0_ATI 0x896B +#define GL_CND_ATI 0x896A +#define GL_COEFF 0x0A00 +#define GL_COLOR 0x1800 +#define GL_COLOR3_BIT_PGI 0x00010000 +#define GL_COLOR4_BIT_PGI 0x00020000 +#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 +#define GL_COLOR_ARRAY 0x8076 +#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 +#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 +#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 +#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 +#define GL_COLOR_ARRAY_EXT 0x8076 +#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D +#define GL_COLOR_ARRAY_LIST_IBM 103072 +#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 +#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 +#define GL_COLOR_ARRAY_POINTER 0x8090 +#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 +#define GL_COLOR_ARRAY_SIZE 0x8081 +#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 +#define GL_COLOR_ARRAY_STRIDE 0x8083 +#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 +#define GL_COLOR_ARRAY_TYPE 0x8082 +#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT0_NV 0x8CE0 +#define GL_COLOR_ATTACHMENT0_OES 0x8CE0 +#define GL_COLOR_ATTACHMENT1 0x8CE1 +#define GL_COLOR_ATTACHMENT10 0x8CEA +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT10_NV 0x8CEA +#define GL_COLOR_ATTACHMENT11 0x8CEB +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT11_NV 0x8CEB +#define GL_COLOR_ATTACHMENT12 0x8CEC +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT12_NV 0x8CEC +#define GL_COLOR_ATTACHMENT13 0x8CED +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT13_NV 0x8CED +#define GL_COLOR_ATTACHMENT14 0x8CEE +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT14_NV 0x8CEE +#define GL_COLOR_ATTACHMENT15 0x8CEF +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_COLOR_ATTACHMENT15_NV 0x8CEF +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT1_NV 0x8CE1 +#define GL_COLOR_ATTACHMENT2 0x8CE2 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT2_NV 0x8CE2 +#define GL_COLOR_ATTACHMENT3 0x8CE3 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT3_NV 0x8CE3 +#define GL_COLOR_ATTACHMENT4 0x8CE4 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT4_NV 0x8CE4 +#define GL_COLOR_ATTACHMENT5 0x8CE5 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT5_NV 0x8CE5 +#define GL_COLOR_ATTACHMENT6 0x8CE6 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT6_NV 0x8CE6 +#define GL_COLOR_ATTACHMENT7 0x8CE7 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT7_NV 0x8CE7 +#define GL_COLOR_ATTACHMENT8 0x8CE8 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT8_NV 0x8CE8 +#define GL_COLOR_ATTACHMENT9 0x8CE9 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT9_NV 0x8CE9 +#define GL_COLOR_ATTACHMENT_EXT 0x90F0 +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_COMPONENTS 0x8283 +#define GL_COLOR_ENCODING 0x8296 +#define GL_COLOR_EXT 0x1800 +#define GL_COLOR_FLOAT_APPLE 0x8A0F +#define GL_COLOR_INDEX 0x1900 +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 +#define GL_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_INDEXES 0x1603 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_COLOR_MATERIAL 0x0B57 +#define GL_COLOR_MATERIAL_FACE 0x0B55 +#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 +#define GL_COLOR_MATRIX 0x80B1 +#define GL_COLOR_MATRIX_SGI 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 +#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 +#define GL_COLOR_RENDERABLE 0x8286 +#define GL_COLOR_SAMPLES_NV 0x8E20 +#define GL_COLOR_SUM 0x8458 +#define GL_COLOR_SUM_ARB 0x8458 +#define GL_COLOR_SUM_CLAMP_NV 0x854F +#define GL_COLOR_SUM_EXT 0x8458 +#define GL_COLOR_TABLE 0x80D0 +#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD +#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD +#define GL_COLOR_TABLE_BIAS 0x80D7 +#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 +#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC +#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC +#define GL_COLOR_TABLE_FORMAT 0x80D8 +#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 +#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB +#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB +#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF +#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF +#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE +#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE +#define GL_COLOR_TABLE_RED_SIZE 0x80DA +#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA +#define GL_COLOR_TABLE_SCALE 0x80D6 +#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 +#define GL_COLOR_TABLE_SGI 0x80D0 +#define GL_COLOR_TABLE_WIDTH 0x80D9 +#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_COMBINE 0x8570 +#define GL_COMBINE4_NV 0x8503 +#define GL_COMBINER0_NV 0x8550 +#define GL_COMBINER1_NV 0x8551 +#define GL_COMBINER2_NV 0x8552 +#define GL_COMBINER3_NV 0x8553 +#define GL_COMBINER4_NV 0x8554 +#define GL_COMBINER5_NV 0x8555 +#define GL_COMBINER6_NV 0x8556 +#define GL_COMBINER7_NV 0x8557 +#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 +#define GL_COMBINER_AB_OUTPUT_NV 0x854A +#define GL_COMBINER_BIAS_NV 0x8549 +#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 +#define GL_COMBINER_CD_OUTPUT_NV 0x854B +#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 +#define GL_COMBINER_INPUT_NV 0x8542 +#define GL_COMBINER_MAPPING_NV 0x8543 +#define GL_COMBINER_MUX_SUM_NV 0x8547 +#define GL_COMBINER_SCALE_NV 0x8548 +#define GL_COMBINER_SUM_OUTPUT_NV 0x854C +#define GL_COMBINE_ALPHA 0x8572 +#define GL_COMBINE_ALPHA_ARB 0x8572 +#define GL_COMBINE_ALPHA_EXT 0x8572 +#define GL_COMBINE_ARB 0x8570 +#define GL_COMBINE_EXT 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_RGB_ARB 0x8571 +#define GL_COMBINE_RGB_EXT 0x8571 +#define GL_COMMAND_BARRIER_BIT 0x00000040 +#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 +#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E +#define GL_COMPARE_REF_TO_TEXTURE 0x884E +#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E +#define GL_COMPARE_R_TO_TEXTURE 0x884E +#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E +#define GL_COMPATIBLE_SUBROUTINES 0x8E4B +#define GL_COMPILE 0x1300 +#define GL_COMPILE_AND_EXECUTE 0x1301 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_ALPHA_ARB 0x84E9 +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMPRESSED_INTENSITY_ARB 0x84EC +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB +#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 +#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA +#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 +#define GL_COMPRESSED_R11_EAC 0x9270 +#define GL_COMPRESSED_RED 0x8225 +#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD +#define GL_COMPRESSED_RED_RGTC1 0x8DBB +#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB +#define GL_COMPRESSED_RG 0x8226 +#define GL_COMPRESSED_RG11_EAC 0x9272 +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGB8_ETC2 0x9274 +#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 +#define GL_COMPRESSED_RGBA_ARB 0x84EE +#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C +#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 +#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 +#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 +#define GL_COMPRESSED_RGB_ARB 0x84ED +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F +#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 +#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 +#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RG_RGTC2 0x8DBD +#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 +#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 +#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 +#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE +#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC +#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC +#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 +#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE +#define GL_COMPRESSED_SLUMINANCE 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B +#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B +#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 +#define GL_COMPRESSED_SRGB8_ETC2 0x9275 +#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D +#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +#define GL_COMPRESSED_SRGB_EXT 0x8C48 +#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 +#define GL_COMPUTE_LOCAL_WORK_SIZE 0x8267 +#define GL_COMPUTE_SHADER 0x91B9 +#define GL_COMPUTE_SHADER_BIT 0x00000020 +#define GL_COMPUTE_SUBROUTINE 0x92ED +#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 +#define GL_COMPUTE_TEXTURE 0x82A0 +#define GL_COMP_BIT_ATI 0x00000002 +#define GL_CONDITION_SATISFIED 0x911C +#define GL_CONDITION_SATISFIED_APPLE 0x911C +#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD +#define GL_CONSTANT 0x8576 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_CONSTANT_ALPHA_EXT 0x8003 +#define GL_CONSTANT_ARB 0x8576 +#define GL_CONSTANT_ATTENUATION 0x1207 +#define GL_CONSTANT_BORDER 0x8151 +#define GL_CONSTANT_BORDER_HP 0x8151 +#define GL_CONSTANT_COLOR 0x8001 +#define GL_CONSTANT_COLOR0_NV 0x852A +#define GL_CONSTANT_COLOR1_NV 0x852B +#define GL_CONSTANT_COLOR_EXT 0x8001 +#define GL_CONSTANT_EXT 0x8576 +#define GL_CONST_EYE_NV 0x86E5 +#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 +#define GL_CONTEXT_FLAGS 0x821E +#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 +#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001 +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define GL_CONTEXT_PROFILE_MASK 0x9126 +#define GL_CONTINUOUS_AMD 0x9007 +#define GL_CONVEX_HULL_NV 0x908B +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_1D_EXT 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_CONVOLUTION_2D_EXT 0x8011 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 +#define GL_CONVOLUTION_BORDER_MODE 0x8013 +#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 +#define GL_CONVOLUTION_FILTER_BIAS 0x8015 +#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 +#define GL_CONVOLUTION_FILTER_SCALE 0x8014 +#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 +#define GL_CONVOLUTION_FORMAT 0x8017 +#define GL_CONVOLUTION_FORMAT_EXT 0x8017 +#define GL_CONVOLUTION_HEIGHT 0x8019 +#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 +#define GL_CONVOLUTION_HINT_SGIX 0x8316 +#define GL_CONVOLUTION_WIDTH 0x8018 +#define GL_CONVOLUTION_WIDTH_EXT 0x8018 +#define GL_CON_0_ATI 0x8941 +#define GL_CON_10_ATI 0x894B +#define GL_CON_11_ATI 0x894C +#define GL_CON_12_ATI 0x894D +#define GL_CON_13_ATI 0x894E +#define GL_CON_14_ATI 0x894F +#define GL_CON_15_ATI 0x8950 +#define GL_CON_16_ATI 0x8951 +#define GL_CON_17_ATI 0x8952 +#define GL_CON_18_ATI 0x8953 +#define GL_CON_19_ATI 0x8954 +#define GL_CON_1_ATI 0x8942 +#define GL_CON_20_ATI 0x8955 +#define GL_CON_21_ATI 0x8956 +#define GL_CON_22_ATI 0x8957 +#define GL_CON_23_ATI 0x8958 +#define GL_CON_24_ATI 0x8959 +#define GL_CON_25_ATI 0x895A +#define GL_CON_26_ATI 0x895B +#define GL_CON_27_ATI 0x895C +#define GL_CON_28_ATI 0x895D +#define GL_CON_29_ATI 0x895E +#define GL_CON_2_ATI 0x8943 +#define GL_CON_30_ATI 0x895F +#define GL_CON_31_ATI 0x8960 +#define GL_CON_3_ATI 0x8944 +#define GL_CON_4_ATI 0x8945 +#define GL_CON_5_ATI 0x8946 +#define GL_CON_6_ATI 0x8947 +#define GL_CON_7_ATI 0x8948 +#define GL_CON_8_ATI 0x8949 +#define GL_CON_9_ATI 0x894A +#define GL_COORD_REPLACE 0x8862 +#define GL_COORD_REPLACE_ARB 0x8862 +#define GL_COORD_REPLACE_NV 0x8862 +#define GL_COPY 0x1503 +#define GL_COPY_INVERTED 0x150C +#define GL_COPY_PIXEL_TOKEN 0x0706 +#define GL_COPY_READ_BUFFER_BINDING 0x8F36 +#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 +#define GL_COUNTER_RANGE_AMD 0x8BC1 +#define GL_COUNTER_TYPE_AMD 0x8BC0 +#define GL_COUNT_DOWN_NV 0x9089 +#define GL_COUNT_UP_NV 0x9088 +#define GL_COVERAGE_ALL_FRAGMENTS_NV 0x8ED5 +#define GL_COVERAGE_ATTACHMENT_NV 0x8ED2 +#define GL_COVERAGE_AUTOMATIC_NV 0x8ED7 +#define GL_COVERAGE_BUFFERS_NV 0x8ED3 +#define GL_COVERAGE_BUFFER_BIT_NV 0x00008000 +#define GL_COVERAGE_COMPONENT4_NV 0x8ED1 +#define GL_COVERAGE_COMPONENT_NV 0x8ED0 +#define GL_COVERAGE_EDGE_FRAGMENTS_NV 0x8ED6 +#define GL_COVERAGE_SAMPLES_NV 0x80A9 +#define GL_CPU_OPTIMIZED_QCOM 0x8FB1 +#define GL_CUBIC_CURVE_TO_NV 0x0C +#define GL_CUBIC_EXT 0x8334 +#define GL_CUBIC_HP 0x815F +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_CULL_FRAGMENT_NV 0x86E7 +#define GL_CULL_MODES_NV 0x86E0 +#define GL_CULL_VERTEX_EXT 0x81AA +#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB +#define GL_CULL_VERTEX_IBM 103050 +#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC +#define GL_CURRENT_ATTRIB_NV 0x8626 +#define GL_CURRENT_BINORMAL_EXT 0x843C +#define GL_CURRENT_BIT 0x00000001 +#define GL_CURRENT_COLOR 0x0B00 +#define GL_CURRENT_FOG_COORD 0x8453 +#define GL_CURRENT_FOG_COORDINATE 0x8453 +#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 +#define GL_CURRENT_INDEX 0x0B01 +#define GL_CURRENT_MATRIX_ARB 0x8641 +#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 +#define GL_CURRENT_MATRIX_NV 0x8641 +#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 +#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 +#define GL_CURRENT_NORMAL 0x0B02 +#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 +#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 +#define GL_CURRENT_PALETTE_MATRIX_OES 0x8843 +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_CURRENT_QUERY 0x8865 +#define GL_CURRENT_QUERY_ARB 0x8865 +#define GL_CURRENT_QUERY_EXT 0x8865 +#define GL_CURRENT_RASTER_COLOR 0x0B04 +#define GL_CURRENT_RASTER_DISTANCE 0x0B09 +#define GL_CURRENT_RASTER_INDEX 0x0B05 +#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 +#define GL_CURRENT_RASTER_POSITION 0x0B07 +#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 +#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F +#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 +#define GL_CURRENT_SECONDARY_COLOR 0x8459 +#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 +#define GL_CURRENT_TANGENT_EXT 0x843B +#define GL_CURRENT_TEXTURE_COORDS 0x0B03 +#define GL_CURRENT_TIME_NV 0x8E28 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 +#define GL_CURRENT_VERTEX_EXT 0x87E2 +#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B +#define GL_CURRENT_WEIGHT_ARB 0x86A8 +#define GL_CW 0x0900 +#define GL_DATA_BUFFER_AMD 0x9151 +#define GL_DEBUG_ASSERT_MESA 0x875B +#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 +#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 +#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 +#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 +#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F +#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B +#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 +#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D +#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E +#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C +#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A +#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D +#define GL_DEBUG_LOGGED_MESSAGES 0x9145 +#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 +#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 +#define GL_DEBUG_OBJECT_MESA 0x8759 +#define GL_DEBUG_OUTPUT 0x92E0 +#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 +#define GL_DEBUG_PRINT_MESA 0x875A +#define GL_DEBUG_SEVERITY_HIGH 0x9146 +#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 +#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 +#define GL_DEBUG_SEVERITY_LOW 0x9148 +#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 +#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 +#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 +#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 +#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 +#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B +#define GL_DEBUG_SOURCE_API 0x8246 +#define GL_DEBUG_SOURCE_API_ARB 0x8246 +#define GL_DEBUG_SOURCE_APPLICATION 0x824A +#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A +#define GL_DEBUG_SOURCE_OTHER 0x824B +#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B +#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 +#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D +#define GL_DEBUG_TYPE_ERROR 0x824C +#define GL_DEBUG_TYPE_ERROR_ARB 0x824C +#define GL_DEBUG_TYPE_MARKER 0x8268 +#define GL_DEBUG_TYPE_OTHER 0x8251 +#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 +#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 +#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 +#define GL_DEBUG_TYPE_POP_GROUP 0x826A +#define GL_DEBUG_TYPE_PORTABILITY 0x824F +#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F +#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E +#define GL_DECAL 0x2101 +#define GL_DECODE_EXT 0x8A49 +#define GL_DECR 0x1E03 +#define GL_DECR_WRAP 0x8508 +#define GL_DECR_WRAP_EXT 0x8508 +#define GL_DECR_WRAP_OES 0x8508 +#define GL_DEFORMATIONS_MASK_SGIX 0x8196 +#define GL_DELETE_STATUS 0x8B80 +#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 +#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA +#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 +#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 +#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A +#define GL_DEPTH 0x1801 +#define GL_DEPTH24_STENCIL8 0x88F0 +#define GL_DEPTH24_STENCIL8_EXT 0x88F0 +#define GL_DEPTH24_STENCIL8_OES 0x88F0 +#define GL_DEPTH32F_STENCIL8 0x8CAD +#define GL_DEPTH32F_STENCIL8_NV 0x8DAC +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_DEPTH_ATTACHMENT_OES 0x8D00 +#define GL_DEPTH_BIAS 0x0D1F +#define GL_DEPTH_BITS 0x0D56 +#define GL_DEPTH_BOUNDS_EXT 0x8891 +#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF +#define GL_DEPTH_CLAMP 0x864F +#define GL_DEPTH_CLAMP_FAR_AMD 0x901F +#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E +#define GL_DEPTH_CLAMP_NV 0x864F +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT16_ARB 0x81A5 +#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C +#define GL_DEPTH_COMPONENT16_OES 0x81A5 +#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT24_ARB 0x81A6 +#define GL_DEPTH_COMPONENT24_OES 0x81A6 +#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_DEPTH_COMPONENT32F 0x8CAC +#define GL_DEPTH_COMPONENT32F_NV 0x8DAB +#define GL_DEPTH_COMPONENT32_ARB 0x81A7 +#define GL_DEPTH_COMPONENT32_OES 0x81A7 +#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 +#define GL_DEPTH_COMPONENTS 0x8284 +#define GL_DEPTH_EXT 0x1801 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311 +#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312 +#define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_RENDERABLE 0x8287 +#define GL_DEPTH_SCALE 0x0D1E +#define GL_DEPTH_STENCIL 0x84F9 +#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A +#define GL_DEPTH_STENCIL_EXT 0x84F9 +#define GL_DEPTH_STENCIL_MESA 0x8750 +#define GL_DEPTH_STENCIL_NV 0x84F9 +#define GL_DEPTH_STENCIL_OES 0x84F9 +#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA +#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F +#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E +#define GL_DEPTH_TEST 0x0B71 +#define GL_DEPTH_TEXTURE_MODE 0x884B +#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 +#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 +#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C +#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A +#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B +#define GL_DIFFUSE 0x1201 +#define GL_DISCARD_ATI 0x8763 +#define GL_DISCARD_NV 0x8530 +#define GL_DISCRETE_AMD 0x9006 +#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE +#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF +#define GL_DISPLAY_LIST 0x82E7 +#define GL_DISTANCE_ATTENUATION_EXT 0x8129 +#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 +#define GL_DITHER 0x0BD0 +#define GL_DOMAIN 0x0A02 +#define GL_DONT_CARE 0x1100 +#define GL_DOT2_ADD_ATI 0x896C +#define GL_DOT3_ATI 0x8966 +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +#define GL_DOT3_RGBA_ARB 0x86AF +#define GL_DOT3_RGBA_EXT 0x8741 +#define GL_DOT3_RGBA_IMG 0x86AF +#define GL_DOT3_RGB_ARB 0x86AE +#define GL_DOT3_RGB_EXT 0x8740 +#define GL_DOT4_ATI 0x8967 +#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D +#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 +#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED +#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 +#define GL_DOT_PRODUCT_NV 0x86EC +#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B +#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 +#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C +#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE +#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF +#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 +#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E +#define GL_DOUBLE 0x140A +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_DOUBLE_EXT 0x140A +#define GL_DOUBLE_MAT2 0x8F46 +#define GL_DOUBLE_MAT2_EXT 0x8F46 +#define GL_DOUBLE_MAT3 0x8F47 +#define GL_DOUBLE_MAT3_EXT 0x8F47 +#define GL_DOUBLE_MAT4 0x8F48 +#define GL_DOUBLE_MAT4_EXT 0x8F48 +#define GL_DOUBLE_VEC2 0x8FFC +#define GL_DOUBLE_VEC2_EXT 0x8FFC +#define GL_DOUBLE_VEC3 0x8FFD +#define GL_DOUBLE_VEC3_EXT 0x8FFD +#define GL_DOUBLE_VEC4 0x8FFE +#define GL_DOUBLE_VEC4_EXT 0x8FFE +#define GL_DRAW_BUFFER 0x0C01 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER0_ARB 0x8825 +#define GL_DRAW_BUFFER0_ATI 0x8825 +#define GL_DRAW_BUFFER0_NV 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER10_ARB 0x882F +#define GL_DRAW_BUFFER10_ATI 0x882F +#define GL_DRAW_BUFFER10_NV 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER11_ARB 0x8830 +#define GL_DRAW_BUFFER11_ATI 0x8830 +#define GL_DRAW_BUFFER11_NV 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER12_ARB 0x8831 +#define GL_DRAW_BUFFER12_ATI 0x8831 +#define GL_DRAW_BUFFER12_NV 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER13_ARB 0x8832 +#define GL_DRAW_BUFFER13_ATI 0x8832 +#define GL_DRAW_BUFFER13_NV 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER14_ARB 0x8833 +#define GL_DRAW_BUFFER14_ATI 0x8833 +#define GL_DRAW_BUFFER14_NV 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_DRAW_BUFFER15_ARB 0x8834 +#define GL_DRAW_BUFFER15_ATI 0x8834 +#define GL_DRAW_BUFFER15_NV 0x8834 +#define GL_DRAW_BUFFER1_ARB 0x8826 +#define GL_DRAW_BUFFER1_ATI 0x8826 +#define GL_DRAW_BUFFER1_NV 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER2_ARB 0x8827 +#define GL_DRAW_BUFFER2_ATI 0x8827 +#define GL_DRAW_BUFFER2_NV 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER3_ARB 0x8828 +#define GL_DRAW_BUFFER3_ATI 0x8828 +#define GL_DRAW_BUFFER3_NV 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER4_ARB 0x8829 +#define GL_DRAW_BUFFER4_ATI 0x8829 +#define GL_DRAW_BUFFER4_NV 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER5_ARB 0x882A +#define GL_DRAW_BUFFER5_ATI 0x882A +#define GL_DRAW_BUFFER5_NV 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER6_ARB 0x882B +#define GL_DRAW_BUFFER6_ATI 0x882B +#define GL_DRAW_BUFFER6_NV 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER7_ARB 0x882C +#define GL_DRAW_BUFFER7_ATI 0x882C +#define GL_DRAW_BUFFER7_NV 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER8_ARB 0x882D +#define GL_DRAW_BUFFER8_ATI 0x882D +#define GL_DRAW_BUFFER8_NV 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER9_ARB 0x882E +#define GL_DRAW_BUFFER9_ATI 0x882E +#define GL_DRAW_BUFFER9_NV 0x882E +#define GL_DRAW_BUFFER_EXT 0x0C01 +#define GL_DRAW_FRAMEBUFFER 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 +#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 +#define GL_DRAW_INDIRECT_BUFFER 0x8F3F +#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 +#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 +#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 +#define GL_DRAW_PIXELS_APPLE 0x8A0A +#define GL_DRAW_PIXEL_TOKEN 0x0705 +#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B +#define GL_DSDT8_MAG8_NV 0x870A +#define GL_DSDT8_NV 0x8709 +#define GL_DSDT_MAG_INTENSITY_NV 0x86DC +#define GL_DSDT_MAG_NV 0x86F6 +#define GL_DSDT_MAG_VIB_NV 0x86F7 +#define GL_DSDT_NV 0x86F5 +#define GL_DST_ALPHA 0x0304 +#define GL_DST_COLOR 0x0306 +#define GL_DS_BIAS_NV 0x8716 +#define GL_DS_SCALE_NV 0x8710 +#define GL_DT_BIAS_NV 0x8717 +#define GL_DT_SCALE_NV 0x8711 +#define GL_DU8DV8_ATI 0x877A +#define GL_DUAL_ALPHA12_SGIS 0x8112 +#define GL_DUAL_ALPHA16_SGIS 0x8113 +#define GL_DUAL_ALPHA4_SGIS 0x8110 +#define GL_DUAL_ALPHA8_SGIS 0x8111 +#define GL_DUAL_INTENSITY12_SGIS 0x811A +#define GL_DUAL_INTENSITY16_SGIS 0x811B +#define GL_DUAL_INTENSITY4_SGIS 0x8118 +#define GL_DUAL_INTENSITY8_SGIS 0x8119 +#define GL_DUAL_LUMINANCE12_SGIS 0x8116 +#define GL_DUAL_LUMINANCE16_SGIS 0x8117 +#define GL_DUAL_LUMINANCE4_SGIS 0x8114 +#define GL_DUAL_LUMINANCE8_SGIS 0x8115 +#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C +#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D +#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 +#define GL_DUDV_ATI 0x8779 +#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 +#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 +#define GL_DYNAMIC_ATI 0x8761 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_DYNAMIC_COPY_ARB 0x88EA +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_DRAW_ARB 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_DYNAMIC_READ_ARB 0x88E9 +#define GL_EDGEFLAG_BIT_PGI 0x00040000 +#define GL_EDGE_FLAG 0x0B43 +#define GL_EDGE_FLAG_ARRAY 0x8079 +#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B +#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D +#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 +#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 +#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 +#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 +#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 +#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 +#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C +#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C +#define GL_EIGHTH_BIT_ATI 0x00000020 +#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 +#define GL_ELEMENT_ARRAY_APPLE 0x8A0C +#define GL_ELEMENT_ARRAY_ATI 0x8768 +#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 +#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 +#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 +#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E +#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A +#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D +#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 +#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F +#define GL_EMBOSS_CONSTANT_NV 0x855E +#define GL_EMBOSS_LIGHT_NV 0x855D +#define GL_EMBOSS_MAP_NV 0x855F +#define GL_EMISSION 0x1600 +#define GL_ENABLE_BIT 0x00002000 +#define GL_EQUAL 0x0202 +#define GL_EQUIV 0x1509 +#define GL_ETC1_RGB8_OES 0x8D64 +#define GL_EVAL_2D_NV 0x86C0 +#define GL_EVAL_BIT 0x00010000 +#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 +#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 +#define GL_EVAL_VERTEX_ATRRIB0_NV 0x86C6 +#define GL_EVAL_VERTEX_ATRRIB10_NV 0x86D0 +#define GL_EVAL_VERTEX_ATRRIB11_NV 0x86D1 +#define GL_EVAL_VERTEX_ATRRIB12_NV 0x86D2 +#define GL_EVAL_VERTEX_ATRRIB13_NV 0x86D3 +#define GL_EVAL_VERTEX_ATRRIB14_NV 0x86D4 +#define GL_EVAL_VERTEX_ATRRIB15_NV 0x86D5 +#define GL_EVAL_VERTEX_ATRRIB1_NV 0x86C7 +#define GL_EVAL_VERTEX_ATRRIB2_NV 0x86C8 +#define GL_EVAL_VERTEX_ATRRIB3_NV 0x86C9 +#define GL_EVAL_VERTEX_ATRRIB4_NV 0x86CA +#define GL_EVAL_VERTEX_ATRRIB5_NV 0x86CB +#define GL_EVAL_VERTEX_ATRRIB6_NV 0x86CC +#define GL_EVAL_VERTEX_ATRRIB7_NV 0x86CD +#define GL_EVAL_VERTEX_ATRRIB8_NV 0x86CE +#define GL_EVAL_VERTEX_ATRRIB9_NV 0x86CF +#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 +#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 +#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 +#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 +#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 +#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 +#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 +#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 +#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 +#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 +#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA +#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB +#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC +#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD +#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE +#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF +#define GL_EXP 0x0800 +#define GL_EXP2 0x0801 +#define GL_EXPAND_NEGATE_NV 0x8539 +#define GL_EXPAND_NORMAL_NV 0x8538 +#define GL_EXTENSIONS 0x1F03 +#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 +#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 +#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 +#define GL_EYE_LINEAR 0x2400 +#define GL_EYE_LINE_SGIS 0x81F6 +#define GL_EYE_PLANE 0x2502 +#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C +#define GL_EYE_POINT_SGIS 0x81F4 +#define GL_EYE_RADIAL_NV 0x855B +#define GL_E_TIMES_F_NV 0x8531 +#define GL_FACTOR_ALPHA_MODULATE_IMG 0x8C07 +#define GL_FACTOR_MAX_AMD 0x901D +#define GL_FACTOR_MIN_AMD 0x901C +#define GL_FAILURE_NV 0x9030 +#define GL_FALSE 0 +#define GL_FASTEST 0x1101 +#define GL_FEEDBACK 0x1C01 +#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 +#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 +#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 +#define GL_FENCE_APPLE 0x8A0B +#define GL_FENCE_CONDITION_NV 0x84F4 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FIELDS_NV 0x8E27 +#define GL_FIELD_LOWER_NV 0x9023 +#define GL_FIELD_UPPER_NV 0x9022 +#define GL_FILE_NAME_NV 0x9074 +#define GL_FILL 0x1B02 +#define GL_FILTER 0x829A +#define GL_FILTER4_SGIS 0x8146 +#define GL_FIRST_TO_REST_NV 0x90AF +#define GL_FIRST_VERTEX_CONVENTION 0x8E4D +#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D +#define GL_FIXED 0x140C +#define GL_FIXED_OES 0x140C +#define GL_FIXED_ONLY 0x891D +#define GL_FIXED_ONLY_ARB 0x891D +#define GL_FLAT 0x1D00 +#define GL_FLOAT 0x1406 +#define GL_FLOAT16_NV 0x8FF8 +#define GL_FLOAT16_VEC2_NV 0x8FF9 +#define GL_FLOAT16_VEC3_NV 0x8FFA +#define GL_FLOAT16_VEC4_NV 0x8FFB +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD +#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT2_ARB 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT3_ARB 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_FLOAT_MAT4_ARB 0x8B5C +#define GL_FLOAT_R16_NV 0x8884 +#define GL_FLOAT_R32_NV 0x8885 +#define GL_FLOAT_RG16_NV 0x8886 +#define GL_FLOAT_RG32_NV 0x8887 +#define GL_FLOAT_RGB16_NV 0x8888 +#define GL_FLOAT_RGB32_NV 0x8889 +#define GL_FLOAT_RGBA16_NV 0x888A +#define GL_FLOAT_RGBA32_NV 0x888B +#define GL_FLOAT_RGBA_MODE_NV 0x888E +#define GL_FLOAT_RGBA_NV 0x8883 +#define GL_FLOAT_RGB_NV 0x8882 +#define GL_FLOAT_RG_NV 0x8881 +#define GL_FLOAT_R_NV 0x8880 +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC2_ARB 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC3_ARB 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_FLOAT_VEC4_ARB 0x8B52 +#define GL_FOG 0x0B60 +#define GL_FOG_BIT 0x00000080 +#define GL_FOG_COLOR 0x0B66 +#define GL_FOG_COORD 0x8451 +#define GL_FOG_COORDINATE 0x8451 +#define GL_FOG_COORDINATE_ARRAY 0x8457 +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D +#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 +#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 +#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 +#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 +#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 +#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 +#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 +#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 +#define GL_FOG_COORDINATE_EXT 0x8451 +#define GL_FOG_COORDINATE_SOURCE 0x8450 +#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 +#define GL_FOG_COORD_ARRAY 0x8457 +#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 +#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D +#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 +#define GL_FOG_COORD_ARRAY_POINTER 0x8456 +#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORD_ARRAY_TYPE 0x8454 +#define GL_FOG_COORD_SRC 0x8450 +#define GL_FOG_DENSITY 0x0B62 +#define GL_FOG_DISTANCE_MODE_NV 0x855A +#define GL_FOG_END 0x0B64 +#define GL_FOG_FACTOR_TO_ALPHA_SGIX 0x836F +#define GL_FOG_FUNC_POINTS_SGIS 0x812B +#define GL_FOG_FUNC_SGIS 0x812A +#define GL_FOG_GEN_MODE_NV 0x855A +#define GL_FOG_HINT 0x0C54 +#define GL_FOG_INDEX 0x0B61 +#define GL_FOG_MODE 0x0B65 +#define GL_FOG_OFFSET_SGIX 0x8198 +#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 +#define GL_FOG_SCALE_SGIX 0x81FC +#define GL_FOG_SCALE_VALUE_SGIX 0x81FD +#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC +#define GL_FOG_START 0x0B63 +#define GL_FONT_ASCENDER_NV 0x00200000 +#define GL_FONT_DESCENDER_NV 0x00400000 +#define GL_FONT_HAS_KERNING_NV 0x10000000 +#define GL_FONT_HEIGHT_NV 0x00800000 +#define GL_FONT_MAX_ADVANCE_HEIGHT_NV 0x02000000 +#define GL_FONT_MAX_ADVANCE_WIDTH_NV 0x01000000 +#define GL_FONT_UNDERLINE_POSITION_NV 0x04000000 +#define GL_FONT_UNDERLINE_THICKNESS_NV 0x08000000 +#define GL_FONT_UNITS_PER_EM_NV 0x00100000 +#define GL_FONT_X_MAX_BOUNDS_NV 0x00040000 +#define GL_FONT_X_MIN_BOUNDS_NV 0x00010000 +#define GL_FONT_Y_MAX_BOUNDS_NV 0x00080000 +#define GL_FONT_Y_MIN_BOUNDS_NV 0x00020000 +#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 +#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 +#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 +#define GL_FRACTIONAL_EVEN 0x8E7C +#define GL_FRACTIONAL_ODD 0x8E7B +#define GL_FRAGMENTS_INSTRUMENT_COUNTERS_SGIX 0x8314 +#define GL_FRAGMENTS_INSTRUMENT_MAX_SGIX 0x8315 +#define GL_FRAGMENTS_INSTRUMENT_SGIX 0x8313 +#define GL_FRAGMENT_ALPHA_MODULATE_IMG 0x8C08 +#define GL_FRAGMENT_COLOR_EXT 0x834C +#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 +#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 +#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 +#define GL_FRAGMENT_DEPTH 0x8452 +#define GL_FRAGMENT_DEPTH_EXT 0x8452 +#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D +#define GL_FRAGMENT_LIGHT0_SGIX 0x840C +#define GL_FRAGMENT_LIGHT1_SGIX 0x840D +#define GL_FRAGMENT_LIGHT2_SGIX 0x840E +#define GL_FRAGMENT_LIGHT3_SGIX 0x840F +#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 +#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 +#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 +#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 +#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 +#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A +#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 +#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B +#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 +#define GL_FRAGMENT_MATERIAL_EXT 0x8349 +#define GL_FRAGMENT_NORMAL_EXT 0x834A +#define GL_FRAGMENT_PROGRAM_ARB 0x8804 +#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 +#define GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA 0x8BB3 +#define GL_FRAGMENT_PROGRAM_CALLBACK_FUNC_MESA 0x8BB2 +#define GL_FRAGMENT_PROGRAM_CALLBACK_MESA 0x8BB1 +#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D +#define GL_FRAGMENT_PROGRAM_NV 0x8870 +#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 +#define GL_FRAGMENT_PROGRAM_POSITION_MESA 0x8BB0 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_FRAGMENT_SHADER_ARB 0x8B30 +#define GL_FRAGMENT_SHADER_ATI 0x8920 +#define GL_FRAGMENT_SHADER_BIT 0x00000002 +#define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B +#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 +#define GL_FRAGMENT_SUBROUTINE 0x92EC +#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 +#define GL_FRAGMENT_TEXTURE 0x829F +#define GL_FRAMEBUFFER 0x8D40 +#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 +#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 +#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 +#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 +#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C +#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 +#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_FRAMEBUFFER_BINDING_OES 0x8CA6 +#define GL_FRAMEBUFFER_BLEND 0x828B +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_COMPLETE_OES 0x8CD5 +#define GL_FRAMEBUFFER_DEFAULT 0x8218 +#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 +#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 +#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 +#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES 0x8CDC +#define GL_FRAMEBUFFER_OES 0x8D40 +#define GL_FRAMEBUFFER_RENDERABLE 0x8289 +#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A +#define GL_FRAMEBUFFER_SRGB 0x8DB9 +#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#define GL_FRAMEBUFFER_UNDEFINED 0x8219 +#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219 +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_FRAMEBUFFER_UNSUPPORTED_OES 0x8CDD +#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C +#define GL_FRAMEZOOM_SGIX 0x818B +#define GL_FRAME_NV 0x8E26 +#define GL_FRONT 0x0404 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_FRONT_FACE 0x0B46 +#define GL_FRONT_LEFT 0x0400 +#define GL_FRONT_RIGHT 0x0401 +#define GL_FULL_RANGE_EXT 0x87E1 +#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 +#define GL_FULL_SUPPORT 0x82B7 +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_ADD_EXT 0x8006 +#define GL_FUNC_ADD_OES 0x8006 +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B +#define GL_FUNC_REVERSE_SUBTRACT_OES 0x800B +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_SUBTRACT_EXT 0x800A +#define GL_FUNC_SUBTRACT_OES 0x800A +#define GL_GCCSO_SHADER_BINARY_FJ 0x9260 +#define GL_GENERATE_MIPMAP 0x8191 +#define GL_GENERATE_MIPMAP_HINT 0x8192 +#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 +#define GL_GENERATE_MIPMAP_SGIS 0x8191 +#define GL_GENERIC_ATTRIB_NV 0x8C7D +#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 +#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 +#define GL_GEOMETRY_INPUT_TYPE 0x8917 +#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB +#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 +#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC +#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC +#define GL_GEOMETRY_PROGRAM_NV 0x8C26 +#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 +#define GL_GEOMETRY_SHADER 0x8DD9 +#define GL_GEOMETRY_SHADER_ARB 0x8DD9 +#define GL_GEOMETRY_SHADER_BIT 0x00000004 +#define GL_GEOMETRY_SHADER_EXT 0x8DD9 +#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F +#define GL_GEOMETRY_SUBROUTINE 0x92EB +#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 +#define GL_GEOMETRY_TEXTURE 0x829E +#define GL_GEOMETRY_VERTICES_OUT 0x8916 +#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA +#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA +#define GL_GEQUAL 0x0206 +#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 +#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 +#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA +#define GL_GLOBAL_ALPHA_SUN 0x81D9 +#define GL_GLYPH_HAS_KERNING_NV 0x100 +#define GL_GLYPH_HEIGHT_BIT_NV 0x02 +#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 +#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 +#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 +#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 +#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 +#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 +#define GL_GLYPH_WIDTH_BIT_NV 0x01 +#define GL_GPU_ADDRESS_NV 0x8F34 +#define GL_GPU_OPTIMIZED_QCOM 0x8FB2 +#define GL_GREATER 0x0204 +#define GL_GREEN 0x1904 +#define GL_GREEN_BIAS 0x0D19 +#define GL_GREEN_BITS 0x0D53 +#define GL_GREEN_BIT_ATI 0x00000002 +#define GL_GREEN_INTEGER 0x8D95 +#define GL_GREEN_INTEGER_EXT 0x8D95 +#define GL_GREEN_MAX_CLAMP_INGR 0x8565 +#define GL_GREEN_MIN_CLAMP_INGR 0x8561 +#define GL_GREEN_SCALE 0x0D18 +#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 +#define GL_HALF_APPLE 0x140B +#define GL_HALF_BIAS_NEGATE_NV 0x853B +#define GL_HALF_BIAS_NORMAL_NV 0x853A +#define GL_HALF_BIT_ATI 0x00000008 +#define GL_HALF_FLOAT 0x140B +#define GL_HALF_FLOAT_ARB 0x140B +#define GL_HALF_FLOAT_NV 0x140B +#define GL_HALF_FLOAT_OES 0x8D61 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_HIGH_INT 0x8DF5 +#define GL_HILO16_NV 0x86F8 +#define GL_HILO8_NV 0x885E +#define GL_HILO_NV 0x86F4 +#define GL_HINT_BIT 0x00008000 +#define GL_HISTOGRAM 0x8024 +#define GL_HISTOGRAM_ALPHA_SIZE 0x802B +#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B +#define GL_HISTOGRAM_BLUE_SIZE 0x802A +#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A +#define GL_HISTOGRAM_EXT 0x8024 +#define GL_HISTOGRAM_FORMAT 0x8027 +#define GL_HISTOGRAM_FORMAT_EXT 0x8027 +#define GL_HISTOGRAM_GREEN_SIZE 0x8029 +#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 +#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C +#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C +#define GL_HISTOGRAM_RED_SIZE 0x8028 +#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 +#define GL_HISTOGRAM_SINK 0x802D +#define GL_HISTOGRAM_SINK_EXT 0x802D +#define GL_HISTOGRAM_WIDTH 0x8026 +#define GL_HISTOGRAM_WIDTH_EXT 0x8026 +#define GL_HI_BIAS_NV 0x8714 +#define GL_HI_SCALE_NV 0x870E +#define GL_HORIZONTAL_LINE_TO_NV 0x06 +#define GL_IDENTITY_NV 0x862A +#define GL_IGNORE_BORDER_HP 0x8150 +#define GL_IMAGE_1D 0x904C +#define GL_IMAGE_1D_ARRAY 0x9052 +#define GL_IMAGE_1D_ARRAY_EXT 0x9052 +#define GL_IMAGE_1D_EXT 0x904C +#define GL_IMAGE_2D 0x904D +#define GL_IMAGE_2D_ARRAY 0x9053 +#define GL_IMAGE_2D_ARRAY_EXT 0x9053 +#define GL_IMAGE_2D_EXT 0x904D +#define GL_IMAGE_2D_MULTISAMPLE 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 +#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 +#define GL_IMAGE_2D_RECT 0x904F +#define GL_IMAGE_2D_RECT_EXT 0x904F +#define GL_IMAGE_3D 0x904E +#define GL_IMAGE_3D_EXT 0x904E +#define GL_IMAGE_BINDING_ACCESS 0x8F3E +#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E +#define GL_IMAGE_BINDING_FORMAT 0x906E +#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E +#define GL_IMAGE_BINDING_LAYER 0x8F3D +#define GL_IMAGE_BINDING_LAYERED 0x8F3C +#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C +#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D +#define GL_IMAGE_BINDING_LEVEL 0x8F3B +#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B +#define GL_IMAGE_BINDING_NAME 0x8F3A +#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A +#define GL_IMAGE_BUFFER 0x9051 +#define GL_IMAGE_BUFFER_EXT 0x9051 +#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 +#define GL_IMAGE_CLASS_11_11_10 0x82C2 +#define GL_IMAGE_CLASS_1_X_16 0x82BE +#define GL_IMAGE_CLASS_1_X_32 0x82BB +#define GL_IMAGE_CLASS_1_X_8 0x82C1 +#define GL_IMAGE_CLASS_2_X_16 0x82BD +#define GL_IMAGE_CLASS_2_X_32 0x82BA +#define GL_IMAGE_CLASS_2_X_8 0x82C0 +#define GL_IMAGE_CLASS_4_X_16 0x82BC +#define GL_IMAGE_CLASS_4_X_32 0x82B9 +#define GL_IMAGE_CLASS_4_X_8 0x82BF +#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 +#define GL_IMAGE_CUBE 0x9050 +#define GL_IMAGE_CUBE_EXT 0x9050 +#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 +#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 +#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 +#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 +#define GL_IMAGE_MAG_FILTER_HP 0x815C +#define GL_IMAGE_MIN_FILTER_HP 0x815D +#define GL_IMAGE_PIXEL_FORMAT 0x82A9 +#define GL_IMAGE_PIXEL_TYPE 0x82AA +#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 +#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A +#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B +#define GL_IMAGE_SCALE_X_HP 0x8155 +#define GL_IMAGE_SCALE_Y_HP 0x8156 +#define GL_IMAGE_TEXEL_SIZE 0x82A7 +#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 +#define GL_IMAGE_TRANSLATE_X_HP 0x8157 +#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A +#define GL_INCR 0x1E02 +#define GL_INCR_WRAP 0x8507 +#define GL_INCR_WRAP_EXT 0x8507 +#define GL_INCR_WRAP_OES 0x8507 +#define GL_INDEX 0x8222 +#define GL_INDEX_ARRAY 0x8077 +#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 +#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 +#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 +#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 +#define GL_INDEX_ARRAY_EXT 0x8077 +#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E +#define GL_INDEX_ARRAY_LIST_IBM 103073 +#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 +#define GL_INDEX_ARRAY_POINTER 0x8091 +#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 +#define GL_INDEX_ARRAY_STRIDE 0x8086 +#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 +#define GL_INDEX_ARRAY_TYPE 0x8085 +#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 +#define GL_INDEX_BITS 0x0D51 +#define GL_INDEX_BIT_PGI 0x00080000 +#define GL_INDEX_CLEAR_VALUE 0x0C20 +#define GL_INDEX_LOGIC_OP 0x0BF1 +#define GL_INDEX_MATERIAL_EXT 0x81B8 +#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA +#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 +#define GL_INDEX_MODE 0x0C30 +#define GL_INDEX_OFFSET 0x0D13 +#define GL_INDEX_SHIFT 0x0D12 +#define GL_INDEX_TEST_EXT 0x81B5 +#define GL_INDEX_TEST_FUNC_EXT 0x81B6 +#define GL_INDEX_TEST_REF_EXT 0x81B7 +#define GL_INDEX_WRITEMASK 0x0C21 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 +#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 +#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 +#define GL_INT 0x1404 +#define GL_INT16_NV 0x8FE4 +#define GL_INT16_VEC2_NV 0x8FE5 +#define GL_INT16_VEC3_NV 0x8FE6 +#define GL_INT16_VEC4_NV 0x8FE7 +#define GL_INT64_NV 0x140E +#define GL_INT64_VEC2_NV 0x8FE9 +#define GL_INT64_VEC3_NV 0x8FEA +#define GL_INT64_VEC4_NV 0x8FEB +#define GL_INT8_NV 0x8FE0 +#define GL_INT8_VEC2_NV 0x8FE1 +#define GL_INT8_VEC3_NV 0x8FE2 +#define GL_INT8_VEC4_NV 0x8FE3 +#define GL_INTENSITY 0x8049 +#define GL_INTENSITY12 0x804C +#define GL_INTENSITY12_EXT 0x804C +#define GL_INTENSITY16 0x804D +#define GL_INTENSITY16F_ARB 0x881D +#define GL_INTENSITY16I_EXT 0x8D8B +#define GL_INTENSITY16UI_EXT 0x8D79 +#define GL_INTENSITY16_EXT 0x804D +#define GL_INTENSITY16_SNORM 0x901B +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_INTENSITY32I_EXT 0x8D85 +#define GL_INTENSITY32UI_EXT 0x8D73 +#define GL_INTENSITY4 0x804A +#define GL_INTENSITY4_EXT 0x804A +#define GL_INTENSITY8 0x804B +#define GL_INTENSITY8I_EXT 0x8D91 +#define GL_INTENSITY8UI_EXT 0x8D7F +#define GL_INTENSITY8_EXT 0x804B +#define GL_INTENSITY8_SNORM 0x9017 +#define GL_INTENSITY_EXT 0x8049 +#define GL_INTENSITY_FLOAT16_APPLE 0x881D +#define GL_INTENSITY_FLOAT16_ATI 0x881D +#define GL_INTENSITY_FLOAT32_APPLE 0x8817 +#define GL_INTENSITY_FLOAT32_ATI 0x8817 +#define GL_INTENSITY_SNORM 0x9013 +#define GL_INTERLACE_OML 0x8980 +#define GL_INTERLACE_READ_INGR 0x8568 +#define GL_INTERLACE_READ_OML 0x8981 +#define GL_INTERLACE_SGIX 0x8094 +#define GL_INTERLEAVED_ATTRIBS 0x8C8C +#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C +#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C +#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 +#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B +#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 +#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A +#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 +#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C +#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 +#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 +#define GL_INTERNALFORMAT_PREFERRED 0x8270 +#define GL_INTERNALFORMAT_RED_SIZE 0x8271 +#define GL_INTERNALFORMAT_RED_TYPE 0x8278 +#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 +#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 +#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D +#define GL_INTERNALFORMAT_SUPPORTED 0x826F +#define GL_INTERPOLATE 0x8575 +#define GL_INTERPOLATE_ARB 0x8575 +#define GL_INTERPOLATE_EXT 0x8575 +#define GL_INT_10_10_10_2_OES 0x8DF7 +#define GL_INT_2_10_10_10_REV 0x8D9F +#define GL_INT_IMAGE_1D 0x9057 +#define GL_INT_IMAGE_1D_ARRAY 0x905D +#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D +#define GL_INT_IMAGE_1D_EXT 0x9057 +#define GL_INT_IMAGE_2D 0x9058 +#define GL_INT_IMAGE_2D_ARRAY 0x905E +#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E +#define GL_INT_IMAGE_2D_EXT 0x9058 +#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 +#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 +#define GL_INT_IMAGE_2D_RECT 0x905A +#define GL_INT_IMAGE_2D_RECT_EXT 0x905A +#define GL_INT_IMAGE_3D 0x9059 +#define GL_INT_IMAGE_3D_EXT 0x9059 +#define GL_INT_IMAGE_BUFFER 0x905C +#define GL_INT_IMAGE_BUFFER_EXT 0x905C +#define GL_INT_IMAGE_CUBE 0x905B +#define GL_INT_IMAGE_CUBE_EXT 0x905B +#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F +#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F +#define GL_INT_SAMPLER_1D 0x8DC9 +#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE +#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE +#define GL_INT_SAMPLER_1D_EXT 0x8DC9 +#define GL_INT_SAMPLER_2D 0x8DCA +#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF +#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF +#define GL_INT_SAMPLER_2D_EXT 0x8DCA +#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C +#define GL_INT_SAMPLER_2D_RECT 0x8DCD +#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD +#define GL_INT_SAMPLER_3D 0x8DCB +#define GL_INT_SAMPLER_3D_EXT 0x8DCB +#define GL_INT_SAMPLER_BUFFER 0x8DD0 +#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 +#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 +#define GL_INT_SAMPLER_CUBE 0x8DCC +#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E +#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC2_ARB 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC3_ARB 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_INT_VEC4_ARB 0x8B55 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_INVALID_FRAMEBUFFER_OPERATION_OES 0x0506 +#define GL_INVALID_INDEX 0xFFFFFFFFu +#define GL_INVALID_OPERATION 0x0502 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVARIANT_DATATYPE_EXT 0x87EB +#define GL_INVARIANT_EXT 0x87C2 +#define GL_INVARIANT_VALUE_EXT 0x87EA +#define GL_INVERSE_NV 0x862B +#define GL_INVERSE_TRANSPOSE_NV 0x862D +#define GL_INVERT 0x150A +#define GL_INVERTED_SCREEN_W_REND 0x8491 +#define GL_IR_INSTRUMENT1_SGIX 0x817F +#define GL_ISOLINES 0x8E7A +#define GL_IS_PER_PATCH 0x92E7 +#define GL_IS_ROW_MAJOR 0x9300 +#define GL_ITALIC_BIT_NV 0x02 +#define GL_IUI_N3F_V2F_EXT 0x81AF +#define GL_IUI_N3F_V3F_EXT 0x81B0 +#define GL_IUI_V2F_EXT 0x81AD +#define GL_IUI_V3F_EXT 0x81AE +#define GL_KEEP 0x1E00 +#define GL_LARGE_CCW_ARC_TO_NV 0x16 +#define GL_LARGE_CW_ARC_TO_NV 0x18 +#define GL_LAST_VERTEX_CONVENTION 0x8E4E +#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E +#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 +#define GL_LAYER_NV 0x8DAA +#define GL_LAYER_PROVOKING_VERTEX 0x825E +#define GL_LEFT 0x0406 +#define GL_LEQUAL 0x0203 +#define GL_LERP_ATI 0x8969 +#define GL_LESS 0x0201 +#define GL_LIGHT0 0x4000 +#define GL_LIGHT1 0x4001 +#define GL_LIGHT2 0x4002 +#define GL_LIGHT3 0x4003 +#define GL_LIGHT4 0x4004 +#define GL_LIGHT5 0x4005 +#define GL_LIGHT6 0x4006 +#define GL_LIGHT7 0x4007 +#define GL_LIGHTING 0x0B50 +#define GL_LIGHTING_BIT 0x00000040 +#define GL_LIGHT_ENV_MODE_SGIX 0x8407 +#define GL_LIGHT_MODEL_AMBIENT 0x0B53 +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 +#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 +#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 +#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 +#define GL_LINE 0x1B01 +#define GL_LINEAR 0x2601 +#define GL_LINEAR_ATTENUATION 0x1208 +#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 +#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F +#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 +#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 +#define GL_LINEAR_DETAIL_SGIS 0x8097 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE +#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF +#define GL_LINEAR_SHARPEN_SGIS 0x80AD +#define GL_LINES 0x0001 +#define GL_LINES_ADJACENCY 0x000A +#define GL_LINES_ADJACENCY_ARB 0x000A +#define GL_LINES_ADJACENCY_EXT 0x000A +#define GL_LINE_BIT 0x00000004 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_QUALITY_HINT_SGIX 0x835B +#define GL_LINE_RESET_TOKEN 0x0707 +#define GL_LINE_SMOOTH 0x0B20 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_LINE_STIPPLE 0x0B24 +#define GL_LINE_STIPPLE_PATTERN 0x0B25 +#define GL_LINE_STIPPLE_REPEAT 0x0B26 +#define GL_LINE_STRIP 0x0003 +#define GL_LINE_STRIP_ADJACENCY 0x000B +#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B +#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B +#define GL_LINE_TOKEN 0x0702 +#define GL_LINE_TO_NV 0x04 +#define GL_LINE_WIDTH 0x0B21 +#define GL_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_LINE_WIDTH_RANGE 0x0B22 +#define GL_LINK_STATUS 0x8B82 +#define GL_LIST_BASE 0x0B32 +#define GL_LIST_BIT 0x00020000 +#define GL_LIST_INDEX 0x0B33 +#define GL_LIST_MODE 0x0B30 +#define GL_LIST_PRIORITY_SGIX 0x8182 +#define GL_LOAD 0x0101 +#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED +#define GL_LOCAL_CONSTANT_EXT 0x87C3 +#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC +#define GL_LOCAL_EXT 0x87C4 +#define GL_LOCATION 0x930E +#define GL_LOCATION_INDEX 0x930F +#define GL_LOGIC_OP 0x0BF1 +#define GL_LOGIC_OP_MODE 0x0BF0 +#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_LOW_FLOAT 0x8DF0 +#define GL_LOW_INT 0x8DF3 +#define GL_LO_BIAS_NV 0x8715 +#define GL_LO_SCALE_NV 0x870F +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE12 0x8041 +#define GL_LUMINANCE12_ALPHA12 0x8047 +#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 +#define GL_LUMINANCE12_ALPHA4 0x8046 +#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 +#define GL_LUMINANCE12_EXT 0x8041 +#define GL_LUMINANCE16 0x8042 +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE16I_EXT 0x8D8C +#define GL_LUMINANCE16UI_EXT 0x8D7A +#define GL_LUMINANCE16_ALPHA16 0x8048 +#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 +#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A +#define GL_LUMINANCE16_EXT 0x8042 +#define GL_LUMINANCE16_SNORM 0x9019 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE32I_EXT 0x8D86 +#define GL_LUMINANCE32UI_EXT 0x8D74 +#define GL_LUMINANCE4 0x803F +#define GL_LUMINANCE4_ALPHA4 0x8043 +#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 +#define GL_LUMINANCE4_EXT 0x803F +#define GL_LUMINANCE6_ALPHA2 0x8044 +#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 +#define GL_LUMINANCE8 0x8040 +#define GL_LUMINANCE8I_EXT 0x8D92 +#define GL_LUMINANCE8UI_EXT 0x8D80 +#define GL_LUMINANCE8_ALPHA8 0x8045 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE8_SNORM 0x9015 +#define GL_LUMINANCE_ALPHA 0x190A +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D +#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 +#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 +#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 +#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 +#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F +#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F +#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 +#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 +#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D +#define GL_LUMINANCE_ALPHA_SNORM 0x9012 +#define GL_LUMINANCE_FLOAT16_APPLE 0x881E +#define GL_LUMINANCE_FLOAT16_ATI 0x881E +#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 +#define GL_LUMINANCE_FLOAT32_ATI 0x8818 +#define GL_LUMINANCE_INTEGER_EXT 0x8D9C +#define GL_LUMINANCE_SNORM 0x9011 +#define GL_MAD_ATI 0x8968 +#define GL_MAGNITUDE_BIAS_NV 0x8718 +#define GL_MAGNITUDE_SCALE_NV 0x8712 +#define GL_MAJOR_VERSION 0x821B +#define GL_MALI_SHADER_BINARY_ARM 0x8F60 +#define GL_MANUAL_GENERATE_MIPMAP 0x8294 +#define GL_MAP1_BINORMAL_EXT 0x8446 +#define GL_MAP1_COLOR_4 0x0D90 +#define GL_MAP1_GRID_DOMAIN 0x0DD0 +#define GL_MAP1_GRID_SEGMENTS 0x0DD1 +#define GL_MAP1_INDEX 0x0D91 +#define GL_MAP1_NORMAL 0x0D92 +#define GL_MAP1_TANGENT_EXT 0x8444 +#define GL_MAP1_TEXTURE_COORD_1 0x0D93 +#define GL_MAP1_TEXTURE_COORD_2 0x0D94 +#define GL_MAP1_TEXTURE_COORD_3 0x0D95 +#define GL_MAP1_TEXTURE_COORD_4 0x0D96 +#define GL_MAP1_VERTEX_3 0x0D97 +#define GL_MAP1_VERTEX_4 0x0D98 +#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 +#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A +#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B +#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C +#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D +#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E +#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F +#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 +#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 +#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 +#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 +#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 +#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 +#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 +#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 +#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 +#define GL_MAP2_BINORMAL_EXT 0x8447 +#define GL_MAP2_COLOR_4 0x0DB0 +#define GL_MAP2_GRID_DOMAIN 0x0DD2 +#define GL_MAP2_GRID_SEGMENTS 0x0DD3 +#define GL_MAP2_INDEX 0x0DB1 +#define GL_MAP2_NORMAL 0x0DB2 +#define GL_MAP2_TANGENT_EXT 0x8445 +#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 +#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 +#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 +#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 +#define GL_MAP2_VERTEX_3 0x0DB7 +#define GL_MAP2_VERTEX_4 0x0DB8 +#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 +#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A +#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B +#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C +#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D +#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E +#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F +#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 +#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 +#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 +#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 +#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 +#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 +#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 +#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 +#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 +#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 +#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 +#define GL_MAP_COLOR 0x0D10 +#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 +#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 +#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 +#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 +#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 +#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_READ_BIT_EXT 0x0001 +#define GL_MAP_STENCIL 0x0D11 +#define GL_MAP_TESSELLATION_NV 0x86C2 +#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 +#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MAP_WRITE_BIT_EXT 0x0002 +#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C +#define GL_MATRIX0_ARB 0x88C0 +#define GL_MATRIX0_NV 0x8630 +#define GL_MATRIX10_ARB 0x88CA +#define GL_MATRIX11_ARB 0x88CB +#define GL_MATRIX12_ARB 0x88CC +#define GL_MATRIX13_ARB 0x88CD +#define GL_MATRIX14_ARB 0x88CE +#define GL_MATRIX15_ARB 0x88CF +#define GL_MATRIX16_ARB 0x88D0 +#define GL_MATRIX17_ARB 0x88D1 +#define GL_MATRIX18_ARB 0x88D2 +#define GL_MATRIX19_ARB 0x88D3 +#define GL_MATRIX1_ARB 0x88C1 +#define GL_MATRIX1_NV 0x8631 +#define GL_MATRIX20_ARB 0x88D4 +#define GL_MATRIX21_ARB 0x88D5 +#define GL_MATRIX22_ARB 0x88D6 +#define GL_MATRIX23_ARB 0x88D7 +#define GL_MATRIX24_ARB 0x88D8 +#define GL_MATRIX25_ARB 0x88D9 +#define GL_MATRIX26_ARB 0x88DA +#define GL_MATRIX27_ARB 0x88DB +#define GL_MATRIX28_ARB 0x88DC +#define GL_MATRIX29_ARB 0x88DD +#define GL_MATRIX2_ARB 0x88C2 +#define GL_MATRIX2_NV 0x8632 +#define GL_MATRIX30_ARB 0x88DE +#define GL_MATRIX31_ARB 0x88DF +#define GL_MATRIX3_ARB 0x88C3 +#define GL_MATRIX3_NV 0x8633 +#define GL_MATRIX4_ARB 0x88C4 +#define GL_MATRIX4_NV 0x8634 +#define GL_MATRIX5_ARB 0x88C5 +#define GL_MATRIX5_NV 0x8635 +#define GL_MATRIX6_ARB 0x88C6 +#define GL_MATRIX6_NV 0x8636 +#define GL_MATRIX7_ARB 0x88C7 +#define GL_MATRIX7_NV 0x8637 +#define GL_MATRIX8_ARB 0x88C8 +#define GL_MATRIX9_ARB 0x88C9 +#define GL_MATRIX_EXT 0x87C0 +#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 +#define GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES 0x8B9E +#define GL_MATRIX_INDEX_ARRAY_OES 0x8844 +#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 +#define GL_MATRIX_INDEX_ARRAY_POINTER_OES 0x8849 +#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 +#define GL_MATRIX_INDEX_ARRAY_SIZE_OES 0x8846 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_OES 0x8848 +#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 +#define GL_MATRIX_INDEX_ARRAY_TYPE_OES 0x8847 +#define GL_MATRIX_MODE 0x0BA0 +#define GL_MATRIX_PALETTE_ARB 0x8840 +#define GL_MATRIX_PALETTE_OES 0x8840 +#define GL_MATRIX_STRIDE 0x92FF +#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 +#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 +#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 +#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 +#define GL_MAT_EMISSION_BIT_PGI 0x00800000 +#define GL_MAT_SHININESS_BIT_PGI 0x02000000 +#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 +#define GL_MAX 0x8008 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 +#define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 +#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 +#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 +#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF +#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF +#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 +#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D +#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 +#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F +#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC +#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 +#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 +#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED +#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B +#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 +#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 +#define GL_MAX_CLIP_DISTANCES 0x0D32 +#define GL_MAX_CLIP_PLANES 0x0D32 +#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 +#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E +#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 +#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 +#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 +#define GL_MAX_COMBINED_DIMENSIONS 0x8282 +#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 +#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 +#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D +#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E +#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 +#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 +#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 +#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD +#define GL_MAX_COMPUTE_LOCAL_INVOCATIONS 0x90EB +#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB +#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 +#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC +#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB +#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 +#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE +#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF +#define GL_MAX_CONVOLUTION_HEIGHT 0x801B +#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B +#define GL_MAX_CONVOLUTION_WIDTH 0x801A +#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES 0x851C +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C +#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 +#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 +#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 +#define GL_MAX_DEPTH 0x8280 +#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 +#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 +#define GL_MAX_DRAW_BUFFERS_NV 0x8824 +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 +#define GL_MAX_ELEMENT_INDEX 0x8D6B +#define GL_MAX_EVAL_ORDER 0x0D30 +#define GL_MAX_EXT 0x8008 +#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C +#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 +#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 +#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 +#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE +#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C +#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 +#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 +#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA +#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 +#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 +#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 +#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 +#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D +#define GL_MAX_GENERAL_COMBINERS_NV 0x854D +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF +#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 +#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD +#define GL_MAX_HEIGHT 0x827F +#define GL_MAX_IMAGE_SAMPLES 0x906D +#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D +#define GL_MAX_IMAGE_UNITS 0x8F38 +#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 +#define GL_MAX_INTEGER_SAMPLES 0x9110 +#define GL_MAX_LABEL_LENGTH 0x82E8 +#define GL_MAX_LAYERS 0x8281 +#define GL_MAX_LIGHTS 0x0D31 +#define GL_MAX_LIST_NESTING 0x0B31 +#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 +#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 +#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 +#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 +#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 +#define GL_MAX_NAME_LENGTH 0x92F6 +#define GL_MAX_NAME_STACK_DEPTH 0x0D37 +#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 +#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB +#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 +#define GL_MAX_PALETTE_MATRICES_OES 0x8842 +#define GL_MAX_PATCH_VERTICES 0x8E7D +#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 +#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 +#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 +#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 +#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B +#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD +#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 +#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 +#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 +#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 +#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 +#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 +#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 +#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 +#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F +#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E +#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 +#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E +#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF +#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 +#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB +#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 +#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 +#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F +#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 +#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 +#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 +#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 +#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 +#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 +#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 +#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 +#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS 0x8F9F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F +#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D +#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C +#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 +#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 +#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_MAX_RENDERBUFFER_SIZE_OES 0x84E8 +#define GL_MAX_SAMPLES 0x8D57 +#define GL_MAX_SAMPLES_ANGLE 0x8D57 +#define GL_MAX_SAMPLES_EXT 0x8D57 +#define GL_MAX_SAMPLES_IMG 0x9135 +#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 +#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 +#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 +#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 +#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 +#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE +#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD +#define GL_MAX_SHININESS_NV 0x8504 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A +#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 +#define GL_MAX_SPOT_EXPONENT_NV 0x8505 +#define GL_MAX_SUBROUTINES 0x8DE7 +#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 +#define GL_MAX_TESS_GEN_LEVEL 0x8E7E +#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 +#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B +#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B +#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B +#define GL_MAX_TEXTURE_COORDS 0x8871 +#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 +#define GL_MAX_TEXTURE_COORDS_NV 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 +#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 +#define GL_MAX_TRACK_MATRICES_NV 0x862F +#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E +#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 +#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 +#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F +#define GL_MAX_UNIFORM_LOCATIONS 0x826E +#define GL_MAX_VARYING_COMPONENTS 0x8B4B +#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 +#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 +#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 +#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA +#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 +#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 +#define GL_MAX_VERTEX_HINT_PGI 0x1A22D +#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA +#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 +#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 +#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 +#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 +#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 +#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 +#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 +#define GL_MAX_VERTEX_STREAMS 0x8E71 +#define GL_MAX_VERTEX_STREAMS_ATI 0x876B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C +#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 +#define GL_MAX_VERTEX_UNITS_OES 0x86A4 +#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE +#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE +#define GL_MAX_VIEWPORTS 0x825B +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_MAX_WIDTH 0x827E +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_MIN 0x8007 +#define GL_MINMAX 0x802E +#define GL_MINMAX_EXT 0x802E +#define GL_MINMAX_FORMAT 0x802F +#define GL_MINMAX_FORMAT_EXT 0x802F +#define GL_MINMAX_SINK 0x8030 +#define GL_MINMAX_SINK_EXT 0x8030 +#define GL_MINOR_VERSION 0x821C +#define GL_MIN_EXT 0x8007 +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B +#define GL_MIN_LOD_WARNING_AMD 0x919C +#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC +#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E +#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 +#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 +#define GL_MIN_SPARSE_LEVEL_AMD 0x919B +#define GL_MIPMAP 0x8293 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_MIRRORED_REPEAT_ARB 0x8370 +#define GL_MIRRORED_REPEAT_IBM 0x8370 +#define GL_MIRRORED_REPEAT_OES 0x8370 +#define GL_MIRROR_CLAMP_ATI 0x8742 +#define GL_MIRROR_CLAMP_EXT 0x8742 +#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 +#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 +#define GL_MITER_REVERT_NV 0x90A7 +#define GL_MITER_TRUNCATE_NV 0x90A8 +#define GL_MODELVIEW 0x1700 +#define GL_MODELVIEW0_ARB 0x1700 +#define GL_MODELVIEW10_ARB 0x872A +#define GL_MODELVIEW11_ARB 0x872B +#define GL_MODELVIEW12_ARB 0x872C +#define GL_MODELVIEW13_ARB 0x872D +#define GL_MODELVIEW14_ARB 0x872E +#define GL_MODELVIEW15_ARB 0x872F +#define GL_MODELVIEW16_ARB 0x8730 +#define GL_MODELVIEW17_ARB 0x8731 +#define GL_MODELVIEW18_ARB 0x8732 +#define GL_MODELVIEW19_ARB 0x8733 +#define GL_MODELVIEW1_ARB 0x850A +#define GL_MODELVIEW1_EXT 0x850A +#define GL_MODELVIEW1_MATRIX_EXT 0x8506 +#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 +#define GL_MODELVIEW20_ARB 0x8734 +#define GL_MODELVIEW21_ARB 0x8735 +#define GL_MODELVIEW22_ARB 0x8736 +#define GL_MODELVIEW23_ARB 0x8737 +#define GL_MODELVIEW24_ARB 0x8738 +#define GL_MODELVIEW25_ARB 0x8739 +#define GL_MODELVIEW26_ARB 0x873A +#define GL_MODELVIEW27_ARB 0x873B +#define GL_MODELVIEW28_ARB 0x873C +#define GL_MODELVIEW29_ARB 0x873D +#define GL_MODELVIEW2_ARB 0x8722 +#define GL_MODELVIEW30_ARB 0x873E +#define GL_MODELVIEW31_ARB 0x873F +#define GL_MODELVIEW3_ARB 0x8723 +#define GL_MODELVIEW4_ARB 0x8724 +#define GL_MODELVIEW5_ARB 0x8725 +#define GL_MODELVIEW6_ARB 0x8726 +#define GL_MODELVIEW7_ARB 0x8727 +#define GL_MODELVIEW8_ARB 0x8728 +#define GL_MODELVIEW9_ARB 0x8729 +#define GL_MODELVIEW_MATRIX 0x0BA6 +#define GL_MODELVIEW_MATRIX1_EXT 0x8506 +#define GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES 0x898D +#define GL_MODELVIEW_PROJECTION_NV 0x8629 +#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 +#define GL_MODULATE 0x2100 +#define GL_MODULATE_ADD_ATI 0x8744 +#define GL_MODULATE_COLOR_IMG 0x8C04 +#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 +#define GL_MODULATE_SUBTRACT_ATI 0x8746 +#define GL_MOVE_TO_CONTINUES_NV 0x90B6 +#define GL_MOVE_TO_NV 0x02 +#define GL_MOVE_TO_RESETS_NV 0x90B5 +#define GL_MOV_ATI 0x8961 +#define GL_MULT 0x0103 +#define GL_MULTISAMPLE 0x809D +#define GL_MULTISAMPLE_3DFX 0x86B2 +#define GL_MULTISAMPLE_ARB 0x809D +#define GL_MULTISAMPLE_BIT 0x20000000 +#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 +#define GL_MULTISAMPLE_BIT_ARB 0x20000000 +#define GL_MULTISAMPLE_BIT_EXT 0x20000000 +#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 +#define GL_MULTISAMPLE_EXT 0x809D +#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 +#define GL_MULTISAMPLE_SGIS 0x809D +#define GL_MULTIVIEW_EXT 0x90F1 +#define GL_MULTI_HULLS_NV 0x908C +#define GL_MUL_ATI 0x8964 +#define GL_MVP_MATRIX_EXT 0x87E3 +#define GL_N3F_V3F 0x2A25 +#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 +#define GL_NAMED_STRING_TYPE_ARB 0x8DEA +#define GL_NAME_LENGTH 0x92F9 +#define GL_NAME_STACK_DEPTH 0x0D70 +#define GL_NAND 0x150E +#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 +#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 +#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 +#define GL_NEAREST 0x2600 +#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E +#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_NEGATE_BIT_ATI 0x00000004 +#define GL_NEGATIVE_ONE_EXT 0x87DF +#define GL_NEGATIVE_W_EXT 0x87DC +#define GL_NEGATIVE_X_EXT 0x87D9 +#define GL_NEGATIVE_Y_EXT 0x87DA +#define GL_NEGATIVE_Z_EXT 0x87DB +#define GL_NEVER 0x0200 +#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 +#define GL_NICEST 0x1102 +#define GL_NONE 0 +#define GL_NOOP 0x1505 +#define GL_NOR 0x1508 +#define GL_NORMALIZE 0x0BA1 +#define GL_NORMALIZED_RANGE_EXT 0x87E0 +#define GL_NORMAL_ARRAY 0x8075 +#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 +#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 +#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 +#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 +#define GL_NORMAL_ARRAY_EXT 0x8075 +#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C +#define GL_NORMAL_ARRAY_LIST_IBM 103071 +#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 +#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 +#define GL_NORMAL_ARRAY_POINTER 0x808F +#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F +#define GL_NORMAL_ARRAY_STRIDE 0x807F +#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F +#define GL_NORMAL_ARRAY_TYPE 0x807E +#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E +#define GL_NORMAL_BIT_PGI 0x08000000 +#define GL_NORMAL_MAP 0x8511 +#define GL_NORMAL_MAP_ARB 0x8511 +#define GL_NORMAL_MAP_EXT 0x8511 +#define GL_NORMAL_MAP_NV 0x8511 +#define GL_NORMAL_MAP_OES 0x8511 +#define GL_NOTEQUAL 0x0205 +#define GL_NO_ERROR 0 +#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 +#define GL_NUM_ACTIVE_VARIABLES 0x9304 +#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 +#define GL_NUM_EXTENSIONS 0x821D +#define GL_NUM_FILL_STREAMS_NV 0x8E29 +#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F +#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E +#define GL_NUM_GENERAL_COMBINERS_NV 0x854E +#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 +#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 +#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 +#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 +#define GL_NUM_PASSES_ATI 0x8970 +#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE +#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE +#define GL_NUM_SAMPLE_COUNTS 0x9380 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 +#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 +#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 +#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 +#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A +#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 +#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 +#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 +#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 +#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 +#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 +#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 +#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 +#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 +#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 +#define GL_OBJECT_LINEAR 0x2401 +#define GL_OBJECT_LINE_SGIS 0x81F7 +#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 +#define GL_OBJECT_PLANE 0x2501 +#define GL_OBJECT_POINT_SGIS 0x81F5 +#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 +#define GL_OBJECT_SUBTYPE_ARB 0x8B4F +#define GL_OBJECT_TYPE 0x9112 +#define GL_OBJECT_TYPE_APPLE 0x9112 +#define GL_OBJECT_TYPE_ARB 0x8B4E +#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 +#define GL_OCCLUSION_TEST_HP 0x8165 +#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 +#define GL_OFFSET 0x92FC +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 +#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 +#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 +#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 +#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 +#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C +#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D +#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 +#define GL_ONE 1 +#define GL_ONE_EXT 0x87DE +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#define GL_ONE_MINUS_SRC1_COLOR 0x88FA +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND0_ALPHA_ARB 0x8598 +#define GL_OPERAND0_ALPHA_EXT 0x8598 +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND0_RGB_ARB 0x8590 +#define GL_OPERAND0_RGB_EXT 0x8590 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND1_ALPHA_ARB 0x8599 +#define GL_OPERAND1_ALPHA_EXT 0x8599 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND1_RGB_ARB 0x8591 +#define GL_OPERAND1_RGB_EXT 0x8591 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_OPERAND2_ALPHA_ARB 0x859A +#define GL_OPERAND2_ALPHA_EXT 0x859A +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND2_RGB_ARB 0x8592 +#define GL_OPERAND2_RGB_EXT 0x8592 +#define GL_OPERAND3_ALPHA_NV 0x859B +#define GL_OPERAND3_RGB_NV 0x8593 +#define GL_OP_ADD_EXT 0x8787 +#define GL_OP_CLAMP_EXT 0x878E +#define GL_OP_CROSS_PRODUCT_EXT 0x8797 +#define GL_OP_DOT3_EXT 0x8784 +#define GL_OP_DOT4_EXT 0x8785 +#define GL_OP_EXP_BASE_2_EXT 0x8791 +#define GL_OP_FLOOR_EXT 0x878F +#define GL_OP_FRAC_EXT 0x8789 +#define GL_OP_INDEX_EXT 0x8782 +#define GL_OP_LOG_BASE_2_EXT 0x8792 +#define GL_OP_MADD_EXT 0x8788 +#define GL_OP_MAX_EXT 0x878A +#define GL_OP_MIN_EXT 0x878B +#define GL_OP_MOV_EXT 0x8799 +#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 +#define GL_OP_MUL_EXT 0x8786 +#define GL_OP_NEGATE_EXT 0x8783 +#define GL_OP_POWER_EXT 0x8793 +#define GL_OP_RECIP_EXT 0x8794 +#define GL_OP_RECIP_SQRT_EXT 0x8795 +#define GL_OP_ROUND_EXT 0x8790 +#define GL_OP_SET_GE_EXT 0x878C +#define GL_OP_SET_LT_EXT 0x878D +#define GL_OP_SUB_EXT 0x8796 +#define GL_OR 0x1507 +#define GL_ORDER 0x0A01 +#define GL_OR_INVERTED 0x150D +#define GL_OR_REVERSE 0x150B +#define GL_OUTPUT_COLOR0_EXT 0x879B +#define GL_OUTPUT_COLOR1_EXT 0x879C +#define GL_OUTPUT_FOG_EXT 0x87BD +#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D +#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 +#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 +#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 +#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA +#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB +#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC +#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD +#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE +#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF +#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 +#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E +#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 +#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 +#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 +#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 +#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 +#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 +#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 +#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 +#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 +#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA +#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F +#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB +#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC +#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 +#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 +#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 +#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 +#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 +#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 +#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 +#define GL_OUTPUT_VERTEX_EXT 0x879A +#define GL_OUT_OF_MEMORY 0x0505 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_PACK_CMYK_HINT_EXT 0x800E +#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D +#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C +#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E +#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B +#define GL_PACK_COMPRESSED_SIZE_SGIX 0x831C +#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C +#define GL_PACK_INVERT_MESA 0x8758 +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_MAX_COMPRESSED_SIZE_SGIX 0x831B +#define GL_PACK_RESAMPLE_OML 0x8984 +#define GL_PACK_RESAMPLE_SGIX 0x842C +#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 +#define GL_PACK_ROW_BYTES_APPLE 0x8A15 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_SKIP_IMAGES_EXT 0x806B +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 +#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 +#define GL_PARTIAL_SUCCESS_NV 0x902E +#define GL_PASS_THROUGH_NV 0x86E6 +#define GL_PASS_THROUGH_TOKEN 0x0700 +#define GL_PATCHES 0x000E +#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 +#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 +#define GL_PATCH_VERTICES 0x8E72 +#define GL_PATH_CLIENT_LENGTH_NV 0x907F +#define GL_PATH_COMMAND_COUNT_NV 0x909D +#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 +#define GL_PATH_COORD_COUNT_NV 0x909E +#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF +#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F +#define GL_PATH_DASH_CAPS_NV 0x907B +#define GL_PATH_DASH_OFFSET_NV 0x907E +#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 +#define GL_PATH_END_CAPS_NV 0x9076 +#define GL_PATH_ERROR_POSITION_NV 0x90AB +#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 +#define GL_PATH_FILL_COVER_MODE_NV 0x9082 +#define GL_PATH_FILL_MASK_NV 0x9081 +#define GL_PATH_FILL_MODE_NV 0x9080 +#define GL_PATH_FOG_GEN_MODE_NV 0x90AC +#define GL_PATH_FORMAT_PS_NV 0x9071 +#define GL_PATH_FORMAT_SVG_NV 0x9070 +#define GL_PATH_GEN_COEFF_NV 0x90B1 +#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 +#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 +#define GL_PATH_GEN_MODE_NV 0x90B0 +#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C +#define GL_PATH_INITIAL_END_CAP_NV 0x9077 +#define GL_PATH_JOIN_STYLE_NV 0x9079 +#define GL_PATH_MITER_LIMIT_NV 0x907A +#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A +#define GL_PATH_SAMPLE_QUALITY_NV 0x9085 +#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD +#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE +#define GL_PATH_STENCIL_FUNC_NV 0x90B7 +#define GL_PATH_STENCIL_REF_NV 0x90B8 +#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 +#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 +#define GL_PATH_STROKE_BOUND_NV 0x9086 +#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 +#define GL_PATH_STROKE_MASK_NV 0x9084 +#define GL_PATH_STROKE_OVERSAMPLE_COUNT_NV 0x9087 +#define GL_PATH_STROKE_WIDTH_NV 0x9075 +#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D +#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 +#define GL_PERCENTAGE_AMD 0x8BC3 +#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 +#define GL_PERFMON_RESULT_AMD 0x8BC6 +#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 +#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 +#define GL_PERFORMANCE_MONITOR_AMD 0x9152 +#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 +#define GL_PERTURB_EXT 0x85AE +#define GL_PER_STAGE_CONSTANTS_NV 0x8535 +#define GL_PHONG_HINT_WIN 0x80EB +#define GL_PHONG_WIN 0x80EA +#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 +#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 +#define GL_PIXEL_COUNTER_BITS_NV 0x8864 +#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 +#define GL_PIXEL_COUNT_NV 0x8866 +#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 +#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 +#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 +#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 +#define GL_PIXEL_MAG_FILTER_EXT 0x8331 +#define GL_PIXEL_MAP_A_TO_A 0x0C79 +#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 +#define GL_PIXEL_MAP_B_TO_B 0x0C78 +#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 +#define GL_PIXEL_MAP_G_TO_G 0x0C77 +#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 +#define GL_PIXEL_MAP_I_TO_A 0x0C75 +#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 +#define GL_PIXEL_MAP_I_TO_B 0x0C74 +#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 +#define GL_PIXEL_MAP_I_TO_G 0x0C73 +#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 +#define GL_PIXEL_MAP_I_TO_I 0x0C70 +#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 +#define GL_PIXEL_MAP_I_TO_R 0x0C72 +#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 +#define GL_PIXEL_MAP_R_TO_R 0x0C76 +#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 +#define GL_PIXEL_MAP_S_TO_S 0x0C71 +#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 +#define GL_PIXEL_MIN_FILTER_EXT 0x8332 +#define GL_PIXEL_MODE_BIT 0x00000020 +#define GL_PIXEL_PACK_BUFFER 0x88EB +#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB +#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED +#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED +#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED +#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB +#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 +#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 +#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 +#define GL_PIXEL_TEXTURE_SGIS 0x8353 +#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189 +#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A +#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188 +#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187 +#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B +#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184 +#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186 +#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185 +#define GL_PIXEL_TEX_GEN_SGIX 0x8139 +#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E +#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F +#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 +#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 +#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 +#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 +#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 +#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 +#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 +#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 +#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF +#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF +#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC +#define GL_PN_TRIANGLES_ATI 0x87F0 +#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 +#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 +#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 +#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 +#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 +#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 +#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 +#define GL_POINT 0x1B00 +#define GL_POINTS 0x0000 +#define GL_POINT_BIT 0x00000002 +#define GL_POINT_DISTANCE_ATTENUATION 0x8129 +#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 +#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 +#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES 0x8B9F +#define GL_POINT_SIZE_ARRAY_OES 0x8B9C +#define GL_POINT_SIZE_ARRAY_POINTER_OES 0x898C +#define GL_POINT_SIZE_ARRAY_STRIDE_OES 0x898B +#define GL_POINT_SIZE_ARRAY_TYPE_OES 0x898A +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_POINT_SIZE_MAX 0x8127 +#define GL_POINT_SIZE_MAX_ARB 0x8127 +#define GL_POINT_SIZE_MAX_EXT 0x8127 +#define GL_POINT_SIZE_MAX_SGIS 0x8127 +#define GL_POINT_SIZE_MIN 0x8126 +#define GL_POINT_SIZE_MIN_ARB 0x8126 +#define GL_POINT_SIZE_MIN_EXT 0x8126 +#define GL_POINT_SIZE_MIN_SGIS 0x8126 +#define GL_POINT_SIZE_RANGE 0x0B12 +#define GL_POINT_SMOOTH 0x0B10 +#define GL_POINT_SMOOTH_HINT 0x0C51 +#define GL_POINT_SPRITE 0x8861 +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_POINT_SPRITE_NV 0x8861 +#define GL_POINT_SPRITE_R_MODE_NV 0x8863 +#define GL_POINT_TOKEN 0x0701 +#define GL_POLYGON 0x0009 +#define GL_POLYGON_BIT 0x00000008 +#define GL_POLYGON_MODE 0x0B40 +#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 +#define GL_POLYGON_OFFSET_EXT 0x8037 +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_POLYGON_STIPPLE 0x0B42 +#define GL_POLYGON_STIPPLE_BIT 0x00000010 +#define GL_POLYGON_TOKEN 0x0703 +#define GL_POSITION 0x1203 +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA +#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 +#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 +#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 +#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 +#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 +#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 +#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 +#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F +#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F +#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 +#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 +#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E +#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 +#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 +#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 +#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D +#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D +#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 +#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 +#define GL_POST_CONVOLUTION_RED_SCALE 0x801C +#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C +#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 +#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B +#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 +#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C +#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A +#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 +#define GL_PRESENT_DURATION_NV 0x8E2B +#define GL_PRESENT_TIME_NV 0x8E2A +#define GL_PRESERVE_ATI 0x8762 +#define GL_PREVIOUS 0x8578 +#define GL_PREVIOUS_ARB 0x8578 +#define GL_PREVIOUS_EXT 0x8578 +#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PRIMARY_COLOR_ARB 0x8577 +#define GL_PRIMARY_COLOR_EXT 0x8577 +#define GL_PRIMARY_COLOR_NV 0x852C +#define GL_PRIMITIVES_GENERATED 0x8C87 +#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 +#define GL_PRIMITIVES_GENERATED_NV 0x8C87 +#define GL_PRIMITIVE_ID_NV 0x8C7C +#define GL_PRIMITIVE_RESTART 0x8F9D +#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 +#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E +#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 +#define GL_PRIMITIVE_RESTART_NV 0x8558 +#define GL_PROGRAM 0x82E2 +#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 +#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 +#define GL_PROGRAM_ATTRIBS_ARB 0x88AC +#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 +#define GL_PROGRAM_BINARY_FORMATS 0x87FF +#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF +#define GL_PROGRAM_BINARY_LENGTH 0x8741 +#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 +#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 +#define GL_PROGRAM_BINDING_ARB 0x8677 +#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B +#define GL_PROGRAM_ERROR_POSITION_NV 0x864B +#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 +#define GL_PROGRAM_ERROR_STRING_NV 0x8874 +#define GL_PROGRAM_FORMAT_ARB 0x8876 +#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 +#define GL_PROGRAM_INPUT 0x92E3 +#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 +#define GL_PROGRAM_LENGTH_ARB 0x8627 +#define GL_PROGRAM_LENGTH_NV 0x8627 +#define GL_PROGRAM_MATRIX_EXT 0x8E2D +#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F +#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 +#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 +#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE +#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 +#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA +#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 +#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A +#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 +#define GL_PROGRAM_OBJECT_ARB 0x8B40 +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_PROGRAM_OUTPUT 0x92E4 +#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 +#define GL_PROGRAM_PARAMETER_NV 0x8644 +#define GL_PROGRAM_PIPELINE 0x82E4 +#define GL_PROGRAM_PIPELINE_BINDING 0x825A +#define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_PROGRAM_POINT_SIZE 0x8642 +#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 +#define GL_PROGRAM_RESIDENT_NV 0x8647 +#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 +#define GL_PROGRAM_SEPARABLE 0x8258 +#define GL_PROGRAM_SEPARABLE_EXT 0x8258 +#define GL_PROGRAM_STRING_ARB 0x8628 +#define GL_PROGRAM_STRING_NV 0x8628 +#define GL_PROGRAM_TARGET_NV 0x8646 +#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 +#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 +#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 +#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 +#define GL_PROJECTION 0x1701 +#define GL_PROJECTION_MATRIX 0x0BA7 +#define GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES 0x898E +#define GL_PROJECTION_STACK_DEPTH 0x0BA4 +#define GL_PROJECTIVE_2D_NV 0x9093 +#define GL_PROJECTIVE_3D_NV 0x9095 +#define GL_PROVOKING_VERTEX 0x8E4F +#define GL_PROVOKING_VERTEX_EXT 0x8E4F +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_PROXY_HISTOGRAM_EXT 0x8025 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 +#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 +#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 +#define GL_PROXY_TEXTURE_1D_EXT 0x8063 +#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B +#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B +#define GL_PROXY_TEXTURE_2D_EXT 0x8064 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 +#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_PROXY_TEXTURE_3D_EXT 0x8070 +#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 +#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B +#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B +#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 +#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 +#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 +#define GL_PURGEABLE_APPLE 0x8A1D +#define GL_Q 0x2003 +#define GL_QUADRATIC_ATTENUATION 0x1209 +#define GL_QUADRATIC_CURVE_TO_NV 0x0A +#define GL_QUADS 0x0007 +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C +#define GL_QUAD_ALPHA4_SGIS 0x811E +#define GL_QUAD_ALPHA8_SGIS 0x811F +#define GL_QUAD_INTENSITY4_SGIS 0x8122 +#define GL_QUAD_INTENSITY8_SGIS 0x8123 +#define GL_QUAD_LUMINANCE4_SGIS 0x8120 +#define GL_QUAD_LUMINANCE8_SGIS 0x8121 +#define GL_QUAD_MESH_SUN 0x8614 +#define GL_QUAD_STRIP 0x0008 +#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 +#define GL_QUARTER_BIT_ATI 0x00000010 +#define GL_QUERY 0x82E3 +#define GL_QUERY_BUFFER_AMD 0x9192 +#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 +#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 +#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 +#define GL_QUERY_BY_REGION_WAIT 0x8E15 +#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_QUERY_COUNTER_BITS_ARB 0x8864 +#define GL_QUERY_NO_WAIT 0x8E14 +#define GL_QUERY_NO_WAIT_NV 0x8E14 +#define GL_QUERY_OBJECT_AMD 0x9153 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_ARB 0x8866 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 +#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 +#define GL_QUERY_RESULT_EXT 0x8866 +#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 +#define GL_QUERY_WAIT 0x8E13 +#define GL_QUERY_WAIT_NV 0x8E13 +#define GL_R 0x2002 +#define GL_R11F_G11F_B10F 0x8C3A +#define GL_R11F_G11F_B10F_EXT 0x8C3A +#define GL_R16 0x822A +#define GL_R16F 0x822D +#define GL_R16F_EXT 0x822D +#define GL_R16I 0x8233 +#define GL_R16UI 0x8234 +#define GL_R16_SNORM 0x8F98 +#define GL_R1UI_C3F_V3F_SUN 0x85C6 +#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 +#define GL_R1UI_C4UB_V3F_SUN 0x85C5 +#define GL_R1UI_N3F_V3F_SUN 0x85C7 +#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB +#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA +#define GL_R1UI_T2F_V3F_SUN 0x85C9 +#define GL_R1UI_V3F_SUN 0x85C4 +#define GL_R32F 0x822E +#define GL_R32I 0x8235 +#define GL_R32UI 0x8236 +#define GL_R3_G3_B2 0x2A10 +#define GL_R8 0x8229 +#define GL_R8I 0x8231 +#define GL_R8UI 0x8232 +#define GL_R8_EXT 0x8229 +#define GL_R8_SNORM 0x8F94 +#define GL_RASTERIZER_DISCARD 0x8C89 +#define GL_RASTERIZER_DISCARD_EXT 0x8C89 +#define GL_RASTERIZER_DISCARD_NV 0x8C89 +#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 +#define GL_READ_BUFFER 0x0C02 +#define GL_READ_BUFFER_EXT 0x0C02 +#define GL_READ_BUFFER_NV 0x0C02 +#define GL_READ_FRAMEBUFFER 0x8CA8 +#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 +#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA +#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA +#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 +#define GL_READ_ONLY 0x88B8 +#define GL_READ_ONLY_ARB 0x88B8 +#define GL_READ_PIXELS 0x828C +#define GL_READ_PIXELS_FORMAT 0x828D +#define GL_READ_PIXELS_TYPE 0x828E +#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B +#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 +#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D +#define GL_READ_WRITE 0x88BA +#define GL_READ_WRITE_ARB 0x88BA +#define GL_RECIP_ADD_SIGNED_ALPHA_IMG 0x8C05 +#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE +#define GL_RECT_NV 0xF6 +#define GL_RED 0x1903 +#define GL_REDUCE 0x8016 +#define GL_REDUCE_EXT 0x8016 +#define GL_RED_BIAS 0x0D15 +#define GL_RED_BITS 0x0D52 +#define GL_RED_BIT_ATI 0x00000001 +#define GL_RED_EXT 0x1903 +#define GL_RED_INTEGER 0x8D94 +#define GL_RED_INTEGER_EXT 0x8D94 +#define GL_RED_MAX_CLAMP_INGR 0x8564 +#define GL_RED_MIN_CLAMP_INGR 0x8560 +#define GL_RED_SCALE 0x0D14 +#define GL_RED_SNORM 0x8F90 +#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B +#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A +#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 +#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 +#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E +#define GL_REFERENCE_PLANE_SGIX 0x817D +#define GL_REFLECTION_MAP 0x8512 +#define GL_REFLECTION_MAP_ARB 0x8512 +#define GL_REFLECTION_MAP_EXT 0x8512 +#define GL_REFLECTION_MAP_NV 0x8512 +#define GL_REFLECTION_MAP_OES 0x8512 +#define GL_REGISTER_COMBINERS_NV 0x8522 +#define GL_REG_0_ATI 0x8921 +#define GL_REG_10_ATI 0x892B +#define GL_REG_11_ATI 0x892C +#define GL_REG_12_ATI 0x892D +#define GL_REG_13_ATI 0x892E +#define GL_REG_14_ATI 0x892F +#define GL_REG_15_ATI 0x8930 +#define GL_REG_16_ATI 0x8931 +#define GL_REG_17_ATI 0x8932 +#define GL_REG_18_ATI 0x8933 +#define GL_REG_19_ATI 0x8934 +#define GL_REG_1_ATI 0x8922 +#define GL_REG_20_ATI 0x8935 +#define GL_REG_21_ATI 0x8936 +#define GL_REG_22_ATI 0x8937 +#define GL_REG_23_ATI 0x8938 +#define GL_REG_24_ATI 0x8939 +#define GL_REG_25_ATI 0x893A +#define GL_REG_26_ATI 0x893B +#define GL_REG_27_ATI 0x893C +#define GL_REG_28_ATI 0x893D +#define GL_REG_29_ATI 0x893E +#define GL_REG_2_ATI 0x8923 +#define GL_REG_30_ATI 0x893F +#define GL_REG_31_ATI 0x8940 +#define GL_REG_3_ATI 0x8924 +#define GL_REG_4_ATI 0x8925 +#define GL_REG_5_ATI 0x8926 +#define GL_REG_6_ATI 0x8927 +#define GL_REG_7_ATI 0x8928 +#define GL_REG_8_ATI 0x8929 +#define GL_REG_9_ATI 0x892A +#define GL_RELATIVE_ARC_TO_NV 0xFF +#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D +#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 +#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 +#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 +#define GL_RELATIVE_LINE_TO_NV 0x05 +#define GL_RELATIVE_MOVE_TO_NV 0x03 +#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B +#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 +#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 +#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 +#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F +#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 +#define GL_RELEASED_APPLE 0x8A19 +#define GL_RENDER 0x1C00 +#define GL_RENDERBUFFER 0x8D41 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_ALPHA_SIZE_OES 0x8D53 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_RENDERBUFFER_BINDING_ANGLE 0x8CA7 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_RENDERBUFFER_BINDING_OES 0x8CA7 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_BLUE_SIZE_OES 0x8D52 +#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 +#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_DEPTH_SIZE_OES 0x8D54 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_GREEN_SIZE_OES 0x8D51 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_HEIGHT_OES 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_OES 0x8D44 +#define GL_RENDERBUFFER_OES 0x8D41 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_RED_SIZE_OES 0x8D50 +#define GL_RENDERBUFFER_SAMPLES 0x8CAB +#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 +#define GL_RENDERBUFFER_STENCIL_SIZE_OES 0x8D55 +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERBUFFER_WIDTH_OES 0x8D42 +#define GL_RENDERER 0x1F01 +#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3 +#define GL_RENDER_MODE 0x0C40 +#define GL_REPEAT 0x2901 +#define GL_REPLACE 0x1E01 +#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 +#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 +#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 +#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 +#define GL_REPLACEMENT_CODE_SUN 0x81D8 +#define GL_REPLACE_EXT 0x8062 +#define GL_REPLACE_MIDDLE_SUN 0x0002 +#define GL_REPLACE_OLDEST_SUN 0x0003 +#define GL_REPLACE_VALUE_AMD 0x874B +#define GL_REPLICATE_BORDER 0x8153 +#define GL_REPLICATE_BORDER_HP 0x8153 +#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 +#define GL_RESAMPLE_AVERAGE_OML 0x8988 +#define GL_RESAMPLE_DECIMATE_OML 0x8989 +#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 +#define GL_RESAMPLE_REPLICATE_OML 0x8986 +#define GL_RESAMPLE_REPLICATE_SGIX 0x842E +#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 +#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F +#define GL_RESCALE_NORMAL 0x803A +#define GL_RESCALE_NORMAL_EXT 0x803A +#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define GL_RESTART_PATH_NV 0xF0 +#define GL_RESTART_SUN 0x0001 +#define GL_RETAINED_APPLE 0x8A1B +#define GL_RETURN 0x0102 +#define GL_RG 0x8227 +#define GL_RG16 0x822C +#define GL_RG16F 0x822F +#define GL_RG16F_EXT 0x822F +#define GL_RG16I 0x8239 +#define GL_RG16UI 0x823A +#define GL_RG16_SNORM 0x8F99 +#define GL_RG32F 0x8230 +#define GL_RG32I 0x823B +#define GL_RG32UI 0x823C +#define GL_RG8 0x822B +#define GL_RG8I 0x8237 +#define GL_RG8UI 0x8238 +#define GL_RG8_EXT 0x822B +#define GL_RG8_SNORM 0x8F95 +#define GL_RGB 0x1907 +#define GL_RGB10 0x8052 +#define GL_RGB10_A2 0x8059 +#define GL_RGB10_A2UI 0x906F +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGB10_EXT 0x8052 +#define GL_RGB12 0x8053 +#define GL_RGB12_EXT 0x8053 +#define GL_RGB16 0x8054 +#define GL_RGB16F 0x881B +#define GL_RGB16F_ARB 0x881B +#define GL_RGB16F_EXT 0x881B +#define GL_RGB16I 0x8D89 +#define GL_RGB16I_EXT 0x8D89 +#define GL_RGB16UI 0x8D77 +#define GL_RGB16UI_EXT 0x8D77 +#define GL_RGB16_EXT 0x8054 +#define GL_RGB16_SNORM 0x8F9A +#define GL_RGB2_EXT 0x804E +#define GL_RGB32F 0x8815 +#define GL_RGB32F_ARB 0x8815 +#define GL_RGB32I 0x8D83 +#define GL_RGB32I_EXT 0x8D83 +#define GL_RGB32UI 0x8D71 +#define GL_RGB32UI_EXT 0x8D71 +#define GL_RGB4 0x804F +#define GL_RGB4_EXT 0x804F +#define GL_RGB4_S3TC 0x83A1 +#define GL_RGB5 0x8050 +#define GL_RGB565 0x8D62 +#define GL_RGB565_OES 0x8D62 +#define GL_RGB5_A1 0x8057 +#define GL_RGB5_A1_EXT 0x8057 +#define GL_RGB5_A1_OES 0x8057 +#define GL_RGB5_EXT 0x8050 +#define GL_RGB8 0x8051 +#define GL_RGB8I 0x8D8F +#define GL_RGB8I_EXT 0x8D8F +#define GL_RGB8UI 0x8D7D +#define GL_RGB8UI_EXT 0x8D7D +#define GL_RGB8_EXT 0x8051 +#define GL_RGB8_SNORM 0x8F96 +#define GL_RGB9_E5 0x8C3D +#define GL_RGB9_E5_EXT 0x8C3D +#define GL_RGBA 0x1908 +#define GL_RGBA12 0x805A +#define GL_RGBA12_EXT 0x805A +#define GL_RGBA16 0x805B +#define GL_RGBA16F 0x881A +#define GL_RGBA16F_ARB 0x881A +#define GL_RGBA16F_EXT 0x881A +#define GL_RGBA16I 0x8D88 +#define GL_RGBA16I_EXT 0x8D88 +#define GL_RGBA16UI 0x8D76 +#define GL_RGBA16UI_EXT 0x8D76 +#define GL_RGBA16_EXT 0x805B +#define GL_RGBA16_SNORM 0x8F9B +#define GL_RGBA2 0x8055 +#define GL_RGBA2_EXT 0x8055 +#define GL_RGBA32F 0x8814 +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGBA32I 0x8D82 +#define GL_RGBA32I_EXT 0x8D82 +#define GL_RGBA32UI 0x8D70 +#define GL_RGBA32UI_EXT 0x8D70 +#define GL_RGBA4 0x8056 +#define GL_RGBA4_DXT5_S3TC 0x83A5 +#define GL_RGBA4_EXT 0x8056 +#define GL_RGBA4_OES 0x8056 +#define GL_RGBA4_S3TC 0x83A3 +#define GL_RGBA8 0x8058 +#define GL_RGBA8I 0x8D8E +#define GL_RGBA8I_EXT 0x8D8E +#define GL_RGBA8UI 0x8D7C +#define GL_RGBA8UI_EXT 0x8D7C +#define GL_RGBA8_EXT 0x8058 +#define GL_RGBA8_SNORM 0x8F97 +#define GL_RGBA_DXT5_S3TC 0x83A4 +#define GL_RGBA_FLOAT16_APPLE 0x881A +#define GL_RGBA_FLOAT16_ATI 0x881A +#define GL_RGBA_FLOAT32_APPLE 0x8814 +#define GL_RGBA_FLOAT32_ATI 0x8814 +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#define GL_RGBA_FLOAT_MODE_ATI 0x8820 +#define GL_RGBA_INTEGER 0x8D99 +#define GL_RGBA_INTEGER_EXT 0x8D99 +#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E +#define GL_RGBA_MODE 0x0C31 +#define GL_RGBA_S3TC 0x83A2 +#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C +#define GL_RGBA_SNORM 0x8F93 +#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 +#define GL_RGB_422_APPLE 0x8A1F +#define GL_RGB_FLOAT16_APPLE 0x881B +#define GL_RGB_FLOAT16_ATI 0x881B +#define GL_RGB_FLOAT32_APPLE 0x8815 +#define GL_RGB_FLOAT32_ATI 0x8815 +#define GL_RGB_INTEGER 0x8D98 +#define GL_RGB_INTEGER_EXT 0x8D98 +#define GL_RGB_S3TC 0x83A0 +#define GL_RGB_SCALE 0x8573 +#define GL_RGB_SCALE_ARB 0x8573 +#define GL_RGB_SCALE_EXT 0x8573 +#define GL_RGB_SNORM 0x8F92 +#define GL_RG_EXT 0x8227 +#define GL_RG_INTEGER 0x8228 +#define GL_RG_SNORM 0x8F91 +#define GL_RIGHT 0x0407 +#define GL_ROUND_NV 0x90A4 +#define GL_S 0x2000 +#define GL_SAMPLER 0x82E6 +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_1D_ARB 0x8B5D +#define GL_SAMPLER_1D_ARRAY 0x8DC0 +#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 +#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 +#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_2D_ARB 0x8B5E +#define GL_SAMPLER_2D_ARRAY 0x8DC1 +#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 +#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 +#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 +#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B +#define GL_SAMPLER_2D_RECT 0x8B63 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 +#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_3D_ARB 0x8B5F +#define GL_SAMPLER_3D_OES 0x8B5F +#define GL_SAMPLER_BINDING 0x8919 +#define GL_SAMPLER_BUFFER 0x8DC2 +#define GL_SAMPLER_BUFFER_AMD 0x9001 +#define GL_SAMPLER_BUFFER_EXT 0x8DC2 +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_CUBE_ARB 0x8B60 +#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D +#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 +#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 +#define GL_SAMPLER_EXTERNAL_OES 0x8D66 +#define GL_SAMPLER_OBJECT_AMD 0x9155 +#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLES_3DFX 0x86B4 +#define GL_SAMPLES_ARB 0x80A9 +#define GL_SAMPLES_EXT 0x80A9 +#define GL_SAMPLES_PASSED 0x8914 +#define GL_SAMPLES_PASSED_ARB 0x8914 +#define GL_SAMPLES_SGIS 0x80A9 +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E +#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E +#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F +#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F +#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 +#define GL_SAMPLE_BUFFERS_ARB 0x80A8 +#define GL_SAMPLE_BUFFERS_EXT 0x80A8 +#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_COVERAGE_ARB 0x80A0 +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA +#define GL_SAMPLE_MASK 0x8E51 +#define GL_SAMPLE_MASK_EXT 0x80A0 +#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB +#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB +#define GL_SAMPLE_MASK_NV 0x8E51 +#define GL_SAMPLE_MASK_SGIS 0x80A0 +#define GL_SAMPLE_MASK_VALUE 0x8E52 +#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA +#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 +#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA +#define GL_SAMPLE_PATTERN_EXT 0x80AC +#define GL_SAMPLE_PATTERN_SGIS 0x80AC +#define GL_SAMPLE_POSITION 0x8E50 +#define GL_SAMPLE_POSITION_NV 0x8E50 +#define GL_SAMPLE_SHADING 0x8C36 +#define GL_SAMPLE_SHADING_ARB 0x8C36 +#define GL_SATURATE_BIT_ATI 0x00000040 +#define GL_SCALAR_EXT 0x87BE +#define GL_SCALEBIAS_HINT_SGIX 0x8322 +#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA +#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB +#define GL_SCALE_BY_FOUR_NV 0x853F +#define GL_SCALE_BY_ONE_HALF_NV 0x8540 +#define GL_SCALE_BY_TWO_NV 0x853E +#define GL_SCISSOR_BIT 0x00080000 +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_SCREEN_COORDINATES_REND 0x8490 +#define GL_SECONDARY_COLOR_ARRAY 0x845E +#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C +#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E +#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 +#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 +#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 +#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D +#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D +#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A +#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A +#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C +#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C +#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B +#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B +#define GL_SECONDARY_COLOR_NV 0x852D +#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D +#define GL_SELECT 0x1C02 +#define GL_SELECTION_BUFFER_POINTER 0x0DF3 +#define GL_SELECTION_BUFFER_SIZE 0x0DF4 +#define GL_SEPARABLE_2D 0x8012 +#define GL_SEPARABLE_2D_EXT 0x8012 +#define GL_SEPARATE_ATTRIBS 0x8C8D +#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D +#define GL_SEPARATE_ATTRIBS_NV 0x8C8D +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA +#define GL_SET 0x150F +#define GL_SET_AMD 0x874A +#define GL_SGX_BINARY_IMG 0x8C0A +#define GL_SGX_PROGRAM_BINARY_IMG 0x9130 +#define GL_SHADER 0x82E1 +#define GL_SHADER_BINARY_DMP 0x9250 +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_SHADER_BINARY_VIV 0x8FC4 +#define GL_SHADER_COMPILER 0x8DFA +#define GL_SHADER_CONSISTENT_NV 0x86DD +#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 +#define GL_SHADER_IMAGE_ATOMIC 0x82A6 +#define GL_SHADER_IMAGE_LOAD 0x82A4 +#define GL_SHADER_IMAGE_STORE 0x82A5 +#define GL_SHADER_INCLUDE_ARB 0x8DAE +#define GL_SHADER_OBJECT_ARB 0x8B48 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_SHADER_OPERATION_NV 0x86DF +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_SHADER_STORAGE_BARRIER_BIT 0x2000 +#define GL_SHADER_STORAGE_BLOCK 0x92E6 +#define GL_SHADER_STORAGE_BUFFER 0x90D2 +#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 +#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF +#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 +#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 +#define GL_SHADER_TYPE 0x8B4F +#define GL_SHADE_MODEL 0x0B54 +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C +#define GL_SHADOW_AMBIENT_SGIX 0x80BF +#define GL_SHADOW_ATTENUATION_EXT 0x834E +#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB +#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 +#define GL_SHININESS 0x1601 +#define GL_SHORT 0x1402 +#define GL_SIGNALED 0x9119 +#define GL_SIGNALED_APPLE 0x9119 +#define GL_SIGNED_ALPHA8_NV 0x8706 +#define GL_SIGNED_ALPHA_NV 0x8705 +#define GL_SIGNED_HILO16_NV 0x86FA +#define GL_SIGNED_HILO8_NV 0x885F +#define GL_SIGNED_HILO_NV 0x86F9 +#define GL_SIGNED_IDENTITY_NV 0x853C +#define GL_SIGNED_INTENSITY8_NV 0x8708 +#define GL_SIGNED_INTENSITY_NV 0x8707 +#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 +#define GL_SIGNED_LUMINANCE8_NV 0x8702 +#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 +#define GL_SIGNED_LUMINANCE_NV 0x8701 +#define GL_SIGNED_NEGATE_NV 0x853D +#define GL_SIGNED_NORMALIZED 0x8F9C +#define GL_SIGNED_RGB8_NV 0x86FF +#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D +#define GL_SIGNED_RGBA8_NV 0x86FC +#define GL_SIGNED_RGBA_NV 0x86FB +#define GL_SIGNED_RGB_NV 0x86FE +#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SINGLE_COLOR_EXT 0x81F9 +#define GL_SKIP_DECODE_EXT 0x8A4A +#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 +#define GL_SLICE_ACCUM_SUN 0x85CC +#define GL_SLIM10U_SGIX 0x831E +#define GL_SLIM12S_SGIX 0x831F +#define GL_SLIM8U_SGIX 0x831D +#define GL_SLUMINANCE 0x8C46 +#define GL_SLUMINANCE8 0x8C47 +#define GL_SLUMINANCE8_ALPHA8 0x8C45 +#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 +#define GL_SLUMINANCE8_EXT 0x8C47 +#define GL_SLUMINANCE_ALPHA 0x8C44 +#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 +#define GL_SLUMINANCE_EXT 0x8C46 +#define GL_SMALL_CCW_ARC_TO_NV 0x12 +#define GL_SMALL_CW_ARC_TO_NV 0x14 +#define GL_SMOOTH 0x1D01 +#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE0_ALPHA_ARB 0x8588 +#define GL_SOURCE0_ALPHA_EXT 0x8588 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE0_RGB_ARB 0x8580 +#define GL_SOURCE0_RGB_EXT 0x8580 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE1_ALPHA_ARB 0x8589 +#define GL_SOURCE1_ALPHA_EXT 0x8589 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE1_RGB_ARB 0x8581 +#define GL_SOURCE1_RGB_EXT 0x8581 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_SOURCE2_ALPHA_ARB 0x858A +#define GL_SOURCE2_ALPHA_EXT 0x858A +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE2_RGB_ARB 0x8582 +#define GL_SOURCE2_RGB_EXT 0x8582 +#define GL_SOURCE3_ALPHA_NV 0x858B +#define GL_SOURCE3_RGB_NV 0x8583 +#define GL_SPARE0_NV 0x852E +#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 +#define GL_SPARE1_NV 0x852F +#define GL_SPECULAR 0x1202 +#define GL_SPHERE_MAP 0x2402 +#define GL_SPOT_CUTOFF 0x1206 +#define GL_SPOT_DIRECTION 0x1204 +#define GL_SPOT_EXPONENT 0x1205 +#define GL_SPRITE_AXIAL_SGIX 0x814C +#define GL_SPRITE_AXIS_SGIX 0x814A +#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E +#define GL_SPRITE_MODE_SGIX 0x8149 +#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D +#define GL_SPRITE_SGIX 0x8148 +#define GL_SPRITE_TRANSLATION_SGIX 0x814B +#define GL_SQUARE_NV 0x90A3 +#define GL_SRC0_ALPHA 0x8588 +#define GL_SRC0_RGB 0x8580 +#define GL_SRC1_ALPHA 0x8589 +#define GL_SRC1_COLOR 0x88F9 +#define GL_SRC1_RGB 0x8581 +#define GL_SRC2_ALPHA 0x858A +#define GL_SRC2_RGB 0x8582 +#define GL_SRC_ALPHA 0x0302 +#define GL_SRC_ALPHA_SATURATE 0x0308 +#define GL_SRC_COLOR 0x0300 +#define GL_SRGB 0x8C40 +#define GL_SRGB8 0x8C41 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_SRGB8_EXT 0x8C41 +#define GL_SRGB_ALPHA 0x8C42 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB_DECODE_ARB 0x8299 +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB_READ 0x8297 +#define GL_SRGB_WRITE 0x8298 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_STANDARD_FONT_NAME_NV 0x9072 +#define GL_STATE_RESTORE 0x8BDC +#define GL_STATIC_ATI 0x8760 +#define GL_STATIC_COPY 0x88E6 +#define GL_STATIC_COPY_ARB 0x88E6 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_DRAW_ARB 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STATIC_READ_ARB 0x88E5 +#define GL_STENCIL 0x1802 +#define GL_STENCIL_ATTACHMENT 0x8D20 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_STENCIL_ATTACHMENT_OES 0x8D20 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_FAIL_ATI 0x8801 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FUNC_ATI 0x8800 +#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_STENCIL_BITS 0x0D57 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_COMPONENTS 0x8285 +#define GL_STENCIL_EXT 0x1802 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_INDEX 0x1901 +#define GL_STENCIL_INDEX1 0x8D46 +#define GL_STENCIL_INDEX16 0x8D49 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX1_OES 0x8D46 +#define GL_STENCIL_INDEX4 0x8D47 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX4_OES 0x8D47 +#define GL_STENCIL_INDEX8 0x8D48 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_INDEX8_OES 0x8D48 +#define GL_STENCIL_OP_VALUE_AMD 0x874C +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_RENDERABLE 0x8288 +#define GL_STENCIL_TAG_BITS_EXT 0x88F2 +#define GL_STENCIL_TEST 0x0B90 +#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_STEREO 0x0C33 +#define GL_STORAGE_CACHED_APPLE 0x85BE +#define GL_STORAGE_CLIENT_APPLE 0x85B4 +#define GL_STORAGE_PRIVATE_APPLE 0x85BD +#define GL_STORAGE_SHARED_APPLE 0x85BF +#define GL_STREAM_COPY 0x88E2 +#define GL_STREAM_COPY_ARB 0x88E2 +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_DRAW_ARB 0x88E0 +#define GL_STREAM_READ 0x88E1 +#define GL_STREAM_READ_ARB 0x88E1 +#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 +#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 +#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F +#define GL_SUBTRACT 0x84E7 +#define GL_SUBTRACT_ARB 0x84E7 +#define GL_SUB_ATI 0x8965 +#define GL_SUCCESS_NV 0x902F +#define GL_SURFACE_MAPPED_NV 0x8700 +#define GL_SURFACE_REGISTERED_NV 0x86FD +#define GL_SURFACE_STATE_NV 0x86EB +#define GL_SWIZZLE_STQ_ATI 0x8977 +#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 +#define GL_SWIZZLE_STRQ_ATI 0x897A +#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B +#define GL_SWIZZLE_STR_ATI 0x8976 +#define GL_SWIZZLE_STR_DR_ATI 0x8978 +#define GL_SYNC_CL_EVENT_ARB 0x8240 +#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 +#define GL_SYNC_CONDITION 0x9113 +#define GL_SYNC_CONDITION_APPLE 0x9113 +#define GL_SYNC_FENCE 0x9116 +#define GL_SYNC_FENCE_APPLE 0x9116 +#define GL_SYNC_FLAGS 0x9115 +#define GL_SYNC_FLAGS_APPLE 0x9115 +#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 +#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 +#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 +#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 +#define GL_SYNC_OBJECT_APPLE 0x8A53 +#define GL_SYNC_STATUS 0x9114 +#define GL_SYNC_STATUS_APPLE 0x9114 +#define GL_SYNC_X11_FENCE_EXT 0x90E1 +#define GL_SYSTEM_FONT_NAME_NV 0x9073 +#define GL_T 0x2001 +#define GL_T2F_C3F_V3F 0x2A2A +#define GL_T2F_C4F_N3F_V3F 0x2A2C +#define GL_T2F_C4UB_V3F 0x2A29 +#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 +#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 +#define GL_T2F_IUI_V2F_EXT 0x81B1 +#define GL_T2F_IUI_V3F_EXT 0x81B2 +#define GL_T2F_N3F_V3F 0x2A2B +#define GL_T2F_V3F 0x2A27 +#define GL_T4F_C4F_N3F_V4F 0x2A2D +#define GL_T4F_V4F 0x2A28 +#define GL_TABLE_TOO_LARGE 0x8031 +#define GL_TABLE_TOO_LARGE_EXT 0x8031 +#define GL_TANGENT_ARRAY_EXT 0x8439 +#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 +#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F +#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E +#define GL_TESSELLATION_FACTOR_AMD 0x9005 +#define GL_TESSELLATION_MODE_AMD 0x9004 +#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 +#define GL_TESS_CONTROL_PROGRAM_NV 0x891E +#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 +#define GL_TESS_CONTROL_SHADER 0x8E88 +#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 +#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 +#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF +#define GL_TESS_CONTROL_TEXTURE 0x829C +#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F +#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 +#define GL_TESS_EVALUATION_SHADER 0x8E87 +#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 +#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA +#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 +#define GL_TESS_EVALUATION_TEXTURE 0x829D +#define GL_TESS_GEN_MODE 0x8E76 +#define GL_TESS_GEN_POINT_MODE 0x8E79 +#define GL_TESS_GEN_SPACING 0x8E77 +#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 +#define GL_TEXCOORD1_BIT_PGI 0x10000000 +#define GL_TEXCOORD2_BIT_PGI 0x20000000 +#define GL_TEXCOORD3_BIT_PGI 0x40000000 +#define GL_TEXCOORD4_BIT_PGI 0x80000000 +#define GL_TEXTURE 0x1702 +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_TEXTURE31_ARB 0x84DF +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_1D_ARRAY 0x8C18 +#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 +#define GL_TEXTURE_1D_BINDING_EXT 0x8068 +#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D +#define GL_TEXTURE_1D_STACK_MESAX 0x8759 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_TEXTURE_2D_ARRAY 0x8C1A +#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A +#define GL_TEXTURE_2D_BINDING_EXT 0x8069 +#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 +#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E +#define GL_TEXTURE_2D_STACK_MESAX 0x875A +#define GL_TEXTURE_3D 0x806F +#define GL_TEXTURE_3D_BINDING_EXT 0x806A +#define GL_TEXTURE_3D_BINDING_OES 0x806A +#define GL_TEXTURE_3D_EXT 0x806F +#define GL_TEXTURE_3D_OES 0x806F +#define GL_TEXTURE_4DSIZE_SGIS 0x8136 +#define GL_TEXTURE_4D_BINDING_SGIS 0x814F +#define GL_TEXTURE_4D_SGIS 0x8134 +#define GL_TEXTURE_ALPHA_MODULATE_IMG 0x8C06 +#define GL_TEXTURE_ALPHA_SIZE 0x805F +#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F +#define GL_TEXTURE_ALPHA_TYPE 0x8C13 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C +#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D +#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_TEXTURE_BINDING_BUFFER 0x8C2C +#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C +#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A +#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 +#define GL_TEXTURE_BINDING_CUBE_MAP_OES 0x8514 +#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 +#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 +#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 +#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 +#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 +#define GL_TEXTURE_BIT 0x00040000 +#define GL_TEXTURE_BLUE_SIZE 0x805E +#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E +#define GL_TEXTURE_BLUE_TYPE 0x8C12 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_BORDER 0x1005 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_BORDER_VALUES_NV 0x871A +#define GL_TEXTURE_BUFFER 0x8C2A +#define GL_TEXTURE_BUFFER_ARB 0x8C2A +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D +#define GL_TEXTURE_BUFFER_EXT 0x8C2A +#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E +#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E +#define GL_TEXTURE_BUFFER_OFFSET 0x919D +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F +#define GL_TEXTURE_BUFFER_SIZE 0x919E +#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 +#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 +#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 +#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 +#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 +#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 +#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 +#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC +#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF +#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D +#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C +#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C +#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B +#define GL_TEXTURE_COMPARE_SGIX 0x819A +#define GL_TEXTURE_COMPONENTS 0x1003 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 +#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 +#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 +#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF +#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 +#define GL_TEXTURE_COORD_ARRAY 0x8078 +#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A +#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B +#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 +#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F +#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 +#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 +#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 +#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 +#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 +#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 +#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 +#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A +#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A +#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 +#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 +#define GL_TEXTURE_COORD_NV 0x8C79 +#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 +#define GL_TEXTURE_CROP_RECT_OES 0x8B9D +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 +#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 +#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 +#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES 0x8516 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES 0x8518 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES 0x851A +#define GL_TEXTURE_CUBE_MAP_OES 0x8513 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES 0x8515 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES 0x8517 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES 0x8519 +#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F +#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 +#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_DEPTH_EXT 0x8071 +#define GL_TEXTURE_DEPTH_QCOM 0x8BD4 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A +#define GL_TEXTURE_DEPTH_TYPE 0x8C16 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_TEXTURE_DS_SIZE_NV 0x871D +#define GL_TEXTURE_DT_SIZE_NV 0x871E +#define GL_TEXTURE_ENV 0x2300 +#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE +#define GL_TEXTURE_ENV_COLOR 0x2201 +#define GL_TEXTURE_ENV_MODE 0x2200 +#define GL_TEXTURE_EXTERNAL_OES 0x8D65 +#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 +#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 +#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 +#define GL_TEXTURE_FILTER_CONTROL 0x8500 +#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 +#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 +#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C +#define GL_TEXTURE_FORMAT_QCOM 0x8BD6 +#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC +#define GL_TEXTURE_GATHER 0x82A2 +#define GL_TEXTURE_GATHER_SHADOW 0x82A3 +#define GL_TEXTURE_GEN_MODE 0x2500 +#define GL_TEXTURE_GEN_Q 0x0C63 +#define GL_TEXTURE_GEN_R 0x0C62 +#define GL_TEXTURE_GEN_S 0x0C60 +#define GL_TEXTURE_GEN_STR_OES 0x8D60 +#define GL_TEXTURE_GEN_T 0x0C61 +#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D +#define GL_TEXTURE_GREEN_SIZE 0x805D +#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D +#define GL_TEXTURE_GREEN_TYPE 0x8C11 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_HEIGHT_QCOM 0x8BD3 +#define GL_TEXTURE_HI_SIZE_NV 0x871B +#define GL_TEXTURE_IMAGE_FORMAT 0x828F +#define GL_TEXTURE_IMAGE_TYPE 0x8290 +#define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8 +#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F +#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF +#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED +#define GL_TEXTURE_INTENSITY_SIZE 0x8061 +#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 +#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5 +#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C +#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 +#define GL_TEXTURE_LIGHT_EXT 0x8350 +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 +#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 +#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E +#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F +#define GL_TEXTURE_LO_SIZE_NV 0x871C +#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 +#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 +#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MAG_SIZE_NV 0x871F +#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 +#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 +#define GL_TEXTURE_MATRIX 0x0BA8 +#define GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES 0x898F +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B +#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 +#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_MAX_LOD_SGIS 0x813B +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MIN_LOD_SGIS 0x813A +#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E +#define GL_TEXTURE_NORMAL_EXT 0x85AF +#define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9 +#define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB +#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 +#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 +#define GL_TEXTURE_PRIORITY 0x8066 +#define GL_TEXTURE_PRIORITY_EXT 0x8066 +#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 +#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 +#define GL_TEXTURE_RECTANGLE 0x84F5 +#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define GL_TEXTURE_RECTANGLE_NV 0x84F5 +#define GL_TEXTURE_RED_SIZE 0x805C +#define GL_TEXTURE_RED_SIZE_EXT 0x805C +#define GL_TEXTURE_RED_TYPE 0x8C10 +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 +#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 +#define GL_TEXTURE_RESIDENT 0x8067 +#define GL_TEXTURE_RESIDENT_EXT 0x8067 +#define GL_TEXTURE_SAMPLES 0x9106 +#define GL_TEXTURE_SAMPLES_IMG 0x9136 +#define GL_TEXTURE_SHADER_NV 0x86DE +#define GL_TEXTURE_SHADOW 0x82A1 +#define GL_TEXTURE_SHARED_SIZE 0x8C3F +#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F +#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 +#define GL_TEXTURE_STACK_DEPTH 0x0BA5 +#define GL_TEXTURE_STENCIL_SIZE 0x88F1 +#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 +#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC +#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 +#define GL_TEXTURE_SWIZZLE_A 0x8E45 +#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 +#define GL_TEXTURE_SWIZZLE_B 0x8E44 +#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 +#define GL_TEXTURE_SWIZZLE_G 0x8E43 +#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 +#define GL_TEXTURE_SWIZZLE_R 0x8E42 +#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 +#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 +#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 +#define GL_TEXTURE_TARGET_QCOM 0x8BDA +#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 +#define GL_TEXTURE_TYPE_QCOM 0x8BD7 +#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F +#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 +#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 +#define GL_TEXTURE_USAGE_ANGLE 0x93A2 +#define GL_TEXTURE_VIEW 0x82B5 +#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD +#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB +#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE +#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TEXTURE_WIDTH_QCOM 0x8BD2 +#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_TEXTURE_WRAP_R_EXT 0x8072 +#define GL_TEXTURE_WRAP_R_OES 0x8072 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 +#define GL_TIMEOUT_EXPIRED 0x911B +#define GL_TIMEOUT_EXPIRED_APPLE 0x911B +#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull +#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull +#define GL_TIMESTAMP 0x8E28 +#define GL_TIME_ELAPSED 0x88BF +#define GL_TIME_ELAPSED_EXT 0x88BF +#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C +#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D +#define GL_TRACE_ALL_BITS_MESA 0xFFFF +#define GL_TRACE_ARRAYS_BIT_MESA 0x0004 +#define GL_TRACE_ERRORS_BIT_MESA 0x0020 +#define GL_TRACE_MASK_MESA 0x8755 +#define GL_TRACE_NAME_MESA 0x8756 +#define GL_TRACE_OPERATIONS_BIT_MESA 0x0001 +#define GL_TRACE_PIXELS_BIT_MESA 0x0010 +#define GL_TRACE_PRIMITIVES_BIT_MESA 0x0002 +#define GL_TRACE_TEXTURES_BIT_MESA 0x0008 +#define GL_TRACK_MATRIX_NV 0x8648 +#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 +#define GL_TRANSFORM_BIT 0x00001000 +#define GL_TRANSFORM_FEEDBACK 0x8E22 +#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 +#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 +#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 +#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F +#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F +#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 +#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 +#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 +#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 +#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 +#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 +#define GL_TRANSFORM_HINT_APPLE 0x85B1 +#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 +#define GL_TRANSLATE_2D_NV 0x9090 +#define GL_TRANSLATE_3D_NV 0x9091 +#define GL_TRANSLATE_X_NV 0x908E +#define GL_TRANSLATE_Y_NV 0x908F +#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 +#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 +#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 +#define GL_TRANSPOSE_NV 0x862C +#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 +#define GL_TRANSPOSE_PROJECTIVE_2D_NV 0x9097 +#define GL_TRANSPOSE_PROJECTIVE_3D_NV 0x9099 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLES_ADJACENCY 0x000C +#define GL_TRIANGLES_ADJACENCY_ARB 0x000C +#define GL_TRIANGLES_ADJACENCY_EXT 0x000C +#define GL_TRIANGLE_FAN 0x0006 +#define GL_TRIANGLE_LIST_SUN 0x81D7 +#define GL_TRIANGLE_MESH_SUN 0x8615 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D +#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D +#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D +#define GL_TRIANGULAR_NV 0x90A5 +#define GL_TRUE 1 +#define GL_TYPE 0x92FA +#define GL_TYPE_RGBA_FLOAT_ATI 0x8820 +#define GL_UNDEFINED_APPLE 0x8A1C +#define GL_UNDEFINED_VERTEX 0x8260 +#define GL_UNIFORM 0x92E1 +#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C +#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA +#define GL_UNIFORM_BARRIER_BIT 0x00000004 +#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 +#define GL_UNIFORM_BLOCK 0x92E2 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 +#define GL_UNIFORM_BLOCK_BINDING 0x8A3F +#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 +#define GL_UNIFORM_BLOCK_INDEX 0x8A3A +#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC +#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 +#define GL_UNIFORM_BUFFER 0x8A11 +#define GL_UNIFORM_BUFFER_BINDING 0x8A28 +#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF +#define GL_UNIFORM_BUFFER_EXT 0x8DEE +#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 +#define GL_UNIFORM_BUFFER_SIZE 0x8A2A +#define GL_UNIFORM_BUFFER_START 0x8A29 +#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E +#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D +#define GL_UNIFORM_NAME_LENGTH 0x8A39 +#define GL_UNIFORM_OFFSET 0x8A3B +#define GL_UNIFORM_SIZE 0x8A38 +#define GL_UNIFORM_TYPE 0x8A37 +#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 +#define GL_UNPACK_CMYK_HINT_EXT 0x800F +#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 +#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 +#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A +#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 +#define GL_UNPACK_COMPRESSED_SIZE_SGIX 0x831A +#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 +#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_RESAMPLE_OML 0x8985 +#define GL_UNPACK_RESAMPLE_SGIX 0x842D +#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 +#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_UNSIGNALED 0x9118 +#define GL_UNSIGNALED_APPLE 0x9118 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_BYTE_2_3_3_REV_EXT 0x8362 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 +#define GL_UNSIGNED_IDENTITY_NV 0x8536 +#define GL_UNSIGNED_INT 0x1405 +#define GL_UNSIGNED_INT16_NV 0x8FF0 +#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 +#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 +#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 +#define GL_UNSIGNED_INT64_AMD 0x8BC2 +#define GL_UNSIGNED_INT64_NV 0x140F +#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 +#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 +#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 +#define GL_UNSIGNED_INT8_NV 0x8FEC +#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED +#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE +#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF +#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B +#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 +#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 +#define GL_UNSIGNED_INT_24_8 0x84FA +#define GL_UNSIGNED_INT_24_8_EXT 0x84FA +#define GL_UNSIGNED_INT_24_8_MESA 0x8751 +#define GL_UNSIGNED_INT_24_8_NV 0x84FA +#define GL_UNSIGNED_INT_24_8_OES 0x84FA +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 +#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E +#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E +#define GL_UNSIGNED_INT_8_24_REV_MESA 0x8752 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_8_8_8_8_REV_EXT 0x8367 +#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB +#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB +#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 +#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 +#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 +#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 +#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 +#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 +#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 +#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A +#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA +#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 +#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F +#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 +#define GL_UNSIGNED_INT_VEC2 0x8DC6 +#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 +#define GL_UNSIGNED_INT_VEC3 0x8DC7 +#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 +#define GL_UNSIGNED_INT_VEC4 0x8DC8 +#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 +#define GL_UNSIGNED_INVERT_NV 0x8537 +#define GL_UNSIGNED_NEGATE_NV 0x853D +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 +#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_UNSIGNED_SHORT_15_1_MESA 0x8753 +#define GL_UNSIGNED_SHORT_1_15_REV_MESA 0x8754 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_EXT 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_5_6_5_REV_EXT 0x8364 +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB +#define GL_UPPER_LEFT 0x8CA2 +#define GL_USE_MISSING_GLYPH_NV 0x90AA +#define GL_UTF16_NV 0x909B +#define GL_UTF8_NV 0x909A +#define GL_V2F 0x2A20 +#define GL_V3F 0x2A21 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_VARIABLE_A_NV 0x8523 +#define GL_VARIABLE_B_NV 0x8524 +#define GL_VARIABLE_C_NV 0x8525 +#define GL_VARIABLE_D_NV 0x8526 +#define GL_VARIABLE_E_NV 0x8527 +#define GL_VARIABLE_F_NV 0x8528 +#define GL_VARIABLE_G_NV 0x8529 +#define GL_VARIANT_ARRAY_EXT 0x87E8 +#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 +#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 +#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 +#define GL_VARIANT_DATATYPE_EXT 0x87E5 +#define GL_VARIANT_EXT 0x87C1 +#define GL_VARIANT_VALUE_EXT 0x87E4 +#define GL_VBO_FREE_MEMORY_ATI 0x87FB +#define GL_VECTOR_EXT 0x87BF +#define GL_VENDOR 0x1F00 +#define GL_VERSION 0x1F02 +#define GL_VERSION_1_1 1 +#define GL_VERSION_1_2 1 +#define GL_VERSION_1_3 1 +#define GL_VERSION_1_4 1 +#define GL_VERSION_1_5 1 +#define GL_VERSION_2_0 1 +#define GL_VERSION_2_1 1 +#define GL_VERSION_3_0 1 +#define GL_VERSION_3_1 1 +#define GL_VERSION_3_2 1 +#define GL_VERTEX23_BIT_PGI 0x00000004 +#define GL_VERTEX4_BIT_PGI 0x00000008 +#define GL_VERTEX_ARRAY 0x8074 +#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 +#define GL_VERTEX_ARRAY_BINDING 0x85B5 +#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 +#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 +#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 +#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D +#define GL_VERTEX_ARRAY_EXT 0x8074 +#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B +#define GL_VERTEX_ARRAY_LIST_IBM 103070 +#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 +#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 +#define GL_VERTEX_ARRAY_POINTER 0x808E +#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E +#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E +#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E +#define GL_VERTEX_ARRAY_RANGE_NV 0x851D +#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 +#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 +#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F +#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 +#define GL_VERTEX_ARRAY_SIZE 0x807A +#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A +#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F +#define GL_VERTEX_ARRAY_STRIDE 0x807C +#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C +#define GL_VERTEX_ARRAY_TYPE 0x807B +#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B +#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 +#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A +#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B +#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C +#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D +#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E +#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F +#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 +#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 +#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 +#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 +#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 +#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 +#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 +#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 +#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 +#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD +#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A +#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 +#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E +#define GL_VERTEX_ATTRIB_BINDING 0x82D4 +#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 +#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 +#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 +#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 +#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 +#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 +#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 +#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 +#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 +#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 +#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 +#define GL_VERTEX_BINDING_DIVISOR 0x82D6 +#define GL_VERTEX_BINDING_OFFSET 0x82D7 +#define GL_VERTEX_BINDING_STRIDE 0x82D8 +#define GL_VERTEX_BLEND_ARB 0x86A7 +#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B +#define GL_VERTEX_DATA_HINT_PGI 0x1A22A +#define GL_VERTEX_ID_NV 0x8C7B +#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF +#define GL_VERTEX_PRECLIP_SGIX 0x83EE +#define GL_VERTEX_PROGRAM_ARB 0x8620 +#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A +#define GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA 0x8BB7 +#define GL_VERTEX_PROGRAM_CALLBACK_FUNC_MESA 0x8BB6 +#define GL_VERTEX_PROGRAM_CALLBACK_MESA 0x8BB4 +#define GL_VERTEX_PROGRAM_NV 0x8620 +#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 +#define GL_VERTEX_PROGRAM_POSITION_MESA 0x8BB4 +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 +#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_VERTEX_SHADER_ARB 0x8B31 +#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 +#define GL_VERTEX_SHADER_BIT 0x00000001 +#define GL_VERTEX_SHADER_BIT_EXT 0x00000001 +#define GL_VERTEX_SHADER_EXT 0x8780 +#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF +#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 +#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 +#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 +#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 +#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 +#define GL_VERTEX_SOURCE_ATI 0x8774 +#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 +#define GL_VERTEX_STREAM0_ATI 0x876C +#define GL_VERTEX_STREAM1_ATI 0x876D +#define GL_VERTEX_STREAM2_ATI 0x876E +#define GL_VERTEX_STREAM3_ATI 0x876F +#define GL_VERTEX_STREAM4_ATI 0x8770 +#define GL_VERTEX_STREAM5_ATI 0x8771 +#define GL_VERTEX_STREAM6_ATI 0x8772 +#define GL_VERTEX_STREAM7_ATI 0x8773 +#define GL_VERTEX_SUBROUTINE 0x92E8 +#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE +#define GL_VERTEX_TEXTURE 0x829B +#define GL_VERTEX_WEIGHTING_EXT 0x8509 +#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C +#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 +#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D +#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F +#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E +#define GL_VERTICAL_LINE_TO_NV 0x08 +#define GL_VIBRANCE_BIAS_NV 0x8719 +#define GL_VIBRANCE_SCALE_NV 0x8713 +#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 +#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D +#define GL_VIDEO_BUFFER_NV 0x9020 +#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 +#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B +#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A +#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 +#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 +#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C +#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 +#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 +#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A +#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B +#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C +#define GL_VIEWPORT 0x0BA2 +#define GL_VIEWPORT_BIT 0x00000800 +#define GL_VIEWPORT_BOUNDS_RANGE 0x825D +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F +#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C +#define GL_VIEW_CLASS_128_BITS 0x82C4 +#define GL_VIEW_CLASS_16_BITS 0x82CA +#define GL_VIEW_CLASS_24_BITS 0x82C9 +#define GL_VIEW_CLASS_32_BITS 0x82C8 +#define GL_VIEW_CLASS_48_BITS 0x82C7 +#define GL_VIEW_CLASS_64_BITS 0x82C6 +#define GL_VIEW_CLASS_8_BITS 0x82CB +#define GL_VIEW_CLASS_96_BITS 0x82C5 +#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 +#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 +#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 +#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 +#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC +#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD +#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE +#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF +#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 +#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 +#define GL_VOLATILE_APPLE 0x8A1A +#define GL_WAIT_FAILED 0x911D +#define GL_WAIT_FAILED_APPLE 0x911D +#define GL_WEIGHT_ARRAY_ARB 0x86AD +#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_OES 0x889E +#define GL_WEIGHT_ARRAY_OES 0x86AD +#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC +#define GL_WEIGHT_ARRAY_POINTER_OES 0x86AC +#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB +#define GL_WEIGHT_ARRAY_SIZE_OES 0x86AB +#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA +#define GL_WEIGHT_ARRAY_STRIDE_OES 0x86AA +#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 +#define GL_WEIGHT_ARRAY_TYPE_OES 0x86A9 +#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 +#define GL_WIDE_LINE_HINT_PGI 0x1A222 +#define GL_WRAP_BORDER_SUN 0x81D4 +#define GL_WRITEONLY_RENDERING_QCOM 0x8823 +#define GL_WRITE_DISCARD_NV 0x88BE +#define GL_WRITE_ONLY 0x88B9 +#define GL_WRITE_ONLY_ARB 0x88B9 +#define GL_WRITE_ONLY_OES 0x88B9 +#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A +#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 +#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C +#define GL_W_EXT 0x87D8 +#define GL_XOR 0x1506 +#define GL_X_EXT 0x87D5 +#define GL_YCBAYCR8A_4224_NV 0x9032 +#define GL_YCBCR_422_APPLE 0x85B9 +#define GL_YCBCR_MESA 0x8757 +#define GL_YCBYCR8_422_NV 0x9031 +#define GL_YCRCBA_SGIX 0x8319 +#define GL_YCRCB_422_SGIX 0x81BB +#define GL_YCRCB_444_SGIX 0x81BC +#define GL_YCRCB_SGIX 0x8318 +#define GL_Y_EXT 0x87D6 +#define GL_Z400_BINARY_AMD 0x8740 +#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 +#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 +#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 +#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 +#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 +#define GL_ZERO 0 +#define GL_ZERO_EXT 0x87DD +#define GL_ZOOM_X 0x0D16 +#define GL_ZOOM_Y 0x0D17 +#define GL_Z_EXT 0x87D7 + +void GLAPIENTRY glAccum(GLenum,GLfloat); +void GLAPIENTRY glAlphaFunc(GLenum,GLfloat); +GLboolean GLAPIENTRY glAreTexturesResident(GLsizei,const GLuint*,GLboolean*); +void GLAPIENTRY glArrayElement(GLint); +void GLAPIENTRY glBegin(GLenum); +void GLAPIENTRY glBindTexture(GLenum,GLuint); +void GLAPIENTRY glBitmap(GLsizei,GLsizei,GLfloat,GLfloat,GLfloat,GLfloat,const GLubyte*); +void GLAPIENTRY glBlendFunc(GLenum,GLenum); +void GLAPIENTRY glCallList(GLuint); +void GLAPIENTRY glCallLists(GLsizei,GLenum,const GLvoid*); +void GLAPIENTRY glClear(GLbitfield); +void GLAPIENTRY glClearAccum(GLfloat,GLfloat,GLfloat,GLfloat); +void GLAPIENTRY glClearColor(GLfloat,GLfloat,GLfloat,GLfloat); +void GLAPIENTRY glClearDepth(GLdouble); +void GLAPIENTRY glClearIndex(GLfloat); +void GLAPIENTRY glClearStencil(GLint); +void GLAPIENTRY glClipPlane(GLenum,const GLdouble*); +void GLAPIENTRY glColor3b(GLbyte,GLbyte,GLbyte); +void GLAPIENTRY glColor3bv(const GLbyte*); +void GLAPIENTRY glColor3d(GLdouble,GLdouble,GLdouble); +void GLAPIENTRY glColor3dv(const GLdouble*); +void GLAPIENTRY glColor3f(GLfloat,GLfloat,GLfloat); +void GLAPIENTRY glColor3fv(const GLfloat*); +void GLAPIENTRY glColor3i(GLint,GLint,GLint); +void GLAPIENTRY glColor3iv(const GLint*); +void GLAPIENTRY glColor3s(GLshort,GLshort,GLshort); +void GLAPIENTRY glColor3sv(const GLshort*); +void GLAPIENTRY glColor3ub(GLubyte,GLubyte,GLubyte); +void GLAPIENTRY glColor3ubv(const GLubyte*); +void GLAPIENTRY glColor3ui(GLuint,GLuint,GLuint); +void GLAPIENTRY glColor3uiv(const GLuint*); +void GLAPIENTRY glColor3us(GLushort,GLushort,GLushort); +void GLAPIENTRY glColor3usv(const GLushort*); +void GLAPIENTRY glColor4b(GLbyte,GLbyte,GLbyte,GLbyte); +void GLAPIENTRY glColor4bv(const GLbyte*); +void GLAPIENTRY glColor4d(GLdouble,GLdouble,GLdouble,GLdouble); +void GLAPIENTRY glColor4dv(const GLdouble*); +void GLAPIENTRY glColor4f(GLfloat,GLfloat,GLfloat,GLfloat); +void GLAPIENTRY glColor4fv(const GLfloat*); +void GLAPIENTRY glColor4i(GLint,GLint,GLint,GLint); +void GLAPIENTRY glColor4iv(const GLint*); +void GLAPIENTRY glColor4s(GLshort,GLshort,GLshort,GLshort); +void GLAPIENTRY glColor4sv(const GLshort*); +void GLAPIENTRY glColor4ub(GLubyte,GLubyte,GLubyte,GLubyte); +void GLAPIENTRY glColor4ubv(const GLubyte*); +void GLAPIENTRY glColor4ui(GLuint,GLuint,GLuint,GLuint); +void GLAPIENTRY glColor4uiv(const GLuint*); +void GLAPIENTRY glColor4us(GLushort,GLushort,GLushort,GLushort); +void GLAPIENTRY glColor4usv(const GLushort*); +void GLAPIENTRY glColorMask(GLboolean,GLboolean,GLboolean,GLboolean); +void GLAPIENTRY glColorMaterial(GLenum,GLenum); +void GLAPIENTRY glColorPointer(GLint,GLenum,GLsizei,const GLvoid*); +void GLAPIENTRY glCopyPixels(GLint,GLint,GLsizei,GLsizei,GLenum); +void GLAPIENTRY glCopyTexImage1D(GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLint); +void GLAPIENTRY glCopyTexImage2D(GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLsizei,GLint); +void GLAPIENTRY glCopyTexSubImage1D(GLenum,GLint,GLint,GLint,GLint,GLsizei); +void GLAPIENTRY glCopyTexSubImage2D(GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei); +void GLAPIENTRY glCullFace(GLenum); +GLint GLAPIENTRY glDebugEntry(GLint,GLint); +void GLAPIENTRY glDeleteLists(GLuint,GLsizei); +void GLAPIENTRY glDeleteTextures(GLsizei,const GLuint*); +void GLAPIENTRY glDepthFunc(GLenum); +void GLAPIENTRY glDepthMask(GLboolean); +void GLAPIENTRY glDepthRange(GLdouble,GLdouble); +void GLAPIENTRY glDisable(GLenum); +void GLAPIENTRY glDisableClientState(GLenum); +void GLAPIENTRY glDrawArrays(GLenum,GLint,GLsizei); +void GLAPIENTRY glDrawBuffer(GLenum); +void GLAPIENTRY glDrawElements(GLenum,GLsizei,GLenum,const GLvoid*); +void GLAPIENTRY glDrawPixels(GLsizei,GLsizei,GLenum,GLenum,const GLvoid*); +void GLAPIENTRY glEdgeFlag(GLboolean); +void GLAPIENTRY glEdgeFlagPointer(GLsizei,const GLvoid*); +void GLAPIENTRY glEdgeFlagv(const GLboolean*); +void GLAPIENTRY glEnable(GLenum); +void GLAPIENTRY glEnableClientState(GLenum); +void GLAPIENTRY glEnd(void); +void GLAPIENTRY glEndList(void); +void GLAPIENTRY glEvalCoord1d(GLdouble); +void GLAPIENTRY glEvalCoord1dv(const GLdouble*); +void GLAPIENTRY glEvalCoord1f(GLfloat); +void GLAPIENTRY glEvalCoord1fv(const GLfloat*); +void GLAPIENTRY glEvalCoord2d(GLdouble,GLdouble); +void GLAPIENTRY glEvalCoord2dv(const GLdouble*); +void GLAPIENTRY glEvalCoord2f(GLfloat,GLfloat); +void GLAPIENTRY glEvalCoord2fv(const GLfloat*); +void GLAPIENTRY glEvalMesh1(GLenum,GLint,GLint); +void GLAPIENTRY glEvalMesh2(GLenum,GLint,GLint,GLint,GLint); +void GLAPIENTRY glEvalPoint1(GLint); +void GLAPIENTRY glEvalPoint2(GLint,GLint); +void GLAPIENTRY glFeedbackBuffer(GLsizei,GLenum,GLfloat*); +void GLAPIENTRY glFinish(void); +void GLAPIENTRY glFlush(void); +void GLAPIENTRY glFogf(GLenum,GLfloat); +void GLAPIENTRY glFogfv(GLenum,const GLfloat*); +void GLAPIENTRY glFogi(GLenum,GLint); +void GLAPIENTRY glFogiv(GLenum,const GLint*); +void GLAPIENTRY glFrontFace(GLenum); +void GLAPIENTRY glFrustum(GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble); +GLuint GLAPIENTRY glGenLists(GLsizei); +void GLAPIENTRY glGenTextures(GLsizei,GLuint*); +void GLAPIENTRY glGetBooleanv(GLenum,GLboolean*); +void GLAPIENTRY glGetClipPlane(GLenum,GLdouble*); +void GLAPIENTRY glGetDoublev(GLenum,GLdouble*); +GLenum GLAPIENTRY glGetError(void); +void GLAPIENTRY glGetFloatv(GLenum,GLfloat*); +void GLAPIENTRY glGetIntegerv(GLenum,GLint*); +void GLAPIENTRY glGetLightfv(GLenum,GLenum,GLfloat*); +void GLAPIENTRY glGetLightiv(GLenum,GLenum,GLint*); +void GLAPIENTRY glGetMapdv(GLenum,GLenum,GLdouble*); +void GLAPIENTRY glGetMapfv(GLenum,GLenum,GLfloat*); +void GLAPIENTRY glGetMapiv(GLenum,GLenum,GLint*); +void GLAPIENTRY glGetMaterialfv(GLenum,GLenum,GLfloat*); +void GLAPIENTRY glGetMaterialiv(GLenum,GLenum,GLint*); +void GLAPIENTRY glGetPixelMapfv(GLenum,GLfloat*); +void GLAPIENTRY glGetPixelMapuiv(GLenum,GLuint*); +void GLAPIENTRY glGetPixelMapusv(GLenum,GLushort*); +void GLAPIENTRY glGetPointerv(GLenum,GLvoid**); +void GLAPIENTRY glGetPolygonStipple(GLubyte*); +const GLubyte * GLAPIENTRY glGetString(GLenum); +void GLAPIENTRY glGetTexEnvfv(GLenum,GLenum,GLfloat*); +void GLAPIENTRY glGetTexEnviv(GLenum,GLenum,GLint*); +void GLAPIENTRY glGetTexGendv(GLenum,GLenum,GLdouble*); +void GLAPIENTRY glGetTexGenfv(GLenum,GLenum,GLfloat*); +void GLAPIENTRY glGetTexGeniv(GLenum,GLenum,GLint*); +void GLAPIENTRY glGetTexImage(GLenum,GLint,GLenum,GLenum,GLvoid*); +void GLAPIENTRY glGetTexLevelParameterfv(GLenum,GLint,GLenum,GLfloat*); +void GLAPIENTRY glGetTexLevelParameteriv(GLenum,GLint,GLenum,GLint*); +void GLAPIENTRY glGetTexParameterfv(GLenum,GLenum,GLfloat*); +void GLAPIENTRY glGetTexParameteriv(GLenum,GLenum,GLint*); +void GLAPIENTRY glHint(GLenum,GLenum); +void GLAPIENTRY glIndexMask(GLuint); +void GLAPIENTRY glIndexPointer(GLenum,GLsizei,const GLvoid*); +void GLAPIENTRY glIndexd(GLdouble); +void GLAPIENTRY glIndexdv(const GLdouble*); +void GLAPIENTRY glIndexf(GLfloat); +void GLAPIENTRY glIndexfv(const GLfloat*); +void GLAPIENTRY glIndexi(GLint); +void GLAPIENTRY glIndexiv(const GLint*); +void GLAPIENTRY glIndexs(GLshort); +void GLAPIENTRY glIndexsv(const GLshort*); +void GLAPIENTRY glIndexub(GLubyte); +void GLAPIENTRY glIndexubv(const GLubyte*); +void GLAPIENTRY glInitNames(void); +void GLAPIENTRY glInterleavedArrays(GLenum,GLsizei,const GLvoid*); +GLboolean GLAPIENTRY glIsEnabled(GLenum); +GLboolean GLAPIENTRY glIsList(GLuint); +GLboolean GLAPIENTRY glIsTexture(GLuint); +void GLAPIENTRY glLightModelf(GLenum,GLfloat); +void GLAPIENTRY glLightModelfv(GLenum,const GLfloat*); +void GLAPIENTRY glLightModeli(GLenum,GLint); +void GLAPIENTRY glLightModeliv(GLenum,const GLint*); +void GLAPIENTRY glLightf(GLenum,GLenum,GLfloat); +void GLAPIENTRY glLightfv(GLenum,GLenum,const GLfloat*); +void GLAPIENTRY glLighti(GLenum,GLenum,GLint); +void GLAPIENTRY glLightiv(GLenum,GLenum,const GLint*); +void GLAPIENTRY glLineStipple(GLint,GLushort); +void GLAPIENTRY glLineWidth(GLfloat); +void GLAPIENTRY glListBase(GLuint); +void GLAPIENTRY glLoadIdentity(void); +void GLAPIENTRY glLoadMatrixd(const GLdouble*); +void GLAPIENTRY glLoadMatrixf(const GLfloat*); +void GLAPIENTRY glLoadName(GLuint); +void GLAPIENTRY glLogicOp(GLenum); +void GLAPIENTRY glMap1d(GLenum,GLdouble,GLdouble,GLint,GLint,const GLdouble*); +void GLAPIENTRY glMap1f(GLenum,GLfloat,GLfloat,GLint,GLint,const GLfloat*); +void GLAPIENTRY glMap2d(GLenum,GLdouble,GLdouble,GLint,GLint,GLdouble,GLdouble,GLint,GLint,const GLdouble*); +void GLAPIENTRY glMap2f(GLenum,GLfloat,GLfloat,GLint,GLint,GLfloat,GLfloat,GLint,GLint,const GLfloat*); +void GLAPIENTRY glMapGrid1d(GLint,GLdouble,GLdouble); +void GLAPIENTRY glMapGrid1f(GLint,GLfloat,GLfloat); +void GLAPIENTRY glMapGrid2d(GLint,GLdouble,GLdouble,GLint,GLdouble,GLdouble); +void GLAPIENTRY glMapGrid2f(GLint,GLfloat,GLfloat,GLint,GLfloat,GLfloat); +void GLAPIENTRY glMaterialf(GLenum,GLenum,GLfloat); +void GLAPIENTRY glMaterialfv(GLenum,GLenum,const GLfloat*); +void GLAPIENTRY glMateriali(GLenum,GLenum,GLint); +void GLAPIENTRY glMaterialiv(GLenum,GLenum,const GLint*); +void GLAPIENTRY glMatrixMode(GLenum); +void GLAPIENTRY glMultMatrixd(const GLdouble*); +void GLAPIENTRY glMultMatrixf(const GLfloat*); +void GLAPIENTRY glNewList(GLuint,GLenum); +void GLAPIENTRY glNormal3b(GLbyte,GLbyte,GLbyte); +void GLAPIENTRY glNormal3bv(const GLbyte*); +void GLAPIENTRY glNormal3d(GLdouble,GLdouble,GLdouble); +void GLAPIENTRY glNormal3dv(const GLdouble*); +void GLAPIENTRY glNormal3f(GLfloat,GLfloat,GLfloat); +void GLAPIENTRY glNormal3fv(const GLfloat*); +void GLAPIENTRY glNormal3i(GLint,GLint,GLint); +void GLAPIENTRY glNormal3iv(const GLint*); +void GLAPIENTRY glNormal3s(GLshort,GLshort,GLshort); +void GLAPIENTRY glNormal3sv(const GLshort*); +void GLAPIENTRY glNormalPointer(GLenum,GLsizei,const GLvoid*); +void GLAPIENTRY glOrtho(GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble); +void GLAPIENTRY glPassThrough(GLfloat); +void GLAPIENTRY glPixelMapfv(GLenum,GLint,const GLfloat*); +void GLAPIENTRY glPixelMapuiv(GLenum,GLint,const GLuint*); +void GLAPIENTRY glPixelMapusv(GLenum,GLint,const GLushort*); +void GLAPIENTRY glPixelStoref(GLenum,GLfloat); +void GLAPIENTRY glPixelStorei(GLenum,GLint); +void GLAPIENTRY glPixelTransferf(GLenum,GLfloat); +void GLAPIENTRY glPixelTransferi(GLenum,GLint); +void GLAPIENTRY glPixelZoom(GLfloat,GLfloat); +void GLAPIENTRY glPointSize(GLfloat); +void GLAPIENTRY glPolygonMode(GLenum,GLenum); +void GLAPIENTRY glPolygonOffset(GLfloat,GLfloat); +void GLAPIENTRY glPolygonStipple(const GLubyte*); +void GLAPIENTRY glPopAttrib(void); +void GLAPIENTRY glPopClientAttrib(void); +void GLAPIENTRY glPopMatrix(void); +void GLAPIENTRY glPopName(void); +void GLAPIENTRY glPrioritizeTextures(GLsizei,const GLuint*,const GLfloat*); +void GLAPIENTRY glPushAttrib(GLbitfield); +void GLAPIENTRY glPushClientAttrib(GLbitfield); +void GLAPIENTRY glPushMatrix(void); +void GLAPIENTRY glPushName(GLuint); +void GLAPIENTRY glRasterPos2d(GLdouble,GLdouble); +void GLAPIENTRY glRasterPos2dv(const GLdouble*); +void GLAPIENTRY glRasterPos2f(GLfloat,GLfloat); +void GLAPIENTRY glRasterPos2fv(const GLfloat*); +void GLAPIENTRY glRasterPos2i(GLint,GLint); +void GLAPIENTRY glRasterPos2iv(const GLint*); +void GLAPIENTRY glRasterPos2s(GLshort,GLshort); +void GLAPIENTRY glRasterPos2sv(const GLshort*); +void GLAPIENTRY glRasterPos3d(GLdouble,GLdouble,GLdouble); +void GLAPIENTRY glRasterPos3dv(const GLdouble*); +void GLAPIENTRY glRasterPos3f(GLfloat,GLfloat,GLfloat); +void GLAPIENTRY glRasterPos3fv(const GLfloat*); +void GLAPIENTRY glRasterPos3i(GLint,GLint,GLint); +void GLAPIENTRY glRasterPos3iv(const GLint*); +void GLAPIENTRY glRasterPos3s(GLshort,GLshort,GLshort); +void GLAPIENTRY glRasterPos3sv(const GLshort*); +void GLAPIENTRY glRasterPos4d(GLdouble,GLdouble,GLdouble,GLdouble); +void GLAPIENTRY glRasterPos4dv(const GLdouble*); +void GLAPIENTRY glRasterPos4f(GLfloat,GLfloat,GLfloat,GLfloat); +void GLAPIENTRY glRasterPos4fv(const GLfloat*); +void GLAPIENTRY glRasterPos4i(GLint,GLint,GLint,GLint); +void GLAPIENTRY glRasterPos4iv(const GLint*); +void GLAPIENTRY glRasterPos4s(GLshort,GLshort,GLshort,GLshort); +void GLAPIENTRY glRasterPos4sv(const GLshort*); +void GLAPIENTRY glReadBuffer(GLenum); +void GLAPIENTRY glReadPixels(GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,GLvoid*); +void GLAPIENTRY glRectd(GLdouble,GLdouble,GLdouble,GLdouble); +void GLAPIENTRY glRectdv(const GLdouble*,const GLdouble*); +void GLAPIENTRY glRectf(GLfloat,GLfloat,GLfloat,GLfloat); +void GLAPIENTRY glRectfv(const GLfloat*,const GLfloat*); +void GLAPIENTRY glRecti(GLint,GLint,GLint,GLint); +void GLAPIENTRY glRectiv(const GLint*,const GLint*); +void GLAPIENTRY glRects(GLshort,GLshort,GLshort,GLshort); +void GLAPIENTRY glRectsv(const GLshort*,const GLshort*); +GLint GLAPIENTRY glRenderMode(GLenum); +void GLAPIENTRY glRotated(GLdouble,GLdouble,GLdouble,GLdouble); +void GLAPIENTRY glRotatef(GLfloat,GLfloat,GLfloat,GLfloat); +void GLAPIENTRY glScaled(GLdouble,GLdouble,GLdouble); +void GLAPIENTRY glScalef(GLfloat,GLfloat,GLfloat); +void GLAPIENTRY glScissor(GLint,GLint,GLsizei,GLsizei); +void GLAPIENTRY glSelectBuffer(GLsizei,GLuint*); +void GLAPIENTRY glShadeModel(GLenum); +void GLAPIENTRY glStencilFunc(GLenum,GLint,GLuint); +void GLAPIENTRY glStencilMask(GLuint); +void GLAPIENTRY glStencilOp(GLenum,GLenum,GLenum); +void GLAPIENTRY glTexCoord1d(GLdouble); +void GLAPIENTRY glTexCoord1dv(const GLdouble*); +void GLAPIENTRY glTexCoord1f(GLfloat); +void GLAPIENTRY glTexCoord1fv(const GLfloat*); +void GLAPIENTRY glTexCoord1i(GLint); +void GLAPIENTRY glTexCoord1iv(const GLint*); +void GLAPIENTRY glTexCoord1s(GLshort); +void GLAPIENTRY glTexCoord1sv(const GLshort*); +void GLAPIENTRY glTexCoord2d(GLdouble,GLdouble); +void GLAPIENTRY glTexCoord2dv(const GLdouble*); +void GLAPIENTRY glTexCoord2f(GLfloat,GLfloat); +void GLAPIENTRY glTexCoord2fv(const GLfloat*); +void GLAPIENTRY glTexCoord2i(GLint,GLint); +void GLAPIENTRY glTexCoord2iv(const GLint*); +void GLAPIENTRY glTexCoord2s(GLshort,GLshort); +void GLAPIENTRY glTexCoord2sv(const GLshort*); +void GLAPIENTRY glTexCoord3d(GLdouble,GLdouble,GLdouble); +void GLAPIENTRY glTexCoord3dv(const GLdouble*); +void GLAPIENTRY glTexCoord3f(GLfloat,GLfloat,GLfloat); +void GLAPIENTRY glTexCoord3fv(const GLfloat*); +void GLAPIENTRY glTexCoord3i(GLint,GLint,GLint); +void GLAPIENTRY glTexCoord3iv(const GLint*); +void GLAPIENTRY glTexCoord3s(GLshort,GLshort,GLshort); +void GLAPIENTRY glTexCoord3sv(const GLshort*); +void GLAPIENTRY glTexCoord4d(GLdouble,GLdouble,GLdouble,GLdouble); +void GLAPIENTRY glTexCoord4dv(const GLdouble*); +void GLAPIENTRY glTexCoord4f(GLfloat,GLfloat,GLfloat,GLfloat); +void GLAPIENTRY glTexCoord4fv(const GLfloat*); +void GLAPIENTRY glTexCoord4i(GLint,GLint,GLint,GLint); +void GLAPIENTRY glTexCoord4iv(const GLint*); +void GLAPIENTRY glTexCoord4s(GLshort,GLshort,GLshort,GLshort); +void GLAPIENTRY glTexCoord4sv(const GLshort*); +void GLAPIENTRY glTexCoordPointer(GLint,GLenum,GLsizei,const GLvoid*); +void GLAPIENTRY glTexEnvf(GLenum,GLenum,GLfloat); +void GLAPIENTRY glTexEnvfv(GLenum,GLenum,const GLfloat*); +void GLAPIENTRY glTexEnvi(GLenum,GLenum,GLint); +void GLAPIENTRY glTexEnviv(GLenum,GLenum,const GLint*); +void GLAPIENTRY glTexGend(GLenum,GLenum,GLdouble); +void GLAPIENTRY glTexGendv(GLenum,GLenum,const GLdouble*); +void GLAPIENTRY glTexGenf(GLenum,GLenum,GLfloat); +void GLAPIENTRY glTexGenfv(GLenum,GLenum,const GLfloat*); +void GLAPIENTRY glTexGeni(GLenum,GLenum,GLint); +void GLAPIENTRY glTexGeniv(GLenum,GLenum,const GLint*); +void GLAPIENTRY glTexImage1D(GLenum,GLint,GLint,GLsizei,GLint,GLenum,GLenum,const GLvoid*); +void GLAPIENTRY glTexImage2D(GLenum,GLint,GLint,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*); +void GLAPIENTRY glTexParameterf(GLenum,GLenum,GLfloat); +void GLAPIENTRY glTexParameterfv(GLenum,GLenum,const GLfloat*); +void GLAPIENTRY glTexParameteri(GLenum,GLenum,GLint); +void GLAPIENTRY glTexParameteriv(GLenum,GLenum,const GLint*); +void GLAPIENTRY glTexSubImage1D(GLenum,GLint,GLint,GLsizei,GLenum,GLenum,const GLvoid*); +void GLAPIENTRY glTexSubImage2D(GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*); +void GLAPIENTRY glTranslated(GLdouble,GLdouble,GLdouble); +void GLAPIENTRY glTranslatef(GLfloat,GLfloat,GLfloat); +void GLAPIENTRY glVertex2d(GLdouble,GLdouble); +void GLAPIENTRY glVertex2dv(const GLdouble*); +void GLAPIENTRY glVertex2f(GLfloat,GLfloat); +void GLAPIENTRY glVertex2fv(const GLfloat*); +void GLAPIENTRY glVertex2i(GLint,GLint); +void GLAPIENTRY glVertex2iv(const GLint*); +void GLAPIENTRY glVertex2s(GLshort,GLshort); +void GLAPIENTRY glVertex2sv(const GLshort*); +void GLAPIENTRY glVertex3d(GLdouble,GLdouble,GLdouble); +void GLAPIENTRY glVertex3dv(const GLdouble*); +void GLAPIENTRY glVertex3f(GLfloat,GLfloat,GLfloat); +void GLAPIENTRY glVertex3fv(const GLfloat*); +void GLAPIENTRY glVertex3i(GLint,GLint,GLint); +void GLAPIENTRY glVertex3iv(const GLint*); +void GLAPIENTRY glVertex3s(GLshort,GLshort,GLshort); +void GLAPIENTRY glVertex3sv(const GLshort*); +void GLAPIENTRY glVertex4d(GLdouble,GLdouble,GLdouble,GLdouble); +void GLAPIENTRY glVertex4dv(const GLdouble*); +void GLAPIENTRY glVertex4f(GLfloat,GLfloat,GLfloat,GLfloat); +void GLAPIENTRY glVertex4fv(const GLfloat*); +void GLAPIENTRY glVertex4i(GLint,GLint,GLint,GLint); +void GLAPIENTRY glVertex4iv(const GLint*); +void GLAPIENTRY glVertex4s(GLshort,GLshort,GLshort,GLshort); +void GLAPIENTRY glVertex4sv(const GLshort*); +void GLAPIENTRY glVertexPointer(GLint,GLenum,GLsizei,const GLvoid*); +void GLAPIENTRY glViewport(GLint,GLint,GLsizei,GLsizei); + +#endif /* __WINE_WGL_H */ diff --git a/include/reactos/wine/wgl_driver.h b/include/reactos/wine/wgl_driver.h index c4092e2f578..8d235017b84 100644 --- a/include/reactos/wine/wgl_driver.h +++ b/include/reactos/wine/wgl_driver.h @@ -7,7 +7,7 @@ #define WINE_GLAPI #endif -#define WINE_WGL_DRIVER_VERSION 6 +#define WINE_WGL_DRIVER_VERSION 10 struct wgl_context; struct wgl_pbuffer; @@ -25,6 +25,7 @@ struct opengl_funcs BOOL (WINE_GLAPI *p_wglMakeCurrent)(HDC,struct wgl_context *); BOOL (WINE_GLAPI *p_wglSetPixelFormat)(HDC,INT,const PIXELFORMATDESCRIPTOR *); BOOL (WINE_GLAPI *p_wglShareLists)(struct wgl_context *,struct wgl_context *); + BOOL (WINE_GLAPI *p_wglSwapBuffers)(HDC); } wgl; struct @@ -374,7 +375,7 @@ struct opengl_funcs void (WINE_GLAPI *p_glActiveStencilFaceEXT)(GLenum); void (WINE_GLAPI *p_glActiveTexture)(GLenum); void (WINE_GLAPI *p_glActiveTextureARB)(GLenum); - void (WINE_GLAPI *p_glActiveVaryingNV)(GLuint,const char*); + void (WINE_GLAPI *p_glActiveVaryingNV)(GLuint,const GLchar*); void (WINE_GLAPI *p_glAlphaFragmentOp1ATI)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint); void (WINE_GLAPI *p_glAlphaFragmentOp2ATI)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint); void (WINE_GLAPI *p_glAlphaFragmentOp3ATI)(GLenum,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint,GLuint); @@ -384,7 +385,7 @@ struct opengl_funcs void (WINE_GLAPI *p_glArrayElementEXT)(GLint); void (WINE_GLAPI *p_glArrayObjectATI)(GLenum,GLint,GLenum,GLsizei,GLuint,GLuint); void (WINE_GLAPI *p_glAsyncMarkerSGIX)(GLuint); - void (WINE_GLAPI *p_glAttachObjectARB)(unsigned int,unsigned int); + void (WINE_GLAPI *p_glAttachObjectARB)(GLhandleARB,GLhandleARB); void (WINE_GLAPI *p_glAttachShader)(GLuint,GLuint); void (WINE_GLAPI *p_glBeginConditionalRender)(GLuint,GLenum); void (WINE_GLAPI *p_glBeginConditionalRenderNV)(GLuint,GLenum); @@ -399,21 +400,21 @@ struct opengl_funcs void (WINE_GLAPI *p_glBeginTransformFeedbackNV)(GLenum); void (WINE_GLAPI *p_glBeginVertexShaderEXT)(void); void (WINE_GLAPI *p_glBeginVideoCaptureNV)(GLuint); - void (WINE_GLAPI *p_glBindAttribLocation)(GLuint,GLuint,const char*); - void (WINE_GLAPI *p_glBindAttribLocationARB)(unsigned int,GLuint,const char*); + void (WINE_GLAPI *p_glBindAttribLocation)(GLuint,GLuint,const GLchar*); + void (WINE_GLAPI *p_glBindAttribLocationARB)(GLhandleARB,GLuint,const GLcharARB*); void (WINE_GLAPI *p_glBindBuffer)(GLenum,GLuint); void (WINE_GLAPI *p_glBindBufferARB)(GLenum,GLuint); void (WINE_GLAPI *p_glBindBufferBase)(GLenum,GLuint,GLuint); void (WINE_GLAPI *p_glBindBufferBaseEXT)(GLenum,GLuint,GLuint); void (WINE_GLAPI *p_glBindBufferBaseNV)(GLenum,GLuint,GLuint); - void (WINE_GLAPI *p_glBindBufferOffsetEXT)(GLenum,GLuint,GLuint,INT_PTR); - void (WINE_GLAPI *p_glBindBufferOffsetNV)(GLenum,GLuint,GLuint,INT_PTR); - void (WINE_GLAPI *p_glBindBufferRange)(GLenum,GLuint,GLuint,INT_PTR,INT_PTR); - void (WINE_GLAPI *p_glBindBufferRangeEXT)(GLenum,GLuint,GLuint,INT_PTR,INT_PTR); - void (WINE_GLAPI *p_glBindBufferRangeNV)(GLenum,GLuint,GLuint,INT_PTR,INT_PTR); - void (WINE_GLAPI *p_glBindFragDataLocation)(GLuint,GLuint,const char*); - void (WINE_GLAPI *p_glBindFragDataLocationEXT)(GLuint,GLuint,const char*); - void (WINE_GLAPI *p_glBindFragDataLocationIndexed)(GLuint,GLuint,GLuint,const char*); + void (WINE_GLAPI *p_glBindBufferOffsetEXT)(GLenum,GLuint,GLuint,GLintptr); + void (WINE_GLAPI *p_glBindBufferOffsetNV)(GLenum,GLuint,GLuint,GLintptr); + void (WINE_GLAPI *p_glBindBufferRange)(GLenum,GLuint,GLuint,GLintptr,GLsizeiptr); + void (WINE_GLAPI *p_glBindBufferRangeEXT)(GLenum,GLuint,GLuint,GLintptr,GLsizeiptr); + void (WINE_GLAPI *p_glBindBufferRangeNV)(GLenum,GLuint,GLuint,GLintptr,GLsizeiptr); + void (WINE_GLAPI *p_glBindFragDataLocation)(GLuint,GLuint,const GLchar*); + void (WINE_GLAPI *p_glBindFragDataLocationEXT)(GLuint,GLuint,const GLchar*); + void (WINE_GLAPI *p_glBindFragDataLocationIndexed)(GLuint,GLuint,GLuint,const GLchar*); void (WINE_GLAPI *p_glBindFragmentShaderATI)(GLuint); void (WINE_GLAPI *p_glBindFramebuffer)(GLenum,GLuint); void (WINE_GLAPI *p_glBindFramebufferEXT)(GLenum,GLuint); @@ -436,8 +437,9 @@ struct opengl_funcs void (WINE_GLAPI *p_glBindTransformFeedbackNV)(GLenum,GLuint); void (WINE_GLAPI *p_glBindVertexArray)(GLuint); void (WINE_GLAPI *p_glBindVertexArrayAPPLE)(GLuint); + void (WINE_GLAPI *p_glBindVertexBuffer)(GLuint,GLuint,GLintptr,GLsizei); void (WINE_GLAPI *p_glBindVertexShaderEXT)(GLuint); - void (WINE_GLAPI *p_glBindVideoCaptureStreamBufferNV)(GLuint,GLuint,GLenum,INT_PTR); + void (WINE_GLAPI *p_glBindVideoCaptureStreamBufferNV)(GLuint,GLuint,GLenum,GLintptrARB); void (WINE_GLAPI *p_glBindVideoCaptureStreamTextureNV)(GLuint,GLuint,GLenum,GLenum,GLuint); void (WINE_GLAPI *p_glBinormal3bEXT)(GLbyte,GLbyte,GLbyte); void (WINE_GLAPI *p_glBinormal3bvEXT)(const GLbyte*); @@ -473,18 +475,20 @@ struct opengl_funcs void (WINE_GLAPI *p_glBlendFunciARB)(GLuint,GLenum,GLenum); void (WINE_GLAPI *p_glBlitFramebuffer)(GLint,GLint,GLint,GLint,GLint,GLint,GLint,GLint,GLbitfield,GLenum); void (WINE_GLAPI *p_glBlitFramebufferEXT)(GLint,GLint,GLint,GLint,GLint,GLint,GLint,GLint,GLbitfield,GLenum); - void (WINE_GLAPI *p_glBufferAddressRangeNV)(GLenum,GLuint,UINT64,INT_PTR); - void (WINE_GLAPI *p_glBufferData)(GLenum,INT_PTR,const GLvoid*,GLenum); - void (WINE_GLAPI *p_glBufferDataARB)(GLenum,INT_PTR,const GLvoid*,GLenum); + void (WINE_GLAPI *p_glBufferAddressRangeNV)(GLenum,GLuint,UINT64,GLsizeiptr); + void (WINE_GLAPI *p_glBufferData)(GLenum,GLsizeiptr,const GLvoid*,GLenum); + void (WINE_GLAPI *p_glBufferDataARB)(GLenum,GLsizeiptrARB,const GLvoid*,GLenum); void (WINE_GLAPI *p_glBufferParameteriAPPLE)(GLenum,GLenum,GLint); GLuint (WINE_GLAPI *p_glBufferRegionEnabled)(void); - void (WINE_GLAPI *p_glBufferSubData)(GLenum,INT_PTR,INT_PTR,const GLvoid*); - void (WINE_GLAPI *p_glBufferSubDataARB)(GLenum,INT_PTR,INT_PTR,const GLvoid*); + void (WINE_GLAPI *p_glBufferSubData)(GLenum,GLintptr,GLsizeiptr,const GLvoid*); + void (WINE_GLAPI *p_glBufferSubDataARB)(GLenum,GLintptrARB,GLsizeiptrARB,const GLvoid*); GLenum (WINE_GLAPI *p_glCheckFramebufferStatus)(GLenum); GLenum (WINE_GLAPI *p_glCheckFramebufferStatusEXT)(GLenum); GLenum (WINE_GLAPI *p_glCheckNamedFramebufferStatusEXT)(GLuint,GLenum); void (WINE_GLAPI *p_glClampColor)(GLenum,GLenum); void (WINE_GLAPI *p_glClampColorARB)(GLenum,GLenum); + void (WINE_GLAPI *p_glClearBufferData)(GLenum,GLenum,GLenum,GLenum,const void*); + void (WINE_GLAPI *p_glClearBufferSubData)(GLenum,GLenum,GLintptr,GLsizeiptr,GLenum,GLenum,const void*); void (WINE_GLAPI *p_glClearBufferfi)(GLenum,GLint,GLfloat,GLint); void (WINE_GLAPI *p_glClearBufferfv)(GLenum,GLint,const GLfloat*); void (WINE_GLAPI *p_glClearBufferiv)(GLenum,GLint,const GLint*); @@ -493,6 +497,8 @@ struct opengl_funcs void (WINE_GLAPI *p_glClearColorIuiEXT)(GLuint,GLuint,GLuint,GLuint); void (WINE_GLAPI *p_glClearDepthdNV)(GLdouble); void (WINE_GLAPI *p_glClearDepthf)(GLfloat); + void (WINE_GLAPI *p_glClearNamedBufferDataEXT)(GLuint,GLenum,GLenum,GLenum,const void*); + void (WINE_GLAPI *p_glClearNamedBufferSubDataEXT)(GLuint,GLenum,GLenum,GLenum,GLsizeiptr,GLsizeiptr,const void*); void (WINE_GLAPI *p_glClientActiveTexture)(GLenum); void (WINE_GLAPI *p_glClientActiveTextureARB)(GLenum); void (WINE_GLAPI *p_glClientActiveVertexStreamATI)(GLenum); @@ -500,12 +506,12 @@ struct opengl_funcs GLenum (WINE_GLAPI *p_glClientWaitSync)(GLvoid*,GLbitfield,UINT64); void (WINE_GLAPI *p_glColor3fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat); void (WINE_GLAPI *p_glColor3fVertex3fvSUN)(const GLfloat*,const GLfloat*); - void (WINE_GLAPI *p_glColor3hNV)(unsigned short,unsigned short,unsigned short); - void (WINE_GLAPI *p_glColor3hvNV)(const unsigned short*); + void (WINE_GLAPI *p_glColor3hNV)(GLhalfNV,GLhalfNV,GLhalfNV); + void (WINE_GLAPI *p_glColor3hvNV)(const GLhalfNV*); void (WINE_GLAPI *p_glColor4fNormal3fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat); void (WINE_GLAPI *p_glColor4fNormal3fVertex3fvSUN)(const GLfloat*,const GLfloat*,const GLfloat*); - void (WINE_GLAPI *p_glColor4hNV)(unsigned short,unsigned short,unsigned short,unsigned short); - void (WINE_GLAPI *p_glColor4hvNV)(const unsigned short*); + void (WINE_GLAPI *p_glColor4hNV)(GLhalfNV,GLhalfNV,GLhalfNV,GLhalfNV); + void (WINE_GLAPI *p_glColor4hvNV)(const GLhalfNV*); void (WINE_GLAPI *p_glColor4ubVertex2fSUN)(GLubyte,GLubyte,GLubyte,GLubyte,GLfloat,GLfloat); void (WINE_GLAPI *p_glColor4ubVertex2fvSUN)(const GLubyte*,const GLfloat*); void (WINE_GLAPI *p_glColor4ubVertex3fSUN)(GLubyte,GLubyte,GLubyte,GLubyte,GLfloat,GLfloat,GLfloat); @@ -540,8 +546,8 @@ struct opengl_funcs void (WINE_GLAPI *p_glCombinerParameterivNV)(GLenum,const GLint*); void (WINE_GLAPI *p_glCombinerStageParameterfvNV)(GLenum,GLenum,const GLfloat*); void (WINE_GLAPI *p_glCompileShader)(GLuint); - void (WINE_GLAPI *p_glCompileShaderARB)(unsigned int); - void (WINE_GLAPI *p_glCompileShaderIncludeARB)(GLuint,GLsizei,const char**,const GLint*); + void (WINE_GLAPI *p_glCompileShaderARB)(GLhandleARB); + void (WINE_GLAPI *p_glCompileShaderIncludeARB)(GLuint,GLsizei,const GLchar**,const GLint*); void (WINE_GLAPI *p_glCompressedMultiTexImage1DEXT)(GLenum,GLenum,GLint,GLenum,GLsizei,GLint,GLsizei,const GLvoid*); void (WINE_GLAPI *p_glCompressedMultiTexImage2DEXT)(GLenum,GLenum,GLint,GLenum,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*); void (WINE_GLAPI *p_glCompressedMultiTexImage3DEXT)(GLenum,GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLint,GLsizei,const GLvoid*); @@ -578,7 +584,7 @@ struct opengl_funcs void (WINE_GLAPI *p_glConvolutionParameteriEXT)(GLenum,GLenum,GLint); void (WINE_GLAPI *p_glConvolutionParameteriv)(GLenum,GLenum,const GLint*); void (WINE_GLAPI *p_glConvolutionParameterivEXT)(GLenum,GLenum,const GLint*); - void (WINE_GLAPI *p_glCopyBufferSubData)(GLenum,GLenum,INT_PTR,INT_PTR,INT_PTR); + void (WINE_GLAPI *p_glCopyBufferSubData)(GLenum,GLenum,GLintptr,GLintptr,GLsizeiptr); void (WINE_GLAPI *p_glCopyColorSubTable)(GLenum,GLsizei,GLint,GLint,GLsizei); void (WINE_GLAPI *p_glCopyColorSubTableEXT)(GLenum,GLsizei,GLint,GLint,GLsizei); void (WINE_GLAPI *p_glCopyColorTable)(GLenum,GLenum,GLint,GLint,GLsizei); @@ -587,6 +593,7 @@ struct opengl_funcs void (WINE_GLAPI *p_glCopyConvolutionFilter1DEXT)(GLenum,GLenum,GLint,GLint,GLsizei); void (WINE_GLAPI *p_glCopyConvolutionFilter2D)(GLenum,GLenum,GLint,GLint,GLsizei,GLsizei); void (WINE_GLAPI *p_glCopyConvolutionFilter2DEXT)(GLenum,GLenum,GLint,GLint,GLsizei,GLsizei); + void (WINE_GLAPI *p_glCopyImageSubData)(GLuint,GLenum,GLint,GLint,GLint,GLint,GLuint,GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei); void (WINE_GLAPI *p_glCopyImageSubDataNV)(GLuint,GLenum,GLint,GLint,GLint,GLint,GLuint,GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei); void (WINE_GLAPI *p_glCopyMultiTexImage1DEXT)(GLenum,GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLint); void (WINE_GLAPI *p_glCopyMultiTexImage2DEXT)(GLenum,GLenum,GLint,GLenum,GLint,GLint,GLsizei,GLsizei,GLint); @@ -610,21 +617,24 @@ struct opengl_funcs void (WINE_GLAPI *p_glCoverStrokePathInstancedNV)(GLsizei,GLenum,const GLvoid*,GLuint,GLenum,GLenum,const GLfloat*); void (WINE_GLAPI *p_glCoverStrokePathNV)(GLuint,GLenum); GLuint (WINE_GLAPI *p_glCreateProgram)(void); - unsigned int (WINE_GLAPI *p_glCreateProgramObjectARB)(void); + GLhandleARB (WINE_GLAPI *p_glCreateProgramObjectARB)(void); GLuint (WINE_GLAPI *p_glCreateShader)(GLenum); - unsigned int (WINE_GLAPI *p_glCreateShaderObjectARB)(GLenum); - GLuint (WINE_GLAPI *p_glCreateShaderProgramEXT)(GLenum,const char*); - GLuint (WINE_GLAPI *p_glCreateShaderProgramv)(GLenum,GLsizei,const char* const*); + GLhandleARB (WINE_GLAPI *p_glCreateShaderObjectARB)(GLenum); + GLuint (WINE_GLAPI *p_glCreateShaderProgramEXT)(GLenum,const GLchar*); + GLuint (WINE_GLAPI *p_glCreateShaderProgramv)(GLenum,GLsizei,const GLchar* const*); GLvoid* (WINE_GLAPI *p_glCreateSyncFromCLeventARB)(void *,void *,GLbitfield); void (WINE_GLAPI *p_glCullParameterdvEXT)(GLenum,GLdouble*); void (WINE_GLAPI *p_glCullParameterfvEXT)(GLenum,GLfloat*); void (WINE_GLAPI *p_glCurrentPaletteMatrixARB)(GLint); + void (WINE_GLAPI *p_glDebugMessageCallback)(void *,const void*); void (WINE_GLAPI *p_glDebugMessageCallbackAMD)(void *,GLvoid*); void (WINE_GLAPI *p_glDebugMessageCallbackARB)(void *,const GLvoid*); + void (WINE_GLAPI *p_glDebugMessageControl)(GLenum,GLenum,GLenum,GLsizei,const GLuint*,GLboolean); void (WINE_GLAPI *p_glDebugMessageControlARB)(GLenum,GLenum,GLenum,GLsizei,const GLuint*,GLboolean); void (WINE_GLAPI *p_glDebugMessageEnableAMD)(GLenum,GLenum,GLsizei,const GLuint*,GLboolean); - void (WINE_GLAPI *p_glDebugMessageInsertAMD)(GLenum,GLenum,GLuint,GLsizei,const char*); - void (WINE_GLAPI *p_glDebugMessageInsertARB)(GLenum,GLenum,GLuint,GLenum,GLsizei,const char*); + void (WINE_GLAPI *p_glDebugMessageInsert)(GLenum,GLenum,GLuint,GLenum,GLsizei,const GLchar*); + void (WINE_GLAPI *p_glDebugMessageInsertAMD)(GLenum,GLenum,GLuint,GLsizei,const GLchar*); + void (WINE_GLAPI *p_glDebugMessageInsertARB)(GLenum,GLenum,GLuint,GLenum,GLsizei,const GLchar*); void (WINE_GLAPI *p_glDeformSGIX)(GLbitfield); void (WINE_GLAPI *p_glDeformationMap3dSGIX)(GLenum,GLdouble,GLdouble,GLint,GLint,GLdouble,GLdouble,GLint,GLint,GLdouble,GLdouble,GLint,GLint,const GLdouble*); void (WINE_GLAPI *p_glDeformationMap3fSGIX)(GLenum,GLfloat,GLfloat,GLint,GLint,GLfloat,GLfloat,GLint,GLint,GLfloat,GLfloat,GLint,GLint,const GLfloat*); @@ -637,9 +647,9 @@ struct opengl_funcs void (WINE_GLAPI *p_glDeleteFragmentShaderATI)(GLuint); void (WINE_GLAPI *p_glDeleteFramebuffers)(GLsizei,const GLuint*); void (WINE_GLAPI *p_glDeleteFramebuffersEXT)(GLsizei,const GLuint*); - void (WINE_GLAPI *p_glDeleteNamedStringARB)(GLint,const char*); + void (WINE_GLAPI *p_glDeleteNamedStringARB)(GLint,const GLchar*); void (WINE_GLAPI *p_glDeleteNamesAMD)(GLenum,GLuint,const GLuint*); - void (WINE_GLAPI *p_glDeleteObjectARB)(unsigned int); + void (WINE_GLAPI *p_glDeleteObjectARB)(GLhandleARB); void (WINE_GLAPI *p_glDeleteObjectBufferATI)(GLuint); void (WINE_GLAPI *p_glDeleteOcclusionQueriesNV)(GLsizei,const GLuint*); void (WINE_GLAPI *p_glDeletePathsNV)(GLuint,GLsizei); @@ -667,7 +677,7 @@ struct opengl_funcs void (WINE_GLAPI *p_glDepthRangeIndexed)(GLuint,GLdouble,GLdouble); void (WINE_GLAPI *p_glDepthRangedNV)(GLdouble,GLdouble); void (WINE_GLAPI *p_glDepthRangef)(GLfloat,GLfloat); - void (WINE_GLAPI *p_glDetachObjectARB)(unsigned int,unsigned int); + void (WINE_GLAPI *p_glDetachObjectARB)(GLhandleARB,GLhandleARB); void (WINE_GLAPI *p_glDetachShader)(GLuint,GLuint); void (WINE_GLAPI *p_glDetailTexFuncSGIS)(GLenum,GLsizei,const GLfloat*); void (WINE_GLAPI *p_glDisableClientStateIndexedEXT)(GLenum,GLuint); @@ -677,6 +687,8 @@ struct opengl_funcs void (WINE_GLAPI *p_glDisableVertexAttribArray)(GLuint); void (WINE_GLAPI *p_glDisableVertexAttribArrayARB)(GLuint); void (WINE_GLAPI *p_glDisablei)(GLenum,GLuint); + void (WINE_GLAPI *p_glDispatchCompute)(GLuint,GLuint,GLuint); + void (WINE_GLAPI *p_glDispatchComputeIndirect)(GLintptr); void (WINE_GLAPI *p_glDrawArraysEXT)(GLenum,GLint,GLsizei); void (WINE_GLAPI *p_glDrawArraysIndirect)(GLenum,const GLvoid*); void (WINE_GLAPI *p_glDrawArraysInstanced)(GLenum,GLint,GLsizei,GLsizei); @@ -743,9 +755,9 @@ struct opengl_funcs void (WINE_GLAPI *p_glFinishFenceNV)(GLuint); void (WINE_GLAPI *p_glFinishObjectAPPLE)(GLenum,GLint); void (WINE_GLAPI *p_glFinishTextureSUNX)(void); - void (WINE_GLAPI *p_glFlushMappedBufferRange)(GLenum,INT_PTR,INT_PTR); - void (WINE_GLAPI *p_glFlushMappedBufferRangeAPPLE)(GLenum,INT_PTR,INT_PTR); - void (WINE_GLAPI *p_glFlushMappedNamedBufferRangeEXT)(GLuint,INT_PTR,INT_PTR); + void (WINE_GLAPI *p_glFlushMappedBufferRange)(GLenum,GLintptr,GLsizeiptr); + void (WINE_GLAPI *p_glFlushMappedBufferRangeAPPLE)(GLenum,GLintptr,GLsizeiptr); + void (WINE_GLAPI *p_glFlushMappedNamedBufferRangeEXT)(GLuint,GLintptr,GLsizeiptr); void (WINE_GLAPI *p_glFlushPixelDataRangeNV)(GLenum); void (WINE_GLAPI *p_glFlushRasterSGIX)(void); void (WINE_GLAPI *p_glFlushVertexArrayRangeAPPLE)(GLsizei,GLvoid*); @@ -762,8 +774,8 @@ struct opengl_funcs void (WINE_GLAPI *p_glFogCoordfEXT)(GLfloat); void (WINE_GLAPI *p_glFogCoordfv)(const GLfloat*); void (WINE_GLAPI *p_glFogCoordfvEXT)(const GLfloat*); - void (WINE_GLAPI *p_glFogCoordhNV)(unsigned short); - void (WINE_GLAPI *p_glFogCoordhvNV)(const unsigned short*); + void (WINE_GLAPI *p_glFogCoordhNV)(GLhalfNV); + void (WINE_GLAPI *p_glFogCoordhvNV)(const GLhalfNV*); void (WINE_GLAPI *p_glFogFuncSGIS)(GLsizei,const GLfloat*); void (WINE_GLAPI *p_glFragmentColorMaterialSGIX)(GLenum,GLenum); void (WINE_GLAPI *p_glFragmentLightModelfSGIX)(GLenum,GLfloat); @@ -782,6 +794,7 @@ struct opengl_funcs void (WINE_GLAPI *p_glFrameZoomSGIX)(GLint); void (WINE_GLAPI *p_glFramebufferDrawBufferEXT)(GLuint,GLenum); void (WINE_GLAPI *p_glFramebufferDrawBuffersEXT)(GLuint,GLsizei,const GLenum*); + void (WINE_GLAPI *p_glFramebufferParameteri)(GLenum,GLenum,GLint); void (WINE_GLAPI *p_glFramebufferReadBufferEXT)(GLuint,GLenum); void (WINE_GLAPI *p_glFramebufferRenderbuffer)(GLenum,GLenum,GLenum,GLuint); void (WINE_GLAPI *p_glFramebufferRenderbufferEXT)(GLenum,GLenum,GLenum,GLuint); @@ -832,24 +845,24 @@ struct opengl_funcs void (WINE_GLAPI *p_glGenerateMultiTexMipmapEXT)(GLenum,GLenum); void (WINE_GLAPI *p_glGenerateTextureMipmapEXT)(GLuint,GLenum); void (WINE_GLAPI *p_glGetActiveAtomicCounterBufferiv)(GLuint,GLuint,GLenum,GLint*); - void (WINE_GLAPI *p_glGetActiveAttrib)(GLuint,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,char*); - void (WINE_GLAPI *p_glGetActiveAttribARB)(unsigned int,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,char*); - void (WINE_GLAPI *p_glGetActiveSubroutineName)(GLuint,GLenum,GLuint,GLsizei,GLsizei*,char*); - void (WINE_GLAPI *p_glGetActiveSubroutineUniformName)(GLuint,GLenum,GLuint,GLsizei,GLsizei*,char*); + void (WINE_GLAPI *p_glGetActiveAttrib)(GLuint,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,GLchar*); + void (WINE_GLAPI *p_glGetActiveAttribARB)(GLhandleARB,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,GLcharARB*); + void (WINE_GLAPI *p_glGetActiveSubroutineName)(GLuint,GLenum,GLuint,GLsizei,GLsizei*,GLchar*); + void (WINE_GLAPI *p_glGetActiveSubroutineUniformName)(GLuint,GLenum,GLuint,GLsizei,GLsizei*,GLchar*); void (WINE_GLAPI *p_glGetActiveSubroutineUniformiv)(GLuint,GLenum,GLuint,GLenum,GLint*); - void (WINE_GLAPI *p_glGetActiveUniform)(GLuint,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,char*); - void (WINE_GLAPI *p_glGetActiveUniformARB)(unsigned int,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,char*); - void (WINE_GLAPI *p_glGetActiveUniformBlockName)(GLuint,GLuint,GLsizei,GLsizei*,char*); + void (WINE_GLAPI *p_glGetActiveUniform)(GLuint,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,GLchar*); + void (WINE_GLAPI *p_glGetActiveUniformARB)(GLhandleARB,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,GLcharARB*); + void (WINE_GLAPI *p_glGetActiveUniformBlockName)(GLuint,GLuint,GLsizei,GLsizei*,GLchar*); void (WINE_GLAPI *p_glGetActiveUniformBlockiv)(GLuint,GLuint,GLenum,GLint*); - void (WINE_GLAPI *p_glGetActiveUniformName)(GLuint,GLuint,GLsizei,GLsizei*,char*); + void (WINE_GLAPI *p_glGetActiveUniformName)(GLuint,GLuint,GLsizei,GLsizei*,GLchar*); void (WINE_GLAPI *p_glGetActiveUniformsiv)(GLuint,GLsizei,const GLuint*,GLenum,GLint*); - void (WINE_GLAPI *p_glGetActiveVaryingNV)(GLuint,GLuint,GLsizei,GLsizei*,GLsizei*,GLenum*,char*); + void (WINE_GLAPI *p_glGetActiveVaryingNV)(GLuint,GLuint,GLsizei,GLsizei*,GLsizei*,GLenum*,GLchar*); void (WINE_GLAPI *p_glGetArrayObjectfvATI)(GLenum,GLenum,GLfloat*); void (WINE_GLAPI *p_glGetArrayObjectivATI)(GLenum,GLenum,GLint*); - void (WINE_GLAPI *p_glGetAttachedObjectsARB)(unsigned int,GLsizei,GLsizei*,unsigned int*); + void (WINE_GLAPI *p_glGetAttachedObjectsARB)(GLhandleARB,GLsizei,GLsizei*,GLhandleARB*); void (WINE_GLAPI *p_glGetAttachedShaders)(GLuint,GLsizei,GLsizei*,GLuint*); - GLint (WINE_GLAPI *p_glGetAttribLocation)(GLuint,const char*); - GLint (WINE_GLAPI *p_glGetAttribLocationARB)(unsigned int,const char*); + GLint (WINE_GLAPI *p_glGetAttribLocation)(GLuint,const GLchar*); + GLint (WINE_GLAPI *p_glGetAttribLocationARB)(GLhandleARB,const GLcharARB*); void (WINE_GLAPI *p_glGetBooleanIndexedvEXT)(GLenum,GLuint,GLboolean*); void (WINE_GLAPI *p_glGetBooleani_v)(GLenum,GLuint,GLboolean*); void (WINE_GLAPI *p_glGetBufferParameteri64v)(GLenum,GLenum,INT64*); @@ -858,8 +871,8 @@ struct opengl_funcs void (WINE_GLAPI *p_glGetBufferParameterui64vNV)(GLenum,GLenum,UINT64*); void (WINE_GLAPI *p_glGetBufferPointerv)(GLenum,GLenum,GLvoid**); void (WINE_GLAPI *p_glGetBufferPointervARB)(GLenum,GLenum,GLvoid**); - void (WINE_GLAPI *p_glGetBufferSubData)(GLenum,INT_PTR,INT_PTR,GLvoid*); - void (WINE_GLAPI *p_glGetBufferSubDataARB)(GLenum,INT_PTR,INT_PTR,GLvoid*); + void (WINE_GLAPI *p_glGetBufferSubData)(GLenum,GLintptr,GLsizeiptr,GLvoid*); + void (WINE_GLAPI *p_glGetBufferSubDataARB)(GLenum,GLintptrARB,GLsizeiptrARB,GLvoid*); void (WINE_GLAPI *p_glGetColorTable)(GLenum,GLenum,GLenum,GLvoid*); void (WINE_GLAPI *p_glGetColorTableEXT)(GLenum,GLenum,GLenum,GLvoid*); void (WINE_GLAPI *p_glGetColorTableParameterfv)(GLenum,GLenum,GLfloat*); @@ -884,8 +897,9 @@ struct opengl_funcs void (WINE_GLAPI *p_glGetConvolutionParameterfvEXT)(GLenum,GLenum,GLfloat*); void (WINE_GLAPI *p_glGetConvolutionParameteriv)(GLenum,GLenum,GLint*); void (WINE_GLAPI *p_glGetConvolutionParameterivEXT)(GLenum,GLenum,GLint*); - GLuint (WINE_GLAPI *p_glGetDebugMessageLogAMD)(GLuint,GLsizei,GLenum*,GLuint*,GLuint*,GLsizei*,char*); - GLuint (WINE_GLAPI *p_glGetDebugMessageLogARB)(GLuint,GLsizei,GLenum*,GLenum*,GLuint*,GLenum*,GLsizei*,char*); + GLuint (WINE_GLAPI *p_glGetDebugMessageLog)(GLuint,GLsizei,GLenum*,GLenum*,GLuint*,GLenum*,GLsizei*,GLchar*); + GLuint (WINE_GLAPI *p_glGetDebugMessageLogAMD)(GLuint,GLsizei,GLenum*,GLuint*,GLuint*,GLsizei*,GLchar*); + GLuint (WINE_GLAPI *p_glGetDebugMessageLogARB)(GLuint,GLsizei,GLenum*,GLenum*,GLuint*,GLenum*,GLsizei*,GLchar*); void (WINE_GLAPI *p_glGetDetailTexFuncSGIS)(GLenum,GLfloat*); void (WINE_GLAPI *p_glGetDoubleIndexedvEXT)(GLenum,GLuint,GLdouble*); void (WINE_GLAPI *p_glGetDoublei_v)(GLenum,GLuint,GLdouble*); @@ -895,18 +909,19 @@ struct opengl_funcs void (WINE_GLAPI *p_glGetFloatIndexedvEXT)(GLenum,GLuint,GLfloat*); void (WINE_GLAPI *p_glGetFloati_v)(GLenum,GLuint,GLfloat*); void (WINE_GLAPI *p_glGetFogFuncSGIS)(GLfloat*); - GLint (WINE_GLAPI *p_glGetFragDataIndex)(GLuint,const char*); - GLint (WINE_GLAPI *p_glGetFragDataLocation)(GLuint,const char*); - GLint (WINE_GLAPI *p_glGetFragDataLocationEXT)(GLuint,const char*); + GLint (WINE_GLAPI *p_glGetFragDataIndex)(GLuint,const GLchar*); + GLint (WINE_GLAPI *p_glGetFragDataLocation)(GLuint,const GLchar*); + GLint (WINE_GLAPI *p_glGetFragDataLocationEXT)(GLuint,const GLchar*); void (WINE_GLAPI *p_glGetFragmentLightfvSGIX)(GLenum,GLenum,GLfloat*); void (WINE_GLAPI *p_glGetFragmentLightivSGIX)(GLenum,GLenum,GLint*); void (WINE_GLAPI *p_glGetFragmentMaterialfvSGIX)(GLenum,GLenum,GLfloat*); void (WINE_GLAPI *p_glGetFragmentMaterialivSGIX)(GLenum,GLenum,GLint*); void (WINE_GLAPI *p_glGetFramebufferAttachmentParameteriv)(GLenum,GLenum,GLenum,GLint*); void (WINE_GLAPI *p_glGetFramebufferAttachmentParameterivEXT)(GLenum,GLenum,GLenum,GLint*); + void (WINE_GLAPI *p_glGetFramebufferParameteriv)(GLenum,GLenum,GLint*); void (WINE_GLAPI *p_glGetFramebufferParameterivEXT)(GLuint,GLenum,GLint*); GLenum (WINE_GLAPI *p_glGetGraphicsResetStatusARB)(void); - unsigned int (WINE_GLAPI *p_glGetHandleARB)(GLenum); + GLhandleARB (WINE_GLAPI *p_glGetHandleARB)(GLenum); void (WINE_GLAPI *p_glGetHistogram)(GLenum,GLboolean,GLenum,GLenum,GLvoid*); void (WINE_GLAPI *p_glGetHistogramEXT)(GLenum,GLboolean,GLenum,GLenum,GLvoid*); void (WINE_GLAPI *p_glGetHistogramParameterfv)(GLenum,GLenum,GLfloat*); @@ -916,7 +931,7 @@ struct opengl_funcs UINT64 (WINE_GLAPI *p_glGetImageHandleNV)(GLuint,GLint,GLboolean,GLint,GLenum); void (WINE_GLAPI *p_glGetImageTransformParameterfvHP)(GLenum,GLenum,GLfloat*); void (WINE_GLAPI *p_glGetImageTransformParameterivHP)(GLenum,GLenum,GLint*); - void (WINE_GLAPI *p_glGetInfoLogARB)(unsigned int,GLsizei,GLsizei*,char*); + void (WINE_GLAPI *p_glGetInfoLogARB)(GLhandleARB,GLsizei,GLsizei*,GLcharARB*); GLint (WINE_GLAPI *p_glGetInstrumentsSGIX)(void); void (WINE_GLAPI *p_glGetInteger64i_v)(GLenum,GLuint,INT64*); void (WINE_GLAPI *p_glGetInteger64v)(GLenum,INT64*); @@ -924,6 +939,7 @@ struct opengl_funcs void (WINE_GLAPI *p_glGetIntegeri_v)(GLenum,GLuint,GLint*); void (WINE_GLAPI *p_glGetIntegerui64i_vNV)(GLenum,GLuint,UINT64*); void (WINE_GLAPI *p_glGetIntegerui64vNV)(GLenum,UINT64*); + void (WINE_GLAPI *p_glGetInternalformati64v)(GLenum,GLenum,GLenum,GLsizei,INT64*); void (WINE_GLAPI *p_glGetInternalformativ)(GLenum,GLenum,GLenum,GLsizei,GLint*); void (WINE_GLAPI *p_glGetInvariantBooleanvEXT)(GLuint,GLenum,GLboolean*); void (WINE_GLAPI *p_glGetInvariantFloatvEXT)(GLuint,GLenum,GLfloat*); @@ -961,8 +977,9 @@ struct opengl_funcs void (WINE_GLAPI *p_glGetNamedBufferParameterivEXT)(GLuint,GLenum,GLint*); void (WINE_GLAPI *p_glGetNamedBufferParameterui64vNV)(GLuint,GLenum,UINT64*); void (WINE_GLAPI *p_glGetNamedBufferPointervEXT)(GLuint,GLenum,GLvoid**); - void (WINE_GLAPI *p_glGetNamedBufferSubDataEXT)(GLuint,INT_PTR,INT_PTR,GLvoid*); + void (WINE_GLAPI *p_glGetNamedBufferSubDataEXT)(GLuint,GLintptr,GLsizeiptr,GLvoid*); void (WINE_GLAPI *p_glGetNamedFramebufferAttachmentParameterivEXT)(GLuint,GLenum,GLenum,GLint*); + void (WINE_GLAPI *p_glGetNamedFramebufferParameterivEXT)(GLuint,GLenum,GLint*); void (WINE_GLAPI *p_glGetNamedProgramLocalParameterIivEXT)(GLuint,GLenum,GLuint,GLint*); void (WINE_GLAPI *p_glGetNamedProgramLocalParameterIuivEXT)(GLuint,GLenum,GLuint,GLuint*); void (WINE_GLAPI *p_glGetNamedProgramLocalParameterdvEXT)(GLuint,GLenum,GLuint,GLdouble*); @@ -970,13 +987,15 @@ struct opengl_funcs void (WINE_GLAPI *p_glGetNamedProgramStringEXT)(GLuint,GLenum,GLenum,GLvoid*); void (WINE_GLAPI *p_glGetNamedProgramivEXT)(GLuint,GLenum,GLenum,GLint*); void (WINE_GLAPI *p_glGetNamedRenderbufferParameterivEXT)(GLuint,GLenum,GLint*); - void (WINE_GLAPI *p_glGetNamedStringARB)(GLint,const char*,GLsizei,GLint*,char*); - void (WINE_GLAPI *p_glGetNamedStringivARB)(GLint,const char*,GLenum,GLint*); + void (WINE_GLAPI *p_glGetNamedStringARB)(GLint,const GLchar*,GLsizei,GLint*,GLchar*); + void (WINE_GLAPI *p_glGetNamedStringivARB)(GLint,const GLchar*,GLenum,GLint*); void (WINE_GLAPI *p_glGetObjectBufferfvATI)(GLuint,GLenum,GLfloat*); void (WINE_GLAPI *p_glGetObjectBufferivATI)(GLuint,GLenum,GLint*); - void (WINE_GLAPI *p_glGetObjectParameterfvARB)(unsigned int,GLenum,GLfloat*); + void (WINE_GLAPI *p_glGetObjectLabel)(GLenum,GLuint,GLsizei,GLsizei*,GLchar*); + void (WINE_GLAPI *p_glGetObjectParameterfvARB)(GLhandleARB,GLenum,GLfloat*); void (WINE_GLAPI *p_glGetObjectParameterivAPPLE)(GLenum,GLuint,GLenum,GLint*); - void (WINE_GLAPI *p_glGetObjectParameterivARB)(unsigned int,GLenum,GLint*); + void (WINE_GLAPI *p_glGetObjectParameterivARB)(GLhandleARB,GLenum,GLint*); + void (WINE_GLAPI *p_glGetObjectPtrLabel)(const void*,GLsizei,GLsizei*,GLchar*); void (WINE_GLAPI *p_glGetOcclusionQueryivNV)(GLuint,GLenum,GLint*); void (WINE_GLAPI *p_glGetOcclusionQueryuivNV)(GLuint,GLenum,GLuint*); void (WINE_GLAPI *p_glGetPathColorGenfvNV)(GLenum,GLenum,GLfloat*); @@ -994,12 +1013,14 @@ struct opengl_funcs void (WINE_GLAPI *p_glGetPathTexGenivNV)(GLenum,GLenum,GLint*); void (WINE_GLAPI *p_glGetPerfMonitorCounterDataAMD)(GLuint,GLenum,GLsizei,GLuint*,GLint*); void (WINE_GLAPI *p_glGetPerfMonitorCounterInfoAMD)(GLuint,GLuint,GLenum,GLvoid*); - void (WINE_GLAPI *p_glGetPerfMonitorCounterStringAMD)(GLuint,GLuint,GLsizei,GLsizei*,char*); + void (WINE_GLAPI *p_glGetPerfMonitorCounterStringAMD)(GLuint,GLuint,GLsizei,GLsizei*,GLchar*); void (WINE_GLAPI *p_glGetPerfMonitorCountersAMD)(GLuint,GLint*,GLint*,GLsizei,GLuint*); - void (WINE_GLAPI *p_glGetPerfMonitorGroupStringAMD)(GLuint,GLsizei,GLsizei*,char*); + void (WINE_GLAPI *p_glGetPerfMonitorGroupStringAMD)(GLuint,GLsizei,GLsizei*,GLchar*); void (WINE_GLAPI *p_glGetPerfMonitorGroupsAMD)(GLint*,GLsizei,GLuint*); void (WINE_GLAPI *p_glGetPixelTexGenParameterfvSGIS)(GLenum,GLfloat*); void (WINE_GLAPI *p_glGetPixelTexGenParameterivSGIS)(GLenum,GLint*); + void (WINE_GLAPI *p_glGetPixelTransformParameterfvEXT)(GLenum,GLenum,GLfloat*); + void (WINE_GLAPI *p_glGetPixelTransformParameterivEXT)(GLenum,GLenum,GLint*); void (WINE_GLAPI *p_glGetPointerIndexedvEXT)(GLenum,GLuint,GLvoid**); void (WINE_GLAPI *p_glGetPointervEXT)(GLenum,GLvoid**); void (WINE_GLAPI *p_glGetProgramBinary)(GLuint,GLsizei,GLsizei*,GLenum*,GLvoid*); @@ -1007,7 +1028,8 @@ struct opengl_funcs void (WINE_GLAPI *p_glGetProgramEnvParameterIuivNV)(GLenum,GLuint,GLuint*); void (WINE_GLAPI *p_glGetProgramEnvParameterdvARB)(GLenum,GLuint,GLdouble*); void (WINE_GLAPI *p_glGetProgramEnvParameterfvARB)(GLenum,GLuint,GLfloat*); - void (WINE_GLAPI *p_glGetProgramInfoLog)(GLuint,GLsizei,GLsizei*,char*); + void (WINE_GLAPI *p_glGetProgramInfoLog)(GLuint,GLsizei,GLsizei*,GLchar*); + void (WINE_GLAPI *p_glGetProgramInterfaceiv)(GLuint,GLenum,GLenum,GLint*); void (WINE_GLAPI *p_glGetProgramLocalParameterIivNV)(GLenum,GLuint,GLint*); void (WINE_GLAPI *p_glGetProgramLocalParameterIuivNV)(GLenum,GLuint,GLuint*); void (WINE_GLAPI *p_glGetProgramLocalParameterdvARB)(GLenum,GLuint,GLdouble*); @@ -1016,8 +1038,13 @@ struct opengl_funcs void (WINE_GLAPI *p_glGetProgramNamedParameterfvNV)(GLuint,GLsizei,const GLubyte*,GLfloat*); void (WINE_GLAPI *p_glGetProgramParameterdvNV)(GLenum,GLuint,GLenum,GLdouble*); void (WINE_GLAPI *p_glGetProgramParameterfvNV)(GLenum,GLuint,GLenum,GLfloat*); - void (WINE_GLAPI *p_glGetProgramPipelineInfoLog)(GLuint,GLsizei,GLsizei*,char*); + void (WINE_GLAPI *p_glGetProgramPipelineInfoLog)(GLuint,GLsizei,GLsizei*,GLchar*); void (WINE_GLAPI *p_glGetProgramPipelineiv)(GLuint,GLenum,GLint*); + GLuint (WINE_GLAPI *p_glGetProgramResourceIndex)(GLuint,GLenum,const GLchar*); + GLint (WINE_GLAPI *p_glGetProgramResourceLocation)(GLuint,GLenum,const GLchar*); + GLint (WINE_GLAPI *p_glGetProgramResourceLocationIndex)(GLuint,GLenum,const GLchar*); + void (WINE_GLAPI *p_glGetProgramResourceName)(GLuint,GLenum,GLuint,GLsizei,GLsizei*,GLchar*); + void (WINE_GLAPI *p_glGetProgramResourceiv)(GLuint,GLenum,GLuint,GLsizei,const GLenum*,GLsizei,GLsizei*,GLint*); void (WINE_GLAPI *p_glGetProgramStageiv)(GLuint,GLenum,GLenum,GLint*); void (WINE_GLAPI *p_glGetProgramStringARB)(GLenum,GLenum,GLvoid*); void (WINE_GLAPI *p_glGetProgramStringNV)(GLuint,GLenum,GLubyte*); @@ -1044,15 +1071,15 @@ struct opengl_funcs void (WINE_GLAPI *p_glGetSamplerParameteriv)(GLuint,GLenum,GLint*); void (WINE_GLAPI *p_glGetSeparableFilter)(GLenum,GLenum,GLenum,GLvoid*,GLvoid*,GLvoid*); void (WINE_GLAPI *p_glGetSeparableFilterEXT)(GLenum,GLenum,GLenum,GLvoid*,GLvoid*,GLvoid*); - void (WINE_GLAPI *p_glGetShaderInfoLog)(GLuint,GLsizei,GLsizei*,char*); + void (WINE_GLAPI *p_glGetShaderInfoLog)(GLuint,GLsizei,GLsizei*,GLchar*); void (WINE_GLAPI *p_glGetShaderPrecisionFormat)(GLenum,GLenum,GLint*,GLint*); - void (WINE_GLAPI *p_glGetShaderSource)(GLuint,GLsizei,GLsizei*,char*); - void (WINE_GLAPI *p_glGetShaderSourceARB)(unsigned int,GLsizei,GLsizei*,char*); + void (WINE_GLAPI *p_glGetShaderSource)(GLuint,GLsizei,GLsizei*,GLchar*); + void (WINE_GLAPI *p_glGetShaderSourceARB)(GLhandleARB,GLsizei,GLsizei*,GLcharARB*); void (WINE_GLAPI *p_glGetShaderiv)(GLuint,GLenum,GLint*); void (WINE_GLAPI *p_glGetSharpenTexFuncSGIS)(GLenum,GLfloat*); const GLubyte * (WINE_GLAPI *p_glGetStringi)(GLenum,GLuint); - GLuint (WINE_GLAPI *p_glGetSubroutineIndex)(GLuint,GLenum,const char*); - GLint (WINE_GLAPI *p_glGetSubroutineUniformLocation)(GLuint,GLenum,const char*); + GLuint (WINE_GLAPI *p_glGetSubroutineIndex)(GLuint,GLenum,const GLchar*); + GLint (WINE_GLAPI *p_glGetSubroutineUniformLocation)(GLuint,GLenum,const GLchar*); void (WINE_GLAPI *p_glGetSynciv)(GLvoid*,GLenum,GLsizei,GLsizei*,GLint*); void (WINE_GLAPI *p_glGetTexBumpParameterfvATI)(GLenum,GLfloat*); void (WINE_GLAPI *p_glGetTexBumpParameterivATI)(GLenum,GLint*); @@ -1072,22 +1099,22 @@ struct opengl_funcs void (WINE_GLAPI *p_glGetTextureParameterivEXT)(GLuint,GLenum,GLenum,GLint*); UINT64 (WINE_GLAPI *p_glGetTextureSamplerHandleNV)(GLuint,GLuint); void (WINE_GLAPI *p_glGetTrackMatrixivNV)(GLenum,GLuint,GLenum,GLint*); - void (WINE_GLAPI *p_glGetTransformFeedbackVarying)(GLuint,GLuint,GLsizei,GLsizei*,GLsizei*,GLenum*,char*); - void (WINE_GLAPI *p_glGetTransformFeedbackVaryingEXT)(GLuint,GLuint,GLsizei,GLsizei*,GLsizei*,GLenum*,char*); + void (WINE_GLAPI *p_glGetTransformFeedbackVarying)(GLuint,GLuint,GLsizei,GLsizei*,GLsizei*,GLenum*,GLchar*); + void (WINE_GLAPI *p_glGetTransformFeedbackVaryingEXT)(GLuint,GLuint,GLsizei,GLsizei*,GLsizei*,GLenum*,GLchar*); void (WINE_GLAPI *p_glGetTransformFeedbackVaryingNV)(GLuint,GLuint,GLint*); - GLuint (WINE_GLAPI *p_glGetUniformBlockIndex)(GLuint,const char*); + GLuint (WINE_GLAPI *p_glGetUniformBlockIndex)(GLuint,const GLchar*); GLint (WINE_GLAPI *p_glGetUniformBufferSizeEXT)(GLuint,GLint); - void (WINE_GLAPI *p_glGetUniformIndices)(GLuint,GLsizei,const char* const*,GLuint*); - GLint (WINE_GLAPI *p_glGetUniformLocation)(GLuint,const char*); - GLint (WINE_GLAPI *p_glGetUniformLocationARB)(unsigned int,const char*); - INT_PTR (WINE_GLAPI *p_glGetUniformOffsetEXT)(GLuint,GLint); + void (WINE_GLAPI *p_glGetUniformIndices)(GLuint,GLsizei,const GLchar* const*,GLuint*); + GLint (WINE_GLAPI *p_glGetUniformLocation)(GLuint,const GLchar*); + GLint (WINE_GLAPI *p_glGetUniformLocationARB)(GLhandleARB,const GLcharARB*); + GLintptr (WINE_GLAPI *p_glGetUniformOffsetEXT)(GLuint,GLint); void (WINE_GLAPI *p_glGetUniformSubroutineuiv)(GLenum,GLint,GLuint*); void (WINE_GLAPI *p_glGetUniformdv)(GLuint,GLint,GLdouble*); void (WINE_GLAPI *p_glGetUniformfv)(GLuint,GLint,GLfloat*); - void (WINE_GLAPI *p_glGetUniformfvARB)(unsigned int,GLint,GLfloat*); + void (WINE_GLAPI *p_glGetUniformfvARB)(GLhandleARB,GLint,GLfloat*); void (WINE_GLAPI *p_glGetUniformi64vNV)(GLuint,GLint,INT64*); void (WINE_GLAPI *p_glGetUniformiv)(GLuint,GLint,GLint*); - void (WINE_GLAPI *p_glGetUniformivARB)(unsigned int,GLint,GLint*); + void (WINE_GLAPI *p_glGetUniformivARB)(GLhandleARB,GLint,GLint*); void (WINE_GLAPI *p_glGetUniformui64vNV)(GLuint,GLint,UINT64*); void (WINE_GLAPI *p_glGetUniformuiv)(GLuint,GLint,GLuint*); void (WINE_GLAPI *p_glGetUniformuivEXT)(GLuint,GLint,GLuint*); @@ -1097,7 +1124,7 @@ struct opengl_funcs void (WINE_GLAPI *p_glGetVariantFloatvEXT)(GLuint,GLenum,GLfloat*); void (WINE_GLAPI *p_glGetVariantIntegervEXT)(GLuint,GLenum,GLint*); void (WINE_GLAPI *p_glGetVariantPointervEXT)(GLuint,GLenum,GLvoid**); - GLint (WINE_GLAPI *p_glGetVaryingLocationNV)(GLuint,const char*); + GLint (WINE_GLAPI *p_glGetVaryingLocationNV)(GLuint,const GLchar*); void (WINE_GLAPI *p_glGetVertexAttribArrayObjectfvATI)(GLuint,GLenum,GLfloat*); void (WINE_GLAPI *p_glGetVertexAttribArrayObjectivATI)(GLuint,GLenum,GLint*); void (WINE_GLAPI *p_glGetVertexAttribIiv)(GLuint,GLenum,GLint*); @@ -1162,7 +1189,7 @@ struct opengl_funcs void (WINE_GLAPI *p_glImageTransformParameterfvHP)(GLenum,GLenum,const GLfloat*); void (WINE_GLAPI *p_glImageTransformParameteriHP)(GLenum,GLenum,GLint); void (WINE_GLAPI *p_glImageTransformParameterivHP)(GLenum,GLenum,const GLint*); - GLvoid* (WINE_GLAPI *p_glImportSyncEXT)(GLenum,INT_PTR,GLbitfield); + GLvoid* (WINE_GLAPI *p_glImportSyncEXT)(GLenum,GLintptr,GLbitfield); void (WINE_GLAPI *p_glIndexFormatNV)(GLenum,GLsizei); void (WINE_GLAPI *p_glIndexFuncEXT)(GLenum,GLclampf); void (WINE_GLAPI *p_glIndexMaterialEXT)(GLenum,GLenum); @@ -1171,6 +1198,12 @@ struct opengl_funcs void (WINE_GLAPI *p_glInsertComponentEXT)(GLuint,GLuint,GLuint); void (WINE_GLAPI *p_glInstrumentsBufferSGIX)(GLsizei,GLint*); void (WINE_GLAPI *p_glInterpolatePathsNV)(GLuint,GLuint,GLuint,GLfloat); + void (WINE_GLAPI *p_glInvalidateBufferData)(GLuint); + void (WINE_GLAPI *p_glInvalidateBufferSubData)(GLuint,GLintptr,GLsizeiptr); + void (WINE_GLAPI *p_glInvalidateFramebuffer)(GLenum,GLsizei,const GLenum*); + void (WINE_GLAPI *p_glInvalidateSubFramebuffer)(GLenum,GLsizei,const GLenum*,GLint,GLint,GLsizei,GLsizei); + void (WINE_GLAPI *p_glInvalidateTexImage)(GLuint,GLint); + void (WINE_GLAPI *p_glInvalidateTexSubImage)(GLuint,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei); GLboolean (WINE_GLAPI *p_glIsAsyncMarkerSGIX)(GLuint); GLboolean (WINE_GLAPI *p_glIsBuffer)(GLuint); GLboolean (WINE_GLAPI *p_glIsBufferARB)(GLuint); @@ -1184,7 +1217,7 @@ struct opengl_funcs GLboolean (WINE_GLAPI *p_glIsImageHandleResidentNV)(UINT64); GLboolean (WINE_GLAPI *p_glIsNameAMD)(GLenum,GLuint); GLboolean (WINE_GLAPI *p_glIsNamedBufferResidentNV)(GLuint); - GLboolean (WINE_GLAPI *p_glIsNamedStringARB)(GLint,const char*); + GLboolean (WINE_GLAPI *p_glIsNamedStringARB)(GLint,const GLchar*); GLboolean (WINE_GLAPI *p_glIsObjectBufferATI)(GLuint); GLboolean (WINE_GLAPI *p_glIsOcclusionQueryNV)(GLuint); GLboolean (WINE_GLAPI *p_glIsPathNV)(GLuint); @@ -1211,7 +1244,7 @@ struct opengl_funcs GLboolean (WINE_GLAPI *p_glIsVertexAttribEnabledAPPLE)(GLuint,GLenum); void (WINE_GLAPI *p_glLightEnviSGIX)(GLenum,GLint); void (WINE_GLAPI *p_glLinkProgram)(GLuint); - void (WINE_GLAPI *p_glLinkProgramARB)(unsigned int); + void (WINE_GLAPI *p_glLinkProgramARB)(GLhandleARB); void (WINE_GLAPI *p_glListParameterfSGIX)(GLuint,GLenum,GLfloat); void (WINE_GLAPI *p_glListParameterfvSGIX)(GLuint,GLenum,const GLfloat*); void (WINE_GLAPI *p_glListParameteriSGIX)(GLuint,GLenum,GLint); @@ -1235,10 +1268,10 @@ struct opengl_funcs void (WINE_GLAPI *p_glMakeTextureHandleResidentNV)(UINT64); GLvoid* (WINE_GLAPI *p_glMapBuffer)(GLenum,GLenum); GLvoid* (WINE_GLAPI *p_glMapBufferARB)(GLenum,GLenum); - GLvoid* (WINE_GLAPI *p_glMapBufferRange)(GLenum,INT_PTR,INT_PTR,GLbitfield); + GLvoid* (WINE_GLAPI *p_glMapBufferRange)(GLenum,GLintptr,GLsizeiptr,GLbitfield); void (WINE_GLAPI *p_glMapControlPointsNV)(GLenum,GLuint,GLenum,GLsizei,GLsizei,GLint,GLint,GLboolean,const GLvoid*); GLvoid* (WINE_GLAPI *p_glMapNamedBufferEXT)(GLuint,GLenum); - GLvoid* (WINE_GLAPI *p_glMapNamedBufferRangeEXT)(GLuint,INT_PTR,INT_PTR,GLbitfield); + GLvoid* (WINE_GLAPI *p_glMapNamedBufferRangeEXT)(GLuint,GLintptr,GLsizeiptr,GLbitfield); GLvoid* (WINE_GLAPI *p_glMapObjectBufferATI)(GLuint); void (WINE_GLAPI *p_glMapParameterfvNV)(GLenum,GLenum,const GLfloat*); void (WINE_GLAPI *p_glMapParameterivNV)(GLenum,GLenum,const GLint*); @@ -1281,11 +1314,13 @@ struct opengl_funcs void (WINE_GLAPI *p_glMultTransposeMatrixfARB)(const GLfloat*); void (WINE_GLAPI *p_glMultiDrawArrays)(GLenum,const GLint*,const GLsizei*,GLsizei); void (WINE_GLAPI *p_glMultiDrawArraysEXT)(GLenum,const GLint*,const GLsizei*,GLsizei); + void (WINE_GLAPI *p_glMultiDrawArraysIndirect)(GLenum,const void*,GLsizei,GLsizei); void (WINE_GLAPI *p_glMultiDrawArraysIndirectAMD)(GLenum,const GLvoid*,GLsizei,GLsizei); void (WINE_GLAPI *p_glMultiDrawElementArrayAPPLE)(GLenum,const GLint*,const GLsizei*,GLsizei); void (WINE_GLAPI *p_glMultiDrawElements)(GLenum,const GLsizei*,GLenum,const GLvoid* const*,GLsizei); void (WINE_GLAPI *p_glMultiDrawElementsBaseVertex)(GLenum,const GLsizei*,GLenum,const GLvoid* const*,GLsizei,const GLint*); void (WINE_GLAPI *p_glMultiDrawElementsEXT)(GLenum,const GLsizei*,GLenum,const GLvoid**,GLsizei); + void (WINE_GLAPI *p_glMultiDrawElementsIndirect)(GLenum,GLenum,const void*,GLsizei,GLsizei); void (WINE_GLAPI *p_glMultiDrawElementsIndirectAMD)(GLenum,GLenum,const GLvoid*,GLsizei,GLsizei); void (WINE_GLAPI *p_glMultiDrawRangeElementArrayAPPLE)(GLenum,GLuint,GLuint,const GLint*,const GLsizei*,GLsizei); void (WINE_GLAPI *p_glMultiModeDrawArraysIBM)(const GLenum*,const GLint*,const GLsizei*,GLsizei,GLint); @@ -1303,8 +1338,8 @@ struct opengl_funcs void (WINE_GLAPI *p_glMultiTexCoord1fv)(GLenum,const GLfloat*); void (WINE_GLAPI *p_glMultiTexCoord1fvARB)(GLenum,const GLfloat*); void (WINE_GLAPI *p_glMultiTexCoord1fvSGIS)(GLenum,const GLfloat *); - void (WINE_GLAPI *p_glMultiTexCoord1hNV)(GLenum,unsigned short); - void (WINE_GLAPI *p_glMultiTexCoord1hvNV)(GLenum,const unsigned short*); + void (WINE_GLAPI *p_glMultiTexCoord1hNV)(GLenum,GLhalfNV); + void (WINE_GLAPI *p_glMultiTexCoord1hvNV)(GLenum,const GLhalfNV*); void (WINE_GLAPI *p_glMultiTexCoord1i)(GLenum,GLint); void (WINE_GLAPI *p_glMultiTexCoord1iARB)(GLenum,GLint); void (WINE_GLAPI *p_glMultiTexCoord1iSGIS)(GLenum,GLint); @@ -1329,8 +1364,8 @@ struct opengl_funcs void (WINE_GLAPI *p_glMultiTexCoord2fv)(GLenum,const GLfloat*); void (WINE_GLAPI *p_glMultiTexCoord2fvARB)(GLenum,const GLfloat*); void (WINE_GLAPI *p_glMultiTexCoord2fvSGIS)(GLenum,GLfloat *); - void (WINE_GLAPI *p_glMultiTexCoord2hNV)(GLenum,unsigned short,unsigned short); - void (WINE_GLAPI *p_glMultiTexCoord2hvNV)(GLenum,const unsigned short*); + void (WINE_GLAPI *p_glMultiTexCoord2hNV)(GLenum,GLhalfNV,GLhalfNV); + void (WINE_GLAPI *p_glMultiTexCoord2hvNV)(GLenum,const GLhalfNV*); void (WINE_GLAPI *p_glMultiTexCoord2i)(GLenum,GLint,GLint); void (WINE_GLAPI *p_glMultiTexCoord2iARB)(GLenum,GLint,GLint); void (WINE_GLAPI *p_glMultiTexCoord2iSGIS)(GLenum,GLint,GLint); @@ -1355,8 +1390,8 @@ struct opengl_funcs void (WINE_GLAPI *p_glMultiTexCoord3fv)(GLenum,const GLfloat*); void (WINE_GLAPI *p_glMultiTexCoord3fvARB)(GLenum,const GLfloat*); void (WINE_GLAPI *p_glMultiTexCoord3fvSGIS)(GLenum,GLfloat *); - void (WINE_GLAPI *p_glMultiTexCoord3hNV)(GLenum,unsigned short,unsigned short,unsigned short); - void (WINE_GLAPI *p_glMultiTexCoord3hvNV)(GLenum,const unsigned short*); + void (WINE_GLAPI *p_glMultiTexCoord3hNV)(GLenum,GLhalfNV,GLhalfNV,GLhalfNV); + void (WINE_GLAPI *p_glMultiTexCoord3hvNV)(GLenum,const GLhalfNV*); void (WINE_GLAPI *p_glMultiTexCoord3i)(GLenum,GLint,GLint,GLint); void (WINE_GLAPI *p_glMultiTexCoord3iARB)(GLenum,GLint,GLint,GLint); void (WINE_GLAPI *p_glMultiTexCoord3iSGIS)(GLenum,GLint,GLint,GLint); @@ -1381,8 +1416,8 @@ struct opengl_funcs void (WINE_GLAPI *p_glMultiTexCoord4fv)(GLenum,const GLfloat*); void (WINE_GLAPI *p_glMultiTexCoord4fvARB)(GLenum,const GLfloat*); void (WINE_GLAPI *p_glMultiTexCoord4fvSGIS)(GLenum,GLfloat *); - void (WINE_GLAPI *p_glMultiTexCoord4hNV)(GLenum,unsigned short,unsigned short,unsigned short,unsigned short); - void (WINE_GLAPI *p_glMultiTexCoord4hvNV)(GLenum,const unsigned short*); + void (WINE_GLAPI *p_glMultiTexCoord4hNV)(GLenum,GLhalfNV,GLhalfNV,GLhalfNV,GLhalfNV); + void (WINE_GLAPI *p_glMultiTexCoord4hvNV)(GLenum,const GLhalfNV*); void (WINE_GLAPI *p_glMultiTexCoord4i)(GLenum,GLint,GLint,GLint,GLint); void (WINE_GLAPI *p_glMultiTexCoord4iARB)(GLenum,GLint,GLint,GLint,GLint); void (WINE_GLAPI *p_glMultiTexCoord4iSGIS)(GLenum,GLint,GLint,GLint,GLint); @@ -1428,9 +1463,10 @@ struct opengl_funcs void (WINE_GLAPI *p_glMultiTexSubImage1DEXT)(GLenum,GLenum,GLint,GLint,GLsizei,GLenum,GLenum,const GLvoid*); void (WINE_GLAPI *p_glMultiTexSubImage2DEXT)(GLenum,GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*); void (WINE_GLAPI *p_glMultiTexSubImage3DEXT)(GLenum,GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*); - void (WINE_GLAPI *p_glNamedBufferDataEXT)(GLuint,INT_PTR,const GLvoid*,GLenum); - void (WINE_GLAPI *p_glNamedBufferSubDataEXT)(GLuint,INT_PTR,INT_PTR,const GLvoid*); - void (WINE_GLAPI *p_glNamedCopyBufferSubDataEXT)(GLuint,GLuint,INT_PTR,INT_PTR,INT_PTR); + void (WINE_GLAPI *p_glNamedBufferDataEXT)(GLuint,GLsizeiptr,const GLvoid*,GLenum); + void (WINE_GLAPI *p_glNamedBufferSubDataEXT)(GLuint,GLintptr,GLsizeiptr,const GLvoid*); + void (WINE_GLAPI *p_glNamedCopyBufferSubDataEXT)(GLuint,GLuint,GLintptr,GLintptr,GLsizeiptr); + void (WINE_GLAPI *p_glNamedFramebufferParameteriEXT)(GLuint,GLenum,GLint); void (WINE_GLAPI *p_glNamedFramebufferRenderbufferEXT)(GLuint,GLenum,GLenum,GLuint); void (WINE_GLAPI *p_glNamedFramebufferTexture1DEXT)(GLuint,GLenum,GLenum,GLuint,GLint); void (WINE_GLAPI *p_glNamedFramebufferTexture2DEXT)(GLuint,GLenum,GLenum,GLuint,GLint); @@ -1453,13 +1489,13 @@ struct opengl_funcs void (WINE_GLAPI *p_glNamedRenderbufferStorageEXT)(GLuint,GLenum,GLsizei,GLsizei); void (WINE_GLAPI *p_glNamedRenderbufferStorageMultisampleCoverageEXT)(GLuint,GLsizei,GLsizei,GLenum,GLsizei,GLsizei); void (WINE_GLAPI *p_glNamedRenderbufferStorageMultisampleEXT)(GLuint,GLsizei,GLenum,GLsizei,GLsizei); - void (WINE_GLAPI *p_glNamedStringARB)(GLenum,GLint,const char*,GLint,const char*); + void (WINE_GLAPI *p_glNamedStringARB)(GLenum,GLint,const GLchar*,GLint,const GLchar*); GLuint (WINE_GLAPI *p_glNewBufferRegion)(GLenum); GLuint (WINE_GLAPI *p_glNewObjectBufferATI)(GLsizei,const GLvoid*,GLenum); void (WINE_GLAPI *p_glNormal3fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat); void (WINE_GLAPI *p_glNormal3fVertex3fvSUN)(const GLfloat*,const GLfloat*); - void (WINE_GLAPI *p_glNormal3hNV)(unsigned short,unsigned short,unsigned short); - void (WINE_GLAPI *p_glNormal3hvNV)(const unsigned short*); + void (WINE_GLAPI *p_glNormal3hNV)(GLhalfNV,GLhalfNV,GLhalfNV); + void (WINE_GLAPI *p_glNormal3hvNV)(const GLhalfNV*); void (WINE_GLAPI *p_glNormalFormatNV)(GLenum,GLsizei); void (WINE_GLAPI *p_glNormalP3ui)(GLenum,GLuint); void (WINE_GLAPI *p_glNormalP3uiv)(GLenum,const GLuint*); @@ -1476,6 +1512,8 @@ struct opengl_funcs void (WINE_GLAPI *p_glNormalStream3ivATI)(GLenum,const GLint*); void (WINE_GLAPI *p_glNormalStream3sATI)(GLenum,GLshort,GLshort,GLshort); void (WINE_GLAPI *p_glNormalStream3svATI)(GLenum,const GLshort*); + void (WINE_GLAPI *p_glObjectLabel)(GLenum,GLuint,GLsizei,const GLchar*); + void (WINE_GLAPI *p_glObjectPtrLabel)(const void*,GLsizei,const GLchar*); GLenum (WINE_GLAPI *p_glObjectPurgeableAPPLE)(GLenum,GLuint,GLenum); GLenum (WINE_GLAPI *p_glObjectUnpurgeableAPPLE)(GLenum,GLuint,GLenum); void (WINE_GLAPI *p_glPNTrianglesfATI)(GLenum,GLfloat); @@ -1503,7 +1541,7 @@ struct opengl_funcs void (WINE_GLAPI *p_glPathTexGenNV)(GLenum,GLenum,GLint,const GLfloat*); void (WINE_GLAPI *p_glPauseTransformFeedback)(void); void (WINE_GLAPI *p_glPauseTransformFeedbackNV)(void); - void (WINE_GLAPI *p_glPixelDataRangeNV)(GLenum,GLsizei,GLvoid*); + void (WINE_GLAPI *p_glPixelDataRangeNV)(GLenum,GLsizei,const GLvoid*); void (WINE_GLAPI *p_glPixelTexGenParameterfSGIS)(GLenum,GLfloat); void (WINE_GLAPI *p_glPixelTexGenParameterfvSGIS)(GLenum,const GLfloat*); void (WINE_GLAPI *p_glPixelTexGenParameteriSGIS)(GLenum,GLint); @@ -1529,6 +1567,7 @@ struct opengl_funcs GLint (WINE_GLAPI *p_glPollAsyncSGIX)(GLuint*); GLint (WINE_GLAPI *p_glPollInstrumentsSGIX)(GLint*); void (WINE_GLAPI *p_glPolygonOffsetEXT)(GLfloat,GLfloat); + void (WINE_GLAPI *p_glPopDebugGroup)(void); void (WINE_GLAPI *p_glPresentFrameDualFillNV)(GLuint,UINT64,GLuint,GLuint,GLenum,GLenum,GLuint,GLenum,GLuint,GLenum,GLuint,GLenum,GLuint); void (WINE_GLAPI *p_glPresentFrameKeyedNV)(GLuint,UINT64,GLuint,GLuint,GLenum,GLenum,GLuint,GLuint,GLenum,GLuint,GLuint); void (WINE_GLAPI *p_glPrimitiveRestartIndex)(GLuint); @@ -1700,6 +1739,7 @@ struct opengl_funcs void (WINE_GLAPI *p_glProvokingVertex)(GLenum); void (WINE_GLAPI *p_glProvokingVertexEXT)(GLenum); void (WINE_GLAPI *p_glPushClientAttribDefaultEXT)(GLbitfield); + void (WINE_GLAPI *p_glPushDebugGroup)(GLenum,GLuint,GLsizei,const GLchar*); void (WINE_GLAPI *p_glQueryCounter)(GLuint,GLenum); void (WINE_GLAPI *p_glReadBufferRegion)(GLenum,GLint,GLint,GLsizei,GLsizei); void (WINE_GLAPI *p_glReadInstrumentsSGIX)(GLint); @@ -1772,8 +1812,8 @@ struct opengl_funcs void (WINE_GLAPI *p_glSecondaryColor3fEXT)(GLfloat,GLfloat,GLfloat); void (WINE_GLAPI *p_glSecondaryColor3fv)(const GLfloat*); void (WINE_GLAPI *p_glSecondaryColor3fvEXT)(const GLfloat*); - void (WINE_GLAPI *p_glSecondaryColor3hNV)(unsigned short,unsigned short,unsigned short); - void (WINE_GLAPI *p_glSecondaryColor3hvNV)(const unsigned short*); + void (WINE_GLAPI *p_glSecondaryColor3hNV)(GLhalfNV,GLhalfNV,GLhalfNV); + void (WINE_GLAPI *p_glSecondaryColor3hvNV)(const GLhalfNV*); void (WINE_GLAPI *p_glSecondaryColor3i)(GLint,GLint,GLint); void (WINE_GLAPI *p_glSecondaryColor3iEXT)(GLint,GLint,GLint); void (WINE_GLAPI *p_glSecondaryColor3iv)(const GLint*); @@ -1815,8 +1855,9 @@ struct opengl_funcs void (WINE_GLAPI *p_glShaderOp1EXT)(GLenum,GLuint,GLuint); void (WINE_GLAPI *p_glShaderOp2EXT)(GLenum,GLuint,GLuint,GLuint); void (WINE_GLAPI *p_glShaderOp3EXT)(GLenum,GLuint,GLuint,GLuint,GLuint); - void (WINE_GLAPI *p_glShaderSource)(GLuint,GLsizei,const char* const*,const GLint*); - void (WINE_GLAPI *p_glShaderSourceARB)(unsigned int,GLsizei,const char**,const GLint*); + void (WINE_GLAPI *p_glShaderSource)(GLuint,GLsizei,const GLchar* const*,const GLint*); + void (WINE_GLAPI *p_glShaderSourceARB)(GLhandleARB,GLsizei,const GLcharARB**,const GLint*); + void (WINE_GLAPI *p_glShaderStorageBlockBinding)(GLuint,GLuint,GLuint); void (WINE_GLAPI *p_glSharpenTexFuncSGIS)(GLenum,GLsizei,const GLfloat*); void (WINE_GLAPI *p_glSpriteParameterfSGIX)(GLenum,GLfloat); void (WINE_GLAPI *p_glSpriteParameterfvSGIX)(GLenum,const GLfloat*); @@ -1858,10 +1899,11 @@ struct opengl_funcs void (WINE_GLAPI *p_glTexBuffer)(GLenum,GLenum,GLuint); void (WINE_GLAPI *p_glTexBufferARB)(GLenum,GLenum,GLuint); void (WINE_GLAPI *p_glTexBufferEXT)(GLenum,GLenum,GLuint); + void (WINE_GLAPI *p_glTexBufferRange)(GLenum,GLenum,GLuint,GLintptr,GLsizeiptr); void (WINE_GLAPI *p_glTexBumpParameterfvATI)(GLenum,const GLfloat*); void (WINE_GLAPI *p_glTexBumpParameterivATI)(GLenum,const GLint*); - void (WINE_GLAPI *p_glTexCoord1hNV)(unsigned short); - void (WINE_GLAPI *p_glTexCoord1hvNV)(const unsigned short*); + void (WINE_GLAPI *p_glTexCoord1hNV)(GLhalfNV); + void (WINE_GLAPI *p_glTexCoord1hvNV)(const GLhalfNV*); void (WINE_GLAPI *p_glTexCoord2fColor3fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat); void (WINE_GLAPI *p_glTexCoord2fColor3fVertex3fvSUN)(const GLfloat*,const GLfloat*,const GLfloat*); void (WINE_GLAPI *p_glTexCoord2fColor4fNormal3fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat); @@ -1872,16 +1914,16 @@ struct opengl_funcs void (WINE_GLAPI *p_glTexCoord2fNormal3fVertex3fvSUN)(const GLfloat*,const GLfloat*,const GLfloat*); void (WINE_GLAPI *p_glTexCoord2fVertex3fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat); void (WINE_GLAPI *p_glTexCoord2fVertex3fvSUN)(const GLfloat*,const GLfloat*); - void (WINE_GLAPI *p_glTexCoord2hNV)(unsigned short,unsigned short); - void (WINE_GLAPI *p_glTexCoord2hvNV)(const unsigned short*); - void (WINE_GLAPI *p_glTexCoord3hNV)(unsigned short,unsigned short,unsigned short); - void (WINE_GLAPI *p_glTexCoord3hvNV)(const unsigned short*); + void (WINE_GLAPI *p_glTexCoord2hNV)(GLhalfNV,GLhalfNV); + void (WINE_GLAPI *p_glTexCoord2hvNV)(const GLhalfNV*); + void (WINE_GLAPI *p_glTexCoord3hNV)(GLhalfNV,GLhalfNV,GLhalfNV); + void (WINE_GLAPI *p_glTexCoord3hvNV)(const GLhalfNV*); void (WINE_GLAPI *p_glTexCoord4fColor4fNormal3fVertex4fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat); void (WINE_GLAPI *p_glTexCoord4fColor4fNormal3fVertex4fvSUN)(const GLfloat*,const GLfloat*,const GLfloat*,const GLfloat*); void (WINE_GLAPI *p_glTexCoord4fVertex4fSUN)(GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat,GLfloat); void (WINE_GLAPI *p_glTexCoord4fVertex4fvSUN)(const GLfloat*,const GLfloat*); - void (WINE_GLAPI *p_glTexCoord4hNV)(unsigned short,unsigned short,unsigned short,unsigned short); - void (WINE_GLAPI *p_glTexCoord4hvNV)(const unsigned short*); + void (WINE_GLAPI *p_glTexCoord4hNV)(GLhalfNV,GLhalfNV,GLhalfNV,GLhalfNV); + void (WINE_GLAPI *p_glTexCoord4hvNV)(const GLhalfNV*); void (WINE_GLAPI *p_glTexCoordFormatNV)(GLint,GLenum,GLsizei); void (WINE_GLAPI *p_glTexCoordP1ui)(GLenum,GLuint); void (WINE_GLAPI *p_glTexCoordP1uiv)(GLenum,const GLuint*); @@ -1909,7 +1951,10 @@ struct opengl_funcs void (WINE_GLAPI *p_glTexRenderbufferNV)(GLenum,GLuint); void (WINE_GLAPI *p_glTexStorage1D)(GLenum,GLsizei,GLenum,GLsizei); void (WINE_GLAPI *p_glTexStorage2D)(GLenum,GLsizei,GLenum,GLsizei,GLsizei); + void (WINE_GLAPI *p_glTexStorage2DMultisample)(GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLboolean); void (WINE_GLAPI *p_glTexStorage3D)(GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLsizei); + void (WINE_GLAPI *p_glTexStorage3DMultisample)(GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLsizei,GLboolean); + void (WINE_GLAPI *p_glTexStorageSparseAMD)(GLenum,GLenum,GLsizei,GLsizei,GLsizei,GLsizei,GLbitfield); void (WINE_GLAPI *p_glTexSubImage1DEXT)(GLenum,GLint,GLint,GLsizei,GLenum,GLenum,const GLvoid*); void (WINE_GLAPI *p_glTexSubImage2DEXT)(GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*); void (WINE_GLAPI *p_glTexSubImage3D)(GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*); @@ -1917,6 +1962,7 @@ struct opengl_funcs void (WINE_GLAPI *p_glTexSubImage4DSGIS)(GLenum,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*); void (WINE_GLAPI *p_glTextureBarrierNV)(void); void (WINE_GLAPI *p_glTextureBufferEXT)(GLuint,GLenum,GLenum,GLuint); + void (WINE_GLAPI *p_glTextureBufferRangeEXT)(GLuint,GLenum,GLenum,GLuint,GLintptr,GLsizeiptr); void (WINE_GLAPI *p_glTextureColorMaskSGIS)(GLboolean,GLboolean,GLboolean,GLboolean); void (WINE_GLAPI *p_glTextureImage1DEXT)(GLuint,GLenum,GLint,GLenum,GLsizei,GLint,GLenum,GLenum,const GLvoid*); void (WINE_GLAPI *p_glTextureImage2DEXT)(GLuint,GLenum,GLint,GLenum,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*); @@ -1938,15 +1984,19 @@ struct opengl_funcs void (WINE_GLAPI *p_glTextureRenderbufferEXT)(GLuint,GLenum,GLuint); void (WINE_GLAPI *p_glTextureStorage1DEXT)(GLuint,GLenum,GLsizei,GLenum,GLsizei); void (WINE_GLAPI *p_glTextureStorage2DEXT)(GLuint,GLenum,GLsizei,GLenum,GLsizei,GLsizei); + void (WINE_GLAPI *p_glTextureStorage2DMultisampleEXT)(GLuint,GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLboolean); void (WINE_GLAPI *p_glTextureStorage3DEXT)(GLuint,GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLsizei); + void (WINE_GLAPI *p_glTextureStorage3DMultisampleEXT)(GLuint,GLenum,GLsizei,GLenum,GLsizei,GLsizei,GLsizei,GLboolean); + void (WINE_GLAPI *p_glTextureStorageSparseAMD)(GLuint,GLenum,GLenum,GLsizei,GLsizei,GLsizei,GLsizei,GLbitfield); void (WINE_GLAPI *p_glTextureSubImage1DEXT)(GLuint,GLenum,GLint,GLint,GLsizei,GLenum,GLenum,const GLvoid*); void (WINE_GLAPI *p_glTextureSubImage2DEXT)(GLuint,GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*); void (WINE_GLAPI *p_glTextureSubImage3DEXT)(GLuint,GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*); + void (WINE_GLAPI *p_glTextureView)(GLuint,GLenum,GLuint,GLenum,GLuint,GLuint,GLuint,GLuint); void (WINE_GLAPI *p_glTrackMatrixNV)(GLenum,GLuint,GLenum,GLenum); void (WINE_GLAPI *p_glTransformFeedbackAttribsNV)(GLuint,const GLint*,GLenum); void (WINE_GLAPI *p_glTransformFeedbackStreamAttribsNV)(GLsizei,const GLint*,GLsizei,const GLint*,GLenum); - void (WINE_GLAPI *p_glTransformFeedbackVaryings)(GLuint,GLsizei,const char* const*,GLenum); - void (WINE_GLAPI *p_glTransformFeedbackVaryingsEXT)(GLuint,GLsizei,const char**,GLenum); + void (WINE_GLAPI *p_glTransformFeedbackVaryings)(GLuint,GLsizei,const GLchar* const*,GLenum); + void (WINE_GLAPI *p_glTransformFeedbackVaryingsEXT)(GLuint,GLsizei,const GLchar**,GLenum); void (WINE_GLAPI *p_glTransformFeedbackVaryingsNV)(GLuint,GLsizei,const GLint*,GLenum); void (WINE_GLAPI *p_glTransformPathNV)(GLuint,GLuint,GLenum,const GLfloat*); void (WINE_GLAPI *p_glUniform1d)(GLint,GLdouble); @@ -2056,21 +2106,21 @@ struct opengl_funcs void (WINE_GLAPI *p_glUnmapObjectBufferATI)(GLuint); void (WINE_GLAPI *p_glUpdateObjectBufferATI)(GLuint,GLuint,GLsizei,const GLvoid*,GLenum); void (WINE_GLAPI *p_glUseProgram)(GLuint); - void (WINE_GLAPI *p_glUseProgramObjectARB)(unsigned int); + void (WINE_GLAPI *p_glUseProgramObjectARB)(GLhandleARB); void (WINE_GLAPI *p_glUseProgramStages)(GLuint,GLbitfield,GLuint); void (WINE_GLAPI *p_glUseShaderProgramEXT)(GLenum,GLuint); void (WINE_GLAPI *p_glVDPAUFiniNV)(void); - void (WINE_GLAPI *p_glVDPAUGetSurfaceivNV)(INT_PTR,GLenum,GLsizei,GLsizei*,GLint*); + void (WINE_GLAPI *p_glVDPAUGetSurfaceivNV)(GLvdpauSurfaceNV,GLenum,GLsizei,GLsizei*,GLint*); void (WINE_GLAPI *p_glVDPAUInitNV)(const GLvoid*,const GLvoid*); - void (WINE_GLAPI *p_glVDPAUIsSurfaceNV)(INT_PTR); - void (WINE_GLAPI *p_glVDPAUMapSurfacesNV)(GLsizei,const INT_PTR*); - INT_PTR (WINE_GLAPI *p_glVDPAURegisterOutputSurfaceNV)(GLvoid*,GLenum,GLsizei,const GLuint*); - INT_PTR (WINE_GLAPI *p_glVDPAURegisterVideoSurfaceNV)(GLvoid*,GLenum,GLsizei,const GLuint*); - void (WINE_GLAPI *p_glVDPAUSurfaceAccessNV)(INT_PTR,GLenum); - void (WINE_GLAPI *p_glVDPAUUnmapSurfacesNV)(GLsizei,const INT_PTR*); - void (WINE_GLAPI *p_glVDPAUUnregisterSurfaceNV)(INT_PTR); + void (WINE_GLAPI *p_glVDPAUIsSurfaceNV)(GLvdpauSurfaceNV); + void (WINE_GLAPI *p_glVDPAUMapSurfacesNV)(GLsizei,const GLvdpauSurfaceNV*); + GLvdpauSurfaceNV (WINE_GLAPI *p_glVDPAURegisterOutputSurfaceNV)(GLvoid*,GLenum,GLsizei,const GLuint*); + GLvdpauSurfaceNV (WINE_GLAPI *p_glVDPAURegisterVideoSurfaceNV)(const GLvoid*,GLenum,GLsizei,const GLuint*); + void (WINE_GLAPI *p_glVDPAUSurfaceAccessNV)(GLvdpauSurfaceNV,GLenum); + void (WINE_GLAPI *p_glVDPAUUnmapSurfacesNV)(GLsizei,const GLvdpauSurfaceNV*); + void (WINE_GLAPI *p_glVDPAUUnregisterSurfaceNV)(GLvdpauSurfaceNV); void (WINE_GLAPI *p_glValidateProgram)(GLuint); - void (WINE_GLAPI *p_glValidateProgramARB)(unsigned int); + void (WINE_GLAPI *p_glValidateProgramARB)(GLhandleARB); void (WINE_GLAPI *p_glValidateProgramPipeline)(GLuint); void (WINE_GLAPI *p_glVariantArrayObjectATI)(GLuint,GLenum,GLsizei,GLuint,GLuint); void (WINE_GLAPI *p_glVariantPointerEXT)(GLuint,GLenum,GLuint,const GLvoid*); @@ -2082,16 +2132,22 @@ struct opengl_funcs void (WINE_GLAPI *p_glVariantubvEXT)(GLuint,const GLubyte*); void (WINE_GLAPI *p_glVariantuivEXT)(GLuint,const GLuint*); void (WINE_GLAPI *p_glVariantusvEXT)(GLuint,const GLushort*); - void (WINE_GLAPI *p_glVertex2hNV)(unsigned short,unsigned short); - void (WINE_GLAPI *p_glVertex2hvNV)(const unsigned short*); - void (WINE_GLAPI *p_glVertex3hNV)(unsigned short,unsigned short,unsigned short); - void (WINE_GLAPI *p_glVertex3hvNV)(const unsigned short*); - void (WINE_GLAPI *p_glVertex4hNV)(unsigned short,unsigned short,unsigned short,unsigned short); - void (WINE_GLAPI *p_glVertex4hvNV)(const unsigned short*); + void (WINE_GLAPI *p_glVertex2hNV)(GLhalfNV,GLhalfNV); + void (WINE_GLAPI *p_glVertex2hvNV)(const GLhalfNV*); + void (WINE_GLAPI *p_glVertex3hNV)(GLhalfNV,GLhalfNV,GLhalfNV); + void (WINE_GLAPI *p_glVertex3hvNV)(const GLhalfNV*); + void (WINE_GLAPI *p_glVertex4hNV)(GLhalfNV,GLhalfNV,GLhalfNV,GLhalfNV); + void (WINE_GLAPI *p_glVertex4hvNV)(const GLhalfNV*); + void (WINE_GLAPI *p_glVertexArrayBindVertexBufferEXT)(GLuint,GLuint,GLuint,GLintptr,GLsizei); void (WINE_GLAPI *p_glVertexArrayParameteriAPPLE)(GLenum,GLint); void (WINE_GLAPI *p_glVertexArrayRangeAPPLE)(GLsizei,GLvoid*); void (WINE_GLAPI *p_glVertexArrayRangeNV)(GLsizei,const GLvoid*); - void (WINE_GLAPI *p_glVertexArrayVertexAttribLOffsetEXT)(GLuint,GLuint,GLuint,GLint,GLenum,GLsizei,INT_PTR); + void (WINE_GLAPI *p_glVertexArrayVertexAttribBindingEXT)(GLuint,GLuint,GLuint); + void (WINE_GLAPI *p_glVertexArrayVertexAttribFormatEXT)(GLuint,GLuint,GLint,GLenum,GLboolean,GLuint); + void (WINE_GLAPI *p_glVertexArrayVertexAttribIFormatEXT)(GLuint,GLuint,GLint,GLenum,GLuint); + void (WINE_GLAPI *p_glVertexArrayVertexAttribLFormatEXT)(GLuint,GLuint,GLint,GLenum,GLuint); + void (WINE_GLAPI *p_glVertexArrayVertexAttribLOffsetEXT)(GLuint,GLuint,GLuint,GLint,GLenum,GLsizei,GLintptr); + void (WINE_GLAPI *p_glVertexArrayVertexBindingDivisorEXT)(GLuint,GLuint,GLuint); void (WINE_GLAPI *p_glVertexAttrib1d)(GLuint,GLdouble); void (WINE_GLAPI *p_glVertexAttrib1dARB)(GLuint,GLdouble); void (WINE_GLAPI *p_glVertexAttrib1dNV)(GLuint,GLdouble); @@ -2104,8 +2160,8 @@ struct opengl_funcs void (WINE_GLAPI *p_glVertexAttrib1fv)(GLuint,const GLfloat*); void (WINE_GLAPI *p_glVertexAttrib1fvARB)(GLuint,const GLfloat*); void (WINE_GLAPI *p_glVertexAttrib1fvNV)(GLuint,const GLfloat*); - void (WINE_GLAPI *p_glVertexAttrib1hNV)(GLuint,unsigned short); - void (WINE_GLAPI *p_glVertexAttrib1hvNV)(GLuint,const unsigned short*); + void (WINE_GLAPI *p_glVertexAttrib1hNV)(GLuint,GLhalfNV); + void (WINE_GLAPI *p_glVertexAttrib1hvNV)(GLuint,const GLhalfNV*); void (WINE_GLAPI *p_glVertexAttrib1s)(GLuint,GLshort); void (WINE_GLAPI *p_glVertexAttrib1sARB)(GLuint,GLshort); void (WINE_GLAPI *p_glVertexAttrib1sNV)(GLuint,GLshort); @@ -2124,8 +2180,8 @@ struct opengl_funcs void (WINE_GLAPI *p_glVertexAttrib2fv)(GLuint,const GLfloat*); void (WINE_GLAPI *p_glVertexAttrib2fvARB)(GLuint,const GLfloat*); void (WINE_GLAPI *p_glVertexAttrib2fvNV)(GLuint,const GLfloat*); - void (WINE_GLAPI *p_glVertexAttrib2hNV)(GLuint,unsigned short,unsigned short); - void (WINE_GLAPI *p_glVertexAttrib2hvNV)(GLuint,const unsigned short*); + void (WINE_GLAPI *p_glVertexAttrib2hNV)(GLuint,GLhalfNV,GLhalfNV); + void (WINE_GLAPI *p_glVertexAttrib2hvNV)(GLuint,const GLhalfNV*); void (WINE_GLAPI *p_glVertexAttrib2s)(GLuint,GLshort,GLshort); void (WINE_GLAPI *p_glVertexAttrib2sARB)(GLuint,GLshort,GLshort); void (WINE_GLAPI *p_glVertexAttrib2sNV)(GLuint,GLshort,GLshort); @@ -2144,8 +2200,8 @@ struct opengl_funcs void (WINE_GLAPI *p_glVertexAttrib3fv)(GLuint,const GLfloat*); void (WINE_GLAPI *p_glVertexAttrib3fvARB)(GLuint,const GLfloat*); void (WINE_GLAPI *p_glVertexAttrib3fvNV)(GLuint,const GLfloat*); - void (WINE_GLAPI *p_glVertexAttrib3hNV)(GLuint,unsigned short,unsigned short,unsigned short); - void (WINE_GLAPI *p_glVertexAttrib3hvNV)(GLuint,const unsigned short*); + void (WINE_GLAPI *p_glVertexAttrib3hNV)(GLuint,GLhalfNV,GLhalfNV,GLhalfNV); + void (WINE_GLAPI *p_glVertexAttrib3hvNV)(GLuint,const GLhalfNV*); void (WINE_GLAPI *p_glVertexAttrib3s)(GLuint,GLshort,GLshort,GLshort); void (WINE_GLAPI *p_glVertexAttrib3sARB)(GLuint,GLshort,GLshort,GLshort); void (WINE_GLAPI *p_glVertexAttrib3sNV)(GLuint,GLshort,GLshort,GLshort); @@ -2180,8 +2236,8 @@ struct opengl_funcs void (WINE_GLAPI *p_glVertexAttrib4fv)(GLuint,const GLfloat*); void (WINE_GLAPI *p_glVertexAttrib4fvARB)(GLuint,const GLfloat*); void (WINE_GLAPI *p_glVertexAttrib4fvNV)(GLuint,const GLfloat*); - void (WINE_GLAPI *p_glVertexAttrib4hNV)(GLuint,unsigned short,unsigned short,unsigned short,unsigned short); - void (WINE_GLAPI *p_glVertexAttrib4hvNV)(GLuint,const unsigned short*); + void (WINE_GLAPI *p_glVertexAttrib4hNV)(GLuint,GLhalfNV,GLhalfNV,GLhalfNV,GLhalfNV); + void (WINE_GLAPI *p_glVertexAttrib4hvNV)(GLuint,const GLhalfNV*); void (WINE_GLAPI *p_glVertexAttrib4iv)(GLuint,const GLint*); void (WINE_GLAPI *p_glVertexAttrib4ivARB)(GLuint,const GLint*); void (WINE_GLAPI *p_glVertexAttrib4s)(GLuint,GLshort,GLshort,GLshort,GLshort); @@ -2199,8 +2255,10 @@ struct opengl_funcs void (WINE_GLAPI *p_glVertexAttrib4usv)(GLuint,const GLushort*); void (WINE_GLAPI *p_glVertexAttrib4usvARB)(GLuint,const GLushort*); void (WINE_GLAPI *p_glVertexAttribArrayObjectATI)(GLuint,GLint,GLenum,GLboolean,GLsizei,GLuint,GLuint); + void (WINE_GLAPI *p_glVertexAttribBinding)(GLuint,GLuint); void (WINE_GLAPI *p_glVertexAttribDivisor)(GLuint,GLuint); void (WINE_GLAPI *p_glVertexAttribDivisorARB)(GLuint,GLuint); + void (WINE_GLAPI *p_glVertexAttribFormat)(GLuint,GLint,GLenum,GLboolean,GLuint); void (WINE_GLAPI *p_glVertexAttribFormatNV)(GLuint,GLint,GLenum,GLboolean,GLsizei); void (WINE_GLAPI *p_glVertexAttribI1i)(GLuint,GLint); void (WINE_GLAPI *p_glVertexAttribI1iEXT)(GLuint,GLint); @@ -2242,6 +2300,7 @@ struct opengl_funcs void (WINE_GLAPI *p_glVertexAttribI4uivEXT)(GLuint,const GLuint*); void (WINE_GLAPI *p_glVertexAttribI4usv)(GLuint,const GLushort*); void (WINE_GLAPI *p_glVertexAttribI4usvEXT)(GLuint,const GLushort*); + void (WINE_GLAPI *p_glVertexAttribIFormat)(GLuint,GLint,GLenum,GLuint); void (WINE_GLAPI *p_glVertexAttribIFormatNV)(GLuint,GLint,GLenum,GLsizei); void (WINE_GLAPI *p_glVertexAttribIPointer)(GLuint,GLint,GLenum,GLsizei,const GLvoid*); void (WINE_GLAPI *p_glVertexAttribIPointerEXT)(GLuint,GLint,GLenum,GLsizei,const GLvoid*); @@ -2277,6 +2336,7 @@ struct opengl_funcs void (WINE_GLAPI *p_glVertexAttribL4i64vNV)(GLuint,const INT64*); void (WINE_GLAPI *p_glVertexAttribL4ui64NV)(GLuint,UINT64,UINT64,UINT64,UINT64); void (WINE_GLAPI *p_glVertexAttribL4ui64vNV)(GLuint,const UINT64*); + void (WINE_GLAPI *p_glVertexAttribLFormat)(GLuint,GLint,GLenum,GLuint); void (WINE_GLAPI *p_glVertexAttribLFormatNV)(GLuint,GLint,GLenum,GLsizei); void (WINE_GLAPI *p_glVertexAttribLPointer)(GLuint,GLint,GLenum,GLsizei,const GLvoid*); void (WINE_GLAPI *p_glVertexAttribLPointerEXT)(GLuint,GLint,GLenum,GLsizei,const GLvoid*); @@ -2293,21 +2353,22 @@ struct opengl_funcs void (WINE_GLAPI *p_glVertexAttribPointerNV)(GLuint,GLint,GLenum,GLsizei,const GLvoid*); void (WINE_GLAPI *p_glVertexAttribs1dvNV)(GLuint,GLsizei,const GLdouble*); void (WINE_GLAPI *p_glVertexAttribs1fvNV)(GLuint,GLsizei,const GLfloat*); - void (WINE_GLAPI *p_glVertexAttribs1hvNV)(GLuint,GLsizei,const unsigned short*); + void (WINE_GLAPI *p_glVertexAttribs1hvNV)(GLuint,GLsizei,const GLhalfNV*); void (WINE_GLAPI *p_glVertexAttribs1svNV)(GLuint,GLsizei,const GLshort*); void (WINE_GLAPI *p_glVertexAttribs2dvNV)(GLuint,GLsizei,const GLdouble*); void (WINE_GLAPI *p_glVertexAttribs2fvNV)(GLuint,GLsizei,const GLfloat*); - void (WINE_GLAPI *p_glVertexAttribs2hvNV)(GLuint,GLsizei,const unsigned short*); + void (WINE_GLAPI *p_glVertexAttribs2hvNV)(GLuint,GLsizei,const GLhalfNV*); void (WINE_GLAPI *p_glVertexAttribs2svNV)(GLuint,GLsizei,const GLshort*); void (WINE_GLAPI *p_glVertexAttribs3dvNV)(GLuint,GLsizei,const GLdouble*); void (WINE_GLAPI *p_glVertexAttribs3fvNV)(GLuint,GLsizei,const GLfloat*); - void (WINE_GLAPI *p_glVertexAttribs3hvNV)(GLuint,GLsizei,const unsigned short*); + void (WINE_GLAPI *p_glVertexAttribs3hvNV)(GLuint,GLsizei,const GLhalfNV*); void (WINE_GLAPI *p_glVertexAttribs3svNV)(GLuint,GLsizei,const GLshort*); void (WINE_GLAPI *p_glVertexAttribs4dvNV)(GLuint,GLsizei,const GLdouble*); void (WINE_GLAPI *p_glVertexAttribs4fvNV)(GLuint,GLsizei,const GLfloat*); - void (WINE_GLAPI *p_glVertexAttribs4hvNV)(GLuint,GLsizei,const unsigned short*); + void (WINE_GLAPI *p_glVertexAttribs4hvNV)(GLuint,GLsizei,const GLhalfNV*); void (WINE_GLAPI *p_glVertexAttribs4svNV)(GLuint,GLsizei,const GLshort*); void (WINE_GLAPI *p_glVertexAttribs4ubvNV)(GLuint,GLsizei,const GLubyte*); + void (WINE_GLAPI *p_glVertexBindingDivisor)(GLuint,GLuint); void (WINE_GLAPI *p_glVertexBlendARB)(GLint); void (WINE_GLAPI *p_glVertexBlendEnvfATI)(GLenum,GLfloat); void (WINE_GLAPI *p_glVertexBlendEnviATI)(GLenum,GLint); @@ -2353,11 +2414,11 @@ struct opengl_funcs void (WINE_GLAPI *p_glVertexStream4ivATI)(GLenum,const GLint*); void (WINE_GLAPI *p_glVertexStream4sATI)(GLenum,GLshort,GLshort,GLshort,GLshort); void (WINE_GLAPI *p_glVertexStream4svATI)(GLenum,const GLshort*); - void (WINE_GLAPI *p_glVertexWeightPointerEXT)(GLsizei,GLenum,GLsizei,const GLvoid*); + void (WINE_GLAPI *p_glVertexWeightPointerEXT)(GLint,GLenum,GLsizei,const GLvoid*); void (WINE_GLAPI *p_glVertexWeightfEXT)(GLfloat); void (WINE_GLAPI *p_glVertexWeightfvEXT)(const GLfloat*); - void (WINE_GLAPI *p_glVertexWeighthNV)(unsigned short); - void (WINE_GLAPI *p_glVertexWeighthvNV)(const unsigned short*); + void (WINE_GLAPI *p_glVertexWeighthNV)(GLhalfNV); + void (WINE_GLAPI *p_glVertexWeighthvNV)(const GLhalfNV*); GLenum (WINE_GLAPI *p_glVideoCaptureNV)(GLuint,GLuint*,UINT64*); void (WINE_GLAPI *p_glVideoCaptureStreamParameterdvNV)(GLuint,GLuint,GLenum,const GLdouble*); void (WINE_GLAPI *p_glVideoCaptureStreamParameterfvNV)(GLuint,GLuint,GLenum,const GLfloat*); @@ -2796,5 +2857,6 @@ struct opengl_funcs USE_GL_FUNC(glViewport) extern struct opengl_funcs * CDECL __wine_get_wgl_driver( HDC hdc, UINT version ); +extern BOOL CDECL __wine_set_pixel_format( HWND hwnd, int format ); #endif /* __WINE_WGL_DRIVER_H */ diff --git a/include/reactos/wine/wined3d.h b/include/reactos/wine/wined3d.h index b8cc8436e1f..a1ac0a71054 100644 --- a/include/reactos/wine/wined3d.h +++ b/include/reactos/wine/wined3d.h @@ -748,12 +748,6 @@ enum wined3d_decl_usage WINED3D_DECL_USAGE_SAMPLE = 13 }; -enum wined3d_surface_type -{ - WINED3D_SURFACE_TYPE_OPENGL, /* OpenGL surface: Renders using libGL, needed for 3D */ - WINED3D_SURFACE_TYPE_GDI, /* User surface. No 3D, DirectDraw rendering with GDI */ -}; - enum wined3d_sysval_semantic { WINED3D_SV_DEPTH = 0xffffffff, @@ -1220,6 +1214,7 @@ enum wined3d_display_rotation #define WINED3DDEVCAPS_NPATCHES 0x01000000 #define WINED3D_LEGACY_DEPTH_BIAS 0x00000001 +#define WINED3D_NO3D 0x00000002 /* dwDDFX */ /* arithmetic stretching along y axis */ @@ -1981,6 +1976,7 @@ struct wined3d_palette; struct wined3d_query; struct wined3d_rendertarget_view; struct wined3d_resource; +struct wined3d_sampler; struct wined3d_shader; struct wined3d_stateblock; struct wined3d_surface; @@ -2004,7 +2000,7 @@ struct wined3d_device_parent_ops struct wined3d_surface **surface); HRESULT (__cdecl *create_texture_surface)(struct wined3d_device_parent *device_parent, void *container_parent, UINT width, UINT height, enum wined3d_format_id format_id, DWORD usage, enum wined3d_pool pool, - UINT level, enum wined3d_cubemap_face face, struct wined3d_surface **surface); + UINT sub_resource_idx, struct wined3d_surface **surface); HRESULT (__cdecl *create_volume)(struct wined3d_device_parent *device_parent, void *container_parent, UINT width, UINT height, UINT depth, enum wined3d_format_id format_id, enum wined3d_pool pool, DWORD usage, struct wined3d_volume **volume); @@ -2022,8 +2018,7 @@ HRESULT __cdecl wined3d_check_depth_stencil_match(const struct wined3d *wined3d, enum wined3d_format_id render_target_format_id, enum wined3d_format_id depth_stencil_format_id); HRESULT __cdecl wined3d_check_device_format(const struct wined3d *wined3d, UINT adaper_idx, enum wined3d_device_type device_type, enum wined3d_format_id adapter_format_id, DWORD usage, - enum wined3d_resource_type resource_type, enum wined3d_format_id check_format_id, - enum wined3d_surface_type surface_type); + enum wined3d_resource_type resource_type, enum wined3d_format_id check_format_id); HRESULT __cdecl wined3d_check_device_format_conversion(const struct wined3d *wined3d, UINT adapter_idx, enum wined3d_device_type device_type, enum wined3d_format_id source_format_id, enum wined3d_format_id target_format_id); @@ -2086,23 +2081,10 @@ HRESULT __cdecl wined3d_device_create(struct wined3d *wined3d, UINT adapter_idx, enum wined3d_device_type device_type, HWND focus_window, DWORD behaviour_flags, BYTE surface_alignment, struct wined3d_device_parent *device_parent, struct wined3d_device **device); ULONG __cdecl wined3d_device_decref(struct wined3d_device *device); -HRESULT __cdecl wined3d_device_delete_patch(struct wined3d_device *device, UINT handle); HRESULT __cdecl wined3d_device_draw_indexed_primitive(struct wined3d_device *device, UINT start_idx, UINT index_count); -HRESULT __cdecl wined3d_device_draw_indexed_primitive_strided(struct wined3d_device *device, UINT index_count, - const struct wined3d_strided_data *strided_data, UINT vertex_count, const void *index_data, - enum wined3d_format_id index_data_format_id); -HRESULT __cdecl wined3d_device_draw_indexed_primitive_up(struct wined3d_device *device, - UINT index_count, const void *index_data, enum wined3d_format_id index_data_format_id, - const void *stream_data, UINT stream_stride); +void __cdecl wined3d_device_draw_indexed_primitive_instanced(struct wined3d_device *device, + UINT start_idx, UINT index_count, UINT start_instance, UINT instance_count); HRESULT __cdecl wined3d_device_draw_primitive(struct wined3d_device *device, UINT start_vertex, UINT vertex_count); -HRESULT __cdecl wined3d_device_draw_primitive_strided(struct wined3d_device *device, - UINT vertex_count, const struct wined3d_strided_data *strided_data); -HRESULT __cdecl wined3d_device_draw_primitive_up(struct wined3d_device *device, - UINT vertex_count, const void *stream_data, UINT stream_stride); -HRESULT __cdecl wined3d_device_draw_rect_patch(struct wined3d_device *device, UINT handle, - const float *num_segs, const struct wined3d_rect_patch_info *rect_patch_info); -HRESULT __cdecl wined3d_device_draw_tri_patch(struct wined3d_device *device, UINT handle, - const float *num_segs, const struct wined3d_tri_patch_info *tri_patch_info); HRESULT __cdecl wined3d_device_end_scene(struct wined3d_device *device); HRESULT __cdecl wined3d_device_end_stateblock(struct wined3d_device *device, struct wined3d_stateblock **stateblock); void __cdecl wined3d_device_evict_managed_resources(struct wined3d_device *device); @@ -2114,10 +2096,9 @@ HRESULT __cdecl wined3d_device_get_clip_plane(const struct wined3d_device *devic UINT plane_idx, struct wined3d_vec4 *plane); HRESULT __cdecl wined3d_device_get_clip_status(const struct wined3d_device *device, struct wined3d_clip_status *clip_status); -HRESULT __cdecl wined3d_device_get_creation_parameters(const struct wined3d_device *device, +void __cdecl wined3d_device_get_creation_parameters(const struct wined3d_device *device, struct wined3d_device_creation_parameters *creation_parameters); -HRESULT __cdecl wined3d_device_get_depth_stencil(const struct wined3d_device *device, - struct wined3d_surface **depth_stencil); +struct wined3d_surface * __cdecl wined3d_device_get_depth_stencil(const struct wined3d_device *device); HRESULT __cdecl wined3d_device_get_device_caps(const struct wined3d_device *device, WINED3DCAPS *caps); HRESULT __cdecl wined3d_device_get_display_mode(const struct wined3d_device *device, UINT swapchain_idx, struct wined3d_display_mode *mode, enum wined3d_display_rotation *rotation); @@ -2125,62 +2106,66 @@ HRESULT __cdecl wined3d_device_get_front_buffer_data(const struct wined3d_device UINT swapchain_idx, struct wined3d_surface *dst_surface); void __cdecl wined3d_device_get_gamma_ramp(const struct wined3d_device *device, UINT swapchain_idx, struct wined3d_gamma_ramp *ramp); -HRESULT __cdecl wined3d_device_get_index_buffer(const struct wined3d_device *device, - struct wined3d_buffer **index_buffer); +struct wined3d_shader * __cdecl wined3d_device_get_geometry_shader(const struct wined3d_device *device); +struct wined3d_buffer * __cdecl wined3d_device_get_gs_cb(const struct wined3d_device *device, UINT idx); +struct wined3d_sampler * __cdecl wined3d_device_get_gs_sampler(const struct wined3d_device *device, UINT idx); +struct wined3d_buffer * __cdecl wined3d_device_get_index_buffer(const struct wined3d_device *device, + enum wined3d_format_id *format); HRESULT __cdecl wined3d_device_get_light(const struct wined3d_device *device, UINT light_idx, struct wined3d_light *light); HRESULT __cdecl wined3d_device_get_light_enable(const struct wined3d_device *device, UINT light_idx, BOOL *enable); -HRESULT __cdecl wined3d_device_get_material(const struct wined3d_device *device, struct wined3d_material *material); +void __cdecl wined3d_device_get_material(const struct wined3d_device *device, struct wined3d_material *material); float __cdecl wined3d_device_get_npatch_mode(const struct wined3d_device *device); struct wined3d_shader * __cdecl wined3d_device_get_pixel_shader(const struct wined3d_device *device); void __cdecl wined3d_device_get_primitive_type(const struct wined3d_device *device, enum wined3d_primitive_type *primitive_topology); +struct wined3d_buffer * __cdecl wined3d_device_get_ps_cb(const struct wined3d_device *device, UINT idx); HRESULT __cdecl wined3d_device_get_ps_consts_b(const struct wined3d_device *device, UINT start_register, BOOL *constants, UINT bool_count); HRESULT __cdecl wined3d_device_get_ps_consts_f(const struct wined3d_device *device, UINT start_register, float *constants, UINT vector4f_count); HRESULT __cdecl wined3d_device_get_ps_consts_i(const struct wined3d_device *device, UINT start_register, int *constants, UINT vector4i_count); +struct wined3d_sampler * __cdecl wined3d_device_get_ps_sampler(const struct wined3d_device *device, UINT idx); HRESULT __cdecl wined3d_device_get_raster_status(const struct wined3d_device *device, UINT swapchain_idx, struct wined3d_raster_status *raster_status); -HRESULT __cdecl wined3d_device_get_render_state(const struct wined3d_device *device, - enum wined3d_render_state state, DWORD *value); -HRESULT __cdecl wined3d_device_get_render_target(const struct wined3d_device *device, - UINT render_target_idx, struct wined3d_surface **render_target); -HRESULT __cdecl wined3d_device_get_sampler_state(const struct wined3d_device *device, - UINT sampler_idx, enum wined3d_sampler_state state, DWORD *value); -HRESULT __cdecl wined3d_device_get_scissor_rect(const struct wined3d_device *device, RECT *rect); +DWORD __cdecl wined3d_device_get_render_state(const struct wined3d_device *device, enum wined3d_render_state state); +struct wined3d_surface * __cdecl wined3d_device_get_render_target(const struct wined3d_device *device, + UINT render_target_idx); +DWORD __cdecl wined3d_device_get_sampler_state(const struct wined3d_device *device, + UINT sampler_idx, enum wined3d_sampler_state state); +void __cdecl wined3d_device_get_scissor_rect(const struct wined3d_device *device, RECT *rect); BOOL __cdecl wined3d_device_get_software_vertex_processing(const struct wined3d_device *device); +struct wined3d_buffer * __cdecl wined3d_device_get_stream_output(struct wined3d_device *device, + UINT idx, UINT *offset); HRESULT __cdecl wined3d_device_get_stream_source(const struct wined3d_device *device, UINT stream_idx, struct wined3d_buffer **buffer, UINT *offset, UINT *stride); HRESULT __cdecl wined3d_device_get_stream_source_freq(const struct wined3d_device *device, UINT stream_idx, UINT *divider); -HRESULT __cdecl wined3d_device_get_surface_from_dc(const struct wined3d_device *device, - HDC dc, struct wined3d_surface **surface); -HRESULT __cdecl wined3d_device_get_swapchain(const struct wined3d_device *device, - UINT swapchain_idx, struct wined3d_swapchain **swapchain); +struct wined3d_surface * __cdecl wined3d_device_get_surface_from_dc(const struct wined3d_device *device, HDC dc); +struct wined3d_swapchain * __cdecl wined3d_device_get_swapchain(const struct wined3d_device *device, + UINT swapchain_idx); UINT __cdecl wined3d_device_get_swapchain_count(const struct wined3d_device *device); -HRESULT __cdecl wined3d_device_get_texture(const struct wined3d_device *device, - UINT stage, struct wined3d_texture **texture); -HRESULT __cdecl wined3d_device_get_texture_stage_state(const struct wined3d_device *device, - UINT stage, enum wined3d_texture_stage_state state, DWORD *value); -HRESULT __cdecl wined3d_device_get_transform(const struct wined3d_device *device, +struct wined3d_texture * __cdecl wined3d_device_get_texture(const struct wined3d_device *device, UINT stage); +DWORD __cdecl wined3d_device_get_texture_stage_state(const struct wined3d_device *device, + UINT stage, enum wined3d_texture_stage_state state); +void __cdecl wined3d_device_get_transform(const struct wined3d_device *device, enum wined3d_transform_state state, struct wined3d_matrix *matrix); -HRESULT __cdecl wined3d_device_get_vertex_declaration(const struct wined3d_device *device, - struct wined3d_vertex_declaration **declaration); +struct wined3d_vertex_declaration * __cdecl wined3d_device_get_vertex_declaration(const struct wined3d_device *device); struct wined3d_shader * __cdecl wined3d_device_get_vertex_shader(const struct wined3d_device *device); -HRESULT __cdecl wined3d_device_get_viewport(const struct wined3d_device *device, struct wined3d_viewport *viewport); +void __cdecl wined3d_device_get_viewport(const struct wined3d_device *device, struct wined3d_viewport *viewport); +struct wined3d_buffer * __cdecl wined3d_device_get_vs_cb(const struct wined3d_device *device, UINT idx); HRESULT __cdecl wined3d_device_get_vs_consts_b(const struct wined3d_device *device, UINT start_register, BOOL *constants, UINT bool_count); HRESULT __cdecl wined3d_device_get_vs_consts_f(const struct wined3d_device *device, UINT start_register, float *constants, UINT vector4f_count); HRESULT __cdecl wined3d_device_get_vs_consts_i(const struct wined3d_device *device, UINT start_register, int *constants, UINT vector4i_count); -HRESULT __cdecl wined3d_device_get_wined3d(const struct wined3d_device *device, struct wined3d **wined3d); +struct wined3d_sampler * __cdecl wined3d_device_get_vs_sampler(const struct wined3d_device *device, UINT idx); ULONG __cdecl wined3d_device_incref(struct wined3d_device *device); HRESULT __cdecl wined3d_device_init_3d(struct wined3d_device *device, struct wined3d_swapchain_desc *swapchain_desc); HRESULT __cdecl wined3d_device_init_gdi(struct wined3d_device *device, struct wined3d_swapchain_desc *swapchain_desc); -HRESULT __cdecl wined3d_device_multiply_transform(struct wined3d_device *device, +void __cdecl wined3d_device_multiply_transform(struct wined3d_device *device, enum wined3d_transform_state state, const struct wined3d_matrix *matrix); HRESULT __cdecl wined3d_device_present(const struct wined3d_device *device, const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override, const RGNDATA *dirty_region, DWORD flags); @@ -2190,9 +2175,9 @@ HRESULT __cdecl wined3d_device_process_vertices(struct wined3d_device *device, void __cdecl wined3d_device_release_focus_window(struct wined3d_device *device); HRESULT __cdecl wined3d_device_reset(struct wined3d_device *device, const struct wined3d_swapchain_desc *swapchain_desc, const struct wined3d_display_mode *mode, - wined3d_device_reset_cb callback); + wined3d_device_reset_cb callback, BOOL reset_state); void __cdecl wined3d_device_restore_fullscreen_window(struct wined3d_device *device, HWND window); -HRESULT __cdecl wined3d_device_set_base_vertex_index(struct wined3d_device *device, INT base_index); +void __cdecl wined3d_device_set_base_vertex_index(struct wined3d_device *device, INT base_index); HRESULT __cdecl wined3d_device_set_clip_plane(struct wined3d_device *device, UINT plane_idx, const struct wined3d_vec4 *plane); HRESULT __cdecl wined3d_device_set_clip_status(struct wined3d_device *device, @@ -2201,53 +2186,62 @@ void __cdecl wined3d_device_set_cursor_position(struct wined3d_device *device, int x_screen_space, int y_screen_space, DWORD flags); HRESULT __cdecl wined3d_device_set_cursor_properties(struct wined3d_device *device, UINT x_hotspot, UINT y_hotspot, struct wined3d_surface *cursor_surface); -HRESULT __cdecl wined3d_device_set_depth_stencil(struct wined3d_device *device, struct wined3d_surface *depth_stencil); +void __cdecl wined3d_device_set_depth_stencil(struct wined3d_device *device, struct wined3d_surface *depth_stencil); HRESULT __cdecl wined3d_device_set_dialog_box_mode(struct wined3d_device *device, BOOL enable_dialogs); void __cdecl wined3d_device_set_gamma_ramp(const struct wined3d_device *device, UINT swapchain_idx, DWORD flags, const struct wined3d_gamma_ramp *ramp); -HRESULT __cdecl wined3d_device_set_index_buffer(struct wined3d_device *device, +void __cdecl wined3d_device_set_geometry_shader(struct wined3d_device *device, struct wined3d_shader *shader); +void __cdecl wined3d_device_set_gs_cb(struct wined3d_device *device, UINT idx, struct wined3d_buffer *buffer); +void __cdecl wined3d_device_set_gs_sampler(struct wined3d_device *device, UINT idx, struct wined3d_sampler *sampler); +void __cdecl wined3d_device_set_index_buffer(struct wined3d_device *device, struct wined3d_buffer *index_buffer, enum wined3d_format_id format_id); HRESULT __cdecl wined3d_device_set_light(struct wined3d_device *device, UINT light_idx, const struct wined3d_light *light); HRESULT __cdecl wined3d_device_set_light_enable(struct wined3d_device *device, UINT light_idx, BOOL enable); -HRESULT __cdecl wined3d_device_set_material(struct wined3d_device *device, const struct wined3d_material *material); +void __cdecl wined3d_device_set_material(struct wined3d_device *device, const struct wined3d_material *material); void __cdecl wined3d_device_set_multithreaded(struct wined3d_device *device); HRESULT __cdecl wined3d_device_set_npatch_mode(struct wined3d_device *device, float segments); -HRESULT __cdecl wined3d_device_set_pixel_shader(struct wined3d_device *device, struct wined3d_shader *shader); +void __cdecl wined3d_device_set_pixel_shader(struct wined3d_device *device, struct wined3d_shader *shader); void __cdecl wined3d_device_set_primitive_type(struct wined3d_device *device, enum wined3d_primitive_type primitive_topology); +void __cdecl wined3d_device_set_ps_cb(struct wined3d_device *device, UINT idx, struct wined3d_buffer *buffer); HRESULT __cdecl wined3d_device_set_ps_consts_b(struct wined3d_device *device, UINT start_register, const BOOL *constants, UINT bool_count); HRESULT __cdecl wined3d_device_set_ps_consts_f(struct wined3d_device *device, UINT start_register, const float *constants, UINT vector4f_count); HRESULT __cdecl wined3d_device_set_ps_consts_i(struct wined3d_device *device, UINT start_register, const int *constants, UINT vector4i_count); -HRESULT __cdecl wined3d_device_set_render_state(struct wined3d_device *device, +void __cdecl wined3d_device_set_ps_sampler(struct wined3d_device *device, UINT idx, struct wined3d_sampler *sampler); +void __cdecl wined3d_device_set_render_state(struct wined3d_device *device, enum wined3d_render_state state, DWORD value); HRESULT __cdecl wined3d_device_set_render_target(struct wined3d_device *device, UINT render_target_idx, struct wined3d_surface *render_target, BOOL set_viewport); -HRESULT __cdecl wined3d_device_set_sampler_state(struct wined3d_device *device, +void __cdecl wined3d_device_set_sampler_state(struct wined3d_device *device, UINT sampler_idx, enum wined3d_sampler_state state, DWORD value); -HRESULT __cdecl wined3d_device_set_scissor_rect(struct wined3d_device *device, const RECT *rect); -HRESULT __cdecl wined3d_device_set_software_vertex_processing(struct wined3d_device *device, BOOL software); +void __cdecl wined3d_device_set_scissor_rect(struct wined3d_device *device, const RECT *rect); +void __cdecl wined3d_device_set_software_vertex_processing(struct wined3d_device *device, BOOL software); +void __cdecl wined3d_device_set_stream_output(struct wined3d_device *device, UINT idx, + struct wined3d_buffer *buffer, UINT offset); HRESULT __cdecl wined3d_device_set_stream_source(struct wined3d_device *device, UINT stream_idx, struct wined3d_buffer *buffer, UINT offset, UINT stride); HRESULT __cdecl wined3d_device_set_stream_source_freq(struct wined3d_device *device, UINT stream_idx, UINT divider); HRESULT __cdecl wined3d_device_set_texture(struct wined3d_device *device, UINT stage, struct wined3d_texture *texture); -HRESULT __cdecl wined3d_device_set_texture_stage_state(struct wined3d_device *device, +void __cdecl wined3d_device_set_texture_stage_state(struct wined3d_device *device, UINT stage, enum wined3d_texture_stage_state state, DWORD value); -HRESULT __cdecl wined3d_device_set_transform(struct wined3d_device *device, +void __cdecl wined3d_device_set_transform(struct wined3d_device *device, enum wined3d_transform_state state, const struct wined3d_matrix *matrix); -HRESULT __cdecl wined3d_device_set_vertex_declaration(struct wined3d_device *device, +void __cdecl wined3d_device_set_vertex_declaration(struct wined3d_device *device, struct wined3d_vertex_declaration *declaration); -HRESULT __cdecl wined3d_device_set_vertex_shader(struct wined3d_device *device, struct wined3d_shader *shader); -HRESULT __cdecl wined3d_device_set_viewport(struct wined3d_device *device, const struct wined3d_viewport *viewport); +void __cdecl wined3d_device_set_vertex_shader(struct wined3d_device *device, struct wined3d_shader *shader); +void __cdecl wined3d_device_set_viewport(struct wined3d_device *device, const struct wined3d_viewport *viewport); +void __cdecl wined3d_device_set_vs_cb(struct wined3d_device *device, UINT idx, struct wined3d_buffer *buffer); HRESULT __cdecl wined3d_device_set_vs_consts_b(struct wined3d_device *device, UINT start_register, const BOOL *constants, UINT bool_count); HRESULT __cdecl wined3d_device_set_vs_consts_f(struct wined3d_device *device, UINT start_register, const float *constants, UINT vector4f_count); HRESULT __cdecl wined3d_device_set_vs_consts_i(struct wined3d_device *device, UINT start_register, const int *constants, UINT vector4i_count); +void __cdecl wined3d_device_set_vs_sampler(struct wined3d_device *device, UINT idx, struct wined3d_sampler *sampler); void __cdecl wined3d_device_setup_fullscreen_window(struct wined3d_device *device, HWND window, UINT w, UINT h); BOOL __cdecl wined3d_device_show_cursor(struct wined3d_device *device, BOOL show); HRESULT __cdecl wined3d_device_uninit_3d(struct wined3d_device *device); @@ -2294,6 +2288,11 @@ void * __cdecl wined3d_rendertarget_view_get_parent(const struct wined3d_rendert struct wined3d_resource * __cdecl wined3d_rendertarget_view_get_resource(const struct wined3d_rendertarget_view *view); ULONG __cdecl wined3d_rendertarget_view_incref(struct wined3d_rendertarget_view *view); +HRESULT __cdecl wined3d_sampler_create(void *parent, struct wined3d_sampler **sampler); +ULONG __cdecl wined3d_sampler_decref(struct wined3d_sampler *sampler); +void * __cdecl wined3d_sampler_get_parent(const struct wined3d_sampler *sampler); +ULONG __cdecl wined3d_sampler_incref(struct wined3d_sampler *sampler); + HRESULT __cdecl wined3d_shader_create_gs(struct wined3d_device *device, const DWORD *byte_code, const struct wined3d_shader_signature *output_signature, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_shader **shader, unsigned int max_version); @@ -2311,8 +2310,8 @@ ULONG __cdecl wined3d_shader_incref(struct wined3d_shader *shader); HRESULT __cdecl wined3d_shader_set_local_constants_float(struct wined3d_shader *shader, UINT start_idx, const float *src_data, UINT vector4f_count); -HRESULT __cdecl wined3d_stateblock_apply(const struct wined3d_stateblock *stateblock); -HRESULT __cdecl wined3d_stateblock_capture(struct wined3d_stateblock *stateblock); +void __cdecl wined3d_stateblock_apply(const struct wined3d_stateblock *stateblock); +void __cdecl wined3d_stateblock_capture(struct wined3d_stateblock *stateblock); HRESULT __cdecl wined3d_stateblock_create(struct wined3d_device *device, enum wined3d_stateblock_type type, struct wined3d_stateblock **stateblock); ULONG __cdecl wined3d_stateblock_decref(struct wined3d_stateblock *stateblock); @@ -2322,10 +2321,9 @@ HRESULT __cdecl wined3d_surface_blt(struct wined3d_surface *dst_surface, const R struct wined3d_surface *src_surface, const RECT *src_rect, DWORD flags, const WINEDDBLTFX *blt_fx, enum wined3d_texture_filter_type filter); HRESULT __cdecl wined3d_surface_create(struct wined3d_device *device, UINT width, UINT height, - enum wined3d_format_id format_id, UINT level, DWORD usage, enum wined3d_pool pool, - enum wined3d_multisample_type multisample_type, DWORD multisample_quality, - enum wined3d_surface_type surface_type, DWORD flags, void *parent, - const struct wined3d_parent_ops *parent_ops, struct wined3d_surface **surface); + enum wined3d_format_id format_id, DWORD usage, enum wined3d_pool pool, + enum wined3d_multisample_type multisample_type, DWORD multisample_quality, DWORD flags, + void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_surface **surface); ULONG __cdecl wined3d_surface_decref(struct wined3d_surface *surface); HRESULT __cdecl wined3d_surface_flip(struct wined3d_surface *surface, struct wined3d_surface *override, DWORD flags); struct wined3d_surface * __cdecl wined3d_surface_from_resource(struct wined3d_resource *resource); @@ -2351,7 +2349,7 @@ HRESULT __cdecl wined3d_surface_set_color_key(struct wined3d_surface *surface, DWORD flags, const struct wined3d_color_key *color_key); HRESULT __cdecl wined3d_surface_set_mem(struct wined3d_surface *surface, void *mem); HRESULT __cdecl wined3d_surface_set_overlay_position(struct wined3d_surface *surface, LONG x, LONG y); -HRESULT __cdecl wined3d_surface_set_palette(struct wined3d_surface *surface, struct wined3d_palette *palette); +void __cdecl wined3d_surface_set_palette(struct wined3d_surface *surface, struct wined3d_palette *palette); DWORD __cdecl wined3d_surface_set_priority(struct wined3d_surface *surface, DWORD new_priority); HRESULT __cdecl wined3d_surface_unmap(struct wined3d_surface *surface); HRESULT __cdecl wined3d_surface_update_desc(struct wined3d_surface *surface, @@ -2362,12 +2360,11 @@ HRESULT __cdecl wined3d_surface_update_overlay(struct wined3d_surface *surface, HRESULT __cdecl wined3d_surface_update_overlay_z_order(struct wined3d_surface *surface, DWORD flags, struct wined3d_surface *ref); -HRESULT __cdecl wined3d_swapchain_create(struct wined3d_device *device, - struct wined3d_swapchain_desc *desc, enum wined3d_surface_type surface_type, void *parent, - const struct wined3d_parent_ops *parent_ops, struct wined3d_swapchain **swapchain); +HRESULT __cdecl wined3d_swapchain_create(struct wined3d_device *device, struct wined3d_swapchain_desc *desc, + void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_swapchain **swapchain); ULONG __cdecl wined3d_swapchain_decref(struct wined3d_swapchain *swapchain); -HRESULT __cdecl wined3d_swapchain_get_back_buffer(const struct wined3d_swapchain *swapchain, - UINT backbuffer_idx, enum wined3d_backbuffer_type backbuffer_type, struct wined3d_surface **backbuffer); +struct wined3d_surface * __cdecl wined3d_swapchain_get_back_buffer(const struct wined3d_swapchain *swapchain, + UINT backbuffer_idx, enum wined3d_backbuffer_type backbuffer_type); struct wined3d_device * __cdecl wined3d_swapchain_get_device(const struct wined3d_swapchain *swapchain); HRESULT __cdecl wined3d_swapchain_get_display_mode(const struct wined3d_swapchain *swapchain, struct wined3d_display_mode *mode, enum wined3d_display_rotation *rotation); @@ -2376,7 +2373,7 @@ HRESULT __cdecl wined3d_swapchain_get_front_buffer_data(const struct wined3d_swa HRESULT __cdecl wined3d_swapchain_get_gamma_ramp(const struct wined3d_swapchain *swapchain, struct wined3d_gamma_ramp *ramp); void * __cdecl wined3d_swapchain_get_parent(const struct wined3d_swapchain *swapchain); -HRESULT __cdecl wined3d_swapchain_get_desc(const struct wined3d_swapchain *swapchain, +void __cdecl wined3d_swapchain_get_desc(const struct wined3d_swapchain *swapchain, struct wined3d_swapchain_desc *desc); HRESULT __cdecl wined3d_swapchain_get_raster_status(const struct wined3d_swapchain *swapchain, struct wined3d_raster_status *raster_status); @@ -2386,7 +2383,7 @@ HRESULT __cdecl wined3d_swapchain_present(struct wined3d_swapchain *swapchain, const RGNDATA *dirty_region, DWORD flags); HRESULT __cdecl wined3d_swapchain_set_gamma_ramp(const struct wined3d_swapchain *swapchain, DWORD flags, const struct wined3d_gamma_ramp *ramp); -HRESULT __cdecl wined3d_swapchain_set_window(struct wined3d_swapchain *swapchain, HWND window); +void __cdecl wined3d_swapchain_set_window(struct wined3d_swapchain *swapchain, HWND window); HRESULT __cdecl wined3d_texture_add_dirty_region(struct wined3d_texture *texture, UINT layer, const struct wined3d_box *dirty_region); diff --git a/lib/3rdparty/libxml2/CMakeLists.txt b/lib/3rdparty/libxml2/CMakeLists.txt index 3da4e5b0b05..0db63f8db11 100644 --- a/lib/3rdparty/libxml2/CMakeLists.txt +++ b/lib/3rdparty/libxml2/CMakeLists.txt @@ -13,6 +13,7 @@ add_definitions( -D_DLL -D__USE_CRTIMP) list(APPEND SOURCE + buf.c c14n.c catalog.c chvalid.c diff --git a/lib/3rdparty/libxml2/DOCBparser.c b/lib/3rdparty/libxml2/DOCBparser.c index 3573743352c..f12511b9e8a 100644 --- a/lib/3rdparty/libxml2/DOCBparser.c +++ b/lib/3rdparty/libxml2/DOCBparser.c @@ -53,7 +53,7 @@ docbEncodeEntities(unsigned char *out ATTRIBUTE_UNUSED, /** * docbParseDocument: * @ctxt: an SGML parser context - * + * * parse an SGML document (and build a tree if using the standard SAX * interface). * @@ -163,12 +163,12 @@ docbCreatePushParserCtxt(docbSAXHandlerPtr sax ATTRIBUTE_UNUSED, * @cur: a pointer to an array of xmlChar * @encoding: a free form C string describing the SGML document encoding, or NULL * @sax: the SAX handler block - * @userData: if using SAX, this pointer will be provided on callbacks. + * @userData: if using SAX, this pointer will be provided on callbacks. * * parse an SGML in-memory document and build a tree. * It use the given SAX function block to handle the parsing callback. * If sax is NULL, fallback to the default DOM tree building routines. - * + * * Returns the resulting document tree */ @@ -196,7 +196,7 @@ docbSAXParseDoc(xmlChar * cur ATTRIBUTE_UNUSED, * @encoding: a free form C string describing the SGML document encoding, or NULL * * parse an SGML in-memory document and build a tree. - * + * * Returns the resulting document tree */ @@ -221,7 +221,7 @@ docbParseDoc(xmlChar * cur ATTRIBUTE_UNUSED, * @filename: the filename * @encoding: the SGML document encoding, or NULL * - * Create a parser context for a file content. + * Create a parser context for a file content. * Automatic support for ZLIB/Compress compressed document is provided * by default if found at compile-time. * @@ -247,7 +247,7 @@ docbCreateFileParserCtxt(const char *filename ATTRIBUTE_UNUSED, * @filename: the filename * @encoding: a free form C string describing the SGML document encoding, or NULL * @sax: the SAX handler block - * @userData: if using SAX, this pointer will be provided on callbacks. + * @userData: if using SAX, this pointer will be provided on callbacks. * * parse an SGML file and build a tree. Automatic support for ZLIB/Compress * compressed document is provided by default if found at compile-time. diff --git a/lib/3rdparty/libxml2/HTMLparser.c b/lib/3rdparty/libxml2/HTMLparser.c index 4d43b93d371..a533f375c4b 100644 --- a/lib/3rdparty/libxml2/HTMLparser.c +++ b/lib/3rdparty/libxml2/HTMLparser.c @@ -44,6 +44,9 @@ #include #include +#include "buf.h" +#include "enc.h" + #define HTML_MAX_NAMELEN 1000 #define HTML_PARSER_BIG_BUFFER_SIZE 1000 #define HTML_PARSER_BUFFER_SIZE 100 @@ -727,7 +730,7 @@ static const char* const map_contents[] = { BLOCK, "area", NULL } ; static const char* const name_attr[] = { "name", NULL } ; static const char* const action_attr[] = { "action", NULL } ; static const char* const blockli_elt[] = { BLOCK, "li", NULL } ; -static const char* const meta_attrs[] = { I18N, "http-equiv", "name", "scheme", NULL } ; +static const char* const meta_attrs[] = { I18N, "http-equiv", "name", "scheme", "charset", NULL } ; static const char* const content_attr[] = { "content", NULL } ; static const char* const type_attr[] = { "type", NULL } ; static const char* const noframes_content[] = { "body", FLOW MODIFIER, NULL } ; @@ -1080,9 +1083,9 @@ static const char * const htmlStartClose[] = { "menu", "p", "head", "ul", NULL, "p", "p", "head", "h1", "h2", "h3", "h4", "h5", "h6", FONTSTYLE, NULL, "div", "p", "head", NULL, -"noscript", "p", "head", NULL, +"noscript", "p", NULL, "center", "font", "b", "i", "p", "head", NULL, -"a", "a", NULL, +"a", "a", "head", NULL, "caption", "p", NULL, "colgroup", "caption", "colgroup", "col", "p", NULL, "col", "caption", "col", "p", NULL, @@ -1100,6 +1103,43 @@ static const char * const htmlStartClose[] = { "option", "option", NULL, "fieldset", "legend", "p", "head", "h1", "h2", "h3", "h4", "h5", "h6", "pre", "listing", "xmp", "a", NULL, +/* most tags in in FONTSTYLE, PHRASE and SPECIAL should close */ +"tt", "head", NULL, +"i", "head", NULL, +"b", "head", NULL, +"u", "head", NULL, +"s", "head", NULL, +"strike", "head", NULL, +"big", "head", NULL, +"small", "head", NULL, + +"em", "head", NULL, +"strong", "head", NULL, +"dfn", "head", NULL, +"code", "head", NULL, +"samp", "head", NULL, +"kbd", "head", NULL, +"var", "head", NULL, +"cite", "head", NULL, +"abbr", "head", NULL, +"acronym", "head", NULL, + +/* "a" */ +"img", "head", NULL, +/* "applet" */ +/* "embed" */ +/* "object" */ +"font", "head", NULL, +/* "basefont" */ +"br", "head", NULL, +/* "script" */ +"map", "head", NULL, +"q", "head", NULL, +"sub", "head", NULL, +"sup", "head", NULL, +"span", "head", NULL, +"bdo", "head", NULL, +"iframe", "head", NULL, NULL }; @@ -2941,9 +2981,14 @@ htmlParseCharData(htmlParserCtxtPtr ctxt) { */ if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) { if (areBlanks(ctxt, buf, nbchar)) { - if (ctxt->sax->ignorableWhitespace != NULL) - ctxt->sax->ignorableWhitespace(ctxt->userData, - buf, nbchar); + if (ctxt->keepBlanks) { + if (ctxt->sax->characters != NULL) + ctxt->sax->characters(ctxt->userData, buf, nbchar); + } else { + if (ctxt->sax->ignorableWhitespace != NULL) + ctxt->sax->ignorableWhitespace(ctxt->userData, + buf, nbchar); + } } else { htmlCheckParagraph(ctxt); if (ctxt->sax->characters != NULL) @@ -2974,8 +3019,14 @@ htmlParseCharData(htmlParserCtxtPtr ctxt) { */ if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) { if (areBlanks(ctxt, buf, nbchar)) { - if (ctxt->sax->ignorableWhitespace != NULL) - ctxt->sax->ignorableWhitespace(ctxt->userData, buf, nbchar); + if (ctxt->keepBlanks) { + if (ctxt->sax->characters != NULL) + ctxt->sax->characters(ctxt->userData, buf, nbchar); + } else { + if (ctxt->sax->ignorableWhitespace != NULL) + ctxt->sax->ignorableWhitespace(ctxt->userData, + buf, nbchar); + } } else { htmlCheckParagraph(ctxt); if (ctxt->sax->characters != NULL) @@ -3435,34 +3486,26 @@ htmlParseAttribute(htmlParserCtxtPtr ctxt, xmlChar **value) { } /** - * htmlCheckEncoding: + * htmlCheckEncodingDirect: * @ctxt: an HTML parser context * @attvalue: the attribute value * - * Checks an http-equiv attribute from a Meta tag to detect + * Checks an attribute value to detect * the encoding * If a new encoding is detected the parser is switched to decode * it and pass UTF8 */ static void -htmlCheckEncoding(htmlParserCtxtPtr ctxt, const xmlChar *attvalue) { - const xmlChar *encoding; +htmlCheckEncodingDirect(htmlParserCtxtPtr ctxt, const xmlChar *encoding) { - if ((ctxt == NULL) || (attvalue == NULL)) + if ((ctxt == NULL) || (encoding == NULL) || + (ctxt->options & HTML_PARSE_IGNORE_ENC)) return; /* do not change encoding */ if (ctxt->input->encoding != NULL) return; - encoding = xmlStrcasestr(attvalue, BAD_CAST"charset="); - if (encoding != NULL) { - encoding += 8; - } else { - encoding = xmlStrcasestr(attvalue, BAD_CAST"charset ="); - if (encoding != NULL) - encoding += 9; - } if (encoding != NULL) { xmlCharEncoding enc; xmlCharEncodingHandlerPtr handler; @@ -3500,7 +3543,9 @@ htmlCheckEncoding(htmlParserCtxtPtr ctxt, const xmlChar *attvalue) { xmlSwitchToEncoding(ctxt, handler); ctxt->charset = XML_CHAR_ENCODING_UTF8; } else { - ctxt->errNo = XML_ERR_UNSUPPORTED_ENCODING; + htmlParseErr(ctxt, XML_ERR_UNSUPPORTED_ENCODING, + "htmlCheckEncoding: unknown encoding %s\n", + encoding, NULL); } } @@ -3515,23 +3560,50 @@ htmlCheckEncoding(htmlParserCtxtPtr ctxt, const xmlChar *attvalue) { * convert as much as possible to the parser reading buffer. */ processed = ctxt->input->cur - ctxt->input->base; - xmlBufferShrink(ctxt->input->buf->buffer, processed); - nbchars = xmlCharEncInFunc(ctxt->input->buf->encoder, - ctxt->input->buf->buffer, - ctxt->input->buf->raw); + xmlBufShrink(ctxt->input->buf->buffer, processed); + nbchars = xmlCharEncInput(ctxt->input->buf); if (nbchars < 0) { htmlParseErr(ctxt, XML_ERR_INVALID_ENCODING, "htmlCheckEncoding: encoder error\n", NULL, NULL); } - ctxt->input->base = - ctxt->input->cur = ctxt->input->buf->buffer->content; - ctxt->input->end = - &ctxt->input->base[ctxt->input->buf->buffer->use]; + xmlBufResetInput(ctxt->input->buf->buffer, ctxt->input); } } } +/** + * htmlCheckEncoding: + * @ctxt: an HTML parser context + * @attvalue: the attribute value + * + * Checks an http-equiv attribute from a Meta tag to detect + * the encoding + * If a new encoding is detected the parser is switched to decode + * it and pass UTF8 + */ +static void +htmlCheckEncoding(htmlParserCtxtPtr ctxt, const xmlChar *attvalue) { + const xmlChar *encoding; + + if (!attvalue) + return; + + encoding = xmlStrcasestr(attvalue, BAD_CAST"charset"); + if (encoding != NULL) { + encoding += 7; + } + /* + * skip blank + */ + if (encoding && IS_BLANK_CH(*encoding)) + encoding = xmlStrcasestr(attvalue, BAD_CAST"="); + if (encoding && *encoding == '=') { + encoding ++; + htmlCheckEncodingDirect(ctxt, encoding); + } +} + /** * htmlCheckMeta: * @ctxt: an HTML parser context @@ -3556,6 +3628,8 @@ htmlCheckMeta(htmlParserCtxtPtr ctxt, const xmlChar **atts) { if ((value != NULL) && (!xmlStrcasecmp(att, BAD_CAST"http-equiv")) && (!xmlStrcasecmp(value, BAD_CAST"Content-Type"))) http = 1; + else if ((value != NULL) && (!xmlStrcasecmp(att, BAD_CAST"charset"))) + htmlCheckEncodingDirect(ctxt, value); else if ((value != NULL) && (!xmlStrcasecmp(att, BAD_CAST"content"))) content = value; att = atts[i++]; @@ -3885,6 +3959,7 @@ htmlParseEndTag(htmlParserCtxtPtr ctxt) if ((oldname != NULL) && (xmlStrEqual(oldname, name))) { if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL)) ctxt->sax->endElement(ctxt->userData, name); + htmlNodeInfoPop(ctxt); htmlnamePop(ctxt); ret = 1; } else { @@ -4877,9 +4952,7 @@ htmlCreateMemoryParserCtxt(const char *buffer, int size) { input->filename = NULL; input->buf = buf; - input->base = input->buf->buffer->content; - input->cur = input->buf->buffer->content; - input->end = &input->buf->buffer->content[input->buf->buffer->use]; + xmlBufResetInput(buf->buffer, input); inputPush(ctxt, input); return(ctxt); @@ -4996,8 +5069,8 @@ htmlParseLookupSequence(htmlParserCtxtPtr ctxt, xmlChar first, buf = in->base; len = in->length; } else { - buf = in->buf->buffer->content; - len = in->buf->buffer->use; + buf = xmlBufContent(in->buf->buffer); + len = xmlBufUse(in->buf->buffer); } /* take into account the sequence length */ @@ -5089,13 +5162,13 @@ htmlParseLookupSequence(htmlParserCtxtPtr ctxt, xmlChar first, * @stop: Array of chars, which stop the lookup. * @stopLen: Length of stop-Array * - * Try to find if any char of the stop-Array is available in the input + * Try to find if any char of the stop-Array is available in the input * stream. * This function has a side effect of (possibly) incrementing ctxt->checkIndex * to avoid rescanning sequences of bytes, it DOES change the state of the * parser, do not use liberally. * - * Returns the index to the current parsing point if a stopChar + * Returns the index to the current parsing point if a stopChar * is available, -1 otherwise. */ static int @@ -5123,8 +5196,8 @@ htmlParseLookupChars(htmlParserCtxtPtr ctxt, const xmlChar * stop, buf = in->base; len = in->length; } else { - buf = in->buf->buffer->content; - len = in->buf->buffer->use; + buf = xmlBufContent(in->buf->buffer); + len = xmlBufUse(in->buf->buffer); } for (; base < len; base++) { @@ -5173,6 +5246,8 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) { int avail = 0; xmlChar cur, next; + htmlParserNodeInfo node_info; + #ifdef DEBUG_PUSH switch (ctxt->instate) { case XML_PARSER_EOF: @@ -5233,7 +5308,7 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) { if (in->buf == NULL) avail = in->length - (in->cur - in->base); else - avail = in->buf->buffer->use - (in->cur - in->base); + avail = xmlBufUse(in->buf->buffer) - (in->cur - in->base); if ((avail == 0) && (terminate)) { htmlAutoCloseOnEnd(ctxt); if ((ctxt->nameNr == 0) && (ctxt->instate != XML_PARSER_EOF)) { @@ -5269,7 +5344,7 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) { if (in->buf == NULL) avail = in->length - (in->cur - in->base); else - avail = in->buf->buffer->use - (in->cur - in->base); + avail = xmlBufUse(in->buf->buffer) - (in->cur - in->base); } if ((ctxt->sax) && (ctxt->sax->setDocumentLocator)) ctxt->sax->setDocumentLocator(ctxt->userData, @@ -5311,11 +5386,24 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) { if (in->buf == NULL) avail = in->length - (in->cur - in->base); else - avail = in->buf->buffer->use - (in->cur - in->base); - if (avail < 2) + avail = xmlBufUse(in->buf->buffer) - (in->cur - in->base); + /* + * no chars in buffer + */ + if (avail < 1) goto done; + /* + * not enouth chars in buffer + */ + if (avail < 2) { + if (!terminate) + goto done; + else + next = ' '; + } else { + next = in->cur[1]; + } cur = in->cur[0]; - next = in->cur[1]; if ((cur == '<') && (next == '!') && (in->cur[2] == '-') && (in->cur[3] == '-')) { if ((!terminate) && @@ -5371,7 +5459,7 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) { if (in->buf == NULL) avail = in->length - (in->cur - in->base); else - avail = in->buf->buffer->use - (in->cur - in->base); + avail = xmlBufUse(in->buf->buffer) - (in->cur - in->base); if (avail < 2) goto done; cur = in->cur[0]; @@ -5412,7 +5500,7 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) { if (in->buf == NULL) avail = in->length - (in->cur - in->base); else - avail = in->buf->buffer->use - (in->cur - in->base); + avail = xmlBufUse(in->buf->buffer) - (in->cur - in->base); if (avail < 1) goto done; cur = in->cur[0]; @@ -5465,8 +5553,22 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) { int failed; const htmlElemDesc * info; - if (avail < 2) + /* + * no chars in buffer + */ + if (avail < 1) goto done; + /* + * not enouth chars in buffer + */ + if (avail < 2) { + if (!terminate) + goto done; + else + next = ' '; + } else { + next = in->cur[1]; + } cur = in->cur[0]; if (cur != '<') { ctxt->instate = XML_PARSER_CONTENT; @@ -5476,7 +5578,7 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) { #endif break; } - if (in->cur[1] == '/') { + if (next == '/') { ctxt->instate = XML_PARSER_END_TAG; ctxt->checkIndex = 0; #ifdef DEBUG_PUSH @@ -5489,6 +5591,14 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) { (htmlParseLookupSequence(ctxt, '>', 0, 0, 0, 1) < 0)) goto done; + /* Capture start position */ + if (ctxt->record_info) { + node_info.begin_pos = ctxt->input->consumed + + (CUR_PTR - ctxt->input->base); + node_info.begin_line = ctxt->input->line; + } + + failed = htmlParseStartTag(ctxt); name = ctxt->name; if ((failed == -1) || @@ -5538,6 +5648,9 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) { htmlnamePop(ctxt); } + if (ctxt->record_info) + htmlNodeInfoPush(ctxt, &node_info); + ctxt->instate = XML_PARSER_CONTENT; #ifdef DEBUG_PUSH xmlGenericError(xmlGenericErrorContext, @@ -5554,6 +5667,10 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) { ctxt->sax->endElement(ctxt->userData, name); htmlnamePop(ctxt); } + + if (ctxt->record_info) + htmlNodeInfoPush(ctxt, &node_info); + ctxt->instate = XML_PARSER_CONTENT; #ifdef DEBUG_PUSH xmlGenericError(xmlGenericErrorContext, @@ -5581,9 +5698,15 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) { if ((cur != '<') && (cur != '&')) { if (ctxt->sax != NULL) { if (IS_BLANK_CH(cur)) { - if (ctxt->sax->ignorableWhitespace != NULL) - ctxt->sax->ignorableWhitespace( - ctxt->userData, &cur, 1); + if (ctxt->keepBlanks) { + if (ctxt->sax->characters != NULL) + ctxt->sax->characters( + ctxt->userData, &cur, 1); + } else { + if (ctxt->sax->ignorableWhitespace != NULL) + ctxt->sax->ignorableWhitespace( + ctxt->userData, &cur, 1); + } } else { htmlCheckParagraph(ctxt); if (ctxt->sax->characters != NULL) @@ -5906,8 +6029,8 @@ htmlParseChunk(htmlParserCtxtPtr ctxt, const char *chunk, int size, } if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) && (ctxt->input->buf != NULL) && (ctxt->instate != XML_PARSER_EOF)) { - int base = ctxt->input->base - ctxt->input->buf->buffer->content; - int cur = ctxt->input->cur - ctxt->input->base; + size_t base = xmlBufGetInputBase(ctxt->input->buf->buffer, ctxt->input); + size_t cur = ctxt->input->cur - ctxt->input->base; int res; res = xmlParserInputBufferPush(ctxt->input->buf, size, chunk); @@ -5916,10 +6039,7 @@ htmlParseChunk(htmlParserCtxtPtr ctxt, const char *chunk, int size, ctxt->disableSAX = 1; return (XML_PARSER_EOF); } - ctxt->input->base = ctxt->input->buf->buffer->content + base; - ctxt->input->cur = ctxt->input->base + cur; - ctxt->input->end = - &ctxt->input->buf->buffer->content[ctxt->input->buf->buffer->use]; + xmlBufSetInputBaseCur(ctxt->input->buf->buffer, ctxt->input, base, cur); #ifdef DEBUG_PUSH xmlGenericError(xmlGenericErrorContext, "HPP: pushed %d\n", size); #endif @@ -5935,7 +6055,7 @@ htmlParseChunk(htmlParserCtxtPtr ctxt, const char *chunk, int size, (in->raw != NULL)) { int nbchars; - nbchars = xmlCharEncInFunc(in->encoder, in->buffer, in->raw); + nbchars = xmlCharEncInput(in); if (nbchars < 0) { htmlParseErr(ctxt, XML_ERR_INVALID_ENCODING, "encoder error\n", NULL, NULL); @@ -6034,24 +6154,18 @@ htmlCreatePushParserCtxt(htmlSAXHandlerPtr sax, void *user_data, inputStream->filename = (char *) xmlCanonicPath((const xmlChar *) filename); inputStream->buf = buf; - inputStream->base = inputStream->buf->buffer->content; - inputStream->cur = inputStream->buf->buffer->content; - inputStream->end = - &inputStream->buf->buffer->content[inputStream->buf->buffer->use]; + xmlBufResetInput(buf->buffer, inputStream); inputPush(ctxt, inputStream); if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) && (ctxt->input->buf != NULL)) { - int base = ctxt->input->base - ctxt->input->buf->buffer->content; - int cur = ctxt->input->cur - ctxt->input->base; + size_t base = xmlBufGetInputBase(ctxt->input->buf->buffer, ctxt->input); + size_t cur = ctxt->input->cur - ctxt->input->base; xmlParserInputBufferPush(ctxt->input->buf, size, chunk); - ctxt->input->base = ctxt->input->buf->buffer->content + base; - ctxt->input->cur = ctxt->input->base + cur; - ctxt->input->end = - &ctxt->input->buf->buffer->content[ctxt->input->buf->buffer->use]; + xmlBufSetInputBaseCur(ctxt->input->buf->buffer, ctxt->input, base, cur); #ifdef DEBUG_PUSH xmlGenericError(xmlGenericErrorContext, "HPP: pushed %d\n", size); #endif @@ -6537,6 +6651,14 @@ htmlCtxtUseOptions(htmlParserCtxtPtr ctxt, int options) ctxt->options |= HTML_PARSE_NODEFDTD; options -= HTML_PARSE_NODEFDTD; } + if (options & HTML_PARSE_IGNORE_ENC) { + ctxt->options |= HTML_PARSE_IGNORE_ENC; + options -= HTML_PARSE_IGNORE_ENC; + } + if (options & HTML_PARSE_NOIMPLIED) { + ctxt->options |= HTML_PARSE_NOIMPLIED; + options -= HTML_PARSE_NOIMPLIED; + } ctxt->dictNames = 0; return (options); } @@ -6730,8 +6852,11 @@ htmlReadIO(xmlInputReadCallback ioread, xmlInputCloseCallback ioclose, input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx, XML_CHAR_ENCODING_NONE); - if (input == NULL) + if (input == NULL) { + if (ioclose != NULL) + ioclose(ioctx); return (NULL); + } ctxt = htmlNewParserCtxt(); if (ctxt == NULL) { xmlFreeParserInputBuffer(input); @@ -6930,8 +7055,11 @@ htmlCtxtReadIO(htmlParserCtxtPtr ctxt, xmlInputReadCallback ioread, input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx, XML_CHAR_ENCODING_NONE); - if (input == NULL) + if (input == NULL) { + if (ioclose != NULL) + ioclose(ioctx); return (NULL); + } stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE); if (stream == NULL) { xmlFreeParserInputBuffer(input); diff --git a/lib/3rdparty/libxml2/HTMLtree.c b/lib/3rdparty/libxml2/HTMLtree.c index b5085836b90..4d8e3542603 100644 --- a/lib/3rdparty/libxml2/HTMLtree.c +++ b/lib/3rdparty/libxml2/HTMLtree.c @@ -30,16 +30,18 @@ #include #include +#include "buf.h" + /************************************************************************ * * - * Getting/Setting encoding meta tags * + * Getting/Setting encoding meta tags * * * ************************************************************************/ /** * htmlGetMetaEncoding: * @doc: the document - * + * * Encoding definition lookup in the Meta tags * * Returns the current encoding as flagged in the HTML source @@ -126,17 +128,17 @@ found_meta: found_content: encoding = xmlStrstr(content, BAD_CAST"charset="); - if (encoding == NULL) + if (encoding == NULL) encoding = xmlStrstr(content, BAD_CAST"Charset="); - if (encoding == NULL) + if (encoding == NULL) encoding = xmlStrstr(content, BAD_CAST"CHARSET="); if (encoding != NULL) { encoding += 8; } else { encoding = xmlStrstr(content, BAD_CAST"charset ="); - if (encoding == NULL) + if (encoding == NULL) encoding = xmlStrstr(content, BAD_CAST"Charset ="); - if (encoding == NULL) + if (encoding == NULL) encoding = xmlStrstr(content, BAD_CAST"CHARSET ="); if (encoding != NULL) encoding += 9; @@ -151,7 +153,7 @@ found_content: * htmlSetMetaEncoding: * @doc: the document * @encoding: the encoding string - * + * * Sets the current encoding in the Meta tags * NOTE: this will not change the document content encoding, just * the META flag associated. @@ -164,6 +166,7 @@ htmlSetMetaEncoding(htmlDocPtr doc, const xmlChar *encoding) { const xmlChar *content = NULL; char newcontent[100]; + newcontent[0] = 0; if (doc == NULL) return(-1); @@ -244,7 +247,7 @@ found_meta: http = 1; else { - if ((value != NULL) && + if ((value != NULL) && (!xmlStrcasecmp(attr->name, BAD_CAST"content"))) content = value; } @@ -278,8 +281,13 @@ create: xmlNewProp(meta, BAD_CAST"content", BAD_CAST newcontent); } } else { + /* remove the meta tag if NULL is passed */ + if (encoding == NULL) { + xmlUnlinkNode(meta); + xmlFreeNode(meta); + } /* change the document only if there is a real encoding change */ - if (xmlStrcasestr(content, encoding) == NULL) { + else if (xmlStrcasestr(content, encoding) == NULL) { xmlSetProp(meta, BAD_CAST"content", BAD_CAST newcontent); } } @@ -308,7 +316,7 @@ static const char* htmlBooleanAttrs[] = { * @name: the name of the attribute to check * * Determine if a given attribute is a boolean attribute. - * + * * returns: false if the attribute is not boolean, true otherwise. */ int @@ -332,7 +340,7 @@ xmlOutputBufferPtr xmlAllocOutputBufferInternal(xmlCharEncodingHandlerPtr encoder); /************************************************************************ * * - * Output error handlers * + * Output error handlers * * * ************************************************************************/ /** @@ -381,17 +389,13 @@ htmlSaveErr(int code, xmlNodePtr node, const char *extra) /************************************************************************ * * - * Dumping HTML tree content to a simple buffer * + * Dumping HTML tree content to a simple buffer * * * ************************************************************************/ -static int -htmlNodeDumpFormat(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, - int format); - /** - * htmlNodeDumpFormat: - * @buf: the HTML buffer output + * htmlBufNodeDumpFormat: + * @buf: the xmlBufPtr output * @doc: the document * @cur: the current node * @format: should formatting spaces been added @@ -400,10 +404,10 @@ htmlNodeDumpFormat(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, * * Returns the number of byte written or -1 in case of error */ -static int -htmlNodeDumpFormat(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, +static size_t +htmlBufNodeDumpFormat(xmlBufPtr buf, xmlDocPtr doc, xmlNodePtr cur, int format) { - unsigned int use; + size_t use; int ret; xmlOutputBufferPtr outbuf; @@ -426,10 +430,10 @@ htmlNodeDumpFormat(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, outbuf->context = NULL; outbuf->written = 0; - use = buf->use; + use = xmlBufUse(buf); htmlNodeDumpFormatOutput(outbuf, doc, cur, NULL, format); xmlFree(outbuf); - ret = buf->use - use; + ret = xmlBufUse(buf) - use; return (ret); } @@ -446,9 +450,24 @@ htmlNodeDumpFormat(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, */ int htmlNodeDump(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur) { - xmlInitParser(); + xmlBufPtr buffer; + size_t ret; - return(htmlNodeDumpFormat(buf, doc, cur, 1)); + if ((buf == NULL) || (cur == NULL)) + return(-1); + + xmlInitParser(); + buffer = xmlBufFromBuffer(buf); + if (buffer == NULL) + return(-1); + + ret = htmlBufNodeDumpFormat(buffer, doc, cur, 1); + + xmlBufBackToBuffer(buffer); + + if (ret > INT_MAX) + return(-1); + return((int) ret); } /** @@ -481,7 +500,7 @@ htmlNodeDumpFileFormat(FILE *out, xmlDocPtr doc, if (enc != XML_CHAR_ENCODING_UTF8) { handler = xmlFindCharEncodingHandler(encoding); if (handler == NULL) - return(-1); + htmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL, encoding); } } @@ -493,7 +512,7 @@ htmlNodeDumpFileFormat(FILE *out, xmlDocPtr doc, if (handler == NULL) handler = xmlFindCharEncodingHandler("ascii"); - /* + /* * save the content to a temp buffer. */ buf = xmlOutputBufferCreateFile(out, handler); @@ -562,11 +581,9 @@ htmlDocDumpMemoryFormat(xmlDocPtr cur, xmlChar**mem, int *size, int format) { } handler = xmlFindCharEncodingHandler(encoding); - if (handler == NULL) { - *mem = NULL; - *size = 0; - return; - } + if (handler == NULL) + htmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL, encoding); + } else { handler = xmlFindCharEncodingHandler(encoding); } @@ -587,15 +604,15 @@ htmlDocDumpMemoryFormat(xmlDocPtr cur, xmlChar**mem, int *size, int format) { return; } - htmlDocContentDumpFormatOutput(buf, cur, NULL, format); + htmlDocContentDumpFormatOutput(buf, cur, NULL, format); xmlOutputBufferFlush(buf); if (buf->conv != NULL) { - *size = buf->conv->use; - *mem = xmlStrndup(buf->conv->content, *size); + *size = xmlBufUse(buf->conv); + *mem = xmlStrndup(xmlBufContent(buf->conv), *size); } else { - *size = buf->buffer->use; - *mem = xmlStrndup(buf->buffer->content, *size); + *size = xmlBufUse(buf->buffer); + *mem = xmlStrndup(xmlBufContent(buf->buffer), *size); } (void)xmlOutputBufferClose(buf); } @@ -617,7 +634,7 @@ htmlDocDumpMemory(xmlDocPtr cur, xmlChar**mem, int *size) { /************************************************************************ * * - * Dumping HTML tree content to an I/O output buffer * + * Dumping HTML tree content to an I/O output buffer * * * ************************************************************************/ @@ -628,7 +645,7 @@ void xmlNsListDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur); * @buf: the HTML buffer output * @doc: the document * @encoding: the encoding string - * + * * TODO: check whether encoding is needed * * Dump the HTML document DTD, if any. @@ -646,14 +663,14 @@ htmlDtdDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlOutputBufferWriteString(buf, (const char *)cur->name); if (cur->ExternalID != NULL) { xmlOutputBufferWriteString(buf, " PUBLIC "); - xmlBufferWriteQuotedString(buf->buffer, cur->ExternalID); + xmlBufWriteQuotedString(buf->buffer, cur->ExternalID); if (cur->SystemID != NULL) { xmlOutputBufferWriteString(buf, " "); - xmlBufferWriteQuotedString(buf->buffer, cur->SystemID); - } + xmlBufWriteQuotedString(buf->buffer, cur->SystemID); + } } else if (cur->SystemID != NULL) { xmlOutputBufferWriteString(buf, " SYSTEM "); - xmlBufferWriteQuotedString(buf->buffer, cur->SystemID); + xmlBufWriteQuotedString(buf->buffer, cur->SystemID); } xmlOutputBufferWriteString(buf, ">\n"); } @@ -673,9 +690,10 @@ htmlAttrDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlAttrPtr cur, xmlChar *value; /* - * TODO: The html output method should not escape a & character - * occurring in an attribute value immediately followed by - * a { character (see Section B.7.1 of the HTML 4.0 Recommendation). + * The html output method should not escape a & character + * occurring in an attribute value immediately followed by + * a { character (see Section B.7.1 of the HTML 4.0 Recommendation). + * This is implemented in xmlEncodeEntitiesReentrant */ if (cur == NULL) { @@ -703,15 +721,19 @@ htmlAttrDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlAttrPtr cur, while (IS_BLANK_CH(*tmp)) tmp++; - escaped = xmlURIEscapeStr(tmp, BAD_CAST"@/:=?;#%&,+"); + /* + * the < and > have already been escaped at the entity level + * And doing so here breaks server side includes + */ + escaped = xmlURIEscapeStr(tmp, BAD_CAST"@/:=?;#%&,+<>"); if (escaped != NULL) { - xmlBufferWriteQuotedString(buf->buffer, escaped); + xmlBufWriteQuotedString(buf->buffer, escaped); xmlFree(escaped); } else { - xmlBufferWriteQuotedString(buf->buffer, value); + xmlBufWriteQuotedString(buf->buffer, value); } } else { - xmlBufferWriteQuotedString(buf->buffer, value); + xmlBufWriteQuotedString(buf->buffer, value); } xmlFree(value); } else { @@ -1061,7 +1083,7 @@ htmlDocDump(FILE *f, xmlDocPtr cur) { handler = xmlFindCharEncodingHandler(encoding); if (handler == NULL) - return(-1); + htmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL, encoding); } else { handler = xmlFindCharEncodingHandler(encoding); } @@ -1101,7 +1123,7 @@ htmlSaveFile(const char *filename, xmlDocPtr cur) { if ((cur == NULL) || (filename == NULL)) return(-1); - + xmlInitParser(); encoding = (const char *) htmlGetMetaEncoding(cur); @@ -1120,7 +1142,7 @@ htmlSaveFile(const char *filename, xmlDocPtr cur) { handler = xmlFindCharEncodingHandler(encoding); if (handler == NULL) - return(-1); + htmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL, encoding); } } @@ -1132,7 +1154,7 @@ htmlSaveFile(const char *filename, xmlDocPtr cur) { if (handler == NULL) handler = xmlFindCharEncodingHandler("ascii"); - /* + /* * save the content to a temp buffer. */ buf = xmlOutputBufferCreateFilename(filename, handler, cur->compression); @@ -1152,7 +1174,7 @@ htmlSaveFile(const char *filename, xmlDocPtr cur) { * @encoding: the document encoding * * Dump an HTML document to a file using a given encoding. - * + * * returns: the number of byte written or -1 in case of failure. */ int @@ -1181,7 +1203,7 @@ htmlSaveFileFormat(const char *filename, xmlDocPtr cur, handler = xmlFindCharEncodingHandler(encoding); if (handler == NULL) - return(-1); + htmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL, encoding); } htmlSetMetaEncoding(cur, (const xmlChar *) encoding); } else { @@ -1196,7 +1218,7 @@ htmlSaveFileFormat(const char *filename, xmlDocPtr cur, if (handler == NULL) handler = xmlFindCharEncodingHandler("ascii"); - /* + /* * save the content to a temp buffer. */ buf = xmlOutputBufferCreateFilename(filename, handler, 0); @@ -1216,7 +1238,7 @@ htmlSaveFileFormat(const char *filename, xmlDocPtr cur, * * Dump an HTML document to a file using a given encoding * and formatting returns/spaces are added. - * + * * returns: the number of byte written or -1 in case of failure. */ int diff --git a/lib/3rdparty/libxml2/INSTALL b/lib/3rdparty/libxml2/INSTALL index 7d1c323beae..a1e89e18ad2 100644 --- a/lib/3rdparty/libxml2/INSTALL +++ b/lib/3rdparty/libxml2/INSTALL @@ -1,8 +1,8 @@ Installation Instructions ************************* -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, -2006, 2007, 2008, 2009 Free Software Foundation, Inc. +Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, +Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright @@ -226,6 +226,11 @@ order to use an ANSI C compiler: and if that doesn't work, install pre-built binaries of GCC for HP-UX. + HP-UX `make' updates targets which have the same time stamps as +their prerequisites, which makes it generally unusable when shipped +generated files such as `configure' are involved. Use GNU `make' +instead. + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended diff --git a/lib/3rdparty/libxml2/Makefile.am b/lib/3rdparty/libxml2/Makefile.am index b8cbb4a6a3c..a4a9f87c12c 100644 --- a/lib/3rdparty/libxml2/Makefile.am +++ b/lib/3rdparty/libxml2/Makefile.am @@ -2,23 +2,25 @@ ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = include . doc example xstc @PYTHON_SUBDIR@ +SUBDIRS = include . doc example xstc $(PYTHON_SUBDIR) DIST_SUBDIRS = include . doc example python xstc -INCLUDES = -I$(top_builddir)/include -I@srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@ +AM_CPPFLAGS = -I$(top_builddir)/include -I$(srcdir)/include + +AM_CFLAGS = $(THREAD_CFLAGS) $(Z_CFLAGS) $(LZMA_CFLAGS) noinst_PROGRAMS=testSchemas testRelax testSAX testHTML testXPath testURI \ testThreads testC14N testAutomata testRegexp \ testReader testapi testModule runtest runsuite testchar \ - testdict runxmlconf testrecurse + testdict runxmlconf testrecurse testlimits bin_PROGRAMS = xmllint xmlcatalog bin_SCRIPTS=xml2-config lib_LTLIBRARIES = libxml2.la -libxml2_la_LIBADD = @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) @M_LIBS@ @WIN32_EXTRA_LIBADD@ +libxml2_la_LIBADD = $(ICU_LIBS) $(THREAD_LIBS) $(Z_LIBS) $(LZMA_LIBS) $(ICONV_LIBS) $(M_LIBS) $(WIN32_EXTRA_LIBADD) if USE_VERSION_SCRIPT LIBXML2_VERSION_SCRIPT = $(VERSION_SCRIPT_FLAGS)$(srcdir)/libxml2.syms @@ -26,35 +28,37 @@ else LIBXML2_VERSION_SCRIPT = endif -libxml2_la_LDFLAGS = @CYGWIN_EXTRA_LDFLAGS@ @WIN32_EXTRA_LDFLAGS@ \ - $(LIBXML2_VERSION_SCRIPT) \ - -version-info @LIBXML_VERSION_INFO@ \ - @MODULE_PLATFORM_LIBS@ +libxml2_la_LDFLAGS = $(CYGWIN_EXTRA_LDFLAGS) $(WIN32_EXTRA_LDFLAGS) \ + $(LIBXML2_VERSION_SCRIPT) \ + -version-info $(LIBXML_VERSION_INFO) \ + $(MODULE_PLATFORM_LIBS) -if WITH_TRIO_SOURCES -libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.c \ - parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c \ - valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c \ - xpointer.c xinclude.c nanohttp.c nanoftp.c DOCBparser.c \ - catalog.c globals.c threads.c c14n.c xmlstring.c \ - xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \ - triostr.c trio.c xmlreader.c relaxng.c dict.c SAX2.c \ - xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c \ - xmlmodule.c schematron.c +if WITH_SAX1_SOURCES +docb_sources = DOCBparser.c else -libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.c \ - parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c \ - valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c \ - xpointer.c xinclude.c nanohttp.c nanoftp.c DOCBparser.c \ - catalog.c globals.c threads.c c14n.c xmlstring.c \ - xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \ - xmlreader.c relaxng.c dict.c SAX2.c \ - xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c \ - xmlmodule.c schematron.c +docb_sources = endif +if WITH_TRIO_SOURCES +trio_sources = triostr.c trio.c +else +trio_sources = +endif + +libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.c \ + parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c \ + valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c \ + xpointer.c xinclude.c nanohttp.c nanoftp.c \ + $(docb_sources) \ + catalog.c globals.c threads.c c14n.c xmlstring.c buf.c \ + xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \ + $(trio_sources) \ + xmlreader.c relaxng.c dict.c SAX2.c \ + xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c \ + xmlmodule.c schematron.c xzlib.c + DEPS = $(top_builddir)/libxml2.la -LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) @M_LIBS@ @WIN32_EXTRA_LIBADD@ +LDADDS = $(STATIC_BINARIES) $(top_builddir)/libxml2.la $(THREAD_LIBS) $(Z_LIBS) $(LZMA_LIBS) $(ICONV_LIBS) $(M_LIBS) $(WIN32_EXTRA_LIBADD) man_MANS = xml2-config.1 libxml.3 @@ -65,32 +69,37 @@ m4data_DATA = libxml.m4 runtest_SOURCES=runtest.c runtest_LDFLAGS = runtest_DEPENDENCIES = $(DEPS) -runtest_LDADD= @BASE_THREAD_LIBS@ @RDL_LIBS@ $(LDADDS) +runtest_LDADD= $(BASE_THREAD_LIBS) $(RDL_LIBS) $(LDADDS) testrecurse_SOURCES=testrecurse.c testrecurse_LDFLAGS = testrecurse_DEPENDENCIES = $(DEPS) -testrecurse_LDADD= @BASE_THREAD_LIBS@ @RDL_LIBS@ $(LDADDS) +testrecurse_LDADD= $(BASE_THREAD_LIBS) $(RDL_LIBS) $(LDADDS) + +testlimits_SOURCES=testlimits.c +testlimits_LDFLAGS = +testlimits_DEPENDENCIES = $(DEPS) +testlimits_LDADD= $(BASE_THREAD_LIBS) $(RDL_LIBS) $(LDADDS) testchar_SOURCES=testchar.c testchar_LDFLAGS = testchar_DEPENDENCIES = $(DEPS) -testchar_LDADD= @RDL_LIBS@ $(LDADDS) +testchar_LDADD= $(RDL_LIBS) $(LDADDS) testdict_SOURCES=testdict.c testdict_LDFLAGS = testdict_DEPENDENCIES = $(DEPS) -testdict_LDADD= @RDL_LIBS@ $(LDADDS) +testdict_LDADD= $(RDL_LIBS) $(LDADDS) runsuite_SOURCES=runsuite.c runsuite_LDFLAGS = runsuite_DEPENDENCIES = $(DEPS) -runsuite_LDADD= @RDL_LIBS@ $(LDADDS) +runsuite_LDADD= $(RDL_LIBS) $(LDADDS) xmllint_SOURCES=xmllint.c xmllint_LDFLAGS = xmllint_DEPENDENCIES = $(DEPS) -xmllint_LDADD= @RDL_LIBS@ $(LDADDS) +xmllint_LDADD= $(RDL_LIBS) $(LDADDS) testSAX_SOURCES=testSAX.c testSAX_LDFLAGS = @@ -105,7 +114,7 @@ testHTML_LDADD= $(LDADDS) xmlcatalog_SOURCES=xmlcatalog.c xmlcatalog_LDFLAGS = xmlcatalog_DEPENDENCIES = $(DEPS) -xmlcatalog_LDADD= @RDL_LIBS@ $(LDADDS) +xmlcatalog_LDADD = $(RDL_LIBS) $(LDADDS) testXPath_SOURCES=testXPath.c testXPath_LDFLAGS = @@ -117,10 +126,14 @@ testC14N_LDFLAGS = testC14N_DEPENDENCIES = $(DEPS) testC14N_LDADD= $(LDADDS) -testThreads_SOURCES=testThreads@THREADS_W32@.c +if THREADS_W32 +testThreads_SOURCES = testThreadsWin32.c +else +testThreads_SOURCES = testThreads.c +endif testThreads_LDFLAGS = testThreads_DEPENDENCIES = $(DEPS) -testThreads_LDADD= @BASE_THREAD_LIBS@ $(LDADDS) +testThreads_LDADD= $(BASE_THREAD_LIBS) $(LDADDS) testURI_SOURCES=testURI.c testURI_LDFLAGS = @@ -172,6 +185,8 @@ testapi.c: $(srcdir)/gentest.py -@(if [ "$(PYTHON)" != "" ] ; then \ $(PYTHON) $(srcdir)/gentest.py $(srcdir) ; fi ) +BUILT_SOURCES = testapi.c + testapi_SOURCES=testapi.c testapi_LDFLAGS = testapi_DEPENDENCIES = $(DEPS) @@ -188,28 +203,25 @@ runxmlconf_LDADD= $(LDADDS) #testOOM_LDADD= $(LDADDS) runtests: + [ -d test ] || $(LN_S) $(srcdir)/test . + [ -d result ] || $(LN_S) $(srcdir)/result . $(CHECKER) ./runtest$(EXEEXT) && $(CHECKER) ./testrecurse$(EXEEXT) &&$(CHECKER) ./testapi$(EXEEXT) && $(CHECKER) ./testchar$(EXEEXT)&& $(CHECKER) ./testdict$(EXEEXT) && $(CHECKER) ./runxmlconf$(EXEEXT) - @(if [ "@PYTHON_SUBDIR@" != "" ] ; then cd python ; \ - $(MAKE) MAKEFLAGS+=--silent tests ; fi) + @(if [ "$(PYTHON_SUBDIR)" != "" ] ; then cd python ; \ + $(MAKE) tests ; fi) check: all runtests -check-valgrind: all +check-valgrind valgrind: all @echo '## Running the regression tests under Valgrind' @echo '## Go get a cup of coffee it is gonna take a while ...' - $(MAKE) CHECKER='valgrind -q' check + $(MAKE) CHECKER='valgrind -q' runtests testall : tests SVGtests SAXtests -tests: XMLtests XMLenttests NStests IDtests Errtests APItests @READER_TEST@ @TEST_SAX@ @TEST_PUSH@ @TEST_HTML@ @TEST_PHTML@ @TEST_VALID@ URItests @TEST_PATTERN@ @TEST_XPATH@ @TEST_XPTR@ @TEST_XINCLUDE@ @TEST_C14N@ @TEST_DEBUG@ @TEST_CATALOG@ @TEST_REGEXPS@ @TEST_SCHEMAS@ @TEST_SCHEMATRON@ @TEST_THREADS@ Timingtests @TEST_VTIME@ @PYTHON_TESTS@ @TEST_MODULES@ - @(if [ "@PYTHON_SUBDIR@" != "" ] ; then cd python ; \ - $(MAKE) MAKEFLAGS+=--silent tests ; fi) - @(cd doc/examples ; $(MAKE) MAKEFLAGS+=--silent tests) - -valgrind: - @echo '## Running the regression tests under Valgrind' - @echo '## Go get a cup of coffee it is gonna take a while ...' - $(MAKE) CHECKER='valgrind -q' tests +tests: XMLtests XMLenttests NStests IDtests Errtests APItests $(READER_TEST) $(TEST_SAX) $(TEST_PUSH) $(TEST_HTML) $(TEST_PHTML) $(TEST_VALID) URItests $(TEST_PATTERN) $(TEST_XPATH) $(TEST_XPTR) $(TEST_XINCLUDE) $(TEST_C14N) $(TEST_DEBUG) $(TEST_CATALOG) $(TEST_REGEXPS) $(TEST_SCHEMAS) $(TEST_SCHEMATRON) $(TEST_THREADS) Timingtests $(TEST_VTIME) $(PYTHON_TESTS) $(TEST_MODULES) + @(if [ "$(PYTHON_SUBDIR)" != "" ] ; then cd python ; \ + $(MAKE) tests ; fi) + @(cd doc/examples ; $(MAKE) tests) APItests: testapi$(EXEEXT) @echo "## Running the API regression tests this may take a little while" @@ -1115,7 +1127,7 @@ SchemasPythonTests: echo "## It is normal to see 11 errors reported" ; \ $(CHECKER) $(PYTHON) $(srcdir)/check-xsddata-test-suite.py ; \ fi) - @(if [ -x $(PYTHON) -a -d xstc ] ; then cd xstc ; $(MAKE) CHECKER="$(CHECKER)" MAKEFLAGS+=--silent pytests ; fi) + @(if [ -x $(PYTHON) -a -d xstc ] ; then cd xstc ; $(MAKE) CHECKER="$(CHECKER)" pytests ; fi) Patterntests: xmllint$(EXEEXT) @(echo > .memdump) @@ -1147,19 +1159,19 @@ ModuleTests: testModule$(EXEEXT) testdso.la cleanup: -@(find . -name .\#\* -exec rm {} \;) - -@(find . -name \*.gcda -o *.gcno -exec rm {} \;) - -@(find . -name \*.orig -o -name \*.rej -o -name \*.old -exec rm {} \;) + -@(find . -name \*.gcda -o -name \*.gcno -exec rm -f {} \;) + -@(find . -name \*.orig -o -name \*.rej -o -name \*.old -exec rm -f {} \;) dist-hook: cleanup libxml2.spec -cp libxml2.spec $(distdir) - (cd $(srcdir) ; tar -cf - --exclude CVS --exclude .svn win32 macos vms VxWorks bakefile test result) | (cd $(distdir); tar xf -) + (cd $(srcdir) ; tar -cf - --exclude CVS --exclude .svn --exclude .git win32 macos vms VxWorks bakefile test result) | (cd $(distdir); tar xf -) dist-source: distdir $(AMTAR) -chof - --exclude Tests --exclude test --exclude result $(distdir) | GZIP=$(GZIP_ENV) gzip -c >`echo "$(distdir)" | sed "s+libxml2+libxml2-sources+"`.tar.gz dist-test: distdir (mkdir -p $(distdir)) - (cd $(srcdir) ; tar -cf - --exclude CVS --exclude .svn xstc/Tests) | (cd $(distdir); tar xf -) + (cd $(srcdir) ; tar -cf - --exclude CVS --exclude .svn --exclude .git xstc/Tests) | (cd $(distdir); tar xf -) tar -cf - $(distdir)/test $(distdir)/result $(distdir)/xstc/Tests $(distdir)/Makefile.tests $(distdir)/README $(distdir)/README.tests $(distdir)/AUTHORS $(distdir)/testapi.c $(distdir)/runtest.c $(distdir)/runsuite.c | GZIP=$(GZIP_ENV) gzip -c >`echo "$(distdir)" | sed "s+libxml2+libxml2-tests+"`.tar.gz @(rm -rf $(distdir)/xstc/Test) @@ -1183,7 +1195,8 @@ xml2Conf.sh: xml2Conf.sh.in Makefile < $(srcdir)/xml2Conf.sh.in > xml2Conf.tmp \ && mv xml2Conf.tmp xml2Conf.sh -CLEANFILES=xml2Conf.sh *.gcda *.gcno +CLEANFILES = runxmlconf.log test.out xml2Conf.sh *.gcda *.gcno *.res +DISTCLEANFILES = COPYING missing.lst confexecdir=$(libdir) confexec_DATA = xml2Conf.sh @@ -1195,10 +1208,10 @@ EXTRA_DIST = xml2-config.in xml2Conf.sh.in libxml.spec.in libxml2.spec \ example/Makefile.am example/gjobread.c example/gjobs.xml \ $(man_MANS) libxml-2.0.pc.in libxml-2.0-uninstalled.pc.in \ trionan.c trionan.h triostr.c triostr.h trio.c trio.h \ - triop.h triodef.h libxml.h elfgcchack.h \ - testThreadsWin32.c genUnicode.py TODO_SCHEMAS \ + triop.h triodef.h libxml.h elfgcchack.h xzlib.h buf.h \ + enc.h save.h testThreadsWin32.c genUnicode.py TODO_SCHEMAS \ dbgen.pl dbgenattr.pl regressions.py regressions.xml \ - README.tests Makefile.tests libxml2.syms \ + README.tests Makefile.tests libxml2.syms timsort.h \ $(CVS_EXTRA_DIST) @@ -1213,13 +1226,13 @@ DOC_MODULE=libxml2-$(VERSION) EXAMPLES_DIR=$(BASE_DIR)/$(DOC_MODULE)/examples install-data-local: - @MKDIR_P@ $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE) - -@INSTALL@ -m 0644 $(srcdir)/Copyright $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE) - @MKDIR_P@ $(DESTDIR)$(EXAMPLES_DIR) - -@INSTALL@ -m 0644 $(srcdir)/xmllint.c $(DESTDIR)$(EXAMPLES_DIR) - -@INSTALL@ -m 0644 $(srcdir)/testSAX.c $(DESTDIR)$(EXAMPLES_DIR) - -@INSTALL@ -m 0644 $(srcdir)/testHTML.c $(DESTDIR)$(EXAMPLES_DIR) - -@INSTALL@ -m 0644 $(srcdir)/testXPath.c $(DESTDIR)$(EXAMPLES_DIR) + $(MKDIR_P) $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE) + -$(INSTALL) -m 0644 $(srcdir)/Copyright $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE) + $(MKDIR_P) $(DESTDIR)$(EXAMPLES_DIR) + -$(INSTALL) -m 0644 $(srcdir)/xmllint.c $(DESTDIR)$(EXAMPLES_DIR) + -$(INSTALL) -m 0644 $(srcdir)/testSAX.c $(DESTDIR)$(EXAMPLES_DIR) + -$(INSTALL) -m 0644 $(srcdir)/testHTML.c $(DESTDIR)$(EXAMPLES_DIR) + -$(INSTALL) -m 0644 $(srcdir)/testXPath.c $(DESTDIR)$(EXAMPLES_DIR) uninstall-local: rm -f $(DESTDIR)$(EXAMPLES_DIR)/testXPath.c @@ -1231,7 +1244,7 @@ uninstall-local: rm -rf $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE) tst: tst.c - $(CC) $(CFLAGS) -Iinclude -o tst tst.c .libs/libxml2.a -lpthread -lm -lz + $(CC) $(CFLAGS) -Iinclude -o tst tst.c .libs/libxml2.a -lpthread -lm -lz -llzma sparse: clean $(MAKE) CC=cgcc diff --git a/lib/3rdparty/libxml2/Makefile.in b/lib/3rdparty/libxml2/Makefile.in index 1e0e461c9f8..63d82280286 100644 --- a/lib/3rdparty/libxml2/Makefile.in +++ b/lib/3rdparty/libxml2/Makefile.in @@ -1,9 +1,9 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. +# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -43,7 +43,7 @@ noinst_PROGRAMS = testSchemas$(EXEEXT) testRelax$(EXEEXT) \ testAutomata$(EXEEXT) testRegexp$(EXEEXT) testReader$(EXEEXT) \ testapi$(EXEEXT) testModule$(EXEEXT) runtest$(EXEEXT) \ runsuite$(EXEEXT) testchar$(EXEEXT) testdict$(EXEEXT) \ - runxmlconf$(EXEEXT) testrecurse$(EXEEXT) + runxmlconf$(EXEEXT) testrecurse$(EXEEXT) testlimits$(EXEEXT) bin_PROGRAMS = xmllint$(EXEEXT) xmlcatalog$(EXEEXT) subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ @@ -51,8 +51,8 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/libxml-2.0-uninstalled.pc.in \ $(srcdir)/libxml-2.0.pc.in $(srcdir)/libxml.spec.in \ $(srcdir)/xml2-config.in $(top_srcdir)/configure AUTHORS \ - COPYING ChangeLog INSTALL NEWS TODO acconfig.h config.guess \ - config.sub depcomp install-sh ltmain.sh missing + COPYING ChangeLog INSTALL NEWS TODO config.guess config.sub \ + depcomp install-sh ltmain.sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ @@ -88,170 +88,173 @@ am__nobase_list = $(am__nobase_strip_setup); \ am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(confexecdir)" \ "$(DESTDIR)$(m4datadir)" "$(DESTDIR)$(pkgconfigdir)" LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = -libxml2_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +libxml2_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) am__libxml2_la_SOURCES_DIST = SAX.c entities.c encoding.c error.c \ parserInternals.c parser.c tree.c hash.c list.c xmlIO.c \ xmlmemory.c uri.c valid.c xlink.c HTMLparser.c HTMLtree.c \ debugXML.c xpath.c xpointer.c xinclude.c nanohttp.c nanoftp.c \ DOCBparser.c catalog.c globals.c threads.c c14n.c xmlstring.c \ - xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \ - xmlreader.c relaxng.c dict.c SAX2.c xmlwriter.c legacy.c \ - chvalid.c pattern.c xmlsave.c xmlmodule.c schematron.c \ - triostr.c trio.c -@WITH_TRIO_SOURCES_FALSE@am_libxml2_la_OBJECTS = SAX.lo entities.lo \ -@WITH_TRIO_SOURCES_FALSE@ encoding.lo error.lo \ -@WITH_TRIO_SOURCES_FALSE@ parserInternals.lo parser.lo tree.lo \ -@WITH_TRIO_SOURCES_FALSE@ hash.lo list.lo xmlIO.lo xmlmemory.lo \ -@WITH_TRIO_SOURCES_FALSE@ uri.lo valid.lo xlink.lo \ -@WITH_TRIO_SOURCES_FALSE@ HTMLparser.lo HTMLtree.lo debugXML.lo \ -@WITH_TRIO_SOURCES_FALSE@ xpath.lo xpointer.lo xinclude.lo \ -@WITH_TRIO_SOURCES_FALSE@ nanohttp.lo nanoftp.lo DOCBparser.lo \ -@WITH_TRIO_SOURCES_FALSE@ catalog.lo globals.lo threads.lo \ -@WITH_TRIO_SOURCES_FALSE@ c14n.lo xmlstring.lo xmlregexp.lo \ -@WITH_TRIO_SOURCES_FALSE@ xmlschemas.lo xmlschemastypes.lo \ -@WITH_TRIO_SOURCES_FALSE@ xmlunicode.lo xmlreader.lo relaxng.lo \ -@WITH_TRIO_SOURCES_FALSE@ dict.lo SAX2.lo xmlwriter.lo \ -@WITH_TRIO_SOURCES_FALSE@ legacy.lo chvalid.lo pattern.lo \ -@WITH_TRIO_SOURCES_FALSE@ xmlsave.lo xmlmodule.lo schematron.lo -@WITH_TRIO_SOURCES_TRUE@am_libxml2_la_OBJECTS = SAX.lo entities.lo \ -@WITH_TRIO_SOURCES_TRUE@ encoding.lo error.lo \ -@WITH_TRIO_SOURCES_TRUE@ parserInternals.lo parser.lo tree.lo \ -@WITH_TRIO_SOURCES_TRUE@ hash.lo list.lo xmlIO.lo xmlmemory.lo \ -@WITH_TRIO_SOURCES_TRUE@ uri.lo valid.lo xlink.lo HTMLparser.lo \ -@WITH_TRIO_SOURCES_TRUE@ HTMLtree.lo debugXML.lo xpath.lo \ -@WITH_TRIO_SOURCES_TRUE@ xpointer.lo xinclude.lo nanohttp.lo \ -@WITH_TRIO_SOURCES_TRUE@ nanoftp.lo DOCBparser.lo catalog.lo \ -@WITH_TRIO_SOURCES_TRUE@ globals.lo threads.lo c14n.lo \ -@WITH_TRIO_SOURCES_TRUE@ xmlstring.lo xmlregexp.lo \ -@WITH_TRIO_SOURCES_TRUE@ xmlschemas.lo xmlschemastypes.lo \ -@WITH_TRIO_SOURCES_TRUE@ xmlunicode.lo triostr.lo trio.lo \ -@WITH_TRIO_SOURCES_TRUE@ xmlreader.lo relaxng.lo dict.lo \ -@WITH_TRIO_SOURCES_TRUE@ SAX2.lo xmlwriter.lo legacy.lo \ -@WITH_TRIO_SOURCES_TRUE@ chvalid.lo pattern.lo xmlsave.lo \ -@WITH_TRIO_SOURCES_TRUE@ xmlmodule.lo schematron.lo + buf.c xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \ + triostr.c trio.c xmlreader.c relaxng.c dict.c SAX2.c \ + xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c xmlmodule.c \ + schematron.c xzlib.c +@WITH_SAX1_SOURCES_TRUE@am__objects_1 = DOCBparser.lo +@WITH_TRIO_SOURCES_TRUE@am__objects_2 = triostr.lo trio.lo +am_libxml2_la_OBJECTS = SAX.lo entities.lo encoding.lo error.lo \ + parserInternals.lo parser.lo tree.lo hash.lo list.lo xmlIO.lo \ + xmlmemory.lo uri.lo valid.lo xlink.lo HTMLparser.lo \ + HTMLtree.lo debugXML.lo xpath.lo xpointer.lo xinclude.lo \ + nanohttp.lo nanoftp.lo $(am__objects_1) catalog.lo globals.lo \ + threads.lo c14n.lo xmlstring.lo buf.lo xmlregexp.lo \ + xmlschemas.lo xmlschemastypes.lo xmlunicode.lo \ + $(am__objects_2) xmlreader.lo relaxng.lo dict.lo SAX2.lo \ + xmlwriter.lo legacy.lo chvalid.lo pattern.lo xmlsave.lo \ + xmlmodule.lo schematron.lo xzlib.lo libxml2_la_OBJECTS = $(am_libxml2_la_OBJECTS) -libxml2_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +libxml2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libxml2_la_LDFLAGS) $(LDFLAGS) -o $@ testdso_la_LIBADD = am_testdso_la_OBJECTS = testdso.lo testdso_la_OBJECTS = $(am_testdso_la_OBJECTS) -testdso_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ +testdso_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(testdso_la_LDFLAGS) $(LDFLAGS) -o $@ PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am_runsuite_OBJECTS = runsuite.$(OBJEXT) runsuite_OBJECTS = $(am_runsuite_OBJECTS) -am__DEPENDENCIES_2 = $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1) -runsuite_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(runsuite_LDFLAGS) \ - $(LDFLAGS) -o $@ +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(top_builddir)/libxml2.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +runsuite_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(runsuite_LDFLAGS) $(LDFLAGS) -o $@ am_runtest_OBJECTS = runtest.$(OBJEXT) runtest_OBJECTS = $(am_runtest_OBJECTS) -runtest_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(runtest_LDFLAGS) \ - $(LDFLAGS) -o $@ +runtest_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(runtest_LDFLAGS) $(LDFLAGS) -o $@ am_runxmlconf_OBJECTS = runxmlconf.$(OBJEXT) runxmlconf_OBJECTS = $(am_runxmlconf_OBJECTS) -runxmlconf_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ +runxmlconf_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(runxmlconf_LDFLAGS) $(LDFLAGS) -o $@ am_testAutomata_OBJECTS = testAutomata.$(OBJEXT) testAutomata_OBJECTS = $(am_testAutomata_OBJECTS) -testAutomata_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ +testAutomata_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(testAutomata_LDFLAGS) $(LDFLAGS) -o $@ am_testC14N_OBJECTS = testC14N.$(OBJEXT) testC14N_OBJECTS = $(am_testC14N_OBJECTS) -testC14N_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(testC14N_LDFLAGS) \ - $(LDFLAGS) -o $@ +testC14N_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(testC14N_LDFLAGS) $(LDFLAGS) -o $@ am_testHTML_OBJECTS = testHTML.$(OBJEXT) testHTML_OBJECTS = $(am_testHTML_OBJECTS) -testHTML_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(testHTML_LDFLAGS) \ - $(LDFLAGS) -o $@ +testHTML_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(testHTML_LDFLAGS) $(LDFLAGS) -o $@ am_testModule_OBJECTS = testModule.$(OBJEXT) testModule_OBJECTS = $(am_testModule_OBJECTS) -testModule_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ +testModule_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(testModule_LDFLAGS) $(LDFLAGS) -o $@ am_testReader_OBJECTS = testReader.$(OBJEXT) testReader_OBJECTS = $(am_testReader_OBJECTS) -testReader_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ +testReader_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(testReader_LDFLAGS) $(LDFLAGS) -o $@ am_testRegexp_OBJECTS = testRegexp.$(OBJEXT) testRegexp_OBJECTS = $(am_testRegexp_OBJECTS) -testRegexp_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ +testRegexp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(testRegexp_LDFLAGS) $(LDFLAGS) -o $@ am_testRelax_OBJECTS = testRelax.$(OBJEXT) testRelax_OBJECTS = $(am_testRelax_OBJECTS) -testRelax_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ +testRelax_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(testRelax_LDFLAGS) $(LDFLAGS) -o $@ am_testSAX_OBJECTS = testSAX.$(OBJEXT) testSAX_OBJECTS = $(am_testSAX_OBJECTS) -testSAX_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(testSAX_LDFLAGS) \ - $(LDFLAGS) -o $@ +testSAX_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(testSAX_LDFLAGS) $(LDFLAGS) -o $@ am_testSchemas_OBJECTS = testSchemas.$(OBJEXT) testSchemas_OBJECTS = $(am_testSchemas_OBJECTS) -testSchemas_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ +testSchemas_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(testSchemas_LDFLAGS) $(LDFLAGS) -o $@ -am_testThreads_OBJECTS = testThreads@THREADS_W32@.$(OBJEXT) +am__testThreads_SOURCES_DIST = testThreads.c testThreadsWin32.c +@THREADS_W32_FALSE@am_testThreads_OBJECTS = testThreads.$(OBJEXT) +@THREADS_W32_TRUE@am_testThreads_OBJECTS = testThreadsWin32.$(OBJEXT) testThreads_OBJECTS = $(am_testThreads_OBJECTS) -testThreads_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ +testThreads_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(testThreads_LDFLAGS) $(LDFLAGS) -o $@ am_testURI_OBJECTS = testURI.$(OBJEXT) testURI_OBJECTS = $(am_testURI_OBJECTS) -testURI_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(testURI_LDFLAGS) \ - $(LDFLAGS) -o $@ +testURI_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(testURI_LDFLAGS) $(LDFLAGS) -o $@ am_testXPath_OBJECTS = testXPath.$(OBJEXT) testXPath_OBJECTS = $(am_testXPath_OBJECTS) -testXPath_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ +testXPath_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(testXPath_LDFLAGS) $(LDFLAGS) -o $@ am_testapi_OBJECTS = testapi.$(OBJEXT) testapi_OBJECTS = $(am_testapi_OBJECTS) -testapi_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(testapi_LDFLAGS) \ - $(LDFLAGS) -o $@ +testapi_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(testapi_LDFLAGS) $(LDFLAGS) -o $@ am_testchar_OBJECTS = testchar.$(OBJEXT) testchar_OBJECTS = $(am_testchar_OBJECTS) -testchar_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(testchar_LDFLAGS) \ - $(LDFLAGS) -o $@ +testchar_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(testchar_LDFLAGS) $(LDFLAGS) -o $@ am_testdict_OBJECTS = testdict.$(OBJEXT) testdict_OBJECTS = $(am_testdict_OBJECTS) -testdict_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(testdict_LDFLAGS) \ - $(LDFLAGS) -o $@ +testdict_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(testdict_LDFLAGS) $(LDFLAGS) -o $@ +am_testlimits_OBJECTS = testlimits.$(OBJEXT) +testlimits_OBJECTS = $(am_testlimits_OBJECTS) +testlimits_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(testlimits_LDFLAGS) $(LDFLAGS) -o $@ am_testrecurse_OBJECTS = testrecurse.$(OBJEXT) testrecurse_OBJECTS = $(am_testrecurse_OBJECTS) -testrecurse_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ +testrecurse_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(testrecurse_LDFLAGS) $(LDFLAGS) -o $@ am_xmlcatalog_OBJECTS = xmlcatalog.$(OBJEXT) xmlcatalog_OBJECTS = $(am_xmlcatalog_OBJECTS) -xmlcatalog_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ +xmlcatalog_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(xmlcatalog_LDFLAGS) $(LDFLAGS) -o $@ am_xmllint_OBJECTS = xmllint.$(OBJEXT) xmllint_OBJECTS = $(am_xmllint_OBJECTS) -xmllint_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(xmllint_LDFLAGS) \ - $(LDFLAGS) -o $@ +xmllint_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(xmllint_LDFLAGS) $(LDFLAGS) -o $@ SCRIPTS = $(bin_SCRIPTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp @@ -259,13 +262,26 @@ am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libxml2_la_SOURCES) $(testdso_la_SOURCES) \ $(runsuite_SOURCES) $(runtest_SOURCES) $(runxmlconf_SOURCES) \ $(testAutomata_SOURCES) $(testC14N_SOURCES) \ @@ -274,16 +290,17 @@ SOURCES = $(libxml2_la_SOURCES) $(testdso_la_SOURCES) \ $(testRelax_SOURCES) $(testSAX_SOURCES) $(testSchemas_SOURCES) \ $(testThreads_SOURCES) $(testURI_SOURCES) $(testXPath_SOURCES) \ $(testapi_SOURCES) $(testchar_SOURCES) $(testdict_SOURCES) \ - $(testrecurse_SOURCES) $(xmlcatalog_SOURCES) \ - $(xmllint_SOURCES) + $(testlimits_SOURCES) $(testrecurse_SOURCES) \ + $(xmlcatalog_SOURCES) $(xmllint_SOURCES) DIST_SOURCES = $(am__libxml2_la_SOURCES_DIST) $(testdso_la_SOURCES) \ $(runsuite_SOURCES) $(runtest_SOURCES) $(runxmlconf_SOURCES) \ $(testAutomata_SOURCES) $(testC14N_SOURCES) \ $(testHTML_SOURCES) $(testModule_SOURCES) \ $(testReader_SOURCES) $(testRegexp_SOURCES) \ $(testRelax_SOURCES) $(testSAX_SOURCES) $(testSchemas_SOURCES) \ - $(testThreads_SOURCES) $(testURI_SOURCES) $(testXPath_SOURCES) \ - $(testapi_SOURCES) $(testchar_SOURCES) $(testdict_SOURCES) \ + $(am__testThreads_SOURCES_DIST) $(testURI_SOURCES) \ + $(testXPath_SOURCES) $(testapi_SOURCES) $(testchar_SOURCES) \ + $(testdict_SOURCES) $(testlimits_SOURCES) \ $(testrecurse_SOURCES) $(xmlcatalog_SOURCES) \ $(xmllint_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ @@ -309,9 +326,11 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ - { test ! -d "$(distdir)" \ - || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr "$(distdir)"; }; } + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ @@ -340,11 +359,13 @@ am__relativize = \ DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ -AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -381,6 +402,7 @@ HTML_DIR = @HTML_DIR@ HTML_OBJ = @HTML_OBJ@ HTTP_OBJ = @HTTP_OBJ@ ICONV_LIBS = @ICONV_LIBS@ +ICU_LIBS = @ICU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -401,7 +423,10 @@ LIBXML_VERSION_NUMBER = @LIBXML_VERSION_NUMBER@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LZMA_CFLAGS = @LZMA_CFLAGS@ +LZMA_LIBS = @LZMA_LIBS@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MODULE_EXTENSION = @MODULE_EXTENSION@ MODULE_PLATFORM_LIBS = @MODULE_PLATFORM_LIBS@ @@ -458,10 +483,8 @@ TEST_VTIME = @TEST_VTIME@ TEST_XINCLUDE = @TEST_XINCLUDE@ TEST_XPATH = @TEST_XPATH@ TEST_XPTR = @TEST_XPTR@ -THREADS_W32 = @THREADS_W32@ THREAD_CFLAGS = @THREAD_CFLAGS@ THREAD_LIBS = @THREAD_LIBS@ -U = @U@ VERSION = @VERSION@ VERSION_SCRIPT_FLAGS = @VERSION_SCRIPT_FLAGS@ WGET = @WGET@ @@ -479,6 +502,7 @@ WITH_ICONV = @WITH_ICONV@ WITH_ICU = @WITH_ICU@ WITH_ISO8859X = @WITH_ISO8859X@ WITH_LEGACY = @WITH_LEGACY@ +WITH_LZMA = @WITH_LZMA@ WITH_MEM_DEBUG = @WITH_MEM_DEBUG@ WITH_MODULES = @WITH_MODULES@ WITH_OUTPUT = @WITH_OUTPUT@ @@ -515,6 +539,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ @@ -564,68 +589,69 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = include . doc example xstc @PYTHON_SUBDIR@ +SUBDIRS = include . doc example xstc $(PYTHON_SUBDIR) DIST_SUBDIRS = include . doc example python xstc -INCLUDES = -I$(top_builddir)/include -I@srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@ +AM_CPPFLAGS = -I$(top_builddir)/include -I$(srcdir)/include +AM_CFLAGS = $(THREAD_CFLAGS) $(Z_CFLAGS) $(LZMA_CFLAGS) bin_SCRIPTS = xml2-config lib_LTLIBRARIES = libxml2.la -libxml2_la_LIBADD = @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) @M_LIBS@ @WIN32_EXTRA_LIBADD@ +libxml2_la_LIBADD = $(ICU_LIBS) $(THREAD_LIBS) $(Z_LIBS) $(LZMA_LIBS) $(ICONV_LIBS) $(M_LIBS) $(WIN32_EXTRA_LIBADD) @USE_VERSION_SCRIPT_FALSE@LIBXML2_VERSION_SCRIPT = @USE_VERSION_SCRIPT_TRUE@LIBXML2_VERSION_SCRIPT = $(VERSION_SCRIPT_FLAGS)$(srcdir)/libxml2.syms -libxml2_la_LDFLAGS = @CYGWIN_EXTRA_LDFLAGS@ @WIN32_EXTRA_LDFLAGS@ \ - $(LIBXML2_VERSION_SCRIPT) \ - -version-info @LIBXML_VERSION_INFO@ \ - @MODULE_PLATFORM_LIBS@ +libxml2_la_LDFLAGS = $(CYGWIN_EXTRA_LDFLAGS) $(WIN32_EXTRA_LDFLAGS) \ + $(LIBXML2_VERSION_SCRIPT) \ + -version-info $(LIBXML_VERSION_INFO) \ + $(MODULE_PLATFORM_LIBS) -@WITH_TRIO_SOURCES_FALSE@libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.c \ -@WITH_TRIO_SOURCES_FALSE@ parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c \ -@WITH_TRIO_SOURCES_FALSE@ valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c \ -@WITH_TRIO_SOURCES_FALSE@ xpointer.c xinclude.c nanohttp.c nanoftp.c DOCBparser.c \ -@WITH_TRIO_SOURCES_FALSE@ catalog.c globals.c threads.c c14n.c xmlstring.c \ -@WITH_TRIO_SOURCES_FALSE@ xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \ -@WITH_TRIO_SOURCES_FALSE@ xmlreader.c relaxng.c dict.c SAX2.c \ -@WITH_TRIO_SOURCES_FALSE@ xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c \ -@WITH_TRIO_SOURCES_FALSE@ xmlmodule.c schematron.c - -@WITH_TRIO_SOURCES_TRUE@libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.c \ -@WITH_TRIO_SOURCES_TRUE@ parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c \ -@WITH_TRIO_SOURCES_TRUE@ valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c \ -@WITH_TRIO_SOURCES_TRUE@ xpointer.c xinclude.c nanohttp.c nanoftp.c DOCBparser.c \ -@WITH_TRIO_SOURCES_TRUE@ catalog.c globals.c threads.c c14n.c xmlstring.c \ -@WITH_TRIO_SOURCES_TRUE@ xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \ -@WITH_TRIO_SOURCES_TRUE@ triostr.c trio.c xmlreader.c relaxng.c dict.c SAX2.c \ -@WITH_TRIO_SOURCES_TRUE@ xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c \ -@WITH_TRIO_SOURCES_TRUE@ xmlmodule.c schematron.c +@WITH_SAX1_SOURCES_FALSE@docb_sources = +@WITH_SAX1_SOURCES_TRUE@docb_sources = DOCBparser.c +@WITH_TRIO_SOURCES_FALSE@trio_sources = +@WITH_TRIO_SOURCES_TRUE@trio_sources = triostr.c trio.c +libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.c \ + parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c \ + valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c \ + xpointer.c xinclude.c nanohttp.c nanoftp.c \ + $(docb_sources) \ + catalog.c globals.c threads.c c14n.c xmlstring.c buf.c \ + xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \ + $(trio_sources) \ + xmlreader.c relaxng.c dict.c SAX2.c \ + xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c \ + xmlmodule.c schematron.c xzlib.c DEPS = $(top_builddir)/libxml2.la -LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) @M_LIBS@ @WIN32_EXTRA_LIBADD@ +LDADDS = $(STATIC_BINARIES) $(top_builddir)/libxml2.la $(THREAD_LIBS) $(Z_LIBS) $(LZMA_LIBS) $(ICONV_LIBS) $(M_LIBS) $(WIN32_EXTRA_LIBADD) man_MANS = xml2-config.1 libxml.3 m4datadir = $(datadir)/aclocal m4data_DATA = libxml.m4 runtest_SOURCES = runtest.c runtest_LDFLAGS = runtest_DEPENDENCIES = $(DEPS) -runtest_LDADD = @BASE_THREAD_LIBS@ @RDL_LIBS@ $(LDADDS) +runtest_LDADD = $(BASE_THREAD_LIBS) $(RDL_LIBS) $(LDADDS) testrecurse_SOURCES = testrecurse.c testrecurse_LDFLAGS = testrecurse_DEPENDENCIES = $(DEPS) -testrecurse_LDADD = @BASE_THREAD_LIBS@ @RDL_LIBS@ $(LDADDS) +testrecurse_LDADD = $(BASE_THREAD_LIBS) $(RDL_LIBS) $(LDADDS) +testlimits_SOURCES = testlimits.c +testlimits_LDFLAGS = +testlimits_DEPENDENCIES = $(DEPS) +testlimits_LDADD = $(BASE_THREAD_LIBS) $(RDL_LIBS) $(LDADDS) testchar_SOURCES = testchar.c testchar_LDFLAGS = testchar_DEPENDENCIES = $(DEPS) -testchar_LDADD = @RDL_LIBS@ $(LDADDS) +testchar_LDADD = $(RDL_LIBS) $(LDADDS) testdict_SOURCES = testdict.c testdict_LDFLAGS = testdict_DEPENDENCIES = $(DEPS) -testdict_LDADD = @RDL_LIBS@ $(LDADDS) +testdict_LDADD = $(RDL_LIBS) $(LDADDS) runsuite_SOURCES = runsuite.c runsuite_LDFLAGS = runsuite_DEPENDENCIES = $(DEPS) -runsuite_LDADD = @RDL_LIBS@ $(LDADDS) +runsuite_LDADD = $(RDL_LIBS) $(LDADDS) xmllint_SOURCES = xmllint.c xmllint_LDFLAGS = xmllint_DEPENDENCIES = $(DEPS) -xmllint_LDADD = @RDL_LIBS@ $(LDADDS) +xmllint_LDADD = $(RDL_LIBS) $(LDADDS) testSAX_SOURCES = testSAX.c testSAX_LDFLAGS = testSAX_DEPENDENCIES = $(DEPS) @@ -637,7 +663,7 @@ testHTML_LDADD = $(LDADDS) xmlcatalog_SOURCES = xmlcatalog.c xmlcatalog_LDFLAGS = xmlcatalog_DEPENDENCIES = $(DEPS) -xmlcatalog_LDADD = @RDL_LIBS@ $(LDADDS) +xmlcatalog_LDADD = $(RDL_LIBS) $(LDADDS) testXPath_SOURCES = testXPath.c testXPath_LDFLAGS = testXPath_DEPENDENCIES = $(DEPS) @@ -646,10 +672,11 @@ testC14N_SOURCES = testC14N.c testC14N_LDFLAGS = testC14N_DEPENDENCIES = $(DEPS) testC14N_LDADD = $(LDADDS) -testThreads_SOURCES = testThreads@THREADS_W32@.c +@THREADS_W32_FALSE@testThreads_SOURCES = testThreads.c +@THREADS_W32_TRUE@testThreads_SOURCES = testThreadsWin32.c testThreads_LDFLAGS = testThreads_DEPENDENCIES = $(DEPS) -testThreads_LDADD = @BASE_THREAD_LIBS@ $(LDADDS) +testThreads_LDADD = $(BASE_THREAD_LIBS) $(LDADDS) testURI_SOURCES = testURI.c testURI_LDFLAGS = testURI_DEPENDENCIES = $(DEPS) @@ -681,6 +708,7 @@ testModule_LDADD = $(LDADDS) noinst_LTLIBRARIES = testdso.la testdso_la_SOURCES = testdso.c testdso_la_LDFLAGS = -module -no-undefined -avoid-version -rpath $(libdir) +BUILT_SOURCES = testapi.c testapi_SOURCES = testapi.c testapi_LDFLAGS = testapi_DEPENDENCIES = $(DEPS) @@ -689,7 +717,8 @@ runxmlconf_SOURCES = runxmlconf.c runxmlconf_LDFLAGS = runxmlconf_DEPENDENCIES = $(DEPS) runxmlconf_LDADD = $(LDADDS) -CLEANFILES = xml2Conf.sh *.gcda *.gcno +CLEANFILES = runxmlconf.log test.out xml2Conf.sh *.gcda *.gcno *.res +DISTCLEANFILES = COPYING missing.lst confexecdir = $(libdir) confexec_DATA = xml2Conf.sh CVS_EXTRA_DIST = @@ -700,10 +729,10 @@ EXTRA_DIST = xml2-config.in xml2Conf.sh.in libxml.spec.in libxml2.spec \ example/Makefile.am example/gjobread.c example/gjobs.xml \ $(man_MANS) libxml-2.0.pc.in libxml-2.0-uninstalled.pc.in \ trionan.c trionan.h triostr.c triostr.h trio.c trio.h \ - triop.h triodef.h libxml.h elfgcchack.h \ - testThreadsWin32.c genUnicode.py TODO_SCHEMAS \ + triop.h triodef.h libxml.h elfgcchack.h xzlib.h buf.h \ + enc.h save.h testThreadsWin32.c genUnicode.py TODO_SCHEMAS \ dbgen.pl dbgenattr.pl regressions.py regressions.xml \ - README.tests Makefile.tests libxml2.syms \ + README.tests Makefile.tests libxml2.syms timsort.h \ $(CVS_EXTRA_DIST) pkgconfigdir = $(libdir)/pkgconfig @@ -722,12 +751,12 @@ EXAMPLES_DIR = $(BASE_DIR)/$(DOC_MODULE)/examples # LCOV = /usr/bin/lcov GENHTML = /usr/bin/genhtml -all: config.h +all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj -am--refresh: +am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ @@ -763,15 +792,13 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__aclocal_m4_deps): config.h: stamp-h1 - @if test ! -f $@; then \ - rm -f stamp-h1; \ - $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ - else :; fi + @if test ! -f $@; then rm -f stamp-h1; else :; fi + @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h -$(srcdir)/config.h.in: $(am__configure_deps) $(top_srcdir)/acconfig.h +$(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ @@ -826,10 +853,10 @@ clean-noinstLTLIBRARIES: echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done -libxml2.la: $(libxml2_la_OBJECTS) $(libxml2_la_DEPENDENCIES) - $(libxml2_la_LINK) -rpath $(libdir) $(libxml2_la_OBJECTS) $(libxml2_la_LIBADD) $(LIBS) -testdso.la: $(testdso_la_OBJECTS) $(testdso_la_DEPENDENCIES) - $(testdso_la_LINK) $(testdso_la_OBJECTS) $(testdso_la_LIBADD) $(LIBS) +libxml2.la: $(libxml2_la_OBJECTS) $(libxml2_la_DEPENDENCIES) $(EXTRA_libxml2_la_DEPENDENCIES) + $(AM_V_CCLD)$(libxml2_la_LINK) -rpath $(libdir) $(libxml2_la_OBJECTS) $(libxml2_la_LIBADD) $(LIBS) +testdso.la: $(testdso_la_OBJECTS) $(testdso_la_DEPENDENCIES) $(EXTRA_testdso_la_DEPENDENCIES) + $(AM_V_CCLD)$(testdso_la_LINK) $(testdso_la_OBJECTS) $(testdso_la_LIBADD) $(LIBS) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @@ -882,69 +909,72 @@ clean-noinstPROGRAMS: list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list -runsuite$(EXEEXT): $(runsuite_OBJECTS) $(runsuite_DEPENDENCIES) +runsuite$(EXEEXT): $(runsuite_OBJECTS) $(runsuite_DEPENDENCIES) $(EXTRA_runsuite_DEPENDENCIES) @rm -f runsuite$(EXEEXT) - $(runsuite_LINK) $(runsuite_OBJECTS) $(runsuite_LDADD) $(LIBS) -runtest$(EXEEXT): $(runtest_OBJECTS) $(runtest_DEPENDENCIES) + $(AM_V_CCLD)$(runsuite_LINK) $(runsuite_OBJECTS) $(runsuite_LDADD) $(LIBS) +runtest$(EXEEXT): $(runtest_OBJECTS) $(runtest_DEPENDENCIES) $(EXTRA_runtest_DEPENDENCIES) @rm -f runtest$(EXEEXT) - $(runtest_LINK) $(runtest_OBJECTS) $(runtest_LDADD) $(LIBS) -runxmlconf$(EXEEXT): $(runxmlconf_OBJECTS) $(runxmlconf_DEPENDENCIES) + $(AM_V_CCLD)$(runtest_LINK) $(runtest_OBJECTS) $(runtest_LDADD) $(LIBS) +runxmlconf$(EXEEXT): $(runxmlconf_OBJECTS) $(runxmlconf_DEPENDENCIES) $(EXTRA_runxmlconf_DEPENDENCIES) @rm -f runxmlconf$(EXEEXT) - $(runxmlconf_LINK) $(runxmlconf_OBJECTS) $(runxmlconf_LDADD) $(LIBS) -testAutomata$(EXEEXT): $(testAutomata_OBJECTS) $(testAutomata_DEPENDENCIES) + $(AM_V_CCLD)$(runxmlconf_LINK) $(runxmlconf_OBJECTS) $(runxmlconf_LDADD) $(LIBS) +testAutomata$(EXEEXT): $(testAutomata_OBJECTS) $(testAutomata_DEPENDENCIES) $(EXTRA_testAutomata_DEPENDENCIES) @rm -f testAutomata$(EXEEXT) - $(testAutomata_LINK) $(testAutomata_OBJECTS) $(testAutomata_LDADD) $(LIBS) -testC14N$(EXEEXT): $(testC14N_OBJECTS) $(testC14N_DEPENDENCIES) + $(AM_V_CCLD)$(testAutomata_LINK) $(testAutomata_OBJECTS) $(testAutomata_LDADD) $(LIBS) +testC14N$(EXEEXT): $(testC14N_OBJECTS) $(testC14N_DEPENDENCIES) $(EXTRA_testC14N_DEPENDENCIES) @rm -f testC14N$(EXEEXT) - $(testC14N_LINK) $(testC14N_OBJECTS) $(testC14N_LDADD) $(LIBS) -testHTML$(EXEEXT): $(testHTML_OBJECTS) $(testHTML_DEPENDENCIES) + $(AM_V_CCLD)$(testC14N_LINK) $(testC14N_OBJECTS) $(testC14N_LDADD) $(LIBS) +testHTML$(EXEEXT): $(testHTML_OBJECTS) $(testHTML_DEPENDENCIES) $(EXTRA_testHTML_DEPENDENCIES) @rm -f testHTML$(EXEEXT) - $(testHTML_LINK) $(testHTML_OBJECTS) $(testHTML_LDADD) $(LIBS) -testModule$(EXEEXT): $(testModule_OBJECTS) $(testModule_DEPENDENCIES) + $(AM_V_CCLD)$(testHTML_LINK) $(testHTML_OBJECTS) $(testHTML_LDADD) $(LIBS) +testModule$(EXEEXT): $(testModule_OBJECTS) $(testModule_DEPENDENCIES) $(EXTRA_testModule_DEPENDENCIES) @rm -f testModule$(EXEEXT) - $(testModule_LINK) $(testModule_OBJECTS) $(testModule_LDADD) $(LIBS) -testReader$(EXEEXT): $(testReader_OBJECTS) $(testReader_DEPENDENCIES) + $(AM_V_CCLD)$(testModule_LINK) $(testModule_OBJECTS) $(testModule_LDADD) $(LIBS) +testReader$(EXEEXT): $(testReader_OBJECTS) $(testReader_DEPENDENCIES) $(EXTRA_testReader_DEPENDENCIES) @rm -f testReader$(EXEEXT) - $(testReader_LINK) $(testReader_OBJECTS) $(testReader_LDADD) $(LIBS) -testRegexp$(EXEEXT): $(testRegexp_OBJECTS) $(testRegexp_DEPENDENCIES) + $(AM_V_CCLD)$(testReader_LINK) $(testReader_OBJECTS) $(testReader_LDADD) $(LIBS) +testRegexp$(EXEEXT): $(testRegexp_OBJECTS) $(testRegexp_DEPENDENCIES) $(EXTRA_testRegexp_DEPENDENCIES) @rm -f testRegexp$(EXEEXT) - $(testRegexp_LINK) $(testRegexp_OBJECTS) $(testRegexp_LDADD) $(LIBS) -testRelax$(EXEEXT): $(testRelax_OBJECTS) $(testRelax_DEPENDENCIES) + $(AM_V_CCLD)$(testRegexp_LINK) $(testRegexp_OBJECTS) $(testRegexp_LDADD) $(LIBS) +testRelax$(EXEEXT): $(testRelax_OBJECTS) $(testRelax_DEPENDENCIES) $(EXTRA_testRelax_DEPENDENCIES) @rm -f testRelax$(EXEEXT) - $(testRelax_LINK) $(testRelax_OBJECTS) $(testRelax_LDADD) $(LIBS) -testSAX$(EXEEXT): $(testSAX_OBJECTS) $(testSAX_DEPENDENCIES) + $(AM_V_CCLD)$(testRelax_LINK) $(testRelax_OBJECTS) $(testRelax_LDADD) $(LIBS) +testSAX$(EXEEXT): $(testSAX_OBJECTS) $(testSAX_DEPENDENCIES) $(EXTRA_testSAX_DEPENDENCIES) @rm -f testSAX$(EXEEXT) - $(testSAX_LINK) $(testSAX_OBJECTS) $(testSAX_LDADD) $(LIBS) -testSchemas$(EXEEXT): $(testSchemas_OBJECTS) $(testSchemas_DEPENDENCIES) + $(AM_V_CCLD)$(testSAX_LINK) $(testSAX_OBJECTS) $(testSAX_LDADD) $(LIBS) +testSchemas$(EXEEXT): $(testSchemas_OBJECTS) $(testSchemas_DEPENDENCIES) $(EXTRA_testSchemas_DEPENDENCIES) @rm -f testSchemas$(EXEEXT) - $(testSchemas_LINK) $(testSchemas_OBJECTS) $(testSchemas_LDADD) $(LIBS) -testThreads$(EXEEXT): $(testThreads_OBJECTS) $(testThreads_DEPENDENCIES) + $(AM_V_CCLD)$(testSchemas_LINK) $(testSchemas_OBJECTS) $(testSchemas_LDADD) $(LIBS) +testThreads$(EXEEXT): $(testThreads_OBJECTS) $(testThreads_DEPENDENCIES) $(EXTRA_testThreads_DEPENDENCIES) @rm -f testThreads$(EXEEXT) - $(testThreads_LINK) $(testThreads_OBJECTS) $(testThreads_LDADD) $(LIBS) -testURI$(EXEEXT): $(testURI_OBJECTS) $(testURI_DEPENDENCIES) + $(AM_V_CCLD)$(testThreads_LINK) $(testThreads_OBJECTS) $(testThreads_LDADD) $(LIBS) +testURI$(EXEEXT): $(testURI_OBJECTS) $(testURI_DEPENDENCIES) $(EXTRA_testURI_DEPENDENCIES) @rm -f testURI$(EXEEXT) - $(testURI_LINK) $(testURI_OBJECTS) $(testURI_LDADD) $(LIBS) -testXPath$(EXEEXT): $(testXPath_OBJECTS) $(testXPath_DEPENDENCIES) + $(AM_V_CCLD)$(testURI_LINK) $(testURI_OBJECTS) $(testURI_LDADD) $(LIBS) +testXPath$(EXEEXT): $(testXPath_OBJECTS) $(testXPath_DEPENDENCIES) $(EXTRA_testXPath_DEPENDENCIES) @rm -f testXPath$(EXEEXT) - $(testXPath_LINK) $(testXPath_OBJECTS) $(testXPath_LDADD) $(LIBS) -testapi$(EXEEXT): $(testapi_OBJECTS) $(testapi_DEPENDENCIES) + $(AM_V_CCLD)$(testXPath_LINK) $(testXPath_OBJECTS) $(testXPath_LDADD) $(LIBS) +testapi$(EXEEXT): $(testapi_OBJECTS) $(testapi_DEPENDENCIES) $(EXTRA_testapi_DEPENDENCIES) @rm -f testapi$(EXEEXT) - $(testapi_LINK) $(testapi_OBJECTS) $(testapi_LDADD) $(LIBS) -testchar$(EXEEXT): $(testchar_OBJECTS) $(testchar_DEPENDENCIES) + $(AM_V_CCLD)$(testapi_LINK) $(testapi_OBJECTS) $(testapi_LDADD) $(LIBS) +testchar$(EXEEXT): $(testchar_OBJECTS) $(testchar_DEPENDENCIES) $(EXTRA_testchar_DEPENDENCIES) @rm -f testchar$(EXEEXT) - $(testchar_LINK) $(testchar_OBJECTS) $(testchar_LDADD) $(LIBS) -testdict$(EXEEXT): $(testdict_OBJECTS) $(testdict_DEPENDENCIES) + $(AM_V_CCLD)$(testchar_LINK) $(testchar_OBJECTS) $(testchar_LDADD) $(LIBS) +testdict$(EXEEXT): $(testdict_OBJECTS) $(testdict_DEPENDENCIES) $(EXTRA_testdict_DEPENDENCIES) @rm -f testdict$(EXEEXT) - $(testdict_LINK) $(testdict_OBJECTS) $(testdict_LDADD) $(LIBS) -testrecurse$(EXEEXT): $(testrecurse_OBJECTS) $(testrecurse_DEPENDENCIES) + $(AM_V_CCLD)$(testdict_LINK) $(testdict_OBJECTS) $(testdict_LDADD) $(LIBS) +testlimits$(EXEEXT): $(testlimits_OBJECTS) $(testlimits_DEPENDENCIES) $(EXTRA_testlimits_DEPENDENCIES) + @rm -f testlimits$(EXEEXT) + $(AM_V_CCLD)$(testlimits_LINK) $(testlimits_OBJECTS) $(testlimits_LDADD) $(LIBS) +testrecurse$(EXEEXT): $(testrecurse_OBJECTS) $(testrecurse_DEPENDENCIES) $(EXTRA_testrecurse_DEPENDENCIES) @rm -f testrecurse$(EXEEXT) - $(testrecurse_LINK) $(testrecurse_OBJECTS) $(testrecurse_LDADD) $(LIBS) -xmlcatalog$(EXEEXT): $(xmlcatalog_OBJECTS) $(xmlcatalog_DEPENDENCIES) + $(AM_V_CCLD)$(testrecurse_LINK) $(testrecurse_OBJECTS) $(testrecurse_LDADD) $(LIBS) +xmlcatalog$(EXEEXT): $(xmlcatalog_OBJECTS) $(xmlcatalog_DEPENDENCIES) $(EXTRA_xmlcatalog_DEPENDENCIES) @rm -f xmlcatalog$(EXEEXT) - $(xmlcatalog_LINK) $(xmlcatalog_OBJECTS) $(xmlcatalog_LDADD) $(LIBS) -xmllint$(EXEEXT): $(xmllint_OBJECTS) $(xmllint_DEPENDENCIES) + $(AM_V_CCLD)$(xmlcatalog_LINK) $(xmlcatalog_OBJECTS) $(xmlcatalog_LDADD) $(LIBS) +xmllint$(EXEEXT): $(xmllint_OBJECTS) $(xmllint_DEPENDENCIES) $(EXTRA_xmllint_DEPENDENCIES) @rm -f xmllint$(EXEEXT) - $(xmllint_LINK) $(xmllint_OBJECTS) $(xmllint_LDADD) $(LIBS) + $(AM_V_CCLD)$(xmllint_LINK) $(xmllint_OBJECTS) $(xmllint_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @@ -976,9 +1006,7 @@ uninstall-binSCRIPTS: @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(bindir)" && rm -f $$files + dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -991,6 +1019,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HTMLtree.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SAX.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SAX2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c14n.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/catalog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chvalid.Plo@am__quote@ @@ -1022,13 +1051,15 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testRelax.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testSAX.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testSchemas.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testThreads@THREADS_W32@.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testThreads.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testThreadsWin32.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testURI.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testXPath.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testapi.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testchar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testdict.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testdso.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testlimits.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testrecurse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/threads.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tree.Plo@am__quote@ @@ -1053,27 +1084,28 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlwriter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpath.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpointer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xzlib.Plo@am__quote@ .c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo @@ -1118,9 +1150,7 @@ uninstall-man1: sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - test -z "$$files" || { \ - echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-man3: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)" @@ -1156,9 +1186,7 @@ uninstall-man3: sed -n '/\.3[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ - test -z "$$files" || { \ - echo " ( cd '$(DESTDIR)$(man3dir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(man3dir)" && rm -f $$files; } + dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir) install-confexecDATA: $(confexec_DATA) @$(NORMAL_INSTALL) test -z "$(confexecdir)" || $(MKDIR_P) "$(DESTDIR)$(confexecdir)" @@ -1176,9 +1204,7 @@ uninstall-confexecDATA: @$(NORMAL_UNINSTALL) @list='$(confexec_DATA)'; test -n "$(confexecdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(confexecdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(confexecdir)" && rm -f $$files + dir='$(DESTDIR)$(confexecdir)'; $(am__uninstall_files_from_dir) install-m4dataDATA: $(m4data_DATA) @$(NORMAL_INSTALL) test -z "$(m4datadir)" || $(MKDIR_P) "$(DESTDIR)$(m4datadir)" @@ -1196,9 +1222,7 @@ uninstall-m4dataDATA: @$(NORMAL_UNINSTALL) @list='$(m4data_DATA)'; test -n "$(m4datadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(m4datadir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(m4datadir)" && rm -f $$files + dir='$(DESTDIR)$(m4datadir)'; $(am__uninstall_files_from_dir) install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" @@ -1216,9 +1240,7 @@ uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files + dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -1443,7 +1465,11 @@ dist-gzip: distdir $(am__remove_distdir) dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir @@ -1451,7 +1477,7 @@ dist-lzma: distdir $(am__remove_distdir) dist-xz: distdir - tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir @@ -1482,6 +1508,8 @@ distcheck: dist bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ @@ -1491,7 +1519,7 @@ distcheck: dist *.zip*) \ unzip $(distdir).zip ;;\ esac - chmod -R a-w $(distdir); chmod a+w $(distdir) + chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) @@ -1501,6 +1529,7 @@ distcheck: dist && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ @@ -1529,8 +1558,16 @@ distcheck: dist list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: - @$(am__cd) '$(distuninstallcheck_dir)' \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ @@ -1547,7 +1584,8 @@ distcleancheck: distclean $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am -check: check-recursive +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(MANS) $(DATA) \ config.h install-binPROGRAMS: install-libLTLIBRARIES @@ -1557,7 +1595,8 @@ installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(confexecdir)" "$(DESTDIR)$(m4datadir)" "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -install: install-recursive +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive @@ -1567,10 +1606,15 @@ install-am: all-am installcheck: installcheck-recursive install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi mostlyclean-generic: clean-generic: @@ -1579,10 +1623,12 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ @@ -1665,34 +1711,35 @@ uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \ uninstall-man: uninstall-man1 uninstall-man3 -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ - ctags-recursive install-am install-strip tags-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + ctags-recursive install install-am install-strip \ + tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-binPROGRAMS \ clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstLTLIBRARIES clean-noinstPROGRAMS ctags \ ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-hook \ - dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ - distclean distclean-compile distclean-generic distclean-hdr \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-binPROGRAMS install-binSCRIPTS \ - install-confexecDATA install-data install-data-am \ - install-data-local install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-libLTLIBRARIES install-m4dataDATA \ - install-man install-man1 install-man3 install-pdf \ - install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-binPROGRAMS \ - uninstall-binSCRIPTS uninstall-confexecDATA \ - uninstall-libLTLIBRARIES uninstall-local uninstall-m4dataDATA \ - uninstall-man uninstall-man1 uninstall-man3 \ - uninstall-pkgconfigDATA + dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-binPROGRAMS \ + install-binSCRIPTS install-confexecDATA install-data \ + install-data-am install-data-local install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-libLTLIBRARIES \ + install-m4dataDATA install-man install-man1 install-man3 \ + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am \ + uninstall-binPROGRAMS uninstall-binSCRIPTS \ + uninstall-confexecDATA uninstall-libLTLIBRARIES \ + uninstall-local uninstall-m4dataDATA uninstall-man \ + uninstall-man1 uninstall-man3 uninstall-pkgconfigDATA # that one forces the rebuild when "make rebuild" is run on doc/ @@ -1712,28 +1759,25 @@ testapi.c: $(srcdir)/gentest.py #testOOM_LDADD= $(LDADDS) runtests: + [ -d test ] || $(LN_S) $(srcdir)/test . + [ -d result ] || $(LN_S) $(srcdir)/result . $(CHECKER) ./runtest$(EXEEXT) && $(CHECKER) ./testrecurse$(EXEEXT) &&$(CHECKER) ./testapi$(EXEEXT) && $(CHECKER) ./testchar$(EXEEXT)&& $(CHECKER) ./testdict$(EXEEXT) && $(CHECKER) ./runxmlconf$(EXEEXT) - @(if [ "@PYTHON_SUBDIR@" != "" ] ; then cd python ; \ - $(MAKE) MAKEFLAGS+=--silent tests ; fi) + @(if [ "$(PYTHON_SUBDIR)" != "" ] ; then cd python ; \ + $(MAKE) tests ; fi) check: all runtests -check-valgrind: all +check-valgrind valgrind: all @echo '## Running the regression tests under Valgrind' @echo '## Go get a cup of coffee it is gonna take a while ...' - $(MAKE) CHECKER='valgrind -q' check + $(MAKE) CHECKER='valgrind -q' runtests testall : tests SVGtests SAXtests -tests: XMLtests XMLenttests NStests IDtests Errtests APItests @READER_TEST@ @TEST_SAX@ @TEST_PUSH@ @TEST_HTML@ @TEST_PHTML@ @TEST_VALID@ URItests @TEST_PATTERN@ @TEST_XPATH@ @TEST_XPTR@ @TEST_XINCLUDE@ @TEST_C14N@ @TEST_DEBUG@ @TEST_CATALOG@ @TEST_REGEXPS@ @TEST_SCHEMAS@ @TEST_SCHEMATRON@ @TEST_THREADS@ Timingtests @TEST_VTIME@ @PYTHON_TESTS@ @TEST_MODULES@ - @(if [ "@PYTHON_SUBDIR@" != "" ] ; then cd python ; \ - $(MAKE) MAKEFLAGS+=--silent tests ; fi) - @(cd doc/examples ; $(MAKE) MAKEFLAGS+=--silent tests) - -valgrind: - @echo '## Running the regression tests under Valgrind' - @echo '## Go get a cup of coffee it is gonna take a while ...' - $(MAKE) CHECKER='valgrind -q' tests +tests: XMLtests XMLenttests NStests IDtests Errtests APItests $(READER_TEST) $(TEST_SAX) $(TEST_PUSH) $(TEST_HTML) $(TEST_PHTML) $(TEST_VALID) URItests $(TEST_PATTERN) $(TEST_XPATH) $(TEST_XPTR) $(TEST_XINCLUDE) $(TEST_C14N) $(TEST_DEBUG) $(TEST_CATALOG) $(TEST_REGEXPS) $(TEST_SCHEMAS) $(TEST_SCHEMATRON) $(TEST_THREADS) Timingtests $(TEST_VTIME) $(PYTHON_TESTS) $(TEST_MODULES) + @(if [ "$(PYTHON_SUBDIR)" != "" ] ; then cd python ; \ + $(MAKE) tests ; fi) + @(cd doc/examples ; $(MAKE) tests) APItests: testapi$(EXEEXT) @echo "## Running the API regression tests this may take a little while" @@ -2639,7 +2683,7 @@ SchemasPythonTests: echo "## It is normal to see 11 errors reported" ; \ $(CHECKER) $(PYTHON) $(srcdir)/check-xsddata-test-suite.py ; \ fi) - @(if [ -x $(PYTHON) -a -d xstc ] ; then cd xstc ; $(MAKE) CHECKER="$(CHECKER)" MAKEFLAGS+=--silent pytests ; fi) + @(if [ -x $(PYTHON) -a -d xstc ] ; then cd xstc ; $(MAKE) CHECKER="$(CHECKER)" pytests ; fi) Patterntests: xmllint$(EXEEXT) @(echo > .memdump) @@ -2671,19 +2715,19 @@ ModuleTests: testModule$(EXEEXT) testdso.la cleanup: -@(find . -name .\#\* -exec rm {} \;) - -@(find . -name \*.gcda -o *.gcno -exec rm {} \;) - -@(find . -name \*.orig -o -name \*.rej -o -name \*.old -exec rm {} \;) + -@(find . -name \*.gcda -o -name \*.gcno -exec rm -f {} \;) + -@(find . -name \*.orig -o -name \*.rej -o -name \*.old -exec rm -f {} \;) dist-hook: cleanup libxml2.spec -cp libxml2.spec $(distdir) - (cd $(srcdir) ; tar -cf - --exclude CVS --exclude .svn win32 macos vms VxWorks bakefile test result) | (cd $(distdir); tar xf -) + (cd $(srcdir) ; tar -cf - --exclude CVS --exclude .svn --exclude .git win32 macos vms VxWorks bakefile test result) | (cd $(distdir); tar xf -) dist-source: distdir $(AMTAR) -chof - --exclude Tests --exclude test --exclude result $(distdir) | GZIP=$(GZIP_ENV) gzip -c >`echo "$(distdir)" | sed "s+libxml2+libxml2-sources+"`.tar.gz dist-test: distdir (mkdir -p $(distdir)) - (cd $(srcdir) ; tar -cf - --exclude CVS --exclude .svn xstc/Tests) | (cd $(distdir); tar xf -) + (cd $(srcdir) ; tar -cf - --exclude CVS --exclude .svn --exclude .git xstc/Tests) | (cd $(distdir); tar xf -) tar -cf - $(distdir)/test $(distdir)/result $(distdir)/xstc/Tests $(distdir)/Makefile.tests $(distdir)/README $(distdir)/README.tests $(distdir)/AUTHORS $(distdir)/testapi.c $(distdir)/runtest.c $(distdir)/runsuite.c | GZIP=$(GZIP_ENV) gzip -c >`echo "$(distdir)" | sed "s+libxml2+libxml2-tests+"`.tar.gz @(rm -rf $(distdir)/xstc/Test) @@ -2702,13 +2746,13 @@ xml2Conf.sh: xml2Conf.sh.in Makefile && mv xml2Conf.tmp xml2Conf.sh install-data-local: - @MKDIR_P@ $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE) - -@INSTALL@ -m 0644 $(srcdir)/Copyright $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE) - @MKDIR_P@ $(DESTDIR)$(EXAMPLES_DIR) - -@INSTALL@ -m 0644 $(srcdir)/xmllint.c $(DESTDIR)$(EXAMPLES_DIR) - -@INSTALL@ -m 0644 $(srcdir)/testSAX.c $(DESTDIR)$(EXAMPLES_DIR) - -@INSTALL@ -m 0644 $(srcdir)/testHTML.c $(DESTDIR)$(EXAMPLES_DIR) - -@INSTALL@ -m 0644 $(srcdir)/testXPath.c $(DESTDIR)$(EXAMPLES_DIR) + $(MKDIR_P) $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE) + -$(INSTALL) -m 0644 $(srcdir)/Copyright $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE) + $(MKDIR_P) $(DESTDIR)$(EXAMPLES_DIR) + -$(INSTALL) -m 0644 $(srcdir)/xmllint.c $(DESTDIR)$(EXAMPLES_DIR) + -$(INSTALL) -m 0644 $(srcdir)/testSAX.c $(DESTDIR)$(EXAMPLES_DIR) + -$(INSTALL) -m 0644 $(srcdir)/testHTML.c $(DESTDIR)$(EXAMPLES_DIR) + -$(INSTALL) -m 0644 $(srcdir)/testXPath.c $(DESTDIR)$(EXAMPLES_DIR) uninstall-local: rm -f $(DESTDIR)$(EXAMPLES_DIR)/testXPath.c @@ -2720,7 +2764,7 @@ uninstall-local: rm -rf $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE) tst: tst.c - $(CC) $(CFLAGS) -Iinclude -o tst tst.c .libs/libxml2.a -lpthread -lm -lz + $(CC) $(CFLAGS) -Iinclude -o tst tst.c .libs/libxml2.a -lpthread -lm -lz -llzma sparse: clean $(MAKE) CC=cgcc diff --git a/lib/3rdparty/libxml2/README b/lib/3rdparty/libxml2/README index f1817aa68ae..749e671fe5e 100644 --- a/lib/3rdparty/libxml2/README +++ b/lib/3rdparty/libxml2/README @@ -31,7 +31,7 @@ The list archive is at: http://mail.gnome.org/archives/xml/ All technical answers asked privately will be automatically answered on -the list and archived for public access unless pricacy is explicitely +the list and archived for public access unless privacy is explicitly required and justified. Daniel Veillard diff --git a/lib/3rdparty/libxml2/README.tests b/lib/3rdparty/libxml2/README.tests index 66522ab5ec1..8d86f2a19ce 100644 --- a/lib/3rdparty/libxml2/README.tests +++ b/lib/3rdparty/libxml2/README.tests @@ -14,17 +14,26 @@ program has a different testing purpose: The command: + make check +or make -f Makefile.tests check should be sufficient on an Unix system to build and exercise the tests for the version of the library installed on the system. Note however that there isn't backward compatibility provided so if the installed -version is older to the testsuite one, failing to compile or run the tests +version is older than the testsuite one, failing to compile or run the tests is likely. In any event this won't work with an installed libxml2 older than 2.6.20. -Building on other platfroms should be a matter of compiling the C files + +Building on other platforms should be a matter of compiling the C files like any other program using libxml2, running the test should be done simply by launching the resulting executables. +Also note the availability of a "make valgrind" target which will run the +above tests under valgrind to check for memory errors (but this relies +on the availability of the valgrind command and take far more time to +complete). + Daniel Veillard -Thu Jul 24 2008 +Mon May 7 2012 + diff --git a/lib/3rdparty/libxml2/SAX.c b/lib/3rdparty/libxml2/SAX.c index 8e5d460cb96..292af57e97b 100644 --- a/lib/3rdparty/libxml2/SAX.c +++ b/lib/3rdparty/libxml2/SAX.c @@ -41,7 +41,7 @@ void initxmlDefaultSAXHandler(xmlSAXHandlerV1 *hdlr, int warning) { - + if(hdlr->initialized == 1) return; diff --git a/lib/3rdparty/libxml2/SAX2.c b/lib/3rdparty/libxml2/SAX2.c index c0482c0b681..a24abc88c3c 100644 --- a/lib/3rdparty/libxml2/SAX2.c +++ b/lib/3rdparty/libxml2/SAX2.c @@ -45,7 +45,7 @@ *> values "system" and "public". I have made the default be "system" to *> match yours. */ -#define TODO \ +#define TODO \ xmlGenericError(xmlGenericErrorContext, \ "Unimplemented block at %s:%d\n", \ __FILE__, __LINE__); @@ -57,12 +57,29 @@ */ static void xmlSAX2ErrMemory(xmlParserCtxtPtr ctxt, const char *msg) { + xmlStructuredErrorFunc schannel = NULL; + const char *str1 = "out of memory\n"; + if (ctxt != NULL) { - if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) - ctxt->sax->error(ctxt->userData, "%s: out of memory\n", msg); + ctxt->errNo = XML_ERR_NO_MEMORY; + if ((ctxt->sax != NULL) && (ctxt->sax->initialized == XML_SAX2_MAGIC)) + schannel = ctxt->sax->serror; + __xmlRaiseError(schannel, + ctxt->vctxt.error, ctxt->vctxt.userData, + ctxt, NULL, XML_FROM_PARSER, XML_ERR_NO_MEMORY, + XML_ERR_ERROR, NULL, 0, (const char *) str1, + NULL, NULL, 0, 0, + msg, (const char *) str1, NULL); ctxt->errNo = XML_ERR_NO_MEMORY; ctxt->instate = XML_PARSER_EOF; ctxt->disableSAX = 1; + } else { + __xmlRaiseError(schannel, + NULL, NULL, + ctxt, NULL, XML_FROM_PARSER, XML_ERR_NO_MEMORY, + XML_ERR_ERROR, NULL, 0, (const char *) str1, + NULL, NULL, 0, 0, + msg, (const char *) str1, NULL); } } @@ -126,7 +143,7 @@ xmlFatalErrMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error, if (ctxt != NULL) ctxt->errNo = error; __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error, - XML_ERR_FATAL, NULL, 0, + XML_ERR_FATAL, NULL, 0, (const char *) str1, (const char *) str2, NULL, 0, 0, msg, str1, str2); if (ctxt != NULL) { @@ -157,7 +174,7 @@ xmlWarnMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error, if (ctxt != NULL) ctxt->errNo = error; __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error, - XML_ERR_WARNING, NULL, 0, + XML_ERR_WARNING, NULL, 0, (const char *) str1, NULL, NULL, 0, 0, msg, str1); } @@ -182,7 +199,7 @@ xmlNsErrMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error, if (ctxt != NULL) ctxt->errNo = error; __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_NAMESPACE, error, - XML_ERR_ERROR, NULL, 0, + XML_ERR_ERROR, NULL, 0, (const char *) str1, (const char *) str2, NULL, 0, 0, msg, str1, str2); } @@ -206,7 +223,7 @@ xmlNsWarnMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error, if (ctxt != NULL) ctxt->errNo = error; __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_NAMESPACE, error, - XML_ERR_WARNING, NULL, 0, + XML_ERR_WARNING, NULL, 0, (const char *) str1, (const char *) str2, NULL, 0, 0, msg, str1, str2); } @@ -240,7 +257,7 @@ xmlSAX2GetSystemId(void *ctx) { xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; if ((ctx == NULL) || (ctxt->input == NULL)) return(NULL); - return((const xmlChar *) ctxt->input->filename); + return((const xmlChar *) ctxt->input->filename); } /** @@ -355,7 +372,7 @@ xmlSAX2InternalSubset(void *ctx, const xmlChar *name, xmlFreeDtd(dtd); ctxt->myDoc->intSubset = NULL; } - ctxt->myDoc->intSubset = + ctxt->myDoc->intSubset = xmlCreateIntSubset(ctxt->myDoc, name, ExternalID, SystemID); if (ctxt->myDoc->intSubset == NULL) xmlSAX2ErrMemory(ctxt, "xmlSAX2InternalSubset"); @@ -621,8 +638,8 @@ xmlSAX2GetParameterEntity(void *ctx, const xmlChar *name) /** * xmlSAX2EntityDecl: * @ctx: the user data (XML parser context) - * @name: the entity name - * @type: the entity type + * @name: the entity name + * @type: the entity type * @publicId: The public ID of the entity * @systemId: The system ID of the entity * @content: the entity value (without processing). @@ -657,7 +674,7 @@ xmlSAX2EntityDecl(void *ctx, const xmlChar *name, int type, base = ctxt->input->filename; if (base == NULL) base = ctxt->directory; - + URI = xmlBuildURI(systemId, (const xmlChar *) base); ent->URI = URI; } @@ -666,7 +683,7 @@ xmlSAX2EntityDecl(void *ctx, const xmlChar *name, int type, systemId, content); if ((ent == NULL) && (ctxt->pedantic) && (ctxt->sax != NULL) && (ctxt->sax->warning != NULL)) - ctxt->sax->warning(ctxt->userData, + ctxt->sax->warning(ctxt->userData, "Entity(%s) already defined in the external subset\n", name); if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) { xmlChar *URI; @@ -676,7 +693,7 @@ xmlSAX2EntityDecl(void *ctx, const xmlChar *name, int type, base = ctxt->input->filename; if (base == NULL) base = ctxt->directory; - + URI = xmlBuildURI(systemId, (const xmlChar *) base); ent->URI = URI; } @@ -691,8 +708,8 @@ xmlSAX2EntityDecl(void *ctx, const xmlChar *name, int type, * xmlSAX2AttributeDecl: * @ctx: the user data (XML parser context) * @elem: the name of the element - * @fullname: the attribute name - * @type: the attribute type + * @fullname: the attribute name + * @type: the attribute type * @def: the type of default value * @defaultValue: the attribute default value * @tree: the tree of enumerated value set @@ -735,7 +752,7 @@ xmlSAX2AttributeDecl(void *ctx, const xmlChar *elem, const xmlChar *fullname, (xmlAttributeDefault) def, defaultValue, tree); else if (ctxt->inSubset == 2) attr = xmlAddAttributeDecl(&ctxt->vctxt, ctxt->myDoc->extSubset, elem, - name, prefix, (xmlAttributeType) type, + name, prefix, (xmlAttributeType) type, (xmlAttributeDefault) def, defaultValue, tree); else { xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR, @@ -761,8 +778,8 @@ xmlSAX2AttributeDecl(void *ctx, const xmlChar *elem, const xmlChar *fullname, /** * xmlSAX2ElementDecl: * @ctx: the user data (XML parser context) - * @name: the element name - * @type: the element type + * @name: the element name + * @type: the element type * @content: the element value tree * * An element definition has been parsed @@ -883,7 +900,7 @@ xmlSAX2UnparsedEntityDecl(void *ctx, const xmlChar *name, publicId, systemId, notationName); if ((ent == NULL) && (ctxt->pedantic) && (ctxt->sax != NULL) && (ctxt->sax->warning != NULL)) - ctxt->sax->warning(ctxt->userData, + ctxt->sax->warning(ctxt->userData, "Entity(%s) already defined in the internal subset\n", name); if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) { xmlChar *URI; @@ -893,7 +910,7 @@ xmlSAX2UnparsedEntityDecl(void *ctx, const xmlChar *name, base = ctxt->input->filename; if (base == NULL) base = ctxt->directory; - + URI = xmlBuildURI(systemId, (const xmlChar *) base); ent->URI = URI; } @@ -903,7 +920,7 @@ xmlSAX2UnparsedEntityDecl(void *ctx, const xmlChar *name, publicId, systemId, notationName); if ((ent == NULL) && (ctxt->pedantic) && (ctxt->sax != NULL) && (ctxt->sax->warning != NULL)) - ctxt->sax->warning(ctxt->userData, + ctxt->sax->warning(ctxt->userData, "Entity(%s) already defined in the external subset\n", name); if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) { xmlChar *URI; @@ -913,7 +930,7 @@ xmlSAX2UnparsedEntityDecl(void *ctx, const xmlChar *name, base = ctxt->input->filename; if (base == NULL) base = ctxt->directory; - + URI = xmlBuildURI(systemId, (const xmlChar *) base); ent->URI = URI; } @@ -1157,12 +1174,12 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, uri = xmlParseURI((const char *)val); if (uri == NULL) { if ((ctxt->sax != NULL) && (ctxt->sax->warning != NULL)) - ctxt->sax->warning(ctxt->userData, + ctxt->sax->warning(ctxt->userData, "xmlns: %s not a valid URI\n", val); } else { if (uri->scheme == NULL) { if ((ctxt->sax != NULL) && (ctxt->sax->warning != NULL)) - ctxt->sax->warning(ctxt->userData, + ctxt->sax->warning(ctxt->userData, "xmlns: URI %s is not absolute\n", val); } xmlFreeURI(uri); @@ -1182,7 +1199,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, ctxt->valid &= xmlValidateOneNamespace(&ctxt->vctxt, ctxt->myDoc, ctxt->node, prefix, nsret, val); #endif /* LIBXML_VALID_ENABLED */ - if (name != NULL) + if (name != NULL) xmlFree(name); if (nval != NULL) xmlFree(nval); @@ -1204,7 +1221,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, if (val == NULL) { xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement"); xmlFree(ns); - if (name != NULL) + if (name != NULL) xmlFree(name); return; } @@ -1245,7 +1262,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, ctxt->valid &= xmlValidateOneNamespace(&ctxt->vctxt, ctxt->myDoc, ctxt->node, prefix, nsret, value); #endif /* LIBXML_VALID_ENABLED */ - if (name != NULL) + if (name != NULL) xmlFree(name); if (nval != NULL) xmlFree(nval); @@ -1311,7 +1328,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, #ifdef LIBXML_VALID_ENABLED if ((!ctxt->html) && ctxt->validate && ctxt->wellFormed && ctxt->myDoc && ctxt->myDoc->intSubset) { - + /* * If we don't substitute entities, the validation should be * done on a value with replaced entities anyway. @@ -1323,7 +1340,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, val = xmlStringDecodeEntities(ctxt, value, XML_SUBSTITUTE_REF, 0,0,0); ctxt->depth--; - + if (val == NULL) ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt, ctxt->myDoc, ctxt->node, ret, value); @@ -1380,7 +1397,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname, error: if (nval != NULL) xmlFree(nval); - if (ns != NULL) + if (ns != NULL) xmlFree(ns); } @@ -1479,7 +1496,7 @@ process_external_subset: * - this is a namespace prefix * - the user required for completion in the tree * like XSLT - * - there isn't already an attribute definition + * - there isn't already an attribute definition * in the internal subset overriding it. */ if (((attr->prefix != NULL) && @@ -1568,17 +1585,17 @@ xmlSAX2StartElement(void *ctx, const xmlChar *fullname, const xmlChar **atts) /* * First check on validity: */ - if (ctxt->validate && (ctxt->myDoc->extSubset == NULL) && + if (ctxt->validate && (ctxt->myDoc->extSubset == NULL) && ((ctxt->myDoc->intSubset == NULL) || - ((ctxt->myDoc->intSubset->notations == NULL) && + ((ctxt->myDoc->intSubset->notations == NULL) && (ctxt->myDoc->intSubset->elements == NULL) && - (ctxt->myDoc->intSubset->attributes == NULL) && + (ctxt->myDoc->intSubset->attributes == NULL) && (ctxt->myDoc->intSubset->entities == NULL)))) { xmlErrValid(ctxt, XML_ERR_NO_DTD, "Validation failed: no DTD found !", NULL, NULL); ctxt->validate = 0; } - + /* * Split the full name into a namespace prefix and the tag name @@ -1756,7 +1773,6 @@ void xmlSAX2EndElement(void *ctx, const xmlChar *name ATTRIBUTE_UNUSED) { xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; - xmlParserNodeInfo node_info; xmlNodePtr cur; if (ctx == NULL) return; @@ -1767,13 +1783,13 @@ xmlSAX2EndElement(void *ctx, const xmlChar *name ATTRIBUTE_UNUSED) else xmlGenericError(xmlGenericErrorContext, "SAX.xmlSAX2EndElement(%s)\n", name); #endif - + /* Capture end position and add node */ if (cur != NULL && ctxt->record_info) { - node_info.end_pos = ctxt->input->cur - ctxt->input->base; - node_info.end_line = ctxt->input->line; - node_info.node = cur; - xmlParserAddNodeInfo(ctxt, &node_info); + ctxt->nodeInfo->end_pos = ctxt->input->cur - ctxt->input->base; + ctxt->nodeInfo->end_line = ctxt->input->line; + ctxt->nodeInfo->node = cur; + xmlParserAddNodeInfo(ctxt, ctxt->nodeInfo); } ctxt->nodemem = -1; @@ -1784,7 +1800,7 @@ xmlSAX2EndElement(void *ctx, const xmlChar *name ATTRIBUTE_UNUSED) cur); #endif /* LIBXML_VALID_ENABLED */ - + /* * end of parsing of this node. */ @@ -1800,8 +1816,8 @@ xmlSAX2EndElement(void *ctx, const xmlChar *name ATTRIBUTE_UNUSED) * @ctxt: the parser context * @str: the input string * @len: the string length - * - * Remove the entities from an attribute value + * + * Callback for a text node * * Returns the newly allocated string or NULL if not needed or error */ @@ -1834,7 +1850,7 @@ xmlSAX2TextNode(xmlParserCtxtPtr ctxt, const xmlChar *str, int len) { if ((len < (int) (2 * sizeof(void *))) && (ctxt->options & XML_PARSE_COMPACT)) { - /* store the string in the node overrithing properties and nsDef */ + /* store the string in the node overriding properties and nsDef */ xmlChar *tmp = (xmlChar *) &(ret->properties); memcpy(tmp, str, len); tmp[len] = 0; @@ -1866,8 +1882,17 @@ skip: } else ret->content = (xmlChar *) intern; - if (ctxt->input != NULL) - ret->line = ctxt->input->line; + if (ctxt->linenumbers) { + if (ctxt->input != NULL) { + if (ctxt->input->line < 65535) + ret->line = (short) ctxt->input->line; + else { + ret->line = 65535; + if (ctxt->options & XML_PARSE_BIG_LINES) + ret->psvi = (void *) (long) ctxt->input->line; + } + } + } if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)) xmlRegisterNodeDefaultValue(ret); @@ -1880,7 +1905,7 @@ skip: * @ctxt: the parser context * @str: the input string * @len: the string length - * + * * Remove the entities from an attribute value * * Returns the newly allocated string or NULL if not needed or error @@ -1946,7 +1971,7 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt, memset(ret, 0, sizeof(xmlAttr)); ret->type = XML_ATTRIBUTE_NODE; - ret->parent = ctxt->node; + ret->parent = ctxt->node; ret->doc = ctxt->myDoc; ret->ns = namespace; @@ -1970,7 +1995,7 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt, xmlRegisterNodeDefaultValue((xmlNodePtr)ret); } else { if (ctxt->dictNames) - ret = xmlNewNsPropEatName(ctxt->node, namespace, + ret = xmlNewNsPropEatName(ctxt->node, namespace, (xmlChar *) localname, NULL); else ret = xmlNewNsProp(ctxt->node, namespace, localname, NULL); @@ -2056,7 +2081,7 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt, xmlChar *nvalnorm; xmlChar fn[50]; xmlChar *fullname; - + fullname = xmlBuildQName(localname, prefix, fn, 50); if (fullname != NULL) { ctxt->vctxt.valid = 1; @@ -2163,6 +2188,7 @@ xmlSAX2StartElementNs(void *ctx, xmlNodePtr parent; xmlNsPtr last = NULL, ns; const xmlChar *uri, *pref; + xmlChar *lname = NULL; int i, j; if (ctx == NULL) return; @@ -2170,17 +2196,31 @@ xmlSAX2StartElementNs(void *ctx, /* * First check on validity: */ - if (ctxt->validate && (ctxt->myDoc->extSubset == NULL) && + if (ctxt->validate && (ctxt->myDoc->extSubset == NULL) && ((ctxt->myDoc->intSubset == NULL) || - ((ctxt->myDoc->intSubset->notations == NULL) && + ((ctxt->myDoc->intSubset->notations == NULL) && (ctxt->myDoc->intSubset->elements == NULL) && - (ctxt->myDoc->intSubset->attributes == NULL) && + (ctxt->myDoc->intSubset->attributes == NULL) && (ctxt->myDoc->intSubset->entities == NULL)))) { xmlErrValid(ctxt, XML_ERR_NO_DTD, "Validation failed: no DTD found !", NULL, NULL); ctxt->validate = 0; } + /* + * Take care of the rare case of an undefined namespace prefix + */ + if ((prefix != NULL) && (URI == NULL)) { + if (ctxt->dictNames) { + const xmlChar *fullname; + + fullname = xmlDictQLookup(ctxt->dict, prefix, localname); + if (fullname != NULL) + localname = fullname; + } else { + lname = xmlBuildQName(localname, prefix, NULL, 0); + } + } /* * allocate the node */ @@ -2194,7 +2234,10 @@ xmlSAX2StartElementNs(void *ctx, if (ctxt->dictNames) ret->name = localname; else { - ret->name = xmlStrdup(localname); + if (lname == NULL) + ret->name = xmlStrdup(localname); + else + ret->name = lname; if (ret->name == NULL) { xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElementNs"); return; @@ -2204,10 +2247,13 @@ xmlSAX2StartElementNs(void *ctx, xmlRegisterNodeDefaultValue(ret); } else { if (ctxt->dictNames) - ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL, + ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL, (xmlChar *) localname, NULL); - else + else if (lname == NULL) ret = xmlNewDocNode(ctxt->myDoc, NULL, localname, NULL); + else + ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL, + (xmlChar *) lname, NULL); if (ret == NULL) { xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElementNs"); return; @@ -2222,7 +2268,7 @@ xmlSAX2StartElementNs(void *ctx, } } - if ((ctxt->myDoc->children == NULL) || (parent == NULL)) { + if (parent == NULL) { xmlAddChild((xmlNodePtr) ctxt->myDoc, (xmlNodePtr) ret); } /* @@ -2314,8 +2360,33 @@ xmlSAX2StartElementNs(void *ctx, */ if (nb_attributes > 0) { for (j = 0,i = 0;i < nb_attributes;i++,j+=5) { + /* + * Handle the rare case of an undefined atribute prefix + */ + if ((attributes[j+1] != NULL) && (attributes[j+2] == NULL)) { + if (ctxt->dictNames) { + const xmlChar *fullname; + + fullname = xmlDictQLookup(ctxt->dict, attributes[j+1], + attributes[j]); + if (fullname != NULL) { + xmlSAX2AttributeNs(ctxt, fullname, NULL, + attributes[j+3], attributes[j+4]); + continue; + } + } else { + lname = xmlBuildQName(attributes[j], attributes[j+1], + NULL, 0); + if (lname != NULL) { + xmlSAX2AttributeNs(ctxt, lname, NULL, + attributes[j+3], attributes[j+4]); + xmlFree(lname); + continue; + } + } + } xmlSAX2AttributeNs(ctxt, attributes[j], attributes[j+1], - attributes[j+3], attributes[j+4]); + attributes[j+3], attributes[j+4]); } } @@ -2386,7 +2457,7 @@ xmlSAX2EndElementNs(void *ctx, * @ctx: the user data (XML parser context) * @name: The entity name * - * called when an entity xmlSAX2Reference is detected. + * called when an entity xmlSAX2Reference is detected. */ void xmlSAX2Reference(void *ctx, const xmlChar *name) @@ -2491,7 +2562,7 @@ xmlSAX2Characters(void *ctx, const xmlChar *ch, int len) xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters: huge text node"); return; } - if ((size_t)ctxt->nodelen > SIZE_T_MAX - (size_t)len || + if ((size_t)ctxt->nodelen > SIZE_T_MAX - (size_t)len || (size_t)ctxt->nodemem + (size_t)len > SIZE_T_MAX / 2) { xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters overflow prevented"); return; @@ -2595,7 +2666,7 @@ xmlSAX2ProcessingInstruction(void *ctx, const xmlChar *target, xmlAddChild((xmlNodePtr) ctxt->myDoc->extSubset, ret); return; } - if ((ctxt->myDoc->children == NULL) || (parent == NULL)) { + if (parent == NULL) { #ifdef DEBUG_SAX_TREE xmlGenericError(xmlGenericErrorContext, "Setting PI %s as root\n", target); @@ -2656,7 +2727,7 @@ xmlSAX2Comment(void *ctx, const xmlChar *value) xmlAddChild((xmlNodePtr) ctxt->myDoc->extSubset, ret); return; } - if ((ctxt->myDoc->children == NULL) || (parent == NULL)) { + if (parent == NULL) { #ifdef DEBUG_SAX_TREE xmlGenericError(xmlGenericErrorContext, "Setting xmlSAX2Comment as root\n"); diff --git a/lib/3rdparty/libxml2/acconfig.h b/lib/3rdparty/libxml2/acconfig.h deleted file mode 100644 index dedcf1dc763..00000000000 --- a/lib/3rdparty/libxml2/acconfig.h +++ /dev/null @@ -1,16 +0,0 @@ -#undef PACKAGE -#undef VERSION -#undef HAVE_LIBZ -#undef HAVE_LIBM -#undef HAVE_ISINF -#undef HAVE_ISNAN -#undef HAVE_LIBHISTORY -#undef HAVE_LIBREADLINE -#undef HAVE_LIBPTHREAD -#undef HAVE_PTHREAD_H - -/* Define if IPV6 support is there */ -#undef SUPPORT_IP6 - -/* Define if getaddrinfo is there */ -#undef HAVE_GETADDRINFO diff --git a/lib/3rdparty/libxml2/acinclude.m4 b/lib/3rdparty/libxml2/acinclude.m4 index 4ff672e154b..7ad8630a4f0 100644 --- a/lib/3rdparty/libxml2/acinclude.m4 +++ b/lib/3rdparty/libxml2/acinclude.m4 @@ -2,8 +2,8 @@ dnl Like AC_TRY_EVAL but also errors out if the compiler generates dnl _any_ output. Some compilers might issue warnings which we want dnl to catch. AC_DEFUN([AC_TRY_EVAL2], -[{ (eval echo configure:__oline__: \"[$]$1\") 1>&AC_FD_CC; dnl -(eval [$]$1) 2>&AC_FD_CC; _out=`eval [$]$1 2>&1` && test "x$_out" = x; }]) +[{ (eval echo configure:__oline__: \"[$]$1\") 1>&AS_MESSAGE_LOG_FD; dnl +(eval [$]$1) 2>&AS_MESSAGE_LOG_FD; _out=`eval [$]$1 2>&1` && test "x$_out" = x; }]) dnl Like AC_TRY_COMPILE but calls AC_TRY_EVAL2 instead of AC_TRY_EVAL AC_DEFUN([AC_TRY_COMPILE2], @@ -19,8 +19,8 @@ if AC_TRY_EVAL2(ac_compile); then ifelse([$3], , :, [rm -rf conftest* $3]) else - echo "configure: failed program was:" >&AC_FD_CC - cat conftest.$ac_ext >&AC_FD_CC + echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&AS_MESSAGE_LOG_FD ifelse([$4], , , [ rm -rf conftest* $4 ])dnl diff --git a/lib/3rdparty/libxml2/aclocal.m4 b/lib/3rdparty/libxml2/aclocal.m4 index d12d086f9f6..78c9ca9c65a 100644 --- a/lib/3rdparty/libxml2/aclocal.m4 +++ b/lib/3rdparty/libxml2/aclocal.m4 @@ -1,7 +1,8 @@ -# generated automatically by aclocal 1.11.1 -*- Autoconf -*- +# generated automatically by aclocal 1.11.3 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, +# Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -13,18 +14,21 @@ m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],, -[m4_warning([this file was generated for autoconf 2.63. +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, +[m4_warning([this file was generated for autoconf 2.68. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) -# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software +# Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 1 + # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been @@ -34,7 +38,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11.1], [], +m4_if([$1], [1.11.3], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -50,19 +54,21 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.11.1])dnl +[AM_AUTOMAKE_VERSION([1.11.3])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 1 + # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. @@ -144,14 +150,14 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 -# Free Software Foundation, Inc. +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, +# 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 10 +# serial 12 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, @@ -191,6 +197,7 @@ AC_CACHE_CHECK([dependency style of $depcc], # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. + rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. @@ -255,7 +262,7 @@ AC_CACHE_CHECK([dependency style of $depcc], break fi ;; - msvisualcpp | msvcmsys) + msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. @@ -320,10 +327,13 @@ AC_DEFUN([AM_DEP_TRACK], if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' + am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- @@ -406,18 +416,6 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 8 - -# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. -AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) - # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, @@ -557,12 +555,15 @@ for _am_header in $config_headers :; do done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, +# Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 1 + # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. @@ -694,12 +695,15 @@ else fi ]) -# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, +# Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 1 + # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. @@ -722,13 +726,14 @@ esac # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software +# Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- @@ -736,13 +741,13 @@ AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) -# ------------------------------ +# -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- +# ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) @@ -753,32 +758,6 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2006 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 5 - -AC_DEFUN([AM_C_PROTOTYPES], -[AC_REQUIRE([AC_C_PROTOTYPES]) -if test "$ac_cv_prog_cc_stdc" != no; then - U= ANSI2KNR= -else - U=_ ANSI2KNR=./ansi2knr -fi -# Ensure some checks needed by ansi2knr itself. -AC_REQUIRE([AC_HEADER_STDC]) -AC_CHECK_HEADERS([string.h]) -AC_SUBST([U])dnl -AC_SUBST([ANSI2KNR])dnl -_AM_SUBST_NOTMAKE([ANSI2KNR])dnl -]) - -AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES]) - # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 @@ -844,12 +823,71 @@ Check your system clock]) fi AC_MSG_RESULT(yes)]) -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2009, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 2 + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# (`yes' being less verbose, `no' or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few `make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using `$V' instead of `$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't @@ -872,13 +910,13 @@ fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 2 +# serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- @@ -887,13 +925,13 @@ AC_SUBST([INSTALL_STRIP_PROGRAM])]) AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- +# -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -915,10 +953,11 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. -AM_MISSING_PROG([AMTAR], [tar]) +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) diff --git a/lib/3rdparty/libxml2/buf.c b/lib/3rdparty/libxml2/buf.c new file mode 100644 index 00000000000..fa0c3f6e5f2 --- /dev/null +++ b/lib/3rdparty/libxml2/buf.c @@ -0,0 +1,1301 @@ +/* + * buf.c: memory buffers for libxml2 + * + * new buffer structures and entry points to simplify the maintainance + * of libxml2 and ensure we keep good control over memory allocations + * and stay 64 bits clean. + * The new entry point use the xmlBufPtr opaque structure and + * xmlBuf...() counterparts to the old xmlBuf...() functions + * + * See Copyright for the status of this software. + * + * daniel@veillard.com + */ + +#define IN_LIBXML +#include "libxml.h" + +#include /* for memset() only ! */ +#include +#ifdef HAVE_CTYPE_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif + +#include +#include +#include +#include "buf.h" + +#define WITH_BUFFER_COMPAT + +/** + * xmlBuf: + * + * A buffer structure. The base of the structure is somehow compatible + * with struct _xmlBuffer to limit risks on application which accessed + * directly the input->buf->buffer structures. + */ + +struct _xmlBuf { + xmlChar *content; /* The buffer content UTF8 */ + unsigned int compat_use; /* for binary compatibility */ + unsigned int compat_size; /* for binary compatibility */ + xmlBufferAllocationScheme alloc; /* The realloc method */ + xmlChar *contentIO; /* in IO mode we may have a different base */ + size_t use; /* The buffer size used */ + size_t size; /* The buffer size */ + xmlBufferPtr buffer; /* wrapper for an old buffer */ + int error; /* an error code if a failure occured */ +}; + +#ifdef WITH_BUFFER_COMPAT +/* + * Macro for compatibility with xmlBuffer to be used after an xmlBuf + * is updated. This makes sure the compat fields are updated too. + */ +#define UPDATE_COMPAT(buf) \ + if (buf->size < INT_MAX) buf->compat_size = buf->size; \ + else buf->compat_size = INT_MAX; \ + if (buf->use < INT_MAX) buf->compat_use = buf->use; \ + else buf->compat_use = INT_MAX; + +/* + * Macro for compatibility with xmlBuffer to be used in all the xmlBuf + * entry points, it checks that the compat fields have not been modified + * by direct call to xmlBuffer function from code compiled before 2.9.0 . + */ +#define CHECK_COMPAT(buf) \ + if (buf->size != (size_t) buf->compat_size) \ + if (buf->compat_size < INT_MAX) \ + buf->size = buf->compat_size; \ + if (buf->use != (size_t) buf->compat_use) \ + if (buf->compat_use < INT_MAX) \ + buf->use = buf->compat_use; + +#else /* ! WITH_BUFFER_COMPAT */ +#define UPDATE_COMPAT(buf) +#define CHECK_COMPAT(buf) +#endif /* WITH_BUFFER_COMPAT */ + +/** + * xmlBufMemoryError: + * @extra: extra informations + * + * Handle an out of memory condition + * To be improved... + */ +static void +xmlBufMemoryError(xmlBufPtr buf, const char *extra) +{ + __xmlSimpleError(XML_FROM_BUFFER, XML_ERR_NO_MEMORY, NULL, NULL, extra); + if ((buf) && (buf->error == 0)) + buf->error = XML_ERR_NO_MEMORY; +} + +/** + * xmlBufOverflowError: + * @extra: extra informations + * + * Handle a buffer overflow error + * To be improved... + */ +static void +xmlBufOverflowError(xmlBufPtr buf, const char *extra) +{ + __xmlSimpleError(XML_FROM_BUFFER, XML_BUF_OVERFLOW, NULL, NULL, extra); + if ((buf) && (buf->error == 0)) + buf->error = XML_BUF_OVERFLOW; +} + + +/** + * xmlBufCreate: + * + * routine to create an XML buffer. + * returns the new structure. + */ +xmlBufPtr +xmlBufCreate(void) { + xmlBufPtr ret; + + ret = (xmlBufPtr) xmlMalloc(sizeof(xmlBuf)); + if (ret == NULL) { + xmlBufMemoryError(NULL, "creating buffer"); + return(NULL); + } + ret->compat_use = 0; + ret->use = 0; + ret->error = 0; + ret->buffer = NULL; + ret->size = xmlDefaultBufferSize; + ret->compat_size = xmlDefaultBufferSize; + ret->alloc = xmlBufferAllocScheme; + ret->content = (xmlChar *) xmlMallocAtomic(ret->size * sizeof(xmlChar)); + if (ret->content == NULL) { + xmlBufMemoryError(ret, "creating buffer"); + xmlFree(ret); + return(NULL); + } + ret->content[0] = 0; + ret->contentIO = NULL; + return(ret); +} + +/** + * xmlBufCreateSize: + * @size: initial size of buffer + * + * routine to create an XML buffer. + * returns the new structure. + */ +xmlBufPtr +xmlBufCreateSize(size_t size) { + xmlBufPtr ret; + + ret = (xmlBufPtr) xmlMalloc(sizeof(xmlBuf)); + if (ret == NULL) { + xmlBufMemoryError(NULL, "creating buffer"); + return(NULL); + } + ret->compat_use = 0; + ret->use = 0; + ret->error = 0; + ret->buffer = NULL; + ret->alloc = xmlBufferAllocScheme; + ret->size = (size ? size+2 : 0); /* +1 for ending null */ + ret->compat_size = (int) ret->size; + if (ret->size){ + ret->content = (xmlChar *) xmlMallocAtomic(ret->size * sizeof(xmlChar)); + if (ret->content == NULL) { + xmlBufMemoryError(ret, "creating buffer"); + xmlFree(ret); + return(NULL); + } + ret->content[0] = 0; + } else + ret->content = NULL; + ret->contentIO = NULL; + return(ret); +} + +/** + * xmlBufDetach: + * @buf: the buffer + * + * Remove the string contained in a buffer and give it back to the + * caller. The buffer is reset to an empty content. + * This doesn't work with immutable buffers as they can't be reset. + * + * Returns the previous string contained by the buffer. + */ +xmlChar * +xmlBufDetach(xmlBufPtr buf) { + xmlChar *ret; + + if (buf == NULL) + return(NULL); + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) + return(NULL); + if (buf->buffer != NULL) + return(NULL); + if (buf->error) + return(NULL); + + ret = buf->content; + buf->content = NULL; + buf->size = 0; + buf->use = 0; + buf->compat_use = 0; + buf->compat_size = 0; + + return ret; +} + + +/** + * xmlBufCreateStatic: + * @mem: the memory area + * @size: the size in byte + * + * routine to create an XML buffer from an immutable memory area. + * The area won't be modified nor copied, and is expected to be + * present until the end of the buffer lifetime. + * + * returns the new structure. + */ +xmlBufPtr +xmlBufCreateStatic(void *mem, size_t size) { + xmlBufPtr ret; + + if ((mem == NULL) || (size == 0)) + return(NULL); + + ret = (xmlBufPtr) xmlMalloc(sizeof(xmlBuf)); + if (ret == NULL) { + xmlBufMemoryError(NULL, "creating buffer"); + return(NULL); + } + if (size < INT_MAX) { + ret->compat_use = size; + ret->compat_size = size; + } else { + ret->compat_use = INT_MAX; + ret->compat_size = INT_MAX; + } + ret->use = size; + ret->size = size; + ret->alloc = XML_BUFFER_ALLOC_IMMUTABLE; + ret->content = (xmlChar *) mem; + ret->error = 0; + ret->buffer = NULL; + return(ret); +} + +/** + * xmlBufGetAllocationScheme: + * @buf: the buffer + * + * Get the buffer allocation scheme + * + * Returns the scheme or -1 in case of error + */ +int +xmlBufGetAllocationScheme(xmlBufPtr buf) { + if (buf == NULL) { +#ifdef DEBUG_BUFFER + xmlGenericError(xmlGenericErrorContext, + "xmlBufGetAllocationScheme: buf == NULL\n"); +#endif + return(-1); + } + return(buf->alloc); +} + +/** + * xmlBufSetAllocationScheme: + * @buf: the buffer to tune + * @scheme: allocation scheme to use + * + * Sets the allocation scheme for this buffer + * + * returns 0 in case of success and -1 in case of failure + */ +int +xmlBufSetAllocationScheme(xmlBufPtr buf, + xmlBufferAllocationScheme scheme) { + if ((buf == NULL) || (buf->error != 0)) { +#ifdef DEBUG_BUFFER + xmlGenericError(xmlGenericErrorContext, + "xmlBufSetAllocationScheme: buf == NULL or in error\n"); +#endif + return(-1); + } + if ((buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) || + (buf->alloc == XML_BUFFER_ALLOC_IO)) + return(-1); + if ((scheme == XML_BUFFER_ALLOC_DOUBLEIT) || + (scheme == XML_BUFFER_ALLOC_EXACT) || + (scheme == XML_BUFFER_ALLOC_HYBRID) || + (scheme == XML_BUFFER_ALLOC_IMMUTABLE)) { + buf->alloc = scheme; + if (buf->buffer) + buf->buffer->alloc = scheme; + return(0); + } + /* + * Switching a buffer ALLOC_IO has the side effect of initializing + * the contentIO field with the current content + */ + if (scheme == XML_BUFFER_ALLOC_IO) { + buf->alloc = XML_BUFFER_ALLOC_IO; + buf->contentIO = buf->content; + } + return(-1); +} + +/** + * xmlBufFree: + * @buf: the buffer to free + * + * Frees an XML buffer. It frees both the content and the structure which + * encapsulate it. + */ +void +xmlBufFree(xmlBufPtr buf) { + if (buf == NULL) { +#ifdef DEBUG_BUFFER + xmlGenericError(xmlGenericErrorContext, + "xmlBufFree: buf == NULL\n"); +#endif + return; + } + + if ((buf->alloc == XML_BUFFER_ALLOC_IO) && + (buf->contentIO != NULL)) { + xmlFree(buf->contentIO); + } else if ((buf->content != NULL) && + (buf->alloc != XML_BUFFER_ALLOC_IMMUTABLE)) { + xmlFree(buf->content); + } + xmlFree(buf); +} + +/** + * xmlBufEmpty: + * @buf: the buffer + * + * empty a buffer. + */ +void +xmlBufEmpty(xmlBufPtr buf) { + if ((buf == NULL) || (buf->error != 0)) return; + if (buf->content == NULL) return; + CHECK_COMPAT(buf) + buf->use = 0; + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) { + buf->content = BAD_CAST ""; + } else if ((buf->alloc == XML_BUFFER_ALLOC_IO) && + (buf->contentIO != NULL)) { + size_t start_buf = buf->content - buf->contentIO; + + buf->size += start_buf; + buf->content = buf->contentIO; + buf->content[0] = 0; + } else { + buf->content[0] = 0; + } + UPDATE_COMPAT(buf) +} + +/** + * xmlBufShrink: + * @buf: the buffer to dump + * @len: the number of xmlChar to remove + * + * Remove the beginning of an XML buffer. + * NOTE that this routine behaviour differs from xmlBufferShrink() + * as it will return 0 on error instead of -1 due to size_t being + * used as the return type. + * + * Returns the number of byte removed or 0 in case of failure + */ +size_t +xmlBufShrink(xmlBufPtr buf, size_t len) { + if ((buf == NULL) || (buf->error != 0)) return(0); + CHECK_COMPAT(buf) + if (len == 0) return(0); + if (len > buf->use) return(0); + + buf->use -= len; + if ((buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) || + ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL))) { + /* + * we just move the content pointer, but also make sure + * the perceived buffer size has shrinked accordingly + */ + buf->content += len; + buf->size -= len; + + /* + * sometimes though it maybe be better to really shrink + * on IO buffers + */ + if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) { + size_t start_buf = buf->content - buf->contentIO; + if (start_buf >= buf->size) { + memmove(buf->contentIO, &buf->content[0], buf->use); + buf->content = buf->contentIO; + buf->content[buf->use] = 0; + buf->size += start_buf; + } + } + } else { + memmove(buf->content, &buf->content[len], buf->use); + buf->content[buf->use] = 0; + } + UPDATE_COMPAT(buf) + return(len); +} + +/** + * xmlBufGrowInternal: + * @buf: the buffer + * @len: the minimum free size to allocate + * + * Grow the available space of an XML buffer, @len is the target value + * Error checking should be done on buf->error since using the return + * value doesn't work that well + * + * Returns 0 in case of error or the length made available otherwise + */ +static size_t +xmlBufGrowInternal(xmlBufPtr buf, size_t len) { + size_t size; + xmlChar *newbuf; + + if ((buf == NULL) || (buf->error != 0)) return(0); + CHECK_COMPAT(buf) + + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return(0); + if (buf->use + len < buf->size) + return(buf->size - buf->use); + + /* + * Windows has a BIG problem on realloc timing, so we try to double + * the buffer size (if that's enough) (bug 146697) + * Apparently BSD too, and it's probably best for linux too + * On an embedded system this may be something to change + */ +#if 1 + if (buf->size > (size_t) len) + size = buf->size * 2; + else + size = buf->use + len + 100; +#else + size = buf->use + len + 100; +#endif + + if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) { + size_t start_buf = buf->content - buf->contentIO; + + newbuf = (xmlChar *) xmlRealloc(buf->contentIO, start_buf + size); + if (newbuf == NULL) { + xmlBufMemoryError(buf, "growing buffer"); + return(0); + } + buf->contentIO = newbuf; + buf->content = newbuf + start_buf; + } else { + newbuf = (xmlChar *) xmlRealloc(buf->content, size); + if (newbuf == NULL) { + xmlBufMemoryError(buf, "growing buffer"); + return(0); + } + buf->content = newbuf; + } + buf->size = size; + UPDATE_COMPAT(buf) + return(buf->size - buf->use); +} + +/** + * xmlBufGrow: + * @buf: the buffer + * @len: the minimum free size to allocate + * + * Grow the available space of an XML buffer, @len is the target value + * This is been kept compatible with xmlBufferGrow() as much as possible + * + * Returns -1 in case of error or the length made available otherwise + */ +int +xmlBufGrow(xmlBufPtr buf, int len) { + size_t ret; + + if ((buf == NULL) || (len < 0)) return(-1); + if (len == 0) + return(0); + ret = xmlBufGrowInternal(buf, len); + if (buf->error != 0) + return(-1); + return((int) ret); +} + +/** + * xmlBufInflate: + * @buf: the buffer + * @len: the minimum extra free size to allocate + * + * Grow the available space of an XML buffer, adding at least @len bytes + * + * Returns 0 if successful or -1 in case of error + */ +int +xmlBufInflate(xmlBufPtr buf, size_t len) { + if (buf == NULL) return(-1); + xmlBufGrowInternal(buf, len + buf->size); + if (buf->error) + return(-1); + return(0); +} + +/** + * xmlBufDump: + * @file: the file output + * @buf: the buffer to dump + * + * Dumps an XML buffer to a FILE *. + * Returns the number of #xmlChar written + */ +size_t +xmlBufDump(FILE *file, xmlBufPtr buf) { + size_t ret; + + if ((buf == NULL) || (buf->error != 0)) { +#ifdef DEBUG_BUFFER + xmlGenericError(xmlGenericErrorContext, + "xmlBufDump: buf == NULL or in error\n"); +#endif + return(0); + } + if (buf->content == NULL) { +#ifdef DEBUG_BUFFER + xmlGenericError(xmlGenericErrorContext, + "xmlBufDump: buf->content == NULL\n"); +#endif + return(0); + } + CHECK_COMPAT(buf) + if (file == NULL) + file = stdout; + ret = fwrite(buf->content, sizeof(xmlChar), buf->use, file); + return(ret); +} + +/** + * xmlBufContent: + * @buf: the buffer + * + * Function to extract the content of a buffer + * + * Returns the internal content + */ + +xmlChar * +xmlBufContent(const xmlBufPtr buf) +{ + if ((!buf) || (buf->error)) + return NULL; + + return(buf->content); +} + +/** + * xmlBufEnd: + * @buf: the buffer + * + * Function to extract the end of the content of a buffer + * + * Returns the end of the internal content or NULL in case of error + */ + +xmlChar * +xmlBufEnd(const xmlBufPtr buf) +{ + if ((!buf) || (buf->error)) + return NULL; + CHECK_COMPAT(buf) + + return(&buf->content[buf->use]); +} + +/** + * xmlBufAddLen: + * @buf: the buffer + * @len: the size which were added at the end + * + * Sometime data may be added at the end of the buffer without + * using the xmlBuf APIs that is used to expand the used space + * and set the zero terminating at the end of the buffer + * + * Returns -1 in case of error and 0 otherwise + */ +int +xmlBufAddLen(xmlBufPtr buf, size_t len) { + if ((buf == NULL) || (buf->error)) + return(-1); + CHECK_COMPAT(buf) + if (len > (buf->size - buf->use)) + return(-1); + buf->use += len; + UPDATE_COMPAT(buf) + if (buf->size > buf->use) + buf->content[buf->use] = 0; + else + return(-1); + return(0); +} + +/** + * xmlBufErase: + * @buf: the buffer + * @len: the size to erase at the end + * + * Sometime data need to be erased at the end of the buffer + * + * Returns -1 in case of error and 0 otherwise + */ +int +xmlBufErase(xmlBufPtr buf, size_t len) { + if ((buf == NULL) || (buf->error)) + return(-1); + CHECK_COMPAT(buf) + if (len > buf->use) + return(-1); + buf->use -= len; + buf->content[buf->use] = 0; + UPDATE_COMPAT(buf) + return(0); +} + +/** + * xmlBufLength: + * @buf: the buffer + * + * Function to get the length of a buffer + * + * Returns the length of data in the internal content + */ + +size_t +xmlBufLength(const xmlBufPtr buf) +{ + if ((!buf) || (buf->error)) + return 0; + CHECK_COMPAT(buf) + + return(buf->use); +} + +/** + * xmlBufUse: + * @buf: the buffer + * + * Function to get the length of a buffer + * + * Returns the length of data in the internal content + */ + +size_t +xmlBufUse(const xmlBufPtr buf) +{ + if ((!buf) || (buf->error)) + return 0; + CHECK_COMPAT(buf) + + return(buf->use); +} + +/** + * xmlBufAvail: + * @buf: the buffer + * + * Function to find how much free space is allocated but not + * used in the buffer. It does not account for the terminating zero + * usually needed + * + * Returns the amount or 0 if none or an error occured + */ + +size_t +xmlBufAvail(const xmlBufPtr buf) +{ + if ((!buf) || (buf->error)) + return 0; + CHECK_COMPAT(buf) + + return(buf->size - buf->use); +} + +/** + * xmlBufIsEmpty: + * @buf: the buffer + * + * Tell if a buffer is empty + * + * Returns 0 if no, 1 if yes and -1 in case of error + */ +int +xmlBufIsEmpty(const xmlBufPtr buf) +{ + if ((!buf) || (buf->error)) + return(-1); + CHECK_COMPAT(buf) + + return(buf->use == 0); +} + +/** + * xmlBufResize: + * @buf: the buffer to resize + * @size: the desired size + * + * Resize a buffer to accommodate minimum size of @size. + * + * Returns 0 in case of problems, 1 otherwise + */ +int +xmlBufResize(xmlBufPtr buf, size_t size) +{ + unsigned int newSize; + xmlChar* rebuf = NULL; + size_t start_buf; + + if ((buf == NULL) || (buf->error)) + return(0); + CHECK_COMPAT(buf) + + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return(0); + + /* Don't resize if we don't have to */ + if (size < buf->size) + return 1; + + /* figure out new size */ + switch (buf->alloc){ + case XML_BUFFER_ALLOC_IO: + case XML_BUFFER_ALLOC_DOUBLEIT: + /*take care of empty case*/ + newSize = (buf->size ? buf->size*2 : size + 10); + while (size > newSize) { + if (newSize > UINT_MAX / 2) { + xmlBufMemoryError(buf, "growing buffer"); + return 0; + } + newSize *= 2; + } + break; + case XML_BUFFER_ALLOC_EXACT: + newSize = size+10; + break; + case XML_BUFFER_ALLOC_HYBRID: + if (buf->use < BASE_BUFFER_SIZE) + newSize = size; + else { + newSize = buf->size * 2; + while (size > newSize) { + if (newSize > UINT_MAX / 2) { + xmlBufMemoryError(buf, "growing buffer"); + return 0; + } + newSize *= 2; + } + } + break; + + default: + newSize = size+10; + break; + } + + if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) { + start_buf = buf->content - buf->contentIO; + + if (start_buf > newSize) { + /* move data back to start */ + memmove(buf->contentIO, buf->content, buf->use); + buf->content = buf->contentIO; + buf->content[buf->use] = 0; + buf->size += start_buf; + } else { + rebuf = (xmlChar *) xmlRealloc(buf->contentIO, start_buf + newSize); + if (rebuf == NULL) { + xmlBufMemoryError(buf, "growing buffer"); + return 0; + } + buf->contentIO = rebuf; + buf->content = rebuf + start_buf; + } + } else { + if (buf->content == NULL) { + rebuf = (xmlChar *) xmlMallocAtomic(newSize); + } else if (buf->size - buf->use < 100) { + rebuf = (xmlChar *) xmlRealloc(buf->content, newSize); + } else { + /* + * if we are reallocating a buffer far from being full, it's + * better to make a new allocation and copy only the used range + * and free the old one. + */ + rebuf = (xmlChar *) xmlMallocAtomic(newSize); + if (rebuf != NULL) { + memcpy(rebuf, buf->content, buf->use); + xmlFree(buf->content); + rebuf[buf->use] = 0; + } + } + if (rebuf == NULL) { + xmlBufMemoryError(buf, "growing buffer"); + return 0; + } + buf->content = rebuf; + } + buf->size = newSize; + UPDATE_COMPAT(buf) + + return 1; +} + +/** + * xmlBufAdd: + * @buf: the buffer to dump + * @str: the #xmlChar string + * @len: the number of #xmlChar to add + * + * Add a string range to an XML buffer. if len == -1, the length of + * str is recomputed. + * + * Returns 0 successful, a positive error code number otherwise + * and -1 in case of internal or API error. + */ +int +xmlBufAdd(xmlBufPtr buf, const xmlChar *str, int len) { + unsigned int needSize; + + if ((str == NULL) || (buf == NULL) || (buf->error)) + return -1; + CHECK_COMPAT(buf) + + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1; + if (len < -1) { +#ifdef DEBUG_BUFFER + xmlGenericError(xmlGenericErrorContext, + "xmlBufAdd: len < 0\n"); +#endif + return -1; + } + if (len == 0) return 0; + + if (len < 0) + len = xmlStrlen(str); + + if (len < 0) return -1; + if (len == 0) return 0; + + needSize = buf->use + len + 2; + if (needSize > buf->size){ + if (!xmlBufResize(buf, needSize)){ + xmlBufMemoryError(buf, "growing buffer"); + return XML_ERR_NO_MEMORY; + } + } + + memmove(&buf->content[buf->use], str, len*sizeof(xmlChar)); + buf->use += len; + buf->content[buf->use] = 0; + UPDATE_COMPAT(buf) + return 0; +} + +/** + * xmlBufAddHead: + * @buf: the buffer + * @str: the #xmlChar string + * @len: the number of #xmlChar to add + * + * Add a string range to the beginning of an XML buffer. + * if len == -1, the length of @str is recomputed. + * + * Returns 0 successful, a positive error code number otherwise + * and -1 in case of internal or API error. + */ +int +xmlBufAddHead(xmlBufPtr buf, const xmlChar *str, int len) { + unsigned int needSize; + + if ((buf == NULL) || (buf->error)) + return(-1); + CHECK_COMPAT(buf) + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1; + if (str == NULL) { +#ifdef DEBUG_BUFFER + xmlGenericError(xmlGenericErrorContext, + "xmlBufAddHead: str == NULL\n"); +#endif + return -1; + } + if (len < -1) { +#ifdef DEBUG_BUFFER + xmlGenericError(xmlGenericErrorContext, + "xmlBufAddHead: len < 0\n"); +#endif + return -1; + } + if (len == 0) return 0; + + if (len < 0) + len = xmlStrlen(str); + + if (len <= 0) return -1; + + if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) { + size_t start_buf = buf->content - buf->contentIO; + + if (start_buf > (unsigned int) len) { + /* + * We can add it in the space previously shrinked + */ + buf->content -= len; + memmove(&buf->content[0], str, len); + buf->use += len; + buf->size += len; + UPDATE_COMPAT(buf) + return(0); + } + } + needSize = buf->use + len + 2; + if (needSize > buf->size){ + if (!xmlBufResize(buf, needSize)){ + xmlBufMemoryError(buf, "growing buffer"); + return XML_ERR_NO_MEMORY; + } + } + + memmove(&buf->content[len], &buf->content[0], buf->use); + memmove(&buf->content[0], str, len); + buf->use += len; + buf->content[buf->use] = 0; + UPDATE_COMPAT(buf) + return 0; +} + +/** + * xmlBufCat: + * @buf: the buffer to add to + * @str: the #xmlChar string + * + * Append a zero terminated string to an XML buffer. + * + * Returns 0 successful, a positive error code number otherwise + * and -1 in case of internal or API error. + */ +int +xmlBufCat(xmlBufPtr buf, const xmlChar *str) { + if ((buf == NULL) || (buf->error)) + return(-1); + CHECK_COMPAT(buf) + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1; + if (str == NULL) return -1; + return xmlBufAdd(buf, str, -1); +} + +/** + * xmlBufCCat: + * @buf: the buffer to dump + * @str: the C char string + * + * Append a zero terminated C string to an XML buffer. + * + * Returns 0 successful, a positive error code number otherwise + * and -1 in case of internal or API error. + */ +int +xmlBufCCat(xmlBufPtr buf, const char *str) { + const char *cur; + + if ((buf == NULL) || (buf->error)) + return(-1); + CHECK_COMPAT(buf) + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1; + if (str == NULL) { +#ifdef DEBUG_BUFFER + xmlGenericError(xmlGenericErrorContext, + "xmlBufCCat: str == NULL\n"); +#endif + return -1; + } + for (cur = str;*cur != 0;cur++) { + if (buf->use + 10 >= buf->size) { + if (!xmlBufResize(buf, buf->use+10)){ + xmlBufMemoryError(buf, "growing buffer"); + return XML_ERR_NO_MEMORY; + } + } + buf->content[buf->use++] = *cur; + } + buf->content[buf->use] = 0; + UPDATE_COMPAT(buf) + return 0; +} + +/** + * xmlBufWriteCHAR: + * @buf: the XML buffer + * @string: the string to add + * + * routine which manages and grows an output buffer. This one adds + * xmlChars at the end of the buffer. + * + * Returns 0 if successful, a positive error code number otherwise + * and -1 in case of internal or API error. + */ +int +xmlBufWriteCHAR(xmlBufPtr buf, const xmlChar *string) { + if ((buf == NULL) || (buf->error)) + return(-1); + CHECK_COMPAT(buf) + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) + return(-1); + return(xmlBufCat(buf, string)); +} + +/** + * xmlBufWriteChar: + * @buf: the XML buffer output + * @string: the string to add + * + * routine which manage and grows an output buffer. This one add + * C chars at the end of the array. + * + * Returns 0 if successful, a positive error code number otherwise + * and -1 in case of internal or API error. + */ +int +xmlBufWriteChar(xmlBufPtr buf, const char *string) { + if ((buf == NULL) || (buf->error)) + return(-1); + CHECK_COMPAT(buf) + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) + return(-1); + return(xmlBufCCat(buf, string)); +} + + +/** + * xmlBufWriteQuotedString: + * @buf: the XML buffer output + * @string: the string to add + * + * routine which manage and grows an output buffer. This one writes + * a quoted or double quoted #xmlChar string, checking first if it holds + * quote or double-quotes internally + * + * Returns 0 if successful, a positive error code number otherwise + * and -1 in case of internal or API error. + */ +int +xmlBufWriteQuotedString(xmlBufPtr buf, const xmlChar *string) { + const xmlChar *cur, *base; + if ((buf == NULL) || (buf->error)) + return(-1); + CHECK_COMPAT(buf) + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) + return(-1); + if (xmlStrchr(string, '\"')) { + if (xmlStrchr(string, '\'')) { +#ifdef DEBUG_BUFFER + xmlGenericError(xmlGenericErrorContext, + "xmlBufWriteQuotedString: string contains quote and double-quotes !\n"); +#endif + xmlBufCCat(buf, "\""); + base = cur = string; + while(*cur != 0){ + if(*cur == '"'){ + if (base != cur) + xmlBufAdd(buf, base, cur - base); + xmlBufAdd(buf, BAD_CAST """, 6); + cur++; + base = cur; + } + else { + cur++; + } + } + if (base != cur) + xmlBufAdd(buf, base, cur - base); + xmlBufCCat(buf, "\""); + } + else{ + xmlBufCCat(buf, "\'"); + xmlBufCat(buf, string); + xmlBufCCat(buf, "\'"); + } + } else { + xmlBufCCat(buf, "\""); + xmlBufCat(buf, string); + xmlBufCCat(buf, "\""); + } + return(0); +} + +/** + * xmlBufFromBuffer: + * @buffer: incoming old buffer to convert to a new one + * + * Helper routine to switch from the old buffer structures in use + * in various APIs. It creates a wrapper xmlBufPtr which will be + * used for internal processing until the xmlBufBackToBuffer() is + * issued. + * + * Returns a new xmlBufPtr unless the call failed and NULL is returned + */ +xmlBufPtr +xmlBufFromBuffer(xmlBufferPtr buffer) { + xmlBufPtr ret; + + if (buffer == NULL) + return(NULL); + + ret = (xmlBufPtr) xmlMalloc(sizeof(xmlBuf)); + if (ret == NULL) { + xmlBufMemoryError(NULL, "creating buffer"); + return(NULL); + } + ret->use = buffer->use; + ret->size = buffer->size; + ret->compat_use = buffer->use; + ret->compat_size = buffer->size; + ret->error = 0; + ret->buffer = buffer; + ret->alloc = buffer->alloc; + ret->content = buffer->content; + ret->contentIO = buffer->contentIO; + + return(ret); +} + +/** + * xmlBufBackToBuffer: + * @buf: new buffer wrapping the old one + * + * Function to be called once internal processing had been done to + * update back the buffer provided by the user. This can lead to + * a failure in case the size accumulated in the xmlBuf is larger + * than what an xmlBuffer can support on 64 bits (INT_MAX) + * The xmlBufPtr @buf wrapper is deallocated by this call in any case. + * + * Returns the old xmlBufferPtr unless the call failed and NULL is returned + */ +xmlBufferPtr +xmlBufBackToBuffer(xmlBufPtr buf) { + xmlBufferPtr ret; + + if ((buf == NULL) || (buf->error)) + return(NULL); + CHECK_COMPAT(buf) + if (buf->buffer == NULL) { + xmlBufFree(buf); + return(NULL); + } + + ret = buf->buffer; + /* + * What to do in case of error in the buffer ??? + */ + if (buf->use > INT_MAX) { + /* + * Worse case, we really allocated and used more than the + * maximum allowed memory for an xmlBuffer on this architecture. + * Keep the buffer but provide a truncated size value. + */ + xmlBufOverflowError(buf, "Used size too big for xmlBuffer"); + ret->use = INT_MAX; + ret->size = INT_MAX; + } else if (buf->size > INT_MAX) { + /* + * milder case, we allocated more than the maximum allowed memory + * for an xmlBuffer on this architecture, but used less than the + * limit. + * Keep the buffer but provide a truncated size value. + */ + xmlBufOverflowError(buf, "Allocated size too big for xmlBuffer"); + ret->size = INT_MAX; + } + ret->use = (int) buf->use; + ret->size = (int) buf->size; + ret->alloc = buf->alloc; + ret->content = buf->content; + ret->contentIO = buf->contentIO; + xmlFree(buf); + return(ret); +} + +/** + * xmlBufMergeBuffer: + * @buf: an xmlBufPtr + * @buffer: the buffer to consume into @buf + * + * The content of @buffer is appended to @buf and @buffer is freed + * + * Returns -1 in case of error, 0 otherwise, in any case @buffer is freed + */ +int +xmlBufMergeBuffer(xmlBufPtr buf, xmlBufferPtr buffer) { + int ret = 0; + + if ((buf == NULL) || (buf->error)) { + xmlBufferFree(buffer); + return(-1); + } + CHECK_COMPAT(buf) + if ((buffer != NULL) && (buffer->content != NULL) && + (buffer->use > 0)) { + ret = xmlBufAdd(buf, buffer->content, buffer->use); + } + xmlBufferFree(buffer); + return(ret); +} + +/** + * xmlBufResetInput: + * @buf: an xmlBufPtr + * @input: an xmlParserInputPtr + * + * Update the input to use the current set of pointers from the buffer. + * + * Returns -1 in case of error, 0 otherwise + */ +int +xmlBufResetInput(xmlBufPtr buf, xmlParserInputPtr input) { + if ((input == NULL) || (buf == NULL) || (buf->error)) + return(-1); + CHECK_COMPAT(buf) + input->base = input->cur = buf->content; + input->end = &buf->content[buf->use]; + return(0); +} + +/** + * xmlBufGetInputBase: + * @buf: an xmlBufPtr + * @input: an xmlParserInputPtr + * + * Get the base of the @input relative to the beginning of the buffer + * + * Returns the size_t corresponding to the displacement + */ +size_t +xmlBufGetInputBase(xmlBufPtr buf, xmlParserInputPtr input) { + size_t base; + + if ((input == NULL) || (buf == NULL) || (buf->error)) + return(-1); + CHECK_COMPAT(buf) + base = input->base - buf->content; + /* + * We could do some pointer arythmetic checks but that's probably + * sufficient. + */ + if (base > buf->size) { + xmlBufOverflowError(buf, "Input reference outside of the buffer"); + base = 0; + } + return(base); +} + +/** + * xmlBufSetInputBaseCur: + * @buf: an xmlBufPtr + * @input: an xmlParserInputPtr + * @base: the base value relative to the beginning of the buffer + * @cur: the cur value relative to the beginning of the buffer + * + * Update the input to use the base and cur relative to the buffer + * after a possible reallocation of its content + * + * Returns -1 in case of error, 0 otherwise + */ +int +xmlBufSetInputBaseCur(xmlBufPtr buf, xmlParserInputPtr input, + size_t base, size_t cur) { + if ((input == NULL) || (buf == NULL) || (buf->error)) + return(-1); + CHECK_COMPAT(buf) + input->base = &buf->content[base]; + input->cur = input->base + cur; + input->end = &buf->content[buf->use]; + return(0); +} diff --git a/lib/3rdparty/libxml2/buf.h b/lib/3rdparty/libxml2/buf.h new file mode 100644 index 00000000000..e8c77153d16 --- /dev/null +++ b/lib/3rdparty/libxml2/buf.h @@ -0,0 +1,72 @@ +/* + * Summary: Internal Interfaces for memory buffers in libxml2 + * Description: this module describes most of the new xmlBuf buffer + * entry points, those are private routines, with a + * few exceptions exported in tree.h. This was added + * in 2.9.0. + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_BUF_H__ +#define __XML_BUF_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +xmlBufPtr xmlBufCreate(void); +xmlBufPtr xmlBufCreateSize(size_t size); +xmlBufPtr xmlBufCreateStatic(void *mem, size_t size); + +int xmlBufSetAllocationScheme(xmlBufPtr buf, + xmlBufferAllocationScheme scheme); +int xmlBufGetAllocationScheme(xmlBufPtr buf); + +void xmlBufFree(xmlBufPtr buf); +void xmlBufEmpty(xmlBufPtr buf); + +/* size_t xmlBufShrink(xmlBufPtr buf, size_t len); */ +int xmlBufGrow(xmlBufPtr buf, int len); +int xmlBufInflate(xmlBufPtr buf, size_t len); +int xmlBufResize(xmlBufPtr buf, size_t len); + +int xmlBufAdd(xmlBufPtr buf, const xmlChar *str, int len); +int xmlBufAddHead(xmlBufPtr buf, const xmlChar *str, int len); +int xmlBufCat(xmlBufPtr buf, const xmlChar *str); +int xmlBufCCat(xmlBufPtr buf, const char *str); +int xmlBufWriteCHAR(xmlBufPtr buf, const xmlChar *string); +int xmlBufWriteChar(xmlBufPtr buf, const char *string); +int xmlBufWriteQuotedString(xmlBufPtr buf, const xmlChar *string); + +size_t xmlBufAvail(const xmlBufPtr buf); +size_t xmlBufLength(const xmlBufPtr buf); +/* size_t xmlBufUse(const xmlBufPtr buf); */ +int xmlBufIsEmpty(const xmlBufPtr buf); +int xmlBufAddLen(xmlBufPtr buf, size_t len); +int xmlBufErase(xmlBufPtr buf, size_t len); + +/* const xmlChar * xmlBufContent(const xmlBufPtr buf); */ +/* const xmlChar * xmlBufEnd(const xmlBufPtr buf); */ + +xmlChar * xmlBufDetach(xmlBufPtr buf); + +size_t xmlBufDump(FILE *file, xmlBufPtr buf); + +xmlBufPtr xmlBufFromBuffer(xmlBufferPtr buffer); +xmlBufferPtr xmlBufBackToBuffer(xmlBufPtr buf); +int xmlBufMergeBuffer(xmlBufPtr buf, xmlBufferPtr buffer); + +int xmlBufResetInput(xmlBufPtr buf, xmlParserInputPtr input); +size_t xmlBufGetInputBase(xmlBufPtr buf, xmlParserInputPtr input); +int xmlBufSetInputBaseCur(xmlBufPtr buf, xmlParserInputPtr input, + size_t base, size_t cur); +#ifdef __cplusplus +} +#endif +#endif /* __XML_BUF_H__ */ + diff --git a/lib/3rdparty/libxml2/c14n.c b/lib/3rdparty/libxml2/c14n.c index 9c3cad2a49f..afd95b35232 100644 --- a/lib/3rdparty/libxml2/c14n.c +++ b/lib/3rdparty/libxml2/c14n.c @@ -1,12 +1,12 @@ /* - * "Canonical XML" implementation + * "Canonical XML" implementation * http://www.w3.org/TR/xml-c14n - * + * * "Exclusive XML Canonicalization" implementation * http://www.w3.org/TR/xml-exc-c14n * * See Copyright for the status of this software. - * + * * Author: Aleksey Sanin */ #define IN_LIBXML @@ -27,6 +27,8 @@ #include #include +#include "buf.h" + /************************************************************************ * * * Some declaration better left private ATM * @@ -44,7 +46,7 @@ typedef struct _xmlC14NVisibleNsStack { int nsPrevStart; /* the begginning of the stack for previous visible node */ int nsPrevEnd; /* the end of the stack for previous visible node */ int nsMax; /* size of the array as allocated */ - xmlNsPtr *nsTab; /* array of ns in no particular order */ + xmlNsPtr *nsTab; /* array of ns in no particular order */ xmlNodePtr *nodeTab; /* array of nodes in no particular order */ } xmlC14NVisibleNsStack, *xmlC14NVisibleNsStackPtr; @@ -52,7 +54,7 @@ typedef struct _xmlC14NCtx { /* input parameters */ xmlDocPtr doc; xmlC14NIsVisibleCallback is_visible_callback; - void* user_data; + void* user_data; int with_comments; xmlOutputBufferPtr buf; @@ -60,7 +62,7 @@ typedef struct _xmlC14NCtx { xmlC14NPosition pos; int parent_is_doc; xmlC14NVisibleNsStackPtr ns_rendered; - + /* C14N mode */ xmlC14NMode mode; @@ -73,17 +75,17 @@ typedef struct _xmlC14NCtx { static xmlC14NVisibleNsStackPtr xmlC14NVisibleNsStackCreate (void); static void xmlC14NVisibleNsStackDestroy (xmlC14NVisibleNsStackPtr cur); -static void xmlC14NVisibleNsStackAdd (xmlC14NVisibleNsStackPtr cur, +static void xmlC14NVisibleNsStackAdd (xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlNodePtr node); -static void xmlC14NVisibleNsStackSave (xmlC14NVisibleNsStackPtr cur, +static void xmlC14NVisibleNsStackSave (xmlC14NVisibleNsStackPtr cur, xmlC14NVisibleNsStackPtr state); -static void xmlC14NVisibleNsStackRestore (xmlC14NVisibleNsStackPtr cur, +static void xmlC14NVisibleNsStackRestore (xmlC14NVisibleNsStackPtr cur, xmlC14NVisibleNsStackPtr state); -static void xmlC14NVisibleNsStackShift (xmlC14NVisibleNsStackPtr cur); -static int xmlC14NVisibleNsStackFind (xmlC14NVisibleNsStackPtr cur, +static void xmlC14NVisibleNsStackShift (xmlC14NVisibleNsStackPtr cur); +static int xmlC14NVisibleNsStackFind (xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns); -static int xmlExcC14NVisibleNsStackFind (xmlC14NVisibleNsStackPtr cur, +static int xmlExcC14NVisibleNsStackFind (xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlC14NCtxPtr ctx); @@ -105,26 +107,26 @@ typedef enum { static xmlChar *xmlC11NNormalizeString(const xmlChar * input, xmlC14NNormalizationMode mode); -#define xmlC11NNormalizeAttr( a ) \ +#define xmlC11NNormalizeAttr( a ) \ xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_ATTR) -#define xmlC11NNormalizeComment( a ) \ +#define xmlC11NNormalizeComment( a ) \ xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_COMMENT) -#define xmlC11NNormalizePI( a ) \ +#define xmlC11NNormalizePI( a ) \ xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_PI) -#define xmlC11NNormalizeText( a ) \ +#define xmlC11NNormalizeText( a ) \ xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_TEXT) -#define xmlC14NIsVisible( ctx, node, parent ) \ +#define xmlC14NIsVisible( ctx, node, parent ) \ (((ctx)->is_visible_callback != NULL) ? \ (ctx)->is_visible_callback((ctx)->user_data, \ (xmlNodePtr)(node), (xmlNodePtr)(parent)) : 1) -#define xmlC14NIsExclusive( ctx ) \ +#define xmlC14NIsExclusive( ctx ) \ ( (ctx)->mode == XML_C14N_EXCLUSIVE_1_0 ) /************************************************************************ * * - * Some factorized error routines * + * Some factorized error routines * * * ************************************************************************/ @@ -249,25 +251,25 @@ xmlC14NErr(xmlC14NCtxPtr ctxt, xmlNodePtr node, int error, ************************************************************************/ #define XML_NAMESPACES_DEFAULT 16 -static int +static int xmlC14NIsNodeInNodeset(xmlNodeSetPtr nodes, xmlNodePtr node, xmlNodePtr parent) { if((nodes != NULL) && (node != NULL)) { if(node->type != XML_NAMESPACE_DECL) { return(xmlXPathNodeSetContains(nodes, node)); } else { xmlNs ns; - - memcpy(&ns, node, sizeof(ns)); - + + memcpy(&ns, node, sizeof(ns)); + /* this is a libxml hack! check xpath.c for details */ if((parent != NULL) && (parent->type == XML_ATTRIBUTE_NODE)) { ns.next = (xmlNsPtr)parent->parent; } else { - ns.next = (xmlNsPtr)parent; + ns.next = (xmlNsPtr)parent; } - /* - * If the input is an XPath node-set, then the node-set must explicitly + /* + * If the input is an XPath node-set, then the node-set must explicitly * contain every node to be rendered to the canonical form. */ return(xmlXPathNodeSetContains(nodes, (xmlNodePtr)&ns)); @@ -305,12 +307,12 @@ xmlC14NVisibleNsStackDestroy(xmlC14NVisibleNsStackPtr cur) { } memset(cur, 0, sizeof(xmlC14NVisibleNsStack)); xmlFree(cur); - + } -static void +static void xmlC14NVisibleNsStackAdd(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlNodePtr node) { - if((cur == NULL) || + if((cur == NULL) || ((cur->nsTab == NULL) && (cur->nodeTab != NULL)) || ((cur->nsTab != NULL) && (cur->nodeTab == NULL))) { xmlC14NErrParam("adding namespace to stack"); @@ -328,9 +330,9 @@ xmlC14NVisibleNsStackAdd(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlNodePtr n memset(cur->nodeTab, 0 , XML_NAMESPACES_DEFAULT * sizeof(xmlNodePtr)); cur->nsMax = XML_NAMESPACES_DEFAULT; } else if(cur->nsMax == cur->nsCurEnd) { - void *tmp; + void *tmp; int tmpSize; - + tmpSize = 2 * cur->nsMax; tmp = xmlRealloc(cur->nsTab, tmpSize * sizeof(xmlNsPtr)); if (tmp == NULL) { @@ -360,7 +362,7 @@ xmlC14NVisibleNsStackSave(xmlC14NVisibleNsStackPtr cur, xmlC14NVisibleNsStackPtr xmlC14NErrParam("saving namespaces stack"); return; } - + state->nsCurEnd = cur->nsCurEnd; state->nsPrevStart = cur->nsPrevStart; state->nsPrevEnd = cur->nsPrevEnd; @@ -377,7 +379,7 @@ xmlC14NVisibleNsStackRestore(xmlC14NVisibleNsStackPtr cur, xmlC14NVisibleNsStack cur->nsPrevEnd = state->nsPrevEnd; } -static void +static void xmlC14NVisibleNsStackShift(xmlC14NVisibleNsStackPtr cur) { if(cur == NULL) { xmlC14NErrParam("shifting namespaces stack"); @@ -400,7 +402,7 @@ xmlC14NStrEqual(const xmlChar *str1, const xmlChar *str2) { /** * xmlC14NVisibleNsStackFind: - * @ctx: the C14N context + * @ctx: the C14N context * @ns: the namespace to check * * Checks whether the given namespace was already rendered or not @@ -414,14 +416,14 @@ xmlC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns) const xmlChar *prefix; const xmlChar *href; int has_empty_ns; - + if(cur == NULL) { xmlC14NErrParam("searching namespaces stack (c14n)"); return (0); } /* - * if the default namespace xmlns="" is not defined yet then + * if the default namespace xmlns="" is not defined yet then * we do not want to print it out */ prefix = ((ns == NULL) || (ns->prefix == NULL)) ? BAD_CAST "" : ns->prefix; @@ -432,7 +434,7 @@ xmlC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns) int start = (has_empty_ns) ? 0 : cur->nsPrevStart; for (i = cur->nsCurEnd - 1; i >= start; --i) { xmlNsPtr ns1 = cur->nsTab[i]; - + if(xmlC14NStrEqual(prefix, (ns1 != NULL) ? ns1->prefix : NULL)) { return(xmlC14NStrEqual(href, (ns1 != NULL) ? ns1->href : NULL)); } @@ -441,20 +443,20 @@ xmlC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns) return(has_empty_ns); } -static int +static int xmlExcC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlC14NCtxPtr ctx) { int i; const xmlChar *prefix; const xmlChar *href; int has_empty_ns; - + if(cur == NULL) { xmlC14NErrParam("searching namespaces stack (exc c14n)"); return (0); } /* - * if the default namespace xmlns="" is not defined yet then + * if the default namespace xmlns="" is not defined yet then * we do not want to print it out */ prefix = ((ns == NULL) || (ns->prefix == NULL)) ? BAD_CAST "" : ns->prefix; @@ -465,10 +467,10 @@ xmlExcC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlC14NC int start = 0; for (i = cur->nsCurEnd - 1; i >= start; --i) { xmlNsPtr ns1 = cur->nsTab[i]; - + if(xmlC14NStrEqual(prefix, (ns1 != NULL) ? ns1->prefix : NULL)) { if(xmlC14NStrEqual(href, (ns1 != NULL) ? ns1->href : NULL)) { - return(xmlC14NIsVisible(ctx, ns1, cur->nodeTab[i])); + return(xmlC14NIsVisible(ctx, ns1, cur->nodeTab[i])); } else { return(0); } @@ -483,8 +485,8 @@ xmlExcC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlC14NC /** * xmlC14NIsXmlNs: - * @ns: the namespace to check - * + * @ns: the namespace to check + * * Checks whether the given namespace is a default "xml:" namespace * with href="http://www.w3.org/XML/1998/namespace" * @@ -504,7 +506,7 @@ xmlC14NIsXmlNs(xmlNsPtr ns) /** * xmlC14NNsCompare: * @ns1: the pointer to first namespace - * @ns2: the pointer to second namespace + * @ns2: the pointer to second namespace * * Compares the namespaces by names (prefixes). * @@ -527,7 +529,7 @@ xmlC14NNsCompare(xmlNsPtr ns1, xmlNsPtr ns2) /** * xmlC14NPrintNamespaces: * @ns: the pointer to namespace - * @ctx: the C14N context + * @ctx: the C14N context * * Prints the given namespace to the output buffer from C14N context. * @@ -558,39 +560,39 @@ xmlC14NPrintNamespaces(const xmlNsPtr ns, xmlC14NCtxPtr ctx) /** * xmlC14NProcessNamespacesAxis: - * @ctx: the C14N context + * @ctx: the C14N context * @node: the current node * * Prints out canonical namespace axis of the current node to the - * buffer from C14N context as follows + * buffer from C14N context as follows * * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n) * * Namespace Axis - * Consider a list L containing only namespace nodes in the - * axis and in the node-set in lexicographic order (ascending). To begin - * processing L, if the first node is not the default namespace node (a node - * with no namespace URI and no local name), then generate a space followed + * Consider a list L containing only namespace nodes in the + * axis and in the node-set in lexicographic order (ascending). To begin + * processing L, if the first node is not the default namespace node (a node + * with no namespace URI and no local name), then generate a space followed * by xmlns="" if and only if the following conditions are met: * - the element E that owns the axis is in the node-set - * - The nearest ancestor element of E in the node-set has a default - * namespace node in the node-set (default namespace nodes always + * - The nearest ancestor element of E in the node-set has a default + * namespace node in the node-set (default namespace nodes always * have non-empty values in XPath) - * The latter condition eliminates unnecessary occurrences of xmlns="" in - * the canonical form since an element only receives an xmlns="" if its - * default namespace is empty and if it has an immediate parent in the - * canonical form that has a non-empty default namespace. To finish - * processing L, simply process every namespace node in L, except omit - * namespace node with local name xml, which defines the xml prefix, + * The latter condition eliminates unnecessary occurrences of xmlns="" in + * the canonical form since an element only receives an xmlns="" if its + * default namespace is empty and if it has an immediate parent in the + * canonical form that has a non-empty default namespace. To finish + * processing L, simply process every namespace node in L, except omit + * namespace node with local name xml, which defines the xml prefix, * if its string value is http://www.w3.org/XML/1998/namespace. * * Exclusive XML Canonicalization v 1.0 (http://www.w3.org/TR/xml-exc-c14n) - * Canonical XML applied to a document subset requires the search of the - * ancestor nodes of each orphan element node for attributes in the xml - * namespace, such as xml:lang and xml:space. These are copied into the - * element node except if a declaration of the same attribute is already - * in the attribute axis of the element (whether or not it is included in - * the document subset). This search and copying are omitted from the + * Canonical XML applied to a document subset requires the search of the + * ancestor nodes of each orphan element node for attributes in the xml + * namespace, such as xml:lang and xml:space. These are copied into the + * element node except if a declaration of the same attribute is already + * in the attribute axis of the element (whether or not it is included in + * the document subset). This search and copying are omitted from the * Exclusive XML Canonicalization method. * * Returns 0 on success or -1 on fail. @@ -603,7 +605,7 @@ xmlC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible) xmlListPtr list; int already_rendered; int has_empty_ns = 0; - + if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) { xmlC14NErrParam("processing namespaces axis (c14n)"); return (-1); @@ -622,29 +624,29 @@ xmlC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible) for(n = cur; n != NULL; n = n->parent) { for(ns = n->nsDef; ns != NULL; ns = ns->next) { tmp = xmlSearchNs(cur->doc, cur, ns->prefix); - + if((tmp == ns) && !xmlC14NIsXmlNs(ns) && xmlC14NIsVisible(ctx, ns, cur)) { already_rendered = xmlC14NVisibleNsStackFind(ctx->ns_rendered, ns); if(visible) { - xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur); + xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur); } if(!already_rendered) { - xmlListInsert(list, ns); + xmlListInsert(list, ns); } - if(xmlStrlen(ns->prefix) == 0) { + if(xmlStrlen(ns->prefix) == 0) { has_empty_ns = 1; } } } } - + /** - * if the first node is not the default namespace node (a node with no - * namespace URI and no local name), then generate a space followed by + * if the first node is not the default namespace node (a node with no + * namespace URI and no local name), then generate a space followed by * xmlns="" if and only if the following conditions are met: * - the element E that owns the axis is in the node-set - * - the nearest ancestor element of E in the node-set has a default - * namespace node in the node-set (default namespace nodes always + * - the nearest ancestor element of E in the node-set has a default + * namespace node in the node-set (default namespace nodes always * have non-empty values in XPath) */ if(visible && !has_empty_ns) { @@ -652,17 +654,17 @@ xmlC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible) memset(&ns_default, 0, sizeof(ns_default)); if(!xmlC14NVisibleNsStackFind(ctx->ns_rendered, &ns_default)) { - xmlC14NPrintNamespaces(&ns_default, ctx); + xmlC14NPrintNamespaces(&ns_default, ctx); } } - - - /* - * print out all elements from list + + + /* + * print out all elements from list */ xmlListWalk(list, (xmlListWalker) xmlC14NPrintNamespaces, (const void *) ctx); - /* + /* * Cleanup */ xmlListDelete(list); @@ -672,28 +674,28 @@ xmlC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible) /** * xmlExcC14NProcessNamespacesAxis: - * @ctx: the C14N context + * @ctx: the C14N context * @node: the current node * * Prints out exclusive canonical namespace axis of the current node to the - * buffer from C14N context as follows + * buffer from C14N context as follows * * Exclusive XML Canonicalization * http://www.w3.org/TR/xml-exc-c14n * - * If the element node is in the XPath subset then output the node in - * accordance with Canonical XML except for namespace nodes which are + * If the element node is in the XPath subset then output the node in + * accordance with Canonical XML except for namespace nodes which are * rendered as follows: * * 1. Render each namespace node iff: - * * it is visibly utilized by the immediate parent element or one of + * * it is visibly utilized by the immediate parent element or one of * its attributes, or is present in InclusiveNamespaces PrefixList, and - * * its prefix and value do not appear in ns_rendered. ns_rendered is - * obtained by popping the state stack in order to obtain a list of - * prefixes and their values which have already been rendered by + * * its prefix and value do not appear in ns_rendered. ns_rendered is + * obtained by popping the state stack in order to obtain a list of + * prefixes and their values which have already been rendered by * an output ancestor of the namespace node's parent element. - * 2. Append the rendered namespace node to the list ns_rendered of namespace - * nodes rendered by output ancestors. Push ns_rendered on state stack and + * 2. Append the rendered namespace node to the list ns_rendered of namespace + * nodes rendered by output ancestors. Push ns_rendered on state stack and * recurse. * 3. After the recursion returns, pop thestate stack. * @@ -710,7 +712,7 @@ xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible) int has_empty_ns = 0; int has_visibly_utilized_empty_ns = 0; int has_empty_ns_in_inclusive_list = 0; - + if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) { xmlC14NErrParam("processing namespaces axis (exc c14n)"); return (-1); @@ -731,15 +733,15 @@ xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible) return (-1); } - /* + /* * process inclusive namespaces: - * All namespace nodes appearing on inclusive ns list are + * All namespace nodes appearing on inclusive ns list are * handled as provided in Canonical XML */ if(ctx->inclusive_ns_prefixes != NULL) { - xmlChar *prefix; + xmlChar *prefix; int i; - + for (i = 0; ctx->inclusive_ns_prefixes[i] != NULL; ++i) { prefix = ctx->inclusive_ns_prefixes[i]; /* @@ -750,23 +752,23 @@ xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible) prefix = NULL; has_empty_ns_in_inclusive_list = 1; } - - ns = xmlSearchNs(cur->doc, cur, prefix); + + ns = xmlSearchNs(cur->doc, cur, prefix); if((ns != NULL) && !xmlC14NIsXmlNs(ns) && xmlC14NIsVisible(ctx, ns, cur)) { already_rendered = xmlC14NVisibleNsStackFind(ctx->ns_rendered, ns); if(visible) { - xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur); + xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur); } if(!already_rendered) { - xmlListInsert(list, ns); + xmlListInsert(list, ns); } - if(xmlStrlen(ns->prefix) == 0) { + if(xmlStrlen(ns->prefix) == 0) { has_empty_ns = 1; } } } } - + /* add node namespace */ if(cur->ns != NULL) { ns = cur->ns; @@ -775,32 +777,32 @@ xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible) has_visibly_utilized_empty_ns = 1; } if((ns != NULL) && !xmlC14NIsXmlNs(ns)) { - if(visible && xmlC14NIsVisible(ctx, ns, cur)) { + if(visible && xmlC14NIsVisible(ctx, ns, cur)) { if(!xmlExcC14NVisibleNsStackFind(ctx->ns_rendered, ns, ctx)) { xmlListInsert(list, ns); } } if(visible) { - xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur); + xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur); } if(xmlStrlen(ns->prefix) == 0) { has_empty_ns = 1; } } - - + + /* add attributes */ for(attr = cur->properties; attr != NULL; attr = attr->next) { - /* + /* * we need to check that attribute is visible and has non - * default namespace (XML Namespaces: "default namespaces - * do not apply directly to attributes") + * default namespace (XML Namespaces: "default namespaces + * do not apply directly to attributes") */ if((attr->ns != NULL) && !xmlC14NIsXmlNs(attr->ns) && xmlC14NIsVisible(ctx, attr, cur)) { already_rendered = xmlExcC14NVisibleNsStackFind(ctx->ns_rendered, attr->ns, ctx); - xmlC14NVisibleNsStackAdd(ctx->ns_rendered, attr->ns, cur); + xmlC14NVisibleNsStackAdd(ctx->ns_rendered, attr->ns, cur); if(!already_rendered && visible) { - xmlListInsert(list, attr->ns); + xmlListInsert(list, attr->ns); } if(xmlStrlen(attr->ns->prefix) == 0) { has_empty_ns = 1; @@ -813,33 +815,33 @@ xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible) /* * Process xmlns="" */ - if(visible && has_visibly_utilized_empty_ns && + if(visible && has_visibly_utilized_empty_ns && !has_empty_ns && !has_empty_ns_in_inclusive_list) { static xmlNs ns_default; memset(&ns_default, 0, sizeof(ns_default)); - + already_rendered = xmlExcC14NVisibleNsStackFind(ctx->ns_rendered, &ns_default, ctx); if(!already_rendered) { - xmlC14NPrintNamespaces(&ns_default, ctx); + xmlC14NPrintNamespaces(&ns_default, ctx); } } else if(visible && !has_empty_ns && has_empty_ns_in_inclusive_list) { static xmlNs ns_default; memset(&ns_default, 0, sizeof(ns_default)); if(!xmlC14NVisibleNsStackFind(ctx->ns_rendered, &ns_default)) { - xmlC14NPrintNamespaces(&ns_default, ctx); + xmlC14NPrintNamespaces(&ns_default, ctx); } } - - /* - * print out all elements from list + + /* + * print out all elements from list */ xmlListWalk(list, (xmlListWalker) xmlC14NPrintNamespaces, (const void *) ctx); - /* + /* * Cleanup */ xmlListDelete(list); @@ -849,8 +851,8 @@ xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible) /** * xmlC14NIsXmlAttr: - * @attr: the attr to check - * + * @attr: the attr to check + * * Checks whether the given attribute is a default "xml:" namespace * with href="http://www.w3.org/XML/1998/namespace" * @@ -861,7 +863,7 @@ xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible) static int xmlC14NIsXmlAttr(xmlAttrPtr attr) { - return ((attr->ns != NULL) && + return ((attr->ns != NULL) && (xmlC14NIsXmlNs(attr->ns) != 0)); } @@ -869,7 +871,7 @@ xmlC14NIsXmlAttr(xmlAttrPtr attr) /** * xmlC14NAttrsCompare: * @attr1: the pointer tls o first attr - * @attr2: the pointer to second attr + * @attr2: the pointer to second attr * * Prints the given attribute to the output buffer from C14N context. * @@ -893,7 +895,7 @@ xmlC14NAttrsCompare(xmlAttrPtr attr1, xmlAttrPtr attr2) return (xmlStrcmp(attr1->name, attr2->name)); } - /* + /* * Attributes in the default namespace are first * because the default namespace is not applied to * unqualified attributes @@ -918,10 +920,10 @@ xmlC14NAttrsCompare(xmlAttrPtr attr1, xmlAttrPtr attr2) /** * xmlC14NPrintAttrs: * @attr: the pointer to attr - * @ctx: the C14N context + * @ctx: the C14N context * * Prints out canonical attribute urrent node to the - * buffer from C14N context as follows + * buffer from C14N context as follows * * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n) * @@ -968,7 +970,7 @@ xmlC14NPrintAttrs(const xmlAttrPtr attr, xmlC14NCtxPtr ctx) * xmlC14NFindHiddenParentAttr: * * Finds an attribute in a hidden parent node. - * + * * Returns a pointer to the attribute node (if found) or NULL otherwise. */ static xmlAttrPtr @@ -996,7 +998,7 @@ xmlC14NFindHiddenParentAttr(xmlC14NCtxPtr ctx, xmlNodePtr cur, const xmlChar * n */ static xmlAttrPtr xmlC14NFixupBaseAttr(xmlC14NCtxPtr ctx, xmlAttrPtr xml_base_attr) -{ +{ xmlChar * res = NULL; xmlNodePtr cur; xmlAttrPtr attr; @@ -1028,9 +1030,9 @@ xmlC14NFixupBaseAttr(xmlC14NCtxPtr ctx, xmlAttrPtr xml_base_attr) xmlC14NErrInternal("processing xml:base attribute - can't get attr value"); return (NULL); - } + } - /* we need to add '/' if our current base uri ends with '..' or '.' + /* we need to add '/' if our current base uri ends with '..' or '.' to ensure that we are forced to go "up" all the time */ tmp_str_len = xmlStrlen(tmp_str); if(tmp_str_len > 1 && tmp_str[tmp_str_len - 2] == '.') { @@ -1047,7 +1049,7 @@ xmlC14NFixupBaseAttr(xmlC14NCtxPtr ctx, xmlAttrPtr xml_base_attr) } /* build uri */ - tmp_str2 = xmlBuildURI(res, tmp_str); + tmp_str2 = xmlBuildURI(res, tmp_str); if(tmp_str2 == NULL) { xmlFree(tmp_str); xmlFree(res); @@ -1080,7 +1082,7 @@ xmlC14NFixupBaseAttr(xmlC14NCtxPtr ctx, xmlAttrPtr xml_base_attr) xmlC14NErrInternal("processing xml:base attribute - can't construct attribute"); return (NULL); } - + /* done */ xmlFree(res); return (attr); @@ -1088,33 +1090,33 @@ xmlC14NFixupBaseAttr(xmlC14NCtxPtr ctx, xmlAttrPtr xml_base_attr) /** * xmlC14NProcessAttrsAxis: - * @ctx: the C14N context + * @ctx: the C14N context * @cur: the current node * @parent_visible: the visibility of parent node * @all_parents_visible: the visibility of all parent nodes * * Prints out canonical attribute axis of the current node to the - * buffer from C14N context as follows + * buffer from C14N context as follows * * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n) * - * Attribute Axis - * In lexicographic order (ascending), process each node that + * Attribute Axis + * In lexicographic order (ascending), process each node that * is in the element's attribute axis and in the node-set. - * - * The processing of an element node E MUST be modified slightly - * when an XPath node-set is given as input and the element's + * + * The processing of an element node E MUST be modified slightly + * when an XPath node-set is given as input and the element's * parent is omitted from the node-set. * * * Exclusive XML Canonicalization v 1.0 (http://www.w3.org/TR/xml-exc-c14n) * - * Canonical XML applied to a document subset requires the search of the - * ancestor nodes of each orphan element node for attributes in the xml - * namespace, such as xml:lang and xml:space. These are copied into the - * element node except if a declaration of the same attribute is already - * in the attribute axis of the element (whether or not it is included in - * the document subset). This search and copying are omitted from the + * Canonical XML applied to a document subset requires the search of the + * ancestor nodes of each orphan element node for attributes in the xml + * namespace, such as xml:lang and xml:space. These are copied into the + * element node except if a declaration of the same attribute is already + * in the attribute axis of the element (whether or not it is included in + * the document subset). This search and copying are omitted from the * Exclusive XML Canonicalization method. * * Returns 0 on success or -1 on fail. @@ -1123,9 +1125,9 @@ static int xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible) { xmlAttrPtr attr; - xmlListPtr list; + xmlListPtr list; xmlAttrPtr attrs_to_delete = NULL; - + /* special processing for 1.1 spec */ xmlAttrPtr xml_base_attr = NULL; xmlAttrPtr xml_lang_attr = NULL; @@ -1147,19 +1149,19 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible) switch(ctx->mode) { case XML_C14N_1_0: - /* The processing of an element node E MUST be modified slightly when an XPath node-set is - * given as input and the element's parent is omitted from the node-set. The method for processing - * the attribute axis of an element E in the node-set is enhanced. All element nodes along E's - * ancestor axis are examined for nearest occurrences of attributes in the xml namespace, such - * as xml:lang and xml:space (whether or not they are in the node-set). From this list of attributes, - * remove any that are in E's attribute axis (whether or not they are in the node-set). Then, - * lexicographically merge this attribute list with the nodes of E's attribute axis that are in - * the node-set. The result of visiting the attribute axis is computed by processing the attribute - * nodes in this merged attribute list. + /* The processing of an element node E MUST be modified slightly when an XPath node-set is + * given as input and the element's parent is omitted from the node-set. The method for processing + * the attribute axis of an element E in the node-set is enhanced. All element nodes along E's + * ancestor axis are examined for nearest occurrences of attributes in the xml namespace, such + * as xml:lang and xml:space (whether or not they are in the node-set). From this list of attributes, + * remove any that are in E's attribute axis (whether or not they are in the node-set). Then, + * lexicographically merge this attribute list with the nodes of E's attribute axis that are in + * the node-set. The result of visiting the attribute axis is computed by processing the attribute + * nodes in this merged attribute list. */ - - /* - * Add all visible attributes from current node. + + /* + * Add all visible attributes from current node. */ attr = cur->properties; while (attr != NULL) { @@ -1170,16 +1172,16 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible) attr = attr->next; } - /* + /* * Handle xml attributes */ - if (parent_visible && (cur->parent != NULL) && - (!xmlC14NIsVisible(ctx, cur->parent, cur->parent->parent))) + if (parent_visible && (cur->parent != NULL) && + (!xmlC14NIsVisible(ctx, cur->parent, cur->parent->parent))) { xmlNodePtr tmp; /* - * If XPath node-set is not specified then the parent is always + * If XPath node-set is not specified then the parent is always * visible! */ tmp = cur->parent; @@ -1200,12 +1202,12 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible) /* done */ break; case XML_C14N_EXCLUSIVE_1_0: - /* attributes in the XML namespace, such as xml:lang and xml:space - * are not imported into orphan nodes of the document subset + /* attributes in the XML namespace, such as xml:lang and xml:space + * are not imported into orphan nodes of the document subset */ - /* - * Add all visible attributes from current node. + /* + * Add all visible attributes from current node. */ attr = cur->properties; while (attr != NULL) { @@ -1219,36 +1221,36 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible) /* do nothing special for xml attributes */ break; case XML_C14N_1_1: - /* The processing of an element node E MUST be modified slightly when an XPath node-set is - * given as input and some of the element's ancestors are omitted from the node-set. + /* The processing of an element node E MUST be modified slightly when an XPath node-set is + * given as input and some of the element's ancestors are omitted from the node-set. * - * Simple inheritable attributes are attributes that have a value that requires at most a simple - * redeclaration. This redeclaration is done by supplying a new value in the child axis. The - * redeclaration of a simple inheritable attribute A contained in one of E's ancestors is done - * by supplying a value to an attribute Ae inside E with the same name. Simple inheritable attributes + * Simple inheritable attributes are attributes that have a value that requires at most a simple + * redeclaration. This redeclaration is done by supplying a new value in the child axis. The + * redeclaration of a simple inheritable attribute A contained in one of E's ancestors is done + * by supplying a value to an attribute Ae inside E with the same name. Simple inheritable attributes * are xml:lang and xml:space. - * - * The method for processing the attribute axis of an element E in the node-set is hence enhanced. - * All element nodes along E's ancestor axis are examined for the nearest occurrences of simple - * inheritable attributes in the xml namespace, such as xml:lang and xml:space (whether or not they - * are in the node-set). From this list of attributes, any simple inheritable attributes that are - * already in E's attribute axis (whether or not they are in the node-set) are removed. Then, - * lexicographically merge this attribute list with the nodes of E's attribute axis that are in - * the node-set. The result of visiting the attribute axis is computed by processing the attribute + * + * The method for processing the attribute axis of an element E in the node-set is hence enhanced. + * All element nodes along E's ancestor axis are examined for the nearest occurrences of simple + * inheritable attributes in the xml namespace, such as xml:lang and xml:space (whether or not they + * are in the node-set). From this list of attributes, any simple inheritable attributes that are + * already in E's attribute axis (whether or not they are in the node-set) are removed. Then, + * lexicographically merge this attribute list with the nodes of E's attribute axis that are in + * the node-set. The result of visiting the attribute axis is computed by processing the attribute * nodes in this merged attribute list. - * - * The xml:id attribute is not a simple inheritable attribute and no processing of these attributes is + * + * The xml:id attribute is not a simple inheritable attribute and no processing of these attributes is * performed. - * - * The xml:base attribute is not a simple inheritable attribute and requires special processing beyond + * + * The xml:base attribute is not a simple inheritable attribute and requires special processing beyond * a simple redeclaration. - * - * Attributes in the XML namespace other than xml:base, xml:id, xml:lang, and xml:space MUST be processed + * + * Attributes in the XML namespace other than xml:base, xml:id, xml:lang, and xml:space MUST be processed * as ordinary attributes. */ - /* - * Add all visible attributes from current node. + /* + * Add all visible attributes from current node. */ attr = cur->properties; while (attr != NULL) { @@ -1265,7 +1267,7 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible) if((!matched) && (xml_lang_attr == NULL) && xmlStrEqual(attr->name, BAD_CAST "lang")) { xml_lang_attr = attr; matched = 1; - } + } if((!matched) && (xml_space_attr == NULL) && xmlStrEqual(attr->name, BAD_CAST "space")) { xml_space_attr = attr; matched = 1; @@ -1282,11 +1284,11 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible) xmlListInsert(list, attr); } } - + /* move to the next one */ attr = attr->next; } - + /* special processing for XML attribute kiks in only when we have invisible parents */ if ((parent_visible)) { @@ -1311,7 +1313,7 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible) } if(xml_base_attr != NULL) { xml_base_attr = xmlC14NFixupBaseAttr(ctx, xml_base_attr); - if(xml_base_attr != NULL) { + if(xml_base_attr != NULL) { xmlListInsert(list, xml_base_attr); /* note that we MUST delete returned attr node ourselves! */ @@ -1325,12 +1327,12 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible) break; } - /* - * print out all elements from list + /* + * print out all elements from list */ xmlListWalk(list, (xmlListWalker) xmlC14NPrintAttrs, (const void *) ctx); - /* + /* * Cleanup */ xmlFreePropList(attrs_to_delete); @@ -1338,7 +1340,7 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible) return (0); } -/** +/** * xmlC14NCheckForRelativeNamespaces: * @ctx: the C14N context * @cur: the current element node @@ -1388,23 +1390,23 @@ xmlC14NCheckForRelativeNamespaces(xmlC14NCtxPtr ctx, xmlNodePtr cur) /** * xmlC14NProcessElementNode: - * @ctx: the pointer to C14N context object + * @ctx: the pointer to C14N context object * @cur: the node to process * @visible: this node is visible * @all_parents_visible: whether all the parents of this node are visible - * + * * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n) * * Element Nodes - * If the element is not in the node-set, then the result is obtained - * by processing the namespace axis, then the attribute axis, then - * processing the child nodes of the element that are in the node-set - * (in document order). If the element is in the node-set, then the result - * is an open angle bracket (<), the element QName, the result of - * processing the namespace axis, the result of processing the attribute - * axis, a close angle bracket (>), the result of processing the child - * nodes of the element that are in the node-set (in document order), an - * open angle bracket, a forward slash (/), the element QName, and a close + * If the element is not in the node-set, then the result is obtained + * by processing the namespace axis, then the attribute axis, then + * processing the child nodes of the element that are in the node-set + * (in document order). If the element is in the node-set, then the result + * is an open angle bracket (<), the element QName, the result of + * processing the namespace axis, the result of processing the attribute + * axis, a close angle bracket (>), the result of processing the child + * nodes of the element that are in the node-set (in document order), an + * open angle bracket, a forward slash (/), the element QName, and a close * angle bracket. * * Returns non-negative value on success or negative value on fail @@ -1421,7 +1423,7 @@ xmlC14NProcessElementNode(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible) return (-1); } - /* + /* * Check relative relative namespaces: * implementations of XML canonicalization MUST report an operation * failure on documents containing relative namespace URIs. @@ -1432,13 +1434,13 @@ xmlC14NProcessElementNode(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible) } - /* + /* * Save ns_rendered stack position */ memset(&state, 0, sizeof(state)); xmlC14NVisibleNsStackSave(ctx->ns_rendered, &state); - if (visible) { + if (visible) { if (ctx->parent_is_doc) { /* save this flag into the stack */ parent_is_doc = ctx->parent_is_doc; @@ -1468,14 +1470,14 @@ xmlC14NProcessElementNode(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible) if(visible) { xmlC14NVisibleNsStackShift(ctx->ns_rendered); } - + ret = xmlC14NProcessAttrsAxis(ctx, cur, visible); if (ret < 0) { xmlC14NErrInternal("processing attributes axis"); - return (-1); + return (-1); } - if (visible) { + if (visible) { xmlOutputBufferWriteString(ctx->buf, ">"); } if (cur->children != NULL) { @@ -1501,7 +1503,7 @@ xmlC14NProcessElementNode(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible) } } - /* + /* * Restore ns_rendered stack position */ xmlC14NVisibleNsStackRestore(ctx->ns_rendered, &state); @@ -1510,9 +1512,9 @@ xmlC14NProcessElementNode(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible) /** * xmlC14NProcessNode: - * @ctx: the pointer to C14N context object + * @ctx: the pointer to C14N context object * @cur: the node to process - * + * * Processes the given node * * Returns non-negative value on success or negative value on fail @@ -1537,9 +1539,9 @@ xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur) case XML_TEXT_NODE: /* * Text Nodes - * the string value, except all ampersands are replaced - * by &, all open angle brackets (<) are replaced by <, all closing - * angle brackets (>) are replaced by >, and all #xD characters are + * the string value, except all ampersands are replaced + * by &, all open angle brackets (<) are replaced by <, all closing + * angle brackets (>) are replaced by >, and all #xD characters are * replaced by . */ /* cdata sections are processed as text nodes */ @@ -1559,16 +1561,16 @@ xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur) } break; case XML_PI_NODE: - /* - * Processing Instruction (PI) Nodes- - * The opening PI symbol (). If the string value is empty, - * then the leading space is not added. Also, a trailing #xA is - * rendered after the closing PI symbol for PI children of the - * root node with a lesser document order than the document - * element, and a leading #xA is rendered before the opening PI - * symbol of PI children of the root node with a greater document + /* + * Processing Instruction (PI) Nodes- + * The opening PI symbol (). If the string value is empty, + * then the leading space is not added. Also, a trailing #xA is + * rendered after the closing PI symbol for PI children of the + * root node with a lesser document order than the document + * element, and a leading #xA is rendered before the opening PI + * symbol of PI children of the root node with a greater document * order than the document element. */ if (visible) { @@ -1607,17 +1609,17 @@ xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur) case XML_COMMENT_NODE: /* * Comment Nodes - * Nothing if generating canonical XML without comments. For - * canonical XML with comments, generate the opening comment - * symbol (). Also, a trailing #xA is rendered - * after the closing comment symbol for comment children of the - * root node with a lesser document order than the document - * element, and a leading #xA is rendered before the opening - * comment symbol of comment children of the root node with a - * greater document order than the document element. (Comment - * children of the root node represent comments outside of the - * top-level document element and outside of the document type + * Nothing if generating canonical XML without comments. For + * canonical XML with comments, generate the opening comment + * symbol (). Also, a trailing #xA is rendered + * after the closing comment symbol for comment children of the + * root node with a lesser document order than the document + * element, and a leading #xA is rendered before the opening + * comment symbol of comment children of the root node with a + * greater document order than the document element. (Comment + * children of the root node represent comments outside of the + * top-level document element and outside of the document type * declaration). */ if (visible && ctx->with_comments) { @@ -1687,8 +1689,8 @@ xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur) case XML_XINCLUDE_START: case XML_XINCLUDE_END: #endif - /* - * should be ignored according to "W3C Canonical XML" + /* + * should be ignored according to "W3C Canonical XML" */ break; default: @@ -1701,9 +1703,9 @@ xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur) /** * xmlC14NProcessNodeList: - * @ctx: the pointer to C14N context object + * @ctx: the pointer to C14N context object * @cur: the node to start from - * + * * Processes all nodes in the row starting from cur. * * Returns non-negative value on success or negative value on fail @@ -1728,7 +1730,7 @@ xmlC14NProcessNodeList(xmlC14NCtxPtr ctx, xmlNodePtr cur) /** * xmlC14NFreeCtx: * @ctx: the pointer to C14N context object - * + * * Cleanups the C14N context object. */ @@ -1748,27 +1750,27 @@ xmlC14NFreeCtx(xmlC14NCtxPtr ctx) /** * xmlC14NNewCtx: - * @doc: the XML document for canonization - * @is_visible_callback:the function to use to determine is node visible + * @doc: the XML document for canonization + * @is_visible_callback:the function to use to determine is node visible * or not - * @user_data: the first parameter for @is_visible_callback function + * @user_data: the first parameter for @is_visible_callback function * (in most cases, it is nodes set) * @mode: the c14n mode (see @xmlC14NMode) - * @inclusive_ns_prefixe the list of inclusive namespace prefixes + * @inclusive_ns_prefixe the list of inclusive namespace prefixes * ended with a NULL or NULL if there is no - * inclusive namespaces (only for ` + * inclusive namespaces (only for ` * canonicalization) - * @with_comments: include comments in the result (!=0) or not (==0) - * @buf: the output buffer to store canonical XML; this + * @with_comments: include comments in the result (!=0) or not (==0) + * @buf: the output buffer to store canonical XML; this * buffer MUST have encoder==NULL because C14N requires * UTF-8 output - * + * * Creates new C14N context object to store C14N parameters. * * Returns pointer to newly created object (success) or NULL (fail) */ static xmlC14NCtxPtr -xmlC14NNewCtx(xmlDocPtr doc, +xmlC14NNewCtx(xmlDocPtr doc, xmlC14NIsVisibleCallback is_visible_callback, void* user_data, xmlC14NMode mode, xmlChar ** inclusive_ns_prefixes, int with_comments, xmlOutputBufferPtr buf) @@ -1840,28 +1842,28 @@ xmlC14NNewCtx(xmlDocPtr doc, /** * xmlC14NExecute: - * @doc: the XML document for canonization - * @is_visible_callback:the function to use to determine is node visible + * @doc: the XML document for canonization + * @is_visible_callback:the function to use to determine is node visible * or not - * @user_data: the first parameter for @is_visible_callback function + * @user_data: the first parameter for @is_visible_callback function * (in most cases, it is nodes set) * @mode: the c14n mode (see @xmlC14NMode) - * @inclusive_ns_prefixes: the list of inclusive namespace prefixes + * @inclusive_ns_prefixes: the list of inclusive namespace prefixes * ended with a NULL or NULL if there is no - * inclusive namespaces (only for exclusive + * inclusive namespaces (only for exclusive * canonicalization, ignored otherwise) - * @with_comments: include comments in the result (!=0) or not (==0) - * @buf: the output buffer to store canonical XML; this + * @with_comments: include comments in the result (!=0) or not (==0) + * @buf: the output buffer to store canonical XML; this * buffer MUST have encoder==NULL because C14N requires * UTF-8 output - * + * * Dumps the canonized image of given XML document into the provided buffer. * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n) * - * Returns non-negative value on success or a negative value on fail + * Returns non-negative value on success or a negative value on fail */ -int +int xmlC14NExecute(xmlDocPtr doc, xmlC14NIsVisibleCallback is_visible_callback, void* user_data, int mode, xmlChar **inclusive_ns_prefixes, int with_comments, xmlOutputBufferPtr buf) { @@ -1875,15 +1877,15 @@ xmlC14NExecute(xmlDocPtr doc, xmlC14NIsVisibleCallback is_visible_callback, return (-1); } - /* for backward compatibility, we have to have "mode" as "int" + /* for backward compatibility, we have to have "mode" as "int" and here we check that user gives valid value */ switch(mode) { case XML_C14N_1_0: case XML_C14N_EXCLUSIVE_1_0: - case XML_C14N_1_1: + case XML_C14N_1_1: c14n_mode = (xmlC14NMode)mode; break; - default: + default: xmlC14NErrParam("invalid mode for executing c14n"); return (-1); } @@ -1897,7 +1899,7 @@ xmlC14NExecute(xmlDocPtr doc, xmlC14NIsVisibleCallback is_visible_callback, return (-1); } - ctx = xmlC14NNewCtx(doc, is_visible_callback, user_data, + ctx = xmlC14NNewCtx(doc, is_visible_callback, user_data, c14n_mode, inclusive_ns_prefixes, with_comments, buf); if (ctx == NULL) { @@ -1908,12 +1910,12 @@ xmlC14NExecute(xmlDocPtr doc, xmlC14NIsVisibleCallback is_visible_callback, - /* + /* * Root Node - * The root node is the parent of the top-level document element. The - * result of processing each of its child nodes that is in the node-set - * in document order. The root node does not generate a byte order mark, - * XML declaration, nor anything from within the document type + * The root node is the parent of the top-level document element. The + * result of processing each of its child nodes that is in the node-set + * in document order. The root node does not generate a byte order mark, + * XML declaration, nor anything from within the document type * declaration. */ if (doc->children != NULL) { @@ -1935,7 +1937,7 @@ xmlC14NExecute(xmlDocPtr doc, xmlC14NIsVisibleCallback is_visible_callback, return (-1); } - /* + /* * Cleanup */ xmlC14NFreeCtx(ctx); @@ -1944,30 +1946,30 @@ xmlC14NExecute(xmlDocPtr doc, xmlC14NIsVisibleCallback is_visible_callback, /** * xmlC14NDocSaveTo: - * @doc: the XML document for canonization - * @nodes: the nodes set to be included in the canonized image - * or NULL if all document nodes should be included + * @doc: the XML document for canonization + * @nodes: the nodes set to be included in the canonized image + * or NULL if all document nodes should be included * @mode: the c14n mode (see @xmlC14NMode) - * @inclusive_ns_prefixes: the list of inclusive namespace prefixes + * @inclusive_ns_prefixes: the list of inclusive namespace prefixes * ended with a NULL or NULL if there is no - * inclusive namespaces (only for exclusive + * inclusive namespaces (only for exclusive * canonicalization, ignored otherwise) - * @with_comments: include comments in the result (!=0) or not (==0) - * @buf: the output buffer to store canonical XML; this + * @with_comments: include comments in the result (!=0) or not (==0) + * @buf: the output buffer to store canonical XML; this * buffer MUST have encoder==NULL because C14N requires * UTF-8 output - * + * * Dumps the canonized image of given XML document into the provided buffer. * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n) * - * Returns non-negative value on success or a negative value on fail + * Returns non-negative value on success or a negative value on fail */ int xmlC14NDocSaveTo(xmlDocPtr doc, xmlNodeSetPtr nodes, int mode, xmlChar ** inclusive_ns_prefixes, int with_comments, xmlOutputBufferPtr buf) { - return(xmlC14NExecute(doc, + return(xmlC14NExecute(doc, (xmlC14NIsVisibleCallback)xmlC14NIsNodeInNodeset, nodes, mode, @@ -1979,24 +1981,24 @@ xmlC14NDocSaveTo(xmlDocPtr doc, xmlNodeSetPtr nodes, /** * xmlC14NDocDumpMemory: - * @doc: the XML document for canonization - * @nodes: the nodes set to be included in the canonized image - * or NULL if all document nodes should be included + * @doc: the XML document for canonization + * @nodes: the nodes set to be included in the canonized image + * or NULL if all document nodes should be included * @mode: the c14n mode (see @xmlC14NMode) - * @inclusive_ns_prefixes: the list of inclusive namespace prefixes + * @inclusive_ns_prefixes: the list of inclusive namespace prefixes * ended with a NULL or NULL if there is no - * inclusive namespaces (only for exclusive + * inclusive namespaces (only for exclusive * canonicalization, ignored otherwise) - * @with_comments: include comments in the result (!=0) or not (==0) - * @doc_txt_ptr: the memory pointer for allocated canonical XML text; + * @with_comments: include comments in the result (!=0) or not (==0) + * @doc_txt_ptr: the memory pointer for allocated canonical XML text; * the caller of this functions is responsible for calling - * xmlFree() to free allocated memory - * + * xmlFree() to free allocated memory + * * Dumps the canonized image of given XML document into memory. * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n) * - * Returns the number of bytes written on success or a negative value on fail + * Returns the number of bytes written on success or a negative value on fail */ int xmlC14NDocDumpMemory(xmlDocPtr doc, xmlNodeSetPtr nodes, @@ -2014,7 +2016,7 @@ xmlC14NDocDumpMemory(xmlDocPtr doc, xmlNodeSetPtr nodes, *doc_txt_ptr = NULL; /* - * create memory buffer with UTF8 (default) encoding + * create memory buffer with UTF8 (default) encoding */ buf = xmlAllocOutputBuffer(NULL); if (buf == NULL) { @@ -2033,9 +2035,9 @@ xmlC14NDocDumpMemory(xmlDocPtr doc, xmlNodeSetPtr nodes, return (-1); } - ret = buf->buffer->use; + ret = xmlBufUse(buf->buffer); if (ret > 0) { - *doc_txt_ptr = xmlStrndup(buf->buffer->content, ret); + *doc_txt_ptr = xmlStrndup(xmlBufContent(buf->buffer), ret); } (void) xmlOutputBufferClose(buf); @@ -2048,26 +2050,26 @@ xmlC14NDocDumpMemory(xmlDocPtr doc, xmlNodeSetPtr nodes, /** * xmlC14NDocSave: - * @doc: the XML document for canonization - * @nodes: the nodes set to be included in the canonized image - * or NULL if all document nodes should be included + * @doc: the XML document for canonization + * @nodes: the nodes set to be included in the canonized image + * or NULL if all document nodes should be included * @mode: the c14n mode (see @xmlC14NMode) - * @inclusive_ns_prefixes: the list of inclusive namespace prefixes + * @inclusive_ns_prefixes: the list of inclusive namespace prefixes * ended with a NULL or NULL if there is no - * inclusive namespaces (only for exclusive + * inclusive namespaces (only for exclusive * canonicalization, ignored otherwise) - * @with_comments: include comments in the result (!=0) or not (==0) - * @filename: the filename to store canonical XML image - * @compression: the compression level (zlib requred): + * @with_comments: include comments in the result (!=0) or not (==0) + * @filename: the filename to store canonical XML image + * @compression: the compression level (zlib requred): * -1 - libxml default, - * 0 - uncompressed, + * 0 - uncompressed, * >0 - compression level - * + * * Dumps the canonized image of given XML document into the file. * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n) * - * Returns the number of bytes written success or a negative value on fail + * Returns the number of bytes written success or a negative value on fail */ int xmlC14NDocSave(xmlDocPtr doc, xmlNodeSetPtr nodes, @@ -2086,7 +2088,7 @@ xmlC14NDocSave(xmlDocPtr doc, xmlNodeSetPtr nodes, compression = xmlGetCompressMode(); #endif - /* + /* * save the content to a temp buffer, use default UTF8 encoding. */ buf = xmlOutputBufferCreateFilename(filename, NULL, compression); @@ -2106,8 +2108,8 @@ xmlC14NDocSave(xmlDocPtr doc, xmlNodeSetPtr nodes, return (-1); } - /* - * get the numbers of bytes written + /* + * get the numbers of bytes written */ ret = xmlOutputBufferClose(buf); return (ret); @@ -2121,14 +2123,14 @@ xmlC14NDocSave(xmlDocPtr doc, xmlNodeSetPtr nodes, #define growBufferReentrant() { \ buffer_size *= 2; \ buffer = (xmlChar *) \ - xmlRealloc(buffer, buffer_size * sizeof(xmlChar)); \ + xmlRealloc(buffer, buffer_size * sizeof(xmlChar)); \ if (buffer == NULL) { \ xmlC14NErrMemory("growing buffer"); \ return(NULL); \ } \ } -/** +/** * xmlC11NNormalizeString: * @input: the input string * @mode: the normalization mode (attribute, comment, PI or text) diff --git a/lib/3rdparty/libxml2/catalog.c b/lib/3rdparty/libxml2/catalog.c index f33a0aa9909..61cce03d7cc 100644 --- a/lib/3rdparty/libxml2/catalog.c +++ b/lib/3rdparty/libxml2/catalog.c @@ -1,5 +1,5 @@ /** - * catalog.c: set of generic Catalog related routines + * catalog.c: set of generic Catalog related routines * * Reference: SGML Open Technical Resolution TR9401:1997. * http://www.jclark.com/sp/catalog.htm @@ -41,6 +41,8 @@ #include #include +#include "buf.h" + #define MAX_DELEGATE 50 #define MAX_CATAL_DEPTH 50 @@ -60,7 +62,7 @@ *> values "system" and "public". I have made the default be "system" to *> match yours. */ -#define TODO \ +#define TODO \ xmlGenericError(xmlGenericErrorContext, \ "Unimplemented block at %s:%d\n", \ __FILE__, __LINE__); @@ -206,7 +208,7 @@ static int xmlCatalogInitialized = 0; /************************************************************************ * * - * Catalog error handlers * + * Catalog error handlers * * * ************************************************************************/ @@ -259,9 +261,9 @@ xmlCatalogErr(xmlCatalogEntryPtr catal, xmlNodePtr node, int error, * @name: name of the entry * @value: value of the entry * @prefer: the PUBLIC vs. SYSTEM current preference value - * @group: for members of a group, the group entry + * @group: for members of a group, the group entry * - * create a new Catalog entry, this type is shared both by XML and + * create a new Catalog entry, this type is shared both by XML and * SGML catalogs, but the acceptable types values differs. * * Returns the xmlCatalogEntryPtr or NULL in case of error @@ -399,7 +401,7 @@ xmlFreeCatalogHashEntryList(xmlCatalogEntryPtr catal) { * @type: type of catalog * @prefer: the PUBLIC vs. SYSTEM current preference value * - * create a new Catalog, this type is shared both by XML and + * create a new Catalog, this type is shared both by XML and * SGML catalogs, but the acceptable types values differs. * * Returns the xmlCatalogPtr or NULL in case of error @@ -567,7 +569,7 @@ static void xmlDumpXMLCatalogNode(xmlCatalogEntryPtr catal, xmlNodePtr catalog, xns = xmlSearchNsByHref(doc, node, XML_XML_NAMESPACE); if (xns != NULL) xmlSetNsProp(node, xns, BAD_CAST "base", - cur->value); + cur->value); } switch (cur->prefer) { case XML_CATA_PREFER_NONE: @@ -685,7 +687,7 @@ BAD_CAST "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"); xmlAddChild((xmlNodePtr) doc, catalog); xmlDumpXMLCatalogNode(catal, catalog, doc, ns, NULL); - + /* * reserialize it */ @@ -822,7 +824,7 @@ xmlCatalogUnWrapURN(const xmlChar *urn) { if (xmlStrncmp(urn, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1)) return(NULL); urn += sizeof(XML_URN_PUBID) - 1; - + while (*urn != 0) { if (i > sizeof(result) - 4) break; @@ -912,10 +914,7 @@ xmlParseCatalogFile(const char *filename) { inputStream->filename = (char *) xmlCanonicPath((const xmlChar *)filename); inputStream->buf = buf; - inputStream->base = inputStream->buf->buffer->content; - inputStream->cur = inputStream->buf->buffer->content; - inputStream->end = - &inputStream->buf->buffer->content[inputStream->buf->buffer->use]; + xmlBufResetInput(buf->buffer, inputStream); inputPush(ctxt, inputStream); if ((ctxt->directory == NULL) && (directory == NULL)) @@ -938,7 +937,7 @@ xmlParseCatalogFile(const char *filename) { ctxt->myDoc = NULL; } xmlFreeParserCtxt(ctxt); - + return(ret); } @@ -1328,7 +1327,7 @@ xmlParseXMLCatalogNodeList(xmlNodePtr cur, xmlCatalogPrefer prefer, * * Parses the catalog file to extract the XML tree and then analyze the * tree to build a list of Catalog entries corresponding to this catalog - * + * * Returns the resulting Catalog entries list */ static xmlCatalogEntryPtr @@ -1396,19 +1395,17 @@ xmlParseXMLCatalogFile(xmlCatalogPrefer prefer, const xmlChar *filename) { * @catal: an existing but incomplete catalog entry * * Fetch and parse the subcatalog referenced by an entry - * + * * Returns 0 in case of success, -1 otherwise */ static int xmlFetchXMLCatalogFile(xmlCatalogEntryPtr catal) { xmlCatalogEntryPtr doc; - if (catal == NULL) + if (catal == NULL) return(-1); if (catal->URL == NULL) return(-1); - if (catal->children != NULL) - return(-1); /* * lock the whole catalog for modification @@ -1497,7 +1494,7 @@ xmlAddXMLCatalog(xmlCatalogEntryPtr catal, const xmlChar *type, xmlCatalogEntryType typ; int doregister = 0; - if ((catal == NULL) || + if ((catal == NULL) || ((catal->type != XML_CATA_CATALOG) && (catal->type != XML_CATA_BROKEN_CATALOG))) return(-1); @@ -1573,7 +1570,7 @@ xmlDelXMLCatalog(xmlCatalogEntryPtr catal, const xmlChar *value) { xmlCatalogEntryPtr cur; int ret = 0; - if ((catal == NULL) || + if ((catal == NULL) || ((catal->type != XML_CATA_CATALOG) && (catal->type != XML_CATA_BROKEN_CATALOG))) return(-1); @@ -1788,7 +1785,7 @@ xmlCatalogXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID, } if (nbList < MAX_DELEGATE) delegates[nbList++] = cur->URL; - + if (cur->children == NULL) { xmlFetchXMLCatalogFile(cur); } @@ -2001,7 +1998,7 @@ xmlCatalogListXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID, xmlChar *ret = NULL; xmlChar *urnID = NULL; xmlChar *normid; - + if (catal == NULL) return(NULL); if ((pubID == NULL) && (sysID == NULL)) @@ -2010,7 +2007,7 @@ xmlCatalogListXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID, normid = xmlCatalogNormalizePublic(pubID); if (normid != NULL) pubID = (*normid != 0 ? normid : NULL); - + if (!xmlStrncmp(pubID, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1)) { urnID = xmlCatalogUnWrapURN(pubID); if (xmlDebugCatalogs) { @@ -2090,7 +2087,7 @@ static xmlChar * xmlCatalogListXMLResolveURI(xmlCatalogEntryPtr catal, const xmlChar *URI) { xmlChar *ret = NULL; xmlChar *urnID = NULL; - + if (catal == NULL) return(NULL); if (URI == NULL) @@ -2150,7 +2147,7 @@ xmlCatalogListXMLResolveURI(xmlCatalogEntryPtr catal, const xmlChar *URI) { */ static const xmlChar * xmlParseSGMLCatalogComment(const xmlChar *cur) { - if ((cur[0] != '-') || (cur[1] != '-')) + if ((cur[0] != '-') || (cur[1] != '-')) return(cur); SKIP(2); while ((cur[0] != 0) && ((cur[0] != '-') || ((cur[1] != '-')))) @@ -2685,7 +2682,7 @@ xmlLoadACatalog(const char *filename) first = content; - + while ((*first != 0) && (*first != '-') && (*first != '<') && (!(((*first >= 'A') && (*first <= 'Z')) || ((*first >= 'a') && (*first <= 'z'))))) @@ -2780,7 +2777,7 @@ xmlACatalogResolveSystem(xmlCatalogPtr catal, const xmlChar *sysID) { if ((sysID == NULL) || (catal == NULL)) return(NULL); - + if (xmlDebugCatalogs) xmlGenericError(xmlGenericErrorContext, "Resolve sysID %s\n", sysID); @@ -2815,7 +2812,7 @@ xmlACatalogResolvePublic(xmlCatalogPtr catal, const xmlChar *pubID) { if ((pubID == NULL) || (catal == NULL)) return(NULL); - + if (xmlDebugCatalogs) xmlGenericError(xmlGenericErrorContext, "Resolve pubID %s\n", pubID); @@ -2934,7 +2931,7 @@ xmlACatalogDump(xmlCatalogPtr catal, FILE *out) { } else { xmlHashScan(catal->sgml, (xmlHashScanner) xmlCatalogDumpEntry, out); - } + } } #endif /* LIBXML_OUTPUT_ENABLED */ @@ -2942,7 +2939,7 @@ xmlACatalogDump(xmlCatalogPtr catal, FILE *out) { * xmlACatalogAdd: * @catal: a Catalog * @type: the type of record to add to the catalog - * @orig: the system, public or prefix to match + * @orig: the system, public or prefix to match * @replace: the replacement value for the match * * Add an entry in the catalog, it may overwrite existing but @@ -3001,7 +2998,7 @@ xmlACatalogRemove(xmlCatalogPtr catal, const xmlChar *value) { (xmlHashDeallocator) xmlFreeCatalogEntry); if (res == 0) res = 1; - } + } return(res); } @@ -3060,7 +3057,7 @@ xmlCatalogIsEmpty(xmlCatalogPtr catal) { return(1); if (res < 0) return(-1); - } + } return(0); } @@ -3083,7 +3080,7 @@ xmlInitializeCatalogData(void) { if (xmlCatalogInitialized != 0) return; - if (getenv("XML_DEBUG_CATALOG")) + if (getenv("XML_DEBUG_CATALOG")) xmlDebugCatalogs = 1; xmlCatalogMutex = xmlNewRMutex(); @@ -3104,7 +3101,7 @@ xmlInitializeCatalog(void) { xmlInitializeCatalogData(); xmlRMutexLock(xmlCatalogMutex); - if (getenv("XML_DEBUG_CATALOG")) + if (getenv("XML_DEBUG_CATALOG")) xmlDebugCatalogs = 1; if (xmlDefaultCatalog == NULL) { @@ -3127,7 +3124,7 @@ xmlInitializeCatalog(void) { unsigned long len = GetModuleFileNameA(hmodule, buf, 255); if (len != 0) { char* p = &(buf[len]); - while (*p != '\\' && p > buf) + while (*p != '\\' && p > buf) p--; if (p != buf) { xmlChar* uri; @@ -3146,15 +3143,15 @@ xmlInitializeCatalog(void) { catalogs = XML_XML_DEFAULT_CATALOG; #endif - catal = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE, + catal = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE, xmlCatalogDefaultPrefer); if (catal != NULL) { - /* the XML_CATALOG_FILES envvar is allowed to contain a + /* the XML_CATALOG_FILES envvar is allowed to contain a space-separated list of entries. */ cur = catalogs; nextent = &catal->xml; while (*cur != '\0') { - while (xmlIsBlank_ch(*cur)) + while (xmlIsBlank_ch(*cur)) cur++; if (*cur != 0) { paths = cur; @@ -3279,7 +3276,7 @@ xmlCatalogCleanup(void) { xmlGenericError(xmlGenericErrorContext, "Catalogs cleanup\n"); if (xmlCatalogXMLFiles != NULL) - xmlHashFree(xmlCatalogXMLFiles, + xmlHashFree(xmlCatalogXMLFiles, (xmlHashDeallocator)xmlFreeCatalogHashEntryList); xmlCatalogXMLFiles = NULL; if (xmlDefaultCatalog != NULL) @@ -3394,7 +3391,7 @@ xmlCatalogDump(FILE *out) { /** * xmlCatalogAdd: * @type: the type of record to add to the catalog - * @orig: the system, public or prefix to match + * @orig: the system, public or prefix to match * @replace: the replacement value for the match * * Add an entry in the catalog, it may overwrite existing but @@ -3425,7 +3422,7 @@ xmlCatalogAdd(const xmlChar *type, const xmlChar *orig, const xmlChar *replace) xmlRMutexUnlock(xmlCatalogMutex); return(0); - } + } res = xmlACatalogAdd(xmlDefaultCatalog, type, orig, replace); xmlRMutexUnlock(xmlCatalogMutex); @@ -3613,7 +3610,7 @@ xmlCatalogFreeLocal(void *catalogs) { * * Returns the updated list */ -void * +void * xmlCatalogAddLocal(void *catalogs, const xmlChar *URL) { xmlCatalogEntryPtr catal, add; @@ -3633,7 +3630,7 @@ xmlCatalogAddLocal(void *catalogs, const xmlChar *URL) { return(catalogs); catal = (xmlCatalogEntryPtr) catalogs; - if (catal == NULL) + if (catal == NULL) return((void *) add); while (catal->next != NULL) @@ -3648,7 +3645,7 @@ xmlCatalogAddLocal(void *catalogs, const xmlChar *URL) { * @pubID: the public ID string * @sysID: the system ID string * - * Do a complete resolution lookup of an External Identifier using a + * Do a complete resolution lookup of an External Identifier using a * document's private catalog list * * Returns the URI of the resource or NULL if not found, it must be freed @@ -3693,7 +3690,7 @@ xmlCatalogLocalResolve(void *catalogs, const xmlChar *pubID, * @catalogs: a document's list of catalogs * @URI: the URI * - * Do a complete resolution lookup of an URI using a + * Do a complete resolution lookup of an URI using a * document's private catalog list * * Returns the URI of the resource or NULL if not found, it must be freed @@ -3754,7 +3751,7 @@ xmlCatalogGetSystem(const xmlChar *sysID) { if (sysID == NULL) return(NULL); - + /* * Check first the XML catalogs */ @@ -3798,7 +3795,7 @@ xmlCatalogGetPublic(const xmlChar *pubID) { if (pubID == NULL) return(NULL); - + /* * Check first the XML catalogs */ diff --git a/lib/3rdparty/libxml2/chvalid.c b/lib/3rdparty/libxml2/chvalid.c index 00dd962c335..06e8db06422 100644 --- a/lib/3rdparty/libxml2/chvalid.c +++ b/lib/3rdparty/libxml2/chvalid.c @@ -46,109 +46,109 @@ const unsigned char xmlIsPubidChar_tab[256] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const xmlChSRange xmlIsBaseChar_srng[] = { {0x100, 0x131}, - {0x134, 0x13e}, {0x141, 0x148}, {0x14a, 0x17e}, {0x180, 0x1c3}, - {0x1cd, 0x1f0}, {0x1f4, 0x1f5}, {0x1fa, 0x217}, {0x250, 0x2a8}, - {0x2bb, 0x2c1}, {0x386, 0x386}, {0x388, 0x38a}, {0x38c, 0x38c}, - {0x38e, 0x3a1}, {0x3a3, 0x3ce}, {0x3d0, 0x3d6}, {0x3da, 0x3da}, - {0x3dc, 0x3dc}, {0x3de, 0x3de}, {0x3e0, 0x3e0}, {0x3e2, 0x3f3}, - {0x401, 0x40c}, {0x40e, 0x44f}, {0x451, 0x45c}, {0x45e, 0x481}, - {0x490, 0x4c4}, {0x4c7, 0x4c8}, {0x4cb, 0x4cc}, {0x4d0, 0x4eb}, - {0x4ee, 0x4f5}, {0x4f8, 0x4f9}, {0x531, 0x556}, {0x559, 0x559}, - {0x561, 0x586}, {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a}, - {0x641, 0x64a}, {0x671, 0x6b7}, {0x6ba, 0x6be}, {0x6c0, 0x6ce}, - {0x6d0, 0x6d3}, {0x6d5, 0x6d5}, {0x6e5, 0x6e6}, {0x905, 0x939}, - {0x93d, 0x93d}, {0x958, 0x961}, {0x985, 0x98c}, {0x98f, 0x990}, - {0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9}, - {0x9dc, 0x9dd}, {0x9df, 0x9e1}, {0x9f0, 0x9f1}, {0xa05, 0xa0a}, - {0xa0f, 0xa10}, {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa32, 0xa33}, - {0xa35, 0xa36}, {0xa38, 0xa39}, {0xa59, 0xa5c}, {0xa5e, 0xa5e}, - {0xa72, 0xa74}, {0xa85, 0xa8b}, {0xa8d, 0xa8d}, {0xa8f, 0xa91}, - {0xa93, 0xaa8}, {0xaaa, 0xab0}, {0xab2, 0xab3}, {0xab5, 0xab9}, - {0xabd, 0xabd}, {0xae0, 0xae0}, {0xb05, 0xb0c}, {0xb0f, 0xb10}, - {0xb13, 0xb28}, {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb36, 0xb39}, - {0xb3d, 0xb3d}, {0xb5c, 0xb5d}, {0xb5f, 0xb61}, {0xb85, 0xb8a}, - {0xb8e, 0xb90}, {0xb92, 0xb95}, {0xb99, 0xb9a}, {0xb9c, 0xb9c}, - {0xb9e, 0xb9f}, {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb5}, - {0xbb7, 0xbb9}, {0xc05, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28}, - {0xc2a, 0xc33}, {0xc35, 0xc39}, {0xc60, 0xc61}, {0xc85, 0xc8c}, - {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, - {0xcde, 0xcde}, {0xce0, 0xce1}, {0xd05, 0xd0c}, {0xd0e, 0xd10}, - {0xd12, 0xd28}, {0xd2a, 0xd39}, {0xd60, 0xd61}, {0xe01, 0xe2e}, - {0xe30, 0xe30}, {0xe32, 0xe33}, {0xe40, 0xe45}, {0xe81, 0xe82}, - {0xe84, 0xe84}, {0xe87, 0xe88}, {0xe8a, 0xe8a}, {0xe8d, 0xe8d}, - {0xe94, 0xe97}, {0xe99, 0xe9f}, {0xea1, 0xea3}, {0xea5, 0xea5}, - {0xea7, 0xea7}, {0xeaa, 0xeab}, {0xead, 0xeae}, {0xeb0, 0xeb0}, - {0xeb2, 0xeb3}, {0xebd, 0xebd}, {0xec0, 0xec4}, {0xf40, 0xf47}, - {0xf49, 0xf69}, {0x10a0, 0x10c5}, {0x10d0, 0x10f6}, {0x1100, 0x1100}, - {0x1102, 0x1103}, {0x1105, 0x1107}, {0x1109, 0x1109}, {0x110b, 0x110c}, - {0x110e, 0x1112}, {0x113c, 0x113c}, {0x113e, 0x113e}, {0x1140, 0x1140}, - {0x114c, 0x114c}, {0x114e, 0x114e}, {0x1150, 0x1150}, {0x1154, 0x1155}, - {0x1159, 0x1159}, {0x115f, 0x1161}, {0x1163, 0x1163}, {0x1165, 0x1165}, - {0x1167, 0x1167}, {0x1169, 0x1169}, {0x116d, 0x116e}, {0x1172, 0x1173}, - {0x1175, 0x1175}, {0x119e, 0x119e}, {0x11a8, 0x11a8}, {0x11ab, 0x11ab}, - {0x11ae, 0x11af}, {0x11b7, 0x11b8}, {0x11ba, 0x11ba}, {0x11bc, 0x11c2}, - {0x11eb, 0x11eb}, {0x11f0, 0x11f0}, {0x11f9, 0x11f9}, {0x1e00, 0x1e9b}, - {0x1ea0, 0x1ef9}, {0x1f00, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, - {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b}, - {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, - {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3}, - {0x1fd6, 0x1fdb}, {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc}, - {0x2126, 0x2126}, {0x212a, 0x212b}, {0x212e, 0x212e}, {0x2180, 0x2182}, +static const xmlChSRange xmlIsBaseChar_srng[] = { {0x100, 0x131}, + {0x134, 0x13e}, {0x141, 0x148}, {0x14a, 0x17e}, {0x180, 0x1c3}, + {0x1cd, 0x1f0}, {0x1f4, 0x1f5}, {0x1fa, 0x217}, {0x250, 0x2a8}, + {0x2bb, 0x2c1}, {0x386, 0x386}, {0x388, 0x38a}, {0x38c, 0x38c}, + {0x38e, 0x3a1}, {0x3a3, 0x3ce}, {0x3d0, 0x3d6}, {0x3da, 0x3da}, + {0x3dc, 0x3dc}, {0x3de, 0x3de}, {0x3e0, 0x3e0}, {0x3e2, 0x3f3}, + {0x401, 0x40c}, {0x40e, 0x44f}, {0x451, 0x45c}, {0x45e, 0x481}, + {0x490, 0x4c4}, {0x4c7, 0x4c8}, {0x4cb, 0x4cc}, {0x4d0, 0x4eb}, + {0x4ee, 0x4f5}, {0x4f8, 0x4f9}, {0x531, 0x556}, {0x559, 0x559}, + {0x561, 0x586}, {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a}, + {0x641, 0x64a}, {0x671, 0x6b7}, {0x6ba, 0x6be}, {0x6c0, 0x6ce}, + {0x6d0, 0x6d3}, {0x6d5, 0x6d5}, {0x6e5, 0x6e6}, {0x905, 0x939}, + {0x93d, 0x93d}, {0x958, 0x961}, {0x985, 0x98c}, {0x98f, 0x990}, + {0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9}, + {0x9dc, 0x9dd}, {0x9df, 0x9e1}, {0x9f0, 0x9f1}, {0xa05, 0xa0a}, + {0xa0f, 0xa10}, {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa32, 0xa33}, + {0xa35, 0xa36}, {0xa38, 0xa39}, {0xa59, 0xa5c}, {0xa5e, 0xa5e}, + {0xa72, 0xa74}, {0xa85, 0xa8b}, {0xa8d, 0xa8d}, {0xa8f, 0xa91}, + {0xa93, 0xaa8}, {0xaaa, 0xab0}, {0xab2, 0xab3}, {0xab5, 0xab9}, + {0xabd, 0xabd}, {0xae0, 0xae0}, {0xb05, 0xb0c}, {0xb0f, 0xb10}, + {0xb13, 0xb28}, {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb36, 0xb39}, + {0xb3d, 0xb3d}, {0xb5c, 0xb5d}, {0xb5f, 0xb61}, {0xb85, 0xb8a}, + {0xb8e, 0xb90}, {0xb92, 0xb95}, {0xb99, 0xb9a}, {0xb9c, 0xb9c}, + {0xb9e, 0xb9f}, {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb5}, + {0xbb7, 0xbb9}, {0xc05, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28}, + {0xc2a, 0xc33}, {0xc35, 0xc39}, {0xc60, 0xc61}, {0xc85, 0xc8c}, + {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, + {0xcde, 0xcde}, {0xce0, 0xce1}, {0xd05, 0xd0c}, {0xd0e, 0xd10}, + {0xd12, 0xd28}, {0xd2a, 0xd39}, {0xd60, 0xd61}, {0xe01, 0xe2e}, + {0xe30, 0xe30}, {0xe32, 0xe33}, {0xe40, 0xe45}, {0xe81, 0xe82}, + {0xe84, 0xe84}, {0xe87, 0xe88}, {0xe8a, 0xe8a}, {0xe8d, 0xe8d}, + {0xe94, 0xe97}, {0xe99, 0xe9f}, {0xea1, 0xea3}, {0xea5, 0xea5}, + {0xea7, 0xea7}, {0xeaa, 0xeab}, {0xead, 0xeae}, {0xeb0, 0xeb0}, + {0xeb2, 0xeb3}, {0xebd, 0xebd}, {0xec0, 0xec4}, {0xf40, 0xf47}, + {0xf49, 0xf69}, {0x10a0, 0x10c5}, {0x10d0, 0x10f6}, {0x1100, 0x1100}, + {0x1102, 0x1103}, {0x1105, 0x1107}, {0x1109, 0x1109}, {0x110b, 0x110c}, + {0x110e, 0x1112}, {0x113c, 0x113c}, {0x113e, 0x113e}, {0x1140, 0x1140}, + {0x114c, 0x114c}, {0x114e, 0x114e}, {0x1150, 0x1150}, {0x1154, 0x1155}, + {0x1159, 0x1159}, {0x115f, 0x1161}, {0x1163, 0x1163}, {0x1165, 0x1165}, + {0x1167, 0x1167}, {0x1169, 0x1169}, {0x116d, 0x116e}, {0x1172, 0x1173}, + {0x1175, 0x1175}, {0x119e, 0x119e}, {0x11a8, 0x11a8}, {0x11ab, 0x11ab}, + {0x11ae, 0x11af}, {0x11b7, 0x11b8}, {0x11ba, 0x11ba}, {0x11bc, 0x11c2}, + {0x11eb, 0x11eb}, {0x11f0, 0x11f0}, {0x11f9, 0x11f9}, {0x1e00, 0x1e9b}, + {0x1ea0, 0x1ef9}, {0x1f00, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, + {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b}, + {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, + {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3}, + {0x1fd6, 0x1fdb}, {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc}, + {0x2126, 0x2126}, {0x212a, 0x212b}, {0x212e, 0x212e}, {0x2180, 0x2182}, {0x3041, 0x3094}, {0x30a1, 0x30fa}, {0x3105, 0x312c}, {0xac00, 0xd7a3}}; const xmlChRangeGroup xmlIsBaseCharGroup = {197, 0, xmlIsBaseChar_srng, (xmlChLRangePtr)0}; -static const xmlChSRange xmlIsChar_srng[] = { {0x100, 0xd7ff}, +static const xmlChSRange xmlIsChar_srng[] = { {0x100, 0xd7ff}, {0xe000, 0xfffd}}; static const xmlChLRange xmlIsChar_lrng[] = { {0x10000, 0x10ffff}}; const xmlChRangeGroup xmlIsCharGroup = {2, 1, xmlIsChar_srng, xmlIsChar_lrng}; -static const xmlChSRange xmlIsCombining_srng[] = { {0x300, 0x345}, - {0x360, 0x361}, {0x483, 0x486}, {0x591, 0x5a1}, {0x5a3, 0x5b9}, - {0x5bb, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4}, - {0x64b, 0x652}, {0x670, 0x670}, {0x6d6, 0x6dc}, {0x6dd, 0x6df}, - {0x6e0, 0x6e4}, {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x901, 0x903}, - {0x93c, 0x93c}, {0x93e, 0x94c}, {0x94d, 0x94d}, {0x951, 0x954}, - {0x962, 0x963}, {0x981, 0x983}, {0x9bc, 0x9bc}, {0x9be, 0x9be}, - {0x9bf, 0x9bf}, {0x9c0, 0x9c4}, {0x9c7, 0x9c8}, {0x9cb, 0x9cd}, - {0x9d7, 0x9d7}, {0x9e2, 0x9e3}, {0xa02, 0xa02}, {0xa3c, 0xa3c}, - {0xa3e, 0xa3e}, {0xa3f, 0xa3f}, {0xa40, 0xa42}, {0xa47, 0xa48}, - {0xa4b, 0xa4d}, {0xa70, 0xa71}, {0xa81, 0xa83}, {0xabc, 0xabc}, - {0xabe, 0xac5}, {0xac7, 0xac9}, {0xacb, 0xacd}, {0xb01, 0xb03}, - {0xb3c, 0xb3c}, {0xb3e, 0xb43}, {0xb47, 0xb48}, {0xb4b, 0xb4d}, - {0xb56, 0xb57}, {0xb82, 0xb83}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8}, - {0xbca, 0xbcd}, {0xbd7, 0xbd7}, {0xc01, 0xc03}, {0xc3e, 0xc44}, - {0xc46, 0xc48}, {0xc4a, 0xc4d}, {0xc55, 0xc56}, {0xc82, 0xc83}, - {0xcbe, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xcd5, 0xcd6}, - {0xd02, 0xd03}, {0xd3e, 0xd43}, {0xd46, 0xd48}, {0xd4a, 0xd4d}, - {0xd57, 0xd57}, {0xe31, 0xe31}, {0xe34, 0xe3a}, {0xe47, 0xe4e}, - {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, {0xebb, 0xebc}, {0xec8, 0xecd}, - {0xf18, 0xf19}, {0xf35, 0xf35}, {0xf37, 0xf37}, {0xf39, 0xf39}, - {0xf3e, 0xf3e}, {0xf3f, 0xf3f}, {0xf71, 0xf84}, {0xf86, 0xf8b}, - {0xf90, 0xf95}, {0xf97, 0xf97}, {0xf99, 0xfad}, {0xfb1, 0xfb7}, - {0xfb9, 0xfb9}, {0x20d0, 0x20dc}, {0x20e1, 0x20e1}, {0x302a, 0x302f}, +static const xmlChSRange xmlIsCombining_srng[] = { {0x300, 0x345}, + {0x360, 0x361}, {0x483, 0x486}, {0x591, 0x5a1}, {0x5a3, 0x5b9}, + {0x5bb, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4}, + {0x64b, 0x652}, {0x670, 0x670}, {0x6d6, 0x6dc}, {0x6dd, 0x6df}, + {0x6e0, 0x6e4}, {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x901, 0x903}, + {0x93c, 0x93c}, {0x93e, 0x94c}, {0x94d, 0x94d}, {0x951, 0x954}, + {0x962, 0x963}, {0x981, 0x983}, {0x9bc, 0x9bc}, {0x9be, 0x9be}, + {0x9bf, 0x9bf}, {0x9c0, 0x9c4}, {0x9c7, 0x9c8}, {0x9cb, 0x9cd}, + {0x9d7, 0x9d7}, {0x9e2, 0x9e3}, {0xa02, 0xa02}, {0xa3c, 0xa3c}, + {0xa3e, 0xa3e}, {0xa3f, 0xa3f}, {0xa40, 0xa42}, {0xa47, 0xa48}, + {0xa4b, 0xa4d}, {0xa70, 0xa71}, {0xa81, 0xa83}, {0xabc, 0xabc}, + {0xabe, 0xac5}, {0xac7, 0xac9}, {0xacb, 0xacd}, {0xb01, 0xb03}, + {0xb3c, 0xb3c}, {0xb3e, 0xb43}, {0xb47, 0xb48}, {0xb4b, 0xb4d}, + {0xb56, 0xb57}, {0xb82, 0xb83}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8}, + {0xbca, 0xbcd}, {0xbd7, 0xbd7}, {0xc01, 0xc03}, {0xc3e, 0xc44}, + {0xc46, 0xc48}, {0xc4a, 0xc4d}, {0xc55, 0xc56}, {0xc82, 0xc83}, + {0xcbe, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xcd5, 0xcd6}, + {0xd02, 0xd03}, {0xd3e, 0xd43}, {0xd46, 0xd48}, {0xd4a, 0xd4d}, + {0xd57, 0xd57}, {0xe31, 0xe31}, {0xe34, 0xe3a}, {0xe47, 0xe4e}, + {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, {0xebb, 0xebc}, {0xec8, 0xecd}, + {0xf18, 0xf19}, {0xf35, 0xf35}, {0xf37, 0xf37}, {0xf39, 0xf39}, + {0xf3e, 0xf3e}, {0xf3f, 0xf3f}, {0xf71, 0xf84}, {0xf86, 0xf8b}, + {0xf90, 0xf95}, {0xf97, 0xf97}, {0xf99, 0xfad}, {0xfb1, 0xfb7}, + {0xfb9, 0xfb9}, {0x20d0, 0x20dc}, {0x20e1, 0x20e1}, {0x302a, 0x302f}, {0x3099, 0x3099}, {0x309a, 0x309a}}; const xmlChRangeGroup xmlIsCombiningGroup = {95, 0, xmlIsCombining_srng, (xmlChLRangePtr)0}; -static const xmlChSRange xmlIsDigit_srng[] = { {0x660, 0x669}, - {0x6f0, 0x6f9}, {0x966, 0x96f}, {0x9e6, 0x9ef}, {0xa66, 0xa6f}, - {0xae6, 0xaef}, {0xb66, 0xb6f}, {0xbe7, 0xbef}, {0xc66, 0xc6f}, - {0xce6, 0xcef}, {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9}, +static const xmlChSRange xmlIsDigit_srng[] = { {0x660, 0x669}, + {0x6f0, 0x6f9}, {0x966, 0x96f}, {0x9e6, 0x9ef}, {0xa66, 0xa6f}, + {0xae6, 0xaef}, {0xb66, 0xb6f}, {0xbe7, 0xbef}, {0xc66, 0xc6f}, + {0xce6, 0xcef}, {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9}, {0xf20, 0xf29}}; const xmlChRangeGroup xmlIsDigitGroup = {14, 0, xmlIsDigit_srng, (xmlChLRangePtr)0}; -static const xmlChSRange xmlIsExtender_srng[] = { {0x2d0, 0x2d0}, - {0x2d1, 0x2d1}, {0x387, 0x387}, {0x640, 0x640}, {0xe46, 0xe46}, - {0xec6, 0xec6}, {0x3005, 0x3005}, {0x3031, 0x3035}, {0x309d, 0x309e}, +static const xmlChSRange xmlIsExtender_srng[] = { {0x2d0, 0x2d0}, + {0x2d1, 0x2d1}, {0x387, 0x387}, {0x640, 0x640}, {0xe46, 0xe46}, + {0xec6, 0xec6}, {0x3005, 0x3005}, {0x3031, 0x3035}, {0x309d, 0x309e}, {0x30fc, 0x30fe}}; const xmlChRangeGroup xmlIsExtenderGroup = {10, 0, xmlIsExtender_srng, (xmlChLRangePtr)0}; -static const xmlChSRange xmlIsIdeographic_srng[] = { {0x3007, 0x3007}, +static const xmlChSRange xmlIsIdeographic_srng[] = { {0x3007, 0x3007}, {0x3021, 0x3029}, {0x4e00, 0x9fa5}}; const xmlChRangeGroup xmlIsIdeographicGroup = {3, 0, xmlIsIdeographic_srng, (xmlChLRangePtr)0}; diff --git a/lib/3rdparty/libxml2/config.guess b/lib/3rdparty/libxml2/config.guess index dc84c68ef79..49ba16f15c6 100644 --- a/lib/3rdparty/libxml2/config.guess +++ b/lib/3rdparty/libxml2/config.guess @@ -1,10 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 -# Free Software Foundation, Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011, 2012 Free Software Foundation, Inc. -timestamp='2009-11-20' +timestamp='2012-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -56,8 +56,9 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 +Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -144,7 +145,7 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward @@ -180,7 +181,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in fi ;; *) - os=netbsd + os=netbsd ;; esac # The OS release @@ -223,7 +224,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on @@ -269,7 +270,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead @@ -295,7 +299,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in echo s390-ibm-zvmoe exit ;; *:OS400:*:*) - echo powerpc-ibm-os400 + echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} @@ -394,23 +398,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} - exit ;; + exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; @@ -480,8 +484,8 @@ EOF echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ @@ -494,7 +498,7 @@ EOF else echo i586-dg-dgux${UNAME_RELEASE} fi - exit ;; + exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; @@ -551,7 +555,7 @@ EOF echo rs6000-ibm-aix3.2 fi exit ;; - *:AIX:*:[456]) + *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 @@ -594,52 +598,52 @@ EOF 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac + esac ;; + esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + sed 's/^ //' << EOF >$dummy.c - #define _HPUX_SOURCE - #include - #include + #define _HPUX_SOURCE + #include + #include - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa @@ -730,22 +734,22 @@ EOF exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd - exit ;; + exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi - exit ;; + exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd - exit ;; + exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd - exit ;; + exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd - exit ;; + exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; @@ -769,14 +773,14 @@ EOF exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} @@ -788,13 +792,12 @@ EOF echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) @@ -803,15 +806,18 @@ EOF *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; + i*:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) - case ${UNAME_MACHINE} in + case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; @@ -866,7 +872,7 @@ EOF EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; - esac + esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} @@ -878,20 +884,29 @@ EOF then echo ${UNAME_MACHINE}-unknown-linux-gnu else - echo ${UNAME_MACHINE}-unknown-linux-gnueabi + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabihf + fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) - echo cris-axis-linux-gnu + echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu + echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) - echo frv-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu @@ -933,7 +948,7 @@ EOF test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) - echo or32-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu @@ -959,7 +974,7 @@ EOF echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu @@ -967,14 +982,17 @@ EOF sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. @@ -983,11 +1001,11 @@ EOF echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. + # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) @@ -1019,7 +1037,7 @@ EOF fi exit ;; i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. + # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; @@ -1047,13 +1065,13 @@ EOF exit ;; pc:*:*:*) # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp - exit ;; + exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; @@ -1088,8 +1106,8 @@ EOF /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ @@ -1132,10 +1150,10 @@ EOF echo ns32k-sni-sysv fi exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm @@ -1161,11 +1179,11 @@ EOF exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} + echo mips-nec-sysv${UNAME_RELEASE} else - echo mips-unknown-sysv${UNAME_RELEASE} + echo mips-unknown-sysv${UNAME_RELEASE} fi - exit ;; + exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; @@ -1230,6 +1248,9 @@ EOF *:QNX:*:4*) echo i386-pc-qnx exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; @@ -1275,13 +1296,13 @@ EOF echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} + echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` + UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; @@ -1321,11 +1342,11 @@ main () #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 - "4" + "4" #else - "" + "" #endif - ); exit (0); + ); exit (0); #endif #endif diff --git a/lib/3rdparty/libxml2/config.h b/lib/3rdparty/libxml2/config.h index 7004a650bdb..10b9b16a3cc 100644 --- a/lib/3rdparty/libxml2/config.h +++ b/lib/3rdparty/libxml2/config.h @@ -1,24 +1,8 @@ -/* config.h. Generated by configure. */ +/* config.h. Generated from config.h.in by configure. */ /* config.h.in. Generated from configure.in by autoheader. */ -#define PACKAGE "libxml2" -#define VERSION "2.7.7" -/* #undef HAVE_LIBZ */ -/* #undef HAVE_LIBM */ -/* #undef HAVE_ISINF */ -#define HAVE_ISNAN -/* #undef HAVE_LIBHISTORY */ -/* #undef HAVE_LIBREADLINE */ -/* #undef HAVE_LIBPTHREAD */ -/* #undef HAVE_PTHREAD_H */ - -/* Define if IPV6 support is there */ -/* #undef SUPPORT_IP6 */ - -/* Define if getaddrinfo is there */ -/* #undef HAVE_GETADDRINFO */ /* Define to 1 if you have the header file. */ -/* #undef HAVE_ANSICDECL_H */ +/* #undef HAVE_ANSIDECL_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_ARPA_INET_H */ @@ -86,11 +70,14 @@ /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 +/* Define to 1 if you have the `isascii' function. */ +/* #undef HAVE_ISASCII */ + /* Define if isinf is there */ /* #undef HAVE_ISINF */ /* Define if isnan is there */ -#define HAVE_ISNAN +#define HAVE_ISNAN /**/ /* Define to 1 if you have the `isnand' function. */ /* #undef HAVE_ISNAND */ @@ -98,14 +85,8 @@ /* Define if history library is there (-lhistory) */ /* #undef HAVE_LIBHISTORY */ -/* Define to 1 if you have the `inet' library (-linet). */ -/* #undef HAVE_LIBINET */ - -/* Define to 1 if you have the `net' library (-lnet). */ -/* #undef HAVE_LIBNET */ - -/* Define to 1 if you have the `nsl' library (-lnsl). */ -/* #undef HAVE_LIBNSL */ +/* Have compression library */ +/* #undef HAVE_LIBLZMA */ /* Define if pthread library is there (-lpthread) */ /* #undef HAVE_LIBPTHREAD */ @@ -113,9 +94,6 @@ /* Define if readline library is there (-lreadline) */ /* #undef HAVE_LIBREADLINE */ -/* Define to 1 if you have the `socket' library (-lsocket). */ -/* #undef HAVE_LIBSOCKET */ - /* Have compression library */ /* #undef HAVE_LIBZ */ @@ -125,6 +103,9 @@ /* Define to 1 if you have the `localtime' function. */ #define HAVE_LOCALTIME 1 +/* Define to 1 if you have the header file. */ +/* #undef HAVE_LZMA_H */ + /* Define to 1 if you have the header file. */ #define HAVE_MALLOC_H 1 @@ -134,6 +115,17 @@ /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 +/* Define to 1 if you have the `mmap' function. */ +/* #undef HAVE_MMAP */ + +/* Define to 1 if you have the `munmap' function. */ +/* #undef HAVE_MUNMAP */ + +/* mmap() is no good without munmap() */ +#if defined(HAVE_MMAP) && !defined(HAVE_MUNMAP) +# undef /**/ HAVE_MMAP +#endif + /* Define to 1 if you have the header file. */ /* #undef HAVE_NAN_H */ @@ -146,12 +138,24 @@ /* Define to 1 if you have the header file. */ /* #undef HAVE_NETINET_IN_H */ +/* Define to 1 if you have the header file. */ +/* #undef HAVE_POLL_H */ + /* Define to 1 if you have the `printf' function. */ #define HAVE_PRINTF 1 /* Define if is there */ /* #undef HAVE_PTHREAD_H */ +/* Define to 1 if you have the `putenv' function. */ +/* #undef HAVE_PUTENV */ + +/* Define to 1 if you have the `rand' function. */ +#define HAVE_RAND 1 + +/* Define to 1 if you have the `rand_r' function. */ +/* #undef HAVE_RAND_R */ + /* Define to 1 if you have the header file. */ /* #undef HAVE_RESOLV_H */ @@ -170,6 +174,9 @@ /* Define to 1 if you have the `sprintf' function. */ #define HAVE_SPRINTF 1 +/* Define to 1 if you have the `srand' function. */ +#define HAVE_SRAND 1 + /* Define to 1 if you have the `sscanf' function. */ #define HAVE_SSCANF 1 @@ -232,12 +239,18 @@ /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 +/* Define to 1 if you have the `time' function. */ +#define HAVE_TIME 1 + /* Define to 1 if you have the header file. */ #define HAVE_TIME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 +/* Whether va_copy() is available */ +#define HAVE_VA_COPY 1 + /* Define to 1 if you have the `vfprintf' function. */ #define HAVE_VFPRINTF 1 @@ -253,6 +266,16 @@ /* Define to 1 if you have the `_stat' function. */ #define HAVE__STAT 1 +/* Whether __va_copy() is available */ +/* #undef HAVE___VA_COPY */ + +/* Define as const if the declaration of iconv() needs const. */ +/* #undef ICONV_CONST */ + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +/* #undef LT_OBJDIR */ + /* Name of package */ #define PACKAGE "libxml2" @@ -268,12 +291,12 @@ /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "" +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + /* Define to the version of this package. */ #define PACKAGE_VERSION "" -/* Define to 1 if the C compiler supports function prototypes. */ -#define PROTOTYPES 1 - /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 @@ -281,26 +304,26 @@ /* #undef SUPPORT_IP6 */ /* Version number of package */ -#define VERSION "2.7.7" +#define VERSION "2.9.0" /* Determine what socket length (socklen_t) data type is */ #define XML_SOCKLEN_T int +/* Define for Solaris 2.5.1 so the uint32_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +/* #undef _UINT32_T */ + /* Using the Win32 Socket implementation */ //#define _WINSOCKAPI_ 1 -/* Define like PROTOTYPES; this can be used by system headers. */ -#define __PROTOTYPES 1 - -/* Win32 Std C name mangling work-around */ -#define snprintf _snprintf /* ss_family is not defined here, use __ss_family instead */ /* #undef ss_family */ -#if !defined(__MINGW32__) || defined(__NO_ISOCEXT) -#define vsnprintf _vsnprintf -#endif +/* Define to the type of an unsigned integer type of width exactly 32 bits if + such a type exists and the standard includes do not define it. */ +/* #undef uint32_t */ #if defined(_MSC_VER) #define GetModuleHandleA GetModuleHandleA_ diff --git a/lib/3rdparty/libxml2/config.h.in b/lib/3rdparty/libxml2/config.h.in index d60f3627cd7..a564b6c7bba 100644 --- a/lib/3rdparty/libxml2/config.h.in +++ b/lib/3rdparty/libxml2/config.h.in @@ -1,20 +1,4 @@ /* config.h.in. Generated from configure.in by autoheader. */ -#undef PACKAGE -#undef VERSION -#undef HAVE_LIBZ -#undef HAVE_LIBM -#undef HAVE_ISINF -#undef HAVE_ISNAN -#undef HAVE_LIBHISTORY -#undef HAVE_LIBREADLINE -#undef HAVE_LIBPTHREAD -#undef HAVE_PTHREAD_H - -/* Define if IPV6 support is there */ -#undef SUPPORT_IP6 - -/* Define if getaddrinfo is there */ -#undef HAVE_GETADDRINFO /* Define to 1 if you have the header file. */ #undef HAVE_ANSIDECL_H @@ -85,8 +69,8 @@ /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H_H +/* Define to 1 if you have the `isascii' function. */ +#undef HAVE_ISASCII /* Define if isinf is there */ #undef HAVE_ISINF @@ -100,6 +84,9 @@ /* Define if history library is there (-lhistory) */ #undef HAVE_LIBHISTORY +/* Have compression library */ +#undef HAVE_LIBLZMA + /* Define if pthread library is there (-lpthread) */ #undef HAVE_LIBPTHREAD @@ -115,6 +102,9 @@ /* Define to 1 if you have the `localtime' function. */ #undef HAVE_LOCALTIME +/* Define to 1 if you have the header file. */ +#undef HAVE_LZMA_H + /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H @@ -124,6 +114,17 @@ /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H +/* Define to 1 if you have the `mmap' function. */ +#undef HAVE_MMAP + +/* Define to 1 if you have the `munmap' function. */ +#undef HAVE_MUNMAP + +/* mmap() is no good without munmap() */ +#if defined(HAVE_MMAP) && !defined(HAVE_MUNMAP) +# undef /**/ HAVE_MMAP +#endif + /* Define to 1 if you have the header file. */ #undef HAVE_NAN_H @@ -145,6 +146,15 @@ /* Define if is there */ #undef HAVE_PTHREAD_H +/* Define to 1 if you have the `putenv' function. */ +#undef HAVE_PUTENV + +/* Define to 1 if you have the `rand' function. */ +#undef HAVE_RAND + +/* Define to 1 if you have the `rand_r' function. */ +#undef HAVE_RAND_R + /* Define to 1 if you have the header file. */ #undef HAVE_RESOLV_H @@ -163,6 +173,9 @@ /* Define to 1 if you have the `sprintf' function. */ #undef HAVE_SPRINTF +/* Define to 1 if you have the `srand' function. */ +#undef HAVE_SRAND + /* Define to 1 if you have the `sscanf' function. */ #undef HAVE_SSCANF @@ -225,6 +238,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H +/* Define to 1 if you have the `time' function. */ +#undef HAVE_TIME + /* Define to 1 if you have the header file. */ #undef HAVE_TIME_H @@ -280,9 +296,6 @@ /* Define to the version of this package. */ #undef PACKAGE_VERSION -/* Define to 1 if the C compiler supports function prototypes. */ -#undef PROTOTYPES - /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS @@ -295,17 +308,17 @@ /* Determine what socket length (socklen_t) data type is */ #undef XML_SOCKLEN_T +/* Define for Solaris 2.5.1 so the uint32_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +#undef _UINT32_T + /* Using the Win32 Socket implementation */ #undef _WINSOCKAPI_ -/* Define like PROTOTYPES; this can be used by system headers. */ -#undef __PROTOTYPES - -/* Win32 Std C name mangling work-around */ -#undef snprintf - /* ss_family is not defined here, use __ss_family instead */ #undef ss_family -/* Win32 Std C name mangling work-around */ -#undef vsnprintf +/* Define to the type of an unsigned integer type of width exactly 32 bits if + such a type exists and the standard includes do not define it. */ +#undef uint32_t diff --git a/lib/3rdparty/libxml2/config.sub b/lib/3rdparty/libxml2/config.sub index 2a55a50751c..d6b6b3c768f 100644 --- a/lib/3rdparty/libxml2/config.sub +++ b/lib/3rdparty/libxml2/config.sub @@ -1,10 +1,10 @@ #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 -# Free Software Foundation, Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011, 2012 Free Software Foundation, Inc. -timestamp='2009-11-20' +timestamp='2012-01-01' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -75,8 +75,9 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 +Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -123,8 +124,9 @@ esac # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ - uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os @@ -156,8 +158,8 @@ case $os in os= basic_machine=$1 ;; - -bluegene*) - os=-cnk + -bluegene*) + os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= @@ -173,10 +175,10 @@ case $os in os=-chorusos basic_machine=$1 ;; - -chorusrdb) - os=-chorusrdb + -chorusrdb) + os=-chorusrdb basic_machine=$1 - ;; + ;; -hiux*) os=-hiuxwe2 ;; @@ -249,13 +251,17 @@ case $basic_machine in | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ + | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ @@ -281,29 +287,39 @@ case $basic_machine in | moxie \ | mt \ | msp430 \ + | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ + | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ - | rx \ + | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ - | v850 | v850e \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ - | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; m6811 | m68hc11 | m6812 | m68hc12 | picochip) - # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; @@ -313,6 +329,18 @@ case $basic_machine in basic_machine=mt-unknown ;; + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. @@ -332,16 +360,19 @@ case $basic_machine in | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ + | be32-* | be64-* \ | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ + | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ @@ -367,25 +398,29 @@ case $basic_machine in | mmix-* \ | mt-* \ | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ - | romp-* | rs6000-* | rx-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ | tron-* \ | ubicom32-* \ - | v850-* | v850e-* | vax-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) @@ -410,7 +445,7 @@ case $basic_machine in basic_machine=a29k-amd os=-udi ;; - abacus) + abacus) basic_machine=abacus-unknown ;; adobe68k) @@ -480,11 +515,20 @@ case $basic_machine in basic_machine=powerpc-ibm os=-cnk ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; c90) basic_machine=c90-cray os=-unicos ;; - cegcc) + cegcc) basic_machine=arm-unknown os=-cegcc ;; @@ -516,7 +560,7 @@ case $basic_machine in basic_machine=craynv-cray os=-unicosmp ;; - cr16) + cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; @@ -674,7 +718,6 @@ case $basic_machine in i370-ibm* | ibm*) basic_machine=i370-ibm ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 @@ -732,7 +775,7 @@ case $basic_machine in basic_machine=ns32k-utek os=-sysv ;; - microblaze) + microblaze) basic_machine=microblaze-xilinx ;; mingw32) @@ -771,10 +814,18 @@ case $basic_machine in ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; + msys) + basic_machine=i386-pc + os=-msys + ;; mvs) basic_machine=i370-ibm os=-mvs ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; ncr3000) basic_machine=i486-ncr os=-sysv4 @@ -839,6 +890,12 @@ case $basic_machine in np1) basic_machine=np1-gould ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; nsr-tandem) basic_machine=nsr-tandem ;; @@ -921,9 +978,10 @@ case $basic_machine in ;; power) basic_machine=power-ibm ;; - ppc) basic_machine=powerpc-unknown + ppc | ppcbe) basic_machine=powerpc-unknown ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown @@ -1017,6 +1075,9 @@ case $basic_machine in basic_machine=i860-stratus os=-sysv4 ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; sun2) basic_machine=m68000-sun ;; @@ -1073,20 +1134,8 @@ case $basic_machine in basic_machine=t90-cray os=-unicos ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; tile*) - basic_machine=tile-unknown + basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) @@ -1156,6 +1205,9 @@ case $basic_machine in xps | xps100) basic_machine=xps100-honeywell ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; ymp) basic_machine=ymp-cray os=-unicos @@ -1253,11 +1305,11 @@ esac if [ x"$os" != x"" ] then case $os in - # First match some system type aliases - # that might get confused with valid system types. + # First match some system type aliases + # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux + -auroraux) + os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` @@ -1293,8 +1345,9 @@ case $os in | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ @@ -1341,7 +1394,7 @@ case $os in -opened*) os=-openedition ;; - -os400*) + -os400*) os=-os400 ;; -wince*) @@ -1390,7 +1443,7 @@ case $os in -sinix*) os=-sysv4 ;; - -tpf*) + -tpf*) os=-tpf ;; -triton*) @@ -1435,6 +1488,8 @@ case $os in -dicos*) os=-dicos ;; + -nacl*) + ;; -none) ;; *) @@ -1457,10 +1512,10 @@ else # system, and we'll never get to this point. case $basic_machine in - score-*) + score-*) os=-elf ;; - spu-*) + spu-*) os=-elf ;; *-acorn) @@ -1472,8 +1527,17 @@ case $basic_machine in arm*-semi) os=-aout ;; - c4x-* | tic4x-*) - os=-coff + c4x-* | tic4x-*) + os=-coff + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff ;; # This must come before the *-dec entry. pdp10-*) @@ -1493,14 +1557,11 @@ case $basic_machine in ;; m68000-sun) os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 ;; m68*-cisco) os=-aout ;; - mep-*) + mep-*) os=-elf ;; mips*-cisco) @@ -1527,7 +1588,7 @@ case $basic_machine in *-ibm) os=-aix ;; - *-knuth) + *-knuth) os=-mmixware ;; *-wec) diff --git a/lib/3rdparty/libxml2/configure b/lib/3rdparty/libxml2/configure index 605e8c4c359..dab3f3abba4 100644 --- a/lib/3rdparty/libxml2/configure +++ b/lib/3rdparty/libxml2/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.66. +# Generated by GNU Autoconf 2.68. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -89,6 +89,7 @@ fi IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. +as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -171,7 +172,6 @@ test x\$exitcode = x0 || exit 1" as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' @@ -179,7 +179,8 @@ test \$(( 1 + 1 )) = 2 || exit 1 ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ - || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else @@ -222,11 +223,18 @@ IFS=$as_save_IFS # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} + case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : @@ -637,6 +645,7 @@ WITH_SCHEMAS TEST_SCHEMATRON WITH_SCHEMATRON WITH_ISO8859X +ICU_LIBS WITH_ICU WITH_ICONV WITH_OUTPUT @@ -667,6 +676,8 @@ WITH_HTML TEST_PUSH WITH_PUSH TEST_SAX +WITH_SAX1_SOURCES_FALSE +WITH_SAX1_SOURCES_TRUE WITH_SAX1 TEST_PATTERN WITH_PATTERN @@ -679,7 +690,8 @@ WITH_HTTP FTP_OBJ WITH_FTP WITH_TREE -THREADS_W32 +THREADS_W32_FALSE +THREADS_W32_TRUE TEST_THREADS THREAD_CFLAGS WITH_THREADS @@ -699,6 +711,9 @@ pythondir WITH_PYTHON_FALSE WITH_PYTHON_TRUE PYTHON +WITH_LZMA +LZMA_LIBS +LZMA_CFLAGS WITH_ZLIB Z_LIBS Z_CFLAGS @@ -713,23 +728,21 @@ OTOOL LIPO NMEDIT DSYMUTIL +MANIFEST_TOOL RANLIB +ac_ct_AR AR -LN_S +DLLTOOL +OBJDUMP NM ac_ct_DUMPBIN DUMPBIN LD FGREP -SED -LIBTOOL -OBJDUMP -DLLTOOL -AS -ANSI2KNR -U EGREP GREP +SED +LIBTOOL XSLTPROC XMLLINT WGET @@ -738,9 +751,11 @@ TAR MV RM CPP +LN_S am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE +am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE @@ -754,6 +769,10 @@ CPPFLAGS LDFLAGS CFLAGS CC +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V am__untar am__tar AMTAR @@ -833,12 +852,14 @@ SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking +enable_silent_rules enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld +with_sysroot enable_libtool_lock with_c14n with_catalog @@ -878,6 +899,7 @@ with_xpath with_xptr with_modules with_zlib +with_lzma with_coverage enable_rebuild_docs enable_ipv6 @@ -953,8 +975,9 @@ do fi case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. @@ -1294,7 +1317,7 @@ Try \`$0 --help' for more information" $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac @@ -1508,6 +1531,8 @@ Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0') --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-shared[=PKGS] build shared libraries [default=yes] @@ -1515,15 +1540,17 @@ Optional Features: --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) - --enable-rebuild-docs[=yes/no] rebuild some generated docs [default=yes] + --enable-rebuild-docs[=yes/no] rebuild some generated docs [default=no] --enable-ipv6[=yes/no] enables compilation of IPv6 code [default=yes] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-pic try to use only PIC/non-PIC objects [default=use + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot=DIR Search for dependent libraries within DIR + (or the compiler's sysroot if not specified). --with-c14n add the Canonicalization support (on) --with-catalog add the Catalog support (on) --with-debug add the debugging module (on) @@ -1564,6 +1591,7 @@ Optional Packages: --with-xptr add the XPointer support (on) --with-modules add the dynamic modules support (on) --with-zlib[=DIR] use libz in DIR + --with-lzma[=DIR] use liblzma in DIR --with-coverage build for code coverage with GCC (off) Some influential environment variables: @@ -1643,7 +1671,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure -generated by GNU Autoconf 2.66 +generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation @@ -1689,7 +1717,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile @@ -1715,7 +1743,7 @@ $as_echo "$ac_try_echo"; } >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >/dev/null && { + test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : @@ -1726,171 +1754,11 @@ sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval "test \"\${$3+set}\"" = set; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_compile - # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. @@ -1932,11 +1800,84 @@ fi # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly @@ -1945,7 +1886,7 @@ ac_fn_c_check_func () as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : +if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -2000,15 +1941,155 @@ fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_find_uintX_t LINENO BITS VAR +# ------------------------------------ +# Finds an unsigned integer type with width BITS, setting cache variable VAR +# accordingly. +ac_fn_c_find_uintX_t () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 +$as_echo_n "checking for uint$2_t... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + # Order is important - never check a type that is potentially smaller + # than half of the expected target width. + for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ + 'unsigned long long int' 'unsigned short int' 'unsigned char'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + case $ac_type in #( + uint$2_t) : + eval "$3=yes" ;; #( + *) : + eval "$3=\$ac_type" ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no"; then : + +else + break +fi + done +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_find_uintX_t cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was -generated by GNU Autoconf 2.66. Invocation command line was +generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -2355,6 +2436,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu + ac_config_headers="$ac_config_headers config.h" @@ -2393,7 +2475,7 @@ $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : +if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias @@ -2427,7 +2509,7 @@ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : +if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then @@ -2460,8 +2542,8 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac LIBXML_MAJOR_VERSION=2 -LIBXML_MINOR_VERSION=7 -LIBXML_MICRO_VERSION=8 +LIBXML_MINOR_VERSION=9 +LIBXML_MICRO_VERSION=0 LIBXML_MICRO_VERSION_SUFFIX= LIBXML_VERSION=$LIBXML_MAJOR_VERSION.$LIBXML_MINOR_VERSION.$LIBXML_MICRO_VERSION$LIBXML_MICRO_VERSION_SUFFIX LIBXML_VERSION_INFO=`expr $LIBXML_MAJOR_VERSION + $LIBXML_MINOR_VERSION`:$LIBXML_MICRO_VERSION:$LIBXML_MINOR_VERSION @@ -2483,7 +2565,7 @@ else if test -d .svn ; then LIBXML_VERSION_EXTRA="-SVN$extra" fi else if test -d .git ; then - extra=`git describe | sed 's+LIBXML[0-9.]*-++'` + extra=`git describe 2>/dev/null | sed 's+LIBXML[0-9.]*-++'` echo extra=$extra if test "$extra" != "" then @@ -2521,7 +2603,7 @@ am__api_version='1.11' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then : +if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2698,7 +2780,7 @@ if test "$cross_compiling" != no; then set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : +if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then @@ -2738,7 +2820,7 @@ if test -z "$ac_cv_prog_STRIP"; then set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then @@ -2791,7 +2873,7 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then : + if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2842,7 +2924,7 @@ do set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then : +if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then @@ -2882,7 +2964,7 @@ done $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF @@ -2970,17 +3052,60 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. -# Always define AMTAR for backward compatibility. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' +# Support silent build rules, requires at least automake-1.11. Disable +# by either passing --disable-silent-rules to configure or passing V=1 +# to make +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=0;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -2991,7 +3116,7 @@ if test -n "$ac_tool_prefix"; then set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -3031,7 +3156,7 @@ if test -z "$ac_cv_prog_CC"; then set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : +if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then @@ -3084,7 +3209,7 @@ if test -z "$CC"; then set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -3124,7 +3249,7 @@ if test -z "$CC"; then set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -3183,7 +3308,7 @@ if test -z "$CC"; then set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -3227,7 +3352,7 @@ do set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : +if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then @@ -3510,7 +3635,7 @@ rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : +if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -3561,7 +3686,7 @@ OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : +if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -3598,7 +3723,7 @@ ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : +if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag @@ -3676,7 +3801,7 @@ else fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : +if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no @@ -3822,6 +3947,7 @@ fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' + am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= @@ -3837,7 +3963,7 @@ depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : +if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then @@ -3846,6 +3972,7 @@ else # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. + rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. @@ -3905,7 +4032,7 @@ else break fi ;; - msvisualcpp | msvcmsys) + msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. @@ -3961,6 +4088,17 @@ fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -3974,7 +4112,7 @@ if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : + if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded @@ -4004,7 +4142,7 @@ else # Broken: fails on valid input. continue fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. @@ -4020,11 +4158,11 @@ else ac_preproc_ok=: break fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext +rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi @@ -4063,7 +4201,7 @@ else # Broken: fails on valid input. continue fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. @@ -4079,11 +4217,11 @@ else ac_preproc_ok=: break fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext +rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else @@ -4103,7 +4241,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu set dummy rm; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_RM+set}" = set; then : +if ${ac_cv_path_RM+:} false; then : $as_echo_n "(cached) " >&6 else case $RM in @@ -4144,7 +4282,7 @@ fi set dummy mv; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MV+set}" = set; then : +if ${ac_cv_path_MV+:} false; then : $as_echo_n "(cached) " >&6 else case $MV in @@ -4185,7 +4323,7 @@ fi set dummy tar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_TAR+set}" = set; then : +if ${ac_cv_path_TAR+:} false; then : $as_echo_n "(cached) " >&6 else case $TAR in @@ -4226,7 +4364,7 @@ fi set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PERL+set}" = set; then : +if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in @@ -4267,7 +4405,7 @@ fi set dummy wget; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_WGET+set}" = set; then : +if ${ac_cv_path_WGET+:} false; then : $as_echo_n "(cached) " >&6 else case $WGET in @@ -4308,7 +4446,7 @@ fi set dummy xmllint; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_XMLLINT+set}" = set; then : +if ${ac_cv_path_XMLLINT+:} false; then : $as_echo_n "(cached) " >&6 else case $XMLLINT in @@ -4349,7 +4487,7 @@ fi set dummy xsltproc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_XSLTPROC+set}" = set; then : +if ${ac_cv_path_XSLTPROC+:} false; then : $as_echo_n "(cached) " >&6 else case $XSLTPROC in @@ -4387,609 +4525,6 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for function prototypes" >&5 -$as_echo_n "checking for function prototypes... " >&6; } -if test "$ac_cv_prog_cc_c89" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -$as_echo "#define PROTOTYPES 1" >>confdefs.h - - -$as_echo "#define __PROTOTYPES 1" >>confdefs.h - -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - -if test "$ac_cv_prog_cc_stdc" != no; then - U= ANSI2KNR= -else - U=_ ANSI2KNR=./ansi2knr -fi -# Ensure some checks needed by ansi2knr itself. - -for ac_header in string.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" -if test "x$ac_cv_header_string_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_STRING_H 1 -_ACEOF - -fi - -done - - -test "x$U" != "x" && as_fn_error $? "Compiler not ANSI compliant" "$LINENO" 5 - -enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. -set dummy ${ac_tool_prefix}as; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AS+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AS"; then - ac_cv_prog_AS="$AS" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AS="${ac_tool_prefix}as" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AS=$ac_cv_prog_AS -if test -n "$AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 -$as_echo "$AS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AS"; then - ac_ct_AS=$AS - # Extract the first word of "as", so it can be a program name with args. -set dummy as; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AS+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AS"; then - ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AS="as" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AS=$ac_cv_prog_ac_ct_AS -if test -n "$ac_ct_AS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 -$as_echo "$ac_ct_AS" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_AS" = x; then - AS="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AS=$ac_ct_AS - fi -else - AS="$ac_cv_prog_AS" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DLLTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_DLLTOOL="dlltool" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - DLLTOOL=$ac_ct_DLLTOOL - fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_OBJDUMP="objdump" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - - ;; -esac - -test -z "$AS" && AS=as - - - - - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 @@ -4998,8 +4533,8 @@ esac -macro_version='2.2.10' -macro_revision='1.3175' +macro_version='2.4.2' +macro_revision='1.3337' @@ -5039,7 +4574,7 @@ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. -if test "X`print -r -- -n 2>/dev/null`" = X-n && \ +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then @@ -5086,7 +4621,7 @@ esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } -if test "${ac_cv_path_SED+set}" = set; then : +if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ @@ -5166,9 +4701,139 @@ Xsed="$SED -e 1s/^X//" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } -if test "${ac_cv_path_FGREP+set}" = set; then : +if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 @@ -5299,7 +4964,7 @@ else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi -if test "${lt_cv_path_LD+set}" = set; then : +if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then @@ -5339,7 +5004,7 @@ fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then : +if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. @@ -5366,7 +5031,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if test "${lt_cv_path_NM+set}" = set; then : +if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then @@ -5429,7 +5094,7 @@ else set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DUMPBIN+set}" = set; then : +if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then @@ -5473,7 +5138,7 @@ do set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then @@ -5545,7 +5210,7 @@ test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } -if test "${lt_cv_nm_interface+set}" = set; then : +if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" @@ -5566,21 +5231,10 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } -if test "${lt_cv_sys_max_cmd_len+set}" = set; then : +if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 @@ -5643,6 +5297,11 @@ else lt_cv_sys_max_cmd_len=196608 ;; + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not @@ -5682,7 +5341,7 @@ else # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. - while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \ + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do @@ -5725,8 +5384,8 @@ $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes @@ -5775,9 +5434,83 @@ esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } -if test "${lt_cv_ld_reload_flag+set}" = set; then : +if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' @@ -5791,6 +5524,11 @@ case $reload_flag in esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test "$GCC" != yes; then + reload_cmds=false + fi + ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' @@ -5813,7 +5551,7 @@ if test -n "$ac_tool_prefix"; then set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJDUMP+set}" = set; then : +if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then @@ -5853,7 +5591,7 @@ if test -z "$ac_cv_prog_OBJDUMP"; then set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then @@ -5907,9 +5645,12 @@ test -z "$OBJDUMP" && OBJDUMP=objdump + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } -if test "${lt_cv_deplibs_check_method+set}" = set; then : +if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' @@ -6029,7 +5770,7 @@ irix5* | irix6* | nonstopux*) lt_cv_deplibs_check_method=pass_all ;; -# This must be Linux ELF. +# This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; @@ -6111,6 +5852,21 @@ esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown @@ -6124,14 +5880,168 @@ test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AR+set}" = set; then : +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then @@ -6144,7 +6054,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -6164,14 +6074,18 @@ $as_echo "no" >&6; } fi + test -n "$AR" && break + done fi -if test -z "$ac_cv_prog_AR"; then +if test -z "$AR"; then ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : +if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then @@ -6184,7 +6098,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" + ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -6203,6 +6117,10 @@ else $as_echo "no" >&6; } fi + + test -n "$ac_ct_AR" && break +done + if test "x$ac_ct_AR" = x; then AR="false" else @@ -6214,12 +6132,10 @@ ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi -else - AR="$ac_cv_prog_AR" fi -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru +: ${AR=ar} +: ${AR_FLAGS=cru} @@ -6231,12 +6147,70 @@ test -z "$AR_FLAGS" && AR_FLAGS=cru +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : +if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then @@ -6276,7 +6250,7 @@ if test -z "$ac_cv_prog_STRIP"; then set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then @@ -6335,7 +6309,7 @@ if test -n "$ac_tool_prefix"; then set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then : +if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then @@ -6375,7 +6349,7 @@ if test -z "$ac_cv_prog_RANLIB"; then set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then @@ -6437,13 +6411,13 @@ old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in @@ -6504,7 +6478,7 @@ compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : +if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else @@ -6565,8 +6539,8 @@ esac lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= @@ -6590,6 +6564,7 @@ for ac_symprfx in "" "_"; do # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ @@ -6602,6 +6577,7 @@ for ac_symprfx in "" "_"; do else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no @@ -6643,6 +6619,18 @@ _LT_EOF if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + #ifdef __cplusplus extern "C" { #endif @@ -6654,7 +6642,7 @@ _LT_EOF cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ -const struct { +LT_DLSYM_CONST struct { const char *name; void *address; } @@ -6680,8 +6668,8 @@ static const void *lt_preloaded_setup() { _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 @@ -6691,8 +6679,8 @@ _LT_EOF test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi @@ -6729,6 +6717,12 @@ else $as_echo "ok" >&6; } fi +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi @@ -6749,6 +6743,49 @@ fi + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 +$as_echo "${with_sysroot}" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : @@ -6875,7 +6912,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then : +if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c @@ -6916,7 +6953,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; } CFLAGS="$SAVE_CFLAGS" fi ;; -sparc*-*solaris*) +*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 @@ -6927,7 +6964,20 @@ sparc*-*solaris*) case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in - yes*) LD="${LD-ld} -m elf64_sparc" ;; + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" @@ -6943,6 +6993,123 @@ esac need_locks="$enable_libtool_lock" +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi + + + + + case $host_os in rhapsody* | darwin*) @@ -6951,7 +7118,7 @@ need_locks="$enable_libtool_lock" set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : +if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then @@ -6991,7 +7158,7 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then @@ -7043,7 +7210,7 @@ fi set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_NMEDIT+set}" = set; then : +if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then @@ -7083,7 +7250,7 @@ if test -z "$ac_cv_prog_NMEDIT"; then set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then @@ -7135,7 +7302,7 @@ fi set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_LIPO+set}" = set; then : +if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then @@ -7175,7 +7342,7 @@ if test -z "$ac_cv_prog_LIPO"; then set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then @@ -7227,7 +7394,7 @@ fi set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL+set}" = set; then : +if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then @@ -7267,7 +7434,7 @@ if test -z "$ac_cv_prog_OTOOL"; then set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then @@ -7319,7 +7486,7 @@ fi set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL64+set}" = set; then : +if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then @@ -7359,7 +7526,7 @@ if test -z "$ac_cv_prog_OTOOL64"; then set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then @@ -7434,7 +7601,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } -if test "${lt_cv_apple_cc_single_mod+set}" = set; then : +if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no @@ -7450,7 +7617,13 @@ else $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? - if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 @@ -7461,9 +7634,10 @@ else fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : +if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no @@ -7493,9 +7667,10 @@ rm -f core conftest.err conftest.$ac_objext \ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } -if test "${lt_cv_ld_force_load+set}" = set; then : +if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no @@ -7514,7 +7689,9 @@ _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? - if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 @@ -7560,11 +7737,141 @@ $as_echo "$lt_cv_ld_force_load" >&6; } ;; esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " -if test "x$ac_cv_header_dlfcn_h" = x""yes; then : +if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF @@ -7584,6 +7891,8 @@ done enable_dlopen=no + enable_win32_dll=no + # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : @@ -7650,7 +7959,22 @@ fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : - withval=$with_pic; pic_mode="$withval" + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac else pic_mode=default fi @@ -7723,6 +8047,10 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + @@ -7749,7 +8077,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } -if test "${lt_cv_objdir+set}" = set; then : +if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null @@ -7827,7 +8155,7 @@ file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : +if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in @@ -7893,7 +8221,7 @@ if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : +if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in @@ -8035,7 +8363,7 @@ if test "$GCC" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no @@ -8088,8 +8416,6 @@ fi lt_prog_compiler_pic= lt_prog_compiler_static= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' @@ -8189,7 +8515,9 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; } case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' - lt_prog_compiler_pic='-Xcompiler -fPIC' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi ;; esac else @@ -8254,6 +8582,12 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; } lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) @@ -8274,18 +8608,33 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; } ;; *) case `$CC -V 2>&1 | sed 5q` in - *Sun\ F* | *Sun*Fortran*) + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; esac ;; esac @@ -8373,13 +8722,17 @@ case $host_os in lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 -$as_echo "$lt_prog_compiler_pic" >&6; } - - - - +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. @@ -8387,7 +8740,7 @@ $as_echo "$lt_prog_compiler_pic" >&6; } if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : +if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no @@ -8440,13 +8793,18 @@ fi + + + + + # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test "${lt_cv_prog_compiler_static_works+set}" = set; then : +if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no @@ -8489,7 +8847,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : +if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no @@ -8544,7 +8902,7 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : +if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no @@ -8638,7 +8996,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported @@ -8790,7 +9147,8 @@ _LT_EOF allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' @@ -8838,7 +9196,7 @@ _LT_EOF if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then - tmp_addflag= + tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler @@ -8887,8 +9245,7 @@ _LT_EOF xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec= - hardcode_libdir_flag_spec_ld='-rpath $libdir' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ @@ -8908,8 +9265,8 @@ _LT_EOF archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; @@ -8927,8 +9284,8 @@ _LT_EOF _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi @@ -8974,8 +9331,8 @@ _LT_EOF *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi @@ -9105,7 +9462,13 @@ _LT_EOF allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -9118,22 +9481,29 @@ main () _ACEOF if ac_fn_c_try_link "$LINENO"; then : -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" @@ -9145,7 +9515,13 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi else # Determine the default libpath from the value encoded in an # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -9158,22 +9534,29 @@ main () _ACEOF if ac_fn_c_try_link "$LINENO"; then : -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, @@ -9218,20 +9601,64 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac ;; darwin* | rhapsody*) @@ -9243,6 +9670,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + else whole_archive_flag_spec='' fi @@ -9271,10 +9699,6 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_shlibpath_var=no ;; - freebsd1*) - ld_shlibs=no - ;; - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little @@ -9287,7 +9711,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) + freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes @@ -9296,7 +9720,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no @@ -9304,7 +9728,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hpux9*) if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi @@ -9320,13 +9744,12 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes @@ -9344,10 +9767,10 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else @@ -9364,7 +9787,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } -if test "${lt_cv_prog_compiler__b+set}" = set; then : +if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no @@ -9426,23 +9849,36 @@ fi irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -int foo(void) {} +int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' @@ -9527,7 +9963,7 @@ rm -f core conftest.err conftest.$ac_objext \ osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' @@ -9546,9 +9982,9 @@ rm -f core conftest.err conftest.$ac_objext \ no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) @@ -9736,7 +10172,7 @@ x|xyes) # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if test "${lt_cv_archive_cmds_need_lc+set}" = set; then : +if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* @@ -9931,11 +10367,6 @@ esac - - - - - @@ -10031,7 +10462,7 @@ need_version=unknown case $host_os in aix3*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH @@ -10040,7 +10471,7 @@ aix3*) ;; aix[4-9]*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes @@ -10105,7 +10536,7 @@ beos*) ;; bsdi[45]*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' @@ -10124,8 +10555,9 @@ cygwin* | mingw* | pw32* | cegcc*) need_version=no need_lib_prefix=no - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + case $GCC,$cc_basename in + yes,*) + # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ @@ -10158,13 +10590,71 @@ cygwin* | mingw* | pw32* | cegcc*) library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' ;; *) + # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' ;; esac - dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; @@ -10185,7 +10675,7 @@ darwin* | rhapsody*) ;; dgux*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' @@ -10193,10 +10683,6 @@ dgux*) shlibpath_var=LD_LIBRARY_PATH ;; -freebsd1*) - dynamic_linker=no - ;; - freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. @@ -10204,7 +10690,7 @@ freebsd* | dragonfly*) objformat=`/usr/bin/objformat` else case $host_os in - freebsd[123]*) objformat=aout ;; + freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi @@ -10222,7 +10708,7 @@ freebsd* | dragonfly*) esac shlibpath_var=LD_LIBRARY_PATH case $host_os in - freebsd2*) + freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) @@ -10242,17 +10728,18 @@ freebsd* | dragonfly*) ;; gnu*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" @@ -10313,7 +10800,7 @@ hpux9* | hpux10* | hpux11*) ;; interix[3-9]*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' @@ -10329,7 +10816,7 @@ irix5* | irix6* | nonstopux*) nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; @@ -10366,9 +10853,9 @@ linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; -# This must be Linux ELF. +# This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' @@ -10378,7 +10865,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu) shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH - if test "${lt_cv_shlibpath_overrides_runpath+set}" = set; then : + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no @@ -10454,7 +10941,7 @@ netbsd*) ;; newsos6) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes @@ -10523,7 +11010,7 @@ rdos*) ;; solaris*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' @@ -10548,7 +11035,7 @@ sunos4*) ;; sysv4 | sysv4.3*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH @@ -10572,7 +11059,7 @@ sysv4 | sysv4.3*) sysv4*MP*) if test -d /usr/nec ;then - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH @@ -10603,7 +11090,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' @@ -10613,7 +11100,7 @@ tpf*) ;; uts4*) - version_type=linux + version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH @@ -10802,7 +11289,7 @@ else # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : +if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -10836,7 +11323,7 @@ LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else @@ -10850,12 +11337,12 @@ fi *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = x""yes; then : +if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then : +if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -10889,16 +11376,16 @@ LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = x""yes; then : +if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : +if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -10932,12 +11419,12 @@ LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } -if test "${ac_cv_lib_svld_dlopen+set}" = set; then : +if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -10971,12 +11458,12 @@ LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } -if test "${ac_cv_lib_dld_dld_link+set}" = set; then : +if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -11010,7 +11497,7 @@ LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi @@ -11051,7 +11538,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self+set}" = set; then : +if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : @@ -11104,10 +11591,10 @@ else /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -void fnord () __attribute__((visibility("default"))); +int fnord () __attribute__((visibility("default"))); #endif -void fnord () { int i=42; } +int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); @@ -11157,7 +11644,7 @@ $as_echo "$lt_cv_dlopen_self" >&6; } wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self_static+set}" = set; then : +if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : @@ -11210,10 +11697,10 @@ else /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -void fnord () __attribute__((visibility("default"))); +int fnord () __attribute__((visibility("default"))); #endif -void fnord () { int i=42; } +int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); @@ -11395,6 +11882,8 @@ CC="$lt_save_CC" + + ac_config_commands="$ac_config_commands libtool" @@ -11414,7 +11903,7 @@ else esac fi - if test -z "$VERSION_SCRIPT_FLAGS"; then + if test -n "$VERSION_SCRIPT_FLAGS"; then USE_VERSION_SCRIPT_TRUE= USE_VERSION_SCRIPT_FALSE='#' else @@ -11425,7 +11914,7 @@ fi _cppflags="${CPPFLAGS}" -_ldflags="${LDFLAGS}" +_libs="${LIBS}" # Check whether --with-c14n was given. @@ -11572,7 +12061,7 @@ if test "${with_readline+set}" = set; then : if test "$withval" != "no" -a "$withval" != "yes"; then RDL_DIR=$withval CPPFLAGS="${CPPFLAGS} -I$withval/include" - LDFLAGS="${LDFLAGS} -L$withval/lib" + LIBS="${LIBS} -L$withval/lib" fi fi @@ -11668,7 +12157,19 @@ if test "${with_zlib+set}" = set; then : if test "$withval" != "no" -a "$withval" != "yes"; then Z_DIR=$withval CPPFLAGS="${CPPFLAGS} -I$withval/include" - LDFLAGS="${LDFLAGS} -L$withval/lib" + LIBS="${LIBS} -L$withval/lib" + fi + +fi + + +# Check whether --with-lzma was given. +if test "${with_lzma+set}" = set; then : + withval=$with_lzma; + if test "$withval" != "no" -a "$withval" != "yes"; then + LZMA_DIR=$withval + CPPFLAGS="${CPPFLAGS} -I$withval/include" + LIBS="${LIBS} -L$withval/lib" fi fi @@ -11685,7 +12186,10 @@ if test "${enable_rebuild_docs+set}" = set; then : enableval=$enable_rebuild_docs; fi - if test "$enable_rebuild_docs" = "no"; then +if test "$enable_rebuild_docs" = "yes" -a "$srcdir" != "."; then + as_fn_error $? "cannot rebuild docs when builddir != srcdir" "$LINENO" 5 +fi + if test "$enable_rebuild_docs" = "yes" -o "$USER" = "veillard"; then REBUILD_DOCS_TRUE= REBUILD_DOCS_FALSE='#' else @@ -11864,13 +12368,13 @@ else for ac_header in zlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" -if test "x$ac_cv_header_zlib_h" = x""yes; then : +if test "x$ac_cv_header_zlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ZLIB_H 1 _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzread in -lz" >&5 $as_echo_n "checking for gzread in -lz... " >&6; } -if test "${ac_cv_lib_z_gzread+set}" = set; then : +if ${ac_cv_lib_z_gzread+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -11904,7 +12408,7 @@ LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzread" >&5 $as_echo "$ac_cv_lib_z_gzread" >&6; } -if test "x$ac_cv_lib_z_gzread" = x""yes; then : +if test "x$ac_cv_lib_z_gzread" = xyes; then : $as_echo "#define HAVE_LIBZ 1" >>confdefs.h @@ -11933,8 +12437,82 @@ fi +echo Checking lzma + + +WITH_LZMA=0 +if test "$with_lzma" = "no"; then + echo "Disabling compression support" +else + for ac_header in lzma.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "lzma.h" "ac_cv_header_lzma_h" "$ac_includes_default" +if test "x$ac_cv_header_lzma_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LZMA_H 1 +_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lzma_code in -llzma" >&5 +$as_echo_n "checking for lzma_code in -llzma... " >&6; } +if ${ac_cv_lib_lzma_lzma_code+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-llzma $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char lzma_code (); +int +main () +{ +return lzma_code (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_lzma_lzma_code=yes +else + ac_cv_lib_lzma_lzma_code=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lzma_lzma_code" >&5 +$as_echo "$ac_cv_lib_lzma_lzma_code" >&6; } +if test "x$ac_cv_lib_lzma_lzma_code" = xyes; then : + + +$as_echo "#define HAVE_LIBLZMA 1" >>confdefs.h + + WITH_LZMA=1 + if test "x${LZMA_DIR}" != "x"; then + LZMA_CFLAGS="-I${LZMA_DIR}/include" + LZMA_LIBS="-L${LZMA_DIR}/lib -llzma" + else + LZMA_LIBS="-llzma" + fi +fi + +fi + +done + +fi + + + + + CPPFLAGS=${_cppflags} -LDFLAGS=${_ldflags} +LIBS=${_libs} echo Checking headers @@ -11943,7 +12521,7 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } -if eval "test \"\${$as_ac_Header+set}\"" = set; then : +if eval \${$as_ac_Header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11983,7 +12561,7 @@ done if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } -if test "${ac_cv_search_opendir+set}" = set; then : +if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS @@ -12017,11 +12595,11 @@ for ac_lib in '' dir; do fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test "${ac_cv_search_opendir+set}" = set; then : + if ${ac_cv_search_opendir+:} false; then : break fi done -if test "${ac_cv_search_opendir+set}" = set; then : +if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no @@ -12040,7 +12618,7 @@ fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } -if test "${ac_cv_search_opendir+set}" = set; then : +if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS @@ -12074,11 +12652,11 @@ for ac_lib in '' x; do fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test "${ac_cv_search_opendir+set}" = set; then : + if ${ac_cv_search_opendir+:} false; then : break fi done -if test "${ac_cv_search_opendir+set}" = set; then : +if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no @@ -12098,7 +12676,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : +if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12211,7 +12789,7 @@ fi for ac_header in fcntl.h do : ac_fn_c_check_header_mongrel "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default" -if test "x$ac_cv_header_fcntl_h" = x""yes; then : +if test "x$ac_cv_header_fcntl_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FCNTL_H 1 _ACEOF @@ -12223,7 +12801,7 @@ done for ac_header in unistd.h do : ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" -if test "x$ac_cv_header_unistd_h" = x""yes; then : +if test "x$ac_cv_header_unistd_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UNISTD_H 1 _ACEOF @@ -12235,7 +12813,7 @@ done for ac_header in ctype.h do : ac_fn_c_check_header_mongrel "$LINENO" "ctype.h" "ac_cv_header_ctype_h" "$ac_includes_default" -if test "x$ac_cv_header_ctype_h" = x""yes; then : +if test "x$ac_cv_header_ctype_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_CTYPE_H 1 _ACEOF @@ -12247,7 +12825,7 @@ done for ac_header in dirent.h do : ac_fn_c_check_header_mongrel "$LINENO" "dirent.h" "ac_cv_header_dirent_h" "$ac_includes_default" -if test "x$ac_cv_header_dirent_h" = x""yes; then : +if test "x$ac_cv_header_dirent_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DIRENT_H 1 _ACEOF @@ -12259,7 +12837,7 @@ done for ac_header in errno.h do : ac_fn_c_check_header_mongrel "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default" -if test "x$ac_cv_header_errno_h" = x""yes; then : +if test "x$ac_cv_header_errno_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ERRNO_H 1 _ACEOF @@ -12271,7 +12849,7 @@ done for ac_header in malloc.h do : ac_fn_c_check_header_mongrel "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default" -if test "x$ac_cv_header_malloc_h" = x""yes; then : +if test "x$ac_cv_header_malloc_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MALLOC_H 1 _ACEOF @@ -12283,7 +12861,7 @@ done for ac_header in stdarg.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdarg.h" "ac_cv_header_stdarg_h" "$ac_includes_default" -if test "x$ac_cv_header_stdarg_h" = x""yes; then : +if test "x$ac_cv_header_stdarg_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDARG_H 1 _ACEOF @@ -12295,7 +12873,7 @@ done for ac_header in sys/stat.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/stat.h" "ac_cv_header_sys_stat_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_stat_h" = x""yes; then : +if test "x$ac_cv_header_sys_stat_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_STAT_H 1 _ACEOF @@ -12307,7 +12885,7 @@ done for ac_header in sys/types.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_types_h" = x""yes; then : +if test "x$ac_cv_header_sys_types_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_TYPES_H 1 _ACEOF @@ -12319,7 +12897,7 @@ done for ac_header in stdint.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" -if test "x$ac_cv_header_stdint_h" = x""yes; then : +if test "x$ac_cv_header_stdint_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H 1 _ACEOF @@ -12328,12 +12906,12 @@ fi done -for ac_header in inttypes.h.h +for ac_header in inttypes.h do : - ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h.h" "ac_cv_header_inttypes_h_h" "$ac_includes_default" -if test "x$ac_cv_header_inttypes_h_h" = x""yes; then : + ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" +if test "x$ac_cv_header_inttypes_h" = xyes; then : cat >>confdefs.h <<_ACEOF -#define HAVE_INTTYPES_H_H 1 +#define HAVE_INTTYPES_H 1 _ACEOF fi @@ -12343,7 +12921,7 @@ done for ac_header in time.h do : ac_fn_c_check_header_mongrel "$LINENO" "time.h" "ac_cv_header_time_h" "$ac_includes_default" -if test "x$ac_cv_header_time_h" = x""yes; then : +if test "x$ac_cv_header_time_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TIME_H 1 _ACEOF @@ -12355,7 +12933,7 @@ done for ac_header in ansidecl.h do : ac_fn_c_check_header_mongrel "$LINENO" "ansidecl.h" "ac_cv_header_ansidecl_h" "$ac_includes_default" -if test "x$ac_cv_header_ansidecl_h" = x""yes; then : +if test "x$ac_cv_header_ansidecl_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ANSIDECL_H 1 _ACEOF @@ -12367,7 +12945,7 @@ done for ac_header in ieeefp.h do : ac_fn_c_check_header_mongrel "$LINENO" "ieeefp.h" "ac_cv_header_ieeefp_h" "$ac_includes_default" -if test "x$ac_cv_header_ieeefp_h" = x""yes; then : +if test "x$ac_cv_header_ieeefp_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_IEEEFP_H 1 _ACEOF @@ -12379,7 +12957,7 @@ done for ac_header in nan.h do : ac_fn_c_check_header_mongrel "$LINENO" "nan.h" "ac_cv_header_nan_h" "$ac_includes_default" -if test "x$ac_cv_header_nan_h" = x""yes; then : +if test "x$ac_cv_header_nan_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NAN_H 1 _ACEOF @@ -12391,7 +12969,7 @@ done for ac_header in math.h do : ac_fn_c_check_header_mongrel "$LINENO" "math.h" "ac_cv_header_math_h" "$ac_includes_default" -if test "x$ac_cv_header_math_h" = x""yes; then : +if test "x$ac_cv_header_math_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MATH_H 1 _ACEOF @@ -12403,7 +12981,7 @@ done for ac_header in limits.h do : ac_fn_c_check_header_mongrel "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default" -if test "x$ac_cv_header_limits_h" = x""yes; then : +if test "x$ac_cv_header_limits_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIMITS_H 1 _ACEOF @@ -12415,7 +12993,7 @@ done for ac_header in fp_class.h do : ac_fn_c_check_header_mongrel "$LINENO" "fp_class.h" "ac_cv_header_fp_class_h" "$ac_includes_default" -if test "x$ac_cv_header_fp_class_h" = x""yes; then : +if test "x$ac_cv_header_fp_class_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FP_CLASS_H 1 _ACEOF @@ -12427,7 +13005,7 @@ done for ac_header in float.h do : ac_fn_c_check_header_mongrel "$LINENO" "float.h" "ac_cv_header_float_h" "$ac_includes_default" -if test "x$ac_cv_header_float_h" = x""yes; then : +if test "x$ac_cv_header_float_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FLOAT_H 1 _ACEOF @@ -12439,7 +13017,7 @@ done for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" -if test "x$ac_cv_header_stdlib_h" = x""yes; then : +if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF @@ -12455,7 +13033,7 @@ do : # endif " -if test "x$ac_cv_header_sys_socket_h" = x""yes; then : +if test "x$ac_cv_header_sys_socket_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SOCKET_H 1 _ACEOF @@ -12471,7 +13049,7 @@ do : # endif " -if test "x$ac_cv_header_netinet_in_h" = x""yes; then : +if test "x$ac_cv_header_netinet_in_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NETINET_IN_H 1 _ACEOF @@ -12490,7 +13068,7 @@ do : # endif " -if test "x$ac_cv_header_arpa_inet_h" = x""yes; then : +if test "x$ac_cv_header_arpa_inet_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ARPA_INET_H 1 _ACEOF @@ -12502,7 +13080,7 @@ done for ac_header in netdb.h do : ac_fn_c_check_header_mongrel "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" -if test "x$ac_cv_header_netdb_h" = x""yes; then : +if test "x$ac_cv_header_netdb_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NETDB_H 1 _ACEOF @@ -12514,7 +13092,7 @@ done for ac_header in sys/time.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_time_h" = x""yes; then : +if test "x$ac_cv_header_sys_time_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_TIME_H 1 _ACEOF @@ -12526,7 +13104,7 @@ done for ac_header in sys/select.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_select_h" = x""yes; then : +if test "x$ac_cv_header_sys_select_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SELECT_H 1 _ACEOF @@ -12538,7 +13116,7 @@ done for ac_header in poll.h do : ac_fn_c_check_header_mongrel "$LINENO" "poll.h" "ac_cv_header_poll_h" "$ac_includes_default" -if test "x$ac_cv_header_poll_h" = x""yes; then : +if test "x$ac_cv_header_poll_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_POLL_H 1 _ACEOF @@ -12550,7 +13128,7 @@ done for ac_header in sys/mman.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_mman_h" = x""yes; then : +if test "x$ac_cv_header_sys_mman_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_MMAN_H 1 _ACEOF @@ -12562,7 +13140,7 @@ done for ac_header in sys/timeb.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/timeb.h" "ac_cv_header_sys_timeb_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_timeb_h" = x""yes; then : +if test "x$ac_cv_header_sys_timeb_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_TIMEB_H 1 _ACEOF @@ -12574,7 +13152,7 @@ done for ac_header in signal.h do : ac_fn_c_check_header_mongrel "$LINENO" "signal.h" "ac_cv_header_signal_h" "$ac_includes_default" -if test "x$ac_cv_header_signal_h" = x""yes; then : +if test "x$ac_cv_header_signal_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SIGNAL_H 1 _ACEOF @@ -12590,7 +13168,7 @@ do : # endif " -if test "x$ac_cv_header_arpa_nameser_h" = x""yes; then : +if test "x$ac_cv_header_arpa_nameser_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ARPA_NAMESER_H 1 _ACEOF @@ -12612,7 +13190,7 @@ do : # endif " -if test "x$ac_cv_header_resolv_h" = x""yes; then : +if test "x$ac_cv_header_resolv_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_RESOLV_H 1 _ACEOF @@ -12624,7 +13202,7 @@ done for ac_header in dl.h do : ac_fn_c_check_header_mongrel "$LINENO" "dl.h" "ac_cv_header_dl_h" "$ac_includes_default" -if test "x$ac_cv_header_dl_h" = x""yes; then : +if test "x$ac_cv_header_dl_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DL_H 1 _ACEOF @@ -12636,7 +13214,7 @@ done for ac_header in dlfcn.h do : ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" -if test "x$ac_cv_header_dlfcn_h" = x""yes; then : +if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF @@ -12647,12 +13225,30 @@ done +echo Checking types + +ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" +case $ac_cv_c_uint32_t in #( + no|yes) ;; #( + *) + +$as_echo "#define _UINT32_T 1" >>confdefs.h + + +cat >>confdefs.h <<_ACEOF +#define uint32_t $ac_cv_c_uint32_t +_ACEOF +;; + esac + + + echo Checking libraries for ac_func in strftime do : ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime" -if test "x$ac_cv_func_strftime" = x""yes; then : +if test "x$ac_cv_func_strftime" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRFTIME 1 _ACEOF @@ -12661,7 +13257,7 @@ else # strftime is in -lintl on SCO UNIX. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strftime in -lintl" >&5 $as_echo_n "checking for strftime in -lintl... " >&6; } -if test "${ac_cv_lib_intl_strftime+set}" = set; then : +if ${ac_cv_lib_intl_strftime+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -12695,7 +13291,7 @@ LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_strftime" >&5 $as_echo "$ac_cv_lib_intl_strftime" >&6; } -if test "x$ac_cv_lib_intl_strftime" = x""yes; then : +if test "x$ac_cv_lib_intl_strftime" = xyes; then : $as_echo "#define HAVE_STRFTIME 1" >>confdefs.h LIBS="-lintl $LIBS" @@ -12752,8 +13348,7 @@ _ACEOF fi done - -for ac_func in printf sprintf fprintf snprintf vfprintf vsprintf vsnprintf sscanf +for ac_func in rand rand_r srand time do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -12762,11 +13357,23 @@ if eval test \"x\$"$as_ac_var"\" = x"yes"; then : #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF -else - NEED_TRIO=1 fi done +for ac_func in isascii mmap munmap putenv +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for va_copy" >&5 $as_echo_n "checking for va_copy... " >&6; } @@ -12828,7 +13435,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostent" >&5 $as_echo_n "checking for library containing gethostent... " >&6; } -if test "${ac_cv_search_gethostent+set}" = set; then : +if ${ac_cv_search_gethostent+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS @@ -12862,11 +13469,11 @@ for ac_lib in '' nsl; do fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test "${ac_cv_search_gethostent+set}" = set; then : + if ${ac_cv_search_gethostent+:} false; then : break fi done -if test "${ac_cv_search_gethostent+set}" = set; then : +if ${ac_cv_search_gethostent+:} false; then : else ac_cv_search_gethostent=no @@ -12884,7 +13491,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing setsockopt" >&5 $as_echo_n "checking for library containing setsockopt... " >&6; } -if test "${ac_cv_search_setsockopt+set}" = set; then : +if ${ac_cv_search_setsockopt+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS @@ -12918,11 +13525,11 @@ for ac_lib in '' socket net network; do fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test "${ac_cv_search_setsockopt+set}" = set; then : + if ${ac_cv_search_setsockopt+:} false; then : break fi done -if test "${ac_cv_search_setsockopt+set}" = set; then : +if ${ac_cv_search_setsockopt+:} false; then : else ac_cv_search_setsockopt=no @@ -12940,7 +13547,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing connect" >&5 $as_echo_n "checking for library containing connect... " >&6; } -if test "${ac_cv_search_connect+set}" = set; then : +if ${ac_cv_search_connect+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS @@ -12974,11 +13581,11 @@ for ac_lib in '' inet; do fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test "${ac_cv_search_connect+set}" = set; then : + if ${ac_cv_search_connect+:} false; then : break fi done -if test "${ac_cv_search_connect+set}" = set; then : +if ${ac_cv_search_connect+:} false; then : else ac_cv_search_connect=no @@ -12998,7 +13605,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type of socket length (socklen_t)" >&5 $as_echo_n "checking for type of socket length (socklen_t)... " >&6; } cat > conftest.$ac_ext < @@ -13009,7 +13616,7 @@ int main(void) { (void)getsockopt (1, 1, 1, NULL, (socklen_t *)NULL) ; return 0; } EOF -if { (eval echo configure:13012: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then +if { (eval echo configure:13619: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then rm -rf conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: result: socklen_t *" >&5 @@ -13021,7 +13628,7 @@ else rm -rf conftest* cat > conftest.$ac_ext < @@ -13032,7 +13639,7 @@ int main(void) { (void)getsockopt (1, 1, 1, NULL, (size_t *)NULL) ; return 0; } EOF -if { (eval echo configure:13035: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then +if { (eval echo configure:13642: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then rm -rf conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: result: size_t *" >&5 @@ -13044,7 +13651,7 @@ else rm -rf conftest* cat > conftest.$ac_ext < @@ -13055,7 +13662,7 @@ int main(void) { (void)getsockopt (1, 1, 1, NULL, (int *)NULL) ; return 0; } EOF -if { (eval echo configure:13058: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then +if { (eval echo configure:13665: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then rm -rf conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: result: int *" >&5 @@ -13100,8 +13707,8 @@ if test $enable_ipv6 = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include - #include +# include +# include int main () @@ -13135,8 +13742,8 @@ $as_echo_n "checking struct sockaddr::ss_family... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include - #include +# include +# include int main () @@ -13164,8 +13771,8 @@ $as_echo_n "checking broken struct sockaddr::ss_family... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include - #include +# include +# include int main () @@ -13202,7 +13809,7 @@ $as_echo "$as_me: WARNING: ss_family and __ss_family not found" >&2;} have_getaddrinfo=no ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo" -if test "x$ac_cv_func_getaddrinfo" = x""yes; then : +if test "x$ac_cv_func_getaddrinfo" = xyes; then : have_getaddrinfo=yes fi @@ -13211,7 +13818,7 @@ fi as_ac_Lib=`$as_echo "ac_cv_lib_$lib''_getaddrinfo" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getaddrinfo in -l$lib" >&5 $as_echo_n "checking for getaddrinfo in -l$lib... " >&6; } -if eval "test \"\${$as_ac_Lib+set}\"" = set; then : +if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -13263,14 +13870,14 @@ fi ac_fn_c_check_func "$LINENO" "isnan" "ac_cv_func_isnan" -if test "x$ac_cv_func_isnan" = x""yes; then : +if test "x$ac_cv_func_isnan" = xyes; then : $as_echo "#define HAVE_ISNAN /**/" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for isnan in -lm" >&5 $as_echo_n "checking for isnan in -lm... " >&6; } -if test "${ac_cv_lib_m_isnan+set}" = set; then : +if ${ac_cv_lib_m_isnan+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -13304,7 +13911,7 @@ LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_isnan" >&5 $as_echo "$ac_cv_lib_m_isnan" >&6; } -if test "x$ac_cv_lib_m_isnan" = x""yes; then : +if test "x$ac_cv_lib_m_isnan" = xyes; then : $as_echo "#define HAVE_ISNAN /**/" >>confdefs.h @@ -13314,14 +13921,14 @@ fi ac_fn_c_check_func "$LINENO" "isinf" "ac_cv_func_isinf" -if test "x$ac_cv_func_isinf" = x""yes; then : +if test "x$ac_cv_func_isinf" = xyes; then : $as_echo "#define HAVE_ISINF /**/" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for isinf in -lm" >&5 $as_echo_n "checking for isinf in -lm... " >&6; } -if test "${ac_cv_lib_m_isinf+set}" = set; then : +if ${ac_cv_lib_m_isinf+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -13355,7 +13962,7 @@ LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_isinf" >&5 $as_echo "$ac_cv_lib_m_isinf" >&6; } -if test "x$ac_cv_lib_m_isinf" = x""yes; then : +if test "x$ac_cv_lib_m_isinf" = xyes; then : $as_echo "#define HAVE_ISINF /**/" >>confdefs.h @@ -13392,7 +13999,10 @@ else CFLAGS="${CFLAGS} -fexceptions" fi + # warnings we'd like to see CFLAGS="${CFLAGS} -pedantic -W -Wformat -Wunused -Wimplicit -Wreturn-type -Wswitch -Wcomment -Wtrigraphs -Wformat -Wchar-subscripts -Wuninitialized -Wparentheses -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls" + # warnings we'd like to supress + CFLAGS="${CFLAGS} -Wno-long-long" case "${host}" in alpha*-*-linux* ) CFLAGS="${CFLAGS} -mieee" @@ -13454,7 +14064,7 @@ if test "$with_python" != "no" ; then set dummy python python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 python1.6 python1.5; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PYTHON+set}" = set; then : +if ${ac_cv_path_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON in @@ -13570,7 +14180,7 @@ if test "$with_modules" != "no" ; then MODULE_EXTENSION=".dll" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lcygwin" >&5 $as_echo_n "checking for dlopen in -lcygwin... " >&6; } -if test "${ac_cv_lib_cygwin_dlopen+set}" = set; then : +if ${ac_cv_lib_cygwin_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -13604,7 +14214,7 @@ LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cygwin_dlopen" >&5 $as_echo "$ac_cv_lib_cygwin_dlopen" >&6; } -if test "x$ac_cv_lib_cygwin_dlopen" = x""yes; then : +if test "x$ac_cv_lib_cygwin_dlopen" = xyes; then : WITH_MODULES=1 MODULE_PLATFORM_LIBS= @@ -13621,13 +14231,13 @@ fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = x""yes; then : +if test "x$ac_cv_func_shl_load" = xyes; then : libxml_have_shl_load=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then : +if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -13661,20 +14271,20 @@ LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : MODULE_PLATFORM_LIBS="-ldld" libxml_have_shl_load=yes else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = x""yes; then : +if test "x$ac_cv_func_dlopen" = xyes; then : libxml_have_dlopen=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : +if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -13708,7 +14318,7 @@ LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : MODULE_PLATFORM_LIBS="-ldl" libxml_have_dlopen=yes @@ -13812,12 +14422,23 @@ if test "$with_threads" = "no" ; then echo Disabling multithreaded support else echo Enabling multithreaded support + + case $host_os in + *mingw32*) if test "$with_threads" != "pthread" && test "$with_threads" != "no"; then + WITH_THREADS="1" + THREADS_W32="1" + THREAD_CFLAGS="$THREAD_CFLAGS -DHAVE_WIN32_THREADS" + fi + ;; + esac + + if test -z "$THREADS_W32"; then if test "$with_threads" = "pthread" || test "$with_threads" = "" || test "$with_threads" = "yes" ; then - ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" -if test "x$ac_cv_header_pthread_h" = x""yes; then : + ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" +if test "x$ac_cv_header_pthread_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in -lpthread" >&5 $as_echo_n "checking for pthread_join in -lpthread... " >&6; } -if test "${ac_cv_lib_pthread_pthread_join+set}" = set; then : +if ${ac_cv_lib_pthread_pthread_join+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -13851,29 +14472,25 @@ LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_join" >&5 $as_echo "$ac_cv_lib_pthread_pthread_join" >&6; } -if test "x$ac_cv_lib_pthread_pthread_join" = x""yes; then : +if test "x$ac_cv_lib_pthread_pthread_join" = xyes; then : - THREAD_LIBS="-lpthread" + THREAD_LIBS="-lpthread" $as_echo "#define HAVE_LIBPTHREAD /**/" >>confdefs.h $as_echo "#define HAVE_PTHREAD_H /**/" >>confdefs.h - WITH_THREADS="1" + WITH_THREADS="1" fi fi + fi fi + case $host_os in - *mingw32*) if test "$THREAD_LIBS" != "-lpthread"; then - WITH_THREADS="1" - THREADS_W32="Win32" - THREAD_CFLAGS="$THREAD_CFLAGS -DHAVE_WIN32_THREADS" - fi - ;; *cygwin*) THREAD_LIBS="" ;; *beos*) WITH_THREADS="1" @@ -13916,6 +14533,13 @@ fi + if test -n "$THREADS_W32"; then + THREADS_W32_TRUE= + THREADS_W32_FALSE='#' +else + THREADS_W32_TRUE='#' + THREADS_W32_FALSE= +fi if test "$with_history" = "yes" ; then @@ -13925,7 +14549,7 @@ if test "$with_history" = "yes" ; then as_ac_Lib=`$as_echo "ac_cv_lib_${termlib}''_tputs" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tputs in -l${termlib}" >&5 $as_echo_n "checking for tputs in -l${termlib}... " >&6; } -if eval "test \"\${$as_ac_Lib+set}\"" = set; then : +if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -13968,10 +14592,10 @@ fi done ac_fn_c_check_header_mongrel "$LINENO" "readline/history.h" "ac_cv_header_readline_history_h" "$ac_includes_default" -if test "x$ac_cv_header_readline_history_h" = x""yes; then : +if test "x$ac_cv_header_readline_history_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for append_history in -lhistory" >&5 $as_echo_n "checking for append_history in -lhistory... " >&6; } -if test "${ac_cv_lib_history_append_history+set}" = set; then : +if ${ac_cv_lib_history_append_history+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -14005,7 +14629,7 @@ LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_history_append_history" >&5 $as_echo "$ac_cv_lib_history_append_history" >&6; } -if test "x$ac_cv_lib_history_append_history" = x""yes; then : +if test "x$ac_cv_lib_history_append_history" = xyes; then : RDL_LIBS="-lhistory" @@ -14017,10 +14641,10 @@ fi ac_fn_c_check_header_mongrel "$LINENO" "readline/readline.h" "ac_cv_header_readline_readline_h" "$ac_includes_default" -if test "x$ac_cv_header_readline_readline_h" = x""yes; then : +if test "x$ac_cv_header_readline_readline_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5 $as_echo_n "checking for readline in -lreadline... " >&6; } -if test "${ac_cv_lib_readline_readline+set}" = set; then : +if ${ac_cv_lib_readline_readline+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -14054,7 +14678,7 @@ LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_readline_readline" >&5 $as_echo "$ac_cv_lib_readline_readline" >&6; } -if test "x$ac_cv_lib_readline_readline" = x""yes; then : +if test "x$ac_cv_lib_readline_readline" = xyes; then : RDL_LIBS="-lreadline $RDL_LIBS $tcap" @@ -14163,6 +14787,14 @@ else TEST_SAX=SAXtests fi + if test "${WITH_TRIO}" = "1"; then + WITH_SAX1_SOURCES_TRUE= + WITH_SAX1_SOURCES_FALSE='#' +else + WITH_SAX1_SOURCES_TRUE='#' + WITH_SAX1_SOURCES_FALSE= +fi + if test "$with_push" = "no" ; then @@ -14325,7 +14957,7 @@ else fi ac_fn_c_check_header_mongrel "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default" -if test "x$ac_cv_header_iconv_h" = x""yes; then : +if test "x$ac_cv_header_iconv_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -14400,7 +15032,7 @@ fi if test "$WITH_ICONV" = "1" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 $as_echo_n "checking for iconv declaration... " >&6; } - if test "${xml_cv_iconv_arg2+set}" = set; then : + if ${xml_cv_iconv_arg2+:} false; then : $as_echo_n "(cached) " >&6 else @@ -14462,14 +15094,14 @@ XML_LIBTOOLLIBS="libxml2.la" WITH_ICU=0 +ICU_LIBS="" if test "$with_icu" != "yes" ; then echo Disabling ICU support else ICU_CONFIG=icu-config if ${ICU_CONFIG} --cflags >/dev/null 2>&1 then - ICU_LIBS=`icu-config --ldflags` - LDFLAGS="$LDFLAGS $ICU_LIBS" + ICU_LIBS=`${ICU_CONFIG} --ldflags` WITH_ICU=1 echo Enabling ICU support else @@ -14478,6 +15110,7 @@ else fi + WITH_ISO8859X=1 if test "$WITH_ICONV" != "1" ; then if test "$with_iso8859x" = "no" ; then @@ -14576,15 +15209,9 @@ case "$host" in $as_echo "#define _WINSOCKAPI_ 1" >>confdefs.h - -$as_echo "#define snprintf _snprintf" >>confdefs.h - - -$as_echo "#define vsnprintf _vsnprintf" >>confdefs.h - if test "${PYTHON}" != "" then - WIN32_EXTRA_PYTHON_LIBADD="-L${pythondir}/../../libs -lpython${PYTHON_VERSION//./}" + WIN32_EXTRA_PYTHON_LIBADD="-L${pythondir}/../../libs -lpython$(echo ${PYTHON_VERSION} | tr -d .)" fi ;; *-*-cygwin*) @@ -14601,6 +15228,21 @@ esac +for ac_func in printf sprintf fprintf snprintf vfprintf vsprintf vsnprintf sscanf +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +else + NEED_TRIO=1 +fi +done + + if test "$with_coverage" = "yes" -a "${GCC}" = "yes" then echo Enabling code coverage for GCC @@ -14636,7 +15278,7 @@ RELDATE=`date +'%a %b %e %Y'` rm -f COPYING.LIB COPYING -ln -s Copyright COPYING +ln -s $srcdir/Copyright COPYING # keep on one line for cygwin c.f. #130896 ac_config_files="$ac_config_files libxml2.spec:libxml.spec.in Makefile include/Makefile include/libxml/Makefile doc/Makefile doc/examples/Makefile doc/devhelp/Makefile example/Makefile python/Makefile python/tests/Makefile xstc/Makefile include/libxml/xmlversion.h xml2-config libxml-2.0.pc libxml-2.0-uninstalled.pc python/setup.py" @@ -14705,10 +15347,21 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && + if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} @@ -14724,6 +15377,7 @@ DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= +U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' @@ -14770,8 +15424,16 @@ if test -z "${WITH_TRIO_SOURCES_TRUE}" && test -z "${WITH_TRIO_SOURCES_FALSE}"; as_fn_error $? "conditional \"WITH_TRIO_SOURCES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${THREADS_W32_TRUE}" && test -z "${THREADS_W32_FALSE}"; then + as_fn_error $? "conditional \"THREADS_W32\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${WITH_SAX1_SOURCES_TRUE}" && test -z "${WITH_SAX1_SOURCES_FALSE}"; then + as_fn_error $? "conditional \"WITH_SAX1_SOURCES\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi -: ${CONFIG_STATUS=./config.status} +: "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" @@ -14872,6 +15534,7 @@ fi IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. +as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -15179,7 +15842,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by $as_me, which was -generated by GNU Autoconf 2.66. Invocation command line was +generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -15245,7 +15908,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status -configured by $0, generated by GNU Autoconf 2.66, +configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. @@ -15266,11 +15929,16 @@ ac_need_defaults=: while test $# != 0 do case $1 in - --*=*) + --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; *) ac_option=$1 ac_optarg=$2 @@ -15292,6 +15960,7 @@ do $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; @@ -15367,9 +16036,6 @@ AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' -AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' -DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' @@ -15378,6 +16044,7 @@ pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' @@ -15398,12 +16065,20 @@ exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' @@ -15418,14 +16093,17 @@ lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$de lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' @@ -15449,7 +16127,6 @@ with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' @@ -15458,12 +16135,12 @@ hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_q hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' -fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' @@ -15503,11 +16180,9 @@ _LTECHO_EOF' } # Quote evaled strings. -for var in AS \ -DLLTOOL \ -OBJDUMP \ -SHELL \ +for var in SHELL \ ECHO \ +PATH_SEPARATOR \ SED \ GREP \ EGREP \ @@ -15518,10 +16193,16 @@ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ +OBJDUMP \ deplibs_check_method \ file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ +archiver_list_spec \ STRIP \ RANLIB \ CC \ @@ -15531,12 +16212,14 @@ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_wl \ lt_prog_compiler_pic \ +lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ +MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ @@ -15550,9 +16233,7 @@ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ -hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ -fix_srcfile_path \ exclude_expsyms \ include_expsyms \ file_list_spec \ @@ -15588,6 +16269,7 @@ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ +postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ @@ -15674,9 +16356,10 @@ fi # after its creation but before its name has been assigned to `$tmp'. $debug || { - tmp= + tmp= ac_tmp= trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } @@ -15684,12 +16367,13 @@ $debug || { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" + test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. @@ -15711,7 +16395,7 @@ else ac_cs_awk_cr=$ac_cr fi -echo 'BEGIN {' >"$tmp/subs1.awk" && +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF @@ -15739,7 +16423,7 @@ done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h @@ -15787,7 +16471,7 @@ t delim rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" @@ -15819,7 +16503,7 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF @@ -15853,7 +16537,7 @@ fi # test -n "$CONFIG_FILES" # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then -cat >"$tmp/defines.awk" <<\_ACAWK || +cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF @@ -15865,8 +16549,8 @@ _ACEOF # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do - ac_t=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_t"; then + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 @@ -15986,7 +16670,7 @@ do for ac_f do case $ac_f in - -) ac_f="$tmp/stdin";; + -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. @@ -16021,7 +16705,7 @@ $as_echo "$as_me: creating $ac_file" >&6;} esac case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ + *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; @@ -16158,21 +16842,22 @@ s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} - rm -f "$tmp/stdin" + rm -f "$ac_tmp/stdin" case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; @@ -16183,20 +16868,20 @@ which seems to be undefined. Please make sure it is defined" >&2;} if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" - } >"$tmp/config.h" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" - mv "$tmp/config.h" "$ac_file" \ + mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. @@ -16358,8 +17043,8 @@ $as_echo X"$file" | # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010 Free Software Foundation, -# Inc. +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. @@ -16391,15 +17076,6 @@ available_tags="" # ### BEGIN LIBTOOL CONFIG -# Assembler program. -AS=$lt_AS - -# DLL creation program. -DLLTOOL=$lt_DLLTOOL - -# Object dumper program. -OBJDUMP=$lt_OBJDUMP - # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision @@ -16422,6 +17098,9 @@ SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + # The host system. host_alias=$host_alias host=$host @@ -16471,16 +17150,42 @@ SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method -# Command to use when deplibs_check_method == "file_magic". +# Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + # The archiver. AR=$lt_AR + +# Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + # A symbol stripping program. STRIP=$lt_STRIP @@ -16510,6 +17215,12 @@ global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot=$lt_sysroot + # The name of the directory that contains temporary libtool files. objdir=$objdir @@ -16519,6 +17230,9 @@ MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL @@ -16633,12 +17347,12 @@ with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static @@ -16688,10 +17402,6 @@ no_undefined_flag=$lt_no_undefined_flag # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec -# If ld is used when linking, flag to hardcode \$libdir into a binary -# during linking. This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld - # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator @@ -16725,9 +17435,6 @@ inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols @@ -16743,6 +17450,9 @@ include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + # Specify filename containing input files. file_list_spec=$lt_file_list_spec @@ -16775,210 +17485,169 @@ ltmain="$ac_aux_dir/ltmain.sh" # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) - case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $* )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} + if test x"$xsi_shell" = xyes; then + sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ +func_dirname ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[^=]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$@"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1+=\$2" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1=\$$1\$2" -} - -_LT_EOF - ;; - esac + sed -e '/^func_basename ()$/,/^} # func_basename /c\ +func_basename ()\ +{\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) + sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ +func_dirname_and_basename ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: - mv -f "$cfgfile" "$ofile" || + + sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ +func_stripname ()\ +{\ +\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ +\ # positional parameters, so assign one to ordinary parameter first.\ +\ func_stripname_result=${3}\ +\ func_stripname_result=${func_stripname_result#"${1}"}\ +\ func_stripname_result=${func_stripname_result%"${2}"}\ +} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ +func_split_long_opt ()\ +{\ +\ func_split_long_opt_name=${1%%=*}\ +\ func_split_long_opt_arg=${1#*=}\ +} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ +func_split_short_opt ()\ +{\ +\ func_split_short_opt_arg=${1#??}\ +\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ +} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ +func_lo2o ()\ +{\ +\ case ${1} in\ +\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ +\ *) func_lo2o_result=${1} ;;\ +\ esac\ +} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_xform ()$/,/^} # func_xform /c\ +func_xform ()\ +{\ + func_xform_result=${1%.*}.lo\ +} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_arith ()$/,/^} # func_arith /c\ +func_arith ()\ +{\ + func_arith_result=$(( $* ))\ +} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_len ()$/,/^} # func_len /c\ +func_len ()\ +{\ + func_len_result=${#1}\ +} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + +fi + +if test x"$lt_shell_append" = xyes; then + sed -e '/^func_append ()$/,/^} # func_append /c\ +func_append ()\ +{\ + eval "${1}+=\\${2}"\ +} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ +func_append_quoted ()\ +{\ +\ func_quote_for_eval "${2}"\ +\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ +} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 +$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} +fi + + + mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" diff --git a/lib/3rdparty/libxml2/configure.in b/lib/3rdparty/libxml2/configure.in index 59d0629e658..3d5f48be247 100644 --- a/lib/3rdparty/libxml2/configure.in +++ b/lib/3rdparty/libxml2/configure.in @@ -1,13 +1,14 @@ dnl Process this file with autoconf to produce a configure script. -AC_PREREQ(2.59) -AC_INIT(entities.c) -AM_CONFIG_HEADER(config.h) +AC_PREREQ([2.68]) +AC_INIT +AC_CONFIG_SRCDIR([entities.c]) +AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) AC_CANONICAL_HOST LIBXML_MAJOR_VERSION=2 -LIBXML_MINOR_VERSION=7 -LIBXML_MICRO_VERSION=8 +LIBXML_MINOR_VERSION=9 +LIBXML_MICRO_VERSION=0 LIBXML_MICRO_VERSION_SUFFIX= LIBXML_VERSION=$LIBXML_MAJOR_VERSION.$LIBXML_MINOR_VERSION.$LIBXML_MICRO_VERSION$LIBXML_MICRO_VERSION_SUFFIX LIBXML_VERSION_INFO=`expr $LIBXML_MAJOR_VERSION + $LIBXML_MINOR_VERSION`:$LIBXML_MICRO_VERSION:$LIBXML_MINOR_VERSION @@ -29,7 +30,7 @@ else if test -d .svn ; then LIBXML_VERSION_EXTRA="-SVN$extra" fi else if test -d .git ; then - extra=`git describe | sed 's+LIBXML[[0-9.]]*-++'` + extra=`git describe 2>/dev/null | sed 's+LIBXML[[0-9.]]*-++'` echo extra=$extra if test "$extra" != "" then @@ -50,9 +51,15 @@ VERSION=${LIBXML_VERSION} AM_INIT_AUTOMAKE(libxml2, $VERSION) +# Support silent build rules, requires at least automake-1.11. Disable +# by either passing --disable-silent-rules to configure or passing V=1 +# to make +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) + dnl Checks for programs. AC_PROG_CC AC_PROG_INSTALL +AC_PROG_LN_S AC_PROG_MKDIR_P AC_PROG_CPP AC_PATH_PROG(RM, rm, /bin/rm) @@ -63,12 +70,7 @@ AC_PATH_PROG(WGET, wget, /usr/bin/wget) AC_PATH_PROG(XMLLINT, xmllint, /usr/bin/xmllint) AC_PATH_PROG(XSLTPROC, xsltproc, /usr/bin/xsltproc) -dnl Make sure we have an ANSI compiler -AM_C_PROTOTYPES -test "x$U" != "x" && AC_MSG_ERROR(Compiler not ANSI compliant) - -AC_LIBTOOL_WIN32_DLL -AM_PROG_LIBTOOL +LT_INIT dnl dnl if the system support linker version scripts for symbol versioning @@ -84,7 +86,7 @@ else esac fi AC_SUBST(VERSION_SCRIPT_FLAGS) -AM_CONDITIONAL([USE_VERSION_SCRIPT], [test -z "$VERSION_SCRIPT_FLAGS"]) +AM_CONDITIONAL([USE_VERSION_SCRIPT], [test -n "$VERSION_SCRIPT_FLAGS"]) dnl dnl We process the AC_ARG_WITH first so that later we can modify @@ -96,7 +98,7 @@ dnl dnl zlib option might change flags, so we save them initially dnl _cppflags="${CPPFLAGS}" -_ldflags="${LDFLAGS}" +_libs="${LIBS}" AC_ARG_WITH(c14n, [ --with-c14n add the Canonicalization support (on)]) @@ -115,11 +117,11 @@ AC_ARG_WITH(history, AC_ARG_WITH(html, [ --with-html add the HTML support (on)]) dnl Specific dir for HTML output ? -AC_ARG_WITH(html-dir, AC_HELP_STRING([--with-html-dir=path], +AC_ARG_WITH(html-dir, AS_HELP_STRING([--with-html-dir=path], [path to base html directory, default $datadir/doc/html]), [HTML_DIR=$withval], [HTML_DIR='$(datadir)/doc']) -AC_ARG_WITH(html-subdir, AC_HELP_STRING([--with-html-subdir=path], +AC_ARG_WITH(html-subdir, AS_HELP_STRING([--with-html-subdir=path], [directory used under html-dir, default $PACKAGE-$VERSION/html]), [test "x$withval" != "x" && HTML_DIR="$HTML_DIR/$withval"], [HTML_DIR="$HTML_DIR/\$(PACKAGE)-\$(VERSION)/html"]) @@ -153,7 +155,7 @@ AC_ARG_WITH(readline, if test "$withval" != "no" -a "$withval" != "yes"; then RDL_DIR=$withval CPPFLAGS="${CPPFLAGS} -I$withval/include" - LDFLAGS="${LDFLAGS} -L$withval/lib" + LIBS="${LIBS} -L$withval/lib" fi ]) AC_ARG_WITH(regexps, @@ -189,15 +191,26 @@ AC_ARG_WITH(zlib, if test "$withval" != "no" -a "$withval" != "yes"; then Z_DIR=$withval CPPFLAGS="${CPPFLAGS} -I$withval/include" - LDFLAGS="${LDFLAGS} -L$withval/lib" + LIBS="${LIBS} -L$withval/lib" + fi +]) +AC_ARG_WITH(lzma, +[ --with-lzma[[=DIR]] use liblzma in DIR],[ + if test "$withval" != "no" -a "$withval" != "yes"; then + LZMA_DIR=$withval + CPPFLAGS="${CPPFLAGS} -I$withval/include" + LIBS="${LIBS} -L$withval/lib" fi ]) AC_ARG_WITH(coverage, [ --with-coverage build for code coverage with GCC (off)]) AC_ARG_ENABLE(rebuild-docs, -[ --enable-rebuild-docs[[=yes/no]] rebuild some generated docs [[default=yes]]]) -AM_CONDITIONAL([REBUILD_DOCS], [test "$enable_rebuild_docs" = "no"]) +[ --enable-rebuild-docs[[=yes/no]] rebuild some generated docs [[default=no]]]) +if test "$enable_rebuild_docs" = "yes" -a "$srcdir" != "."; then + AC_MSG_ERROR([cannot rebuild docs when builddir != srcdir]) +fi +AM_CONDITIONAL([REBUILD_DOCS], [test "$enable_rebuild_docs" = "yes" -o "$USER" = "veillard"]) dnl dnl hard dependancies on options @@ -394,8 +407,32 @@ AC_SUBST(Z_CFLAGS) AC_SUBST(Z_LIBS) AC_SUBST(WITH_ZLIB) +echo Checking lzma + +dnl Checks for lzma library. + +WITH_LZMA=0 +if test "$with_lzma" = "no"; then + echo "Disabling compression support" +else + AC_CHECK_HEADERS(lzma.h, + AC_CHECK_LIB(lzma, lzma_code,[ + AC_DEFINE([HAVE_LIBLZMA], [1], [Have compression library]) + WITH_LZMA=1 + if test "x${LZMA_DIR}" != "x"; then + LZMA_CFLAGS="-I${LZMA_DIR}/include" + LZMA_LIBS="-L${LZMA_DIR}/lib -llzma" + else + LZMA_LIBS="-llzma" + fi])) +fi + +AC_SUBST(LZMA_CFLAGS) +AC_SUBST(LZMA_LIBS) +AC_SUBST(WITH_LZMA) + CPPFLAGS=${_cppflags} -LDFLAGS=${_ldflags} +LIBS=${_libs} echo Checking headers @@ -412,7 +449,7 @@ AC_CHECK_HEADERS([stdarg.h]) AC_CHECK_HEADERS([sys/stat.h]) AC_CHECK_HEADERS([sys/types.h]) AC_CHECK_HEADERS([stdint.h]) -AC_CHECK_HEADERS([inttypes.h.h]) +AC_CHECK_HEADERS([inttypes.h]) AC_CHECK_HEADERS([time.h]) AC_CHECK_HEADERS([ansidecl.h]) AC_CHECK_HEADERS([ieeefp.h]) @@ -467,6 +504,11 @@ AC_CHECK_HEADERS([dl.h]) AC_CHECK_HEADERS([dlfcn.h]) +echo Checking types + +AC_TYPE_UINT32_T + + echo Checking libraries dnl Checks for library functions. @@ -475,15 +517,18 @@ AC_CHECK_FUNCS(strdup strndup strerror) AC_CHECK_FUNCS(finite isnand fp_class class fpclass) AC_CHECK_FUNCS(strftime localtime gettimeofday ftime) AC_CHECK_FUNCS(stat _stat signal) +AC_CHECK_FUNCS(rand rand_r srand time) +AC_CHECK_FUNCS(isascii mmap munmap putenv) -dnl Checking the standard string functions availability -AC_CHECK_FUNCS(printf sprintf fprintf snprintf vfprintf vsprintf vsnprintf sscanf,, - NEED_TRIO=1) +AH_VERBATIM([HAVE_MUNMAP_AFTER],[/* mmap() is no good without munmap() */ +#if defined(HAVE_MMAP) && !defined(HAVE_MUNMAP) +# undef /**/ HAVE_MMAP +#endif]) dnl Checking for va_copy availability AC_MSG_CHECKING([for va_copy]) -AC_TRY_LINK([#include -va_list ap1,ap2;], [va_copy(ap1,ap2);], +AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include +va_list ap1,ap2;]], [[va_copy(ap1,ap2);]])], have_va_copy=yes, have_va_copy=no) AC_MSG_RESULT($have_va_copy) @@ -491,8 +536,8 @@ if test x"$have_va_copy" = x"yes"; then AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available]) else AC_MSG_CHECKING([for __va_copy]) - AC_TRY_LINK([#include - va_list ap1,ap2;], [__va_copy(ap1,ap2);], + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include + va_list ap1,ap2;]], [[__va_copy(ap1,ap2);]])], have___va_copy=yes, have___va_copy=no) AC_MSG_RESULT($have___va_copy) @@ -543,13 +588,13 @@ then fi if test $enable_ipv6 = yes; then have_ipv6=no - AC_TRY_COMPILE([ - #include - #include - ], [ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +# include +# include + ]], [[ struct sockaddr_storage ss; socket(AF_INET6, SOCK_STREAM, 0) - ], + ]])], have_ipv6=yes, have_ipv6=no ) @@ -567,26 +612,26 @@ if test $enable_ipv6 = yes; then dnl present. dnl ******************************************************************** AC_MSG_CHECKING([struct sockaddr::ss_family]) - AC_TRY_COMPILE([ - #include - #include - ], [ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +# include +# include + ]], [[ struct sockaddr_storage ss ; ss.ss_family = 0 ; - ], + ]])], have_ss_family=yes, have_ss_family=no ) AC_MSG_RESULT($have_ss_family) if test x$have_ss_family = xno ; then AC_MSG_CHECKING([broken struct sockaddr::ss_family]) - AC_TRY_COMPILE([ - #include - #include - ], [ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +# include +# include + ]], [[ struct sockaddr_storage ss ; ss.__ss_family = 0 ; - ], + ]])], have_broken_ss_family=yes, have_broken_ss_family=no ) @@ -659,8 +704,11 @@ else # CFLAGS="${CFLAGS} -fexceptions" fi - - CFLAGS="${CFLAGS} -pedantic -W -Wformat -Wunused -Wimplicit -Wreturn-type -Wswitch -Wcomment -Wtrigraphs -Wformat -Wchar-subscripts -Wuninitialized -Wparentheses -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls" + + # warnings we'd like to see + CFLAGS="${CFLAGS} -pedantic -W -Wformat -Wunused -Wimplicit -Wreturn-type -Wswitch -Wcomment -Wtrigraphs -Wformat -Wchar-subscripts -Wuninitialized -Wparentheses -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline -Wredundant-decls" + # warnings we'd like to supress + CFLAGS="${CFLAGS} -Wno-long-long" case "${host}" in alpha*-*-linux* ) CFLAGS="${CFLAGS} -mieee" @@ -911,22 +959,30 @@ if test "$with_threads" = "no" ; then echo Disabling multithreaded support else echo Enabling multithreaded support - dnl Use pthread by default - if test "$with_threads" = "pthread" || test "$with_threads" = "" || test "$with_threads" = "yes" ; then - AC_CHECK_HEADER(pthread.h, - AC_CHECK_LIB(pthread, pthread_join,[ - THREAD_LIBS="-lpthread" - AC_DEFINE([HAVE_LIBPTHREAD], [], [Define if pthread library is there (-lpthread)]) - AC_DEFINE([HAVE_PTHREAD_H], [], [Define if is there]) - WITH_THREADS="1"])) - fi + + dnl Default to native threads on Win32 case $host_os in - *mingw32*) if test "$THREAD_LIBS" != "-lpthread"; then + *mingw32*) if test "$with_threads" != "pthread" && test "$with_threads" != "no"; then WITH_THREADS="1" - THREADS_W32="Win32" - THREAD_CFLAGS="$THREAD_CFLAGS -DHAVE_WIN32_THREADS" + THREADS_W32="1" + THREAD_CFLAGS="$THREAD_CFLAGS -DHAVE_WIN32_THREADS" fi ;; + esac + + dnl Use pthread by default in other cases + if test -z "$THREADS_W32"; then + if test "$with_threads" = "pthread" || test "$with_threads" = "" || test "$with_threads" = "yes" ; then + AC_CHECK_HEADER(pthread.h, + AC_CHECK_LIB(pthread, pthread_join,[ + THREAD_LIBS="-lpthread" + AC_DEFINE([HAVE_LIBPTHREAD], [], [Define if pthread library is there (-lpthread)]) + AC_DEFINE([HAVE_PTHREAD_H], [], [Define if is there]) + WITH_THREADS="1"])) + fi + fi + + case $host_os in *cygwin*) THREAD_LIBS="" ;; *beos*) WITH_THREADS="1" @@ -969,7 +1025,7 @@ AC_SUBST(BASE_THREAD_LIBS) AC_SUBST(WITH_THREADS) AC_SUBST(THREAD_CFLAGS) AC_SUBST(TEST_THREADS) -AC_SUBST(THREADS_W32) +AM_CONDITIONAL([THREADS_W32],[test -n "$THREADS_W32"]) dnl dnl xmllint shell history @@ -1093,6 +1149,7 @@ else TEST_SAX=SAXtests fi AC_SUBST(WITH_SAX1) +AM_CONDITIONAL(WITH_SAX1_SOURCES, test "${WITH_TRIO}" = "1") AC_SUBST(TEST_SAX) if test "$with_push" = "no" ; then @@ -1259,10 +1316,10 @@ else AC_CHECK_HEADER(iconv.h, AC_MSG_CHECKING(for iconv) - AC_TRY_LINK([#include -#include ],[ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include +#include ]],[[ iconv_t cd = iconv_open ("",""); -iconv (cd, NULL, NULL, NULL, NULL);],[ +iconv (cd, NULL, NULL, NULL, NULL);]])],[ AC_MSG_RESULT(yes) WITH_ICONV=1],[ AC_MSG_RESULT(no) @@ -1273,10 +1330,10 @@ iconv (cd, NULL, NULL, NULL, NULL);],[ LDFLAGS="${LDFLAGS} ${ICONV_LIBS}" LIBS="${LIBS} -liconv" - AC_TRY_LINK([#include -#include ],[ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include +#include ]],[[ iconv_t cd = iconv_open ("",""); -iconv (cd, NULL, NULL, NULL, NULL);],[ +iconv (cd, NULL, NULL, NULL, NULL);]])],[ AC_MSG_RESULT(yes) WITH_ICONV=1 ICONV_LIBS="${ICONV_LIBS} -liconv" @@ -1289,7 +1346,7 @@ iconv (cd, NULL, NULL, NULL, NULL);],[ if test "$WITH_ICONV" = "1" ; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL(xml_cv_iconv_arg2, [ - AC_TRY_COMPILE([#include + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include #include extern #ifdef __cplusplus @@ -1300,7 +1357,7 @@ size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, si #else size_t iconv(); #endif -], [], xml_cv_iconv_arg2="", xml_cv_iconv_arg2="const")]) +]], [])], xml_cv_iconv_arg2="", xml_cv_iconv_arg2="const")]) xml_cv_iconv_decl="extern size_t iconv (iconv_t cd, $xml_cv_iconv_arg2 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" AC_MSG_RESULT([${xml_xxx:- @@ -1324,14 +1381,14 @@ XML_LIBTOOLLIBS="libxml2.la" AC_SUBST(WITH_ICONV) WITH_ICU=0 +ICU_LIBS="" if test "$with_icu" != "yes" ; then echo Disabling ICU support else ICU_CONFIG=icu-config if ${ICU_CONFIG} --cflags >/dev/null 2>&1 then - ICU_LIBS=`icu-config --ldflags` - LDFLAGS="$LDFLAGS $ICU_LIBS" + ICU_LIBS=`${ICU_CONFIG} --ldflags` WITH_ICU=1 echo Enabling ICU support else @@ -1339,6 +1396,7 @@ else fi fi AC_SUBST(WITH_ICU) +AC_SUBST(ICU_LIBS) WITH_ISO8859X=1 if test "$WITH_ICONV" != "1" ; then @@ -1436,11 +1494,9 @@ case "$host" in WIN32_EXTRA_LIBADD="-lws2_32" WIN32_EXTRA_LDFLAGS="-no-undefined" AC_DEFINE([_WINSOCKAPI_],1,[Using the Win32 Socket implementation]) - AC_DEFINE([snprintf],[_snprintf],[Win32 Std C name mangling work-around]) - AC_DEFINE([vsnprintf],[_vsnprintf],[Win32 Std C name mangling work-around]) if test "${PYTHON}" != "" then - WIN32_EXTRA_PYTHON_LIBADD="-L${pythondir}/../../libs -lpython${PYTHON_VERSION//./}" + WIN32_EXTRA_PYTHON_LIBADD="-L${pythondir}/../../libs -lpython$(echo ${PYTHON_VERSION} | tr -d .)" fi ;; *-*-cygwin*) @@ -1457,6 +1513,24 @@ AC_SUBST(WIN32_EXTRA_PYTHON_LIBADD) AC_SUBST(CYGWIN_EXTRA_LDFLAGS) AC_SUBST(CYGWIN_EXTRA_PYTHON_LIBADD) +dnl Checking the standard string functions availability +dnl +dnl Note mingw* has C99 implementation that produce expected xml numbers +dnl if code use {v}snprintf functions. +dnl If you like to activate at run-time C99 compatible number output +dnl see release note for mingw runtime 3.15: +dnl http://sourceforge.net/project/shownotes.php?release_id=24832 +dnl +dnl Also *win32*config.h files redefine them for various MSC compilers. +dnl +dnl So do not redefine {v}snprintf to _{v}snprintf like follwing: +dnl AC_DEFINE([snprintf],[_snprintf],[Win32 Std C name mangling work-around]) +dnl AC_DEFINE([vsnprintf],[_vsnprintf],[Win32 Std C name mangling work-around]) +dnl and do not redefine those functions is C-source files. +dnl +AC_CHECK_FUNCS(printf sprintf fprintf snprintf vfprintf vsprintf vsnprintf sscanf,, + NEED_TRIO=1) + if test "$with_coverage" = "yes" -a "${GCC}" = "yes" then echo Enabling code coverage for GCC @@ -1493,10 +1567,11 @@ AC_SUBST(RELDATE) AC_SUBST(PYTHON_TESTS) rm -f COPYING.LIB COPYING -ln -s Copyright COPYING +ln -s $srcdir/Copyright COPYING # keep on one line for cygwin c.f. #130896 -AC_OUTPUT(libxml2.spec:libxml.spec.in Makefile include/Makefile include/libxml/Makefile doc/Makefile doc/examples/Makefile doc/devhelp/Makefile example/Makefile python/Makefile python/tests/Makefile xstc/Makefile include/libxml/xmlversion.h xml2-config libxml-2.0.pc libxml-2.0-uninstalled.pc python/setup.py) +AC_CONFIG_FILES([libxml2.spec:libxml.spec.in Makefile include/Makefile include/libxml/Makefile doc/Makefile doc/examples/Makefile doc/devhelp/Makefile example/Makefile python/Makefile python/tests/Makefile xstc/Makefile include/libxml/xmlversion.h xml2-config libxml-2.0.pc libxml-2.0-uninstalled.pc python/setup.py]) +AC_OUTPUT chmod +x xml2-config python/setup.py echo Done configuring diff --git a/lib/3rdparty/libxml2/debugXML.c b/lib/3rdparty/libxml2/debugXML.c index c26217a3f31..3874b19fbf6 100644 --- a/lib/3rdparty/libxml2/debugXML.c +++ b/lib/3rdparty/libxml2/debugXML.c @@ -85,7 +85,7 @@ xmlCtxtDumpCleanCtxt(xmlDebugCtxtPtr ctxt ATTRIBUTE_UNUSED) * * Check that a given namespace is in scope on a node. * - * Returns 1 if in scope, -1 in case of argument error, + * Returns 1 if in scope, -1 in case of argument error, * -2 if the namespace is not in scope, and -3 if not on * an ancestor node. */ @@ -311,7 +311,7 @@ xmlCtxtGenericNodeCheck(xmlDebugCtxtPtr ctxt, xmlNodePtr node) { (node != (xmlNodePtr) node->parent->properties)) xmlDebugErr(ctxt, XML_CHECK_NO_PREV, "Attr has no prev and not first of attr list\n"); - + } else if ((node->parent != NULL) && (node->parent->children != node)) xmlDebugErr(ctxt, XML_CHECK_NO_PREV, "Node has no prev and not first of parent list\n"); @@ -1068,7 +1068,7 @@ xmlCtxtDumpNode(xmlDebugCtxtPtr ctxt, xmlNodePtr node) return; } xmlCtxtDumpOneNode(ctxt, node); - if ((node->type != XML_NAMESPACE_DECL) && + if ((node->type != XML_NAMESPACE_DECL) && (node->children != NULL) && (node->type != XML_ENTITY_REF_NODE)) { ctxt->depth++; xmlCtxtDumpNodeList(ctxt, node->children); @@ -1603,7 +1603,7 @@ int xmlLsCountNode(xmlNodePtr node) { int ret = 0; xmlNodePtr list = NULL; - + if (node == NULL) return(0); @@ -1644,7 +1644,7 @@ xmlLsCountNode(xmlNodePtr node) { ret = 1; break; } - for (;list != NULL;ret++) + for (;list != NULL;ret++) list = list->next; return(ret); } @@ -1712,11 +1712,11 @@ xmlLsOneNode(FILE *output, xmlNodePtr node) { if (node->type != XML_NAMESPACE_DECL) { if (node->properties != NULL) fprintf(output, "a"); - else + else fprintf(output, "-"); - if (node->nsDef != NULL) + if (node->nsDef != NULL) fprintf(output, "n"); - else + else fprintf(output, "-"); } @@ -1724,8 +1724,11 @@ xmlLsOneNode(FILE *output, xmlNodePtr node) { switch (node->type) { case XML_ELEMENT_NODE: - if (node->name != NULL) + if (node->name != NULL) { + if ((node->ns != NULL) && (node->ns->prefix != NULL)) + fprintf(output, "%s:", node->ns->prefix); fprintf(output, "%s", (const char *) node->name); + } break; case XML_ATTRIBUTE_NODE: if (node->name != NULL) @@ -1783,7 +1786,7 @@ xmlLsOneNode(FILE *output, xmlNodePtr node) { * xmlBoolToText: * @boolval: a bool to turn into text * - * Convenient way to turn bool into text + * Convenient way to turn bool into text * * Returns a pointer to either "True" or "False" */ @@ -1799,7 +1802,7 @@ xmlBoolToText(int boolval) #ifdef LIBXML_XPATH_ENABLED /**************************************************************** * * - * The XML shell related functions * + * The XML shell related functions * * * ****************************************************************/ @@ -2050,7 +2053,7 @@ xmlShellBase(xmlShellCtxtPtr ctxt, if (node == NULL) { fprintf(ctxt->output, "NULL\n"); return (0); - } + } base = xmlNodeGetBase(node->doc, node); @@ -2277,7 +2280,7 @@ xmlShellDir(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED, if (node == NULL) { fprintf(ctxt->output, "NULL\n"); return (0); - } + } if ((node->type == XML_DOCUMENT_NODE) || (node->type == XML_HTML_DOCUMENT_NODE)) { xmlDebugDumpDocumentHead(ctxt->output, (xmlDocPtr) node); @@ -2412,7 +2415,7 @@ xmlShellCat(xmlShellCtxtPtr ctxt, char *arg ATTRIBUTE_UNUSED, if (node == NULL) { fprintf(ctxt->output, "NULL\n"); return (0); - } + } if (ctxt->doc->type == XML_HTML_DOCUMENT_NODE) { #ifdef LIBXML_HTML_ENABLED if (node->type == XML_HTML_DOCUMENT_NODE) @@ -2696,6 +2699,8 @@ xmlShellDu(xmlShellCtxtPtr ctxt, } else if (node->type == XML_ELEMENT_NODE) { for (i = 0; i < indent; i++) fprintf(ctxt->output, " "); + if ((node->ns) && (node->ns->prefix)) + fprintf(ctxt->output, "%s:", node->ns->prefix); fprintf(ctxt->output, "%s\n", node->name); } else { } @@ -2748,7 +2753,7 @@ xmlShellDu(xmlShellCtxtPtr ctxt, * xmlShellPwd: * @ctxt: the shell context * @buffer: the output buffer - * @node: a node + * @node: a node * @node2: unused * * Implements the XML shell function "pwd" @@ -2793,7 +2798,7 @@ xmlShellPwd(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED, char *buffer, * @input: the line reading function * @output: the output FILE*, defaults to stdout if NULL * - * Implements the XML shell + * Implements the XML shell * This allow to load, validate, view, modify and save a document * using a environment similar to a UNIX commandline. */ @@ -2837,6 +2842,10 @@ xmlShell(xmlDocPtr doc, char *filename, xmlShellReadlineFunc input, while (1) { if (ctxt->node == (xmlNodePtr) ctxt->doc) snprintf(prompt, sizeof(prompt), "%s > ", "/"); + else if ((ctxt->node != NULL) && (ctxt->node->name) && + (ctxt->node->ns) && (ctxt->node->ns->prefix)) + snprintf(prompt, sizeof(prompt), "%s:%s > ", + (ctxt->node->ns->prefix), ctxt->node->name); else if ((ctxt->node != NULL) && (ctxt->node->name)) snprintf(prompt, sizeof(prompt), "%s > ", ctxt->node->name); else @@ -2911,6 +2920,7 @@ xmlShell(xmlDocPtr doc, char *filename, xmlShellReadlineFunc input, fprintf(ctxt->output, "\t the default namespace if any uses 'defaultns' prefix\n"); #endif /* LIBXML_XPATH_ENABLED */ fprintf(ctxt->output, "\tpwd display current working directory\n"); + fprintf(ctxt->output, "\twhereis display absolute path of [path] or current working directory\n"); fprintf(ctxt->output, "\tquit leave shell\n"); #ifdef LIBXML_OUTPUT_ENABLED fprintf(ctxt->output, "\tsave [name] save this document to name or the original name\n"); @@ -2960,7 +2970,79 @@ xmlShell(xmlDocPtr doc, char *filename, xmlShellReadlineFunc input, if (!xmlShellPwd(ctxt, dir, ctxt->node, NULL)) fprintf(ctxt->output, "%s\n", dir); } else if (!strcmp(command, "du")) { - xmlShellDu(ctxt, NULL, ctxt->node, NULL); + if (arg[0] == 0) { + xmlShellDu(ctxt, NULL, ctxt->node, NULL); + } else { + ctxt->pctxt->node = ctxt->node; +#ifdef LIBXML_XPATH_ENABLED + ctxt->pctxt->node = ctxt->node; + list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt); +#else + list = NULL; +#endif /* LIBXML_XPATH_ENABLED */ + if (list != NULL) { + switch (list->type) { + case XPATH_UNDEFINED: + xmlGenericError(xmlGenericErrorContext, + "%s: no such node\n", arg); + break; + case XPATH_NODESET:{ + int indx; + + if (list->nodesetval == NULL) + break; + + for (indx = 0; + indx < list->nodesetval->nodeNr; + indx++) + xmlShellDu(ctxt, NULL, + list->nodesetval-> + nodeTab[indx], NULL); + break; + } + case XPATH_BOOLEAN: + xmlGenericError(xmlGenericErrorContext, + "%s is a Boolean\n", arg); + break; + case XPATH_NUMBER: + xmlGenericError(xmlGenericErrorContext, + "%s is a number\n", arg); + break; + case XPATH_STRING: + xmlGenericError(xmlGenericErrorContext, + "%s is a string\n", arg); + break; + case XPATH_POINT: + xmlGenericError(xmlGenericErrorContext, + "%s is a point\n", arg); + break; + case XPATH_RANGE: + xmlGenericError(xmlGenericErrorContext, + "%s is a range\n", arg); + break; + case XPATH_LOCATIONSET: + xmlGenericError(xmlGenericErrorContext, + "%s is a range\n", arg); + break; + case XPATH_USERS: + xmlGenericError(xmlGenericErrorContext, + "%s is user-defined\n", arg); + break; + case XPATH_XSLT_TREE: + xmlGenericError(xmlGenericErrorContext, + "%s is an XSLT value tree\n", + arg); + break; + } +#ifdef LIBXML_XPATH_ENABLED + xmlXPathFreeObject(list); +#endif + } else { + xmlGenericError(xmlGenericErrorContext, + "%s: no such node\n", arg); + } + ctxt->pctxt->node = NULL; + } } else if (!strcmp(command, "base")) { xmlShellBase(ctxt, NULL, ctxt->node, NULL); } else if (!strcmp(command, "set")) { @@ -3071,6 +3153,83 @@ xmlShell(xmlDocPtr doc, char *filename, xmlShellReadlineFunc input, } #ifdef LIBXML_XPATH_ENABLED xmlXPathFreeObject(list); +#endif + } else { + xmlGenericError(xmlGenericErrorContext, + "%s: no such node\n", arg); + } + ctxt->pctxt->node = NULL; + } + } else if (!strcmp(command, "whereis")) { + char dir[500]; + + if (arg[0] == 0) { + if (!xmlShellPwd(ctxt, dir, ctxt->node, NULL)) + fprintf(ctxt->output, "%s\n", dir); + } else { + ctxt->pctxt->node = ctxt->node; +#ifdef LIBXML_XPATH_ENABLED + list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt); +#else + list = NULL; +#endif /* LIBXML_XPATH_ENABLED */ + if (list != NULL) { + switch (list->type) { + case XPATH_UNDEFINED: + xmlGenericError(xmlGenericErrorContext, + "%s: no such node\n", arg); + break; + case XPATH_NODESET:{ + int indx; + + if (list->nodesetval == NULL) + break; + + for (indx = 0; + indx < list->nodesetval->nodeNr; + indx++) { + if (!xmlShellPwd(ctxt, dir, list->nodesetval-> + nodeTab[indx], NULL)) + fprintf(ctxt->output, "%s\n", dir); + } + break; + } + case XPATH_BOOLEAN: + xmlGenericError(xmlGenericErrorContext, + "%s is a Boolean\n", arg); + break; + case XPATH_NUMBER: + xmlGenericError(xmlGenericErrorContext, + "%s is a number\n", arg); + break; + case XPATH_STRING: + xmlGenericError(xmlGenericErrorContext, + "%s is a string\n", arg); + break; + case XPATH_POINT: + xmlGenericError(xmlGenericErrorContext, + "%s is a point\n", arg); + break; + case XPATH_RANGE: + xmlGenericError(xmlGenericErrorContext, + "%s is a range\n", arg); + break; + case XPATH_LOCATIONSET: + xmlGenericError(xmlGenericErrorContext, + "%s is a range\n", arg); + break; + case XPATH_USERS: + xmlGenericError(xmlGenericErrorContext, + "%s is user-defined\n", arg); + break; + case XPATH_XSLT_TREE: + xmlGenericError(xmlGenericErrorContext, + "%s is an XSLT value tree\n", + arg); + break; + } +#ifdef LIBXML_XPATH_ENABLED + xmlXPathFreeObject(list); #endif } else { xmlGenericError(xmlGenericErrorContext, diff --git a/lib/3rdparty/libxml2/depcomp b/lib/3rdparty/libxml2/depcomp index df8eea7e4ce..bd0ac089584 100644 --- a/lib/3rdparty/libxml2/depcomp +++ b/lib/3rdparty/libxml2/depcomp @@ -1,10 +1,10 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2009-04-28.21; # UTC +scriptversion=2011-12-04.11; # UTC -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free -# Software Foundation, Inc. +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, +# 2011 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -44,7 +44,7 @@ Environment variables: object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. - tmpdepfile Temporary file to use when outputing dependencies. + tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . @@ -90,10 +90,18 @@ if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 - cygpath_u="sed s,\\\\\\\\,/,g" + cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what @@ -158,10 +166,12 @@ gcc) ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as -## well. +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; @@ -405,6 +415,52 @@ tru64) rm -f "$tmpdepfile" ;; +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test "$stat" = 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/ \1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/ / + G + p +}' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. @@ -503,7 +559,9 @@ makedepend) touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation diff --git a/lib/3rdparty/libxml2/dict.c b/lib/3rdparty/libxml2/dict.c index 3eff2315e94..9935a2554d9 100644 --- a/lib/3rdparty/libxml2/dict.c +++ b/lib/3rdparty/libxml2/dict.c @@ -2,7 +2,7 @@ * dict.c: dictionary of reusable strings, just used to avoid allocation * and freeing operations. * - * Copyright (C) 2003 Daniel Veillard. + * Copyright (C) 2003-2012 Daniel Veillard. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -19,6 +19,29 @@ #define IN_LIBXML #include "libxml.h" +#include +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_TIME_H +#include +#endif + +/* + * Following http://www.ocert.org/advisories/ocert-2011-003.html + * it seems that having hash randomization might be a good idea + * when using XML with untrusted data + * Note1: that it works correctly only if compiled with WITH_BIG_KEY + * which is the default. + * Note2: the fast function used for a small dict won't protect very + * well but since the attack is based on growing a very big hash + * list we will use the BigKey algo as soon as the hash size grows + * over MIN_DICT_SIZE so this actually works + */ +#if defined(HAVE_RAND) && defined(HAVE_SRAND) && defined(HAVE_TIME) +#define DICT_RANDOMIZATION +#endif + #include #ifdef HAVE_STDINT_H #include @@ -44,23 +67,23 @@ typedef unsigned __int32 uint32_t; #define WITH_BIG_KEY #ifdef WITH_BIG_KEY -#define xmlDictComputeKey(dict, name, len) \ - (((dict)->size == MIN_DICT_SIZE) ? \ - xmlDictComputeFastKey(name, len) : \ - xmlDictComputeBigKey(name, len)) +#define xmlDictComputeKey(dict, name, len) \ + (((dict)->size == MIN_DICT_SIZE) ? \ + xmlDictComputeFastKey(name, len, (dict)->seed) : \ + xmlDictComputeBigKey(name, len, (dict)->seed)) -#define xmlDictComputeQKey(dict, prefix, plen, name, len) \ - (((prefix) == NULL) ? \ - (xmlDictComputeKey(dict, name, len)) : \ - (((dict)->size == MIN_DICT_SIZE) ? \ - xmlDictComputeFastQKey(prefix, plen, name, len) : \ - xmlDictComputeBigQKey(prefix, plen, name, len))) +#define xmlDictComputeQKey(dict, prefix, plen, name, len) \ + (((prefix) == NULL) ? \ + (xmlDictComputeKey(dict, name, len)) : \ + (((dict)->size == MIN_DICT_SIZE) ? \ + xmlDictComputeFastQKey(prefix, plen, name, len, (dict)->seed) : \ + xmlDictComputeBigQKey(prefix, plen, name, len, (dict)->seed))) #else /* !WITH_BIG_KEY */ -#define xmlDictComputeKey(dict, name, len) \ - xmlDictComputeFastKey(name, len) -#define xmlDictComputeQKey(dict, prefix, plen, name, len) \ - xmlDictComputeFastQKey(prefix, plen, name, len) +#define xmlDictComputeKey(dict, name, len) \ + xmlDictComputeFastKey(name, len, (dict)->seed) +#define xmlDictComputeQKey(dict, prefix, plen, name, len) \ + xmlDictComputeFastQKey(prefix, plen, name, len, (dict)->seed) #endif /* WITH_BIG_KEY */ /* @@ -71,7 +94,7 @@ typedef xmlDictEntry *xmlDictEntryPtr; struct _xmlDictEntry { struct _xmlDictEntry *next; const xmlChar *name; - int len; + unsigned int len; int valid; unsigned long okey; }; @@ -82,8 +105,8 @@ struct _xmlDictStrings { xmlDictStringsPtr next; xmlChar *free; xmlChar *end; - int size; - int nbStrings; + size_t size; + size_t nbStrings; xmlChar array[1]; }; /* @@ -93,11 +116,15 @@ struct _xmlDict { int ref_counter; struct _xmlDictEntry *dict; - int size; - int nbElems; + size_t size; + unsigned int nbElems; xmlDictStringsPtr strings; struct _xmlDict *subdict; + /* used for randomization */ + int seed; + /* used to impose a limit on size */ + size_t limit; }; /* @@ -111,28 +138,69 @@ static xmlRMutexPtr xmlDictMutex = NULL; */ static int xmlDictInitialized = 0; +#ifdef DICT_RANDOMIZATION +#ifdef HAVE_RAND_R +/* + * Internal data for random function, protected by xmlDictMutex + */ +unsigned int rand_seed = 0; +#endif +#endif + /** * xmlInitializeDict: * * Do the dictionary mutex initialization. * this function is not thread safe, initialization should * preferably be done once at startup + * + * Returns 0 if initialization was already done, and 1 if that + * call led to the initialization */ -static int xmlInitializeDict(void) { +int xmlInitializeDict(void) { if (xmlDictInitialized) return(1); if ((xmlDictMutex = xmlNewRMutex()) == NULL) return(0); + xmlRMutexLock(xmlDictMutex); +#ifdef DICT_RANDOMIZATION +#ifdef HAVE_RAND_R + rand_seed = time(NULL); + rand_r(& rand_seed); +#else + srand(time(NULL)); +#endif +#endif xmlDictInitialized = 1; + xmlRMutexUnlock(xmlDictMutex); return(1); } +#ifdef DICT_RANDOMIZATION +int __xmlRandom(void) { + int ret; + + if (xmlDictInitialized == 0) + xmlInitializeDict(); + + xmlRMutexLock(xmlDictMutex); +#ifdef HAVE_RAND_R + ret = rand_r(& rand_seed); +#else + ret = rand(); +#endif + xmlRMutexUnlock(xmlDictMutex); + return(ret); +} +#endif + /** * xmlDictCleanup: * - * Free the dictionary mutex. + * Free the dictionary mutex. Do not call unless sure the library + * is not in use anymore ! */ void xmlDictCleanup(void) { @@ -148,17 +216,18 @@ xmlDictCleanup(void) { * xmlDictAddString: * @dict: the dictionnary * @name: the name of the userdata - * @len: the length of the name, if -1 it is recomputed + * @len: the length of the name * * Add the string to the array[s] * * Returns the pointer of the local string, or NULL in case of error. */ static const xmlChar * -xmlDictAddString(xmlDictPtr dict, const xmlChar *name, int namelen) { +xmlDictAddString(xmlDictPtr dict, const xmlChar *name, unsigned int namelen) { xmlDictStringsPtr pool; const xmlChar *ret; - int size = 0; /* + sizeof(_xmlDictStrings) == 1024 */ + size_t size = 0; /* + sizeof(_xmlDictStrings) == 1024 */ + size_t limit = 0; #ifdef DICT_DEBUG_PATTERNS fprintf(stderr, "-"); @@ -168,15 +237,20 @@ xmlDictAddString(xmlDictPtr dict, const xmlChar *name, int namelen) { if (pool->end - pool->free > namelen) goto found_pool; if (pool->size > size) size = pool->size; + limit += pool->size; pool = pool->next; } /* * Not found, need to allocate */ if (pool == NULL) { + if ((dict->limit > 0) && (limit > dict->limit)) { + return(NULL); + } + if (size == 0) size = 1000; else size *= 4; /* exponential growth */ - if (size < 4 * namelen) + if (size < 4 * namelen) size = 4 * namelen; /* just in case ! */ pool = (xmlDictStringsPtr) xmlMalloc(sizeof(xmlDictStrings) + size); if (pool == NULL) @@ -206,19 +280,20 @@ found_pool: * @prefix: the prefix of the userdata * @plen: the prefix length * @name: the name of the userdata - * @len: the length of the name, if -1 it is recomputed + * @len: the length of the name * * Add the QName to the array[s] * * Returns the pointer of the local string, or NULL in case of error. */ static const xmlChar * -xmlDictAddQString(xmlDictPtr dict, const xmlChar *prefix, int plen, - const xmlChar *name, int namelen) +xmlDictAddQString(xmlDictPtr dict, const xmlChar *prefix, unsigned int plen, + const xmlChar *name, unsigned int namelen) { xmlDictStringsPtr pool; const xmlChar *ret; - int size = 0; /* + sizeof(_xmlDictStrings) == 1024 */ + size_t size = 0; /* + sizeof(_xmlDictStrings) == 1024 */ + size_t limit = 0; if (prefix == NULL) return(xmlDictAddString(dict, name, namelen)); @@ -230,12 +305,17 @@ xmlDictAddQString(xmlDictPtr dict, const xmlChar *prefix, int plen, if (pool->end - pool->free > namelen + plen + 1) goto found_pool; if (pool->size > size) size = pool->size; + limit += pool->size; pool = pool->next; } /* * Not found, need to allocate */ if (pool == NULL) { + if ((dict->limit > 0) && (limit > dict->limit)) { + return(NULL); + } + if (size == 0) size = 1000; else size *= 4; /* exponential growth */ if (size < 4 * (namelen + plen + 1)) @@ -277,13 +357,13 @@ found_pool: */ static uint32_t -xmlDictComputeBigKey(const xmlChar* data, int namelen) { +xmlDictComputeBigKey(const xmlChar* data, int namelen, int seed) { uint32_t hash; int i; if (namelen <= 0 || data == NULL) return(0); - hash = 0; + hash = seed; for (i = 0;i < namelen; i++) { hash += data[i]; @@ -310,12 +390,12 @@ xmlDictComputeBigKey(const xmlChar* data, int namelen) { */ static unsigned long xmlDictComputeBigQKey(const xmlChar *prefix, int plen, - const xmlChar *name, int len) + const xmlChar *name, int len, int seed) { uint32_t hash; int i; - hash = 0; + hash = seed; for (i = 0;i < plen; i++) { hash += prefix[i]; @@ -346,8 +426,8 @@ xmlDictComputeBigQKey(const xmlChar *prefix, int plen, * for low hash table fill. */ static unsigned long -xmlDictComputeFastKey(const xmlChar *name, int namelen) { - unsigned long value = 0L; +xmlDictComputeFastKey(const xmlChar *name, int namelen, int seed) { + unsigned long value = seed; if (name == NULL) return(0); value = *name; @@ -381,9 +461,9 @@ xmlDictComputeFastKey(const xmlChar *name, int namelen) { */ static unsigned long xmlDictComputeFastQKey(const xmlChar *prefix, int plen, - const xmlChar *name, int len) + const xmlChar *name, int len, int seed) { - unsigned long value = 0L; + unsigned long value = (unsigned long) seed; if (plen == 0) value += 30 * (unsigned long) ':'; @@ -452,6 +532,7 @@ xmlDictCreate(void) { dict = xmlMalloc(sizeof(xmlDict)); if (dict) { dict->ref_counter = 1; + dict->limit = 0; dict->size = MIN_DICT_SIZE; dict->nbElems = 0; @@ -460,6 +541,11 @@ xmlDictCreate(void) { dict->subdict = NULL; if (dict->dict) { memset(dict->dict, 0, MIN_DICT_SIZE * sizeof(xmlDictEntry)); +#ifdef DICT_RANDOMIZATION + dict->seed = __xmlRandom(); +#else + dict->seed = 0; +#endif return(dict); } xmlFree(dict); @@ -486,6 +572,7 @@ xmlDictCreateSub(xmlDictPtr sub) { #ifdef DICT_DEBUG_PATTERNS fprintf(stderr, "R"); #endif + dict->seed = sub->seed; dict->subdict = sub; xmlDictReference(dict->subdict); } @@ -523,9 +610,9 @@ xmlDictReference(xmlDictPtr dict) { * Returns 0 in case of success, -1 in case of failure */ static int -xmlDictGrow(xmlDictPtr dict, int size) { +xmlDictGrow(xmlDictPtr dict, size_t size) { unsigned long key, okey; - int oldsize, i; + size_t oldsize, i; xmlDictEntryPtr iter, next; struct _xmlDictEntry *olddict; #ifdef DEBUG_GROW @@ -642,7 +729,7 @@ xmlDictGrow(xmlDictPtr dict, int size) { #ifdef DEBUG_GROW xmlGenericError(xmlGenericErrorContext, - "xmlDictGrow : from %d to %d, %d elems\n", oldsize, size, nbElem); + "xmlDictGrow : from %lu to %lu, %u elems\n", oldsize, size, nbElem); #endif return(ret); @@ -657,7 +744,7 @@ xmlDictGrow(xmlDictPtr dict, int size) { */ void xmlDictFree(xmlDictPtr dict) { - int i; + size_t i; xmlDictEntryPtr iter; xmlDictEntryPtr next; int inside_dict = 0; @@ -726,17 +813,24 @@ xmlDictLookup(xmlDictPtr dict, const xmlChar *name, int len) { xmlDictEntryPtr entry; xmlDictEntryPtr insert; const xmlChar *ret; + unsigned int l; if ((dict == NULL) || (name == NULL)) return(NULL); if (len < 0) - len = strlen((const char *) name); + l = strlen((const char *) name); + else + l = len; + + if (((dict->limit > 0) && (l >= dict->limit)) || + (l > INT_MAX / 2)) + return(NULL); /* * Check for duplicate and insertion location. */ - okey = xmlDictComputeKey(dict, name, len); + okey = xmlDictComputeKey(dict, name, l); key = okey % dict->size; if (dict->dict[key].valid == 0) { insert = NULL; @@ -744,25 +838,25 @@ xmlDictLookup(xmlDictPtr dict, const xmlChar *name, int len) { for (insert = &(dict->dict[key]); insert->next != NULL; insert = insert->next) { #ifdef __GNUC__ - if ((insert->okey == okey) && (insert->len == len)) { - if (!memcmp(insert->name, name, len)) + if ((insert->okey == okey) && (insert->len == l)) { + if (!memcmp(insert->name, name, l)) return(insert->name); } #else - if ((insert->okey == okey) && (insert->len == len) && - (!xmlStrncmp(insert->name, name, len))) + if ((insert->okey == okey) && (insert->len == l) && + (!xmlStrncmp(insert->name, name, l))) return(insert->name); #endif nbi++; } #ifdef __GNUC__ - if ((insert->okey == okey) && (insert->len == len)) { - if (!memcmp(insert->name, name, len)) + if ((insert->okey == okey) && (insert->len == l)) { + if (!memcmp(insert->name, name, l)) return(insert->name); } #else - if ((insert->okey == okey) && (insert->len == len) && - (!xmlStrncmp(insert->name, name, len))) + if ((insert->okey == okey) && (insert->len == l) && + (!xmlStrncmp(insert->name, name, l))) return(insert->name); #endif } @@ -775,7 +869,7 @@ xmlDictLookup(xmlDictPtr dict, const xmlChar *name, int len) { (dict->subdict->size != MIN_DICT_SIZE)) || ((dict->size != MIN_DICT_SIZE) && (dict->subdict->size == MIN_DICT_SIZE))) - skey = xmlDictComputeKey(dict->subdict, name, len); + skey = xmlDictComputeKey(dict->subdict, name, l); else skey = okey; @@ -786,32 +880,32 @@ xmlDictLookup(xmlDictPtr dict, const xmlChar *name, int len) { for (tmp = &(dict->subdict->dict[key]); tmp->next != NULL; tmp = tmp->next) { #ifdef __GNUC__ - if ((tmp->okey == skey) && (tmp->len == len)) { - if (!memcmp(tmp->name, name, len)) + if ((tmp->okey == skey) && (tmp->len == l)) { + if (!memcmp(tmp->name, name, l)) return(tmp->name); } #else - if ((tmp->okey == skey) && (tmp->len == len) && - (!xmlStrncmp(tmp->name, name, len))) + if ((tmp->okey == skey) && (tmp->len == l) && + (!xmlStrncmp(tmp->name, name, l))) return(tmp->name); #endif nbi++; } #ifdef __GNUC__ - if ((tmp->okey == skey) && (tmp->len == len)) { - if (!memcmp(tmp->name, name, len)) + if ((tmp->okey == skey) && (tmp->len == l)) { + if (!memcmp(tmp->name, name, l)) return(tmp->name); } #else - if ((tmp->okey == skey) && (tmp->len == len) && - (!xmlStrncmp(tmp->name, name, len))) + if ((tmp->okey == skey) && (tmp->len == l) && + (!xmlStrncmp(tmp->name, name, l))) return(tmp->name); #endif } key = okey % dict->size; } - ret = xmlDictAddString(dict, name, len); + ret = xmlDictAddString(dict, name, l); if (ret == NULL) return(NULL); if (insert == NULL) { @@ -822,13 +916,13 @@ xmlDictLookup(xmlDictPtr dict, const xmlChar *name, int len) { return(NULL); } entry->name = ret; - entry->len = len; + entry->len = l; entry->next = NULL; entry->valid = 1; entry->okey = okey; - if (insert != NULL) + if (insert != NULL) insert->next = entry; dict->nbElems++; @@ -857,17 +951,23 @@ const xmlChar * xmlDictExists(xmlDictPtr dict, const xmlChar *name, int len) { unsigned long key, okey, nbi = 0; xmlDictEntryPtr insert; + unsigned int l; if ((dict == NULL) || (name == NULL)) return(NULL); if (len < 0) - len = strlen((const char *) name); + l = strlen((const char *) name); + else + l = len; + if (((dict->limit > 0) && (l >= dict->limit)) || + (l > INT_MAX / 2)) + return(NULL); /* * Check for duplicate and insertion location. */ - okey = xmlDictComputeKey(dict, name, len); + okey = xmlDictComputeKey(dict, name, l); key = okey % dict->size; if (dict->dict[key].valid == 0) { insert = NULL; @@ -875,25 +975,25 @@ xmlDictExists(xmlDictPtr dict, const xmlChar *name, int len) { for (insert = &(dict->dict[key]); insert->next != NULL; insert = insert->next) { #ifdef __GNUC__ - if ((insert->okey == okey) && (insert->len == len)) { - if (!memcmp(insert->name, name, len)) + if ((insert->okey == okey) && (insert->len == l)) { + if (!memcmp(insert->name, name, l)) return(insert->name); } #else - if ((insert->okey == okey) && (insert->len == len) && - (!xmlStrncmp(insert->name, name, len))) + if ((insert->okey == okey) && (insert->len == l) && + (!xmlStrncmp(insert->name, name, l))) return(insert->name); #endif nbi++; } #ifdef __GNUC__ - if ((insert->okey == okey) && (insert->len == len)) { - if (!memcmp(insert->name, name, len)) + if ((insert->okey == okey) && (insert->len == l)) { + if (!memcmp(insert->name, name, l)) return(insert->name); } #else - if ((insert->okey == okey) && (insert->len == len) && - (!xmlStrncmp(insert->name, name, len))) + if ((insert->okey == okey) && (insert->len == l) && + (!xmlStrncmp(insert->name, name, l))) return(insert->name); #endif } @@ -906,7 +1006,7 @@ xmlDictExists(xmlDictPtr dict, const xmlChar *name, int len) { (dict->subdict->size != MIN_DICT_SIZE)) || ((dict->size != MIN_DICT_SIZE) && (dict->subdict->size == MIN_DICT_SIZE))) - skey = xmlDictComputeKey(dict->subdict, name, len); + skey = xmlDictComputeKey(dict->subdict, name, l); else skey = okey; @@ -917,25 +1017,25 @@ xmlDictExists(xmlDictPtr dict, const xmlChar *name, int len) { for (tmp = &(dict->subdict->dict[key]); tmp->next != NULL; tmp = tmp->next) { #ifdef __GNUC__ - if ((tmp->okey == skey) && (tmp->len == len)) { - if (!memcmp(tmp->name, name, len)) + if ((tmp->okey == skey) && (tmp->len == l)) { + if (!memcmp(tmp->name, name, l)) return(tmp->name); } #else - if ((tmp->okey == skey) && (tmp->len == len) && - (!xmlStrncmp(tmp->name, name, len))) + if ((tmp->okey == skey) && (tmp->len == l) && + (!xmlStrncmp(tmp->name, name, l))) return(tmp->name); #endif nbi++; } #ifdef __GNUC__ - if ((tmp->okey == skey) && (tmp->len == len)) { - if (!memcmp(tmp->name, name, len)) + if ((tmp->okey == skey) && (tmp->len == l)) { + if (!memcmp(tmp->name, name, l)) return(tmp->name); } #else - if ((tmp->okey == skey) && (tmp->len == len) && - (!xmlStrncmp(tmp->name, name, len))) + if ((tmp->okey == skey) && (tmp->len == l) && + (!xmlStrncmp(tmp->name, name, l))) return(tmp->name); #endif } @@ -961,7 +1061,7 @@ xmlDictQLookup(xmlDictPtr dict, const xmlChar *prefix, const xmlChar *name) { xmlDictEntryPtr entry; xmlDictEntryPtr insert; const xmlChar *ret; - int len, plen, l; + unsigned int len, plen, l; if ((dict == NULL) || (name == NULL)) return(NULL); @@ -1037,7 +1137,7 @@ xmlDictQLookup(xmlDictPtr dict, const xmlChar *prefix, const xmlChar *name) { entry->valid = 1; entry->okey = okey; - if (insert != NULL) + if (insert != NULL) insert->next = entry; dict->nbElems++; @@ -1095,6 +1195,50 @@ xmlDictSize(xmlDictPtr dict) { return(dict->nbElems); } +/** + * xmlDictSetLimit: + * @dict: the dictionnary + * @limit: the limit in bytes + * + * Set a size limit for the dictionary + * Added in 2.9.0 + * + * Returns the previous limit of the dictionary or 0 + */ +size_t +xmlDictSetLimit(xmlDictPtr dict, size_t limit) { + size_t ret; + + if (dict == NULL) + return(0); + ret = dict->limit; + dict->limit = limit; + return(ret); +} + +/** + * xmlDictGetUsage: + * @dict: the dictionnary + * + * Get how much memory is used by a dictionary for strings + * Added in 2.9.0 + * + * Returns the amount of strings allocated + */ +size_t +xmlDictGetUsage(xmlDictPtr dict) { + xmlDictStringsPtr pool; + size_t limit = 0; + + if (dict == NULL) + return(0); + pool = dict->strings; + while (pool != NULL) { + limit += pool->size; + pool = pool->next; + } + return(limit); +} #define bottom_dict #include "elfgcchack.h" diff --git a/lib/3rdparty/libxml2/enc.h b/lib/3rdparty/libxml2/enc.h new file mode 100644 index 00000000000..91977604414 --- /dev/null +++ b/lib/3rdparty/libxml2/enc.h @@ -0,0 +1,32 @@ +/* + * Summary: Internal Interfaces for encoding in libxml2 + * Description: this module describes a few interfaces which were + * addded along with the API changes in 2.9.0 + * those are private routines at this point + * + * Copy: See Copyright for the status of this software. + * + * Author: Daniel Veillard + */ + +#ifndef __XML_ENC_H__ +#define __XML_ENC_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +int xmlCharEncFirstLineInt(xmlCharEncodingHandler *handler, xmlBufferPtr out, + xmlBufferPtr in, int len); +int xmlCharEncFirstLineInput(xmlParserInputBufferPtr input, int len); +int xmlCharEncInput(xmlParserInputBufferPtr input); +int xmlCharEncOutput(xmlOutputBufferPtr output, int init); + +#ifdef __cplusplus +} +#endif +#endif /* __XML_ENC_H__ */ + + diff --git a/lib/3rdparty/libxml2/encoding.c b/lib/3rdparty/libxml2/encoding.c index d1140bf2dcc..87b1d9b84fe 100644 --- a/lib/3rdparty/libxml2/encoding.c +++ b/lib/3rdparty/libxml2/encoding.c @@ -24,6 +24,7 @@ #include "libxml.h" #include +#include #ifdef HAVE_CTYPE_H #include @@ -44,6 +45,9 @@ #include #include +#include "buf.h" +#include "enc.h" + static xmlCharEncodingHandlerPtr xmlUTF16LEHandler = NULL; static xmlCharEncodingHandlerPtr xmlUTF16BEHandler = NULL; @@ -1825,7 +1829,7 @@ xmlIconvWrapper(iconv_t cd, unsigned char *out, int *outlen, /************************************************************************ * * - * ICU based generic conversion functions * + * ICU based generic conversion functions * * * ************************************************************************/ @@ -1897,9 +1901,6 @@ xmlUconvWrapper(uconv_t *cd, int toUnicode, unsigned char *out, int *outlen, * The real API used by libxml for on-the-fly conversion * * * ************************************************************************/ -int -xmlCharEncFirstLineInt(xmlCharEncodingHandler *handler, xmlBufferPtr out, - xmlBufferPtr in, int len); /** * xmlCharEncFirstLineInt: @@ -1928,7 +1929,7 @@ xmlCharEncFirstLineInt(xmlCharEncodingHandler *handler, xmlBufferPtr out, if (in == NULL) return(-1); /* calculate space available */ - written = out->size - out->use; + written = out->size - out->use - 1; /* count '\0' */ toconv = in->use; /* * echo '' | wc -c => 38 @@ -1946,7 +1947,7 @@ xmlCharEncFirstLineInt(xmlCharEncodingHandler *handler, xmlBufferPtr out, toconv = 180; } if (toconv * 2 >= written) { - xmlBufferGrow(out, toconv); + xmlBufferGrow(out, toconv * 2); written = out->size - out->use - 1; } @@ -2028,6 +2029,251 @@ xmlCharEncFirstLine(xmlCharEncodingHandler *handler, xmlBufferPtr out, return(xmlCharEncFirstLineInt(handler, out, in, -1)); } +/** + * xmlCharEncFirstLineInput: + * @input: a parser input buffer + * @len: number of bytes to convert for the first line, or -1 + * + * Front-end for the encoding handler input function, but handle only + * the very first line. Point is that this is based on autodetection + * of the encoding and once that first line is converted we may find + * out that a different decoder is needed to process the input. + * + * Returns the number of byte written if success, or + * -1 general error + * -2 if the transcoding fails (for *in is not valid utf8 string or + * the result of transformation can't fit into the encoding we want), or + */ +int +xmlCharEncFirstLineInput(xmlParserInputBufferPtr input, int len) +{ + int ret = -2; + size_t written; + size_t toconv; + int c_in; + int c_out; + xmlBufPtr in; + xmlBufPtr out; + + if ((input == NULL) || (input->encoder == NULL) || + (input->buffer == NULL) || (input->raw == NULL)) + return (-1); + out = input->buffer; + in = input->raw; + + toconv = xmlBufUse(in); + if (toconv == 0) + return (0); + written = xmlBufAvail(out) - 1; /* count '\0' */ + /* + * echo '' | wc -c => 38 + * 45 chars should be sufficient to reach the end of the encoding + * declaration without going too far inside the document content. + * on UTF-16 this means 90bytes, on UCS4 this means 180 + * The actual value depending on guessed encoding is passed as @len + * if provided + */ + if (len >= 0) { + if (toconv > (unsigned int) len) + toconv = len; + } else { + if (toconv > 180) + toconv = 180; + } + if (toconv * 2 >= written) { + xmlBufGrow(out, toconv * 2); + written = xmlBufAvail(out) - 1; + } + if (written > 360) + written = 360; + + c_in = toconv; + c_out = written; + if (input->encoder->input != NULL) { + ret = input->encoder->input(xmlBufEnd(out), &c_out, + xmlBufContent(in), &c_in); + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + } +#ifdef LIBXML_ICONV_ENABLED + else if (input->encoder->iconv_in != NULL) { + ret = xmlIconvWrapper(input->encoder->iconv_in, xmlBufEnd(out), + &c_out, xmlBufContent(in), &c_in); + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + if (ret == -1) + ret = -3; + } +#endif /* LIBXML_ICONV_ENABLED */ +#ifdef LIBXML_ICU_ENABLED + else if (input->encoder->uconv_in != NULL) { + ret = xmlUconvWrapper(input->encoder->uconv_in, 1, xmlBufEnd(out), + &c_out, xmlBufContent(in), &c_in); + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + if (ret == -1) + ret = -3; + } +#endif /* LIBXML_ICU_ENABLED */ + switch (ret) { + case 0: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "converted %d bytes to %d bytes of input\n", + c_in, c_out); +#endif + break; + case -1: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "converted %d bytes to %d bytes of input, %d left\n", + c_in, c_out, (int)xmlBufUse(in)); +#endif + break; + case -3: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "converted %d bytes to %d bytes of input, %d left\n", + c_in, c_out, (int)xmlBufUse(in)); +#endif + break; + case -2: { + char buf[50]; + const xmlChar *content = xmlBufContent(in); + + snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X", + content[0], content[1], + content[2], content[3]); + buf[49] = 0; + xmlEncodingErr(XML_I18N_CONV_FAILED, + "input conversion failed due to input error, bytes %s\n", + buf); + } + } + /* + * Ignore when input buffer is not on a boundary + */ + if (ret == -3) ret = 0; + if (ret == -1) ret = 0; + return(ret); +} + +/** + * xmlCharEncInput: + * @input: a parser input buffer + * + * Generic front-end for the encoding handler on parser input + * + * Returns the number of byte written if success, or + * -1 general error + * -2 if the transcoding fails (for *in is not valid utf8 string or + * the result of transformation can't fit into the encoding we want), or + */ +int +xmlCharEncInput(xmlParserInputBufferPtr input) +{ + int ret = -2; + size_t written; + size_t toconv; + int c_in; + int c_out; + xmlBufPtr in; + xmlBufPtr out; + + if ((input == NULL) || (input->encoder == NULL) || + (input->buffer == NULL) || (input->raw == NULL)) + return (-1); + out = input->buffer; + in = input->raw; + + toconv = xmlBufUse(in); + if (toconv == 0) + return (0); + if (toconv > 64 * 1024) + toconv = 64 * 1024; + written = xmlBufAvail(out); + if (written > 0) + written--; /* count '\0' */ + if (toconv * 2 >= written) { + xmlBufGrow(out, toconv * 2); + written = xmlBufAvail(out); + if (written > 0) + written--; /* count '\0' */ + } + if (written > 128 * 1024) + written = 128 * 1024; + + c_in = toconv; + c_out = written; + if (input->encoder->input != NULL) { + ret = input->encoder->input(xmlBufEnd(out), &c_out, + xmlBufContent(in), &c_in); + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + } +#ifdef LIBXML_ICONV_ENABLED + else if (input->encoder->iconv_in != NULL) { + ret = xmlIconvWrapper(input->encoder->iconv_in, xmlBufEnd(out), + &c_out, xmlBufContent(in), &c_in); + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + if (ret == -1) + ret = -3; + } +#endif /* LIBXML_ICONV_ENABLED */ +#ifdef LIBXML_ICU_ENABLED + else if (input->encoder->uconv_in != NULL) { + ret = xmlUconvWrapper(input->encoder->uconv_in, 1, xmlBufEnd(out), + &c_out, xmlBufContent(in), &c_in); + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + if (ret == -1) + ret = -3; + } +#endif /* LIBXML_ICU_ENABLED */ + switch (ret) { + case 0: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "converted %d bytes to %d bytes of input\n", + c_in, c_out); +#endif + break; + case -1: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "converted %d bytes to %d bytes of input, %d left\n", + c_in, c_out, (int)xmlBufUse(in)); +#endif + break; + case -3: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "converted %d bytes to %d bytes of input, %d left\n", + c_in, c_out, (int)xmlBufUse(in)); +#endif + break; + case -2: { + char buf[50]; + const xmlChar *content = xmlBufContent(in); + + snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X", + content[0], content[1], + content[2], content[3]); + buf[49] = 0; + xmlEncodingErr(XML_I18N_CONV_FAILED, + "input conversion failed due to input error, bytes %s\n", + buf); + } + } + /* + * Ignore when input buffer is not on a boundary + */ + if (ret == -3) + ret = 0; + return (c_out? c_out : ret); +} + /** * xmlCharEncInFunc: * @handler: char encoding transformation data structure @@ -2059,7 +2305,7 @@ xmlCharEncInFunc(xmlCharEncodingHandler * handler, xmlBufferPtr out, toconv = in->use; if (toconv == 0) return (0); - written = out->size - out->use; + written = out->size - out->use -1; /* count '\0' */ if (toconv * 2 >= written) { xmlBufferGrow(out, out->size + toconv * 2); written = out->size - out->use - 1; @@ -2135,6 +2381,235 @@ xmlCharEncInFunc(xmlCharEncodingHandler * handler, xmlBufferPtr out, return (written? written : ret); } +/** + * xmlCharEncOutput: + * @output: a parser output buffer + * @init: is this an initialization call without data + * + * Generic front-end for the encoding handler on parser output + * a first call with @init == 1 has to be made first to initiate the + * output in case of non-stateless encoding needing to initiate their + * state or the output (like the BOM in UTF16). + * In case of UTF8 sequence conversion errors for the given encoder, + * the content will be automatically remapped to a CharRef sequence. + * + * Returns the number of byte written if success, or + * -1 general error + * -2 if the transcoding fails (for *in is not valid utf8 string or + * the result of transformation can't fit into the encoding we want), or + */ +int +xmlCharEncOutput(xmlOutputBufferPtr output, int init) +{ + int ret = -2; + size_t written; + size_t writtentot = 0; + size_t toconv; + int c_in; + int c_out; + xmlBufPtr in; + xmlBufPtr out; + int charref_len = 0; + + if ((output == NULL) || (output->encoder == NULL) || + (output->buffer == NULL) || (output->conv == NULL)) + return (-1); + out = output->conv; + in = output->buffer; + +retry: + + written = xmlBufAvail(out); + if (written > 0) + written--; /* count '\0' */ + + /* + * First specific handling of the initialization call + */ + if (init) { + c_in = 0; + c_out = written; + if (output->encoder->output != NULL) { + ret = output->encoder->output(xmlBufEnd(out), &c_out, + NULL, &c_in); + if (ret > 0) /* Gennady: check return value */ + xmlBufAddLen(out, c_out); + } +#ifdef LIBXML_ICONV_ENABLED + else if (output->encoder->iconv_out != NULL) { + ret = xmlIconvWrapper(output->encoder->iconv_out, xmlBufEnd(out), + &c_out, NULL, &c_in); + xmlBufAddLen(out, c_out); + } +#endif /* LIBXML_ICONV_ENABLED */ +#ifdef LIBXML_ICU_ENABLED + else if (output->encoder->uconv_out != NULL) { + ret = xmlUconvWrapper(output->encoder->uconv_out, 0, xmlBufEnd(out), + &c_out, NULL, &c_in); + xmlBufAddLen(out, c_out); + } +#endif /* LIBXML_ICU_ENABLED */ +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "initialized encoder\n"); +#endif + return(0); + } + + /* + * Conversion itself. + */ + toconv = xmlBufUse(in); + if (toconv == 0) + return (0); + if (toconv > 64 * 1024) + toconv = 64 * 1024; + if (toconv * 4 >= written) { + xmlBufGrow(out, toconv * 4); + written = xmlBufAvail(out) - 1; + } + if (written > 256 * 1024) + written = 256 * 1024; + + c_in = toconv; + c_out = written; + if (output->encoder->output != NULL) { + ret = output->encoder->output(xmlBufEnd(out), &c_out, + xmlBufContent(in), &c_in); + if (c_out > 0) { + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + writtentot += c_out; + } + } +#ifdef LIBXML_ICONV_ENABLED + else if (output->encoder->iconv_out != NULL) { + ret = xmlIconvWrapper(output->encoder->iconv_out, xmlBufEnd(out), + &c_out, xmlBufContent(in), &c_in); + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + writtentot += c_out; + if (ret == -1) { + if (c_out > 0) { + /* + * Can be a limitation of iconv + */ + charref_len = 0; + goto retry; + } + ret = -3; + } + } +#endif /* LIBXML_ICONV_ENABLED */ +#ifdef LIBXML_ICU_ENABLED + else if (output->encoder->uconv_out != NULL) { + ret = xmlUconvWrapper(output->encoder->uconv_out, 0, xmlBufEnd(out), + &c_out, xmlBufContent(in), &c_in); + xmlBufShrink(in, c_in); + xmlBufAddLen(out, c_out); + writtentot += c_out; + if (ret == -1) { + if (c_out > 0) { + /* + * Can be a limitation of uconv + */ + charref_len = 0; + goto retry; + } + ret = -3; + } + } +#endif /* LIBXML_ICU_ENABLED */ + else { + xmlEncodingErr(XML_I18N_NO_OUTPUT, + "xmlCharEncOutFunc: no output function !\n", NULL); + return(-1); + } + + if (ret >= 0) output += ret; + + /* + * Attempt to handle error cases + */ + switch (ret) { + case 0: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "converted %d bytes to %d bytes of output\n", + c_in, c_out); +#endif + break; + case -1: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "output conversion failed by lack of space\n"); +#endif + break; + case -3: +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext,"converted %d bytes to %d bytes of output %d left\n", + c_in, c_out, (int) xmlBufUse(in)); +#endif + break; + case -2: { + int len = (int) xmlBufUse(in); + xmlChar *content = xmlBufContent(in); + int cur; + + cur = xmlGetUTF8Char(content, &len); + if ((charref_len != 0) && (c_out < charref_len)) { + /* + * We attempted to insert a character reference and failed. + * Undo what was written and skip the remaining charref. + */ + xmlBufErase(out, c_out); + writtentot -= c_out; + xmlBufShrink(in, charref_len - c_out); + charref_len = 0; + + ret = -1; + break; + } else if (cur > 0) { + xmlChar charref[20]; + +#ifdef DEBUG_ENCODING + xmlGenericError(xmlGenericErrorContext, + "handling output conversion error\n"); + xmlGenericError(xmlGenericErrorContext, + "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n", + content[0], content[1], + content[2], content[3]); +#endif + /* + * Removes the UTF8 sequence, and replace it by a charref + * and continue the transcoding phase, hoping the error + * did not mangle the encoder state. + */ + charref_len = snprintf((char *) &charref[0], sizeof(charref), + "&#%d;", cur); + xmlBufShrink(in, len); + xmlBufAddHead(in, charref, -1); + + goto retry; + } else { + char buf[50]; + + snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X", + content[0], content[1], + content[2], content[3]); + buf[49] = 0; + xmlEncodingErr(XML_I18N_CONV_FAILED, + "output conversion failed due to conv error, bytes %s\n", + buf); + if (xmlBufGetAllocationScheme(in) != XML_BUFFER_ALLOC_IMMUTABLE) + content[0] = ' '; + } + break; + } + } + return(ret); +} + /** * xmlCharEncOutFunc: * @handler: char enconding transformation data structure @@ -2161,6 +2636,7 @@ xmlCharEncOutFunc(xmlCharEncodingHandler *handler, xmlBufferPtr out, int writtentot = 0; int toconv; int output = 0; + int charref_len = 0; if (handler == NULL) return(-1); if (out == NULL) return(-1); @@ -2197,7 +2673,7 @@ retry: else if (handler->uconv_out != NULL) { ret = xmlUconvWrapper(handler->uconv_out, 0, &out->content[out->use], - &written, NULL, &toconv); + &written, NULL, &toconv); out->use += written; out->content[out->use] = 0; } @@ -2242,6 +2718,7 @@ retry: /* * Can be a limitation of iconv */ + charref_len = 0; goto retry; } ret = -3; @@ -2262,6 +2739,7 @@ retry: /* * Can be a limitation of iconv */ + charref_len = 0; goto retry; } ret = -3; @@ -2305,7 +2783,19 @@ retry: int cur; cur = xmlGetUTF8Char(utf, &len); - if (cur > 0) { + if ((charref_len != 0) && (written < charref_len)) { + /* + * We attempted to insert a character reference and failed. + * Undo what was written and skip the remaining charref. + */ + out->use -= written; + writtentot -= written; + xmlBufferShrink(in, charref_len - written); + charref_len = 0; + + ret = -1; + break; + } else if (cur > 0) { xmlChar charref[20]; #ifdef DEBUG_ENCODING @@ -2321,7 +2811,8 @@ retry: * and continue the transcoding phase, hoping the error * did not mangle the encoder state. */ - snprintf((char *) &charref[0], sizeof(charref), "&#%d;", cur); + charref_len = snprintf((char *) &charref[0], sizeof(charref), + "&#%d;", cur); xmlBufferShrink(in, len); xmlBufferAddHead(in, charref, -1); @@ -2603,7 +3094,7 @@ UTF8ToISO8859x(unsigned char* out, int *outlen, c2 = c2 & 0x3F; d = d & 0x0F; d = xlattable [48 + c2 + xlattable [48 + c1 + - xlattable [32 + d] * 64] * 64]; + xlattable [32 + d] * 64] * 64]; if (d == 0) { /* not in character set */ *outlen = out - outstart; diff --git a/lib/3rdparty/libxml2/entities.c b/lib/3rdparty/libxml2/entities.c index 6aef49f4352..5e786a173fe 100644 --- a/lib/3rdparty/libxml2/entities.c +++ b/lib/3rdparty/libxml2/entities.c @@ -22,41 +22,43 @@ #include #include +#include "save.h" + /* * The XML predefined entities. */ static xmlEntity xmlEntityLt = { NULL, XML_ENTITY_DECL, BAD_CAST "lt", - NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, BAD_CAST "<", BAD_CAST "<", 1, XML_INTERNAL_PREDEFINED_ENTITY, NULL, NULL, NULL, NULL, 0, 1 }; static xmlEntity xmlEntityGt = { NULL, XML_ENTITY_DECL, BAD_CAST "gt", - NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, BAD_CAST ">", BAD_CAST ">", 1, XML_INTERNAL_PREDEFINED_ENTITY, NULL, NULL, NULL, NULL, 0, 1 }; static xmlEntity xmlEntityAmp = { NULL, XML_ENTITY_DECL, BAD_CAST "amp", - NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, BAD_CAST "&", BAD_CAST "&", 1, XML_INTERNAL_PREDEFINED_ENTITY, NULL, NULL, NULL, NULL, 0, 1 }; static xmlEntity xmlEntityQuot = { NULL, XML_ENTITY_DECL, BAD_CAST "quot", - NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, BAD_CAST "\"", BAD_CAST "\"", 1, XML_INTERNAL_PREDEFINED_ENTITY, NULL, NULL, NULL, NULL, 0, 1 }; static xmlEntity xmlEntityApos = { NULL, XML_ENTITY_DECL, BAD_CAST "apos", - NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, BAD_CAST "'", BAD_CAST "'", 1, XML_INTERNAL_PREDEFINED_ENTITY, NULL, NULL, NULL, NULL, 0, 1 @@ -426,7 +428,7 @@ xmlNewEntity(xmlDocPtr doc, const xmlChar *name, int type, * * Do an entity lookup in the table. * returns the corresponding parameter entity, if found. - * + * * Returns A pointer to the entity structure or NULL if not found. */ static xmlEntityPtr @@ -441,7 +443,7 @@ xmlGetEntityFromTable(xmlEntitiesTablePtr table, const xmlChar *name) { * * Do an entity lookup in the internal and external subsets and * returns the corresponding parameter entity, if found. - * + * * Returns A pointer to the entity structure or NULL if not found. */ xmlEntityPtr @@ -472,7 +474,7 @@ xmlGetParameterEntity(xmlDocPtr doc, const xmlChar *name) { * Do an entity lookup in the DTD entity hash table and * returns the corresponding entity, if found. * Note: the first argument is the document node, not the DTD node. - * + * * Returns A pointer to the entity structure or NULL if not found. */ xmlEntityPtr @@ -496,7 +498,7 @@ xmlGetDtdEntity(xmlDocPtr doc, const xmlChar *name) { * Do an entity lookup in the document entity hash table and * returns the corresponding entity, otherwise a lookup is done * in the predefined entities too. - * + * * Returns A pointer to the entity structure or NULL if not found. */ xmlEntityPtr @@ -528,20 +530,20 @@ xmlGetDocEntity(xmlDocPtr doc, const xmlChar *name) { * Macro used to grow the current buffer. */ #define growBufferReentrant() { \ - buffer_size *= 2; \ - buffer = (xmlChar *) \ - xmlRealloc(buffer, buffer_size * sizeof(xmlChar)); \ - if (buffer == NULL) { \ - xmlEntitiesErrMemory("xmlEncodeEntitiesReentrant: realloc failed");\ - return(NULL); \ - } \ + xmlChar *tmp; \ + size_t new_size = buffer_size * 2; \ + if (new_size < buffer_size) goto mem_error; \ + tmp = (xmlChar *) xmlRealloc(buffer, new_size); \ + if (tmp == NULL) goto mem_error; \ + buffer = tmp; \ + buffer_size = new_size; \ } - /** - * xmlEncodeEntitiesReentrant: + * xmlEncodeEntitiesInternal: * @doc: the document containing the string * @input: A string to convert to XML. + * @attr: are we handling an atrbute value * * Do a global encoding of a string, replacing the predefined entities * and non ASCII values with their entities and CharRef counterparts. @@ -550,12 +552,12 @@ xmlGetDocEntity(xmlDocPtr doc, const xmlChar *name) { * * Returns A newly allocated string with the substitution done. */ -xmlChar * -xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) { +static xmlChar * +xmlEncodeEntitiesInternal(xmlDocPtr doc, const xmlChar *input, int attr) { const xmlChar *cur = input; xmlChar *buffer = NULL; xmlChar *out = NULL; - int buffer_size = 0; + size_t buffer_size = 0; int html = 0; if (input == NULL) return(NULL); @@ -568,14 +570,14 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) { buffer_size = 1000; buffer = (xmlChar *) xmlMalloc(buffer_size * sizeof(xmlChar)); if (buffer == NULL) { - xmlEntitiesErrMemory("xmlEncodeEntitiesReentrant: malloc failed"); + xmlEntitiesErrMemory("xmlEncodeEntities: malloc failed"); return(NULL); } out = buffer; while (*cur != '\0') { - if (out - buffer > buffer_size - 100) { - int indx = out - buffer; + size_t indx = out - buffer; + if (indx + 100 > buffer_size) { growBufferReentrant(); out = &buffer[indx]; @@ -585,6 +587,27 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) { * By default one have to encode at least '<', '>', '"' and '&' ! */ if (*cur == '<') { + const xmlChar *end; + + /* + * Special handling of server side include in HTML attributes + */ + if (html && attr && + (cur[1] == '!') && (cur[2] == '-') && (cur[3] == '-') && + ((end = xmlStrstr(cur, BAD_CAST "-->")) != NULL)) { + while (cur != end) { + *out++ = *cur++; + indx = out - buffer; + if (indx + 100 > buffer_size) { + growBufferReentrant(); + out = &buffer[indx]; + } + } + *out++ = *cur++; + *out++ = *cur++; + *out++ = *cur++; + continue; + } *out++ = '&'; *out++ = 'l'; *out++ = 't'; @@ -595,6 +618,23 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) { *out++ = 't'; *out++ = ';'; } else if (*cur == '&') { + /* + * Special handling of &{...} construct from HTML 4, see + * http://www.w3.org/TR/html401/appendix/notes.html#h-B.7.1 + */ + if (html && attr && (cur[1] == '{') && + (strchr((const char *) cur, '}'))) { + while (*cur != '}') { + *out++ = *cur++; + indx = out - buffer; + if (indx + 100 > buffer_size) { + growBufferReentrant(); + out = &buffer[indx]; + } + } + *out++ = *cur++; + continue; + } *out++ = '&'; *out++ = 'a'; *out++ = 'm'; @@ -627,7 +667,7 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) { if (*cur < 0xC0) { xmlEntitiesErr(XML_CHECK_NOT_UTF8, - "xmlEncodeEntitiesReentrant : input not UTF-8"); + "xmlEncodeEntities: input not UTF-8"); if (doc != NULL) doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1"); snprintf(buf, sizeof(buf), "&#%d;", *cur); @@ -660,7 +700,7 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) { } if ((l == 1) || (!IS_CHAR(val))) { xmlEntitiesErr(XML_ERR_INVALID_CHAR, - "xmlEncodeEntitiesReentrant : char out of range\n"); + "xmlEncodeEntities: char out of range\n"); if (doc != NULL) doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1"); snprintf(buf, sizeof(buf), "&#%d;", *cur); @@ -692,6 +732,44 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) { } *out = 0; return(buffer); + +mem_error: + xmlEntitiesErrMemory("xmlEncodeEntities: realloc failed"); + xmlFree(buffer); + return(NULL); +} + +/** + * xmlEncodeAttributeEntities: + * @doc: the document containing the string + * @input: A string to convert to XML. + * + * Do a global encoding of a string, replacing the predefined entities + * and non ASCII values with their entities and CharRef counterparts for + * attribute values. + * + * Returns A newly allocated string with the substitution done. + */ +xmlChar * +xmlEncodeAttributeEntities(xmlDocPtr doc, const xmlChar *input) { + return xmlEncodeEntitiesInternal(doc, input, 1); +} + +/** + * xmlEncodeEntitiesReentrant: + * @doc: the document containing the string + * @input: A string to convert to XML. + * + * Do a global encoding of a string, replacing the predefined entities + * and non ASCII values with their entities and CharRef counterparts. + * Contrary to xmlEncodeEntities, this routine is reentrant, and result + * must be deallocated. + * + * Returns A newly allocated string with the substitution done. + */ +xmlChar * +xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) { + return xmlEncodeEntitiesInternal(doc, input, 0); } /** @@ -709,7 +787,7 @@ xmlEncodeSpecialChars(xmlDocPtr doc ATTRIBUTE_UNUSED, const xmlChar *input) { const xmlChar *cur = input; xmlChar *buffer = NULL; xmlChar *out = NULL; - int buffer_size = 0; + size_t buffer_size = 0; if (input == NULL) return(NULL); /* @@ -724,8 +802,8 @@ xmlEncodeSpecialChars(xmlDocPtr doc ATTRIBUTE_UNUSED, const xmlChar *input) { out = buffer; while (*cur != '\0') { - if (out - buffer > buffer_size - 10) { - int indx = out - buffer; + size_t indx = out - buffer; + if (indx + 10 > buffer_size) { growBufferReentrant(); out = &buffer[indx]; @@ -774,6 +852,11 @@ xmlEncodeSpecialChars(xmlDocPtr doc ATTRIBUTE_UNUSED, const xmlChar *input) { } *out = 0; return(buffer); + +mem_error: + xmlEntitiesErrMemory("xmlEncodeSpecialChars: realloc failed"); + xmlFree(buffer); + return(NULL); } /** @@ -820,7 +903,7 @@ xmlFreeEntitiesTable(xmlEntitiesTablePtr table) { * @ent: An entity * * Build a copy of an entity - * + * * Returns the new xmlEntitiesPtr or NULL in case of error. */ static xmlEntityPtr @@ -856,7 +939,7 @@ xmlCopyEntity(xmlEntityPtr ent) { * @table: An entity table * * Build a copy of an entity table. - * + * * Returns the new xmlEntitiesTablePtr or NULL in case of error. */ xmlEntitiesTablePtr @@ -1005,7 +1088,7 @@ static void xmlDumpEntityDeclScan(xmlEntityPtr ent, xmlBufferPtr buf) { xmlDumpEntityDecl(buf, ent); } - + /** * xmlDumpEntitiesTable: * @buf: An XML buffer. diff --git a/lib/3rdparty/libxml2/error.c b/lib/3rdparty/libxml2/error.c index 7508d41b074..cbcf5c96335 100644 --- a/lib/3rdparty/libxml2/error.c +++ b/lib/3rdparty/libxml2/error.c @@ -33,7 +33,7 @@ void XMLCDECL xmlGenericErrorDefaultFunc (void *ctx ATTRIBUTE_UNUSED, \ while (size < 64000) { \ va_start(ap, msg); \ - chars = vsnprintf(str, size, msg, ap); \ + chars = vsnprintf(str, size, msg, ap); \ va_end(ap); \ if ((chars > -1) && (chars < size)) { \ if (prev_size == chars) { \ @@ -54,9 +54,9 @@ void XMLCDECL xmlGenericErrorDefaultFunc (void *ctx ATTRIBUTE_UNUSED, } /************************************************************************ - * * - * Handling of out of context errors * - * * + * * + * Handling of out of context errors * + * * ************************************************************************/ /** @@ -64,7 +64,7 @@ void XMLCDECL xmlGenericErrorDefaultFunc (void *ctx ATTRIBUTE_UNUSED, * @ctx: an error context * @msg: the message to display/transmit * @...: extra parameters for the message display - * + * * Default handler for out of context error messages. */ void XMLCDECL @@ -82,7 +82,7 @@ xmlGenericErrorDefaultFunc(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) { /** * initGenericErrorDefaultFunc: * @handler: the handler - * + * * Set or reset (if NULL) the default handler for generic errors * to the builtin error function. */ @@ -137,15 +137,15 @@ xmlSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler) { } /************************************************************************ - * * - * Handling of parsing errors * - * * + * * + * Handling of parsing errors * + * * ************************************************************************/ /** * xmlParserPrintFileInfo: * @input: an xmlParserInputPtr input - * + * * Displays the associated file and line informations for the current input */ @@ -165,12 +165,12 @@ xmlParserPrintFileInfo(xmlParserInputPtr input) { /** * xmlParserPrintFileContext: * @input: an xmlParserInputPtr input - * + * * Displays current context within the input content for error tracking */ static void -xmlParserPrintFileContextInternal(xmlParserInputPtr input , +xmlParserPrintFileContextInternal(xmlParserInputPtr input , xmlGenericErrorFunc channel, void *data ) { const xmlChar *cur, *base; unsigned int n, col; /* GCC warns if signed, because compared with sizeof() */ @@ -186,8 +186,8 @@ xmlParserPrintFileContextInternal(xmlParserInputPtr input , } n = 0; /* search backwards for beginning-of-line (to max buff size) */ - while ((n++ < (sizeof(content)-1)) && (cur > base) && - (*(cur) != '\n') && (*(cur) != '\r')) + while ((n++ < (sizeof(content)-1)) && (cur > base) && + (*(cur) != '\n') && (*(cur) != '\r')) cur--; if ((*(cur) == '\n') || (*(cur) == '\r')) cur++; /* calculate the error position in terms of the current position */ @@ -196,8 +196,8 @@ xmlParserPrintFileContextInternal(xmlParserInputPtr input , n = 0; ctnt = content; /* copy selected text to our buffer */ - while ((*cur != 0) && (*(cur) != '\n') && - (*(cur) != '\r') && (n < sizeof(content)-1)) { + while ((*cur != 0) && (*(cur) != '\n') && + (*(cur) != '\r') && (n < sizeof(content)-1)) { *ctnt++ = *cur++; n++; } @@ -221,7 +221,7 @@ xmlParserPrintFileContextInternal(xmlParserInputPtr input , /** * xmlParserPrintFileContext: * @input: an xmlParserInputPtr input - * + * * Displays current context within the input content for error tracking */ void @@ -292,7 +292,10 @@ xmlReportError(xmlErrorPtr err, xmlParserCtxtPtr ctxt, const char *str, } else { if (file != NULL) channel(data, "%s:%d: ", file, line); - else if ((line != 0) && (domain == XML_FROM_PARSER)) + else if ((line != 0) && + ((domain == XML_FROM_PARSER) || (domain == XML_FROM_SCHEMASV)|| + (domain == XML_FROM_SCHEMASP)||(domain == XML_FROM_DTD) || + (domain == XML_FROM_RELAXNGP)||(domain == XML_FROM_RELAXNGV))) channel(data, "Entity: line %d: ", line); } if (name != NULL) { @@ -360,6 +363,15 @@ xmlReportError(xmlErrorPtr err, xmlParserCtxtPtr ctxt, const char *str, case XML_FROM_I18N: channel(data, "encoding "); break; + case XML_FROM_SCHEMATRONV: + channel(data, "schematron "); + break; + case XML_FROM_BUFFER: + channel(data, "internal buffer "); + break; + case XML_FROM_URI: + channel(data, "URI "); + break; default: break; } @@ -429,7 +441,7 @@ xmlReportError(xmlErrorPtr err, xmlParserCtxtPtr ctxt, const char *str, * @str2: extra string info * @str3: extra string info * @int1: extra int info - * @col: column number of the error or 0 if N/A + * @col: column number of the error or 0 if N/A * @msg: the message to display/transmit * @...: extra parameters for the message display * @@ -452,6 +464,8 @@ __xmlRaiseError(xmlStructuredErrorFunc schannel, xmlErrorPtr to = &xmlLastError; xmlNodePtr baseptr = NULL; + if (code == XML_ERR_OK) + return; if ((xmlGetWarningsDefaultValue == 0) && (level == XML_ERR_WARNING)) return; if ((domain == XML_FROM_PARSER) || (domain == XML_FROM_HTML) || @@ -459,8 +473,11 @@ __xmlRaiseError(xmlStructuredErrorFunc schannel, (domain == XML_FROM_IO) || (domain == XML_FROM_VALID)) { ctxt = (xmlParserCtxtPtr) ctx; if ((schannel == NULL) && (ctxt != NULL) && (ctxt->sax != NULL) && - (ctxt->sax->initialized == XML_SAX2_MAGIC)) + (ctxt->sax->initialized == XML_SAX2_MAGIC) && + (ctxt->sax->serror != NULL)) { schannel = ctxt->sax->serror; + data = ctxt->userData; + } } /* * Check if structured error handler set @@ -473,16 +490,6 @@ __xmlRaiseError(xmlStructuredErrorFunc schannel, if (schannel != NULL) data = xmlStructuredErrorContext; } - if ((domain == XML_FROM_VALID) && - ((channel == xmlParserValidityError) || - (channel == xmlParserValidityWarning))) { - ctxt = (xmlParserCtxtPtr) ctx; - if ((schannel == NULL) && (ctxt != NULL) && (ctxt->sax != NULL) && - (ctxt->sax->initialized == XML_SAX2_MAGIC)) - schannel = ctxt->sax->serror; - } - if (code == XML_ERR_OK) - return; /* * Formatting the message */ @@ -526,6 +533,8 @@ __xmlRaiseError(xmlStructuredErrorFunc schannel, if ((node != NULL) && (node->type == XML_ELEMENT_NODE)) line = node->line; + if ((line == 0) || (line == 65535)) + line = xmlGetLineNo(node); } /* @@ -589,6 +598,11 @@ __xmlRaiseError(xmlStructuredErrorFunc schannel, if (to != &xmlLastError) xmlCopyError(to,&xmlLastError); + if (schannel != NULL) { + schannel(data, to); + return; + } + /* * Find the callback channel if channel param is NULL */ @@ -600,20 +614,13 @@ __xmlRaiseError(xmlStructuredErrorFunc schannel, channel = ctxt->sax->error; data = ctxt->userData; } else if (channel == NULL) { - if ((schannel == NULL) && (xmlStructuredError != NULL)) { - schannel = xmlStructuredError; - data = xmlStructuredErrorContext; + channel = xmlGenericError; + if (ctxt != NULL) { + data = ctxt; } else { - channel = xmlGenericError; - if (!data) { - data = xmlGenericErrorContext; - } + data = xmlGenericErrorContext; } } - if (schannel != NULL) { - schannel(data, to); - return; - } if (channel == NULL) return; @@ -664,7 +671,7 @@ __xmlSimpleError(int domain, int code, xmlNodePtr node, * @ctx: an XML parser context * @msg: the message to display/transmit * @...: extra parameters for the message display - * + * * Display and format an error messages, gives file, line, position and * extra parameters. */ @@ -707,7 +714,7 @@ xmlParserError(void *ctx, const char *msg, ...) * @ctx: an XML parser context * @msg: the message to display/transmit * @...: extra parameters for the message display - * + * * Display and format a warning messages, gives file, line, position and * extra parameters. */ @@ -728,7 +735,7 @@ xmlParserWarning(void *ctx, const char *msg, ...) } xmlParserPrintFileInfo(input); } - + xmlGenericError(xmlGenericErrorContext, "warning: "); XML_GET_VAR_STR(msg, str); xmlGenericError(xmlGenericErrorContext, "%s", str); @@ -746,9 +753,9 @@ xmlParserWarning(void *ctx, const char *msg, ...) } /************************************************************************ - * * - * Handling of validation errors * - * * + * * + * Handling of validation errors * + * * ************************************************************************/ /** @@ -756,7 +763,7 @@ xmlParserWarning(void *ctx, const char *msg, ...) * @ctx: an XML parser context * @msg: the message to display/transmit * @...: extra parameters for the message display - * + * * Display and format an validity error messages, gives file, * line, position and extra parameters. */ @@ -774,7 +781,7 @@ xmlParserValidityError(void *ctx, const char *msg, ...) input = ctxt->input; if ((input->filename == NULL) && (ctxt->inputNr > 1)) input = ctxt->inputTab[ctxt->inputNr - 2]; - + if (had_info == 0) { xmlParserPrintFileInfo(input); } @@ -800,7 +807,7 @@ xmlParserValidityError(void *ctx, const char *msg, ...) * @ctx: an XML parser context * @msg: the message to display/transmit * @...: extra parameters for the message display - * + * * Display and format a validity warning messages, gives file, line, * position and extra parameters. */ @@ -819,7 +826,7 @@ xmlParserValidityWarning(void *ctx, const char *msg, ...) xmlParserPrintFileInfo(input); } - + xmlGenericError(xmlGenericErrorContext, "validity warning: "); XML_GET_VAR_STR(msg, str); xmlGenericError(xmlGenericErrorContext, "%s", str); diff --git a/lib/3rdparty/libxml2/globals.c b/lib/3rdparty/libxml2/globals.c index 69002f007d0..e351b03ff5c 100644 --- a/lib/3rdparty/libxml2/globals.c +++ b/lib/3rdparty/libxml2/globals.c @@ -65,9 +65,9 @@ void xmlCleanupGlobals(void) } /************************************************************************ - * * + * * * All the user accessible global variables of the library * - * * + * * ************************************************************************/ /* @@ -246,7 +246,7 @@ static int xmlPedanticParserDefaultValueThrDef = 0; * xmlLineNumbersDefaultValue: * * Global setting, indicate that the parser should store the line number - * in the content field of elements in the DOM tree. + * in the content field of elements in the DOM tree. * Disabled by default since this may not be safe for old classes of * applicaton. */ @@ -509,7 +509,7 @@ xmlInitializeGlobalState(xmlGlobalStatePtr gs) #if defined(LIBXML_DOCB_ENABLED) && defined(LIBXML_LEGACY_ENABLED) && defined(LIBXML_SAX1_ENABLED) initdocbDefaultSAXHandler(&gs->docbDefaultSAXHandler); #endif -#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_LEGACY_ENABLED) +#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_LEGACY_ENABLED) && defined(LIBXML_SAX1_ENABLED) inithtmlDefaultSAXHandler(&gs->htmlDefaultSAXHandler); #endif @@ -523,7 +523,7 @@ xmlInitializeGlobalState(xmlGlobalStatePtr gs) gs->xmlDefaultSAXLocator.getSystemId = xmlSAX2GetSystemId; gs->xmlDefaultSAXLocator.getLineNumber = xmlSAX2GetLineNumber; gs->xmlDefaultSAXLocator.getColumnNumber = xmlSAX2GetColumnNumber; - gs->xmlDoValidityCheckingDefaultValue = + gs->xmlDoValidityCheckingDefaultValue = xmlDoValidityCheckingDefaultValueThrDef; #if defined(DEBUG_MEMORY_LOCATION) | defined(DEBUG_MEMORY) gs->xmlFree = (xmlFreeFunc) xmlMemFree; @@ -548,7 +548,7 @@ xmlInitializeGlobalState(xmlGlobalStatePtr gs) gs->xmlParserVersion = LIBXML_VERSION_STRING; gs->xmlPedanticParserDefaultValue = xmlPedanticParserDefaultValueThrDef; gs->xmlSaveNoEmptyTags = xmlSaveNoEmptyTagsThrDef; - gs->xmlSubstituteEntitiesDefaultValue = + gs->xmlSubstituteEntitiesDefaultValue = xmlSubstituteEntitiesDefaultValueThrDef; gs->xmlGenericError = xmlGenericErrorThrDef; @@ -600,7 +600,7 @@ xmlRegisterNodeFunc xmlRegisterNodeDefault(xmlRegisterNodeFunc func) { xmlRegisterNodeFunc old = xmlRegisterNodeDefaultValue; - + __xmlRegisterCallbacks = 1; xmlRegisterNodeDefaultValue = func; return(old); @@ -610,10 +610,10 @@ xmlRegisterNodeFunc xmlThrDefRegisterNodeDefault(xmlRegisterNodeFunc func) { xmlRegisterNodeFunc old; - + xmlMutexLock(xmlThrDefMutex); old = xmlRegisterNodeDefaultValueThrDef; - + __xmlRegisterCallbacks = 1; xmlRegisterNodeDefaultValueThrDef = func; xmlMutexUnlock(xmlThrDefMutex); @@ -633,7 +633,7 @@ xmlDeregisterNodeFunc xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func) { xmlDeregisterNodeFunc old = xmlDeregisterNodeDefaultValue; - + __xmlRegisterCallbacks = 1; xmlDeregisterNodeDefaultValue = func; return(old); @@ -646,7 +646,7 @@ xmlThrDefDeregisterNodeDefault(xmlDeregisterNodeFunc func) xmlMutexLock(xmlThrDefMutex); old = xmlDeregisterNodeDefaultValueThrDef; - + __xmlRegisterCallbacks = 1; xmlDeregisterNodeDefaultValueThrDef = func; xmlMutexUnlock(xmlThrDefMutex); @@ -658,7 +658,7 @@ xmlParserInputBufferCreateFilenameFunc xmlThrDefParserInputBufferCreateFilenameDefault(xmlParserInputBufferCreateFilenameFunc func) { xmlParserInputBufferCreateFilenameFunc old; - + xmlMutexLock(xmlThrDefMutex); old = xmlParserInputBufferCreateFilenameValueThrDef; if (old == NULL) { @@ -675,7 +675,7 @@ xmlOutputBufferCreateFilenameFunc xmlThrDefOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func) { xmlOutputBufferCreateFilenameFunc old; - + xmlMutexLock(xmlThrDefMutex); old = xmlOutputBufferCreateFilenameValueThrDef; #ifdef LIBXML_OUTPUT_ENABLED @@ -732,7 +732,7 @@ __xmlMalloc(void){ if (IS_MAIN_THREAD) return (&xmlMalloc); else - return (&xmlGetGlobalState()->xmlMalloc); + return (&xmlGetGlobalState()->xmlMalloc); } #undef xmlMallocAtomic diff --git a/lib/3rdparty/libxml2/hash.c b/lib/3rdparty/libxml2/hash.c index b78bc2d4e00..afabcb1a0bc 100644 --- a/lib/3rdparty/libxml2/hash.c +++ b/lib/3rdparty/libxml2/hash.c @@ -3,7 +3,7 @@ * * Reference: Your favorite introductory book on algorithms * - * Copyright (C) 2000 Bjorn Reese and Daniel Veillard. + * Copyright (C) 2000,2012 Bjorn Reese and Daniel Veillard. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -21,6 +21,22 @@ #include "libxml.h" #include +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_TIME_H +#include +#endif + +/* + * Following http://www.ocert.org/advisories/ocert-2011-003.html + * it seems that having hash randomization might be a good idea + * when using XML with untrusted data + */ +#if defined(HAVE_RAND) && defined(HAVE_SRAND) && defined(HAVE_TIME) +#define HASH_RANDOMIZATION +#endif + #include #include #include @@ -53,6 +69,9 @@ struct _xmlHashTable { int size; int nbElems; xmlDictPtr dict; +#ifdef HASH_RANDOMIZATION + int random_seed; +#endif }; /* @@ -64,7 +83,10 @@ xmlHashComputeKey(xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, const xmlChar *name3) { unsigned long value = 0L; char ch; - + +#ifdef HASH_RANDOMIZATION + value = table->random_seed; +#endif if (name != NULL) { value += 30 * (*name); while ((ch = *name++) != 0) { @@ -91,7 +113,10 @@ xmlHashComputeQKey(xmlHashTablePtr table, const xmlChar *prefix3, const xmlChar *name3) { unsigned long value = 0L; char ch; - + +#ifdef HASH_RANDOMIZATION + value = table->random_seed; +#endif if (prefix != NULL) value += 30 * (*prefix); else @@ -144,10 +169,10 @@ xmlHashComputeQKey(xmlHashTablePtr table, xmlHashTablePtr xmlHashCreate(int size) { xmlHashTablePtr table; - + if (size <= 0) size = 256; - + table = xmlMalloc(sizeof(xmlHashTable)); if (table) { table->dict = NULL; @@ -155,8 +180,11 @@ xmlHashCreate(int size) { table->nbElems = 0; table->table = xmlMalloc(size * sizeof(xmlHashEntry)); if (table->table) { - memset(table->table, 0, size * sizeof(xmlHashEntry)); - return(table); + memset(table->table, 0, size * sizeof(xmlHashEntry)); +#ifdef HASH_RANDOMIZATION + table->random_seed = __xmlRandom(); +#endif + return(table); } xmlFree(table); } @@ -202,7 +230,7 @@ xmlHashGrow(xmlHashTablePtr table, int size) { #ifdef DEBUG_GROW unsigned long nbElem = 0; #endif - + if (table == NULL) return(-1); if (size < 8) @@ -214,7 +242,7 @@ xmlHashGrow(xmlHashTablePtr table, int size) { oldtable = table->table; if (oldtable == NULL) return(-1); - + table->table = xmlMalloc(size * sizeof(xmlHashEntry)); if (table->table == NULL) { table->table = oldtable; @@ -224,13 +252,13 @@ xmlHashGrow(xmlHashTablePtr table, int size) { table->size = size; /* If the two loops are merged, there would be situations where - a new entry needs to allocated and data copied into it from + a new entry needs to allocated and data copied into it from the main table. So instead, we run through the array twice, first copying all the elements in the main array (where we can't get conflicts) and then the rest, so we only free (and don't allocate) */ for (i = 0; i < oldsize; i++) { - if (oldtable[i].valid == 0) + if (oldtable[i].valid == 0) continue; key = xmlHashComputeKey(table, oldtable[i].name, oldtable[i].name2, oldtable[i].name3); @@ -254,8 +282,8 @@ xmlHashGrow(xmlHashTablePtr table, int size) { table->table[key].next = NULL; xmlFree(iter); } else { - iter->next = table->table[key].next; - table->table[key].next = iter; + iter->next = table->table[key].next; + table->table[key].next = iter; } #ifdef DEBUG_GROW @@ -571,7 +599,7 @@ xmlHashAddEntry3(xmlHashTablePtr table, const xmlChar *name, entry->valid = 1; - if (insert != NULL) + if (insert != NULL) insert->next = entry; table->nbElems++; @@ -720,7 +748,7 @@ xmlHashUpdateEntry3(xmlHashTablePtr table, const xmlChar *name, * Returns the a pointer to the userdata */ void * -xmlHashLookup3(xmlHashTablePtr table, const xmlChar *name, +xmlHashLookup3(xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, const xmlChar *name3) { unsigned long key; xmlHashEntryPtr entry; @@ -793,14 +821,14 @@ typedef struct { void *data; } stubData; -static void -stubHashScannerFull (void *payload, void *data, const xmlChar *name, +static void +stubHashScannerFull (void *payload, void *data, const xmlChar *name, const xmlChar *name2 ATTRIBUTE_UNUSED, const xmlChar *name3 ATTRIBUTE_UNUSED) { stubData *stubdata = (stubData *) data; stubdata->hashscanner (payload, stubdata->data, (xmlChar *) name); -} - +} + /** * xmlHashScan: * @table: the hash table @@ -813,7 +841,7 @@ void xmlHashScan(xmlHashTablePtr table, xmlHashScanner f, void *data) { stubData stubdata; stubdata.data = data; - stubdata.hashscanner = f; + stubdata.hashscanner = f; xmlHashScanFull (table, stubHashScannerFull, &stubdata); } @@ -838,7 +866,7 @@ xmlHashScanFull(xmlHashTablePtr table, xmlHashScannerFull f, void *data) { if (table->table) { for(i = 0; i < table->size; i++) { - if (table->table[i].valid == 0) + if (table->table[i].valid == 0) continue; iter = &(table->table[i]); while (iter) { @@ -877,7 +905,7 @@ xmlHashScanFull(xmlHashTablePtr table, xmlHashScannerFull f, void *data) { * the comparison is considered to match. */ void -xmlHashScan3(xmlHashTablePtr table, const xmlChar *name, +xmlHashScan3(xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, const xmlChar *name3, xmlHashScanner f, void *data) { xmlHashScanFull3 (table, name, name2, name3, @@ -898,7 +926,7 @@ xmlHashScan3(xmlHashTablePtr table, const xmlChar *name, * the comparison is considered to match. */ void -xmlHashScanFull3(xmlHashTablePtr table, const xmlChar *name, +xmlHashScanFull3(xmlHashTablePtr table, const xmlChar *name, const xmlChar *name2, const xmlChar *name3, xmlHashScannerFull f, void *data) { int i; diff --git a/lib/3rdparty/libxml2/include/Makefile.in b/lib/3rdparty/libxml2/include/Makefile.in index 6e219c735eb..a4bf4922b6f 100644 --- a/lib/3rdparty/libxml2/include/Makefile.in +++ b/lib/3rdparty/libxml2/include/Makefile.in @@ -1,9 +1,9 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. +# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -46,6 +46,12 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ @@ -91,8 +97,8 @@ am__relativize = \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ -AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -129,6 +135,7 @@ HTML_DIR = @HTML_DIR@ HTML_OBJ = @HTML_OBJ@ HTTP_OBJ = @HTTP_OBJ@ ICONV_LIBS = @ICONV_LIBS@ +ICU_LIBS = @ICU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -149,7 +156,10 @@ LIBXML_VERSION_NUMBER = @LIBXML_VERSION_NUMBER@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ +LZMA_CFLAGS = @LZMA_CFLAGS@ +LZMA_LIBS = @LZMA_LIBS@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MODULE_EXTENSION = @MODULE_EXTENSION@ MODULE_PLATFORM_LIBS = @MODULE_PLATFORM_LIBS@ @@ -206,10 +216,8 @@ TEST_VTIME = @TEST_VTIME@ TEST_XINCLUDE = @TEST_XINCLUDE@ TEST_XPATH = @TEST_XPATH@ TEST_XPTR = @TEST_XPTR@ -THREADS_W32 = @THREADS_W32@ THREAD_CFLAGS = @THREAD_CFLAGS@ THREAD_LIBS = @THREAD_LIBS@ -U = @U@ VERSION = @VERSION@ VERSION_SCRIPT_FLAGS = @VERSION_SCRIPT_FLAGS@ WGET = @WGET@ @@ -227,6 +235,7 @@ WITH_ICONV = @WITH_ICONV@ WITH_ICU = @WITH_ICU@ WITH_ISO8859X = @WITH_ISO8859X@ WITH_LEGACY = @WITH_LEGACY@ +WITH_LZMA = @WITH_LZMA@ WITH_MEM_DEBUG = @WITH_MEM_DEBUG@ WITH_MODULES = @WITH_MODULES@ WITH_OUTPUT = @WITH_OUTPUT@ @@ -263,6 +272,7 @@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ @@ -561,10 +571,15 @@ install-am: all-am installcheck: installcheck-recursive install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi mostlyclean-generic: clean-generic: diff --git a/lib/3rdparty/libxml2/include/wsockcompat.h b/lib/3rdparty/libxml2/include/wsockcompat.h index f4bdab4b6db..fbe8d0672ac 100644 --- a/lib/3rdparty/libxml2/include/wsockcompat.h +++ b/lib/3rdparty/libxml2/include/wsockcompat.h @@ -27,7 +27,7 @@ #endif #endif -#ifdef __MINGW32__ +#if defined( __MINGW32__ ) || defined( _MSC_VER ) /* Include here to ensure that it doesn't get included later * (e.g. by iconv.h) and overwrites the definition of EWOULDBLOCK. */ #include @@ -39,6 +39,9 @@ #endif #define EWOULDBLOCK WSAEWOULDBLOCK +#define ESHUTDOWN WSAESHUTDOWN + +#if (!defined(_MSC_VER) || (_MSC_VER < 1600)) || defined(__REACTOS__) #define EINPROGRESS WSAEINPROGRESS #define EALREADY WSAEALREADY #define ENOTSOCK WSAENOTSOCK @@ -61,7 +64,6 @@ #define ENOBUFS WSAENOBUFS #define EISCONN WSAEISCONN #define ENOTCONN WSAENOTCONN -#define ESHUTDOWN WSAESHUTDOWN #define ETOOMANYREFS WSAETOOMANYREFS #define ETIMEDOUT WSAETIMEDOUT #define ECONNREFUSED WSAECONNREFUSED @@ -79,5 +81,6 @@ #define ENAMETOOLONG WSAENAMETOOLONG #define ENOTEMPTY WSAENOTEMPTY */ +#endif /* _MSC_VER */ #endif /* __XML_WSOCKCOMPAT_H__ */ diff --git a/lib/3rdparty/libxml2/install-sh b/lib/3rdparty/libxml2/install-sh index 6781b987bdb..a9244eb0786 100644 --- a/lib/3rdparty/libxml2/install-sh +++ b/lib/3rdparty/libxml2/install-sh @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2009-04-28.21; # UTC +scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -156,6 +156,10 @@ while test $# -ne 0; do -s) stripcmd=$stripprog;; -t) dst_arg=$2 + # Protect names problematic for `test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac shift;; -T) no_target_directory=true;; @@ -186,6 +190,10 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then fi shift # arg dst_arg=$arg + # Protect names problematic for `test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac done fi @@ -200,7 +208,11 @@ if test $# -eq 0; then fi if test -z "$dir_arg"; then - trap '(exit $?); exit' 1 2 13 15 + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. @@ -228,9 +240,9 @@ fi for src do - # Protect names starting with `-'. + # Protect names problematic for `test' and other utilities. case $src in - -*) src=./$src;; + -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then @@ -252,12 +264,7 @@ do echo "$0: no destination specified." >&2 exit 1 fi - dst=$dst_arg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst;; - esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. @@ -385,7 +392,7 @@ do case $dstdir in /*) prefix='/';; - -*) prefix='./';; + [-=\(\)!]*) prefix='./';; *) prefix='';; esac @@ -403,7 +410,7 @@ do for d do - test -z "$d" && continue + test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then diff --git a/lib/3rdparty/libxml2/legacy.c b/lib/3rdparty/libxml2/legacy.c index e75178a0257..e941cb07c96 100644 --- a/lib/3rdparty/libxml2/legacy.c +++ b/lib/3rdparty/libxml2/legacy.c @@ -393,7 +393,7 @@ xmlSetFeature(xmlParserCtxtPtr ctxt, const char *name, void *value) * @end: an end marker xmlChar, 0 if none * @end2: an end marker xmlChar, 0 if none * @end3: an end marker xmlChar, 0 if none - * + * * This function is deprecated, we now always process entities content * through xmlStringDecodeEntities * @@ -456,7 +456,7 @@ xmlNamespaceParseNCName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED) /** * xmlNamespaceParseQName: * @ctxt: an XML parser context - * @prefix: a xmlChar ** + * @prefix: a xmlChar ** * * TODO: this seems not in use anymore, the namespace handling is done on * top of the SAX interfaces, i.e. not on raw input. @@ -603,7 +603,7 @@ xmlScanName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED) /** * xmlParserHandleReference: * @ctxt: the parser context - * + * * TODO: Remove, now deprecated ... the test is done directly in the * content parsing * routines. @@ -615,7 +615,7 @@ xmlScanName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED) * [ WFC: Entity Declared ] * the Name given in the entity reference must match that in an entity * declaration, except that well-formed documents need not declare any - * of the following entities: amp, lt, gt, apos, quot. + * of the following entities: amp, lt, gt, apos, quot. * * [ WFC: Parsed Entity ] * An entity reference must not contain the name of an unparsed entity @@ -624,7 +624,7 @@ xmlScanName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED) * '&#x' [0-9a-fA-F]+ ';' * * A PEReference may have been detected in the current input stream - * the handling is done accordingly to + * the handling is done accordingly to * http://www.w3.org/TR/REC-xml#entproc */ void @@ -693,7 +693,7 @@ xmlNewGlobalNs(xmlDocPtr doc ATTRIBUTE_UNUSED, /** * xmlUpgradeOldNs: * @doc: a document pointer - * + * * Upgrade old style Namespaces (PI) and move them to the root of the document. * DEPRECATED */ @@ -719,7 +719,7 @@ xmlUpgradeOldNs(xmlDocPtr doc ATTRIBUTE_UNUSED) * * People must migrate their code to xmlEncodeEntitiesReentrant ! * This routine will issue a warning when encountered. - * + * * Returns NULL */ const xmlChar * @@ -740,7 +740,7 @@ xmlEncodeEntities(xmlDocPtr doc ATTRIBUTE_UNUSED, /************************************************************************ * * - * Old set of SAXv1 functions * + * Old set of SAXv1 functions * * * ************************************************************************/ static int deprecated_v1_msg = 0; @@ -961,8 +961,8 @@ getParameterEntity(void *ctx, const xmlChar * name) /** * entityDecl: * @ctx: the user data (XML parser context) - * @name: the entity name - * @type: the entity type + * @name: the entity name + * @type: the entity type * @publicId: The public ID of the entity * @systemId: The system ID of the entity * @content: the entity value (without processing). @@ -983,8 +983,8 @@ entityDecl(void *ctx, const xmlChar * name, int type, * attributeDecl: * @ctx: the user data (XML parser context) * @elem: the name of the element - * @fullname: the attribute name - * @type: the attribute type + * @fullname: the attribute name + * @type: the attribute type * @def: the type of default value * @defaultValue: the attribute default value * @tree: the tree of enumerated value set @@ -1005,8 +1005,8 @@ attributeDecl(void *ctx, const xmlChar * elem, const xmlChar * fullname, /** * elementDecl: * @ctx: the user data (XML parser context) - * @name: the element name - * @type: the element type + * @name: the element name + * @type: the element type * @content: the element value tree * * An element definition has been parsed @@ -1159,7 +1159,7 @@ endElement(void *ctx, const xmlChar * name ATTRIBUTE_UNUSED) * @ctx: the user data (XML parser context) * @name: The entity name * - * called when an entity reference is detected. + * called when an entity reference is detected. * DEPRECATED: use xmlSAX2Reference() */ void diff --git a/lib/3rdparty/libxml2/libxml-2.0-uninstalled.pc.in b/lib/3rdparty/libxml2/libxml-2.0-uninstalled.pc.in index 0a4c8338e4c..cab68346534 100644 --- a/lib/3rdparty/libxml2/libxml-2.0-uninstalled.pc.in +++ b/lib/3rdparty/libxml2/libxml-2.0-uninstalled.pc.in @@ -8,5 +8,5 @@ Name: libXML Version: @VERSION@ Description: libXML library version2. Requires: -Libs: -L${libdir} -lxml2 @THREAD_LIBS@ @Z_LIBS@ @ICONV_LIBS@ @M_LIBS@ @LIBS@ +Libs: -L${libdir} -lxml2 @ICU_LIBS@ @THREAD_LIBS@ @Z_LIBS@ @ICONV_LIBS@ @M_LIBS@ @LIBS@ Cflags: -I${includedir} @XML_INCLUDEDIR@ @XML_CFLAGS@ diff --git a/lib/3rdparty/libxml2/libxml-2.0.pc.in b/lib/3rdparty/libxml2/libxml-2.0.pc.in index 31a1b8ce6e8..f5f5f03fc0b 100644 --- a/lib/3rdparty/libxml2/libxml-2.0.pc.in +++ b/lib/3rdparty/libxml2/libxml-2.0.pc.in @@ -9,5 +9,5 @@ Version: @VERSION@ Description: libXML library version2. Requires: Libs: -L${libdir} -lxml2 -Libs.private: @THREAD_LIBS@ @Z_LIBS@ @ICONV_LIBS@ @M_LIBS@ @WIN32_EXTRA_LIBADD@ @LIBS@ +Libs.private: @ICU_LIBS@ @THREAD_LIBS@ @Z_LIBS@ @ICONV_LIBS@ @M_LIBS@ @WIN32_EXTRA_LIBADD@ @LIBS@ Cflags: @XML_INCLUDEDIR@ @XML_CFLAGS@ diff --git a/lib/3rdparty/libxml2/libxml.3 b/lib/3rdparty/libxml2/libxml.3 index 88d3eee286c..b3e9fef0617 100644 --- a/lib/3rdparty/libxml2/libxml.3 +++ b/lib/3rdparty/libxml2/libxml.3 @@ -5,7 +5,7 @@ libxml \- library used to parse XML files The .I libxml library is used to parse XML files. -Its internal document repesentation is as close as possible to the +Its internal document representation is as close as possible to the .I DOM (Document Object Model) interface, an API for accessing XML or HTML structured documents. diff --git a/lib/3rdparty/libxml2/libxml.h b/lib/3rdparty/libxml2/libxml.h index 3c44c83735d..6f9e56c051f 100644 --- a/lib/3rdparty/libxml2/libxml.h +++ b/lib/3rdparty/libxml2/libxml.h @@ -29,6 +29,11 @@ #include #include #else +/* + * Currently supported platforms use either autoconf or + * copy to config.h own "preset" configuration file. + * As result ifdef HAVE_CONFIG_H is omited here. + */ #include "config.h" #include #endif @@ -79,6 +84,13 @@ void __xmlGlobalInitMutexLock(void); void __xmlGlobalInitMutexUnlock(void); void __xmlGlobalInitMutexDestroy(void); +#if defined(HAVE_RAND) && defined(HAVE_SRAND) && defined(HAVE_TIME) +/* + * internal thread safe random function + */ +int __xmlRandom(void); +#endif + #ifdef IN_LIBXML #ifdef __GNUC__ #ifdef PIC @@ -90,4 +102,7 @@ void __xmlGlobalInitMutexDestroy(void); #endif #endif #endif +#if !defined(PIC) && !defined(NOLIBTOOL) && !defined(LIBXML_STATIC) +# define LIBXML_STATIC +#endif #endif /* ! __XML_LIBXML_H__ */ diff --git a/lib/3rdparty/libxml2/libxml.spec.in b/lib/3rdparty/libxml2/libxml.spec.in index 688811a8deb..03eb24ee0e4 100644 --- a/lib/3rdparty/libxml2/libxml.spec.in +++ b/lib/3rdparty/libxml2/libxml.spec.in @@ -6,7 +6,7 @@ License: MIT Group: Development/Libraries Source: ftp://xmlsoft.org/libxml2/libxml2-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root -BuildRequires: python python-devel zlib-devel pkgconfig +BuildRequires: python python-devel zlib-devel pkgconfig xz-devel URL: http://xmlsoft.org/ %description @@ -25,6 +25,7 @@ Summary: Libraries, includes, etc. to develop XML and HTML applications Group: Development/Libraries Requires: libxml2 = %{version}-%{release} Requires: zlib-devel +Requires: xz-devel Requires: pkgconfig %description devel diff --git a/lib/3rdparty/libxml2/libxml2.spec b/lib/3rdparty/libxml2/libxml2.spec index 42fa672138c..214adcf416f 100644 --- a/lib/3rdparty/libxml2/libxml2.spec +++ b/lib/3rdparty/libxml2/libxml2.spec @@ -1,12 +1,12 @@ Summary: Library providing XML and HTML support Name: libxml2 -Version: 2.7.8 +Version: 2.9.0 Release: 1 License: MIT Group: Development/Libraries Source: ftp://xmlsoft.org/libxml2/libxml2-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root -BuildRequires: python python-devel zlib-devel pkgconfig +BuildRequires: python python-devel zlib-devel pkgconfig xz-devel URL: http://xmlsoft.org/ %description @@ -25,6 +25,7 @@ Summary: Libraries, includes, etc. to develop XML and HTML applications Group: Development/Libraries Requires: libxml2 = %{version}-%{release} Requires: zlib-devel +Requires: xz-devel Requires: pkgconfig %description devel @@ -127,6 +128,6 @@ rm -fr %{buildroot} %doc doc/python.html %changelog -* Thu Nov 4 2010 Daniel Veillard -- upstream release 2.7.8 see http://xmlsoft.org/news.html +* Tue Sep 11 2012 Daniel Veillard +- upstream release 2.9.0 see http://xmlsoft.org/news.html diff --git a/lib/3rdparty/libxml2/list.c b/lib/3rdparty/libxml2/list.c index 5c01c83586b..d33d92818a5 100644 --- a/lib/3rdparty/libxml2/list.c +++ b/lib/3rdparty/libxml2/list.c @@ -94,15 +94,15 @@ xmlLinkCompare(const void *data0, const void *data1) * * Returns the link containing the data or NULL */ -static xmlLinkPtr -xmlListLowerSearch(xmlListPtr l, void *data) +static xmlLinkPtr +xmlListLowerSearch(xmlListPtr l, void *data) { xmlLinkPtr lk; if (l == NULL) return(NULL); for(lk = l->sentinel->next;lk != l->sentinel && l->linkCompare(lk->data, data) <0 ;lk = lk->next); - return lk; + return lk; } /** @@ -114,15 +114,15 @@ xmlListLowerSearch(xmlListPtr l, void *data) * * Returns the link containing the data or NULL */ -static xmlLinkPtr -xmlListHigherSearch(xmlListPtr l, void *data) +static xmlLinkPtr +xmlListHigherSearch(xmlListPtr l, void *data) { xmlLinkPtr lk; if (l == NULL) return(NULL); for(lk = l->sentinel->prev;lk != l->sentinel && l->linkCompare(lk->data, data) >0 ;lk = lk->prev); - return lk; + return lk; } /** @@ -134,8 +134,8 @@ xmlListHigherSearch(xmlListPtr l, void *data) * * Returns the link containing the data or NULL */ -static xmlLinkPtr -xmlListLinkSearch(xmlListPtr l, void *data) +static xmlLinkPtr +xmlListLinkSearch(xmlListPtr l, void *data) { xmlLinkPtr lk; if (l == NULL) @@ -159,8 +159,8 @@ xmlListLinkSearch(xmlListPtr l, void *data) * * Returns the link containing the data or NULL */ -static xmlLinkPtr -xmlListLinkReverseSearch(xmlListPtr l, void *data) +static xmlLinkPtr +xmlListLinkReverseSearch(xmlListPtr l, void *data) { xmlLinkPtr lk; if (l == NULL) @@ -189,16 +189,16 @@ xmlListCreate(xmlListDeallocator deallocator, xmlListDataCompare compare) { xmlListPtr l; if (NULL == (l = (xmlListPtr )xmlMalloc( sizeof(xmlList)))) { - xmlGenericError(xmlGenericErrorContext, + xmlGenericError(xmlGenericErrorContext, "Cannot initialize memory for list"); return (NULL); } /* Initialize the list to NULL */ memset(l, 0, sizeof(xmlList)); - + /* Add the sentinel */ if (NULL ==(l->sentinel = (xmlLinkPtr )xmlMalloc(sizeof(xmlLink)))) { - xmlGenericError(xmlGenericErrorContext, + xmlGenericError(xmlGenericErrorContext, "Cannot initialize memory for sentinel"); xmlFree(l); return (NULL); @@ -206,7 +206,7 @@ xmlListCreate(xmlListDeallocator deallocator, xmlListDataCompare compare) l->sentinel->next = l->sentinel; l->sentinel->prev = l->sentinel; l->sentinel->data = NULL; - + /* If there is a link deallocator, use it */ if (deallocator != NULL) l->linkDeallocator = deallocator; @@ -217,7 +217,7 @@ xmlListCreate(xmlListDeallocator deallocator, xmlListDataCompare compare) l->linkCompare = xmlLinkCompare; return l; } - + /** * xmlListSearch: * @l: a list @@ -228,7 +228,7 @@ xmlListCreate(xmlListDeallocator deallocator, xmlListDataCompare compare) * Returns the value associated to @data or NULL in case of error */ void * -xmlListSearch(xmlListPtr l, void *data) +xmlListSearch(xmlListPtr l, void *data) { xmlLinkPtr lk; if (l == NULL) @@ -249,7 +249,7 @@ xmlListSearch(xmlListPtr l, void *data) * Returns the value associated to @data or NULL in case of error */ void * -xmlListReverseSearch(xmlListPtr l, void *data) +xmlListReverseSearch(xmlListPtr l, void *data) { xmlLinkPtr lk; if (l == NULL) @@ -270,7 +270,7 @@ xmlListReverseSearch(xmlListPtr l, void *data) * Returns 0 in case of success, 1 in case of failure */ int -xmlListInsert(xmlListPtr l, void *data) +xmlListInsert(xmlListPtr l, void *data) { xmlLinkPtr lkPlace, lkNew; @@ -280,7 +280,7 @@ xmlListInsert(xmlListPtr l, void *data) /* Add the new link */ lkNew = (xmlLinkPtr) xmlMalloc(sizeof(xmlLink)); if (lkNew == NULL) { - xmlGenericError(xmlGenericErrorContext, + xmlGenericError(xmlGenericErrorContext, "Cannot initialize memory for new link"); return (1); } @@ -302,7 +302,7 @@ xmlListInsert(xmlListPtr l, void *data) * * Returns 0 in case of success, 1 in case of failure */ -int xmlListAppend(xmlListPtr l, void *data) +int xmlListAppend(xmlListPtr l, void *data) { xmlLinkPtr lkPlace, lkNew; @@ -312,7 +312,7 @@ int xmlListAppend(xmlListPtr l, void *data) /* Add the new link */ lkNew = (xmlLinkPtr) xmlMalloc(sizeof(xmlLink)); if (lkNew == NULL) { - xmlGenericError(xmlGenericErrorContext, + xmlGenericError(xmlGenericErrorContext, "Cannot initialize memory for new link"); return (1); } @@ -353,7 +353,7 @@ int xmlListRemoveFirst(xmlListPtr l, void *data) { xmlLinkPtr lk; - + if (l == NULL) return(0); /*Find the first instance of this data */ @@ -378,7 +378,7 @@ int xmlListRemoveLast(xmlListPtr l, void *data) { xmlLinkPtr lk; - + if (l == NULL) return(0); /*Find the last instance of this data */ @@ -403,7 +403,7 @@ int xmlListRemoveAll(xmlListPtr l, void *data) { int count=0; - + if (l == NULL) return(0); @@ -422,7 +422,7 @@ void xmlListClear(xmlListPtr l) { xmlLinkPtr lk; - + if (l == NULL) return; lk = l->sentinel->next; @@ -458,14 +458,14 @@ xmlListEmpty(xmlListPtr l) * * Returns the first element in the list, or NULL */ -xmlLinkPtr +xmlLinkPtr xmlListFront(xmlListPtr l) { if (l == NULL) return(NULL); return (l->sentinel->next); } - + /** * xmlListEnd: * @l: a list @@ -474,14 +474,14 @@ xmlListFront(xmlListPtr l) * * Returns the last element in the list, or NULL */ -xmlLinkPtr +xmlLinkPtr xmlListEnd(xmlListPtr l) { if (l == NULL) return(NULL); return (l->sentinel->prev); } - + /** * xmlListSize: * @l: a list @@ -539,7 +539,7 @@ xmlListPopBack(xmlListPtr l) * Returns 1 if successful, 0 otherwise */ int -xmlListPushFront(xmlListPtr l, void *data) +xmlListPushFront(xmlListPtr l, void *data) { xmlLinkPtr lkPlace, lkNew; @@ -549,7 +549,7 @@ xmlListPushFront(xmlListPtr l, void *data) /* Add the new link */ lkNew = (xmlLinkPtr) xmlMalloc(sizeof(xmlLink)); if (lkNew == NULL) { - xmlGenericError(xmlGenericErrorContext, + xmlGenericError(xmlGenericErrorContext, "Cannot initialize memory for new link"); return (0); } @@ -571,7 +571,7 @@ xmlListPushFront(xmlListPtr l, void *data) * Returns 1 if successful, 0 otherwise */ int -xmlListPushBack(xmlListPtr l, void *data) +xmlListPushBack(xmlListPtr l, void *data) { xmlLinkPtr lkPlace, lkNew; @@ -580,7 +580,7 @@ xmlListPushBack(xmlListPtr l, void *data) lkPlace = l->sentinel->prev; /* Add the new link */ if (NULL ==(lkNew = (xmlLinkPtr )xmlMalloc(sizeof(xmlLink)))) { - xmlGenericError(xmlGenericErrorContext, + xmlGenericError(xmlGenericErrorContext, "Cannot initialize memory for new link"); return (0); } @@ -643,7 +643,7 @@ void xmlListSort(xmlListPtr l) { xmlListPtr lTemp; - + if (l == NULL) return; if(xmlListEmpty(l)) @@ -725,10 +725,10 @@ xmlListMerge(xmlListPtr l1, xmlListPtr l2) * @old: the list * * Duplicate the list - * + * * Returns a new copy of the list or NULL in case of error */ -xmlListPtr +xmlListPtr xmlListDup(const xmlListPtr old) { xmlListPtr cur; @@ -754,7 +754,7 @@ xmlListDup(const xmlListPtr old) * @old: the old list * * Move all the element from the old list in the new list - * + * * Returns 0 in case of success 1 in case of error */ int @@ -771,7 +771,7 @@ xmlListCopy(xmlListPtr cur, const xmlListPtr old) return (1); } } - return (0); + return (0); } /* xmlListUnique() */ /* xmlListSwap */ diff --git a/lib/3rdparty/libxml2/ltmain.sh b/lib/3rdparty/libxml2/ltmain.sh index d8efb57b1d7..63ae69dc6fe 100644 --- a/lib/3rdparty/libxml2/ltmain.sh +++ b/lib/3rdparty/libxml2/ltmain.sh @@ -1,10 +1,9 @@ -# Generated from ltmain.m4sh. -# libtool (GNU libtool) 2.2.10 +# libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, -# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @@ -42,6 +41,7 @@ # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) +# --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages @@ -70,17 +70,19 @@ # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.2.10 +# $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . +# GNU libtool home page: . +# General help using GNU software: . PROGRAM=libtool PACKAGE=libtool -VERSION=2.2.10 +VERSION=2.4.2 TIMESTAMP="" -package_revision=1.3175 +package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then @@ -135,15 +137,10 @@ progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} -: ${EGREP="/bin/grep -E"} -: ${FGREP="/bin/grep -F"} -: ${GREP="/bin/grep"} -: ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} -: ${SED="/bin/sed"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} @@ -163,6 +160,27 @@ IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} # func_dirname may be replaced by extended shell implementation + + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} # func_basename may be replaced by extended shell implementation + + # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: @@ -177,17 +195,31 @@ basename="s,^.*/,," # those functions but instead duplicate the functionality here. func_dirname_and_basename () { - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` -} + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` +} # func_dirname_and_basename may be replaced by extended shell implementation + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname may be replaced by extended shell implementation -# Generated shell functions inserted here. # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' @@ -351,7 +383,7 @@ case $progpath in ;; *) save_IFS="$IFS" - IFS=: + IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break @@ -370,6 +402,15 @@ sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' + +# Sed substitution that converts a w32 file name or path +# which contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. @@ -398,7 +439,7 @@ opt_warning=: # name if it has been set yet. func_echo () { - $ECHO "$progname${mode+: }$mode: $*" + $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... @@ -424,14 +465,14 @@ func_echo_all () # Echo program name prefixed message to standard error. func_error () { - $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 + $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { - $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 + $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : @@ -650,11 +691,30 @@ func_show_eval_locale () fi } +# func_tr_sh +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + # func_version # Echo version message to standard output and exit. func_version () { + $opt_debug + $SED -n '/(C)/!b go :more /\./!{ @@ -676,6 +736,8 @@ func_version () # Echo short help message to standard output and exit. func_usage () { + $opt_debug + $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// @@ -692,7 +754,10 @@ func_usage () # unless 'noexit' is passed as argument. func_help () { + $opt_debug + $SED -n '/^# Usage:/,/# Report bugs to/ { + :print s/^# // s/^# *$// s*\$progname*'$progname'* @@ -702,10 +767,14 @@ func_help () s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p - }' < "$progpath" + d + } + /^# .* home page:/b print + /^# General help using/b print + ' < "$progpath" ret=$? if test -z "$1"; then exit $ret @@ -717,12 +786,39 @@ func_help () # exit_cmd. func_missing_arg () { + $opt_debug + func_error "missing argument for $1." exit_cmd=exit } -exit_cmd=: +# func_split_short_opt shortopt +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +func_split_short_opt () +{ + my_sed_short_opt='1s/^\(..\).*$/\1/;q' + my_sed_short_rest='1s/^..\(.*\)$/\1/;q' + + func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` + func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` +} # func_split_short_opt may be replaced by extended shell implementation + + +# func_split_long_opt longopt +# Set func_split_long_opt_name and func_split_long_opt_arg shell +# variables after splitting LONGOPT at the `=' sign. +func_split_long_opt () +{ + my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' + my_sed_long_arg='1s/^--[^=]*=//' + + func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` + func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` +} # func_split_long_opt may be replaced by extended shell implementation + +exit_cmd=: @@ -732,25 +828,64 @@ magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. -# $mode is unset nonopt= -execute_dlfiles= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 -opt_dry_run=false -opt_duplicate_deps=false -opt_silent=false -opt_debug=: - # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "${1}=\$${1}\${2}" +} # func_append may be replaced by extended shell implementation + +# func_append_quoted var value +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +func_append_quoted () +{ + func_quote_for_eval "${2}" + eval "${1}=\$${1}\\ \$func_quote_for_eval_result" +} # func_append_quoted may be replaced by extended shell implementation + + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "${@}"` +} # func_arith may be replaced by extended shell implementation + + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` +} # func_len may be replaced by extended shell implementation + + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} # func_lo2o may be replaced by extended shell implementation + + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` +} # func_xform may be replaced by extended shell implementation + + # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. @@ -840,145 +975,6 @@ func_enable_tag () esac } -# Parse options once, thoroughly. This comes as soon as possible in -# the script to make things like `libtool --version' happen quickly. -{ - - # Shorthand for --mode=foo, only valid as the first argument - case $1 in - clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; - compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; - execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; - finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; - install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; - link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; - uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; - esac - - # Parse non-mode specific arguments: - while test "$#" -gt 0; do - opt="$1" - shift - - case $opt in - --config) func_config ;; - - --debug) preserve_args="$preserve_args $opt" - func_echo "enabling shell trace mode" - opt_debug='set -x' - $opt_debug - ;; - - -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break - execute_dlfiles="$execute_dlfiles $1" - shift - ;; - - --dry-run | -n) opt_dry_run=: ;; - --features) func_features ;; - --finish) mode="finish" ;; - - --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break - case $1 in - # Valid mode arguments: - clean) ;; - compile) ;; - execute) ;; - finish) ;; - install) ;; - link) ;; - relink) ;; - uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; - esac - - mode="$1" - shift - ;; - - --preserve-dup-deps) - opt_duplicate_deps=: ;; - - --quiet|--silent) preserve_args="$preserve_args $opt" - opt_silent=: - opt_verbose=false - ;; - - --no-quiet|--no-silent) - preserve_args="$preserve_args $opt" - opt_silent=false - ;; - - --verbose| -v) preserve_args="$preserve_args $opt" - opt_silent=false - opt_verbose=: - ;; - - --no-verbose) preserve_args="$preserve_args $opt" - opt_verbose=false - ;; - - --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break - preserve_args="$preserve_args $opt $1" - func_enable_tag "$1" # tagname is set here - shift - ;; - - # Separate optargs to long options: - -dlopen=*|--mode=*|--tag=*) - func_opt_split "$opt" - set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} - shift - ;; - - -\?|-h) func_usage ;; - --help) opt_help=: ;; - --help-all) opt_help=': help-all' ;; - --version) func_version ;; - - -*) func_fatal_help "unrecognized option \`$opt'" ;; - - *) nonopt="$opt" - break - ;; - esac - done - - - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_duplicate_deps - ;; - esac - - # Having warned about all mis-specified options, bail out if - # anything was wrong. - $exit_cmd $EXIT_FAILURE -} - # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. @@ -1015,38 +1011,219 @@ _LT_EOF } +# Shorthand for --mode=foo, only valid as the first argument +case $1 in +clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; +compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; +execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; +finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; +install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; +link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; +uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; +esac + + + +# Option defaults: +opt_debug=: +opt_dry_run=false +opt_config=false +opt_preserve_dup_deps=false +opt_features=false +opt_finish=false +opt_help=false +opt_help_all=false +opt_silent=: +opt_warning=: +opt_verbose=: +opt_silent=false +opt_verbose=false + + +# Parse options once, thoroughly. This comes as soon as possible in the +# script to make things like `--version' happen as quickly as we can. +{ + # this just eases exit handling + while test $# -gt 0; do + opt="$1" + shift + case $opt in + --debug|-x) opt_debug='set -x' + func_echo "enabling shell trace mode" + $opt_debug + ;; + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + --config) + opt_config=: +func_config + ;; + --dlopen|-dlopen) + optarg="$1" + opt_dlopen="${opt_dlopen+$opt_dlopen +}$optarg" + shift + ;; + --preserve-dup-deps) + opt_preserve_dup_deps=: + ;; + --features) + opt_features=: +func_features + ;; + --finish) + opt_finish=: +set dummy --mode finish ${1+"$@"}; shift + ;; + --help) + opt_help=: + ;; + --help-all) + opt_help_all=: +opt_help=': help-all' + ;; + --mode) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_mode="$optarg" +case $optarg in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; +esac + shift + ;; + --no-silent|--no-quiet) + opt_silent=false +func_append preserve_args " $opt" + ;; + --no-warning|--no-warn) + opt_warning=false +func_append preserve_args " $opt" + ;; + --no-verbose) + opt_verbose=false +func_append preserve_args " $opt" + ;; + --silent|--quiet) + opt_silent=: +func_append preserve_args " $opt" + opt_verbose=false + ;; + --verbose|-v) + opt_verbose=: +func_append preserve_args " $opt" +opt_silent=false + ;; + --tag) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_tag="$optarg" +func_append preserve_args " $opt $optarg" +func_enable_tag "$optarg" + shift + ;; + + -\?|-h) func_usage ;; + --help) func_help ;; + --version) func_version ;; + + # Separate optargs to long options: + --*=*) + func_split_long_opt "$opt" + set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-n*|-v*) + func_split_short_opt "$opt" + set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognized option \`$opt'" ;; + *) set dummy "$opt" ${1+"$@"}; shift; break ;; + esac + done + + # Validate options: + + # save first non-option argument + if test "$#" -gt 0; then + nonopt="$opt" + shift + fi + + # preserve --debug + test "$opt_debug" = : || func_append preserve_args " --debug" + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test "$opt_mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$opt_mode' for more information." + } + + + # Bail if the options were screwed + $exit_cmd $EXIT_FAILURE +} + + + + ## ----------- ## ## Main. ## ## ----------- ## -$opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - - test -z "$mode" && func_fatal_error "error: you must specify a MODE." - - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$mode' for more information." -} - - # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out @@ -1110,12 +1287,9 @@ func_ltwrapper_executable_p () # temporary ltwrapper_script. func_ltwrapper_scriptname () { - func_ltwrapper_scriptname_result="" - if func_ltwrapper_executable_p "$1"; then - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" - fi + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file @@ -1161,6 +1335,37 @@ func_source () } +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case "$lt_sysroot:$1" in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result="=$func_stripname_result" + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. @@ -1173,8 +1378,7 @@ func_infer_tag () if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" + func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` @@ -1193,8 +1397,7 @@ func_infer_tag () CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" + func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` @@ -1263,6 +1466,486 @@ EOF } } + +################################################## +# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # +################################################## + +# func_convert_core_file_wine_to_w32 ARG +# Helper function used by file name conversion functions when $build is *nix, +# and $host is mingw, cygwin, or some other w32 environment. Relies on a +# correctly configured wine environment available, with the winepath program +# in $build's $PATH. +# +# ARG is the $build file name to be converted to w32 format. +# Result is available in $func_convert_core_file_wine_to_w32_result, and will +# be empty on error (or when ARG is empty) +func_convert_core_file_wine_to_w32 () +{ + $opt_debug + func_convert_core_file_wine_to_w32_result="$1" + if test -n "$1"; then + # Unfortunately, winepath does not exit with a non-zero error code, so we + # are forced to check the contents of stdout. On the other hand, if the + # command is not found, the shell will set an exit code of 127 and print + # *an error message* to stdout. So we must check for both error code of + # zero AND non-empty stdout, which explains the odd construction: + func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` + if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$lt_sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $opt_debug + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result="" + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result" ; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $opt_debug + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $opt_debug + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $opt_debug + if test -z "$2" && test -n "$1" ; then + func_error "Could not determine host file name corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result="$1" + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $opt_debug + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " \`$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result="$3" + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $opt_debug + case $4 in + $1 ) func_to_host_path_result="$3$func_to_host_path_result" + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via `$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $opt_debug + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $opt_debug + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result="$1" +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result="$func_convert_core_msys_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via `$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $opt_debug + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd="func_convert_path_${func_stripname_result}" + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $opt_debug + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result="$1" +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_msys_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + # func_mode_compile arg... func_mode_compile () { @@ -1303,12 +1986,12 @@ func_mode_compile () ;; -pie | -fpie | -fPIE) - pie_flag="$pie_flag $arg" + func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) - later="$later $arg" + func_append later " $arg" continue ;; @@ -1329,15 +2012,14 @@ func_mode_compile () save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" - func_quote_for_eval "$arg" - lastarg="$lastarg $func_quote_for_eval_result" + func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. - base_compile="$base_compile $lastarg" + func_append base_compile " $lastarg" continue ;; @@ -1353,8 +2035,7 @@ func_mode_compile () esac # case $arg_mode # Aesthetically quote the previous argument. - func_quote_for_eval "$lastarg" - base_compile="$base_compile $func_quote_for_eval_result" + func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in @@ -1379,7 +2060,7 @@ func_mode_compile () *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ - *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; @@ -1485,17 +2166,16 @@ compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi - removelist="$removelist $output_obj" + func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist - removelist="$removelist $lockfile" + func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - if test -n "$fix_srcfile_path"; then - eval srcfile=\"$fix_srcfile_path\" - fi + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result @@ -1515,7 +2195,7 @@ compiler." if test -z "$output_obj"; then # Place PIC objects in $objdir - command="$command -o $lobj" + func_append command " -o $lobj" fi func_show_eval_locale "$command" \ @@ -1562,11 +2242,11 @@ compiler." command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then - command="$command -o $obj" + func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. - command="$command$suppress_output" + func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' @@ -1611,13 +2291,13 @@ compiler." } $opt_help || { - test "$mode" = compile && func_mode_compile ${1+"$@"} + test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. - case $mode in + case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. @@ -1793,7 +2473,7 @@ Otherwise, only FILE itself is deleted using RM." ;; *) - func_fatal_help "invalid operation mode \`$mode'" + func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac @@ -1808,13 +2488,13 @@ if $opt_help; then else { func_help noexit - for mode in compile link execute install finish uninstall clean; do + for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit - for mode in compile link execute install finish uninstall clean; do + for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done @@ -1843,13 +2523,16 @@ func_mode_execute () func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do + for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" @@ -1871,7 +2554,7 @@ func_mode_execute () dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" + func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" @@ -1928,8 +2611,7 @@ func_mode_execute () ;; esac # Quote arguments (to preserve shell metacharacters). - func_quote_for_eval "$file" - args="$args $func_quote_for_eval_result" + func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then @@ -1961,22 +2643,59 @@ func_mode_execute () fi } -test "$mode" = execute && func_mode_execute ${1+"$@"} +test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug - libdirs="$nonopt" + libs= + libdirs= admincmds= - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "\`$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument \`$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and \`=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. @@ -1986,7 +2705,7 @@ func_mode_finish () if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || admincmds="$admincmds + $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done @@ -1995,53 +2714,55 @@ func_mode_finish () # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - echo - echo "If you ever happen to want to link against installed libraries" - echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the \`-LLIBDIR'" - echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the \`$shlibpath_var' environment variable" - echo " during execution" - fi - if test -n "$runpath_var"; then - echo " - add LIBDIR to the \`$runpath_var' environment variable" - echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" - $ECHO " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - echo + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo - echo "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" - echo "pages." - ;; - *) - echo "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - echo "----------------------------------------------------------------------" + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi exit $EXIT_SUCCESS } -test "$mode" = finish && func_mode_finish ${1+"$@"} +test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... @@ -2066,7 +2787,7 @@ func_mode_install () # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" - install_prog="$install_prog$func_quote_for_eval_result" + func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; @@ -2086,7 +2807,7 @@ func_mode_install () do arg2= if test -n "$dest"; then - files="$files $dest" + func_append files " $dest" dest=$arg continue fi @@ -2124,11 +2845,11 @@ func_mode_install () # Aesthetically quote the argument. func_quote_for_eval "$arg" - install_prog="$install_prog $func_quote_for_eval_result" + func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi - install_shared_prog="$install_shared_prog $func_quote_for_eval_result" + func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ @@ -2140,7 +2861,7 @@ func_mode_install () if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" - install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result" + func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi @@ -2198,10 +2919,13 @@ func_mode_install () case $file in *.$libext) # Do the static libraries later. - staticlibs="$staticlibs $file" + func_append staticlibs " $file" ;; *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" @@ -2215,19 +2939,19 @@ func_mode_install () if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; + *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; + *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" - dir="$dir$objdir" + func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. @@ -2304,7 +3028,7 @@ func_mode_install () func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) @@ -2478,11 +3202,13 @@ func_mode_install () # Set up the ranlib parameters. oldlib="$destdir/$name" + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $oldlib" 'exit $?' + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. @@ -2501,7 +3227,7 @@ func_mode_install () fi } -test "$mode" = install && func_mode_install ${1+"$@"} +test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p @@ -2548,6 +3274,18 @@ extern \"C\" { #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + /* External symbol declarations for the compiler. */\ " @@ -2559,8 +3297,9 @@ extern \"C\" { # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do - func_verbose "extracting global C symbols from \`$progfile'" - $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then @@ -2609,10 +3348,52 @@ extern \"C\" { func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename="" + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname" ; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename="$func_basename_result" + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename" ; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac done $opt_dry_run || { @@ -2650,26 +3431,9 @@ typedef struct { const char *name; void *address; } lt_dlsymlist; -" - case $host in - *cygwin* | *mingw* | *cegcc* ) - echo >> "$output_objdir/$my_dlsyms" "\ -/* DATA imports from DLLs on WIN32 con't be const, because - runtime relocations are performed -- see ld's documentation - on pseudo-relocs. */" - lt_dlsym_const= ;; - *osf5*) - echo >> "$output_objdir/$my_dlsyms" "\ -/* This system does not cope well with relocations in const data */" - lt_dlsym_const= ;; - *) - lt_dlsym_const=const ;; - esac - - echo >> "$output_objdir/$my_dlsyms" "\ -extern $lt_dlsym_const lt_dlsymlist +extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; -$lt_dlsym_const lt_dlsymlist +LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," @@ -2709,7 +3473,7 @@ static const void *lt_preloaded_setup() { # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; @@ -2725,7 +3489,7 @@ static const void *lt_preloaded_setup() { for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; - *) symtab_cflags="$symtab_cflags $arg" ;; + *) func_append symtab_cflags " $arg" ;; esac done @@ -2788,7 +3552,8 @@ func_win32_libid () # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - win32_nmres=`eval $NM -f posix -A $1 | + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ @@ -2817,6 +3582,131 @@ func_win32_libid () $ECHO "$win32_libid_type" } +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $opt_debug + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $opt_debug + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive which possess that section. Heuristic: eliminate + # all those which have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $opt_debug + if func_cygming_gnu_implib_p "$1" ; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1" ; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result="" + fi +} # func_extract_an_archive dir oldlib @@ -3095,14 +3985,17 @@ func_exec_program_core () # launches target application with the remaining arguments. func_exec_program () { - for lt_wr_arg - do - case \$lt_wr_arg in - --lt-*) ;; - *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; - esac - shift - done + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac func_exec_program_core \${1+\"\$@\"} } @@ -3195,6 +4088,18 @@ func_exec_program () if test -f \"\$progdir/\$program\"; then" + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ @@ -3209,14 +4114,6 @@ func_exec_program () " fi - # fixup the dll searchpath if we need to. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. @@ -3234,166 +4131,6 @@ fi\ } -# func_to_host_path arg -# -# Convert paths to host format when used with build tools. -# Intended for use with "native" mingw (where libtool itself -# is running under the msys shell), or in the following cross- -# build environments: -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# where wine is equipped with the `winepath' executable. -# In the native mingw case, the (msys) shell automatically -# converts paths for any non-msys applications it launches, -# but that facility isn't available from inside the cwrapper. -# Similar accommodations are necessary for $host mingw and -# $build cygwin. Calling this function does no harm for other -# $host/$build combinations not listed above. -# -# ARG is the path (on $build) that should be converted to -# the proper representation for $host. The result is stored -# in $func_to_host_path_result. -func_to_host_path () -{ - func_to_host_path_result="$1" - if test -n "$1"; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - case $build in - *mingw* ) # actually, msys - # awkward: cmd appends spaces to result - func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_path_result=`cygpath -w "$1" | - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # Unfortunately, winepath does not exit with a non-zero - # error code, so we are forced to check the contents of - # stdout. On the other hand, if the command is not - # found, the shell will set an exit code of 127 and print - # *an error message* to stdout. So we must check for both - # error code of zero AND non-empty stdout, which explains - # the odd construction: - func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` - if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then - func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" | - $SED -e "$lt_sed_naive_backslashify"` - else - # Allow warning below. - func_to_host_path_result= - fi - ;; - esac - if test -z "$func_to_host_path_result" ; then - func_error "Could not determine host path corresponding to" - func_error " \`$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_path_result="$1" - fi - ;; - esac - fi -} -# end: func_to_host_path - -# func_to_host_pathlist arg -# -# Convert pathlists to host format when used with build tools. -# See func_to_host_path(), above. This function supports the -# following $build/$host combinations (but does no harm for -# combinations not listed here): -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# -# Path separators are also converted from $build format to -# $host format. If ARG begins or ends with a path separator -# character, it is preserved (but converted to $host format) -# on output. -# -# ARG is a pathlist (on $build) that should be converted to -# the proper representation on $host. The result is stored -# in $func_to_host_pathlist_result. -func_to_host_pathlist () -{ - func_to_host_pathlist_result="$1" - if test -n "$1"; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_pathlist_tmp1=$func_stripname_result - case $build in - *mingw* ) # Actually, msys. - # Awkward: cmd appends spaces to result. - func_to_host_pathlist_result=` - ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" | - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # unfortunately, winepath doesn't convert pathlists - func_to_host_pathlist_result="" - func_to_host_pathlist_oldIFS=$IFS - IFS=: - for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do - IFS=$func_to_host_pathlist_oldIFS - if test -n "$func_to_host_pathlist_f" ; then - func_to_host_path "$func_to_host_pathlist_f" - if test -n "$func_to_host_path_result" ; then - if test -z "$func_to_host_pathlist_result" ; then - func_to_host_pathlist_result="$func_to_host_path_result" - else - func_append func_to_host_pathlist_result ";$func_to_host_path_result" - fi - fi - fi - done - IFS=$func_to_host_pathlist_oldIFS - ;; - esac - if test -z "$func_to_host_pathlist_result"; then - func_error "Could not determine the host path(s) corresponding to" - func_error " \`$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This may break if $1 contains DOS-style drive - # specifications. The fix is not to complicate the expression - # below, but for the user to provide a working wine installation - # with winepath so that path translation in the cross-to-mingw - # case works properly. - lt_replace_pathsep_nix_to_dos="s|:|;|g" - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_replace_pathsep_nix_to_dos"` - fi - # Now, add the leading and trailing path separators back - case "$1" in - :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" - ;; - esac - case "$1" in - *: ) func_append func_to_host_pathlist_result ";" - ;; - esac - ;; - esac - fi -} -# end: func_to_host_pathlist - # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because @@ -3563,14 +4300,14 @@ void lt_dump_script (FILE *f); EOF cat </dev/null` + if test "$want_nocaseglob" = yes; then + shopt -s nocaseglob + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | @@ -6999,7 +7827,7 @@ EOF if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" + func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi @@ -7024,7 +7852,7 @@ EOF ;; *) # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" + func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. @@ -7040,7 +7868,7 @@ EOF if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) - newdeplibs="$newdeplibs $a_deplib" + func_append newdeplibs " $a_deplib" a_deplib="" ;; esac @@ -7053,7 +7881,7 @@ EOF potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" + func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi @@ -7078,7 +7906,7 @@ EOF ;; *) # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" + func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. @@ -7182,7 +8010,7 @@ EOF *) case " $deplibs " in *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; + func_append new_libs " -L$path/$objdir" ;; esac ;; esac @@ -7192,10 +8020,10 @@ EOF -L*) case " $new_libs " in *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; + *) func_append new_libs " $deplib" ;; esac ;; - *) new_libs="$new_libs $deplib" ;; + *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" @@ -7207,15 +8035,22 @@ EOF # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then + # Remove ${wl} instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" + test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else @@ -7224,18 +8059,18 @@ EOF *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" - dep_rpath="$dep_rpath $flag" + func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; + *) func_append perm_rpath " $libdir" ;; esac fi done @@ -7243,17 +8078,13 @@ EOF if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" - if test -n "$hardcode_libdir_flag_spec_ld"; then - eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" - else - eval dep_rpath=\"$hardcode_libdir_flag_spec\" - fi + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do - rpath="$rpath$dir:" + func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi @@ -7261,7 +8092,7 @@ EOF fi shlibpath="$finalize_shlibpath" - test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi @@ -7287,7 +8118,7 @@ EOF linknames= for link do - linknames="$linknames $link" + func_append linknames " $link" done # Use standard objects if they are pic @@ -7298,7 +8129,7 @@ EOF if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" - delfiles="$delfiles $export_symbols" + func_append delfiles " $export_symbols" fi orig_export_symbols= @@ -7329,14 +8160,46 @@ EOF $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do + for cmd1 in $cmds; do IFS="$save_ifs" - eval cmd=\"$cmd\" - func_len " $cmd" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test "$try_normal_branch" = yes \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then func_show_eval "$cmd" 'exit $?' skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=${output_objdir}/${output_la}.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." @@ -7369,7 +8232,7 @@ EOF # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi @@ -7379,7 +8242,7 @@ EOF case " $convenience " in *" $test_deplib "*) ;; *) - tmp_deplibs="$tmp_deplibs $test_deplib" + func_append tmp_deplibs " $test_deplib" ;; esac done @@ -7399,21 +8262,21 @@ EOF test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" + func_append generated " $gentop" func_extract_archives $gentop $convenience - libobjs="$libobjs $func_extract_archives_result" + func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" - linker_flags="$linker_flags $flag" + func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking - if test "$mode" = relink; then + if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi @@ -7475,10 +8338,13 @@ EOF echo 'INPUT (' > $output for obj in $save_libobjs do - $ECHO "$obj" >> $output + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output - delfiles="$delfiles $output" + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" @@ -7492,10 +8358,12 @@ EOF fi for obj do - $ECHO "$obj" >> $output + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output done - delfiles="$delfiles $output" - output=$firstobj\"$file_list_spec$output\" + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." @@ -7546,7 +8414,7 @@ EOF if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi - delfiles="$delfiles $output" + func_append delfiles " $output" else output= @@ -7580,7 +8448,7 @@ EOF lt_exit=$? # Restore the uninstalled library and exit - if test "$mode" = relink; then + if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) @@ -7613,7 +8481,7 @@ EOF # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi @@ -7654,10 +8522,10 @@ EOF # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" + func_append generated " $gentop" func_extract_archives $gentop $dlprefiles - libobjs="$libobjs $func_extract_archives_result" + func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi @@ -7673,7 +8541,7 @@ EOF lt_exit=$? # Restore the uninstalled library and exit - if test "$mode" = relink; then + if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) @@ -7685,7 +8553,7 @@ EOF IFS="$save_ifs" # Restore the uninstalled library and exit - if test "$mode" = relink; then + if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then @@ -7769,13 +8637,16 @@ EOF reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" - generated="$generated $gentop" + func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi + # If we're not building shared, we need to use non_pic_objs + test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" + # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test @@ -7849,8 +8720,8 @@ EOF if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) - compile_command="$compile_command ${wl}-bind_at_load" - finalize_command="$finalize_command ${wl}-bind_at_load" + func_append compile_command " ${wl}-bind_at_load" + func_append finalize_command " ${wl}-bind_at_load" ;; esac fi @@ -7870,7 +8741,7 @@ EOF *) case " $compile_deplibs " in *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; + func_append new_libs " -L$path/$objdir" ;; esac ;; esac @@ -7880,17 +8751,17 @@ EOF -L*) case " $new_libs " in *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; + *) func_append new_libs " $deplib" ;; esac ;; - *) new_libs="$new_libs $deplib" ;; + *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" - compile_command="$compile_command $compile_deplibs" - finalize_command="$finalize_command $finalize_deplibs" + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. @@ -7898,7 +8769,7 @@ EOF # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; + *) func_append finalize_rpath " $libdir" ;; esac done fi @@ -7917,18 +8788,18 @@ EOF *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" + func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; + *) func_append perm_rpath " $libdir" ;; esac fi case $host in @@ -7937,12 +8808,12 @@ EOF case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; - *) dllsearchpath="$dllsearchpath:$libdir";; + *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; + *) func_append dllsearchpath ":$testbindir";; esac ;; esac @@ -7968,18 +8839,18 @@ EOF *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" + func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; - *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + *) func_append finalize_perm_rpath " $libdir" ;; esac fi done @@ -8030,6 +8901,12 @@ EOF exit_status=0 func_show_eval "$link_command" 'exit_status=$?' + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' @@ -8052,7 +8929,7 @@ EOF # We should set the runpath_var. rpath= for dir in $perm_rpath; do - rpath="$rpath$dir:" + func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi @@ -8060,7 +8937,7 @@ EOF # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do - rpath="$rpath$dir:" + func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi @@ -8075,6 +8952,13 @@ EOF $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + exit $EXIT_SUCCESS fi @@ -8108,6 +8992,12 @@ EOF func_show_eval "$link_command" 'exit $?' + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + # Now create the wrapper script. func_verbose "creating $output" @@ -8205,7 +9095,7 @@ EOF else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then - oldobjs="$oldobjs $symfileobj" + func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" @@ -8213,10 +9103,10 @@ EOF if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" + func_append generated " $gentop" func_extract_archives $gentop $addlibs - oldobjs="$oldobjs $func_extract_archives_result" + func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. @@ -8227,10 +9117,10 @@ EOF # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" + func_append generated " $gentop" func_extract_archives $gentop $dlprefiles - oldobjs="$oldobjs $func_extract_archives_result" + func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have @@ -8248,7 +9138,7 @@ EOF else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" + func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= @@ -8272,18 +9162,30 @@ EOF esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - oldobjs="$oldobjs $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" ;; - *) oldobjs="$oldobjs $obj" ;; + *) func_append oldobjs " $obj" ;; esac done fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." @@ -8377,12 +9279,23 @@ EOF *.la) func_basename "$deplib" name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + func_resolve_sysroot "$deplib" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" - newdependency_libs="$newdependency_libs $libdir/$name" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; - *) newdependency_libs="$newdependency_libs $deplib" ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" @@ -8396,9 +9309,9 @@ EOF eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" - newdlfiles="$newdlfiles $libdir/$name" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; - *) newdlfiles="$newdlfiles $lib" ;; + *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" @@ -8415,7 +9328,7 @@ EOF eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" - newdlprefiles="$newdlprefiles $libdir/$name" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done @@ -8427,7 +9340,7 @@ EOF [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac - newdlfiles="$newdlfiles $abs" + func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= @@ -8436,7 +9349,7 @@ EOF [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac - newdlprefiles="$newdlprefiles $abs" + func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi @@ -8521,7 +9434,7 @@ relink_command=\"$relink_command\"" exit $EXIT_SUCCESS } -{ test "$mode" = link || test "$mode" = relink; } && +{ test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} @@ -8541,9 +9454,9 @@ func_mode_uninstall () for arg do case $arg in - -f) RM="$RM $arg"; rmforce=yes ;; - -*) RM="$RM $arg" ;; - *) files="$files $arg" ;; + -f) func_append RM " $arg"; rmforce=yes ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; esac done @@ -8552,24 +9465,23 @@ func_mode_uninstall () rmdirs= - origobjdir="$objdir" for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then - objdir="$origobjdir" + odir="$objdir" else - objdir="$dir/$origobjdir" + odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" - test "$mode" = uninstall && objdir="$dir" + test "$opt_mode" = uninstall && odir="$dir" - # Remember objdir for removal later, being careful to avoid duplicates - if test "$mode" = clean; then + # Remember odir for removal later, being careful to avoid duplicates + if test "$opt_mode" = clean; then case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; esac fi @@ -8595,18 +9507,17 @@ func_mode_uninstall () # Delete the libtool libraries and symlinks. for n in $library_names; do - rmfiles="$rmfiles $objdir/$n" + func_append rmfiles " $odir/$n" done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + test -n "$old_library" && func_append rmfiles " $odir/$old_library" - case "$mode" in + case "$opt_mode" in clean) - case " $library_names " in - # " " in the beginning catches empty $dlname + case " $library_names " in *" $dlname "*) ;; - *) rmfiles="$rmfiles $objdir/$dlname" ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac - test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then @@ -8634,19 +9545,19 @@ func_mode_uninstall () # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then - rmfiles="$rmfiles $dir/$pic_object" + func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then - rmfiles="$rmfiles $dir/$non_pic_object" + func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) - if test "$mode" = clean ; then + if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) @@ -8656,7 +9567,7 @@ func_mode_uninstall () noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe - rmfiles="$rmfiles $file" + func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. @@ -8665,7 +9576,7 @@ func_mode_uninstall () func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result - rmfiles="$rmfiles $func_ltwrapper_scriptname_result" + func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename @@ -8673,12 +9584,12 @@ func_mode_uninstall () # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles - rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then - rmfiles="$rmfiles $objdir/lt-$name" + func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then - rmfiles="$rmfiles $objdir/lt-${noexename}.c" + func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi @@ -8686,7 +9597,6 @@ func_mode_uninstall () esac func_show_eval "$RM $rmfiles" 'exit_status=1' done - objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do @@ -8698,16 +9608,16 @@ func_mode_uninstall () exit $exit_status } -{ test "$mode" = uninstall || test "$mode" = clean; } && +{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} -test -z "$mode" && { +test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$mode'" + func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" diff --git a/lib/3rdparty/libxml2/missing b/lib/3rdparty/libxml2/missing index 28055d2ae6f..86a8fc31e3c 100644 --- a/lib/3rdparty/libxml2/missing +++ b/lib/3rdparty/libxml2/missing @@ -1,10 +1,10 @@ #! /bin/sh # Common stub for a few missing GNU programs while installing. -scriptversion=2009-04-28.21; # UTC +scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, -# 2008, 2009 Free Software Foundation, Inc. +# 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify @@ -84,7 +84,6 @@ Supported PROGRAM values: help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file - tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and @@ -122,15 +121,6 @@ case $1 in # Not GNU programs, they don't have --version. ;; - tar*) - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - exit 1 - fi - ;; - *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. @@ -226,7 +216,7 @@ WARNING: \`$1' $msg. You should only need it if \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then - eval LASTARG="\${$#}" + eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` @@ -256,7 +246,7 @@ WARNING: \`$1' is $msg. You should only need it if \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then - eval LASTARG="\${$#}" + eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` @@ -318,41 +308,6 @@ WARNING: \`$1' is $msg. You should only need it if touch $file ;; - tar*) - shift - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar "$@" && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar "$@" && exit 0 - fi - firstarg="$1" - if shift; then - case $firstarg in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - case $firstarg in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; - *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. diff --git a/lib/3rdparty/libxml2/mkinstalldirs b/lib/3rdparty/libxml2/mkinstalldirs deleted file mode 100644 index 4191a45dbd7..00000000000 --- a/lib/3rdparty/libxml2/mkinstalldirs +++ /dev/null @@ -1,162 +0,0 @@ -#! /bin/sh -# mkinstalldirs --- make directory hierarchy - -scriptversion=2009-04-28.21; # UTC - -# Original author: Noah Friedman -# Created: 1993-05-16 -# Public domain. -# -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -nl=' -' -IFS=" "" $nl" -errstatus=0 -dirmode= - -usage="\ -Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... - -Create each directory DIR (with mode MODE, if specified), including all -leading file name components. - -Report bugs to ." - -# process command line arguments -while test $# -gt 0 ; do - case $1 in - -h | --help | --h*) # -h for help - echo "$usage" - exit $? - ;; - -m) # -m PERM arg - shift - test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } - dirmode=$1 - shift - ;; - --version) - echo "$0 $scriptversion" - exit $? - ;; - --) # stop option processing - shift - break - ;; - -*) # unknown option - echo "$usage" 1>&2 - exit 1 - ;; - *) # first non-opt arg - break - ;; - esac -done - -for file -do - if test -d "$file"; then - shift - else - break - fi -done - -case $# in - 0) exit 0 ;; -esac - -# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and -# mkdir -p a/c at the same time, both will detect that a is missing, -# one will create a, then the other will try to create a and die with -# a "File exists" error. This is a problem when calling mkinstalldirs -# from a parallel make. We use --version in the probe to restrict -# ourselves to GNU mkdir, which is thread-safe. -case $dirmode in - '') - if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - echo "mkdir -p -- $*" - exec mkdir -p -- "$@" - else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - test -d ./-p && rmdir ./-p - test -d ./--version && rmdir ./--version - fi - ;; - *) - if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && - test ! -d ./--version; then - echo "mkdir -m $dirmode -p -- $*" - exec mkdir -m "$dirmode" -p -- "$@" - else - # Clean up after NextStep and OpenStep mkdir. - for d in ./-m ./-p ./--version "./$dirmode"; - do - test -d $d && rmdir $d - done - fi - ;; -esac - -for file -do - case $file in - /*) pathcomp=/ ;; - *) pathcomp= ;; - esac - oIFS=$IFS - IFS=/ - set fnord $file - shift - IFS=$oIFS - - for d - do - test "x$d" = x && continue - - pathcomp=$pathcomp$d - case $pathcomp in - -*) pathcomp=./$pathcomp ;; - esac - - if test ! -d "$pathcomp"; then - echo "mkdir $pathcomp" - - mkdir "$pathcomp" || lasterr=$? - - if test ! -d "$pathcomp"; then - errstatus=$lasterr - else - if test ! -z "$dirmode"; then - echo "chmod $dirmode $pathcomp" - lasterr= - chmod "$dirmode" "$pathcomp" || lasterr=$? - - if test ! -z "$lasterr"; then - errstatus=$lasterr - fi - fi - fi - fi - - pathcomp=$pathcomp/ - done -done - -exit $errstatus - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/lib/3rdparty/libxml2/nanoftp.c b/lib/3rdparty/libxml2/nanoftp.c index a7ca5b6b047..077bfe2e797 100644 --- a/lib/3rdparty/libxml2/nanoftp.c +++ b/lib/3rdparty/libxml2/nanoftp.c @@ -41,7 +41,7 @@ #include #endif #ifdef HAVE_FCNTL_H -#include +#include #endif #ifdef HAVE_ERRNO_H #include @@ -188,7 +188,7 @@ void xmlNanoFTPInit(void) { const char *env; #ifdef _WINSOCKAPI_ - WSADATA wsaData; + WSADATA wsaData; #endif if (initialized) @@ -305,15 +305,15 @@ xmlNanoFTPScanURL(void *ctx, const char *URL) { /* * Clear any existing data from the context */ - if (ctxt->protocol != NULL) { + if (ctxt->protocol != NULL) { xmlFree(ctxt->protocol); ctxt->protocol = NULL; } - if (ctxt->hostname != NULL) { + if (ctxt->hostname != NULL) { xmlFree(ctxt->hostname); ctxt->hostname = NULL; } - if (ctxt->path != NULL) { + if (ctxt->path != NULL) { xmlFree(ctxt->path); ctxt->path = NULL; } @@ -327,7 +327,7 @@ xmlNanoFTPScanURL(void *ctx, const char *URL) { xmlFreeURI(uri); return; } - + ctxt->protocol = xmlMemStrdup(uri->scheme); ctxt->hostname = xmlMemStrdup(uri->server); if (uri->path != NULL) @@ -358,7 +358,7 @@ xmlNanoFTPScanURL(void *ctx, const char *URL) { * @URL: The URL used to update the context * * Update an FTP context by parsing the URL and finding - * new path it indicates. If there is an error in the + * new path it indicates. If there is an error in the * protocol, hostname, port or other information, the * error is raised. It indicates a new connection has to * be established. @@ -403,7 +403,7 @@ xmlNanoFTPUpdateURL(void *ctx, const char *URL) { ctxt->path = NULL; } - if (uri->path == NULL) + if (uri->path == NULL) ctxt->path = xmlMemStrdup("/"); else ctxt->path = xmlMemStrdup(uri->path); @@ -427,7 +427,7 @@ void xmlNanoFTPScanProxy(const char *URL) { xmlURIPtr uri; - if (proxy != NULL) { + if (proxy != NULL) { xmlFree(proxy); proxy = NULL; } @@ -451,7 +451,7 @@ xmlNanoFTPScanProxy(const char *URL) { xmlFreeURI(uri); return; } - + proxy = xmlMemStrdup(uri->server); if (uri->port != 0) proxyPort = uri->port; @@ -523,7 +523,7 @@ xmlNanoFTPFreeCtxt(void * ctx) { * xmlNanoFTPParseResponse: * @buf: the buffer containing the response * @len: the buffer length - * + * * Parsing of the server answer, we just extract the code. * * returns 0 for errors @@ -535,22 +535,22 @@ xmlNanoFTPParseResponse(char *buf, int len) { int val = 0; if (len < 3) return(-1); - if ((*buf >= '0') && (*buf <= '9')) + if ((*buf >= '0') && (*buf <= '9')) val = val * 10 + (*buf - '0'); else return(0); buf++; - if ((*buf >= '0') && (*buf <= '9')) + if ((*buf >= '0') && (*buf <= '9')) val = val * 10 + (*buf - '0'); else return(0); buf++; - if ((*buf >= '0') && (*buf <= '9')) + if ((*buf >= '0') && (*buf <= '9')) val = val * 10 + (*buf - '0'); else return(0); buf++; - if (*buf == '-') + if (*buf == '-') return(-val); return(val); } @@ -749,7 +749,7 @@ xmlNanoFTPCheckResponse(void *ctx) { case -1: __xmlIOErr(XML_FROM_FTP, 0, "select"); return(-1); - + } return(xmlNanoFTPReadResponse(ctx)); @@ -947,7 +947,8 @@ xmlNanoFTPConnect(void *ctx) { ((struct sockaddr_in *)&ctxt->ftpAddr)->sin_family = AF_INET; memcpy (&((struct sockaddr_in *)&ctxt->ftpAddr)->sin_addr, hp->h_addr_list[0], hp->h_length); - ((struct sockaddr_in *)&ctxt->ftpAddr)->sin_port = (u_short)htons ((unsigned short)port); + ((struct sockaddr_in *)&ctxt->ftpAddr)->sin_port = + (unsigned short)htons ((unsigned short)port); ctxt->controlFd = socket (AF_INET, SOCK_STREAM, 0); addrlen = sizeof (struct sockaddr_in); } @@ -1102,7 +1103,7 @@ xmlNanoFTPConnect(void *ctx) { /* we assume it worked :-\ 1 is error for SITE command */ proxyType = 1; break; - } + } if (proxyType == 1) { closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET; ctxt->controlFd = INVALID_SOCKET; @@ -1133,7 +1134,7 @@ xmlNanoFTPConnect(void *ctx) { /* we assume it worked :-\ */ proxyType = 2; return(0); - } + } if (ctxt->passwd == NULL) snprintf(buf, sizeof(buf), "PASS anonymous@\r\n"); else @@ -1238,7 +1239,7 @@ xmlNanoFTPConnectTo(const char *server, int port) { int res; xmlNanoFTPInit(); - if (server == NULL) + if (server == NULL) return(NULL); if (port <= 0) return(NULL); @@ -1331,7 +1332,7 @@ xmlNanoFTPDele(void *ctx, const char *file) { * 450, 550 * 500, 501, 502, 421, 530 */ - + snprintf(buf, sizeof(buf), "DELE %s\r\n", file); buf[sizeof(buf) - 1] = 0; len = strlen(buf); @@ -1429,7 +1430,7 @@ xmlNanoFTPGetConnection(void *ctx) { ctxt->passive = 0; } } - cur = &ctxt->controlBuf[ctxt->controlBufAnswer]; + cur = &ctxt->controlBuf[ctxt->controlBufAnswer]; while (((*cur < '0') || (*cur > '9')) && *cur != '\0') cur++; #ifdef SUPPORT_IP6 if ((ctxt->ftpAddr).ss_family == AF_INET6) { @@ -1524,7 +1525,7 @@ xmlNanoFTPGetConnection(void *ctx) { } } return(ctxt->dataFd); - + } /** @@ -1582,7 +1583,7 @@ xmlNanoFTPCloseConnection(void *ctx) { * @callback: the user callback * @userData: the user callback data * - * Parse at most one entry from the listing. + * Parse at most one entry from the listing. * * Returns -1 incase of error, the length of data parsed otherwise */ @@ -1619,7 +1620,7 @@ xmlNanoFTPParseList(const char *list, ftpListCallback callback, void *userData) if (*cur == 0) return(0); i = 0; while (*cur != ' ') { - if (i < 10) + if (i < 10) attrib[i++] = *cur; cur++; if (*cur == 0) return(0); @@ -1633,7 +1634,7 @@ xmlNanoFTPParseList(const char *list, ftpListCallback callback, void *userData) if (*cur == 0) return(0); i = 0; while (*cur != ' ') { - if (i < 10) + if (i < 10) owner[i++] = *cur; cur++; if (*cur == 0) return(0); @@ -1643,7 +1644,7 @@ xmlNanoFTPParseList(const char *list, ftpListCallback callback, void *userData) if (*cur == 0) return(0); i = 0; while (*cur != ' ') { - if (i < 10) + if (i < 10) group[i++] = *cur; cur++; if (*cur == 0) return(0); @@ -1985,7 +1986,7 @@ xmlNanoFTPRead(void *ctx, void *dest, int len) { * * Start to fetch the given ftp:// resource * - * Returns an FTP context, or NULL + * Returns an FTP context, or NULL */ void* @@ -2042,9 +2043,9 @@ xmlNanoFTPClose(void *ctx) { #ifdef STANDALONE /************************************************************************ - * * - * Basic test in Standalone mode * - * * + * * + * Basic test in Standalone mode * + * * ************************************************************************/ static void ftpList(void *userData, const char *filename, const char* attrib, @@ -2059,7 +2060,7 @@ void ftpData(void *userData, const char *data, int len) { if (len <= 0) { fclose((FILE*)userData); return; - } + } fwrite(data, len, 1, (FILE*)userData); } @@ -2091,7 +2092,7 @@ int main(int argc, char **argv) { if (xmlNanoFTPGet(ctxt, ftpData, (void *) output, tstfile) < 0) xmlGenericError(xmlGenericErrorContext, "Failed to get file\n"); - + } xmlNanoFTPClose(ctxt); xmlMemoryDump(); diff --git a/lib/3rdparty/libxml2/nanohttp.c b/lib/3rdparty/libxml2/nanohttp.c index 58db2427474..cb800c59600 100644 --- a/lib/3rdparty/libxml2/nanohttp.c +++ b/lib/3rdparty/libxml2/nanohttp.c @@ -10,7 +10,7 @@ * * daniel@veillard.com */ - + #define NEED_SOCKETS #define IN_LIBXML #include "libxml.h" @@ -46,7 +46,7 @@ #include #endif #ifdef HAVE_FCNTL_H -#include +#include #endif #ifdef HAVE_ERRNO_H #include @@ -64,9 +64,6 @@ #ifdef HAVE_STRINGS_H #include #endif -#ifdef SUPPORT_IP6 -#include -#endif #ifdef HAVE_ZLIB_H #include #endif @@ -216,7 +213,7 @@ void xmlNanoHTTPInit(void) { const char *env; #ifdef _WINSOCKAPI_ - WSADATA wsaData; + WSADATA wsaData; #endif if (initialized) @@ -282,19 +279,19 @@ xmlNanoHTTPScanURL(xmlNanoHTTPCtxtPtr ctxt, const char *URL) { /* * Clear any existing data from the context */ - if (ctxt->protocol != NULL) { + if (ctxt->protocol != NULL) { xmlFree(ctxt->protocol); ctxt->protocol = NULL; } - if (ctxt->hostname != NULL) { + if (ctxt->hostname != NULL) { xmlFree(ctxt->hostname); ctxt->hostname = NULL; } - if (ctxt->path != NULL) { + if (ctxt->path != NULL) { xmlFree(ctxt->path); ctxt->path = NULL; } - if (ctxt->query != NULL) { + if (ctxt->query != NULL) { xmlFree(ctxt->query); ctxt->query = NULL; } @@ -308,7 +305,7 @@ xmlNanoHTTPScanURL(xmlNanoHTTPCtxtPtr ctxt, const char *URL) { xmlFreeURI(uri); return; } - + ctxt->protocol = xmlMemStrdup(uri->scheme); ctxt->hostname = xmlMemStrdup(uri->server); if (uri->path != NULL) @@ -337,7 +334,7 @@ void xmlNanoHTTPScanProxy(const char *URL) { xmlURIPtr uri; - if (proxy != NULL) { + if (proxy != NULL) { xmlFree(proxy); proxy = NULL; } @@ -361,7 +358,7 @@ xmlNanoHTTPScanProxy(const char *URL) { xmlFreeURI(uri); return; } - + proxy = xmlMemStrdup(uri->server); if (uri->port != 0) proxyPort = uri->port; @@ -647,7 +644,7 @@ xmlNanoHTTPReadLine(xmlNanoHTTPCtxtPtr ctxt) { char buf[4096]; char *bp = buf; int rc; - + while (bp - buf < 4095) { if (ctxt->inrptr == ctxt->inptr) { if ( (rc = xmlNanoHTTPRecv(ctxt)) == 0) { @@ -784,9 +781,9 @@ xmlNanoHTTPScanAnswer(xmlNanoHTTPCtxtPtr ctxt, const char *line) { xmlFree(ctxt->location); if (*cur == '/') { xmlChar *tmp_http = xmlStrdup(BAD_CAST "http://"); - xmlChar *tmp_loc = + xmlChar *tmp_loc = xmlStrcat(tmp_http, (const xmlChar *) ctxt->hostname); - ctxt->location = + ctxt->location = (char *) xmlStrcat (tmp_loc, (const xmlChar *) cur); } else { ctxt->location = xmlMemStrdup(cur); @@ -1140,10 +1137,12 @@ xmlNanoHTTPConnectHost(const char *host, int port) "Non-recoverable errors: FORMERR, REFUSED, or NOTIMP."; break; +#ifdef NO_ADDRESS case NO_ADDRESS: h_err_txt = "Valid name, no data record of requested type."; break; +#endif default: h_err_txt = "No error text defined."; @@ -1166,7 +1165,7 @@ xmlNanoHTTPConnectHost(const char *host, int port) memcpy (&ia, h->h_addr_list[i], h->h_length); sockin.sin_family = h->h_addrtype; sockin.sin_addr = ia; - sockin.sin_port = (u_short)htons ((unsigned short)port); + sockin.sin_port = (unsigned short)htons ((unsigned short)port); addr = (struct sockaddr *) &sockin; #ifdef SUPPORT_IP6 } else if (have_ipv6 () && (h->h_addrtype == AF_INET6)) { @@ -1268,7 +1267,7 @@ xmlNanoHTTPRead(void *ctx, void *dest, int len) { #ifdef HAVE_ZLIB_H if (ctxt->usesGzip == 1) { if (ctxt->strm == NULL) return(0); - + ctxt->strm->next_out = dest; ctxt->strm->avail_out = len; ctxt->strm->avail_in = ctxt->inptr - ctxt->inrptr; @@ -1347,7 +1346,7 @@ xmlNanoHTTPMethodRedir(const char *URL, const char *method, const char *input, #ifdef DEBUG_HTTP int xmt_bytes; #endif - + if (URL == NULL) return(NULL); if (method == NULL) method = "GET"; xmlNanoHTTPInit(); @@ -1428,13 +1427,13 @@ retry: if (proxy) { if (ctxt->port != 80) { - p += snprintf( p, blen - (p - bp), "%s http://%s:%d%s", + p += snprintf( p, blen - (p - bp), "%s http://%s:%d%s", method, ctxt->hostname, - ctxt->port, ctxt->path ); + ctxt->port, ctxt->path ); } - else + else p += snprintf( p, blen - (p - bp), "%s http://%s%s", method, - ctxt->hostname, ctxt->path); + ctxt->hostname, ctxt->path); } else p += snprintf( p, blen - (p - bp), "%s %s", method, ctxt->path); @@ -1443,7 +1442,7 @@ retry: p += snprintf( p, blen - (p - bp), "?%s", ctxt->query); if (ctxt->port == 80) { - p += snprintf( p, blen - (p - bp), " HTTP/1.0\r\nHost: %s\r\n", + p += snprintf( p, blen - (p - bp), " HTTP/1.0\r\nHost: %s\r\n", ctxt->hostname); } else { p += snprintf( p, blen - (p - bp), " HTTP/1.0\r\nHost: %s:%d\r\n", @@ -1454,7 +1453,7 @@ retry: p += snprintf(p, blen - (p - bp), "Accept-Encoding: gzip\r\n"); #endif - if (contentType != NULL && *contentType) + if (contentType != NULL && *contentType) p += snprintf(p, blen - (p - bp), "Content-Type: %s\r\n", *contentType); if (headers != NULL) @@ -1493,7 +1492,7 @@ retry: if ( xmt_bytes != ilen ) xmlGenericError( xmlGenericErrorContext, - "xmlNanoHTTPMethodRedir: Only %d of %d %s %s\n", + "xmlNanoHTTPMethodRedir: Only %d of %d %s %s\n", xmt_bytes, ilen, "bytes of HTTP content sent to host", ctxt->hostname ); @@ -1615,12 +1614,13 @@ xmlNanoHTTPFetch(const char *URL, const char *filename, char **contentType) { char *buf = NULL; int fd; int len; - + int ret = 0; + if (filename == NULL) return(-1); ctxt = xmlNanoHTTPOpen(URL, contentType); if (ctxt == NULL) return(-1); - if (!strcmp(filename, "-")) + if (!strcmp(filename, "-")) fd = 0; else { fd = open(filename, O_CREAT | O_WRONLY, 00644); @@ -1636,12 +1636,14 @@ xmlNanoHTTPFetch(const char *URL, const char *filename, char **contentType) { xmlNanoHTTPFetchContent( ctxt, &buf, &len ); if ( len > 0 ) { - write(fd, buf, len); + if (write(fd, buf, len) == -1) { + ret = -1; + } } xmlNanoHTTPClose(ctxt); close(fd); - return(0); + return(ret); } #ifdef LIBXML_OUTPUT_ENABLED @@ -1660,10 +1662,11 @@ xmlNanoHTTPSave(void *ctxt, const char *filename) { char *buf = NULL; int fd; int len; - + int ret = 0; + if ((ctxt == NULL) || (filename == NULL)) return(-1); - if (!strcmp(filename, "-")) + if (!strcmp(filename, "-")) fd = 0; else { fd = open(filename, O_CREAT | O_WRONLY, 0666); @@ -1675,12 +1678,14 @@ xmlNanoHTTPSave(void *ctxt, const char *filename) { xmlNanoHTTPFetchContent( ctxt, &buf, &len ); if ( len > 0 ) { - write(fd, buf, len); + if (write(fd, buf, len) == -1) { + ret = -1; + } } xmlNanoHTTPClose(ctxt); close(fd); - return(0); + return(ret); } #endif /* LIBXML_OUTPUT_ENABLED */ @@ -1790,7 +1795,7 @@ xmlNanoHTTPMimeType( void * ctx ) { * Check if all the content was read * * Returns 0 if all the content was read and available, returns - * -1 if received content length was less than specified or an error + * -1 if received content length was less than specified or an error * occurred. */ static int @@ -1844,7 +1849,7 @@ int main(int argc, char **argv) { char *contentType = NULL; if (argv[1] != NULL) { - if (argv[2] != NULL) + if (argv[2] != NULL) xmlNanoHTTPFetch(argv[1], argv[2], &contentType); else xmlNanoHTTPFetch(argv[1], "-", &contentType); diff --git a/lib/3rdparty/libxml2/parser.c b/lib/3rdparty/libxml2/parser.c index d1c7888a9fc..192eaedfd88 100644 --- a/lib/3rdparty/libxml2/parser.c +++ b/lib/3rdparty/libxml2/parser.c @@ -17,7 +17,7 @@ * parserInternals.c to reduce this file size. * As much as possible the functions are associated with their relative * production in the XML specification. A few productions defining the - * different ranges of character are actually implanted either in + * different ranges of character are actually implanted either in * parserInternals.h or parserInternals.c * The DOM tree build is realized from the default SAX callbacks in * the module SAX.c. @@ -40,6 +40,7 @@ #endif #include +#include #include #include #include @@ -79,6 +80,12 @@ #ifdef HAVE_ZLIB_H #include #endif +#ifdef HAVE_LZMA_H +#include +#endif + +#include "buf.h" +#include "enc.h" static void xmlFatalErr(xmlParserCtxtPtr ctxt, xmlParserErrors error, const char *info); @@ -114,10 +121,10 @@ xmlCreateEntityParserCtxtInternal(const xmlChar *URL, const xmlChar *ID, * parser option. */ static int -xmlParserEntityCheck(xmlParserCtxtPtr ctxt, unsigned long size, +xmlParserEntityCheck(xmlParserCtxtPtr ctxt, size_t size, xmlEntityPtr ent) { - unsigned long consumed = 0; + size_t consumed = 0; if ((ctxt == NULL) || (ctxt->options & XML_PARSE_HUGE)) return (0); @@ -191,12 +198,24 @@ unsigned int xmlParserMaxDepth = 256; #define XML_PARSER_BUFFER_SIZE 100 #define SAX_COMPAT_MODE BAD_CAST "SAX compatibility mode document" +/** + * XML_PARSER_CHUNK_SIZE + * + * When calling GROW that's the minimal amount of data + * the parser expected to have received. It is not a hard + * limit but an optimization when reading strings like Names + * It is not strictly needed as long as inputs available characters + * are followed by 0, which should be provided by the I/O level + */ +#define XML_PARSER_CHUNK_SIZE 100 + /* * List of XML prefixed PI allowed by W3C specs */ static const char *xmlW3CPIs[] = { "xml-stylesheet", + "xml-model", NULL }; @@ -229,7 +248,7 @@ xmlLoadEntityContent(xmlParserCtxtPtr ctxt, xmlEntityPtr entity); /************************************************************************ * * - * Some factorized error routines * + * Some factorized error routines * * * ************************************************************************/ @@ -281,193 +300,201 @@ static void xmlFatalErr(xmlParserCtxtPtr ctxt, xmlParserErrors error, const char *info) { const char *errmsg; + char errstr[129] = ""; if ((ctxt != NULL) && (ctxt->disableSAX != 0) && (ctxt->instate == XML_PARSER_EOF)) return; switch (error) { case XML_ERR_INVALID_HEX_CHARREF: - errmsg = "CharRef: invalid hexadecimal value\n"; + errmsg = "CharRef: invalid hexadecimal value"; break; case XML_ERR_INVALID_DEC_CHARREF: - errmsg = "CharRef: invalid decimal value\n"; + errmsg = "CharRef: invalid decimal value"; break; case XML_ERR_INVALID_CHARREF: - errmsg = "CharRef: invalid value\n"; + errmsg = "CharRef: invalid value"; break; case XML_ERR_INTERNAL_ERROR: errmsg = "internal error"; break; case XML_ERR_PEREF_AT_EOF: - errmsg = "PEReference at end of document\n"; + errmsg = "PEReference at end of document"; break; case XML_ERR_PEREF_IN_PROLOG: - errmsg = "PEReference in prolog\n"; + errmsg = "PEReference in prolog"; break; case XML_ERR_PEREF_IN_EPILOG: - errmsg = "PEReference in epilog\n"; + errmsg = "PEReference in epilog"; break; case XML_ERR_PEREF_NO_NAME: - errmsg = "PEReference: no name\n"; + errmsg = "PEReference: no name"; break; case XML_ERR_PEREF_SEMICOL_MISSING: - errmsg = "PEReference: expecting ';'\n"; + errmsg = "PEReference: expecting ';'"; break; case XML_ERR_ENTITY_LOOP: - errmsg = "Detected an entity reference loop\n"; + errmsg = "Detected an entity reference loop"; break; case XML_ERR_ENTITY_NOT_STARTED: - errmsg = "EntityValue: \" or ' expected\n"; + errmsg = "EntityValue: \" or ' expected"; break; case XML_ERR_ENTITY_PE_INTERNAL: - errmsg = "PEReferences forbidden in internal subset\n"; + errmsg = "PEReferences forbidden in internal subset"; break; case XML_ERR_ENTITY_NOT_FINISHED: - errmsg = "EntityValue: \" or ' expected\n"; + errmsg = "EntityValue: \" or ' expected"; break; case XML_ERR_ATTRIBUTE_NOT_STARTED: - errmsg = "AttValue: \" or ' expected\n"; + errmsg = "AttValue: \" or ' expected"; break; case XML_ERR_LT_IN_ATTRIBUTE: - errmsg = "Unescaped '<' not allowed in attributes values\n"; + errmsg = "Unescaped '<' not allowed in attributes values"; break; case XML_ERR_LITERAL_NOT_STARTED: - errmsg = "SystemLiteral \" or ' expected\n"; + errmsg = "SystemLiteral \" or ' expected"; break; case XML_ERR_LITERAL_NOT_FINISHED: - errmsg = "Unfinished System or Public ID \" or ' expected\n"; + errmsg = "Unfinished System or Public ID \" or ' expected"; break; case XML_ERR_MISPLACED_CDATA_END: - errmsg = "Sequence ']]>' not allowed in content\n"; + errmsg = "Sequence ']]>' not allowed in content"; break; case XML_ERR_URI_REQUIRED: - errmsg = "SYSTEM or PUBLIC, the URI is missing\n"; + errmsg = "SYSTEM or PUBLIC, the URI is missing"; break; case XML_ERR_PUBID_REQUIRED: - errmsg = "PUBLIC, the Public Identifier is missing\n"; + errmsg = "PUBLIC, the Public Identifier is missing"; break; case XML_ERR_HYPHEN_IN_COMMENT: - errmsg = "Comment must not contain '--' (double-hyphen)\n"; + errmsg = "Comment must not contain '--' (double-hyphen)"; break; case XML_ERR_PI_NOT_STARTED: - errmsg = "xmlParsePI : no target name\n"; + errmsg = "xmlParsePI : no target name"; break; case XML_ERR_RESERVED_XML_NAME: - errmsg = "Invalid PI name\n"; + errmsg = "Invalid PI name"; break; case XML_ERR_NOTATION_NOT_STARTED: - errmsg = "NOTATION: Name expected here\n"; + errmsg = "NOTATION: Name expected here"; break; case XML_ERR_NOTATION_NOT_FINISHED: - errmsg = "'>' required to close NOTATION declaration\n"; + errmsg = "'>' required to close NOTATION declaration"; break; case XML_ERR_VALUE_REQUIRED: - errmsg = "Entity value required\n"; + errmsg = "Entity value required"; break; case XML_ERR_URI_FRAGMENT: errmsg = "Fragment not allowed"; break; case XML_ERR_ATTLIST_NOT_STARTED: - errmsg = "'(' required to start ATTLIST enumeration\n"; + errmsg = "'(' required to start ATTLIST enumeration"; break; case XML_ERR_NMTOKEN_REQUIRED: - errmsg = "NmToken expected in ATTLIST enumeration\n"; + errmsg = "NmToken expected in ATTLIST enumeration"; break; case XML_ERR_ATTLIST_NOT_FINISHED: - errmsg = "')' required to finish ATTLIST enumeration\n"; + errmsg = "')' required to finish ATTLIST enumeration"; break; case XML_ERR_MIXED_NOT_STARTED: - errmsg = "MixedContentDecl : '|' or ')*' expected\n"; + errmsg = "MixedContentDecl : '|' or ')*' expected"; break; case XML_ERR_PCDATA_REQUIRED: - errmsg = "MixedContentDecl : '#PCDATA' expected\n"; + errmsg = "MixedContentDecl : '#PCDATA' expected"; break; case XML_ERR_ELEMCONTENT_NOT_STARTED: - errmsg = "ContentDecl : Name or '(' expected\n"; + errmsg = "ContentDecl : Name or '(' expected"; break; case XML_ERR_ELEMCONTENT_NOT_FINISHED: - errmsg = "ContentDecl : ',' '|' or ')' expected\n"; + errmsg = "ContentDecl : ',' '|' or ')' expected"; break; case XML_ERR_PEREF_IN_INT_SUBSET: errmsg = - "PEReference: forbidden within markup decl in internal subset\n"; + "PEReference: forbidden within markup decl in internal subset"; break; case XML_ERR_GT_REQUIRED: - errmsg = "expected '>'\n"; + errmsg = "expected '>'"; break; case XML_ERR_CONDSEC_INVALID: - errmsg = "XML conditional section '[' expected\n"; + errmsg = "XML conditional section '[' expected"; break; case XML_ERR_EXT_SUBSET_NOT_FINISHED: - errmsg = "Content error in the external subset\n"; + errmsg = "Content error in the external subset"; break; case XML_ERR_CONDSEC_INVALID_KEYWORD: errmsg = - "conditional section INCLUDE or IGNORE keyword expected\n"; + "conditional section INCLUDE or IGNORE keyword expected"; break; case XML_ERR_CONDSEC_NOT_FINISHED: - errmsg = "XML conditional section not closed\n"; + errmsg = "XML conditional section not closed"; break; case XML_ERR_XMLDECL_NOT_STARTED: - errmsg = "Text declaration '' expected\n"; + errmsg = "parsing XML declaration: '?>' expected"; break; case XML_ERR_EXT_ENTITY_STANDALONE: - errmsg = "external parsed entities cannot be standalone\n"; + errmsg = "external parsed entities cannot be standalone"; break; case XML_ERR_ENTITYREF_SEMICOL_MISSING: - errmsg = "EntityRef: expecting ';'\n"; + errmsg = "EntityRef: expecting ';'"; break; case XML_ERR_DOCTYPE_NOT_FINISHED: - errmsg = "DOCTYPE improperly terminated\n"; + errmsg = "DOCTYPE improperly terminated"; break; case XML_ERR_LTSLASH_REQUIRED: - errmsg = "EndTag: 'errNo = error; __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error, - XML_ERR_FATAL, NULL, 0, info, NULL, NULL, 0, 0, errmsg, + XML_ERR_FATAL, NULL, 0, info, NULL, NULL, 0, 0, &errstr[0], info); if (ctxt != NULL) { ctxt->wellFormed = 0; @@ -622,7 +649,7 @@ xmlFatalErrMsgInt(xmlParserCtxtPtr ctxt, xmlParserErrors error, */ static void xmlFatalErrMsgStrIntStr(xmlParserCtxtPtr ctxt, xmlParserErrors error, - const char *msg, const xmlChar *str1, int val, + const char *msg, const xmlChar *str1, int val, const xmlChar *str2) { if ((ctxt != NULL) && (ctxt->disableSAX != 0) && @@ -731,7 +758,7 @@ xmlNsErr(xmlParserCtxtPtr ctxt, xmlParserErrors error, * @info1: extra information string * @info2: extra information string * - * Handle a fatal parser error, i.e. violating Well-Formedness constraints + * Handle a namespace warning error */ static void xmlNsWarn(xmlParserCtxtPtr ctxt, xmlParserErrors error, @@ -750,7 +777,7 @@ xmlNsWarn(xmlParserCtxtPtr ctxt, xmlParserErrors error, /************************************************************************ * * - * Library wide options * + * Library wide options * * * ************************************************************************/ @@ -953,6 +980,12 @@ xmlHasFeature(xmlFeature feature) return(1); #else return(0); +#endif + case XML_WITH_LZMA: +#ifdef LIBXML_LZMA_ENABLED + return(1); +#else + return(0); #endif case XML_WITH_ICU: #ifdef LIBXML_ICU_ENABLED @@ -968,7 +1001,7 @@ xmlHasFeature(xmlFeature feature) /************************************************************************ * * - * SAX2 defaulted attributes handling * + * SAX2 defaulted attributes handling * * * ************************************************************************/ @@ -992,8 +1025,8 @@ xmlDetectSAX2(xmlParserCtxtPtr ctxt) { ctxt->str_xml = xmlDictLookup(ctxt->dict, BAD_CAST "xml", 3); ctxt->str_xmlns = xmlDictLookup(ctxt->dict, BAD_CAST "xmlns", 5); ctxt->str_xml_ns = xmlDictLookup(ctxt->dict, XML_XML_NAMESPACE, 36); - if ((ctxt->str_xml==NULL) || (ctxt->str_xmlns==NULL) || - (ctxt->str_xml_ns == NULL)) { + if ((ctxt->str_xml==NULL) || (ctxt->str_xmlns==NULL) || + (ctxt->str_xml_ns == NULL)) { xmlErrMemory(ctxt, NULL); } } @@ -1819,15 +1852,14 @@ namePush(xmlParserCtxtPtr ctxt, const xmlChar * value) if (ctxt->nameNr >= ctxt->nameMax) { const xmlChar * *tmp; - ctxt->nameMax *= 2; tmp = (const xmlChar * *) xmlRealloc((xmlChar * *)ctxt->nameTab, - ctxt->nameMax * + ctxt->nameMax * 2 * sizeof(ctxt->nameTab[0])); if (tmp == NULL) { - ctxt->nameMax /= 2; goto mem_error; } ctxt->nameTab = tmp; + ctxt->nameMax *= 2; } ctxt->nameTab[ctxt->nameNr] = value; ctxt->name = value; @@ -1913,7 +1945,7 @@ static int spacePop(xmlParserCtxtPtr ctxt) { * to compare on ASCII based substring. * SKIP(n) Skip n xmlChar, and must also be used only to skip ASCII defined * strings without newlines within the parser. - * NEXT1(l) Skip 1 xmlChar, and must also be used only to skip 1 non-newline ASCII + * NEXT1(l) Skip 1 xmlChar, and must also be used only to skip 1 non-newline ASCII * defined char within the parser. * Clean macros, not dependent of an ASCII context, expect UTF-8 encoding * @@ -1962,10 +1994,10 @@ static int spacePop(xmlParserCtxtPtr ctxt) { #define SKIPL(val) do { \ int skipl; \ for(skipl=0; skiplinput->cur) == '\n') { \ + if (*(ctxt->input->cur) == '\n') { \ ctxt->input->line++; ctxt->input->col = 1; \ - } else ctxt->input->col++; \ - ctxt->nbChars++; \ + } else ctxt->input->col++; \ + ctxt->nbChars++; \ ctxt->input->cur++; \ } \ if (*ctxt->input->cur == '%') xmlParserHandlePEReference(ctxt); \ @@ -1991,6 +2023,12 @@ static void xmlSHRINK (xmlParserCtxtPtr ctxt) { xmlGROW (ctxt); static void xmlGROW (xmlParserCtxtPtr ctxt) { + if ((((ctxt->input->end - ctxt->input->cur) > XML_MAX_LOOKUP_LIMIT) || + ((ctxt->input->cur - ctxt->input->base) > XML_MAX_LOOKUP_LIMIT)) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, "Huge input lookup"); + ctxt->instate = XML_PARSER_EOF; + } xmlParserInputGrow(ctxt->input, INPUT_CHUNK); if ((ctxt->input->cur != NULL) && (*ctxt->input->cur == 0) && (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0)) @@ -2135,6 +2173,8 @@ xmlPushInput(xmlParserCtxtPtr ctxt, xmlParserInputPtr input) { "Pushing input %d : %.30s\n", ctxt->inputNr+1, input->cur); } ret = inputPush(ctxt, input); + if (ctxt->instate == XML_PARSER_EOF) + return(-1); GROW; return(ret); } @@ -2150,7 +2190,7 @@ xmlPushInput(xmlParserCtxtPtr ctxt, xmlParserInputPtr input) { * * [ WFC: Legal Character ] * Characters referred to using character references must match the - * production for Char. + * production for Char. * * Returns the value parsed (as an int), 0 in case of error */ @@ -2171,8 +2211,10 @@ xmlParseCharRef(xmlParserCtxtPtr ctxt) { if (count++ > 20) { count = 0; GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(0); } - if ((RAW >= '0') && (RAW <= '9')) + if ((RAW >= '0') && (RAW <= '9')) val = val * 16 + (CUR - '0'); else if ((RAW >= 'a') && (RAW <= 'f') && (count < 20)) val = val * 16 + (CUR - 'a') + 10; @@ -2202,8 +2244,10 @@ xmlParseCharRef(xmlParserCtxtPtr ctxt) { if (count++ > 20) { count = 0; GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(0); } - if ((RAW >= '0') && (RAW <= '9')) + if ((RAW >= '0') && (RAW <= '9')) val = val * 10 + (CUR - '0'); else { xmlFatalErr(ctxt, XML_ERR_INVALID_DEC_CHARREF, NULL); @@ -2229,7 +2273,7 @@ xmlParseCharRef(xmlParserCtxtPtr ctxt) { /* * [ WFC: Legal Character ] * Characters referred to using character references must match the - * production for Char. + * production for Char. */ if ((IS_CHAR(val) && (outofrange == 0))) { return(val); @@ -2254,7 +2298,7 @@ xmlParseCharRef(xmlParserCtxtPtr ctxt) { * * [ WFC: Legal Character ] * Characters referred to using character references must match the - * production for Char. + * production for Char. * * Returns the value parsed (as an int), 0 in case of error, str will be * updated to the current value of the index @@ -2273,7 +2317,7 @@ xmlParseStringCharRef(xmlParserCtxtPtr ctxt, const xmlChar **str) { ptr += 3; cur = *ptr; while (cur != ';') { /* Non input consuming loop */ - if ((cur >= '0') && (cur <= '9')) + if ((cur >= '0') && (cur <= '9')) val = val * 16 + (cur - '0'); else if ((cur >= 'a') && (cur <= 'f')) val = val * 16 + (cur - 'a') + 10; @@ -2296,7 +2340,7 @@ xmlParseStringCharRef(xmlParserCtxtPtr ctxt, const xmlChar **str) { ptr += 2; cur = *ptr; while (cur != ';') { /* Non input consuming loops */ - if ((cur >= '0') && (cur <= '9')) + if ((cur >= '0') && (cur <= '9')) val = val * 10 + (cur - '0'); else { xmlFatalErr(ctxt, XML_ERR_INVALID_DEC_CHARREF, NULL); @@ -2320,7 +2364,7 @@ xmlParseStringCharRef(xmlParserCtxtPtr ctxt, const xmlChar **str) { /* * [ WFC: Legal Character ] * Characters referred to using character references must match the - * production for Char. + * production for Char. */ if ((IS_CHAR(val) && (outofrange == 0))) { return(val); @@ -2342,9 +2386,9 @@ xmlParseStringCharRef(xmlParserCtxtPtr ctxt, const xmlChar **str) { * * Returns the new input stream or NULL */ - + static void deallocblankswrapper (xmlChar *str) {xmlFree(str);} - + static xmlParserInputPtr xmlNewBlanksWrapperInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) { xmlParserInputPtr input; @@ -2367,7 +2411,7 @@ xmlNewBlanksWrapperInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) { if (buffer == NULL) { xmlErrMemory(ctxt, NULL); xmlFree(input); - return(NULL); + return(NULL); } buffer [0] = ' '; buffer [1] = '%'; @@ -2386,12 +2430,12 @@ xmlNewBlanksWrapperInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) { /** * xmlParserHandlePEReference: * @ctxt: the parser context - * + * * [69] PEReference ::= '%' Name ';' * * [ WFC: No Recursion ] * A parsed entity must not contain a recursive - * reference to itself, either directly or indirectly. + * reference to itself, either directly or indirectly. * * [ WFC: Entity Declared ] * In a document without any DTD, a document with only an internal DTD @@ -2409,9 +2453,9 @@ xmlNewBlanksWrapperInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) { * NOTE: misleading but this is handled. * * A PEReference may have been detected in the current input stream - * the handling is done accordingly to + * the handling is done accordingly to * http://www.w3.org/TR/REC-xml#entproc - * i.e. + * i.e. * - Included in literal in entity values * - Included as Parameter Entity reference within DTDs */ @@ -2489,7 +2533,7 @@ xmlParserHandlePEReference(xmlParserCtxtPtr ctxt) { if ((ctxt->sax != NULL) && (ctxt->sax->getParameterEntity != NULL)) entity = ctxt->sax->getParameterEntity(ctxt->userData, name); if (entity == NULL) { - + /* * [ WFC: Entity Declared ] * In a document without any DTD, a document with only an @@ -2515,7 +2559,7 @@ xmlParserHandlePEReference(xmlParserCtxtPtr ctxt) { xmlValidityError(ctxt, XML_WAR_UNDECLARED_ENTITY, "PEReference: %%%s; not found\n", name, NULL); - } else + } else xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY, "PEReference: %%%s; not found\n", name, NULL); @@ -2540,7 +2584,7 @@ xmlParserHandlePEReference(xmlParserCtxtPtr ctxt) { if (xmlPushInput(ctxt, input) < 0) return; - /* + /* * Get the 4 first bytes and decode the charset * if enc != XML_CHAR_ENCODING_NONE * plug some encoding conversion routines. @@ -2550,6 +2594,8 @@ xmlParserHandlePEReference(xmlParserCtxtPtr ctxt) { * the amount of data in the buffer. */ GROW + if (ctxt->instate == XML_PARSER_EOF) + return; if ((ctxt->input->end - ctxt->input->cur)>=4) { start[0] = RAW; start[1] = NXT(1); @@ -2580,15 +2626,17 @@ xmlParserHandlePEReference(xmlParserCtxtPtr ctxt) { /* * Macro used to grow the current buffer. + * buffer##_size is expected to be a size_t + * mem_error: is expected to handle memory allocation failures */ #define growBuffer(buffer, n) { \ xmlChar *tmp; \ - buffer##_size *= 2; \ - buffer##_size += n; \ - tmp = (xmlChar *) \ - xmlRealloc(buffer, buffer##_size * sizeof(xmlChar)); \ + size_t new_size = buffer##_size * 2 + n; \ + if (new_size < buffer##_size) goto mem_error; \ + tmp = (xmlChar *) xmlRealloc(buffer, new_size); \ if (tmp == NULL) goto mem_error; \ buffer = tmp; \ + buffer##_size = new_size; \ } /** @@ -2600,7 +2648,7 @@ xmlParserHandlePEReference(xmlParserCtxtPtr ctxt) { * @end: an end marker xmlChar, 0 if none * @end2: an end marker xmlChar, 0 if none * @end3: an end marker xmlChar, 0 if none - * + * * Takes a entity string content and process to do the adequate substitutions. * * [67] Reference ::= EntityRef | CharRef @@ -2614,14 +2662,14 @@ xmlChar * xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, int what, xmlChar end, xmlChar end2, xmlChar end3) { xmlChar *buffer = NULL; - int buffer_size = 0; + size_t buffer_size = 0; + size_t nbchars = 0; xmlChar *current = NULL; xmlChar *rep = NULL; const xmlChar *last; xmlEntityPtr ent; int c,l; - int nbchars = 0; if ((ctxt == NULL) || (str == NULL) || (len < 0)) return(NULL); @@ -2638,7 +2686,7 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, * allocate a translation buffer. */ buffer_size = XML_PARSER_BIG_BUFFER_SIZE; - buffer = (xmlChar *) xmlMallocAtomic(buffer_size * sizeof(xmlChar)); + buffer = (xmlChar *) xmlMallocAtomic(buffer_size); if (buffer == NULL) goto mem_error; /* @@ -2658,7 +2706,7 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, if (val != 0) { COPY_BUF(0,buffer,nbchars,val); } - if (nbchars > buffer_size - XML_PARSER_BUFFER_SIZE) { + if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) { growBuffer(buffer, XML_PARSER_BUFFER_SIZE); } } else if ((c == '&') && (what & XML_SUBSTITUTE_REF)) { @@ -2676,7 +2724,7 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) { if (ent->content != NULL) { COPY_BUF(0,buffer,nbchars,ent->content[0]); - if (nbchars > buffer_size - XML_PARSER_BUFFER_SIZE) { + if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) { growBuffer(buffer, XML_PARSER_BUFFER_SIZE); } } else { @@ -2693,8 +2741,7 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, current = rep; while (*current != 0) { /* non input consuming loop */ buffer[nbchars++] = *current++; - if (nbchars > - buffer_size - XML_PARSER_BUFFER_SIZE) { + if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) { if (xmlParserEntityCheck(ctxt, nbchars, ent)) goto int_error; growBuffer(buffer, XML_PARSER_BUFFER_SIZE); @@ -2708,8 +2755,8 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, const xmlChar *cur = ent->name; buffer[nbchars++] = '&'; - if (nbchars > buffer_size - i - XML_PARSER_BUFFER_SIZE) { - growBuffer(buffer, XML_PARSER_BUFFER_SIZE); + if (nbchars + i + XML_PARSER_BUFFER_SIZE > buffer_size) { + growBuffer(buffer, i + XML_PARSER_BUFFER_SIZE); } for (;i > 0;i--) buffer[nbchars++] = *cur++; @@ -2736,8 +2783,7 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, current = rep; while (*current != 0) { /* non input consuming loop */ buffer[nbchars++] = *current++; - if (nbchars > - buffer_size - XML_PARSER_BUFFER_SIZE) { + if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) { if (xmlParserEntityCheck(ctxt, nbchars, ent)) goto int_error; growBuffer(buffer, XML_PARSER_BUFFER_SIZE); @@ -2750,8 +2796,8 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len, } else { COPY_BUF(l,buffer,nbchars,c); str += l; - if (nbchars > buffer_size - XML_PARSER_BUFFER_SIZE) { - growBuffer(buffer, XML_PARSER_BUFFER_SIZE); + if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) { + growBuffer(buffer, XML_PARSER_BUFFER_SIZE); } } if (str < last) @@ -2780,7 +2826,7 @@ int_error: * @end: an end marker xmlChar, 0 if none * @end2: an end marker xmlChar, 0 if none * @end3: an end marker xmlChar, 0 if none - * + * * Takes a entity string content and process to do the adequate substitutions. * * [67] Reference ::= EntityRef | CharRef @@ -3143,7 +3189,7 @@ xmlIsNameChar(xmlParserCtxtPtr ctxt, int c) { } else { if ((IS_LETTER(c)) || (IS_DIGIT(c)) || (c == '.') || (c == '-') || - (c == '_') || (c == ':') || + (c == '_') || (c == ':') || (IS_COMBINING(c)) || (IS_EXTENDER(c))) return(1); @@ -3168,6 +3214,8 @@ xmlParseNameComplex(xmlParserCtxtPtr ctxt) { * Handler for more complex cases */ GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); c = CUR_CHAR(l); if ((ctxt->options & XML_PARSE_OLD10) == 0) { /* @@ -3216,9 +3264,11 @@ xmlParseNameComplex(xmlParserCtxtPtr ctxt) { ((c >= 0xFDF0) && (c <= 0xFFFD)) || ((c >= 0x10000) && (c <= 0xEFFFF)) )) { - if (count++ > 100) { + if (count++ > XML_PARSER_CHUNK_SIZE) { count = 0; GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); } len += l; NEXTL(l); @@ -3237,18 +3287,32 @@ xmlParseNameComplex(xmlParserCtxtPtr ctxt) { while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */ ((IS_LETTER(c)) || (IS_DIGIT(c)) || (c == '.') || (c == '-') || - (c == '_') || (c == ':') || + (c == '_') || (c == ':') || (IS_COMBINING(c)) || (IS_EXTENDER(c)))) { - if (count++ > 100) { + if (count++ > XML_PARSER_CHUNK_SIZE) { count = 0; GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); } len += l; NEXTL(l); c = CUR_CHAR(l); + if (c == 0) { + count = 0; + GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); + c = CUR_CHAR(l); + } } } + if ((len > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "Name"); + return(NULL); + } if ((*ctxt->input->cur == '\n') && (ctxt->input->cur[-1] == '\r')) return(xmlDictLookup(ctxt->dict, ctxt->input->cur - (len + 1), len)); return(xmlDictLookup(ctxt->dict, ctxt->input->cur - len, len)); @@ -3298,6 +3362,11 @@ xmlParseName(xmlParserCtxtPtr ctxt) { in++; if ((*in > 0) && (*in < 0x80)) { count = in - ctxt->input->cur; + if ((count > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "Name"); + return(NULL); + } ret = xmlDictLookup(ctxt->dict, ctxt->input->cur, count); ctxt->input->cur = in; ctxt->nbChars += count; @@ -3333,13 +3402,32 @@ xmlParseNCNameComplex(xmlParserCtxtPtr ctxt) { while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */ (xmlIsNameChar(ctxt, c) && (c != ':'))) { - if (count++ > 100) { + if (count++ > XML_PARSER_CHUNK_SIZE) { + if ((len > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName"); + return(NULL); + } count = 0; GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); } len += l; NEXTL(l); c = CUR_CHAR(l); + if (c == 0) { + count = 0; + GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); + c = CUR_CHAR(l); + } + } + if ((len > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName"); + return(NULL); } return(xmlDictLookup(ctxt->dict, ctxt->input->cur - len, len)); } @@ -3385,6 +3473,11 @@ xmlParseNCName(xmlParserCtxtPtr ctxt) { in++; if ((*in > 0) && (*in < 0x80)) { count = in - ctxt->input->cur; + if ((count > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName"); + return(NULL); + } ret = xmlDictLookup(ctxt->dict, ctxt->input->cur, count); ctxt->input->cur = in; ctxt->nbChars += count; @@ -3416,6 +3509,8 @@ xmlParseNameAndCompare(xmlParserCtxtPtr ctxt, xmlChar const *other) { const xmlChar *ret; GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); in = ctxt->input->cur; while (*in != 0 && *in == *cmp) { @@ -3451,7 +3546,7 @@ xmlParseNameAndCompare(xmlParserCtxtPtr ctxt, xmlChar const *other) { * * [6] Names ::= Name (#x20 Name)* * - * Returns the Name parsed or NULL. The @str pointer + * Returns the Name parsed or NULL. The @str pointer * is updated to the current location in the string. */ @@ -3495,6 +3590,13 @@ xmlParseStringName(xmlParserCtxtPtr ctxt, const xmlChar** str) { while (xmlIsNameChar(ctxt, c)) { if (len + 10 > max) { xmlChar *tmp; + + if ((len > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName"); + xmlFree(buffer); + return(NULL); + } max *= 2; tmp = (xmlChar *) xmlRealloc(buffer, max * sizeof(xmlChar)); @@ -3514,6 +3616,11 @@ xmlParseStringName(xmlParserCtxtPtr ctxt, const xmlChar** str) { return(buffer); } } + if ((len > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName"); + return(NULL); + } *str = cur; return(xmlStrndup(buf, len)); } @@ -3543,16 +3650,25 @@ xmlParseNmtoken(xmlParserCtxtPtr ctxt) { #endif GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); c = CUR_CHAR(l); while (xmlIsNameChar(ctxt, c)) { - if (count++ > 100) { + if (count++ > XML_PARSER_CHUNK_SIZE) { count = 0; GROW; } COPY_BUF(l,buf,len,c); NEXTL(l); c = CUR_CHAR(l); + if (c == 0) { + count = 0; + GROW; + if (ctxt->instate == XML_PARSER_EOF) + return(NULL); + c = CUR_CHAR(l); + } if (len >= XML_MAX_NAMELEN) { /* * Okay someone managed to make a huge token, so he's ready to pay @@ -3568,13 +3684,23 @@ xmlParseNmtoken(xmlParserCtxtPtr ctxt) { } memcpy(buffer, buf, len); while (xmlIsNameChar(ctxt, c)) { - if (count++ > 100) { + if (count++ > XML_PARSER_CHUNK_SIZE) { count = 0; GROW; + if (ctxt->instate == XML_PARSER_EOF) { + xmlFree(buffer); + return(NULL); + } } if (len + 10 > max) { xmlChar *tmp; + if ((max > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NmToken"); + xmlFree(buffer); + return(NULL); + } max *= 2; tmp = (xmlChar *) xmlRealloc(buffer, max * sizeof(xmlChar)); @@ -3595,6 +3721,11 @@ xmlParseNmtoken(xmlParserCtxtPtr ctxt) { } if (len == 0) return(NULL); + if ((len > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NmToken"); + return(NULL); + } return(xmlStrndup(buf, len)); } @@ -3641,6 +3772,10 @@ xmlParseEntityValue(xmlParserCtxtPtr ctxt, xmlChar **orig) { ctxt->instate = XML_PARSER_ENTITY_VALUE; input = ctxt->input; GROW; + if (ctxt->instate == XML_PARSER_EOF) { + xmlFree(buf); + return(NULL); + } NEXT; c = CUR_CHAR(l); /* @@ -3648,12 +3783,12 @@ xmlParseEntityValue(xmlParserCtxtPtr ctxt, xmlChar **orig) { * When a parameter entity reference appears in a literal entity * value, ... a single or double quote character in the replacement * text is always treated as a normal data character and will not - * terminate the literal. + * terminate the literal. * In practice it means we stop the loop only when back at parsing * the initial entity and the quote is found */ - while ((IS_CHAR(c)) && ((c != stop) || /* checked */ - (ctxt->input != input))) { + while (((IS_CHAR(c)) && ((c != stop) || /* checked */ + (ctxt->input != input))) && (ctxt->instate != XML_PARSER_EOF)) { if (len + 5 >= size) { xmlChar *tmp; @@ -3682,6 +3817,10 @@ xmlParseEntityValue(xmlParserCtxtPtr ctxt, xmlChar **orig) { } } buf[len] = 0; + if (ctxt->instate == XML_PARSER_EOF) { + xmlFree(buf); + return(NULL); + } /* * Raise problem w.r.t. '&' and '%' being used in non-entities @@ -3729,12 +3868,12 @@ xmlParseEntityValue(xmlParserCtxtPtr ctxt, xmlChar **orig) { */ ret = xmlStringDecodeEntities(ctxt, buf, XML_SUBSTITUTE_PEREF, 0, 0, 0); - if (orig != NULL) + if (orig != NULL) *orig = buf; else xmlFree(buf); } - + return(ret); } @@ -3755,8 +3894,8 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { xmlChar limit = 0; xmlChar *buf = NULL; xmlChar *rep = NULL; - int len = 0; - int buf_size = 0; + size_t len = 0; + size_t buf_size = 0; int c, l, in_space = 0; xmlChar *current = NULL; xmlEntityPtr ent; @@ -3778,15 +3917,26 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { * allocate a translation buffer. */ buf_size = XML_PARSER_BUFFER_SIZE; - buf = (xmlChar *) xmlMallocAtomic(buf_size * sizeof(xmlChar)); + buf = (xmlChar *) xmlMallocAtomic(buf_size); if (buf == NULL) goto mem_error; /* * OK loop until we reach one of the ending char or a size limit. */ c = CUR_CHAR(l); - while ((NXT(0) != limit) && /* checked */ - (IS_CHAR(c)) && (c != '<')) { + while (((NXT(0) != limit) && /* checked */ + (IS_CHAR(c)) && (c != '<')) && + (ctxt->instate != XML_PARSER_EOF)) { + /* + * Impose a reasonable limit on attribute size, unless XML_PARSE_HUGE + * special option is given + */ + if ((len > XML_MAX_TEXT_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED, + "AttValue lenght too long\n"); + goto mem_error; + } if (c == 0) break; if (c == '&') { in_space = 0; @@ -3795,7 +3945,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { if (val == '&') { if (ctxt->replaceEntities) { - if (len > buf_size - 10) { + if (len + 10 > buf_size) { growBuffer(buf, 10); } buf[len++] = '&'; @@ -3804,7 +3954,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { * The reparsing will be done in xmlStringGetNodeList() * called by the attribute() function in SAX.c */ - if (len > buf_size - 10) { + if (len + 10 > buf_size) { growBuffer(buf, 10); } buf[len++] = '&'; @@ -3814,7 +3964,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { buf[len++] = ';'; } } else if (val != 0) { - if (len > buf_size - 10) { + if (len + 10 > buf_size) { growBuffer(buf, 10); } len += xmlCopyChar(0, &buf[len], val); @@ -3826,7 +3976,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { ctxt->nbentities += ent->owner; if ((ent != NULL) && (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) { - if (len > buf_size - 10) { + if (len + 10 > buf_size) { growBuffer(buf, 10); } if ((ctxt->replaceEntities == 0) && @@ -3839,7 +3989,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { } else { buf[len++] = ent->content[0]; } - } else if ((ent != NULL) && + } else if ((ent != NULL) && (ctxt->replaceEntities != 0)) { if (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) { rep = xmlStringDecodeEntities(ctxt, ent->content, @@ -3854,7 +4004,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { current++; } else buf[len++] = *current++; - if (len > buf_size - 10) { + if (len + 10 > buf_size) { growBuffer(buf, 10); } } @@ -3862,7 +4012,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { rep = NULL; } } else { - if (len > buf_size - 10) { + if (len + 10 > buf_size) { growBuffer(buf, 10); } if (ent->content != NULL) @@ -3890,7 +4040,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { * Just output the reference */ buf[len++] = '&'; - while (len > buf_size - i - 10) { + while (len + i + 10 > buf_size) { growBuffer(buf, i + 10); } for (;i > 0;i--) @@ -3903,7 +4053,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { if ((len != 0) || (!normalize)) { if ((!normalize) || (!in_space)) { COPY_BUF(l,buf,len,0x20); - while (len > buf_size - 10) { + while (len + 10 > buf_size) { growBuffer(buf, 10); } } @@ -3912,7 +4062,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { } else { in_space = 0; COPY_BUF(l,buf,len,c); - if (len > buf_size - 10) { + if (len + 10 > buf_size) { growBuffer(buf, 10); } } @@ -3921,6 +4071,9 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { GROW; c = CUR_CHAR(l); } + if (ctxt->instate == XML_PARSER_EOF) + goto error; + if ((in_space) && (normalize)) { while (buf[len - 1] == 0x20) len--; } @@ -3937,11 +4090,23 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) { } } else NEXT; - if (attlen != NULL) *attlen = len; + + /* + * There we potentially risk an overflow, don't allow attribute value of + * lenght more than INT_MAX it is a very reasonnable assumption ! + */ + if (len >= INT_MAX) { + xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED, + "AttValue lenght too long\n"); + goto mem_error; + } + + if (attlen != NULL) *attlen = (int) len; return(buf); mem_error: xmlErrMemory(ctxt, NULL); +error: if (buf != NULL) xmlFree(buf); if (rep != NULL) @@ -3962,20 +4127,20 @@ mem_error: * * 3.3.3 Attribute-Value Normalization: * Before the value of an attribute is passed to the application or - * checked for validity, the XML processor must normalize it as follows: + * checked for validity, the XML processor must normalize it as follows: * - a character reference is processed by appending the referenced * character to the attribute value * - an entity reference is processed by recursively processing the - * replacement text of the entity + * replacement text of the entity * - a whitespace character (#x20, #xD, #xA, #x9) is processed by * appending #x20 to the normalized value, except that only a single * #x20 is appended for a "#xD#xA" sequence that is part of an external - * parsed entity or the literal entity value of an internal parsed entity - * - other characters are processed by appending them to the normalized value + * parsed entity or the literal entity value of an internal parsed entity + * - other characters are processed by appending them to the normalized value * If the declared value is not CDATA, then the XML processor must further * process the normalized attribute value by discarding any leading and * trailing space (#x20) characters, and by replacing sequences of space - * (#x20) characters by a single space (#x20) character. + * (#x20) characters by a single space (#x20) character. * All attributes for which no declaration has been read should be treated * by a non-validating parser as if declared CDATA. * @@ -3992,7 +4157,7 @@ xmlParseAttValue(xmlParserCtxtPtr ctxt) { /** * xmlParseSystemLiteral: * @ctxt: an XML parser context - * + * * parse an XML Literal * * [11] SystemLiteral ::= ('"' [^"]* '"') | ("'" [^']* "'") @@ -4021,7 +4186,7 @@ xmlParseSystemLiteral(xmlParserCtxtPtr ctxt) { xmlFatalErr(ctxt, XML_ERR_LITERAL_NOT_STARTED, NULL); return(NULL); } - + buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar)); if (buf == NULL) { xmlErrMemory(ctxt, NULL); @@ -4033,6 +4198,13 @@ xmlParseSystemLiteral(xmlParserCtxtPtr ctxt) { if (len + 5 >= size) { xmlChar *tmp; + if ((size > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "SystemLiteral"); + xmlFree(buf); + ctxt->instate = (xmlParserInputState) state; + return(NULL); + } size *= 2; tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar)); if (tmp == NULL) { @@ -4047,6 +4219,10 @@ xmlParseSystemLiteral(xmlParserCtxtPtr ctxt) { if (count > 50) { GROW; count = 0; + if (ctxt->instate == XML_PARSER_EOF) { + xmlFree(buf); + return(NULL); + } } COPY_BUF(l,buf,len,cur); NEXTL(l); @@ -4110,6 +4286,12 @@ xmlParsePubidLiteral(xmlParserCtxtPtr ctxt) { if (len + 1 >= size) { xmlChar *tmp; + if ((size > XML_MAX_NAME_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "Public ID"); + xmlFree(buf); + return(NULL); + } size *= 2; tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar)); if (tmp == NULL) { @@ -4124,6 +4306,10 @@ xmlParsePubidLiteral(xmlParserCtxtPtr ctxt) { if (count > 50) { GROW; count = 0; + if (ctxt->instate == XML_PARSER_EOF) { + xmlFree(buf); + return(NULL); + } } NEXT; cur = CUR; @@ -4194,7 +4380,7 @@ static const unsigned char test_char_data[256] = { * The right angle bracket (>) may be represented using the string ">", * and must, for compatibility, be escaped using ">" or a character * reference when it appears in the string "]]>" in content, when that - * string is not marking the end of a CDATA section. + * string is not marking the end of a CDATA section. * * [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*) */ @@ -4330,6 +4516,8 @@ get_more: } SHRINK; GROW; + if (ctxt->instate == XML_PARSER_EOF) + return; in = ctxt->input->cur; } while (((*in >= 0x20) && (*in <= 0x7F)) || (*in == 0x09)); nbchar = 0; @@ -4359,7 +4547,7 @@ xmlParseCharDataComplex(xmlParserCtxtPtr ctxt, int cdata) { GROW; cur = CUR_CHAR(l); while ((cur != '<') && /* checked */ - (cur != '&') && + (cur != '&') && (IS_CHAR(cur))) /* test also done in xmlCurrentChar() */ { if ((cur == ']') && (NXT(1) == ']') && (NXT(2) == '>')) { @@ -4398,6 +4586,8 @@ xmlParseCharDataComplex(xmlParserCtxtPtr ctxt, int cdata) { if (count > 50) { GROW; count = 0; + if (ctxt->instate == XML_PARSER_EOF) + return; } NEXTL(l); cur = CUR_CHAR(l); @@ -4490,7 +4680,7 @@ xmlParseExternalID(xmlParserCtxtPtr ctxt, xmlChar **publicID, int strict) { } } else { /* - * We handle [83] so we return immediately, if + * We handle [83] so we return immediately, if * "S SystemLiteral" is not detected. From a purely parsing * point of view that's a nice mess. */ @@ -4499,7 +4689,7 @@ xmlParseExternalID(xmlParserCtxtPtr ctxt, xmlChar **publicID, int strict) { ptr = CUR_PTR; if (!IS_BLANK_CH(*ptr)) return(NULL); - + while (IS_BLANK_CH(*ptr)) ptr++; /* TODO: dangerous, fix ! */ if ((*ptr != '\'') && (*ptr != '"')) return(NULL); } @@ -4527,11 +4717,12 @@ xmlParseExternalID(xmlParserCtxtPtr ctxt, xmlChar **publicID, int strict) { * [15] Comment ::= '' */ static void -xmlParseCommentComplex(xmlParserCtxtPtr ctxt, xmlChar *buf, int len, int size) { +xmlParseCommentComplex(xmlParserCtxtPtr ctxt, xmlChar *buf, + size_t len, size_t size) { int q, ql; int r, rl; int cur, l; - int count = 0; + size_t count = 0; int inputid; inputid = ctxt->input->id; @@ -4577,16 +4768,26 @@ xmlParseCommentComplex(xmlParserCtxtPtr ctxt, xmlChar *buf, int len, int size) { if ((r == '-') && (q == '-')) { xmlFatalErr(ctxt, XML_ERR_HYPHEN_IN_COMMENT, NULL); } + if ((len > XML_MAX_TEXT_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED, + "Comment too big found", NULL); + xmlFree (buf); + return; + } if (len + 5 >= size) { xmlChar *new_buf; - size *= 2; - new_buf = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar)); + size_t new_size; + + new_size = size * 2; + new_buf = (xmlChar *) xmlRealloc(buf, new_size); if (new_buf == NULL) { xmlFree (buf); xmlErrMemory(ctxt, NULL); return; } buf = new_buf; + size = new_size; } COPY_BUF(ql,buf,len,q); q = r; @@ -4598,6 +4799,10 @@ xmlParseCommentComplex(xmlParserCtxtPtr ctxt, xmlChar *buf, int len, int size) { if (count > 50) { GROW; count = 0; + if (ctxt->instate == XML_PARSER_EOF) { + xmlFree(buf); + return; + } } NEXTL(l); cur = CUR_CHAR(l); @@ -4647,11 +4852,12 @@ not_terminated: void xmlParseComment(xmlParserCtxtPtr ctxt) { xmlChar *buf = NULL; - int size = XML_PARSER_BUFFER_SIZE; - int len = 0; + size_t size = XML_PARSER_BUFFER_SIZE; + size_t len = 0; xmlParserInputState state; const xmlChar *in; - int nbchar = 0, ccol; + size_t nbchar = 0; + int ccol; int inputid; /* @@ -4731,6 +4937,13 @@ get_more: buf[len] = 0; } } + if ((len > XML_MAX_TEXT_LENGTH) && + ((ctxt->options & XML_PARSE_HUGE) == 0)) { + xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED, + "Comment too big found", NULL); + xmlFree (buf); + return; + } ctxt->input->cur = in; if (*in == 0xA) { in++; @@ -4748,6 +4961,10 @@ get_more: } SHRINK; GROW; + if (ctxt->instate == XML_PARSER_EOF) { + xmlFree(buf); + return; + } in = ctxt->input->cur; if (*in == '-') { if (in[1] == '-') { @@ -4769,13 +4986,14 @@ get_more: ctxt->instate = state; return; } - if (buf != NULL) - xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED, - "Comment not terminated \n" }, + { "Huge PI node", "huge:piNode", "" }, +}; + +static const char *current; +static int rlen; +static unsigned int currentTest = 0; +static int instate = 0; + +/** + * hugeMatch: + * @URI: an URI to test + * + * Check for an huge: query + * + * Returns 1 if yes and 0 if another Input module should be used + */ +static int +hugeMatch(const char * URI) { + if ((URI != NULL) && (!strncmp(URI, "huge:", 5))) + return(1); + return(0); +} + +/** + * hugeOpen: + * @URI: an URI to test + * + * Return a pointer to the huge: query handler, in this example simply + * the current pointer... + * + * Returns an Input context or NULL in case or error + */ +static void * +hugeOpen(const char * URI) { + if ((URI == NULL) || (strncmp(URI, "huge:", 5))) + return(NULL); + + for (currentTest = 0;currentTest < sizeof(hugeTests)/sizeof(hugeTests[0]); + currentTest++) + if (!strcmp(hugeTests[currentTest].name, URI)) + goto found; + + return(NULL); + +found: + rlen = strlen(hugeTests[currentTest].start); + current = hugeTests[currentTest].start; + instate = 0; + return((void *) current); +} + +/** + * hugeClose: + * @context: the read context + * + * Close the huge: query handler + * + * Returns 0 or -1 in case of error + */ +static int +hugeClose(void * context) { + if (context == NULL) return(-1); + fprintf(stderr, "\n"); + return(0); +} + +#define CHUNK 4096 + +char filling[CHUNK + 1]; + +static void fillFilling(void) { + int i; + + for (i = 0;i < CHUNK;i++) { + filling[i] = 'a'; + } + filling[CHUNK] = 0; +} + +size_t maxlen = 64 * 1024 * 1024; +size_t curlen = 0; +size_t dotlen; + +/** + * hugeRead: + * @context: the read context + * @buffer: where to store data + * @len: number of bytes to read + * + * Implement an huge: query read. + * + * Returns the number of bytes read or -1 in case of error + */ +static int +hugeRead(void *context, char *buffer, int len) +{ + if ((context == NULL) || (buffer == NULL) || (len < 0)) + return (-1); + + if (instate == 0) { + if (len >= rlen) { + len = rlen; + rlen = 0; + memcpy(buffer, current, len); + instate = 1; + curlen = 0; + dotlen = maxlen / 10; + } else { + memcpy(buffer, current, len); + rlen -= len; + current += len; + } + } else if (instate == 2) { + if (len >= rlen) { + len = rlen; + rlen = 0; + memcpy(buffer, current, len); + instate = 3; + curlen = 0; + } else { + memcpy(buffer, current, len); + rlen -= len; + current += len; + } + } else if (instate == 1) { + if (len > CHUNK) len = CHUNK; + memcpy(buffer, &filling[0], len); + curlen += len; + if (curlen >= maxlen) { + rlen = strlen(hugeTests[currentTest].end); + current = hugeTests[currentTest].end; + instate = 2; + } else { + if (curlen > dotlen) { + fprintf(stderr, "."); + dotlen += maxlen / 10; + } + } + } else + len = 0; + return (len); +} + +/************************************************************************ + * * + * Crazy document generator * + * * + ************************************************************************/ + +unsigned int crazy_indx = 0; + +const char *crazy = "\ +\ +\ +\ +\ +\ +\ +]>\ +\ +\ +\ +\ +\ +foo\ +\ +\ +\ +"; + +/** + * crazyMatch: + * @URI: an URI to test + * + * Check for a crazy: query + * + * Returns 1 if yes and 0 if another Input module should be used + */ +static int +crazyMatch(const char * URI) { + if ((URI != NULL) && (!strncmp(URI, "crazy:", 6))) + return(1); + return(0); +} + +/** + * crazyOpen: + * @URI: an URI to test + * + * Return a pointer to the crazy: query handler, in this example simply + * the current pointer... + * + * Returns an Input context or NULL in case or error + */ +static void * +crazyOpen(const char * URI) { + if ((URI == NULL) || (strncmp(URI, "crazy:", 6))) + return(NULL); + + if (crazy_indx > strlen(crazy)) + return(NULL); + reset_timout(); + rlen = crazy_indx; + current = &crazy[0]; + instate = 0; + return((void *) current); +} + +/** + * crazyClose: + * @context: the read context + * + * Close the crazy: query handler + * + * Returns 0 or -1 in case of error + */ +static int +crazyClose(void * context) { + if (context == NULL) return(-1); + return(0); +} + + +/** + * crazyRead: + * @context: the read context + * @buffer: where to store data + * @len: number of bytes to read + * + * Implement an crazy: query read. + * + * Returns the number of bytes read or -1 in case of error + */ +static int +crazyRead(void *context, char *buffer, int len) +{ + if ((context == NULL) || (buffer == NULL) || (len < 0)) + return (-1); + + if ((check_time() <= 0) && (instate == 1)) { + fprintf(stderr, "\ntimeout in crazy(%d)\n", crazy_indx); + rlen = strlen(crazy) - crazy_indx; + current = &crazy[crazy_indx]; + instate = 2; + } + if (instate == 0) { + if (len >= rlen) { + len = rlen; + rlen = 0; + memcpy(buffer, current, len); + instate = 1; + curlen = 0; + } else { + memcpy(buffer, current, len); + rlen -= len; + current += len; + } + } else if (instate == 2) { + if (len >= rlen) { + len = rlen; + rlen = 0; + memcpy(buffer, current, len); + instate = 3; + curlen = 0; + } else { + memcpy(buffer, current, len); + rlen -= len; + current += len; + } + } else if (instate == 1) { + if (len > CHUNK) len = CHUNK; + memcpy(buffer, &filling[0], len); + curlen += len; + if (curlen >= maxlen) { + rlen = strlen(crazy) - crazy_indx; + current = &crazy[crazy_indx]; + instate = 2; + } + } else + len = 0; + return (len); +} +/************************************************************************ + * * + * Libxml2 specific routines * + * * + ************************************************************************/ + +static int nb_tests = 0; +static int nb_errors = 0; +static int nb_leaks = 0; +static int extraMemoryFromResolver = 0; + +/* + * We need to trap calls to the resolver to not account memory for the catalog + * which is shared to the current running test. We also don't want to have + * network downloads modifying tests. + */ +static xmlParserInputPtr +testExternalEntityLoader(const char *URL, const char *ID, + xmlParserCtxtPtr ctxt) { + xmlParserInputPtr ret; + int memused = xmlMemUsed(); + + ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt); + extraMemoryFromResolver += xmlMemUsed() - memused; + + return(ret); +} + +/* + * Trapping the error messages at the generic level to grab the equivalent of + * stderr messages on CLI tools. + */ +static char testErrors[32769]; +static int testErrorsSize = 0; + +static void XMLCDECL +channel(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) { + va_list args; + int res; + + if (testErrorsSize >= 32768) + return; + va_start(args, msg); + res = vsnprintf(&testErrors[testErrorsSize], + 32768 - testErrorsSize, + msg, args); + va_end(args); + if (testErrorsSize + res >= 32768) { + /* buffer is full */ + testErrorsSize = 32768; + testErrors[testErrorsSize] = 0; + } else { + testErrorsSize += res; + } + testErrors[testErrorsSize] = 0; +} + +/** + * xmlParserPrintFileContext: + * @input: an xmlParserInputPtr input + * + * Displays current context within the input content for error tracking + */ + +static void +xmlParserPrintFileContextInternal(xmlParserInputPtr input , + xmlGenericErrorFunc chanl, void *data ) { + const xmlChar *cur, *base; + unsigned int n, col; /* GCC warns if signed, because compared with sizeof() */ + xmlChar content[81]; /* space for 80 chars + line terminator */ + xmlChar *ctnt; + + if (input == NULL) return; + cur = input->cur; + base = input->base; + /* skip backwards over any end-of-lines */ + while ((cur > base) && ((*(cur) == '\n') || (*(cur) == '\r'))) { + cur--; + } + n = 0; + /* search backwards for beginning-of-line (to max buff size) */ + while ((n++ < (sizeof(content)-1)) && (cur > base) && + (*(cur) != '\n') && (*(cur) != '\r')) + cur--; + if ((*(cur) == '\n') || (*(cur) == '\r')) cur++; + /* calculate the error position in terms of the current position */ + col = input->cur - cur; + /* search forward for end-of-line (to max buff size) */ + n = 0; + ctnt = content; + /* copy selected text to our buffer */ + while ((*cur != 0) && (*(cur) != '\n') && + (*(cur) != '\r') && (n < sizeof(content)-1)) { + *ctnt++ = *cur++; + n++; + } + *ctnt = 0; + /* print out the selected text */ + chanl(data ,"%s\n", content); + /* create blank line with problem pointer */ + n = 0; + ctnt = content; + /* (leave buffer space for pointer + line terminator) */ + while ((nfile; + line = err->line; + code = err->code; + domain = err->domain; + level = err->level; + node = err->node; + if ((domain == XML_FROM_PARSER) || (domain == XML_FROM_HTML) || + (domain == XML_FROM_DTD) || (domain == XML_FROM_NAMESPACE) || + (domain == XML_FROM_IO) || (domain == XML_FROM_VALID)) { + ctxt = err->ctxt; + } + str = err->message; + + if (code == XML_ERR_OK) + return; + + if ((node != NULL) && (node->type == XML_ELEMENT_NODE)) + name = node->name; + + /* + * Maintain the compatibility with the legacy error handling + */ + if (ctxt != NULL) { + input = ctxt->input; + if ((input != NULL) && (input->filename == NULL) && + (ctxt->inputNr > 1)) { + cur = input; + input = ctxt->inputTab[ctxt->inputNr - 2]; + } + if (input != NULL) { + if (input->filename) + channel(data, "%s:%d: ", input->filename, input->line); + else if ((line != 0) && (domain == XML_FROM_PARSER)) + channel(data, "Entity: line %d: ", input->line); + } + } else { + if (file != NULL) + channel(data, "%s:%d: ", file, line); + else if ((line != 0) && (domain == XML_FROM_PARSER)) + channel(data, "Entity: line %d: ", line); + } + if (name != NULL) { + channel(data, "element %s: ", name); + } + if (code == XML_ERR_OK) + return; + switch (domain) { + case XML_FROM_PARSER: + channel(data, "parser "); + break; + case XML_FROM_NAMESPACE: + channel(data, "namespace "); + break; + case XML_FROM_DTD: + case XML_FROM_VALID: + channel(data, "validity "); + break; + case XML_FROM_HTML: + channel(data, "HTML parser "); + break; + case XML_FROM_MEMORY: + channel(data, "memory "); + break; + case XML_FROM_OUTPUT: + channel(data, "output "); + break; + case XML_FROM_IO: + channel(data, "I/O "); + break; + case XML_FROM_XINCLUDE: + channel(data, "XInclude "); + break; + case XML_FROM_XPATH: + channel(data, "XPath "); + break; + case XML_FROM_XPOINTER: + channel(data, "parser "); + break; + case XML_FROM_REGEXP: + channel(data, "regexp "); + break; + case XML_FROM_MODULE: + channel(data, "module "); + break; + case XML_FROM_SCHEMASV: + channel(data, "Schemas validity "); + break; + case XML_FROM_SCHEMASP: + channel(data, "Schemas parser "); + break; + case XML_FROM_RELAXNGP: + channel(data, "Relax-NG parser "); + break; + case XML_FROM_RELAXNGV: + channel(data, "Relax-NG validity "); + break; + case XML_FROM_CATALOG: + channel(data, "Catalog "); + break; + case XML_FROM_C14N: + channel(data, "C14N "); + break; + case XML_FROM_XSLT: + channel(data, "XSLT "); + break; + default: + break; + } + if (code == XML_ERR_OK) + return; + switch (level) { + case XML_ERR_NONE: + channel(data, ": "); + break; + case XML_ERR_WARNING: + channel(data, "warning : "); + break; + case XML_ERR_ERROR: + channel(data, "error : "); + break; + case XML_ERR_FATAL: + channel(data, "error : "); + break; + } + if (code == XML_ERR_OK) + return; + if (str != NULL) { + int len; + len = xmlStrlen((const xmlChar *)str); + if ((len > 0) && (str[len - 1] != '\n')) + channel(data, "%s\n", str); + else + channel(data, "%s", str); + } else { + channel(data, "%s\n", "out of memory error"); + } + if (code == XML_ERR_OK) + return; + + if (ctxt != NULL) { + xmlParserPrintFileContextInternal(input, channel, data); + if (cur != NULL) { + if (cur->filename) + channel(data, "%s:%d: \n", cur->filename, cur->line); + else if ((line != 0) && (domain == XML_FROM_PARSER)) + channel(data, "Entity: line %d: \n", cur->line); + xmlParserPrintFileContextInternal(cur, channel, data); + } + } + if ((domain == XML_FROM_XPATH) && (err->str1 != NULL) && + (err->int1 < 100) && + (err->int1 < xmlStrlen((const xmlChar *)err->str1))) { + xmlChar buf[150]; + int i; + + channel(data, "%s\n", err->str1); + for (i=0;i < err->int1;i++) + buf[i] = ' '; + buf[i++] = '^'; + buf[i] = 0; + channel(data, "%s\n", buf); + } +} + +static void +initializeLibxml2(void) { + xmlGetWarningsDefaultValue = 0; + xmlPedanticParserDefault(0); + + xmlMemSetup(xmlMemFree, xmlMemMalloc, xmlMemRealloc, xmlMemoryStrdup); + xmlInitParser(); + xmlSetExternalEntityLoader(testExternalEntityLoader); + xmlSetStructuredErrorFunc(NULL, testStructuredErrorHandler); + /* + * register the new I/O handlers + */ + if (xmlRegisterInputCallbacks(hugeMatch, hugeOpen, + hugeRead, hugeClose) < 0) { + fprintf(stderr, "failed to register Huge handlers\n"); + exit(1); + } + if (xmlRegisterInputCallbacks(crazyMatch, crazyOpen, + crazyRead, crazyClose) < 0) { + fprintf(stderr, "failed to register Crazy handlers\n"); + exit(1); + } +} + +/************************************************************************ + * * + * SAX empty callbacks * + * * + ************************************************************************/ + +unsigned long callbacks = 0; + +/** + * isStandaloneCallback: + * @ctxt: An XML parser context + * + * Is this document tagged standalone ? + * + * Returns 1 if true + */ +static int +isStandaloneCallback(void *ctx ATTRIBUTE_UNUSED) +{ + callbacks++; + return (0); +} + +/** + * hasInternalSubsetCallback: + * @ctxt: An XML parser context + * + * Does this document has an internal subset + * + * Returns 1 if true + */ +static int +hasInternalSubsetCallback(void *ctx ATTRIBUTE_UNUSED) +{ + callbacks++; + return (0); +} + +/** + * hasExternalSubsetCallback: + * @ctxt: An XML parser context + * + * Does this document has an external subset + * + * Returns 1 if true + */ +static int +hasExternalSubsetCallback(void *ctx ATTRIBUTE_UNUSED) +{ + callbacks++; + return (0); +} + +/** + * internalSubsetCallback: + * @ctxt: An XML parser context + * + * Does this document has an internal subset + */ +static void +internalSubsetCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED, + const xmlChar * ExternalID ATTRIBUTE_UNUSED, + const xmlChar * SystemID ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * externalSubsetCallback: + * @ctxt: An XML parser context + * + * Does this document has an external subset + */ +static void +externalSubsetCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED, + const xmlChar * ExternalID ATTRIBUTE_UNUSED, + const xmlChar * SystemID ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * resolveEntityCallback: + * @ctxt: An XML parser context + * @publicId: The public ID of the entity + * @systemId: The system ID of the entity + * + * Special entity resolver, better left to the parser, it has + * more context than the application layer. + * The default behaviour is to NOT resolve the entities, in that case + * the ENTITY_REF nodes are built in the structure (and the parameter + * values). + * + * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour. + */ +static xmlParserInputPtr +resolveEntityCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * publicId ATTRIBUTE_UNUSED, + const xmlChar * systemId ATTRIBUTE_UNUSED) +{ + callbacks++; + return (NULL); +} + +/** + * getEntityCallback: + * @ctxt: An XML parser context + * @name: The entity name + * + * Get an entity by name + * + * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour. + */ +static xmlEntityPtr +getEntityCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED) +{ + callbacks++; + return (NULL); +} + +/** + * getParameterEntityCallback: + * @ctxt: An XML parser context + * @name: The entity name + * + * Get a parameter entity by name + * + * Returns the xmlParserInputPtr + */ +static xmlEntityPtr +getParameterEntityCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED) +{ + callbacks++; + return (NULL); +} + + +/** + * entityDeclCallback: + * @ctxt: An XML parser context + * @name: the entity name + * @type: the entity type + * @publicId: The public ID of the entity + * @systemId: The system ID of the entity + * @content: the entity value (without processing). + * + * An entity definition has been parsed + */ +static void +entityDeclCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED, + int type ATTRIBUTE_UNUSED, + const xmlChar * publicId ATTRIBUTE_UNUSED, + const xmlChar * systemId ATTRIBUTE_UNUSED, + xmlChar * content ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * attributeDeclCallback: + * @ctxt: An XML parser context + * @name: the attribute name + * @type: the attribute type + * + * An attribute definition has been parsed + */ +static void +attributeDeclCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * elem ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED, + int type ATTRIBUTE_UNUSED, int def ATTRIBUTE_UNUSED, + const xmlChar * defaultValue ATTRIBUTE_UNUSED, + xmlEnumerationPtr tree ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * elementDeclCallback: + * @ctxt: An XML parser context + * @name: the element name + * @type: the element type + * @content: the element value (without processing). + * + * An element definition has been parsed + */ +static void +elementDeclCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED, + int type ATTRIBUTE_UNUSED, + xmlElementContentPtr content ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * notationDeclCallback: + * @ctxt: An XML parser context + * @name: The name of the notation + * @publicId: The public ID of the entity + * @systemId: The system ID of the entity + * + * What to do when a notation declaration has been parsed. + */ +static void +notationDeclCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED, + const xmlChar * publicId ATTRIBUTE_UNUSED, + const xmlChar * systemId ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * unparsedEntityDeclCallback: + * @ctxt: An XML parser context + * @name: The name of the entity + * @publicId: The public ID of the entity + * @systemId: The system ID of the entity + * @notationName: the name of the notation + * + * What to do when an unparsed entity declaration is parsed + */ +static void +unparsedEntityDeclCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED, + const xmlChar * publicId ATTRIBUTE_UNUSED, + const xmlChar * systemId ATTRIBUTE_UNUSED, + const xmlChar * notationName ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * setDocumentLocatorCallback: + * @ctxt: An XML parser context + * @loc: A SAX Locator + * + * Receive the document locator at startup, actually xmlDefaultSAXLocator + * Everything is available on the context, so this is useless in our case. + */ +static void +setDocumentLocatorCallback(void *ctx ATTRIBUTE_UNUSED, + xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * startDocumentCallback: + * @ctxt: An XML parser context + * + * called when the document start being processed. + */ +static void +startDocumentCallback(void *ctx ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * endDocumentCallback: + * @ctxt: An XML parser context + * + * called when the document end has been detected. + */ +static void +endDocumentCallback(void *ctx ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +#if 0 +/** + * startElementCallback: + * @ctxt: An XML parser context + * @name: The element name + * + * called when an opening tag has been processed. + */ +static void +startElementCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED, + const xmlChar ** atts ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * endElementCallback: + * @ctxt: An XML parser context + * @name: The element name + * + * called when the end of an element has been detected. + */ +static void +endElementCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} +#endif + +/** + * charactersCallback: + * @ctxt: An XML parser context + * @ch: a xmlChar string + * @len: the number of xmlChar + * + * receiving some chars from the parser. + * Question: how much at a time ??? + */ +static void +charactersCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * ch ATTRIBUTE_UNUSED, + int len ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * referenceCallback: + * @ctxt: An XML parser context + * @name: The entity name + * + * called when an entity reference is detected. + */ +static void +referenceCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * name ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * ignorableWhitespaceCallback: + * @ctxt: An XML parser context + * @ch: a xmlChar string + * @start: the first char in the string + * @len: the number of xmlChar + * + * receiving some ignorable whitespaces from the parser. + * Question: how much at a time ??? + */ +static void +ignorableWhitespaceCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * ch ATTRIBUTE_UNUSED, + int len ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * processingInstructionCallback: + * @ctxt: An XML parser context + * @target: the target name + * @data: the PI data's + * @len: the number of xmlChar + * + * A processing instruction has been parsed. + */ +static void +processingInstructionCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * target ATTRIBUTE_UNUSED, + const xmlChar * data ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * cdataBlockCallback: + * @ctx: the user data (XML parser context) + * @value: The pcdata content + * @len: the block length + * + * called when a pcdata block has been parsed + */ +static void +cdataBlockCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * value ATTRIBUTE_UNUSED, + int len ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * commentCallback: + * @ctxt: An XML parser context + * @value: the comment content + * + * A comment has been parsed. + */ +static void +commentCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * value ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * warningCallback: + * @ctxt: An XML parser context + * @msg: the message to display/transmit + * @...: extra parameters for the message display + * + * Display and format a warning messages, gives file, line, position and + * extra parameters. + */ +static void XMLCDECL +warningCallback(void *ctx ATTRIBUTE_UNUSED, + const char *msg ATTRIBUTE_UNUSED, ...) +{ + callbacks++; + return; +} + +/** + * errorCallback: + * @ctxt: An XML parser context + * @msg: the message to display/transmit + * @...: extra parameters for the message display + * + * Display and format a error messages, gives file, line, position and + * extra parameters. + */ +static void XMLCDECL +errorCallback(void *ctx ATTRIBUTE_UNUSED, const char *msg ATTRIBUTE_UNUSED, + ...) +{ + callbacks++; + return; +} + +/** + * fatalErrorCallback: + * @ctxt: An XML parser context + * @msg: the message to display/transmit + * @...: extra parameters for the message display + * + * Display and format a fatalError messages, gives file, line, position and + * extra parameters. + */ +static void XMLCDECL +fatalErrorCallback(void *ctx ATTRIBUTE_UNUSED, + const char *msg ATTRIBUTE_UNUSED, ...) +{ + return; +} + + +/* + * SAX2 specific callbacks + */ + +/** + * startElementNsCallback: + * @ctxt: An XML parser context + * @name: The element name + * + * called when an opening tag has been processed. + */ +static void +startElementNsCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * localname ATTRIBUTE_UNUSED, + const xmlChar * prefix ATTRIBUTE_UNUSED, + const xmlChar * URI ATTRIBUTE_UNUSED, + int nb_namespaces ATTRIBUTE_UNUSED, + const xmlChar ** namespaces ATTRIBUTE_UNUSED, + int nb_attributes ATTRIBUTE_UNUSED, + int nb_defaulted ATTRIBUTE_UNUSED, + const xmlChar ** attributes ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +/** + * endElementCallback: + * @ctxt: An XML parser context + * @name: The element name + * + * called when the end of an element has been detected. + */ +static void +endElementNsCallback(void *ctx ATTRIBUTE_UNUSED, + const xmlChar * localname ATTRIBUTE_UNUSED, + const xmlChar * prefix ATTRIBUTE_UNUSED, + const xmlChar * URI ATTRIBUTE_UNUSED) +{ + callbacks++; + return; +} + +static xmlSAXHandler callbackSAX2HandlerStruct = { + internalSubsetCallback, + isStandaloneCallback, + hasInternalSubsetCallback, + hasExternalSubsetCallback, + resolveEntityCallback, + getEntityCallback, + entityDeclCallback, + notationDeclCallback, + attributeDeclCallback, + elementDeclCallback, + unparsedEntityDeclCallback, + setDocumentLocatorCallback, + startDocumentCallback, + endDocumentCallback, + NULL, + NULL, + referenceCallback, + charactersCallback, + ignorableWhitespaceCallback, + processingInstructionCallback, + commentCallback, + warningCallback, + errorCallback, + fatalErrorCallback, + getParameterEntityCallback, + cdataBlockCallback, + externalSubsetCallback, + XML_SAX2_MAGIC, + NULL, + startElementNsCallback, + endElementNsCallback, + NULL +}; + +static xmlSAXHandlerPtr callbackSAX2Handler = &callbackSAX2HandlerStruct; + +/************************************************************************ + * * + * The tests front-ends * + * * + ************************************************************************/ + +/** + * readerTest: + * @filename: the file to parse + * @max_size: size of the limit to test + * @options: parsing options + * @fail: should a failure be reported + * + * Parse a memory generated file using SAX + * + * Returns 0 in case of success, an error code otherwise + */ +static int +saxTest(const char *filename, size_t limit, int options, int fail) { + int res = 0; + xmlParserCtxtPtr ctxt; + xmlDocPtr doc; + xmlSAXHandlerPtr old_sax; + + nb_tests++; + + maxlen = limit; + ctxt = xmlNewParserCtxt(); + if (ctxt == NULL) { + fprintf(stderr, "Failed to create parser context\n"); + return(1); + } + old_sax = ctxt->sax; + ctxt->sax = callbackSAX2Handler; + ctxt->userData = NULL; + doc = xmlCtxtReadFile(ctxt, filename, NULL, options); + + if (doc != NULL) { + fprintf(stderr, "SAX parsing generated a document !\n"); + xmlFreeDoc(doc); + res = 0; + } else if (ctxt->wellFormed == 0) { + if (fail) + res = 0; + else { + fprintf(stderr, "Failed to parse '%s' %lu\n", filename, limit); + res = 1; + } + } else { + if (fail) { + fprintf(stderr, "Failed to get failure for '%s' %lu\n", + filename, limit); + res = 1; + } else + res = 0; + } + ctxt->sax = old_sax; + xmlFreeParserCtxt(ctxt); + + return(res); +} +#ifdef LIBXML_READER_ENABLED +/** + * readerTest: + * @filename: the file to parse + * @max_size: size of the limit to test + * @options: parsing options + * @fail: should a failure be reported + * + * Parse a memory generated file using the xmlReader + * + * Returns 0 in case of success, an error code otherwise + */ +static int +readerTest(const char *filename, size_t limit, int options, int fail) { + xmlTextReaderPtr reader; + int res = 0; + int ret; + + nb_tests++; + + maxlen = limit; + reader = xmlReaderForFile(filename , NULL, options); + if (reader == NULL) { + fprintf(stderr, "Failed to open '%s' test\n", filename); + return(1); + } + ret = xmlTextReaderRead(reader); + while (ret == 1) { + ret = xmlTextReaderRead(reader); + } + if (ret != 0) { + if (fail) + res = 0; + else { + if (strncmp(filename, "crazy:", 6) == 0) + fprintf(stderr, "Failed to parse '%s' %u\n", + filename, crazy_indx); + else + fprintf(stderr, "Failed to parse '%s' %lu\n", + filename, limit); + res = 1; + } + } else { + if (fail) { + if (strncmp(filename, "crazy:", 6) == 0) + fprintf(stderr, "Failed to get failure for '%s' %u\n", + filename, crazy_indx); + else + fprintf(stderr, "Failed to get failure for '%s' %lu\n", + filename, limit); + res = 1; + } else + res = 0; + } + if (timeout) + res = 1; + xmlFreeTextReader(reader); + + return(res); +} +#endif + +/************************************************************************ + * * + * Tests descriptions * + * * + ************************************************************************/ + +typedef int (*functest) (const char *filename, size_t limit, int options, + int fail); + +typedef struct limitDesc limitDesc; +typedef limitDesc *limitDescPtr; +struct limitDesc { + const char *name; /* the huge generator name */ + size_t limit; /* the limit to test */ + int options; /* extra parser options */ + int fail; /* whether the test should fail */ +}; + +static limitDesc limitDescriptions[] = { + /* max lenght of a text node in content */ + {"huge:textNode", XML_MAX_TEXT_LENGTH - CHUNK, 0, 0}, + {"huge:textNode", XML_MAX_TEXT_LENGTH + CHUNK, 0, 1}, + {"huge:textNode", XML_MAX_TEXT_LENGTH + CHUNK, XML_PARSE_HUGE, 0}, + /* max lenght of a text node in content */ + {"huge:attrNode", XML_MAX_TEXT_LENGTH - CHUNK, 0, 0}, + {"huge:attrNode", XML_MAX_TEXT_LENGTH + CHUNK, 0, 1}, + {"huge:attrNode", XML_MAX_TEXT_LENGTH + CHUNK, XML_PARSE_HUGE, 0}, + /* max lenght of a comment node */ + {"huge:commentNode", XML_MAX_TEXT_LENGTH - CHUNK, 0, 0}, + {"huge:commentNode", XML_MAX_TEXT_LENGTH + CHUNK, 0, 1}, + {"huge:commentNode", XML_MAX_TEXT_LENGTH + CHUNK, XML_PARSE_HUGE, 0}, + /* max lenght of a PI node */ + {"huge:piNode", XML_MAX_TEXT_LENGTH - CHUNK, 0, 0}, + {"huge:piNode", XML_MAX_TEXT_LENGTH + CHUNK, 0, 1}, + {"huge:piNode", XML_MAX_TEXT_LENGTH + CHUNK, XML_PARSE_HUGE, 0}, +}; + +typedef struct testDesc testDesc; +typedef testDesc *testDescPtr; +struct testDesc { + const char *desc; /* descripton of the test */ + functest func; /* function implementing the test */ +}; + +static +testDesc testDescriptions[] = { + { "Parsing of huge files with the sax parser", saxTest}, +/* { "Parsing of huge files with the tree parser", treeTest}, */ +#ifdef LIBXML_READER_ENABLED + { "Parsing of huge files with the reader", readerTest}, +#endif + {NULL, NULL} +}; + +typedef struct testException testException; +typedef testException *testExceptionPtr; +struct testException { + unsigned int test; /* the parser test number */ + unsigned int limit; /* the limit test number */ + int fail; /* new fail value or -1*/ + size_t size; /* new limit value or 0 */ +}; + +static +testException testExceptions[] = { + /* the SAX parser doesn't hit a limit of XML_MAX_TEXT_LENGTH text nodes */ + { 0, 1, 0, 0}, +}; + +static int +launchTests(testDescPtr tst, unsigned int test) { + int res = 0, err = 0; + unsigned int i, j; + size_t limit; + int fail; + + if (tst == NULL) return(-1); + + for (i = 0;i < sizeof(limitDescriptions)/sizeof(limitDescriptions[0]);i++) { + limit = limitDescriptions[i].limit; + fail = limitDescriptions[i].fail; + /* + * Handle exceptions if any + */ + for (j = 0;j < sizeof(testExceptions)/sizeof(testExceptions[0]);j++) { + if ((testExceptions[j].test == test) && + (testExceptions[j].limit == i)) { + if (testExceptions[j].fail != -1) + fail = testExceptions[j].fail; + if (testExceptions[j].size != 0) + limit = testExceptions[j].size; + break; + } + } + res = tst->func(limitDescriptions[i].name, limit, + limitDescriptions[i].options, fail); + if (res != 0) { + nb_errors++; + err++; + } + } + return(err); +} + + +static int +runtest(unsigned int i) { + int ret = 0, res; + int old_errors, old_tests, old_leaks; + + old_errors = nb_errors; + old_tests = nb_tests; + old_leaks = nb_leaks; + if ((tests_quiet == 0) && (testDescriptions[i].desc != NULL)) + printf("## %s\n", testDescriptions[i].desc); + res = launchTests(&testDescriptions[i], i); + if (res != 0) + ret++; + if (verbose) { + if ((nb_errors == old_errors) && (nb_leaks == old_leaks)) + printf("Ran %d tests, no errors\n", nb_tests - old_tests); + else + printf("Ran %d tests, %d errors, %d leaks\n", + nb_tests - old_tests, + nb_errors - old_errors, + nb_leaks - old_leaks); + } + return(ret); +} + +static int +launchCrazySAX(unsigned int test, int fail) { + int res = 0, err = 0; + + crazy_indx = test; + + res = saxTest("crazy::test", XML_MAX_LOOKUP_LIMIT - CHUNK, 0, fail); + if (res != 0) { + nb_errors++; + err++; + } + if (tests_quiet == 0) + fprintf(stderr, "%c", crazy[test]); + + return(err); +} + +static int +launchCrazy(unsigned int test, int fail) { + int res = 0, err = 0; + + crazy_indx = test; + + res = readerTest("crazy::test", XML_MAX_LOOKUP_LIMIT - CHUNK, 0, fail); + if (res != 0) { + nb_errors++; + err++; + } + if (tests_quiet == 0) + fprintf(stderr, "%c", crazy[test]); + + return(err); +} + +static int get_crazy_fail(int test) { + /* + * adding 1000000 of character 'a' leads to parser failure mostly + * everywhere except in those special spots. Need to be updated + * each time crazy is updated + */ + int fail = 1; + if ((test == 44) || /* PI in Misc */ + ((test >= 50) && (test <= 55)) || /* Comment in Misc */ + (test == 79) || /* PI in DTD */ + ((test >= 85) && (test <= 90)) || /* Comment in DTD */ + (test == 154) || /* PI in Misc */ + ((test >= 160) && (test <= 165)) || /* Comment in Misc */ + ((test >= 178) && (test <= 181)) || /* attribute value */ + (test == 183) || /* Text */ + (test == 189) || /* PI in Content */ + (test == 191) || /* Text */ + ((test >= 195) && (test <= 200)) || /* Comment in Content */ + ((test >= 203) && (test <= 206)) || /* Text */ + (test == 215) || (test == 216) || /* in CDATA */ + (test == 219) || /* Text */ + (test == 231) || /* PI in Misc */ + ((test >= 237) && (test <= 242))) /* Comment in Misc */ + fail = 0; + return(fail); +} + +static int +runcrazy(void) { + int ret = 0, res = 0; + int old_errors, old_tests, old_leaks; + unsigned int i; + + old_errors = nb_errors; + old_tests = nb_tests; + old_leaks = nb_leaks; + if (tests_quiet == 0) { + printf("## Crazy tests on reader\n"); + } + for (i = 0;i < strlen(crazy);i++) { + res += launchCrazy(i, get_crazy_fail(i)); + if (res != 0) + ret++; + } + if (tests_quiet == 0) { + printf("\n## Crazy tests on SAX\n"); + } + for (i = 0;i < strlen(crazy);i++) { + res += launchCrazySAX(i, get_crazy_fail(i)); + if (res != 0) + ret++; + } + if (tests_quiet == 0) + fprintf(stderr, "\n"); + if (verbose) { + if ((nb_errors == old_errors) && (nb_leaks == old_leaks)) + printf("Ran %d tests, no errors\n", nb_tests - old_tests); + else + printf("Ran %d tests, %d errors, %d leaks\n", + nb_tests - old_tests, + nb_errors - old_errors, + nb_leaks - old_leaks); + } + return(ret); +} + + +int +main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) { + int i, a, ret = 0; + int subset = 0; + + fillFilling(); + initializeLibxml2(); + + for (a = 1; a < argc;a++) { + if (!strcmp(argv[a], "-v")) + verbose = 1; + else if (!strcmp(argv[a], "-quiet")) + tests_quiet = 1; + else if (!strcmp(argv[a], "-crazy")) + subset = 1; + } + if (subset == 0) { + for (i = 0; testDescriptions[i].func != NULL; i++) { + ret += runtest(i); + } + } + ret += runcrazy(); + if ((nb_errors == 0) && (nb_leaks == 0)) { + ret = 0; + printf("Total %d tests, no errors\n", + nb_tests); + } else { + ret = 1; + printf("Total %d tests, %d errors, %d leaks\n", + nb_tests, nb_errors, nb_leaks); + } + xmlCleanupParser(); + xmlMemoryDump(); + + return(ret); +} diff --git a/lib/3rdparty/libxml2/testrecurse.c b/lib/3rdparty/libxml2/testrecurse.c index 35150481e47..e5d5d1b307a 100644 --- a/lib/3rdparty/libxml2/testrecurse.c +++ b/lib/3rdparty/libxml2/testrecurse.c @@ -10,11 +10,8 @@ * daniel@veillard.com */ -#ifdef HAVE_CONFIG_H #include "libxml.h" -#else #include -#endif #if !defined(_WIN32) || defined(__CYGWIN__) #include @@ -148,8 +145,7 @@ static void globfree(glob_t *pglob) { free(pglob->gl_pathv[i]); } } -#define vsnprintf _vsnprintf -#define snprintf _snprintf + #else #include #endif @@ -684,12 +680,10 @@ recursiveDetectTest(const char *filename, xmlDocPtr doc; xmlParserCtxtPtr ctxt; int res = 0; - int mem; nb_tests++; ctxt = xmlNewParserCtxt(); - mem = xmlMemUsed(); /* * base of the test, parse with the old API */ @@ -725,12 +719,10 @@ notRecursiveDetectTest(const char *filename, xmlDocPtr doc; xmlParserCtxtPtr ctxt; int res = 0; - int mem; nb_tests++; ctxt = xmlNewParserCtxt(); - mem = xmlMemUsed(); /* * base of the test, parse with the old API */ diff --git a/lib/3rdparty/libxml2/threads.c b/lib/3rdparty/libxml2/threads.c index 4c5c58649a5..52d6671f491 100644 --- a/lib/3rdparty/libxml2/threads.c +++ b/lib/3rdparty/libxml2/threads.c @@ -439,7 +439,7 @@ __xmlGlobalInitMutexLock(void) /* Make sure the global init lock is initialized and then lock it. */ #ifdef HAVE_PTHREAD_H /* The mutex is statically initialized, so we just lock it. */ - if (pthread_mutex_lock) + if (pthread_mutex_lock != NULL) pthread_mutex_lock(&global_init_lock); #elif defined HAVE_WIN32_THREADS LPCRITICAL_SECTION cs; @@ -509,7 +509,7 @@ void __xmlGlobalInitMutexUnlock(void) { #ifdef HAVE_PTHREAD_H - if (pthread_mutex_unlock) + if (pthread_mutex_unlock != NULL) pthread_mutex_unlock(&global_init_lock); #elif defined HAVE_WIN32_THREADS if (global_init_lock != NULL) { @@ -915,6 +915,7 @@ xmlCleanupThreads(void) #ifdef HAVE_PTHREAD_H if ((libxml_is_threaded) && (pthread_key_delete != NULL)) pthread_key_delete(globalkey); + once_control = PTHREAD_ONCE_INIT; #elif defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && (!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL)) if (globalkey != TLS_OUT_OF_INDEXES) { xmlGlobalStateCleanupHelperParams *p; diff --git a/lib/3rdparty/libxml2/timsort.h b/lib/3rdparty/libxml2/timsort.h new file mode 100644 index 00000000000..54439881c25 --- /dev/null +++ b/lib/3rdparty/libxml2/timsort.h @@ -0,0 +1,506 @@ +/* + * taken from https://github.com/swenson/sort + * Kept as is for the moment to be able to apply upstream patches for that + * code, currently used only to speed up XPath node sorting, see xpath.c + */ + +/* + * All code in this header, unless otherwise specified, is hereby licensed under the MIT Public License: + +Copyright (c) 2010 Christopher Swenson + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#include +#include +#include +#ifdef HAVE_STDINT_H +#include +#else +#ifdef HAVE_INTTYPES_H +#include +#elif defined(WIN32) +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +#endif +#endif + +#ifndef MAX +#define MAX(x,y) (((x) > (y) ? (x) : (y))) +#endif +#ifndef MIN +#define MIN(x,y) (((x) < (y) ? (x) : (y))) +#endif + +int compute_minrun(const uint64_t); + +#ifndef CLZ +#ifdef __GNUC__ +#define CLZ __builtin_clzll +#else + +int clzll(uint64_t); + +/* adapted from Hacker's Delight */ +int clzll(uint64_t x) /* {{{ */ +{ + int n; + + if (x == 0) return(64); + n = 0; + if (x <= 0x00000000FFFFFFFFL) {n = n + 32; x = x << 32;} + if (x <= 0x0000FFFFFFFFFFFFL) {n = n + 16; x = x << 16;} + if (x <= 0x00FFFFFFFFFFFFFFL) {n = n + 8; x = x << 8;} + if (x <= 0x0FFFFFFFFFFFFFFFL) {n = n + 4; x = x << 4;} + if (x <= 0x3FFFFFFFFFFFFFFFL) {n = n + 2; x = x << 2;} + if (x <= 0x7FFFFFFFFFFFFFFFL) {n = n + 1;} + return n; +} +/* }}} */ + +#define CLZ clzll +#endif +#endif + +int compute_minrun(const uint64_t size) /* {{{ */ +{ + const int top_bit = 64 - CLZ(size); + const int shift = MAX(top_bit, 6) - 6; + const int minrun = size >> shift; + const uint64_t mask = (1ULL << shift) - 1; + if (mask & size) return minrun + 1; + return minrun; +} +/* }}} */ + +#ifndef SORT_NAME +#error "Must declare SORT_NAME" +#endif + +#ifndef SORT_TYPE +#error "Must declare SORT_TYPE" +#endif + +#ifndef SORT_CMP +#define SORT_CMP(x, y) ((x) < (y) ? -1 : ((x) == (y) ? 0 : 1)) +#endif + + +#define SORT_SWAP(x,y) {SORT_TYPE __SORT_SWAP_t = (x); (x) = (y); (y) = __SORT_SWAP_t;} + +#define SORT_CONCAT(x, y) x ## _ ## y +#define SORT_MAKE_STR1(x, y) SORT_CONCAT(x,y) +#define SORT_MAKE_STR(x) SORT_MAKE_STR1(SORT_NAME,x) + +#define BINARY_INSERTION_FIND SORT_MAKE_STR(binary_insertion_find) +#define BINARY_INSERTION_SORT_START SORT_MAKE_STR(binary_insertion_sort_start) +#define BINARY_INSERTION_SORT SORT_MAKE_STR(binary_insertion_sort) +#define REVERSE_ELEMENTS SORT_MAKE_STR(reverse_elements) +#define COUNT_RUN SORT_MAKE_STR(count_run) +#define CHECK_INVARIANT SORT_MAKE_STR(check_invariant) +#define TIM_SORT SORT_MAKE_STR(tim_sort) +#define TIM_SORT_RESIZE SORT_MAKE_STR(tim_sort_resize) +#define TIM_SORT_MERGE SORT_MAKE_STR(tim_sort_merge) +#define TIM_SORT_COLLAPSE SORT_MAKE_STR(tim_sort_collapse) + +#define TIM_SORT_RUN_T SORT_MAKE_STR(tim_sort_run_t) +#define TEMP_STORAGE_T SORT_MAKE_STR(temp_storage_t) + +typedef struct { + int64_t start; + int64_t length; +} TIM_SORT_RUN_T; + +void BINARY_INSERTION_SORT(SORT_TYPE *dst, const size_t size); +void TIM_SORT(SORT_TYPE *dst, const size_t size); + +/* Function used to do a binary search for binary insertion sort */ +static int64_t BINARY_INSERTION_FIND(SORT_TYPE *dst, const SORT_TYPE x, const size_t size) +{ + int64_t l, c, r; + SORT_TYPE lx; + SORT_TYPE cx; + l = 0; + r = size - 1; + c = r >> 1; + lx = dst[l]; + + /* check for beginning conditions */ + if (SORT_CMP(x, lx) < 0) + return 0; + else if (SORT_CMP(x, lx) == 0) + { + int64_t i = 1; + while (SORT_CMP(x, dst[i]) == 0) i++; + return i; + } + + cx = dst[c]; + while (1) + { + const int val = SORT_CMP(x, cx); + if (val < 0) + { + if (c - l <= 1) return c; + r = c; + } + else if (val > 0) + { + if (r - c <= 1) return c + 1; + l = c; + lx = cx; + } + else + { + do + { + cx = dst[++c]; + } while (SORT_CMP(x, cx) == 0); + return c; + } + c = l + ((r - l) >> 1); + cx = dst[c]; + } +} + +/* Binary insertion sort, but knowing that the first "start" entries are sorted. Used in timsort. */ +static void BINARY_INSERTION_SORT_START(SORT_TYPE *dst, const size_t start, const size_t size) +{ + int64_t i; + for (i = start; i < (int64_t) size; i++) + { + int64_t j; + SORT_TYPE x; + int64_t location; + /* If this entry is already correct, just move along */ + if (SORT_CMP(dst[i - 1], dst[i]) <= 0) continue; + + /* Else we need to find the right place, shift everything over, and squeeze in */ + x = dst[i]; + location = BINARY_INSERTION_FIND(dst, x, i); + for (j = i - 1; j >= location; j--) + { + dst[j + 1] = dst[j]; + } + dst[location] = x; + } +} + +/* Binary insertion sort */ +void BINARY_INSERTION_SORT(SORT_TYPE *dst, const size_t size) +{ + BINARY_INSERTION_SORT_START(dst, 1, size); +} + +/* timsort implementation, based on timsort.txt */ + +static void REVERSE_ELEMENTS(SORT_TYPE *dst, int64_t start, int64_t end) +{ + while (1) + { + if (start >= end) return; + SORT_SWAP(dst[start], dst[end]); + start++; + end--; + } +} + +static int64_t COUNT_RUN(SORT_TYPE *dst, const int64_t start, const size_t size) +{ + int64_t curr; + if (size - start == 1) return 1; + if (start >= (int64_t) size - 2) + { + if (SORT_CMP(dst[size - 2], dst[size - 1]) > 0) + SORT_SWAP(dst[size - 2], dst[size - 1]); + return 2; + } + + curr = start + 2; + + if (SORT_CMP(dst[start], dst[start + 1]) <= 0) + { + /* increasing run */ + while (1) + { + if (curr == (int64_t) size - 1) break; + if (SORT_CMP(dst[curr - 1], dst[curr]) > 0) break; + curr++; + } + return curr - start; + } + else + { + /* decreasing run */ + while (1) + { + if (curr == (int64_t) size - 1) break; + if (SORT_CMP(dst[curr - 1], dst[curr]) <= 0) break; + curr++; + } + /* reverse in-place */ + REVERSE_ELEMENTS(dst, start, curr - 1); + return curr - start; + } +} + +#define PUSH_NEXT() do {\ +len = COUNT_RUN(dst, curr, size);\ +run = minrun;\ +if (run < minrun) run = minrun;\ +if (run > (int64_t) size - curr) run = size - curr;\ +if (run > len)\ +{\ + BINARY_INSERTION_SORT_START(&dst[curr], len, run);\ + len = run;\ +}\ +{\ +run_stack[stack_curr].start = curr;\ +run_stack[stack_curr].length = len;\ +stack_curr++;\ +}\ +curr += len;\ +if (curr == (int64_t) size)\ +{\ + /* finish up */ \ + while (stack_curr > 1) \ + { \ + TIM_SORT_MERGE(dst, run_stack, stack_curr, store); \ + run_stack[stack_curr - 2].length += run_stack[stack_curr - 1].length; \ + stack_curr--; \ + } \ + if (store->storage != NULL)\ + {\ + free(store->storage);\ + store->storage = NULL;\ + }\ + return;\ +}\ +}\ +while (0) + +static int CHECK_INVARIANT(TIM_SORT_RUN_T *stack, const int stack_curr) +{ + int64_t A, B, C; + if (stack_curr < 2) return 1; + if (stack_curr == 2) + { + const int64_t A1 = stack[stack_curr - 2].length; + const int64_t B1 = stack[stack_curr - 1].length; + if (A1 <= B1) return 0; + return 1; + } + A = stack[stack_curr - 3].length; + B = stack[stack_curr - 2].length; + C = stack[stack_curr - 1].length; + if ((A <= B + C) || (B <= C)) return 0; + return 1; +} + +typedef struct { + size_t alloc; + SORT_TYPE *storage; +} TEMP_STORAGE_T; + + +static void TIM_SORT_RESIZE(TEMP_STORAGE_T *store, const size_t new_size) +{ + if (store->alloc < new_size) + { + SORT_TYPE *tempstore = (SORT_TYPE *)realloc(store->storage, new_size * sizeof(SORT_TYPE)); + if (tempstore == NULL) + { + fprintf(stderr, "Error allocating temporary storage for tim sort: need %lu bytes", sizeof(SORT_TYPE) * new_size); + exit(1); + } + store->storage = tempstore; + store->alloc = new_size; + } +} + +static void TIM_SORT_MERGE(SORT_TYPE *dst, const TIM_SORT_RUN_T *stack, const int stack_curr, TEMP_STORAGE_T *store) +{ + const int64_t A = stack[stack_curr - 2].length; + const int64_t B = stack[stack_curr - 1].length; + const int64_t curr = stack[stack_curr - 2].start; + SORT_TYPE *storage; + int64_t i, j, k; + + TIM_SORT_RESIZE(store, MIN(A, B)); + storage = store->storage; + + /* left merge */ + if (A < B) + { + memcpy(storage, &dst[curr], A * sizeof(SORT_TYPE)); + i = 0; + j = curr + A; + + for (k = curr; k < curr + A + B; k++) + { + if ((i < A) && (j < curr + A + B)) + { + if (SORT_CMP(storage[i], dst[j]) <= 0) + dst[k] = storage[i++]; + else + dst[k] = dst[j++]; + } + else if (i < A) + { + dst[k] = storage[i++]; + } + else + dst[k] = dst[j++]; + } + } + /* right merge */ + else + { + memcpy(storage, &dst[curr + A], B * sizeof(SORT_TYPE)); + i = B - 1; + j = curr + A - 1; + + for (k = curr + A + B - 1; k >= curr; k--) + { + if ((i >= 0) && (j >= curr)) + { + if (SORT_CMP(dst[j], storage[i]) > 0) + dst[k] = dst[j--]; + else + dst[k] = storage[i--]; + } + else if (i >= 0) + dst[k] = storage[i--]; + else + dst[k] = dst[j--]; + } + } +} + +static int TIM_SORT_COLLAPSE(SORT_TYPE *dst, TIM_SORT_RUN_T *stack, int stack_curr, TEMP_STORAGE_T *store, const size_t size) +{ + while (1) + { + int64_t A, B, C; + /* if the stack only has one thing on it, we are done with the collapse */ + if (stack_curr <= 1) break; + /* if this is the last merge, just do it */ + if ((stack_curr == 2) && + (stack[0].length + stack[1].length == (int64_t) size)) + { + TIM_SORT_MERGE(dst, stack, stack_curr, store); + stack[0].length += stack[1].length; + stack_curr--; + break; + } + /* check if the invariant is off for a stack of 2 elements */ + else if ((stack_curr == 2) && (stack[0].length <= stack[1].length)) + { + TIM_SORT_MERGE(dst, stack, stack_curr, store); + stack[0].length += stack[1].length; + stack_curr--; + break; + } + else if (stack_curr == 2) + break; + + A = stack[stack_curr - 3].length; + B = stack[stack_curr - 2].length; + C = stack[stack_curr - 1].length; + + /* check first invariant */ + if (A <= B + C) + { + if (A < C) + { + TIM_SORT_MERGE(dst, stack, stack_curr - 1, store); + stack[stack_curr - 3].length += stack[stack_curr - 2].length; + stack[stack_curr - 2] = stack[stack_curr - 1]; + stack_curr--; + } + else + { + TIM_SORT_MERGE(dst, stack, stack_curr, store); + stack[stack_curr - 2].length += stack[stack_curr - 1].length; + stack_curr--; + } + } + /* check second invariant */ + else if (B <= C) + { + TIM_SORT_MERGE(dst, stack, stack_curr, store); + stack[stack_curr - 2].length += stack[stack_curr - 1].length; + stack_curr--; + } + else + break; + } + return stack_curr; +} + +void TIM_SORT(SORT_TYPE *dst, const size_t size) +{ + int minrun; + TEMP_STORAGE_T _store, *store; + TIM_SORT_RUN_T run_stack[128]; + int stack_curr = 0; + int64_t len, run; + int64_t curr = 0; + + if (size < 64) + { + BINARY_INSERTION_SORT(dst, size); + return; + } + + /* compute the minimum run length */ + minrun = compute_minrun(size); + + /* temporary storage for merges */ + store = &_store; + store->alloc = 0; + store->storage = NULL; + + PUSH_NEXT(); + PUSH_NEXT(); + PUSH_NEXT(); + + while (1) + { + if (!CHECK_INVARIANT(run_stack, stack_curr)) + { + stack_curr = TIM_SORT_COLLAPSE(dst, run_stack, stack_curr, store, size); + continue; + } + PUSH_NEXT(); + } +} + +#undef SORT_CONCAT +#undef SORT_MAKE_STR1 +#undef SORT_MAKE_STR +#undef SORT_NAME +#undef SORT_TYPE +#undef SORT_CMP +#undef TEMP_STORAGE_T +#undef TIM_SORT_RUN_T +#undef PUSH_NEXT +#undef SORT_SWAP +#undef SORT_CONCAT +#undef SORT_MAKE_STR1 +#undef SORT_MAKE_STR +#undef BINARY_INSERTION_FIND +#undef BINARY_INSERTION_SORT_START +#undef BINARY_INSERTION_SORT +#undef REVERSE_ELEMENTS +#undef COUNT_RUN +#undef TIM_SORT +#undef TIM_SORT_RESIZE +#undef TIM_SORT_COLLAPSE +#undef TIM_SORT_RUN_T +#undef TEMP_STORAGE_T diff --git a/lib/3rdparty/libxml2/tree.c b/lib/3rdparty/libxml2/tree.c index 24db82af787..145a68961ec 100644 --- a/lib/3rdparty/libxml2/tree.c +++ b/lib/3rdparty/libxml2/tree.c @@ -41,6 +41,9 @@ #include #endif +#include "buf.h" +#include "save.h" + int __xmlRegisterCallbacks = 0; /************************************************************************ @@ -682,7 +685,8 @@ try_complex: void xmlSetBufferAllocationScheme(xmlBufferAllocationScheme scheme) { if ((scheme == XML_BUFFER_ALLOC_EXACT) || - (scheme == XML_BUFFER_ALLOC_DOUBLEIT)) + (scheme == XML_BUFFER_ALLOC_DOUBLEIT) || + (scheme == XML_BUFFER_ALLOC_HYBRID)) xmlBufferAllocScheme = scheme; } @@ -693,6 +697,9 @@ xmlSetBufferAllocationScheme(xmlBufferAllocationScheme scheme) { * XML_BUFFER_ALLOC_EXACT - use exact sizes, keeps memory usage down * XML_BUFFER_ALLOC_DOUBLEIT - double buffer when extra needed, * improves performance + * XML_BUFFER_ALLOC_HYBRID - use exact sizes on small strings to keep memory usage tight + * in normal usage, and doubleit on large strings to avoid + * pathological performance. * * Returns the current allocation scheme */ @@ -1261,9 +1268,14 @@ xmlStringLenGetNodeList(xmlDocPtr doc, const xmlChar *value, int len) { const xmlChar *cur = value, *end = cur + len; const xmlChar *q; xmlEntityPtr ent; + xmlBufPtr buf; if (value == NULL) return(NULL); + buf = xmlBufCreateSize(0); + if (buf == NULL) return(NULL); + xmlBufSetAllocationScheme(buf, XML_BUFFER_ALLOC_HYBRID); + q = cur; while ((cur < end) && (*cur != 0)) { if (cur[0] == '&') { @@ -1274,19 +1286,8 @@ xmlStringLenGetNodeList(xmlDocPtr doc, const xmlChar *value, int len) { * Save the current text. */ if (cur != q) { - if ((last != NULL) && (last->type == XML_TEXT_NODE)) { - xmlNodeAddContentLen(last, q, cur - q); - } else { - node = xmlNewDocTextLen(doc, q, cur - q); - if (node == NULL) return(ret); - if (last == NULL) - last = ret = node; - else { - last->next = node; - node->prev = last; - last = node; - } - } + if (xmlBufAdd(buf, q, cur - q)) + goto out; } q = cur; if ((cur + 2 < end) && (cur[1] == '#') && (cur[2] == 'x')) { @@ -1351,7 +1352,7 @@ xmlStringLenGetNodeList(xmlDocPtr doc, const xmlChar *value, int len) { if ((cur >= end) || (*cur == 0)) { xmlTreeErr(XML_TREE_UNTERMINATED_ENTITY, (xmlNodePtr) doc, (const char *) q); - return(ret); + goto out; } if (cur != q) { /* @@ -1361,23 +1362,36 @@ xmlStringLenGetNodeList(xmlDocPtr doc, const xmlChar *value, int len) { ent = xmlGetDocEntity(doc, val); if ((ent != NULL) && (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) { - if (last == NULL) { - node = xmlNewDocText(doc, ent->content); - last = ret = node; - } else if (last->type != XML_TEXT_NODE) { - node = xmlNewDocText(doc, ent->content); - last = xmlAddNextSibling(last, node); - } else - xmlNodeAddContent(last, ent->content); + + if (xmlBufCat(buf, ent->content)) + goto out; } else { + /* + * Flush buffer so far + */ + if (!xmlBufIsEmpty(buf)) { + node = xmlNewDocText(doc, NULL); + if (node == NULL) { + if (val != NULL) xmlFree(val); + goto out; + } + node->content = xmlBufDetach(buf); + + if (last == NULL) { + last = ret = node; + } else { + last = xmlAddNextSibling(last, node); + } + } + /* * Create a new REFERENCE_REF node */ node = xmlNewReference(doc, val); if (node == NULL) { if (val != NULL) xmlFree(val); - return(ret); + goto out; } else if ((ent != NULL) && (ent->children == NULL)) { xmlNodePtr temp; @@ -1404,40 +1418,44 @@ xmlStringLenGetNodeList(xmlDocPtr doc, const xmlChar *value, int len) { q = cur; } if (charval != 0) { - xmlChar buf[10]; + xmlChar buffer[10]; int l; - l = xmlCopyCharMultiByte(buf, charval); - buf[l] = 0; - node = xmlNewDocText(doc, buf); - if (node != NULL) { - if (last == NULL) { - last = ret = node; - } else { - last = xmlAddNextSibling(last, node); - } - } + l = xmlCopyCharMultiByte(buffer, charval); + buffer[l] = 0; + + if (xmlBufCat(buf, buffer)) + goto out; charval = 0; } } else cur++; } - if ((cur != q) || (ret == NULL)) { + + if (cur != q) { /* * Handle the last piece of text. */ - if ((last != NULL) && (last->type == XML_TEXT_NODE)) { - xmlNodeAddContentLen(last, q, cur - q); - } else { - node = xmlNewDocTextLen(doc, q, cur - q); - if (node == NULL) return(ret); - if (last == NULL) { - ret = node; - } else { - xmlAddNextSibling(last, node); - } - } + if (xmlBufAdd(buf, q, cur - q)) + goto out; } + + if (!xmlBufIsEmpty(buf)) { + node = xmlNewDocText(doc, NULL); + if (node == NULL) goto out; + node->content = xmlBufDetach(buf); + + if (last == NULL) { + last = ret = node; + } else { + last = xmlAddNextSibling(last, node); + } + } else if (ret == NULL) { + ret = xmlNewDocText(doc, BAD_CAST ""); + } + +out: + xmlBufFree(buf); return(ret); } @@ -1458,9 +1476,14 @@ xmlStringGetNodeList(xmlDocPtr doc, const xmlChar *value) { const xmlChar *cur = value; const xmlChar *q; xmlEntityPtr ent; + xmlBufPtr buf; if (value == NULL) return(NULL); + buf = xmlBufCreateSize(0); + if (buf == NULL) return(NULL); + xmlBufSetAllocationScheme(buf, XML_BUFFER_ALLOC_HYBRID); + q = cur; while (*cur != 0) { if (cur[0] == '&') { @@ -1471,19 +1494,8 @@ xmlStringGetNodeList(xmlDocPtr doc, const xmlChar *value) { * Save the current text. */ if (cur != q) { - if ((last != NULL) && (last->type == XML_TEXT_NODE)) { - xmlNodeAddContentLen(last, q, cur - q); - } else { - node = xmlNewDocTextLen(doc, q, cur - q); - if (node == NULL) return(ret); - if (last == NULL) - last = ret = node; - else { - last->next = node; - node->prev = last; - last = node; - } - } + if (xmlBufAdd(buf, q, cur - q)) + goto out; } q = cur; if ((cur[1] == '#') && (cur[2] == 'x')) { @@ -1536,7 +1548,7 @@ xmlStringGetNodeList(xmlDocPtr doc, const xmlChar *value) { if (*cur == 0) { xmlTreeErr(XML_TREE_UNTERMINATED_ENTITY, (xmlNodePtr) doc, (const char *) q); - return(ret); + goto out; } if (cur != q) { /* @@ -1546,23 +1558,32 @@ xmlStringGetNodeList(xmlDocPtr doc, const xmlChar *value) { ent = xmlGetDocEntity(doc, val); if ((ent != NULL) && (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) { - if (last == NULL) { - node = xmlNewDocText(doc, ent->content); - last = ret = node; - } else if (last->type != XML_TEXT_NODE) { - node = xmlNewDocText(doc, ent->content); - last = xmlAddNextSibling(last, node); - } else - xmlNodeAddContent(last, ent->content); + + if (xmlBufCat(buf, ent->content)) + goto out; } else { + /* + * Flush buffer so far + */ + if (!xmlBufIsEmpty(buf)) { + node = xmlNewDocText(doc, NULL); + node->content = xmlBufDetach(buf); + + if (last == NULL) { + last = ret = node; + } else { + last = xmlAddNextSibling(last, node); + } + } + /* * Create a new REFERENCE_REF node */ node = xmlNewReference(doc, val); if (node == NULL) { if (val != NULL) xmlFree(val); - return(ret); + goto out; } else if ((ent != NULL) && (ent->children == NULL)) { xmlNodePtr temp; @@ -1588,19 +1609,15 @@ xmlStringGetNodeList(xmlDocPtr doc, const xmlChar *value) { q = cur; } if (charval != 0) { - xmlChar buf[10]; + xmlChar buffer[10]; int len; - len = xmlCopyCharMultiByte(buf, charval); - buf[len] = 0; - node = xmlNewDocText(doc, buf); - if (node != NULL) { - if (last == NULL) { - last = ret = node; - } else { - last = xmlAddNextSibling(last, node); - } - } + len = xmlCopyCharMultiByte(buffer, charval); + buffer[len] = 0; + + if (xmlBufCat(buf, buffer)) + goto out; + charval = 0; } } else cur++; @@ -1609,18 +1626,22 @@ xmlStringGetNodeList(xmlDocPtr doc, const xmlChar *value) { /* * Handle the last piece of text. */ - if ((last != NULL) && (last->type == XML_TEXT_NODE)) { - xmlNodeAddContentLen(last, q, cur - q); + xmlBufAdd(buf, q, cur - q); + } + + if (!xmlBufIsEmpty(buf)) { + node = xmlNewDocText(doc, NULL); + node->content = xmlBufDetach(buf); + + if (last == NULL) { + last = ret = node; } else { - node = xmlNewDocTextLen(doc, q, cur - q); - if (node == NULL) return(ret); - if (last == NULL) { - last = ret = node; - } else { - last = xmlAddNextSibling(last, node); - } + last = xmlAddNextSibling(last, node); } } + +out: + xmlBufFree(buf); return(ret); } @@ -1641,9 +1662,14 @@ xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int inLine) xmlNodePtr node = list; xmlChar *ret = NULL; xmlEntityPtr ent; + int attr; if (list == NULL) return (NULL); + if ((list->parent != NULL) && (list->parent->type == XML_ATTRIBUTE_NODE)) + attr = 1; + else + attr = 0; while (node != NULL) { if ((node->type == XML_TEXT_NODE) || @@ -1653,7 +1679,10 @@ xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int inLine) } else { xmlChar *buffer; - buffer = xmlEncodeEntitiesReentrant(doc, node->content); + if (attr) + buffer = xmlEncodeAttributeEntities(doc, node->content); + else + buffer = xmlEncodeEntitiesReentrant(doc, node->content); if (buffer != NULL) { ret = xmlStrcat(ret, buffer); xmlFree(buffer); @@ -2759,7 +2788,7 @@ void xmlSetTreeDoc(xmlNodePtr tree, xmlDocPtr doc) { xmlAttrPtr prop; - if (tree == NULL) + if ((tree == NULL) || (tree->type == XML_NAMESPACE_DECL)) return; if (tree->doc != doc) { if(tree->type == XML_ELEMENT_NODE) { @@ -2787,7 +2816,7 @@ void xmlSetListDoc(xmlNodePtr list, xmlDocPtr doc) { xmlNodePtr cur; - if (list == NULL) + if ((list == NULL) || (list->type == XML_NAMESPACE_DECL)) return; cur = list; while (cur != NULL) { @@ -2894,7 +2923,9 @@ static xmlNodePtr xmlAddPropSibling(xmlNodePtr prev, xmlNodePtr cur, xmlNodePtr prop) { xmlAttrPtr attr; - if (cur->type != XML_ATTRIBUTE_NODE) + if ((cur == NULL) || (cur->type != XML_ATTRIBUTE_NODE) || + (prop == NULL) || (prop->type != XML_ATTRIBUTE_NODE) || + ((prev != NULL) && (prev->type != XML_ATTRIBUTE_NODE))) return(NULL); /* check if an attribute with the same name exists */ @@ -2942,14 +2973,14 @@ xmlAddPropSibling(xmlNodePtr prev, xmlNodePtr cur, xmlNodePtr prop) { */ xmlNodePtr xmlAddNextSibling(xmlNodePtr cur, xmlNodePtr elem) { - if (cur == NULL) { + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) { #ifdef DEBUG_TREE xmlGenericError(xmlGenericErrorContext, "xmlAddNextSibling : cur == NULL\n"); #endif return(NULL); } - if (elem == NULL) { + if ((elem == NULL) || (elem->type == XML_NAMESPACE_DECL)) { #ifdef DEBUG_TREE xmlGenericError(xmlGenericErrorContext, "xmlAddNextSibling : elem == NULL\n"); @@ -3020,14 +3051,14 @@ xmlAddNextSibling(xmlNodePtr cur, xmlNodePtr elem) { */ xmlNodePtr xmlAddPrevSibling(xmlNodePtr cur, xmlNodePtr elem) { - if (cur == NULL) { + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) { #ifdef DEBUG_TREE xmlGenericError(xmlGenericErrorContext, "xmlAddPrevSibling : cur == NULL\n"); #endif return(NULL); } - if (elem == NULL) { + if ((elem == NULL) || (elem->type == XML_NAMESPACE_DECL)) { #ifdef DEBUG_TREE xmlGenericError(xmlGenericErrorContext, "xmlAddPrevSibling : elem == NULL\n"); @@ -3098,7 +3129,7 @@ xmlNodePtr xmlAddSibling(xmlNodePtr cur, xmlNodePtr elem) { xmlNodePtr parent; - if (cur == NULL) { + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) { #ifdef DEBUG_TREE xmlGenericError(xmlGenericErrorContext, "xmlAddSibling : cur == NULL\n"); @@ -3106,7 +3137,7 @@ xmlAddSibling(xmlNodePtr cur, xmlNodePtr elem) { return(NULL); } - if (elem == NULL) { + if ((elem == NULL) || (elem->type == XML_NAMESPACE_DECL)) { #ifdef DEBUG_TREE xmlGenericError(xmlGenericErrorContext, "xmlAddSibling : elem == NULL\n"); @@ -3174,7 +3205,7 @@ xmlNodePtr xmlAddChildList(xmlNodePtr parent, xmlNodePtr cur) { xmlNodePtr prev; - if (parent == NULL) { + if ((parent == NULL) || (parent->type == XML_NAMESPACE_DECL)) { #ifdef DEBUG_TREE xmlGenericError(xmlGenericErrorContext, "xmlAddChildList : parent == NULL\n"); @@ -3182,7 +3213,7 @@ xmlAddChildList(xmlNodePtr parent, xmlNodePtr cur) { return(NULL); } - if (cur == NULL) { + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) { #ifdef DEBUG_TREE xmlGenericError(xmlGenericErrorContext, "xmlAddChildList : child == NULL\n"); @@ -3260,7 +3291,7 @@ xmlNodePtr xmlAddChild(xmlNodePtr parent, xmlNodePtr cur) { xmlNodePtr prev; - if (parent == NULL) { + if ((parent == NULL) || (parent->type == XML_NAMESPACE_DECL)) { #ifdef DEBUG_TREE xmlGenericError(xmlGenericErrorContext, "xmlAddChild : parent == NULL\n"); @@ -3268,7 +3299,7 @@ xmlAddChild(xmlNodePtr parent, xmlNodePtr cur) { return(NULL); } - if (cur == NULL) { + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) { #ifdef DEBUG_TREE xmlGenericError(xmlGenericErrorContext, "xmlAddChild : child == NULL\n"); @@ -3382,7 +3413,7 @@ xmlAddChild(xmlNodePtr parent, xmlNodePtr cur) { */ xmlNodePtr xmlGetLastChild(xmlNodePtr parent) { - if (parent == NULL) { + if ((parent == NULL) || (parent->type == XML_NAMESPACE_DECL)) { #ifdef DEBUG_TREE xmlGenericError(xmlGenericErrorContext, "xmlGetLastChild : parent == NULL\n"); @@ -3732,6 +3763,10 @@ xmlFreeNode(xmlNodePtr cur) { * @cur: the node * * Unlink a node from it's current context, the node is not freed + * If one need to free the node, use xmlFreeNode() routine after the + * unlink to discard it. + * Note that namespace nodes can't be unlinked as they do not have + * pointer to their parent. */ void xmlUnlinkNode(xmlNodePtr cur) { @@ -3742,6 +3777,8 @@ xmlUnlinkNode(xmlNodePtr cur) { #endif return; } + if (cur->type == XML_NAMESPACE_DECL) + return; if (cur->type == XML_DTD_NODE) { xmlDocPtr doc; doc = cur->doc; @@ -3810,14 +3847,15 @@ xmlUnlinkNode(xmlNodePtr cur) { xmlNodePtr xmlReplaceNode(xmlNodePtr old, xmlNodePtr cur) { if (old == cur) return(NULL); - if ((old == NULL) || (old->parent == NULL)) { + if ((old == NULL) || (old->type == XML_NAMESPACE_DECL) || + (old->parent == NULL)) { #ifdef DEBUG_TREE xmlGenericError(xmlGenericErrorContext, "xmlReplaceNode : old == NULL or without parent\n"); #endif return(NULL); } - if (cur == NULL) { + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) { xmlUnlinkNode(old); return(old); } @@ -3931,6 +3969,8 @@ xmlCopyPropInternal(xmlDocPtr doc, xmlNodePtr target, xmlAttrPtr cur) { xmlAttrPtr ret; if (cur == NULL) return(NULL); + if ((target != NULL) && (target->type != XML_ELEMENT_NODE)) + return(NULL); if (target != NULL) ret = xmlNewDocProp(target->doc, cur->name, NULL); else if (doc != NULL) @@ -4050,6 +4090,8 @@ xmlCopyPropList(xmlNodePtr target, xmlAttrPtr cur) { xmlAttrPtr ret = NULL; xmlAttrPtr p = NULL,q; + if ((target != NULL) && (target->type != XML_ELEMENT_NODE)) + return(NULL); while (cur != NULL) { q = xmlCopyProp(target, cur); if (q == NULL) @@ -4495,39 +4537,71 @@ xmlCopyDoc(xmlDocPtr doc, int recursive) { ************************************************************************/ /** - * xmlGetLineNo: + * xmlGetLineNoInternal: * @node: valid node + * @depth: used to limit any risk of recursion * - * Get line number of @node. This requires activation of this option - * before invoking the parser by calling xmlLineNumbersDefault(1) + * Get line number of @node. + * Try to override the limitation of lines being store in 16 bits ints * * Returns the line number if successful, -1 otherwise */ -long -xmlGetLineNo(xmlNodePtr node) +static long +xmlGetLineNoInternal(xmlNodePtr node, int depth) { long result = -1; + if (depth >= 5) + return(-1); + if (!node) return result; if ((node->type == XML_ELEMENT_NODE) || (node->type == XML_TEXT_NODE) || (node->type == XML_COMMENT_NODE) || - (node->type == XML_PI_NODE)) - result = (long) node->line; - else if ((node->prev != NULL) && + (node->type == XML_PI_NODE)) { + if (node->line == 65535) { + if ((node->type == XML_TEXT_NODE) && (node->psvi != NULL)) + result = (long) node->psvi; + else if ((node->type == XML_ELEMENT_NODE) && + (node->children != NULL)) + result = xmlGetLineNoInternal(node->children, depth + 1); + else if (node->next != NULL) + result = xmlGetLineNoInternal(node->next, depth + 1); + else if (node->prev != NULL) + result = xmlGetLineNoInternal(node->prev, depth + 1); + } + if ((result == -1) || (result == 65535)) + result = (long) node->line; + } else if ((node->prev != NULL) && ((node->prev->type == XML_ELEMENT_NODE) || (node->prev->type == XML_TEXT_NODE) || (node->prev->type == XML_COMMENT_NODE) || (node->prev->type == XML_PI_NODE))) - result = xmlGetLineNo(node->prev); + result = xmlGetLineNoInternal(node->prev, depth + 1); else if ((node->parent != NULL) && (node->parent->type == XML_ELEMENT_NODE)) - result = xmlGetLineNo(node->parent); + result = xmlGetLineNoInternal(node->parent, depth + 1); return result; } +/** + * xmlGetLineNo: + * @node: valid node + * + * Get line number of @node. + * Try to override the limitation of lines being store in 16 bits ints + * if XML_PARSE_BIG_LINES parser option was used + * + * Returns the line number if successful, -1 otherwise + */ +long +xmlGetLineNo(xmlNodePtr node) +{ + return(xmlGetLineNoInternal(node, 0)); +} + #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) /** * xmlGetNodePath: @@ -4550,7 +4624,7 @@ xmlGetNodePath(xmlNodePtr node) char nametemp[100]; int occur = 0, generic; - if (node == NULL) + if ((node == NULL) || (node->type == XML_NAMESPACE_DECL)) return (NULL); buf_len = 500; @@ -4815,7 +4889,7 @@ xmlDocSetRootElement(xmlDocPtr doc, xmlNodePtr root) { xmlNodePtr old = NULL; if (doc == NULL) return(NULL); - if (root == NULL) + if ((root == NULL) || (root->type == XML_NAMESPACE_DECL)) return(NULL); xmlUnlinkNode(root); xmlSetTreeDoc(root, doc); @@ -4902,6 +4976,8 @@ xmlChar * xmlNodeGetLang(xmlNodePtr cur) { xmlChar *lang; + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) + return(NULL); while (cur != NULL) { lang = xmlGetNsProp(cur, BAD_CAST "lang", XML_XML_NAMESPACE); if (lang != NULL) @@ -4981,6 +5057,8 @@ int xmlNodeGetSpacePreserve(xmlNodePtr cur) { xmlChar *space; + if ((cur == NULL) || (cur->type != XML_ELEMENT_NODE)) + return(-1); while (cur != NULL) { space = xmlGetNsProp(cur, BAD_CAST "space", XML_XML_NAMESPACE); if (space != NULL) { @@ -5147,6 +5225,8 @@ xmlNodeGetBase(xmlDocPtr doc, xmlNodePtr cur) { if ((cur == NULL) && (doc == NULL)) return(NULL); + if ((cur != NULL) && (cur->type == XML_NAMESPACE_DECL)) + return(NULL); if (doc == NULL) doc = cur->doc; if ((doc != NULL) && (doc->type == XML_HTML_DOCUMENT_NODE)) { cur = doc->children; @@ -5226,11 +5306,39 @@ xmlNodeGetBase(xmlDocPtr doc, xmlNodePtr cur) { int xmlNodeBufGetContent(xmlBufferPtr buffer, xmlNodePtr cur) { + xmlBufPtr buf; + int ret; + if ((cur == NULL) || (buffer == NULL)) return(-1); + buf = xmlBufFromBuffer(buffer); + ret = xmlBufGetNodeContent(buf, cur); + buffer = xmlBufBackToBuffer(buf); + if ((ret < 0) || (buffer == NULL)) + return(-1); + return(0); +} + +/** + * xmlBufGetNodeContent: + * @buf: a buffer xmlBufPtr + * @cur: the node being read + * + * Read the value of a node @cur, this can be either the text carried + * directly by this node if it's a TEXT node or the aggregate string + * of the values carried by this node child's (TEXT and ENTITY_REF). + * Entity references are substituted. + * Fills up the buffer @buffer with this value + * + * Returns 0 in case of success and -1 in case of error. + */ +int +xmlBufGetNodeContent(xmlBufPtr buf, xmlNodePtr cur) +{ + if ((cur == NULL) || (buf == NULL)) return(-1); switch (cur->type) { case XML_CDATA_SECTION_NODE: case XML_TEXT_NODE: - xmlBufferCat(buffer, cur->content); + xmlBufCat(buf, cur->content); break; case XML_DOCUMENT_FRAG_NODE: case XML_ELEMENT_NODE:{ @@ -5241,10 +5349,10 @@ xmlNodeBufGetContent(xmlBufferPtr buffer, xmlNodePtr cur) case XML_CDATA_SECTION_NODE: case XML_TEXT_NODE: if (tmp->content != NULL) - xmlBufferCat(buffer, tmp->content); + xmlBufCat(buf, tmp->content); break; case XML_ENTITY_REF_NODE: - xmlNodeBufGetContent(buffer, tmp); + xmlBufGetNodeContent(buf, tmp); break; default: break; @@ -5288,16 +5396,16 @@ xmlNodeBufGetContent(xmlBufferPtr buffer, xmlNodePtr cur) while (tmp != NULL) { if (tmp->type == XML_TEXT_NODE) - xmlBufferCat(buffer, tmp->content); + xmlBufCat(buf, tmp->content); else - xmlNodeBufGetContent(buffer, tmp); + xmlBufGetNodeContent(buf, tmp); tmp = tmp->next; } break; } case XML_COMMENT_NODE: case XML_PI_NODE: - xmlBufferCat(buffer, cur->content); + xmlBufCat(buf, cur->content); break; case XML_ENTITY_REF_NODE:{ xmlEntityPtr ent; @@ -5315,7 +5423,7 @@ xmlNodeBufGetContent(xmlBufferPtr buffer, xmlNodePtr cur) * xmlNodeGetContent() which handles all possible node types */ tmp = ent->children; while (tmp) { - xmlNodeBufGetContent(buffer, tmp); + xmlBufGetNodeContent(buf, tmp); tmp = tmp->next; } break; @@ -5337,13 +5445,13 @@ xmlNodeBufGetContent(xmlBufferPtr buffer, xmlNodePtr cur) if ((cur->type == XML_ELEMENT_NODE) || (cur->type == XML_TEXT_NODE) || (cur->type == XML_CDATA_SECTION_NODE)) { - xmlNodeBufGetContent(buffer, cur); + xmlBufGetNodeContent(buf, cur); } cur = cur->next; } break; case XML_NAMESPACE_DECL: - xmlBufferCat(buffer, ((xmlNsPtr) cur)->href); + xmlBufCat(buf, ((xmlNsPtr) cur)->href); break; case XML_ELEMENT_DECL: case XML_ATTRIBUTE_DECL: @@ -5352,6 +5460,7 @@ xmlNodeBufGetContent(xmlBufferPtr buffer, xmlNodePtr cur) } return(0); } + /** * xmlNodeGetContent: * @cur: the node being read @@ -5371,16 +5480,15 @@ xmlNodeGetContent(xmlNodePtr cur) switch (cur->type) { case XML_DOCUMENT_FRAG_NODE: case XML_ELEMENT_NODE:{ - xmlBufferPtr buffer; + xmlBufPtr buf; xmlChar *ret; - buffer = xmlBufferCreateSize(64); - if (buffer == NULL) + buf = xmlBufCreateSize(64); + if (buf == NULL) return (NULL); - xmlNodeBufGetContent(buffer, cur); - ret = buffer->content; - buffer->content = NULL; - xmlBufferFree(buffer); + xmlBufGetNodeContent(buf, cur); + ret = xmlBufDetach(buf); + xmlBufFree(buf); return (ret); } case XML_ATTRIBUTE_NODE: @@ -5392,7 +5500,7 @@ xmlNodeGetContent(xmlNodePtr cur) return (NULL); case XML_ENTITY_REF_NODE:{ xmlEntityPtr ent; - xmlBufferPtr buffer; + xmlBufPtr buf; xmlChar *ret; /* lookup entity declaration */ @@ -5400,15 +5508,14 @@ xmlNodeGetContent(xmlNodePtr cur) if (ent == NULL) return (NULL); - buffer = xmlBufferCreate(); - if (buffer == NULL) + buf = xmlBufCreate(); + if (buf == NULL) return (NULL); - xmlNodeBufGetContent(buffer, cur); + xmlBufGetNodeContent(buf, cur); - ret = buffer->content; - buffer->content = NULL; - xmlBufferFree(buffer); + ret = xmlBufDetach(buf); + xmlBufFree(buf); return (ret); } case XML_ENTITY_NODE: @@ -5423,18 +5530,17 @@ xmlNodeGetContent(xmlNodePtr cur) case XML_DOCB_DOCUMENT_NODE: #endif case XML_HTML_DOCUMENT_NODE: { - xmlBufferPtr buffer; + xmlBufPtr buf; xmlChar *ret; - buffer = xmlBufferCreate(); - if (buffer == NULL) + buf = xmlBufCreate(); + if (buf == NULL) return (NULL); - xmlNodeBufGetContent(buffer, (xmlNodePtr) cur); + xmlBufGetNodeContent(buf, (xmlNodePtr) cur); - ret = buffer->content; - buffer->content = NULL; - xmlBufferFree(buffer); + ret = xmlBufDetach(buf); + xmlBufFree(buf); return (ret); } case XML_NAMESPACE_DECL: { @@ -5755,6 +5861,9 @@ xmlGetNsList(xmlDocPtr doc ATTRIBUTE_UNUSED, xmlNodePtr node) int maxns = 10; int i; + if ((node == NULL) || (node->type == XML_NAMESPACE_DECL)) + return(NULL); + while (node != NULL) { if (node->type == XML_ELEMENT_NODE) { cur = node->nsDef; @@ -5853,7 +5962,7 @@ xmlSearchNs(xmlDocPtr doc, xmlNodePtr node, const xmlChar *nameSpace) { xmlNsPtr cur; xmlNodePtr orig = node; - if (node == NULL) return(NULL); + if ((node == NULL) || (node->type == XML_NAMESPACE_DECL)) return(NULL); if ((nameSpace != NULL) && (xmlStrEqual(nameSpace, (const xmlChar *)"xml"))) { if ((doc == NULL) && (node->type == XML_ELEMENT_NODE)) { @@ -5983,7 +6092,7 @@ xmlSearchNsByHref(xmlDocPtr doc, xmlNodePtr node, const xmlChar * href) xmlNodePtr orig = node; int is_attr; - if ((node == NULL) || (href == NULL)) + if ((node == NULL) || (node->type == XML_NAMESPACE_DECL) || (href == NULL)) return (NULL); if (xmlStrEqual(href, XML_XML_NAMESPACE)) { /* @@ -6074,7 +6183,7 @@ xmlNewReconciliedNs(xmlDocPtr doc, xmlNodePtr tree, xmlNsPtr ns) { xmlChar prefix[50]; int counter = 1; - if (tree == NULL) { + if ((tree == NULL) || (tree->type != XML_ELEMENT_NODE)) { #ifdef DEBUG_TREE xmlGenericError(xmlGenericErrorContext, "xmlNewReconciliedNs : tree == NULL\n"); @@ -6913,6 +7022,34 @@ xmlBufferCreateSize(size_t size) { return(ret); } +/** + * xmlBufferDetach: + * @buf: the buffer + * + * Remove the string contained in a buffer and gie it back to the + * caller. The buffer is reset to an empty content. + * This doesn't work with immutable buffers as they can't be reset. + * + * Returns the previous string contained by the buffer. + */ +xmlChar * +xmlBufferDetach(xmlBufferPtr buf) { + xmlChar *ret; + + if (buf == NULL) + return(NULL); + if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) + return(NULL); + + ret = buf->content; + buf->content = NULL; + buf->size = 0; + buf->use = 0; + + return ret; +} + + /** * xmlBufferCreateStatic: * @mem: the memory area @@ -6964,6 +7101,7 @@ xmlBufferSetAllocationScheme(xmlBufferPtr buf, (buf->alloc == XML_BUFFER_ALLOC_IO)) return; if ((scheme == XML_BUFFER_ALLOC_DOUBLEIT) || (scheme == XML_BUFFER_ALLOC_EXACT) || + (scheme == XML_BUFFER_ALLOC_HYBRID) || (scheme == XML_BUFFER_ALLOC_IMMUTABLE)) buf->alloc = scheme; } @@ -7231,6 +7369,21 @@ xmlBufferResize(xmlBufferPtr buf, unsigned int size) case XML_BUFFER_ALLOC_EXACT: newSize = size+10; break; + case XML_BUFFER_ALLOC_HYBRID: + if (buf->use < BASE_BUFFER_SIZE) + newSize = size; + else { + newSize = buf->size * 2; + while (size > newSize) { + if (newSize > UINT_MAX / 2) { + xmlTreeErrMemory("growing buffer"); + return 0; + } + newSize *= 2; + } + } + break; + default: newSize = size+10; break; @@ -7887,6 +8040,8 @@ xmlDOMWrapNSNormGatherInScopeNs(xmlNsMapPtr *map, if ((map == NULL) || (*map != NULL)) return (-1); + if ((node == NULL) || (node->type == XML_NAMESPACE_DECL)) + return (-1); /* * Get in-scope ns-decls of @parent. */ @@ -8154,6 +8309,8 @@ xmlSearchNsByNamespaceStrict(xmlDocPtr doc, xmlNodePtr node, if ((doc == NULL) || (nsName == NULL) || (retNs == NULL)) return (-1); + if ((node == NULL) || (node->type == XML_NAMESPACE_DECL)) + return(-1); *retNs = NULL; if (xmlStrEqual(nsName, XML_XML_NAMESPACE)) { @@ -8252,8 +8409,8 @@ xmlSearchNsByPrefixStrict(xmlDocPtr doc, xmlNodePtr node, xmlNodePtr cur; xmlNsPtr ns; - if ((doc == NULL) || (node == NULL)) - return (-1); + if ((doc == NULL) || (node == NULL) || (node->type == XML_NAMESPACE_DECL)) + return(-1); if (retNs) *retNs = NULL; @@ -8321,6 +8478,9 @@ xmlDOMWrapNSNormDeclareNsForced(xmlDocPtr doc, char buf[50]; const xmlChar *pref; int counter = 0; + + if ((doc == NULL) || (elem == NULL) || (elem->type != XML_ELEMENT_NODE)) + return(NULL); /* * Create a ns-decl on @anchor. */ @@ -8837,6 +8997,9 @@ xmlDOMWrapAdoptBranch(xmlDOMWrapCtxtPtr ctxt, parnsdone = 0; cur = node; + if ((cur != NULL) && (cur->type == XML_NAMESPACE_DECL)) + goto internal_error; + while (cur != NULL) { /* * Paranoid source-doc sanity check. @@ -9216,6 +9379,9 @@ xmlDOMWrapCloneNode(xmlDOMWrapCtxtPtr ctxt, *resNode = NULL; cur = node; + if ((cur != NULL) && (cur->type == XML_NAMESPACE_DECL)) + return(-1); + while (cur != NULL) { if (cur->doc != sourceDoc) { /* @@ -9733,6 +9899,8 @@ xmlDOMWrapAdoptAttr(xmlDOMWrapCtxtPtr ctxt, if (attr->children == NULL) return (0); cur = attr->children; + if ((cur != NULL) && (cur->type == XML_NAMESPACE_DECL)) + goto internal_error; while (cur != NULL) { cur->doc = destDoc; switch (cur->type) { @@ -9817,7 +9985,8 @@ xmlDOMWrapAdoptNode(xmlDOMWrapCtxtPtr ctxt, xmlNodePtr destParent, int options) { - if ((node == NULL) || (destDoc == NULL) || + if ((node == NULL) || (node->type == XML_NAMESPACE_DECL) || + (destDoc == NULL) || ((destParent != NULL) && (destParent->doc != destDoc))) return(-1); /* diff --git a/lib/3rdparty/libxml2/trio.c b/lib/3rdparty/libxml2/trio.c index b116ccc363a..d885db9db3e 100644 --- a/lib/3rdparty/libxml2/trio.c +++ b/lib/3rdparty/libxml2/trio.c @@ -307,6 +307,10 @@ typedef trio_longlong_t trio_int64_t; #define NAN_LOWER "nan" #define NAN_UPPER "NAN" +#if !defined(HAVE_ISASCII) && !defined(isascii) +# define isascii(x) ((unsigned int)(x) < 128) +#endif + /* Various constants */ enum { TYPE_PRINT = 1, @@ -376,7 +380,7 @@ enum { /* Maximal string lengths for user-defined specifiers */ MAX_USER_NAME = 64, MAX_USER_DATA = 256, - + /* Maximal length of locale separator strings */ MAX_LOCALE_SEPARATOR_LENGTH = MB_LEN_MAX, /* Maximal number of integers in grouping */ @@ -1020,23 +1024,23 @@ TRIO_ARGS2((name, prev), trio_userdef_t **prev) { trio_userdef_t *def; - + if (internalEnterCriticalRegion) (void)internalEnterCriticalRegion(NULL); - + for (def = internalUserDef; def; def = def->next) { /* Case-sensitive string comparison */ if (trio_equal_case(def->name, name)) break; - + if (prev) *prev = def; } - + if (internalLeaveCriticalRegion) (void)internalLeaveCriticalRegion(NULL); - + return def; } #endif @@ -1200,7 +1204,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray), /* One and only one of arglist and argarray must be used */ assert((arglist != NULL) ^ (argarray != NULL)); - + /* * The 'parameters' array is not initialized, but we need to * know which entries we have used. @@ -1213,7 +1217,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray), #if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE) (void)mblen(NULL, 0); #endif - + while (format[index]) { #if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE) @@ -1291,7 +1295,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray), /* Skip if no precision */ if (QUALIFIER_DOT == format[index]) break; - + /* After the first dot we have the precision */ flags |= FLAGS_PRECISION; if ((QUALIFIER_STAR == format[index]) @@ -1336,7 +1340,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray), else if (dots == 1) /* Base */ { dots++; - + /* After the second dot we have the base */ flags |= FLAGS_BASE; if ((QUALIFIER_STAR == format[index]) @@ -1535,7 +1539,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray), } else return TRIO_ERROR_RETURN(TRIO_EINVAL, index); - + flags |= FLAGS_FIXED_SIZE; break; #endif @@ -1563,7 +1567,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray), gotSticky = TRUE; break; #endif - + #if defined(QUALIFIER_VARSIZE) case QUALIFIER_VARSIZE: flags |= FLAGS_VARSIZE_PARAMETER; @@ -1628,9 +1632,9 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray), indices[varsize] = pos; varsize = pos++; } - + indices[currentParam] = pos; - + switch (format[index++]) { #if defined(SPECIFIER_CHAR_UPPER) @@ -1689,11 +1693,11 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray), } } break; - + case SPECIFIER_INTEGER: parameters[pos].type = FORMAT_INT; break; - + case SPECIFIER_UNSIGNED: flags |= FLAGS_UNSIGNED; parameters[pos].type = FORMAT_INT; @@ -1793,11 +1797,11 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray), { unsigned int max; int without_namespace = TRUE; - + parameters[pos].type = FORMAT_USER_DEFINED; parameters[pos].user_name[0] = NIL; tmpformat = (char *)&format[index]; - + while ((ch = format[index])) { index++; @@ -1845,7 +1849,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray), } break; #endif /* defined(SPECIFIER_USER_DEFINED_BEGIN) */ - + default: /* Bail out completely to make the error more obvious */ return TRIO_ERROR_RETURN(TRIO_EINVAL, index); @@ -1853,7 +1857,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray), /* Count the number of times this entry has been used */ usedEntries[currentParam] += 1; - + /* Find last sticky parameters */ if (gotSticky && !(flags & FLAGS_STICKY)) { @@ -1876,7 +1880,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray), } } } - + parameters[pos].indexAfterSpecifier = index; parameters[pos].flags = flags; parameters[pos].width = width; @@ -1884,12 +1888,12 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray), parameters[pos].base = (base == NO_BASE) ? BASE_DECIMAL : base; parameters[pos].varsize = varsize; pos++; - + if (! positional) parameterPosition++; - + } /* if identifier */ - + } /* while format characters left */ for (num = 0; num <= maxParam; num++) @@ -1901,7 +1905,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray), else /* double references detected */ return TRIO_ERROR_RETURN(TRIO_EDBLREF, num); } - + i = indices[num]; /* @@ -1969,7 +1973,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray), if (TYPE_SCAN == type) { if (argarray == NULL) - parameters[i].data.pointer = + parameters[i].data.pointer = (trio_pointer_t)va_arg(*arglist, trio_pointer_t); else { @@ -2009,7 +2013,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray), varsize = parameters[i].varsize; } parameters[i].flags &= ~FLAGS_ALL_VARSIZES; - + if (varsize <= (int)sizeof(int)) ; else if (varsize <= (int)sizeof(long)) @@ -2213,7 +2217,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base), number &= (unsigned long)-1; else number &= (unsigned int)-1; - + /* Build number */ pointer = bufferend = &buffer[sizeof(buffer) - 1]; *pointer-- = NIL; @@ -2260,7 +2264,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base), count = (! ((flags & FLAGS_LEFTADJUST) || (precision == NO_PRECISION))) ? precision : 0; - + /* Adjust width further */ if (isNegative || (flags & FLAGS_SHOWSIGN) || (flags & FLAGS_SPACE)) width--; @@ -2495,7 +2499,7 @@ TRIO_ARGS4((self, wch, flags, width), if (width == NO_WIDTH) width = sizeof(buffer); - + size = wctomb(buffer, wch); if ((size <= 0) || (size > width) || (buffer[0] == NIL)) return 0; @@ -2537,13 +2541,13 @@ TRIO_ARGS5((self, wstring, flags, width, precision), #if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE) (void)mblen(NULL, 0); #endif - + if (wstring == NULL) { TrioWriteString(self, NULL, flags, width, precision); return; } - + if (NO_PRECISION == precision) { length = INT_MAX; @@ -2638,7 +2642,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base), BOOLEAN_T keepTrailingZeroes; BOOLEAN_T keepDecimalPoint; trio_long_double_t epsilon; - + assert(VALID(self)); assert(VALID(self->OutStream)); assert(((base >= MIN_BASE) && (base <= MAX_BASE)) || (base == NO_BASE)); @@ -2653,7 +2657,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base), : NAN_LOWER, flags, width, precision); return; - + case TRIO_FP_INFINITE: if (isNegative) { @@ -2680,7 +2684,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base), /* Finitude */ break; } - + /* Normal numbers */ if (flags & FLAGS_LONGDOUBLE) { @@ -2728,13 +2732,13 @@ TRIO_ARGS6((self, number, flags, width, precision, base), precision = FLT_DIG; } } - + if (isNegative) number = -number; if (isHex) flags |= FLAGS_FLOAT_E; - + if (flags & FLAGS_FLOAT_G) { if (precision == 0) @@ -2787,7 +2791,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base), integerNumber = floorl(number); fractionNumber = number - integerNumber; - + /* * Truncated number. * @@ -2802,7 +2806,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base), : zeroes + precision; dblFractionBase = TrioPower(base, fractionDigits); - + workNumber = number + 0.5 / dblFractionBase; if (floorl(number) != floorl(workNumber)) { @@ -2855,7 +2859,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base), integerThreshold = INT_MAX; fractionThreshold = INT_MAX; } - + /* * Calculate expected width. * sign + integer part + thousands separators + decimal point @@ -2891,7 +2895,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base), ((requireTwoDigitExponent ? sizeof("E+0") : sizeof("E+")) - 1); if (isHex) expectedWidth += sizeof("0X") - 1; - + /* Output prefixing */ if (flags & FLAGS_NILPADDING) { @@ -2937,7 +2941,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base), self->OutStream(self, (flags & FLAGS_UPPER) ? 'X' : 'x'); } } - + /* Output the integer part and thousand separators */ dblIntegerBase = 1.0 / TrioPower(base, integerDigits - 1); for (i = 0; i < integerDigits; i++) @@ -2953,7 +2957,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base), self->OutStream(self, digits[(int)fmodl(workNumber, dblBase)]); } dblIntegerBase *= dblBase; - + if (((flags & (FLAGS_FLOAT_E | FLAGS_QUOTE)) == FLAGS_QUOTE) && TrioFollowedBySeparator(integerDigits - i)) { @@ -2965,7 +2969,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base), } } } - + /* Insert decimal point and build the fraction part */ trailingZeroes = 0; @@ -3014,7 +3018,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base), } } } - + if (keepTrailingZeroes) { while (trailingZeroes > 0) @@ -3023,7 +3027,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base), trailingZeroes--; } } - + /* Output exponent */ if (exponentDigits > 0) { @@ -3080,13 +3084,13 @@ TRIO_ARGS3((data, format, parameters), int precision; int base; int index; - + index = 0; i = 0; #if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE) (void)mblen(NULL, 0); #endif - + while (format[index]) { #if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE) @@ -3120,7 +3124,7 @@ TRIO_ARGS3((data, format, parameters), /* Skip the parameter entries */ while (parameters[i].type == FORMAT_PARAMETER) i++; - + flags = parameters[i].flags; /* Find width */ @@ -3140,7 +3144,7 @@ TRIO_ARGS3((data, format, parameters), width = -width; } } - + /* Find precision */ if (flags & FLAGS_PRECISION) { @@ -3171,7 +3175,7 @@ TRIO_ARGS3((data, format, parameters), /* Get base from parameter list */ base = (int)parameters[base].data.number.as_signed; } - + switch (parameters[i].type) { case FORMAT_CHAR: @@ -3251,7 +3255,7 @@ TRIO_ARGS3((data, format, parameters), case FORMAT_POINTER: { trio_reference_t reference; - + reference.data = data; reference.parameter = ¶meters[i]; trio_print_pointer(&reference, parameters[i].data.pointer); @@ -3354,7 +3358,7 @@ TRIO_ARGS3((data, format, parameters), } break; #endif /* defined(FORMAT_USER_DEFINED) */ - + default: break; } /* switch parameter type */ @@ -3564,7 +3568,7 @@ TRIO_ARGS2((self, output), assert(VALID(self)); assert(VALID(self->location)); - + buffer = (char **)self->location; if (self->processed < self->max) @@ -3632,7 +3636,7 @@ TRIO_VARGS2((format, va_alist), va_list args; assert(VALID(format)); - + TRIO_VA_START(args, format); status = TrioFormat(stdout, 0, TrioOutStreamFile, format, &args, NULL); TRIO_VA_END(args); @@ -3699,7 +3703,7 @@ TRIO_VARGS3((file, format, va_alist), assert(VALID(file)); assert(VALID(format)); - + TRIO_VA_START(args, format); status = TrioFormat(file, 0, TrioOutStreamFile, format, &args, NULL); TRIO_VA_END(args); @@ -3723,7 +3727,7 @@ TRIO_ARGS3((file, format, args), { assert(VALID(file)); assert(VALID(format)); - + return TrioFormat(file, 0, TrioOutStreamFile, format, &args, NULL); } @@ -3744,7 +3748,7 @@ TRIO_ARGS3((file, format, args), { assert(VALID(file)); assert(VALID(format)); - + return TrioFormat(file, 0, TrioOutStreamFile, format, NULL, args); } @@ -3771,7 +3775,7 @@ TRIO_VARGS3((fd, format, va_alist), va_list args; assert(VALID(format)); - + TRIO_VA_START(args, format); status = TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, &args, NULL); TRIO_VA_END(args); @@ -3794,7 +3798,7 @@ TRIO_ARGS3((fd, format, args), va_list args) { assert(VALID(format)); - + return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, &args, NULL); } @@ -3814,7 +3818,7 @@ TRIO_ARGS3((fd, format, args), trio_pointer_t *args) { assert(VALID(format)); - + return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, NULL, args); } @@ -3904,7 +3908,7 @@ TRIO_VARGS3((buffer, format, va_alist), assert(VALID(buffer)); assert(VALID(format)); - + TRIO_VA_START(args, format); status = TrioFormat(&buffer, 0, TrioOutStreamString, format, &args, NULL); *buffer = NIL; /* Terminate with NIL character */ @@ -4098,7 +4102,7 @@ TRIO_ARGS4((buffer, max, format, args), { int status; size_t buf_len; - + assert(VALID(buffer)); assert(VALID(format)); @@ -4126,7 +4130,7 @@ TRIO_VARGS2((format, va_alist), char *result = NULL; assert(VALID(format)); - + info = trio_xstring_duplicate(""); if (info) { @@ -4151,9 +4155,9 @@ TRIO_ARGS2((format, args), { trio_string_t *info; char *result = NULL; - + assert(VALID(format)); - + info = trio_xstring_duplicate(""); if (info) { @@ -4180,7 +4184,7 @@ TRIO_VARGS3((result, format, va_alist), assert(VALID(format)); *result = NULL; - + info = trio_xstring_duplicate(""); if (info == NULL) { @@ -4211,11 +4215,11 @@ TRIO_ARGS3((result, format, args), { int status; trio_string_t *info; - + assert(VALID(format)); *result = NULL; - + info = trio_xstring_duplicate(""); if (info == NULL) { @@ -4264,7 +4268,7 @@ TRIO_ARGS3((result, format, args), @param name @return Handle. */ -TRIO_PUBLIC trio_pointer_t +TRIO_PUBLIC trio_pointer_t trio_register TRIO_ARGS2((callback, name), trio_callback_t callback, @@ -4291,23 +4295,23 @@ TRIO_ARGS2((callback, name), } return NULL; } - + /* Bail out if namespace is too long */ if (trio_length(name) >= MAX_USER_NAME) return NULL; - + /* Bail out if namespace already is registered */ def = TrioFindNamespace(name, &prev); if (def) return NULL; } - + def = (trio_userdef_t *)TRIO_MALLOC(sizeof(trio_userdef_t)); if (def) { if (internalEnterCriticalRegion) (void)internalEnterCriticalRegion(NULL); - + if (name) { /* Link into internal list */ @@ -4352,12 +4356,12 @@ TRIO_ARGS1((handle), { if (internalEnterCriticalRegion) (void)internalEnterCriticalRegion(NULL); - + if (prev == NULL) internalUserDef = NULL; else prev->next = def->next; - + if (internalLeaveCriticalRegion) (void)internalLeaveCriticalRegion(NULL); } @@ -4377,14 +4381,14 @@ TRIO_ARGS1((ref), #if defined(FORMAT_USER_DEFINED) assert(((trio_reference_t *)ref)->parameter->type == FORMAT_USER_DEFINED); #endif - + return (((trio_reference_t *)ref)->parameter->user_data); } /************************************************************************* * trio_get_argument [public] */ -trio_pointer_t +trio_pointer_t trio_get_argument TRIO_ARGS1((ref), trio_pointer_t ref) @@ -4392,7 +4396,7 @@ TRIO_ARGS1((ref), #if defined(FORMAT_USER_DEFINED) assert(((trio_reference_t *)ref)->parameter->type == FORMAT_USER_DEFINED); #endif - + return ((trio_reference_t *)ref)->parameter->data.pointer; } @@ -4924,7 +4928,7 @@ TRIO_VARGS3((ref, format, va_alist), va_list arglist; assert(VALID(format)); - + TRIO_VA_START(arglist, format); status = TrioFormatRef((trio_reference_t *)ref, format, &arglist, NULL); TRIO_VA_END(arglist); @@ -4942,7 +4946,7 @@ TRIO_ARGS3((ref, format, arglist), va_list arglist) { assert(VALID(format)); - + return TrioFormatRef((trio_reference_t *)ref, format, &arglist, NULL); } @@ -4957,7 +4961,7 @@ TRIO_ARGS3((ref, format, argarray), trio_pointer_t *argarray) { assert(VALID(format)); - + return TrioFormatRef((trio_reference_t *)ref, format, NULL, argarray); } @@ -5206,7 +5210,7 @@ TRIO_ARGS4((format, indexPointer, flagsPointer, characterclass), switch (ch) { case QUALIFIER_MINUS: /* Scanlist ranges */ - + /* * Both C99 and UNIX98 describes ranges as implementation- * defined. @@ -5233,17 +5237,17 @@ TRIO_ARGS4((format, indexPointer, flagsPointer, characterclass), return TRIO_ERROR_RETURN(TRIO_EINVAL, index); if (range_begin > range_end) return TRIO_ERROR_RETURN(TRIO_ERANGE, index); - + for (i = (int)range_begin; i <= (int)range_end; i++) characterclass[i]++; - + ch = range_end; break; - + #if TRIO_EXTENSION case SPECIFIER_GROUP: - + switch (format[index + 1]) { case QUALIFIER_DOT: /* Collating symbol */ @@ -5262,15 +5266,15 @@ TRIO_ARGS4((format, indexPointer, flagsPointer, characterclass), } if (format[++i] != SPECIFIER_UNGROUP) return -1; - + index = i; break; - + case QUALIFIER_EQUAL: /* Equivalence class expressions */ { unsigned int j; unsigned int k; - + if (internalCollationUnconverted) { /* Lazy evaluation of collation array */ @@ -5294,13 +5298,13 @@ TRIO_ARGS4((format, indexPointer, flagsPointer, characterclass), } if (format[++i] != SPECIFIER_UNGROUP) return -1; - + index = i; } break; - + case QUALIFIER_COLON: /* Character class expressions */ - + if (trio_equal_max(CLASS_ALNUM, sizeof(CLASS_ALNUM) - 1, &format[index])) { @@ -5400,9 +5404,9 @@ TRIO_ARGS4((format, indexPointer, flagsPointer, characterclass), break; } break; - + #endif /* TRIO_EXTENSION */ - + default: characterclass[(int)ch]++; break; @@ -5448,9 +5452,9 @@ TRIO_ARGS5((self, target, flags, width, base), } internalDigitsUnconverted = FALSE; } - + TrioSkipWhitespaces(self); - + if (!(flags & FLAGS_UNSIGNED)) { /* Leading sign */ @@ -5464,9 +5468,9 @@ TRIO_ARGS5((self, target, flags, width, base), isNegative = TRUE; } } - + count = self->processed; - + if (flags & FLAGS_ALTERNATIVE) { switch (base) @@ -5527,7 +5531,7 @@ TRIO_ARGS5((self, target, flags, width, base), } else break; - + number *= base; number += digit; gotNumber = TRUE; /* we need at least one digit */ @@ -5538,7 +5542,7 @@ TRIO_ARGS5((self, target, flags, width, base), /* Was anything read at all? */ if (!gotNumber) return FALSE; - + if (target) *target = (isNegative) ? -((trio_intmax_t)number) : number; return TRUE; @@ -5558,7 +5562,7 @@ TRIO_ARGS4((self, target, flags, width), int i; char ch; trio_uintmax_t number; - + assert(VALID(self)); assert(VALID(self->InStream)); @@ -5603,7 +5607,7 @@ TRIO_ARGS4((self, target, flags, width), break; } } - + if (target) target[i] = ch; } @@ -5622,12 +5626,12 @@ TRIO_ARGS4((self, target, flags, width), int width) { int i; - + assert(VALID(self)); assert(VALID(self->InStream)); TrioSkipWhitespaces(self); - + /* * Continue until end of string is reached, a whitespace is encountered, * or width is exceeded @@ -5663,7 +5667,7 @@ TRIO_ARGS4((self, target, flags, width), int amount = 0; trio_wchar_t wch; char buffer[MB_LEN_MAX + 1]; - + assert(VALID(self)); assert(VALID(self->InStream)); @@ -5720,7 +5724,7 @@ TRIO_ARGS4((self, target, flags, width), { int i; int size; - + assert(VALID(self)); assert(VALID(self->InStream)); @@ -5729,7 +5733,7 @@ TRIO_ARGS4((self, target, flags, width), #if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE) (void)mblen(NULL, 0); #endif - + /* * Continue until end of string is reached, a whitespace is encountered, * or width is exceeded @@ -5767,7 +5771,7 @@ TRIO_ARGS5((self, target, characterclass, flags, width), { int ch; int i; - + assert(VALID(self)); assert(VALID(self->InStream)); @@ -5782,7 +5786,7 @@ TRIO_ARGS5((self, target, characterclass, flags, width), target[i] = (char)ch; self->InStream(self, &ch); } - + if (target) target[i] = NIL; return TRUE; @@ -5811,12 +5815,12 @@ TRIO_ARGS4((self, target, flags, width), BOOLEAN_T isHex = FALSE; doubleString[0] = 0; - + if ((width == NO_WIDTH) || (width > (int)sizeof(doubleString) - 1)) width = sizeof(doubleString) - 1; - + TrioSkipWhitespaces(self); - + /* * Read entire double number from stream. trio_to_double requires * a string as input, but InStream can be anything, so we have to @@ -5902,11 +5906,11 @@ TRIO_ARGS4((self, target, flags, width), self->InStream(self, &ch); } break; - + default: break; } - + while ((ch != EOF) && (index - start < width)) { /* Integer part */ @@ -5966,7 +5970,7 @@ TRIO_ARGS4((self, target, flags, width), return FALSE; doubleString[index] = 0; - + if (flags & FLAGS_LONGDOUBLE) { *((trio_long_double_t *)target) = trio_to_long_double(doubleString, NULL); @@ -5992,7 +5996,7 @@ TRIO_ARGS3((self, target, flags), char buffer[sizeof(internalNullString)]; flags |= (FLAGS_UNSIGNED | FLAGS_ALTERNATIVE | FLAGS_NILPADDING); - + if (TrioReadNumber(self, &number, flags, @@ -6013,7 +6017,7 @@ TRIO_ARGS3((self, target, flags), : buffer, 0, sizeof(internalNullString) - 1)) - { + { if (trio_equal_case(buffer, internalNullString)) { if (target) @@ -6077,12 +6081,12 @@ TRIO_ARGS3((data, format, parameters), } } #endif /* TRIO_COMPILER_SUPPORTS_MULTIBYTE */ - + if ((EOF == ch) && (parameters[i].type != FORMAT_COUNT)) { return (assignment > 0) ? assignment : EOF; } - + if (CHAR_IDENTIFIER == format[index]) { if (CHAR_IDENTIFIER == format[index + 1]) @@ -6101,7 +6105,7 @@ TRIO_ARGS3((data, format, parameters), /* Skip the parameter entries */ while (parameters[i].type == FORMAT_PARAMETER) i++; - + flags = parameters[i].flags; /* Find width */ width = parameters[i].width; @@ -6117,7 +6121,7 @@ TRIO_ARGS3((data, format, parameters), /* Get base from parameter list */ base = (int)parameters[base].data.number.as_signed; } - + switch (parameters[i].type) { case FORMAT_INT: @@ -6165,7 +6169,7 @@ TRIO_ARGS3((data, format, parameters), } } break; /* FORMAT_INT */ - + case FORMAT_STRING: #if TRIO_WIDECHAR if (flags & FLAGS_WIDECHAR) @@ -6229,7 +6233,7 @@ TRIO_ARGS3((data, format, parameters), } /* Skip over group specifier */ index++; - + memset(characterclass, 0, sizeof(characterclass)); rc = TrioGetCharacterClass(format, &index, @@ -6291,7 +6295,7 @@ TRIO_ARGS3((data, format, parameters), } } break; /* FORMAT_COUNT */ - + case FORMAT_CHAR: #if TRIO_WIDECHAR if (flags & FLAGS_WIDECHAR) @@ -6353,7 +6357,7 @@ TRIO_ARGS3((data, format, parameters), } else return assignment; - + index++; } } @@ -6392,7 +6396,7 @@ TRIO_ARGS6((source, sourceSize, InStream, format, arglist, argarray), TrioSetLocale(); } #endif - + status = TrioParse(TYPE_SCAN, format, parameters, arglist, argarray); if (status < 0) return status; @@ -6431,7 +6435,7 @@ TRIO_ARGS2((self, intPointer), self->processed++; self->committed++; } - + if (VALID(intPointer)) { *intPointer = self->current; @@ -6468,7 +6472,7 @@ TRIO_ARGS2((self, intPointer), self->committed++; self->processed++; } - + if (VALID(intPointer)) { *intPointer = self->current; @@ -6485,7 +6489,7 @@ TRIO_ARGS2((self, intPointer), int *intPointer) { trio_custom_t *data; - + assert(VALID(self)); assert(VALID(self->location)); @@ -6494,7 +6498,7 @@ TRIO_ARGS2((self, intPointer), self->current = (data->stream.in == NULL) ? NIL : (data->stream.in)(data->closure); - + if (self->current == NIL) { self->current = EOF; @@ -6504,7 +6508,7 @@ TRIO_ARGS2((self, intPointer), self->processed++; self->committed++; } - + if (VALID(intPointer)) { *intPointer = self->current; @@ -6537,7 +6541,7 @@ TRIO_ARGS2((self, intPointer), self->processed++; self->committed++; } - + if (VALID(intPointer)) { *intPointer = self->current; @@ -6578,7 +6582,7 @@ TRIO_VARGS2((format, va_alist), va_list args; assert(VALID(format)); - + TRIO_VA_START(args, format); status = TrioScan((trio_pointer_t)stdin, 0, TrioInStreamFile, @@ -6594,7 +6598,7 @@ TRIO_ARGS2((format, args), va_list args) { assert(VALID(format)); - + return TrioScan((trio_pointer_t)stdin, 0, TrioInStreamFile, format, &args, NULL); @@ -6607,7 +6611,7 @@ TRIO_ARGS2((format, args), trio_pointer_t *args) { assert(VALID(format)); - + return TrioScan((trio_pointer_t)stdin, 0, TrioInStreamFile, format, NULL, args); @@ -6628,7 +6632,7 @@ TRIO_VARGS3((file, format, va_alist), assert(VALID(file)); assert(VALID(format)); - + TRIO_VA_START(args, format); status = TrioScan((trio_pointer_t)file, 0, TrioInStreamFile, @@ -6646,7 +6650,7 @@ TRIO_ARGS3((file, format, args), { assert(VALID(file)); assert(VALID(format)); - + return TrioScan((trio_pointer_t)file, 0, TrioInStreamFile, format, &args, NULL); @@ -6661,7 +6665,7 @@ TRIO_ARGS3((file, format, args), { assert(VALID(file)); assert(VALID(format)); - + return TrioScan((trio_pointer_t)file, 0, TrioInStreamFile, format, NULL, args); @@ -6681,7 +6685,7 @@ TRIO_VARGS3((fd, format, va_alist), va_list args; assert(VALID(format)); - + TRIO_VA_START(args, format); status = TrioScan((trio_pointer_t)&fd, 0, TrioInStreamFileDescriptor, @@ -6698,7 +6702,7 @@ TRIO_ARGS3((fd, format, args), va_list args) { assert(VALID(format)); - + return TrioScan((trio_pointer_t)&fd, 0, TrioInStreamFileDescriptor, format, &args, NULL); @@ -6712,7 +6716,7 @@ TRIO_ARGS3((fd, format, args), trio_pointer_t *args) { assert(VALID(format)); - + return TrioScan((trio_pointer_t)&fd, 0, TrioInStreamFileDescriptor, format, NULL, args); @@ -6735,7 +6739,7 @@ TRIO_VARGS4((stream, closure, format, va_alist), assert(VALID(stream)); assert(VALID(format)); - + TRIO_VA_START(args, format); data.stream.in = stream; data.closure = closure; @@ -6753,7 +6757,7 @@ TRIO_ARGS4((stream, closure, format, args), va_list args) { trio_custom_t data; - + assert(VALID(stream)); assert(VALID(format)); @@ -6771,7 +6775,7 @@ TRIO_ARGS4((stream, closure, format, args), trio_pointer_t *args) { trio_custom_t data; - + assert(VALID(stream)); assert(VALID(format)); @@ -6795,7 +6799,7 @@ TRIO_VARGS3((buffer, format, va_alist), assert(VALID(buffer)); assert(VALID(format)); - + TRIO_VA_START(args, format); status = TrioScan((trio_pointer_t)&buffer, 0, TrioInStreamString, @@ -6813,7 +6817,7 @@ TRIO_ARGS3((buffer, format, args), { assert(VALID(buffer)); assert(VALID(format)); - + return TrioScan((trio_pointer_t)&buffer, 0, TrioInStreamString, format, &args, NULL); @@ -6828,7 +6832,7 @@ TRIO_ARGS3((buffer, format, args), { assert(VALID(buffer)); assert(VALID(format)); - + return TrioScan((trio_pointer_t)&buffer, 0, TrioInStreamString, format, NULL, args); diff --git a/lib/3rdparty/libxml2/trio.h b/lib/3rdparty/libxml2/trio.h index eab1b6d8fd0..108a7097bdf 100644 --- a/lib/3rdparty/libxml2/trio.h +++ b/lib/3rdparty/libxml2/trio.h @@ -28,7 +28,7 @@ * Use autoconf defines if present. Packages using trio must define * HAVE_CONFIG_H as a compiler option themselves. */ -#if defined(HAVE_CONFIG_H) +#if defined(TRIO_HAVE_CONFIG_H) # include "config.h" #endif diff --git a/lib/3rdparty/libxml2/trionan.c b/lib/3rdparty/libxml2/trionan.c index 95baae1e022..6fbabb5dbd8 100644 --- a/lib/3rdparty/libxml2/trionan.c +++ b/lib/3rdparty/libxml2/trionan.c @@ -261,7 +261,7 @@ trio_pinf(TRIO_NOARGS) static double result = 0.0; if (result == 0.0) { - + #if defined(INFINITY) && defined(__STDC_IEC_559__) result = (double)INFINITY; @@ -283,7 +283,7 @@ trio_pinf(TRIO_NOARGS) /* Force overflow */ result += HUGE_VAL; } - + # if defined(TRIO_PLATFORM_UNIX) signal(SIGFPE, signal_handler); # endif @@ -326,13 +326,13 @@ trio_nan(TRIO_NOARGS) static double result = 0.0; if (result == 0.0) { - + #if defined(TRIO_COMPILER_SUPPORTS_C99) result = nan(""); #elif defined(NAN) && defined(__STDC_IEC_559__) result = (double)NAN; - + #elif defined(USE_IEEE_754) result = trio_make_double(ieee_754_qnan_array); @@ -349,13 +349,13 @@ trio_nan(TRIO_NOARGS) # if defined(TRIO_PLATFORM_UNIX) void (*signal_handler)(int) = signal(SIGFPE, SIG_IGN); # endif - + result = trio_pinf() / trio_pinf(); - + # if defined(TRIO_PLATFORM_UNIX) signal(SIGFPE, signal_handler); # endif - + #endif } return result; @@ -381,7 +381,7 @@ TRIO_ARGS1((number), * the conservative approach and only use it for UNIX95. */ return isnan(number); - + #elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB) /* * Microsoft Visual C++ and Borland C++ Builder have an _isnan() @@ -398,20 +398,20 @@ TRIO_ARGS1((number), int is_special_quantity; is_special_quantity = trio_is_special_quantity(number, &has_mantissa); - + return (is_special_quantity && has_mantissa); - + #else /* * Fallback solution */ int status; double integral, fraction; - + # if defined(TRIO_PLATFORM_UNIX) void (*signal_handler)(int) = signal(SIGFPE, SIG_IGN); # endif - + status = (/* * NaN is the only number which does not compare to itself */ @@ -422,13 +422,13 @@ TRIO_ARGS1((number), ((number != 0.0) && (fraction = modf(number, &integral), integral == fraction))); - + # if defined(TRIO_PLATFORM_UNIX) signal(SIGFPE, signal_handler); # endif - + return status; - + #endif } @@ -459,7 +459,7 @@ TRIO_ARGS1((number), return isinf(number) ? ((number > 0.0) ? 1 : -1) : 0; - + #elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB) /* * Microsoft Visual C++ and Borland C++ Builder have an _fpclass() @@ -478,7 +478,7 @@ TRIO_ARGS1((number), int is_special_quantity; is_special_quantity = trio_is_special_quantity(number, &has_mantissa); - + return (is_special_quantity && !has_mantissa) ? ((number < 0.0) ? -1 : 1) : 0; @@ -488,23 +488,23 @@ TRIO_ARGS1((number), * Fallback solution. */ int status; - + # if defined(TRIO_PLATFORM_UNIX) void (*signal_handler)(int) = signal(SIGFPE, SIG_IGN); # endif - + double infinity = trio_pinf(); - + status = ((number == infinity) ? 1 : ((number == -infinity) ? -1 : 0)); - + # if defined(TRIO_PLATFORM_UNIX) signal(SIGFPE, signal_handler); # endif - + return status; - + #endif } @@ -526,7 +526,7 @@ TRIO_ARGS1((number), * C99 defines isfinite() as a macro. */ return isfinite(number); - + #elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB) /* * Microsoft Visual C++ and Borland C++ Builder use _finite(). @@ -547,7 +547,7 @@ TRIO_ARGS1((number), * Fallback solution. */ return ((trio_isinf(number) == 0) && (trio_isnan(number) == 0)); - + #endif } @@ -596,7 +596,7 @@ TRIO_ARGS2((number, is_negative), # define TRIO_NEGATIVE_ZERO FP_NEG_ZERO # define TRIO_POSITIVE_NORMAL FP_POS_NORM # define TRIO_NEGATIVE_NORMAL FP_NEG_NORM - + # elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB) /* * Microsoft Visual C++ and Borland C++ Builder have an _fpclass() @@ -613,7 +613,7 @@ TRIO_ARGS2((number, is_negative), # define TRIO_NEGATIVE_ZERO _FPCLASS_NZ # define TRIO_POSITIVE_NORMAL _FPCLASS_PN # define TRIO_NEGATIVE_NORMAL _FPCLASS_NN - + # elif defined(FP_PLUS_NORM) /* * HP-UX 9.x and 10.x have an fpclassify() function, that is different @@ -678,13 +678,13 @@ TRIO_ARGS2((number, is_negative), *is_negative = (number < 0.0); return TRIO_FP_NORMAL; } - + # else /* * Fallback solution. */ int rc; - + if (number == 0.0) { /* * In IEEE 754 the sign of zero is ignored in comparisons, so we @@ -716,7 +716,7 @@ TRIO_ARGS2((number, is_negative), } *is_negative = (number < 0.0); return TRIO_FP_NORMAL; - + # endif #endif } @@ -734,7 +734,7 @@ TRIO_ARGS1((number), double number) { int is_negative; - + (void)trio_fpclassify_and_signbit(number, &is_negative); return is_negative; } @@ -753,7 +753,7 @@ TRIO_ARGS1((number), double number) { int dummy; - + return trio_fpclassify_and_signbit(number, &dummy); } @@ -828,7 +828,7 @@ int main(TRIO_NOARGS) print_class("NNorm", -1.0); print_class("PSub", 1.01e-307 - 1.00e-307); print_class("NSub", 1.00e-307 - 1.01e-307); - + printf("NaN : %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n", my_nan, ((unsigned char *)&my_nan)[0], @@ -862,11 +862,11 @@ int main(TRIO_NOARGS) ((unsigned char *)&my_ninf)[6], ((unsigned char *)&my_ninf)[7], trio_isnan(my_ninf), trio_isinf(my_ninf)); - + # if defined(TRIO_PLATFORM_UNIX) signal_handler = signal(SIGFPE, SIG_IGN); # endif - + my_pinf = DBL_MAX + DBL_MAX; my_ninf = -my_pinf; my_nan = my_pinf / my_pinf; @@ -874,7 +874,7 @@ int main(TRIO_NOARGS) # if defined(TRIO_PLATFORM_UNIX) signal(SIGFPE, signal_handler); # endif - + printf("NaN : %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n", my_nan, ((unsigned char *)&my_nan)[0], @@ -908,7 +908,7 @@ int main(TRIO_NOARGS) ((unsigned char *)&my_ninf)[6], ((unsigned char *)&my_ninf)[7], trio_isnan(my_ninf), trio_isinf(my_ninf)); - + return 0; } #endif diff --git a/lib/3rdparty/libxml2/trionan.h b/lib/3rdparty/libxml2/trionan.h index c5de32b0cac..be6e718ac22 100644 --- a/lib/3rdparty/libxml2/trionan.h +++ b/lib/3rdparty/libxml2/trionan.h @@ -46,7 +46,7 @@ TRIO_PUBLIC double trio_pinf TRIO_PROTO((void)); * Return negative infinity. */ TRIO_PUBLIC double trio_ninf TRIO_PROTO((void)); - + /* * Return negative zero. */ diff --git a/lib/3rdparty/libxml2/triostr.c b/lib/3rdparty/libxml2/triostr.c index 30d13ac0624..e507645cbbf 100644 --- a/lib/3rdparty/libxml2/triostr.c +++ b/lib/3rdparty/libxml2/triostr.c @@ -165,11 +165,11 @@ TRIO_ARGS1((string), #if !defined(TRIO_MINIMAL) /** Append @p source at the end of @p target. - + @param target Target string. @param source Source string. @return Boolean value indicating success or failure. - + @pre @p target must point to a memory chunk with sufficient room to contain the @p target string and @p source string. @pre No boundary checking is performed, so insufficient memory will @@ -184,7 +184,7 @@ TRIO_ARGS2((target, source), { assert(target); assert(source); - + return (strcat(target, source) != NULL); } #endif /* !defined(TRIO_MINIMAL) */ @@ -192,12 +192,12 @@ TRIO_ARGS2((target, source), #if !defined(TRIO_MINIMAL) /** Append at most @p max characters from @p source to @p target. - + @param target Target string. @param max Maximum number of characters to append. @param source Source string. @return Boolean value indicating success or failure. - + @pre @p target must point to a memory chuck with sufficient room to contain the @p target string and the @p source string (at most @p max characters). @@ -213,12 +213,12 @@ TRIO_ARGS3((target, max, source), TRIO_CONST char *source) { size_t length; - + assert(target); assert(source); length = trio_length(target); - + if (max > length) { strncat(target, source, max - length - 1); @@ -244,7 +244,7 @@ TRIO_ARGS2((string, substring), { assert(string); assert(substring); - + return (0 != strstr(string, substring)); } #endif /* !defined(TRIO_MINIMAL) */ @@ -253,11 +253,11 @@ TRIO_ARGS2((string, substring), #if !defined(TRIO_MINIMAL) /** Copy @p source to @p target. - + @param target Target string. @param source Source string. @return Boolean value indicating success or failure. - + @pre @p target must point to a memory chunk with sufficient room to contain the @p source string. @pre No boundary checking is performed, so insufficient memory will @@ -272,7 +272,7 @@ TRIO_ARGS2((target, source), { assert(target); assert(source); - + (void)strcpy(target, source); return TRUE; } @@ -281,12 +281,12 @@ TRIO_ARGS2((target, source), /** Copy at most @p max characters from @p source to @p target. - + @param target Target string. @param max Maximum number of characters to append. @param source Source string. @return Boolean value indicating success or failure. - + @pre @p target must point to a memory chunk with sufficient room to contain the @p source string (at most @p max characters). @pre No boundary checking is performed, so insufficient memory will @@ -336,10 +336,10 @@ TRIO_ARGS2((source, size), /** Duplicate @p source. - + @param source Source string. @return A copy of the @p source string. - + @post @p target will be zero terminated. */ TRIO_STRING_PUBLIC char * @@ -354,11 +354,11 @@ TRIO_ARGS1((source), #if !defined(TRIO_MINIMAL) /** Duplicate at most @p max characters of @p source. - + @param source Source string. @param max Maximum number of characters to duplicate. @return A copy of the @p source string. - + @post @p target will be zero terminated. */ TRIO_STRING_PUBLIC char * @@ -383,11 +383,11 @@ trio_duplicate_max TRIO_ARGS2((source, max), /** Compare if two strings are equal. - + @param first First string. @param second Second string. @return Boolean indicating whether the two strings are equal or not. - + Case-insensitive comparison. */ TRIO_STRING_PUBLIC int @@ -422,11 +422,11 @@ TRIO_ARGS2((first, second), /** Compare if two strings are equal. - + @param first First string. @param second Second string. @return Boolean indicating whether the two strings are equal or not. - + Case-sensitive comparison. */ TRIO_STRING_PUBLIC int @@ -449,12 +449,12 @@ TRIO_ARGS2((first, second), #if !defined(TRIO_MINIMAL) /** Compare if two strings up until the first @p max characters are equal. - + @param first First string. @param max Maximum number of characters to compare. @param second Second string. @return Boolean indicating whether the two strings are equal or not. - + Case-sensitive comparison. */ TRIO_STRING_PUBLIC int @@ -478,7 +478,7 @@ TRIO_ARGS3((first, max, second), /** Compare if two strings are equal. - + @param first First string. @param second Second string. @return Boolean indicating whether the two strings are equal or not. @@ -504,12 +504,12 @@ TRIO_ARGS2((first, second), /** Compare if two strings up until the first @p max characters are equal. - + @param first First string. @param max Maximum number of characters to compare. @param second Second string. @return Boolean indicating whether the two strings are equal or not. - + Case-insensitive comparison. */ TRIO_STRING_PUBLIC int @@ -558,7 +558,7 @@ TRIO_ARGS1((error_number), int error_number) { #if defined(USE_STRERROR) - + return strerror(error_number); #elif defined(USE_SYS_ERRLIST) @@ -569,11 +569,11 @@ TRIO_ARGS1((error_number), return ((error_number < 0) || (error_number >= sys_nerr)) ? "unknown" : sys_errlist[error_number]; - + #else - + return "unknown"; - + #endif } @@ -603,7 +603,7 @@ TRIO_ARGS4((target, max, format, datetime), assert(format); assert(datetime); assert(max > 0); - + return strftime(target, max, format, datetime); } #endif /* !defined(TRIO_MINIMAL) */ @@ -630,7 +630,7 @@ TRIO_ARGS2((string, type), char ch; assert(string); - + switch (type) { case TRIO_HASH_PLAIN: @@ -719,7 +719,7 @@ TRIO_ARGS1((target), @return Boolean value indicating success or failure. Case-insensitive comparison. - + The following wildcards can be used @li @c * Match any number of characters. @li @c ? Match a single character. @@ -732,7 +732,7 @@ TRIO_ARGS2((string, pattern), { assert(string); assert(pattern); - + for (; ('*' != *pattern); ++pattern, ++string) { if (NIL == *string) @@ -757,7 +757,7 @@ TRIO_ARGS2((string, pattern), } } while (*string++); - + return FALSE; } #endif /* !defined(TRIO_MINIMAL) */ @@ -772,7 +772,7 @@ TRIO_ARGS2((string, pattern), @return Boolean value indicating success or failure. Case-sensitive comparison. - + The following wildcards can be used @li @c * Match any number of characters. @li @c ? Match a single character. @@ -785,7 +785,7 @@ TRIO_ARGS2((string, pattern), { assert(string); assert(pattern); - + for (; ('*' != *pattern); ++pattern, ++string) { if (NIL == *string) @@ -810,7 +810,7 @@ TRIO_ARGS2((string, pattern), } } while (*string++); - + return FALSE; } #endif /* !defined(TRIO_MINIMAL) */ @@ -837,7 +837,7 @@ TRIO_ARGS3((target, source, Function), assert(target); assert(source); assert(Function); - + while (*source != NIL) { *target++ = Function(*source++); @@ -894,7 +894,7 @@ TRIO_ARGS3((string, max, substring), assert(string); assert(substring); - + size = trio_length(substring); if (size <= max) { @@ -929,7 +929,7 @@ TRIO_ARGS2((string, delimiters), TRIO_CONST char *delimiters) { assert(delimiters); - + return strtok(string, delimiters); } #endif /* !defined(TRIO_MINIMAL) */ @@ -1064,7 +1064,7 @@ TRIO_ARGS2((source, endp), } } } - + value = integer + fraction; if (exponent != 0) { @@ -1146,7 +1146,7 @@ TRIO_ARGS3((string, endp, base), { assert(string); assert((base >= 2) && (base <= 36)); - + return strtol(string, endp, base); } @@ -1164,16 +1164,16 @@ TRIO_ARGS1((source), int source) { #if defined(USE_TOLOWER) - + return tolower(source); - + #else /* Does not handle locales or non-contiguous alphabetic characters */ return ((source >= (int)'A') && (source <= (int)'Z')) ? source - 'A' + 'a' : source; - + #endif } #endif /* !defined(TRIO_MINIMAL) */ @@ -1195,7 +1195,7 @@ TRIO_ARGS3((string, endp, base), { assert(string); assert((base >= 2) && (base <= 36)); - + return strtoul(string, endp, base); } #endif /* !defined(TRIO_MINIMAL) */ @@ -1213,16 +1213,16 @@ TRIO_ARGS1((source), int source) { #if defined(USE_TOUPPER) - + return toupper(source); - + #else /* Does not handle locales or non-contiguous alphabetic characters */ return ((source >= (int)'a') && (source <= (int)'z')) ? source - 'a' + 'A' : source; - + #endif } @@ -1266,7 +1266,7 @@ TRIO_STRING_PRIVATE trio_string_t * TrioStringAlloc(TRIO_NOARGS) { trio_string_t *self; - + self = (trio_string_t *)TRIO_MALLOC(sizeof(trio_string_t)); if (self) { @@ -1297,7 +1297,7 @@ TRIO_ARGS2((self, delta), new_size = (delta == 0) ? ( (self->allocated == 0) ? 1 : self->allocated * 2 ) : self->allocated + delta; - + new_content = (char *)TRIO_REALLOC(self->content, new_size); if (new_content) { @@ -1334,7 +1334,7 @@ TRIO_ARGS2((self, length), #if !defined(TRIO_MINIMAL) /** Create a new dynamic string. - + @param initial_size Initial size of the buffer. @return Newly allocated dynamic string, or NULL if memory allocation failed. */ @@ -1367,7 +1367,7 @@ TRIO_ARGS1((initial_size), /** Deallocate the dynamic string and its contents. - + @param self Dynamic string */ TRIO_STRING_PUBLIC void @@ -1376,7 +1376,7 @@ TRIO_ARGS1((self), trio_string_t *self) { assert(self); - + if (self) { trio_destroy(self->content); @@ -1388,11 +1388,11 @@ TRIO_ARGS1((self), #if !defined(TRIO_MINIMAL) /** Get a pointer to the content. - + @param self Dynamic string. @param offset Offset into content. @return Pointer to the content. - + @p Offset can be zero, positive, or negative. If @p offset is zero, then the start of the content will be returned. If @p offset is positive, then a pointer to @p offset number of characters from the beginning of the @@ -1407,7 +1407,7 @@ TRIO_ARGS2((self, offset), int offset) { char *result = NULL; - + assert(self); if (self->content != NULL) @@ -1440,10 +1440,10 @@ TRIO_ARGS2((self, offset), /** Extract the content. - + @param self Dynamic String @return Content of dynamic string. - + The content is removed from the dynamic string. This enables destruction of the dynamic string without deallocation of the content. */ @@ -1453,7 +1453,7 @@ TRIO_ARGS1((self), trio_string_t *self) { char *result; - + assert(self); result = self->content; @@ -1467,13 +1467,13 @@ TRIO_ARGS1((self), #if !defined(TRIO_MINIMAL) /** Set the content of the dynamic string. - + @param self Dynamic String @param buffer The new content. - + Sets the content of the dynamic string to a copy @p buffer. An existing content will be deallocated first, if necessary. - + @remark This function will make a copy of @p buffer. You are responsible for deallocating @p buffer yourself. @@ -1521,7 +1521,7 @@ TRIO_ARGS1((self), #if !defined(TRIO_MINIMAL) /** Append the second string to the first. - + @param self Dynamic string to be modified. @param other Dynamic string to copy from. @return Boolean value indicating success or failure. @@ -1533,7 +1533,7 @@ TRIO_ARGS2((self, other), trio_string_t *other) { size_t length; - + assert(self); assert(other); @@ -1543,7 +1543,7 @@ TRIO_ARGS2((self, other), trio_copy(&self->content[self->length], other->content); self->length = length; return TRUE; - + error: return FALSE; } @@ -1561,7 +1561,7 @@ TRIO_ARGS2((self, other), TRIO_CONST char *other) { size_t length; - + assert(self); assert(other); @@ -1571,7 +1571,7 @@ TRIO_ARGS2((self, other), trio_copy(&self->content[self->length], other); self->length = length; return TRUE; - + error: return FALSE; } @@ -1597,7 +1597,7 @@ TRIO_ARGS2((self, character), self->content[self->length] = character; self->length++; return TRUE; - + error: return FALSE; } @@ -1606,7 +1606,7 @@ TRIO_ARGS2((self, character), #if !defined(TRIO_MINIMAL) /** Search for the first occurrence of second parameter in the first. - + @param self Dynamic string to be modified. @param other Dynamic string to copy from. @return Boolean value indicating success or failure. @@ -1691,7 +1691,7 @@ TRIO_ARGS1((other), trio_string_t *other) { trio_string_t *self; - + assert(other); self = TrioStringAlloc(); @@ -1722,7 +1722,7 @@ TRIO_ARGS1((other), TRIO_CONST char *other) { trio_string_t *self; - + assert(other); self = TrioStringAlloc(); diff --git a/lib/3rdparty/libxml2/uri.c b/lib/3rdparty/libxml2/uri.c index 1ae5768b537..4ab0ce2e253 100644 --- a/lib/3rdparty/libxml2/uri.c +++ b/lib/3rdparty/libxml2/uri.c @@ -1,5 +1,5 @@ /** - * uri.c: set of generic URI related routines + * uri.c: set of generic URI related routines * * Reference: RFCs 3986, 2732 and 2373 * @@ -18,6 +18,37 @@ #include #include +/** + * MAX_URI_LENGTH: + * + * The definition of the URI regexp in the above RFC has no size limit + * In practice they are usually relativey short except for the + * data URI scheme as defined in RFC 2397. Even for data URI the usual + * maximum size before hitting random practical limits is around 64 KB + * and 4KB is usually a maximum admitted limit for proper operations. + * The value below is more a security limit than anything else and + * really should never be hit by 'normal' operations + * Set to 1 MByte in 2012, this is only enforced on output + */ +#define MAX_URI_LENGTH 1024 * 1024 + +static void +xmlURIErrMemory(const char *extra) +{ + if (extra) + __xmlRaiseError(NULL, NULL, NULL, + NULL, NULL, XML_FROM_URI, + XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, + extra, NULL, NULL, 0, 0, + "Memory allocation failed : %s\n", extra); + else + __xmlRaiseError(NULL, NULL, NULL, + NULL, NULL, XML_FROM_URI, + XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, + NULL, NULL, NULL, 0, 0, + "Memory allocation failed\n"); +} + static void xmlCleanURI(xmlURIPtr uri); /* @@ -980,14 +1011,38 @@ xmlCreateURI(void) { ret = (xmlURIPtr) xmlMalloc(sizeof(xmlURI)); if (ret == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlCreateURI: out of memory\n"); + xmlURIErrMemory("creating URI structure\n"); return(NULL); } memset(ret, 0, sizeof(xmlURI)); return(ret); } +/** + * xmlSaveUriRealloc: + * + * Function to handle properly a reallocation when saving an URI + * Also imposes some limit on the length of an URI string output + */ +static xmlChar * +xmlSaveUriRealloc(xmlChar *ret, int *max) { + xmlChar *temp; + int tmp; + + if (*max > MAX_URI_LENGTH) { + xmlURIErrMemory("reaching arbitrary MAX_URI_LENGTH limit\n"); + return(NULL); + } + tmp = *max * 2; + temp = (xmlChar *) xmlRealloc(ret, (tmp + 1)); + if (temp == NULL) { + xmlURIErrMemory("saving URI\n"); + return(NULL); + } + *max = tmp; + return(temp); +} + /** * xmlSaveUri: * @uri: pointer to an xmlURI @@ -1010,8 +1065,7 @@ xmlSaveUri(xmlURIPtr uri) { max = 80; ret = (xmlChar *) xmlMallocAtomic((max + 1) * sizeof(xmlChar)); if (ret == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); + xmlURIErrMemory("saving URI\n"); return(NULL); } len = 0; @@ -1020,28 +1074,16 @@ xmlSaveUri(xmlURIPtr uri) { p = uri->scheme; while (*p != 0) { if (len >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; ret = temp; } ret[len++] = *p++; } if (len >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } ret[len++] = ':'; } @@ -1049,15 +1091,9 @@ xmlSaveUri(xmlURIPtr uri) { p = uri->opaque; while (*p != 0) { if (len + 3 >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } if (IS_RESERVED(*(p)) || IS_UNRESERVED(*(p))) ret[len++] = *p++; @@ -1072,15 +1108,9 @@ xmlSaveUri(xmlURIPtr uri) { } else { if (uri->server != NULL) { if (len + 3 >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } ret[len++] = '/'; ret[len++] = '/'; @@ -1088,16 +1118,9 @@ xmlSaveUri(xmlURIPtr uri) { p = uri->user; while (*p != 0) { if (len + 3 >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, - (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } if ((IS_UNRESERVED(*(p))) || ((*(p) == ';')) || ((*(p) == ':')) || @@ -1114,78 +1137,43 @@ xmlSaveUri(xmlURIPtr uri) { } } if (len + 3 >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, - (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } ret[len++] = '@'; } p = uri->server; while (*p != 0) { if (len >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, - (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } ret[len++] = *p++; } if (uri->port > 0) { if (len + 10 >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, - (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } len += snprintf((char *) &ret[len], max - len, ":%d", uri->port); } } else if (uri->authority != NULL) { if (len + 3 >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, - (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } ret[len++] = '/'; ret[len++] = '/'; p = uri->authority; while (*p != 0) { if (len + 3 >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, - (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } if ((IS_UNRESERVED(*(p))) || ((*(p) == '$')) || ((*(p) == ',')) || ((*(p) == ';')) || @@ -1202,16 +1190,9 @@ xmlSaveUri(xmlURIPtr uri) { } } else if (uri->scheme != NULL) { if (len + 3 >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, - (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } ret[len++] = '/'; ret[len++] = '/'; @@ -1229,14 +1210,9 @@ xmlSaveUri(xmlURIPtr uri) { (p[2] == ':') && (xmlStrEqual(BAD_CAST uri->scheme, BAD_CAST "file"))) { if (len + 3 >= max) { - max *= 2; - ret = (xmlChar *) xmlRealloc(ret, - (max + 1) * sizeof(xmlChar)); - if (ret == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - return(NULL); - } + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } ret[len++] = *p++; ret[len++] = *p++; @@ -1244,16 +1220,9 @@ xmlSaveUri(xmlURIPtr uri) { } while (*p != 0) { if (len + 3 >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, - (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } if ((IS_UNRESERVED(*(p))) || ((*(p) == '/')) || ((*(p) == ';')) || ((*(p) == '@')) || ((*(p) == '&')) || @@ -1271,63 +1240,35 @@ xmlSaveUri(xmlURIPtr uri) { } if (uri->query_raw != NULL) { if (len + 1 >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, - (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } ret[len++] = '?'; p = uri->query_raw; while (*p != 0) { if (len + 1 >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, - (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } ret[len++] = *p++; } } else if (uri->query != NULL) { if (len + 3 >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, - (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } ret[len++] = '?'; p = uri->query; while (*p != 0) { if (len + 3 >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, - (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } - if ((IS_UNRESERVED(*(p))) || (IS_RESERVED(*(p)))) + if ((IS_UNRESERVED(*(p))) || (IS_RESERVED(*(p)))) ret[len++] = *p++; else { int val = *(unsigned char *)p++; @@ -1341,33 +1282,19 @@ xmlSaveUri(xmlURIPtr uri) { } if (uri->fragment != NULL) { if (len + 3 >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, - (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } ret[len++] = '#'; p = uri->fragment; while (*p != 0) { if (len + 3 >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, - (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } - if ((IS_UNRESERVED(*(p))) || (IS_RESERVED(*(p)))) + if ((IS_UNRESERVED(*(p))) || (IS_RESERVED(*(p)))) ret[len++] = *p++; else { int val = *(unsigned char *)p++; @@ -1379,18 +1306,16 @@ xmlSaveUri(xmlURIPtr uri) { } } if (len >= max) { - max *= 2; - temp = (xmlChar *) xmlRealloc(ret, (max + 1) * sizeof(xmlChar)); - if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlSaveUri: out of memory\n"); - xmlFree(ret); - return(NULL); - } - ret = temp; + temp = xmlSaveUriRealloc(ret, &max); + if (temp == NULL) goto mem_error; + ret = temp; } ret[len] = 0; return(ret); + +mem_error: + xmlFree(ret); + return(NULL); } /** @@ -1604,10 +1529,11 @@ xmlNormalizeURIPath(char *path) { break; } /* Valgrind complained, strcpy(cur, segp + 3); */ - /* string will overlap, do not use strcpy */ - tmp = cur; - segp += 3; - while ((*tmp++ = *segp++) != 0); + /* string will overlap, do not use strcpy */ + tmp = cur; + segp += 3; + while ((*tmp++ = *segp++) != 0) + ; /* If there are no previous segments, then keep going from here. */ segp = cur; @@ -1692,8 +1618,7 @@ xmlURIUnescapeString(const char *str, int len, char *target) { if (target == NULL) { ret = (char *) xmlMallocAtomic(len + 1); if (ret == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlURIUnescapeString: out of memory\n"); + xmlURIErrMemory("unescaping URI value\n"); return(NULL); } } else @@ -1703,14 +1628,14 @@ xmlURIUnescapeString(const char *str, int len, char *target) { while(len > 0) { if ((len > 2) && (*in == '%') && (is_hex(in[1])) && (is_hex(in[2]))) { in++; - if ((*in >= '0') && (*in <= '9')) + if ((*in >= '0') && (*in <= '9')) *out = (*in - '0'); else if ((*in >= 'a') && (*in <= 'f')) *out = (*in - 'a') + 10; else if ((*in >= 'A') && (*in <= 'F')) *out = (*in - 'A') + 10; in++; - if ((*in >= '0') && (*in <= '9')) + if ((*in >= '0') && (*in <= '9')) *out = *out * 16 + (*in - '0'); else if ((*in >= 'a') && (*in <= 'f')) *out = *out * 16 + (*in - 'a') + 10; @@ -1743,8 +1668,7 @@ xmlURIEscapeStr(const xmlChar *str, const xmlChar *list) { xmlChar *ret, ch; xmlChar *temp; const xmlChar *in; - - unsigned int len, out; + int len, out; if (str == NULL) return(NULL); @@ -1756,19 +1680,16 @@ xmlURIEscapeStr(const xmlChar *str, const xmlChar *list) { len += 20; ret = (xmlChar *) xmlMallocAtomic(len); if (ret == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlURIEscapeStr: out of memory\n"); + xmlURIErrMemory("escaping URI value\n"); return(NULL); } in = (const xmlChar *) str; out = 0; while(*in != 0) { if (len - out <= 3) { - len += 20; - temp = (xmlChar *) xmlRealloc(ret, len); + temp = xmlSaveUriRealloc(ret, &len); if (temp == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlURIEscapeStr: out of memory\n"); + xmlURIErrMemory("escaping URI value\n"); xmlFree(ret); return(NULL); } @@ -1823,10 +1744,9 @@ xmlURIEscape(const xmlChar * str) int ret2; #define NULLCHK(p) if(!p) { \ - xmlGenericError(xmlGenericErrorContext, \ - "xmlURIEscape: out of memory\n"); \ - xmlFreeURI(uri); \ - return NULL; } \ + xmlURIErrMemory("escaping URI value\n"); \ + xmlFreeURI(uri); \ + return NULL; } \ if (str == NULL) return (NULL); @@ -1869,7 +1789,7 @@ xmlURIEscape(const xmlChar * str) if (uri->user) { segment = xmlURIEscapeStr(BAD_CAST uri->user, BAD_CAST ";:&=+$,"); NULLCHK(segment) - ret = xmlStrcat(ret,BAD_CAST "//"); + ret = xmlStrcat(ret,BAD_CAST "//"); ret = xmlStrcat(ret, segment); ret = xmlStrcat(ret, BAD_CAST "@"); xmlFree(segment); @@ -1947,7 +1867,7 @@ xmlURIEscape(const xmlChar * str) * * Computes he final URI of the reference done by checking that * the given URI is valid, and building the final URI using the - * base URI. This is processed according to section 5.2 of the + * base URI. This is processed according to section 5.2 of the * RFC 2396 * * 5.2. Resolving Relative References to Absolute Form @@ -1971,7 +1891,7 @@ xmlBuildURI(const xmlChar *URI, const xmlChar *base) { * as a reference to "." rather than as a synonym for the current * URI. Should we do that here? */ - if (URI == NULL) + if (URI == NULL) ret = -1; else { if (*URI) { @@ -2042,7 +1962,7 @@ xmlBuildURI(const xmlChar *URI, const xmlChar *base) { res->server = xmlMemStrdup(bas->server); if (bas->user != NULL) res->user = xmlMemStrdup(bas->user); - res->port = bas->port; + res->port = bas->port; } if (bas->path != NULL) res->path = xmlMemStrdup(bas->path); @@ -2071,7 +1991,7 @@ xmlBuildURI(const xmlChar *URI, const xmlChar *base) { } if (bas->scheme != NULL) res->scheme = xmlMemStrdup(bas->scheme); - + if (ref->query_raw != NULL) res->query_raw = xmlMemStrdup(ref->query_raw); else if (ref->query != NULL) @@ -2093,7 +2013,7 @@ xmlBuildURI(const xmlChar *URI, const xmlChar *base) { res->server = xmlMemStrdup(ref->server); if (ref->user != NULL) res->user = xmlMemStrdup(ref->user); - res->port = ref->port; + res->port = ref->port; } if (ref->path != NULL) res->path = xmlMemStrdup(ref->path); @@ -2105,7 +2025,7 @@ xmlBuildURI(const xmlChar *URI, const xmlChar *base) { res->server = xmlMemStrdup(bas->server); if (bas->user != NULL) res->user = xmlMemStrdup(bas->user); - res->port = bas->port; + res->port = bas->port; } /* @@ -2133,8 +2053,7 @@ xmlBuildURI(const xmlChar *URI, const xmlChar *base) { len += strlen(bas->path); res->path = (char *) xmlMallocAtomic(len); if (res->path == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlBuildURI: out of memory\n"); + xmlURIErrMemory("resolving URI against base\n"); goto done; } res->path[0] = 0; @@ -2380,7 +2299,7 @@ xmlBuildRelativeURI (const xmlChar * URI, const xmlChar * base) } len = xmlStrlen (uptr) + 1; } - + if (nbslash == 0) { if (uptr != NULL) /* exception characters from xmlSaveUri */ @@ -2395,8 +2314,7 @@ xmlBuildRelativeURI (const xmlChar * URI, const xmlChar * base) */ val = (xmlChar *) xmlMalloc (len + 3 * nbslash); if (val == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlBuildRelativeURI: out of memory\n"); + xmlURIErrMemory("building relative URI\n"); goto done; } vptr = val; @@ -2448,14 +2366,14 @@ done: * xmlCanonicPath: * @path: the resource locator in a filesystem notation * - * Constructs a canonic path from the specified path. + * Constructs a canonic path from the specified path. * - * Returns a new canonic path, or a duplicate of the path parameter if the + * Returns a new canonic path, or a duplicate of the path parameter if the * construction fails. The caller is responsible for freeing the memory occupied - * by the returned string. If there is insufficient memory available, or the + * by the returned string. If there is insufficient memory available, or the * argument is NULL, the function returns NULL. */ -#define IS_WINDOWS_PATH(p) \ +#define IS_WINDOWS_PATH(p) \ ((p != NULL) && \ (((p[0] >= 'a') && (p[0] <= 'z')) || \ ((p[0] >= 'A') && (p[0] <= 'Z'))) && \ @@ -2467,7 +2385,7 @@ xmlCanonicPath(const xmlChar *path) * For Windows implementations, additional work needs to be done to * replace backslashes in pathnames with "forward slashes" */ -#if defined(_WIN32) && !defined(__CYGWIN__) +#if defined(_WIN32) && !defined(__CYGWIN__) int len = 0; int i = 0; xmlChar *p = NULL; @@ -2479,7 +2397,20 @@ xmlCanonicPath(const xmlChar *path) if (path == NULL) return(NULL); - /* sanitize filename starting with // so it can be used as URI */ +#if defined(_WIN32) + /* + * We must not change the backslashes to slashes if the the path + * starts with \\?\ + * Those paths can be up to 32k characters long. + * Was added specifically for OpenOffice, those paths can't be converted + * to URIs anyway. + */ + if ((path[0] == '\\') && (path[1] == '\\') && (path[2] == '?') && + (path[3] == '\\') ) + return xmlStrdup((const xmlChar *) path); +#endif + + /* sanitize filename starting with // so it can be used as URI */ if ((path[0] == '/') && (path[1] == '/') && (path[2] != '/')) path++; @@ -2526,7 +2457,7 @@ xmlCanonicPath(const xmlChar *path) path_processing: /* For Windows implementations, replace backslashes with 'forward slashes' */ -#if defined(_WIN32) && !defined(__CYGWIN__) +#if defined(_WIN32) && !defined(__CYGWIN__) /* * Create a URI structure */ @@ -2583,7 +2514,7 @@ path_processing: * * Constructs an URI expressing the existing path * - * Returns a new URI, or a duplicate of the path parameter if the + * Returns a new URI, or a duplicate of the path parameter if the * construction fails. The caller is responsible for freeing the memory * occupied by the returned string. If there is insufficient memory available, * or the argument is NULL, the function returns NULL. @@ -2606,7 +2537,7 @@ xmlPathToURI(const xmlChar *path) if (cal == NULL) return(NULL); #if defined(_WIN32) && !defined(__CYGWIN__) - /* xmlCanonicPath can return an URI on Windows (is that the intended behaviour?) + /* xmlCanonicPath can return an URI on Windows (is that the intended behaviour?) If 'cal' is a valid URI allready then we are done here, as continuing would make it invalid. */ if ((uri = xmlParseURI((const char *) cal)) != NULL) { diff --git a/lib/3rdparty/libxml2/valid.c b/lib/3rdparty/libxml2/valid.c index 2cb32f32c84..10bc4f44f89 100644 --- a/lib/3rdparty/libxml2/valid.c +++ b/lib/3rdparty/libxml2/valid.c @@ -31,7 +31,7 @@ static xmlElementPtr xmlGetDtdElementDesc2(xmlDtdPtr dtd, const xmlChar *name, /* #define DEBUG_VALID_ALGO */ /* #define DEBUG_REGEXP_ALGO */ -#define TODO \ +#define TODO \ xmlGenericError(xmlGenericErrorContext, \ "Unimplemented block at %s:%d\n", \ __FILE__, __LINE__); @@ -301,7 +301,7 @@ vstateVPush(xmlValidCtxtPtr ctxt, xmlElementPtr elemDecl, xmlNodePtr node) { if (elemDecl->contModel == NULL) xmlValidBuildContentModel(ctxt, elemDecl); if (elemDecl->contModel != NULL) { - ctxt->vstateTab[ctxt->vstateNr].exec = + ctxt->vstateTab[ctxt->vstateNr].exec = xmlRegNewExecCtxt(elemDecl->contModel, NULL, NULL); } else { ctxt->vstateTab[ctxt->vstateNr].exec = NULL; @@ -623,7 +623,7 @@ xmlValidStateDebug(xmlValidCtxtPtr ctxt) { #define DEBUG_VALID_STATE(n,c) xmlValidStateDebug(ctxt); #define DEBUG_VALID_MSG(m) \ xmlGenericError(xmlGenericErrorContext, "%s\n", m); - + #else #define DEBUG_VALID_STATE(n,c) #define DEBUG_VALID_MSG(m) @@ -676,7 +676,7 @@ xmlValidBuildAContentModel(xmlElementContentPtr content, xmlAutomataStatePtr oldstate = ctxt->state; xmlChar fn[50]; xmlChar *fullname; - + fullname = xmlBuildQName(content->name, content->prefix, fn, 50); if (fullname == NULL) { xmlVErrMemory(ctxt, "Building content model"); @@ -701,9 +701,9 @@ xmlValidBuildAContentModel(xmlElementContentPtr content, break; case XML_ELEMENT_CONTENT_MULT: ctxt->state = xmlAutomataNewEpsilon(ctxt->am, - ctxt->state, NULL); + ctxt->state, NULL); xmlAutomataNewTransition(ctxt->am, - ctxt->state, ctxt->state, fullname, NULL); + ctxt->state, ctxt->state, fullname, NULL); break; } if ((fullname != fn) && (fullname != content->name)) @@ -752,7 +752,7 @@ xmlValidBuildAContentModel(xmlElementContentPtr content, xmlElementContentOccur ocur; ocur = content->ocur; - if ((ocur == XML_ELEMENT_CONTENT_PLUS) || + if ((ocur == XML_ELEMENT_CONTENT_PLUS) || (ocur == XML_ELEMENT_CONTENT_MULT)) { ctxt->state = xmlAutomataNewEpsilon(ctxt->am, ctxt->state, NULL); @@ -944,7 +944,7 @@ xmlNewDocElementContent(xmlDocPtr doc, const xmlChar *name, } break; default: - xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, + xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, "Internal: ELEMENT content corrupted invalid type\n", NULL); return(NULL); @@ -1001,7 +1001,7 @@ xmlNewElementContent(const xmlChar *name, xmlElementContentType type) { * @cur: An element content pointer. * * Build a copy of an element content description. - * + * * Returns the new xmlElementContentPtr or NULL in case of error. */ xmlElementContentPtr @@ -1028,7 +1028,7 @@ xmlCopyDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur) { else ret->name = xmlStrdup(cur->name); } - + if (cur->prefix != NULL) { if (dict) ret->prefix = xmlDictLookup(dict, cur->prefix, -1); @@ -1058,7 +1058,7 @@ xmlCopyDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur) { else tmp->name = xmlStrdup(cur->name); } - + if (cur->prefix != NULL) { if (dict) tmp->prefix = xmlDictLookup(dict, cur->prefix, -1); @@ -1082,7 +1082,7 @@ xmlCopyDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur) { * * Build a copy of an element content description. * Deprecated, use xmlCopyDocElementContent instead - * + * * Returns the new xmlElementContentPtr or NULL in case of error. */ xmlElementContentPtr @@ -1114,7 +1114,7 @@ xmlFreeDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur) { case XML_ELEMENT_CONTENT_OR: break; default: - xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, + xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, "Internal: ELEMENT content corrupted invalid type\n", NULL); return; @@ -1200,7 +1200,7 @@ xmlDumpElementContent(xmlBufferPtr buf, xmlElementContentPtr content, int glob) xmlDumpElementContent(buf, content->c2, 0); break; default: - xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, + xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, "Internal: ELEMENT content corrupted invalid type\n", NULL); } @@ -1397,7 +1397,7 @@ xmlAddElementDecl(xmlValidCtxtPtr ctxt, switch (type) { case XML_ELEMENT_TYPE_EMPTY: if (content != NULL) { - xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, + xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, "xmlAddElementDecl: content != NULL for EMPTY\n", NULL); return(NULL); @@ -1405,7 +1405,7 @@ xmlAddElementDecl(xmlValidCtxtPtr ctxt, break; case XML_ELEMENT_TYPE_ANY: if (content != NULL) { - xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, + xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, "xmlAddElementDecl: content != NULL for ANY\n", NULL); return(NULL); @@ -1413,7 +1413,7 @@ xmlAddElementDecl(xmlValidCtxtPtr ctxt, break; case XML_ELEMENT_TYPE_MIXED: if (content == NULL) { - xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, + xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, "xmlAddElementDecl: content == NULL for MIXED\n", NULL); return(NULL); @@ -1421,14 +1421,14 @@ xmlAddElementDecl(xmlValidCtxtPtr ctxt, break; case XML_ELEMENT_TYPE_ELEMENT: if (content == NULL) { - xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, + xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, "xmlAddElementDecl: content == NULL for ELEMENT\n", NULL); return(NULL); } break; default: - xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, + xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, "Internal: ELEMENT decl corrupted invalid type\n", NULL); return(NULL); @@ -1608,7 +1608,7 @@ xmlFreeElementTable(xmlElementTablePtr table) { * @elem: An element * * Build a copy of an element. - * + * * Returns the new xmlElementPtr or NULL in case of error. */ static xmlElementPtr @@ -1642,7 +1642,7 @@ xmlCopyElement(xmlElementPtr elem) { * @table: An element table * * Build a copy of an element table. - * + * * Returns the new xmlElementTablePtr or NULL in case of error. */ xmlElementTablePtr @@ -1707,7 +1707,7 @@ xmlDumpElementDecl(xmlBufferPtr buf, xmlElementPtr elem) { xmlBufferWriteChar(buf, ">\n"); break; default: - xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, + xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, "Internal: ELEMENT struct corrupted invalid type\n", NULL); } @@ -1818,7 +1818,7 @@ static void xmlDumpEnumeration(xmlBufferPtr buf, xmlEnumerationPtr cur) { if ((buf == NULL) || (cur == NULL)) return; - + xmlBufferWriteCHAR(buf, cur->name); if (cur->next == NULL) xmlBufferWriteChar(buf, ")"); @@ -1973,13 +1973,13 @@ xmlAddAttributeDecl(xmlValidCtxtPtr ctxt, case XML_ATTRIBUTE_NOTATION: break; default: - xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, + xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, "Internal: ATTRIBUTE struct corrupted invalid type\n", NULL); xmlFreeEnumeration(tree); return(NULL); } - if ((defaultValue != NULL) && + if ((defaultValue != NULL) && (!xmlValidateAttributeValueInternal(dtd->doc, type, defaultValue))) { xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_ATTRIBUTE_DEFAULT, "Attribute %s of %s: invalid default value\n", @@ -2153,7 +2153,7 @@ xmlFreeAttributeTable(xmlAttributeTablePtr table) { * @attr: An attribute * * Build a copy of an attribute. - * + * * Returns the new xmlAttributePtr or NULL in case of error. */ static xmlAttributePtr @@ -2186,7 +2186,7 @@ xmlCopyAttribute(xmlAttributePtr attr) { * @table: An attribute table * * Build a copy of an attribute table. - * + * * Returns the new xmlAttributeTablePtr or NULL in case of error. */ xmlAttributeTablePtr @@ -2251,7 +2251,7 @@ xmlDumpAttributeDecl(xmlBufferPtr buf, xmlAttributePtr attr) { xmlDumpEnumeration(buf, attr->tree); break; default: - xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, + xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, "Internal: ATTRIBUTE struct corrupted invalid type\n", NULL); } @@ -2268,7 +2268,7 @@ xmlDumpAttributeDecl(xmlBufferPtr buf, xmlAttributePtr attr) { xmlBufferWriteChar(buf, " #FIXED"); break; default: - xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, + xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, "Internal: ATTRIBUTE struct corrupted invalid def\n", NULL); } @@ -2398,7 +2398,7 @@ xmlAddNotationDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, */ if (xmlHashAddEntry(table, name, ret)) { #ifdef LIBXML_VALID_ENABLED - xmlErrValid(NULL, XML_DTD_NOTATION_REDEFINED, + xmlErrValid(NULL, XML_DTD_NOTATION_REDEFINED, "xmlAddNotationDecl: %s already defined\n", (const char *) name); #endif /* LIBXML_VALID_ENABLED */ @@ -2425,7 +2425,7 @@ xmlFreeNotationTable(xmlNotationTablePtr table) { * @nota: A notation * * Build a copy of a notation. - * + * * Returns the new xmlNotationPtr or NULL in case of error. */ static xmlNotationPtr @@ -2457,7 +2457,7 @@ xmlCopyNotation(xmlNotationPtr nota) { * @table: A notation table * * Build a copy of a notation table. - * + * * Returns the new xmlNotationTablePtr or NULL in case of error. */ xmlNotationTablePtr @@ -2535,7 +2535,7 @@ xmlDumpNotationTable(xmlBufferPtr buf, xmlNotationTablePtr table) { * current scope */ #define DICT_FREE(str) \ - if ((str) && ((!dict) || \ + if ((str) && ((!dict) || \ (xmlDictOwns(dict, (const xmlChar *)(str)) == 0))) \ xmlFree((char *)(str)); @@ -2573,7 +2573,7 @@ xmlFreeID(xmlIDPtr id) { * * Returns NULL if not, otherwise the new xmlIDPtr */ -xmlIDPtr +xmlIDPtr xmlAddID(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value, xmlAttrPtr attr) { xmlIDPtr ret; @@ -2687,7 +2687,7 @@ xmlIsID(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr) { ((xmlStrEqual(BAD_CAST "name", attr->name)) && ((elem == NULL) || (xmlStrEqual(elem->name, BAD_CAST "a"))))) return(1); - return(0); + return(0); } else if (elem == NULL) { return(0); } else { @@ -2741,7 +2741,7 @@ xmlRemoveID(xmlDocPtr doc, xmlAttrPtr attr) { if (doc == NULL) return(-1); if (attr == NULL) return(-1); table = (xmlIDTablePtr) doc->ids; - if (table == NULL) + if (table == NULL) return(-1); if (attr == NULL) @@ -2769,7 +2769,7 @@ xmlRemoveID(xmlDocPtr doc, xmlAttrPtr attr) { * * Returns NULL if not found, otherwise the xmlAttrPtr defining the ID */ -xmlAttrPtr +xmlAttrPtr xmlGetID(xmlDocPtr doc, const xmlChar *ID) { xmlIDTablePtr table; xmlIDPtr id; @@ -2783,7 +2783,7 @@ xmlGetID(xmlDocPtr doc, const xmlChar *ID) { } table = (xmlIDTablePtr) doc->ids; - if (table == NULL) + if (table == NULL) return(NULL); id = xmlHashLookup(table, ID); @@ -2804,7 +2804,7 @@ xmlGetID(xmlDocPtr doc, const xmlChar *ID) { * Refs * * * ************************************************************************/ -typedef struct xmlRemoveMemo_t +typedef struct xmlRemoveMemo_t { xmlListPtr l; xmlAttrPtr ap; @@ -2812,7 +2812,7 @@ typedef struct xmlRemoveMemo_t typedef xmlRemoveMemo *xmlRemoveMemoPtr; -typedef struct xmlValidateMemo_t +typedef struct xmlValidateMemo_t { xmlValidCtxtPtr ctxt; const xmlChar *name; @@ -2895,7 +2895,7 @@ xmlDummyCompare(const void *data0 ATTRIBUTE_UNUSED, * * Returns NULL if not, otherwise the new xmlRefPtr */ -xmlRefPtr +xmlRefPtr xmlAddRef(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value, xmlAttrPtr attr) { xmlRefPtr ret; @@ -3023,7 +3023,7 @@ xmlIsRef(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr) { return(0); } else if (doc->type == XML_HTML_DOCUMENT_NODE) { /* TODO @@@ */ - return(0); + return(0); } else { xmlAttributePtr attrDecl; @@ -3060,7 +3060,7 @@ xmlRemoveRef(xmlDocPtr doc, xmlAttrPtr attr) { if (doc == NULL) return(-1); if (attr == NULL) return(-1); table = (xmlRefTablePtr) doc->refs; - if (table == NULL) + if (table == NULL) return(-1); if (attr == NULL) @@ -3086,7 +3086,7 @@ xmlRemoveRef(xmlDocPtr doc, xmlAttrPtr attr) { */ target.l = ref_list; target.ap = attr; - + /* Remove the supplied attr from our list */ xmlListWalk(ref_list, xmlWalkRemoveRef, &target); @@ -3103,11 +3103,11 @@ xmlRemoveRef(xmlDocPtr doc, xmlAttrPtr attr) { * @doc: pointer to the document * @ID: the ID value * - * Find the set of references for the supplied ID. + * Find the set of references for the supplied ID. * * Returns NULL if not found, otherwise node set for the ID. */ -xmlListPtr +xmlListPtr xmlGetRefs(xmlDocPtr doc, const xmlChar *ID) { xmlRefTablePtr table; @@ -3120,7 +3120,7 @@ xmlGetRefs(xmlDocPtr doc, const xmlChar *ID) { } table = (xmlRefTablePtr) doc->refs; - if (table == NULL) + if (table == NULL) return(NULL); return (xmlHashLookup(table, ID)); @@ -3185,7 +3185,7 @@ xmlGetDtdElementDesc2(xmlDtdPtr dtd, const xmlChar *name, int create) { if (dtd->doc != NULL) dict = dtd->doc->dict; - if (!create) + if (!create) return(NULL); /* * Create the Element table if needed. @@ -3798,7 +3798,7 @@ xmlValidateAttributeValueInternal(xmlDocPtr doc, xmlAttributeType type, * * [ VC: Name Token ] * Values of type NMTOKEN must match the Nmtoken production; values - * of type NMTOKENS must match Nmtokens. + * of type NMTOKENS must match Nmtokens. * * returns 1 if valid or 0 otherwise */ @@ -3857,7 +3857,7 @@ xmlValidateAttributeValue2(xmlValidCtxtPtr ctxt, xmlDocPtr doc, if ((ent == NULL) && (doc->standalone == 1)) { doc->standalone = 0; ent = xmlGetDocEntity(doc, value); - } + } if (ent == NULL) { xmlErrValidNode(ctxt, (xmlNodePtr) doc, XML_DTD_UNKNOWN_ENTITY, @@ -3968,7 +3968,7 @@ xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt, xmlDocPtr doc, if ((elem->ns != NULL) && (elem->ns->prefix != NULL)) { xmlChar fn[50]; xmlChar *fullname; - + fullname = xmlBuildQName(elem->name, elem->ns->prefix, fn, 50); if (fullname == NULL) return(NULL); @@ -4167,7 +4167,7 @@ xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc, } } if (nbId > 1) { - + xmlErrValidNodeNr(ctxt, (xmlNodePtr) attr, XML_DTD_ID_SUBSET, "Element %s has %d ID attribute defined in the internal subset : %s\n", attr->elem, nbId, attr->name); @@ -4230,7 +4230,7 @@ xmlValidateElementDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlElementPtr tst; CHECK_DTD; - + if (elem == NULL) return(1); #if 0 @@ -4347,7 +4347,7 @@ xmlValidateElementDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc, int xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc, - xmlNodePtr elem, xmlAttrPtr attr, const xmlChar *value) + xmlNodePtr elem, xmlAttrPtr attr, const xmlChar *value) { xmlAttributePtr attrDecl = NULL; int val; @@ -4360,7 +4360,7 @@ xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc, if ((elem->ns != NULL) && (elem->ns->prefix != NULL)) { xmlChar fn[50]; xmlChar *fullname; - + fullname = xmlBuildQName(elem->name, elem->ns->prefix, fn, 50); if (fullname == NULL) return(0); @@ -4444,7 +4444,7 @@ xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc, nota = xmlGetDtdNotationDesc(doc->intSubset, value); if (nota == NULL) nota = xmlGetDtdNotationDesc(doc->extSubset, value); - + if (nota == NULL) { xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_NOTATION, "Value \"%s\" for attribute %s of %s is not a declared Notation\n", @@ -4537,7 +4537,7 @@ xmlNodePtr elem, const xmlChar *prefix, xmlNsPtr ns, const xmlChar *value) { if (prefix != NULL) { xmlChar fn[50]; xmlChar *fullname; - + fullname = xmlBuildQName(elem->name, prefix, fn, 50); if (fullname == NULL) { xmlVErrMemory(ctxt, "Validating namespace"); @@ -4641,7 +4641,7 @@ xmlNodePtr elem, const xmlChar *prefix, xmlNsPtr ns, const xmlChar *value) { nota = xmlGetDtdNotationDesc(doc->intSubset, value); if (nota == NULL) nota = xmlGetDtdNotationDesc(doc->extSubset, value); - + if (nota == NULL) { if (ns->prefix != NULL) { xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_NOTATION, @@ -4777,7 +4777,7 @@ xmlValidateElementType(xmlValidCtxtPtr ctxt) { NODE = xmlValidateSkipIgnorable(NODE); if ((NODE == NULL) && (CONT == NULL)) return(1); - if ((NODE == NULL) && + if ((NODE == NULL) && ((CONT->ocur == XML_ELEMENT_CONTENT_MULT) || (CONT->ocur == XML_ELEMENT_CONTENT_OPT))) { return(1); @@ -5236,7 +5236,7 @@ xmlValidateElementContent(xmlValidCtxtPtr ctxt, xmlNodePtr child, xmlElementContentPtr cont; const xmlChar *name; - if (elemDecl == NULL) + if ((elemDecl == NULL) || (parent == NULL)) return(-1); cont = elemDecl->content; name = elemDecl->name; @@ -5286,7 +5286,7 @@ xmlValidateElementContent(xmlValidCtxtPtr ctxt, xmlNodePtr child, if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) { xmlChar fn[50]; xmlChar *fullname; - + fullname = xmlBuildQName(cur->name, cur->ns->prefix, fn, 50); if (fullname == NULL) { @@ -5400,7 +5400,7 @@ fail: last = tmp; } if (cur->type == XML_CDATA_SECTION_NODE) { - /* + /* * E59 spaces in CDATA does not match the * nonterminal S */ @@ -5517,7 +5517,8 @@ xmlValidateOneCdataElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, int ret = 1; xmlNodePtr cur, child; - if ((ctxt == NULL) || (doc == NULL) || (elem == NULL)) + if ((ctxt == NULL) || (doc == NULL) || (elem == NULL) || + (elem->type != XML_ELEMENT_NODE)) return(0); child = elem->children; @@ -5598,7 +5599,7 @@ xmlValidateCheckMixed(xmlValidCtxtPtr ctxt, } else if ((cont->type != XML_ELEMENT_CONTENT_OR) || (cont->c1 == NULL) || (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){ - xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT, + xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT, "Internal: MIXED struct corrupted\n", NULL); break; @@ -5622,7 +5623,7 @@ xmlValidateCheckMixed(xmlValidCtxtPtr ctxt, } else if ((cont->type != XML_ELEMENT_CONTENT_OR) || (cont->c1 == NULL) || (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){ - xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT, + xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT, "Internal: MIXED struct corrupted\n", NULL); break; @@ -5651,7 +5652,7 @@ xmlValidGetElemDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlElementPtr elemDecl = NULL; const xmlChar *prefix = NULL; - if ((ctxt == NULL) || (doc == NULL) || + if ((ctxt == NULL) || (doc == NULL) || (elem == NULL) || (elem->name == NULL)) return(NULL); if (extsubset != NULL) @@ -6017,7 +6018,7 @@ xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, return(0); /* - * If vstateNr is not zero that means continuous validation is + * If vstateNr is not zero that means continuous validation is * activated, do not try to check the content model at that level. */ if (ctxt->vstateNr == 0) { @@ -6060,7 +6061,7 @@ xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, if ((child->ns != NULL) && (child->ns->prefix != NULL)) { xmlChar fn[50]; xmlChar *fullname; - + fullname = xmlBuildQName(child->name, child->ns->prefix, fn, 50); if (fullname == NULL) @@ -6078,7 +6079,7 @@ xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, } else if ((cont->type != XML_ELEMENT_CONTENT_OR) || (cont->c1 == NULL) || (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){ - xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT, + xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT, "Internal: MIXED struct corrupted\n", NULL); break; @@ -6101,7 +6102,7 @@ xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, } else if ((cont->type != XML_ELEMENT_CONTENT_OR) || (cont->c1 == NULL) || (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)) { - xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT, + xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT, "Internal: MIXED struct corrupted\n", NULL); break; @@ -6181,7 +6182,7 @@ child_ok: } } else { xmlAttrPtr attrib; - + attrib = elem->properties; while (attrib != NULL) { if (xmlStrEqual(attrib->name, attr->name)) { @@ -6196,18 +6197,18 @@ child_ok: * allow to define the URI instead of the prefix :-( */ if (nameSpace == NULL) { - if (qualified < 0) + if (qualified < 0) qualified = 0; } else if (!xmlStrEqual(nameSpace->prefix, attr->prefix)) { - if (qualified < 1) + if (qualified < 1) qualified = 1; } else goto found; } else { /* * We should allow applications to define namespaces - * for their application even if the DTD doesn't + * for their application even if the DTD doesn't * carry one, otherwise, basically we would always * break. */ @@ -6280,7 +6281,7 @@ child_ok: } } } -found: +found: attr = attr->nexth; } return(ret); @@ -6327,7 +6328,7 @@ xmlValidateRoot(xmlValidCtxtPtr ctxt, xmlDocPtr doc) { if ((root->ns != NULL) && (root->ns->prefix != NULL)) { xmlChar fn[50]; xmlChar *fullname; - + fullname = xmlBuildQName(root->name, root->ns->prefix, fn, 50); if (fullname == NULL) { xmlVErrMemory(ctxt, NULL); @@ -6338,7 +6339,7 @@ xmlValidateRoot(xmlValidCtxtPtr ctxt, xmlDocPtr doc) { xmlFree(fullname); if (ret == 1) goto name_ok; - } + } if ((xmlStrEqual(doc->intSubset->name, BAD_CAST "HTML")) && (xmlStrEqual(root->name, BAD_CAST "html"))) goto name_ok; @@ -6359,7 +6360,7 @@ name_ok: * @doc: a document instance * @elem: an element instance * - * Try to validate the subtree under an element + * Try to validate the subtree under an element * * returns 1 if valid or 0 otherwise */ @@ -6379,7 +6380,8 @@ xmlValidateElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem) { * they don't really mean anything validation wise. */ if ((elem->type == XML_XINCLUDE_START) || - (elem->type == XML_XINCLUDE_END)) + (elem->type == XML_XINCLUDE_END) || + (elem->type == XML_NAMESPACE_DECL)) return(1); CHECK_DTD; @@ -6538,7 +6540,7 @@ xmlValidateCheckRefCallback(xmlListPtr ref_list, xmlValidCtxtPtr ctxt, memo.name = name; xmlListWalk(ref_list, xmlWalkValidateList, &memo); - + } /** @@ -6550,7 +6552,7 @@ xmlValidateCheckRefCallback(xmlListPtr ref_list, xmlValidCtxtPtr ctxt, * incremental validation steps have been completed * * basically it does the following checks described by the XML Rec - * + * * Check all the IDREF/IDREFS attributes definition for validity * * returns 1 if valid or 0 otherwise @@ -6559,15 +6561,20 @@ xmlValidateCheckRefCallback(xmlListPtr ref_list, xmlValidCtxtPtr ctxt, int xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt, xmlDocPtr doc) { xmlRefTablePtr table; + unsigned int save; if (ctxt == NULL) return(0); if (doc == NULL) { - xmlErrValid(ctxt, XML_DTD_NO_DOC, + xmlErrValid(ctxt, XML_DTD_NO_DOC, "xmlValidateDocumentFinal: doc == NULL\n", NULL); return(0); } + /* trick to get correct line id report */ + save = ctxt->finishDtd; + ctxt->finishDtd = 0; + /* * Check all the NOTATION/NOTATIONS attributes */ @@ -6581,6 +6588,8 @@ xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt, xmlDocPtr doc) { ctxt->doc = doc; ctxt->valid = 1; xmlHashScan(table, (xmlHashScanner) xmlValidateCheckRefCallback, ctxt); + + ctxt->finishDtd = save; return(ctxt->valid); } @@ -6675,7 +6684,7 @@ xmlValidateAttributeCallback(xmlAttributePtr cur, xmlValidCtxtPtr ctxt, case XML_ATTRIBUTE_ENTITIES: case XML_ATTRIBUTE_NOTATION: if (cur->defaultValue != NULL) { - + ret = xmlValidateAttributeValue2(ctxt, ctxt->doc, cur->name, cur->atype, cur->defaultValue); if ((ret == 0) && (ctxt->valid == 1)) @@ -6732,9 +6741,9 @@ xmlValidateAttributeCallback(xmlAttributePtr cur, xmlValidCtxtPtr ctxt, * subsets have been parsed * * basically it does the following checks described by the XML Rec - * - check that ENTITY and ENTITIES type attributes default or + * - check that ENTITY and ENTITIES type attributes default or * possible values matches one of the defined entities. - * - check that NOTATION type attributes default or + * - check that NOTATION type attributes default or * possible values matches one of the defined notations. * * returns 1 if valid or 0 if invalid and -1 if not well-formed @@ -6805,7 +6814,7 @@ xmlValidateDocument(xmlValidCtxtPtr ctxt, xmlDocPtr doc) { xmlChar *sysID; if (doc->intSubset->SystemID != NULL) { sysID = xmlBuildURI(doc->intSubset->SystemID, - doc->URL); + doc->URL); if (sysID == NULL) { xmlErrValid(ctxt, XML_DTD_LOAD_ERROR, "Could not build URI for external subset \"%s\"\n", @@ -6878,17 +6887,17 @@ xmlValidGetPotentialChildren(xmlElementContent *ctree, if (*len >= max) return(*len); switch (ctree->type) { - case XML_ELEMENT_CONTENT_PCDATA: + case XML_ELEMENT_CONTENT_PCDATA: for (i = 0; i < *len;i++) if (xmlStrEqual(BAD_CAST "#PCDATA", names[i])) return(*len); names[(*len)++] = BAD_CAST "#PCDATA"; break; - case XML_ELEMENT_CONTENT_ELEMENT: + case XML_ELEMENT_CONTENT_ELEMENT: for (i = 0; i < *len;i++) if (xmlStrEqual(ctree->name, names[i])) return(*len); names[(*len)++] = ctree->name; break; - case XML_ELEMENT_CONTENT_SEQ: + case XML_ELEMENT_CONTENT_SEQ: xmlValidGetPotentialChildren(ctree->c1, names, len, max); xmlValidGetPotentialChildren(ctree->c2, names, len, max); break; @@ -6897,7 +6906,7 @@ xmlValidGetPotentialChildren(xmlElementContent *ctree, xmlValidGetPotentialChildren(ctree->c2, names, len, max); break; } - + return(*len); } @@ -6942,16 +6951,16 @@ xmlValidGetValidElements(xmlNode *prev, xmlNode *next, const xmlChar **names, const xmlChar *elements[256]; int nb_elements = 0, i; const xmlChar *name; - + xmlNode *ref_node; xmlNode *parent; xmlNode *test_node; - + xmlNode *prev_next; xmlNode *next_prev; xmlNode *parent_childs; xmlNode *parent_last; - + xmlElement *element_desc; if (prev == NULL && next == NULL) @@ -6976,7 +6985,7 @@ xmlValidGetValidElements(xmlNode *prev, xmlNode *next, const xmlChar **names, element_desc = xmlGetDtdElementDesc(parent->doc->extSubset, parent->name); if (element_desc == NULL) return(-1); - + /* * Do a backup of the current tree structure */ @@ -6987,16 +6996,16 @@ xmlValidGetValidElements(xmlNode *prev, xmlNode *next, const xmlChar **names, /* * Creates a dummy node and insert it into the tree - */ + */ test_node = xmlNewDocNode (ref_node->doc, NULL, BAD_CAST "", NULL); test_node->parent = parent; test_node->prev = prev; test_node->next = next; name = test_node->name; - + if (prev) prev->next = test_node; else parent->children = test_node; - + if (next) next->prev = test_node; else parent->last = test_node; @@ -7006,7 +7015,7 @@ xmlValidGetValidElements(xmlNode *prev, xmlNode *next, const xmlChar **names, */ nb_elements = xmlValidGetPotentialChildren(element_desc->content, elements, &nb_elements, 256); - + for (i = 0;i < nb_elements;i++) { test_node->name = elements[i]; if (xmlValidateOneElement(&vctxt, parent->doc, parent)) { diff --git a/lib/3rdparty/libxml2/xinclude.c b/lib/3rdparty/libxml2/xinclude.c index 2916ffaab10..ace005bf2e7 100644 --- a/lib/3rdparty/libxml2/xinclude.c +++ b/lib/3rdparty/libxml2/xinclude.c @@ -26,6 +26,7 @@ #ifdef LIBXML_XINCLUDE_ENABLED #include +#include "buf.h" #define XINCLUDE_MAX_DEPTH 40 @@ -92,7 +93,7 @@ xmlXIncludeDoProcess(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr tree); /************************************************************************ * * - * XInclude error handler * + * XInclude error handler * * * ************************************************************************/ @@ -412,7 +413,7 @@ xmlXIncludeFreeContext(xmlXIncludeCtxtPtr ctxt) { * xmlXIncludeParseFile: * @ctxt: the XInclude context * @URL: the URL or file path - * + * * parse a document for XInclude */ static xmlDocPtr @@ -433,7 +434,7 @@ xmlXIncludeParseFile(xmlXIncludeCtxtPtr ctxt, const char *URL) { * pass in the application data to the parser context. */ pctxt->_private = ctxt->_private; - + /* * try to ensure that new documents included are actually * built with the same dictionary as the including document. @@ -446,7 +447,7 @@ xmlXIncludeParseFile(xmlXIncludeCtxtPtr ctxt, const char *URL) { } xmlCtxtUseOptions(pctxt, ctxt->parseFlags | XML_PARSE_DTDLOAD); - + inputStream = xmlLoadExternalEntity(URL, NULL, pctxt); if (inputStream == NULL) { xmlFreeParserCtxt(pctxt); @@ -472,7 +473,7 @@ xmlXIncludeParseFile(xmlXIncludeCtxtPtr ctxt, const char *URL) { pctxt->myDoc = NULL; } xmlFreeParserCtxt(pctxt); - + return(ret); } @@ -480,7 +481,7 @@ xmlXIncludeParseFile(xmlXIncludeCtxtPtr ctxt, const char *URL) { * xmlXIncludeAddNode: * @ctxt: the XInclude context * @cur: the new node - * + * * Add a new node to process to an XInclude context */ static int @@ -511,7 +512,7 @@ xmlXIncludeAddNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr cur) { href = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_HREF); if (href == NULL) { href = xmlStrdup(BAD_CAST ""); /* @@@@ href is now optional */ - if (href == NULL) + if (href == NULL) return(-1); } if ((href[0] == '#') || (href[0] == 0)) @@ -655,7 +656,7 @@ xmlXIncludeAddNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr cur) { * @ctxt: the XInclude context * @doc: the new document * @url: the associated URL - * + * * The XInclude recursive nature is handled at this point. */ static void @@ -684,7 +685,7 @@ xmlXIncludeRecurseDoc(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc, /* * Copy the private user data */ - newctxt->_private = ctxt->_private; + newctxt->_private = ctxt->_private; /* * Copy the existing document set */ @@ -749,7 +750,7 @@ xmlXIncludeRecurseDoc(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc, * @ctxt: the XInclude context * @txt: the new text node * @url: the associated URL - * + * * Add a new txtument to the list */ static void @@ -808,7 +809,7 @@ xmlXIncludeCopyNodeList(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target, * @target: the document target * @source: the document source * @elem: the element - * + * * Make a copy of the node while preserving the XInclude semantic * of the Infoset copy */ @@ -835,7 +836,7 @@ xmlXIncludeCopyNode(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target, * @target: the document target * @source: the document source * @elem: the element list - * + * * Make a copy of the node list while preserving the XInclude semantic * of the Infoset copy */ @@ -874,11 +875,11 @@ xmlXIncludeCopyNodeList(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target, static xmlNodePtr xmlXIncludeGetNthChild(xmlNodePtr cur, int no) { int i; - if (cur == NULL) - return(cur); + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) + return(NULL); cur = cur->children; for (i = 0;i <= no;cur = cur->next) { - if (cur == NULL) + if (cur == NULL) return(cur); if ((cur->type == XML_ELEMENT_NODE) || (cur->type == XML_DOCUMENT_NODE) || @@ -922,11 +923,13 @@ xmlXIncludeCopyRange(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target, return(NULL); start = (xmlNodePtr) range->user; - if (start == NULL) + if ((start == NULL) || (start->type == XML_NAMESPACE_DECL)) return(NULL); end = range->user2; if (end == NULL) return(xmlDocCopyNode(start, target, 1)); + if (end->type == XML_NAMESPACE_DECL) + return(NULL); cur = start; index1 = range->index; @@ -985,7 +988,7 @@ xmlXIncludeCopyRange(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target, /* prune and return full set */ if (level == lastLevel) xmlAddNextSibling(last, tmp); - else + else xmlAddChild(last, tmp); return(list); } else { /* ending node not a text node */ @@ -1289,7 +1292,7 @@ xmlXIncludeMergeEntity(xmlEntityPtr ent, xmlXIncludeMergeDataPtr data, if (prev != NULL) { if (ent->etype != prev->etype) goto error; - + if ((ent->SystemID != NULL) && (prev->SystemID != NULL)) { if (!xmlStrEqual(ent->SystemID, prev->SystemID)) goto error; @@ -1389,7 +1392,7 @@ xmlXIncludeMergeEntities(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc, * @ctxt: the XInclude context * @url: the associated URL * @nr: the xinclude node number - * + * * Load the document, and store the result in the XInclude context * * Returns 0 in case of success, -1 in case of failure @@ -1413,7 +1416,7 @@ xmlXIncludeLoadDoc(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) { */ uri = xmlParseURI((const char *)url); if (uri == NULL) { - xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, + xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_HREF_URI, "invalid value URI %s\n", url); return(-1); @@ -1431,7 +1434,7 @@ xmlXIncludeLoadDoc(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) { xmlFreeURI(uri); if (URL == NULL) { if (ctxt->incTab != NULL) - xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, + xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_HREF_URI, "invalid value URI %s\n", url); else @@ -1550,7 +1553,7 @@ loaded: ctxt->incTab[nr]->inc = xmlXIncludeCopyNodeList(ctxt, ctxt->doc, doc, doc->children); } - } + } #ifdef LIBXML_XPTR_ENABLED else { /* @@ -1568,7 +1571,7 @@ loaded: xptrctxt = xmlXPtrNewContext(doc, NULL, NULL); } if (xptrctxt == NULL) { - xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, + xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_XPTR_FAILED, "could not create XPointer context\n", NULL); xmlFree(URL); @@ -1594,7 +1597,7 @@ loaded: case XPATH_POINT: case XPATH_USERS: case XPATH_XSLT_TREE: - xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, + xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_XPTR_RESULT, "XPointer is not a range: #%s\n", fragment); @@ -1636,14 +1639,14 @@ loaded: continue; case XML_ATTRIBUTE_NODE: - xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, + xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_XPTR_RESULT, "XPointer selects an attribute: #%s\n", fragment); set->nodeTab[i] = NULL; continue; case XML_NAMESPACE_DECL: - xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, + xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_XPTR_RESULT, "XPointer selects a namespace: #%s\n", fragment); @@ -1658,7 +1661,7 @@ loaded: case XML_ENTITY_DECL: case XML_XINCLUDE_START: case XML_XINCLUDE_END: - xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, + xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_XPTR_RESULT, "XPointer selects unexpected nodes: #%s\n", fragment); @@ -1704,7 +1707,7 @@ loaded: */ curBase = xmlBuildRelativeURI(URL, ctxt->base); if (curBase == NULL) { /* Error return */ - xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, + xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_HREF_URI, "trying to build relative URI from %s\n", URL); } else { @@ -1745,7 +1748,7 @@ loaded: xmlChar *relBase; relBase = xmlBuildURI(xmlBase, base); if (relBase == NULL) { /* error */ - xmlXIncludeErr(ctxt, + xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_HREF_URI, "trying to rebuild base from %s\n", @@ -1782,7 +1785,7 @@ loaded: * @ctxt: the XInclude context * @url: the associated URL * @nr: the xinclude node number - * + * * Load the content, and store the result in the XInclude context * * Returns 0 in case of success, -1 in case of failure @@ -1796,6 +1799,9 @@ xmlXIncludeLoadTxt(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) { int i; xmlChar *encoding = NULL; xmlCharEncoding enc = (xmlCharEncoding) 0; + xmlParserCtxtPtr pctxt; + xmlParserInputPtr inputStream; + int xinclude_multibyte_fallback_used = 0; /* * Check the URL and remove any fragment identifier @@ -1826,7 +1832,7 @@ xmlXIncludeLoadTxt(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) { * directly through ctxt->doc. */ if (URL[0] == 0) { - xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, + xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_TEXT_DOCUMENT, "text serialization of document not available\n", NULL); xmlFree(URL); @@ -1870,43 +1876,65 @@ xmlXIncludeLoadTxt(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) { /* * Load it. */ - buf = xmlParserInputBufferCreateFilename((const char *)URL, enc); - if (buf == NULL) { + pctxt = xmlNewParserCtxt(); + inputStream = xmlLoadExternalEntity((const char*)URL, NULL, pctxt); + if(inputStream == NULL) { + xmlFreeParserCtxt(pctxt); xmlFree(URL); return(-1); } + buf = inputStream->buf; + if (buf == NULL) { + xmlFreeInputStream (inputStream); + xmlFreeParserCtxt(pctxt); + xmlFree(URL); + return(-1); + } + if (buf->encoder) + xmlCharEncCloseFunc(buf->encoder); + buf->encoder = xmlGetCharEncodingHandler(enc); node = xmlNewText(NULL); /* * Scan all chars from the resource and add the to the node */ +xinclude_multibyte_fallback: while (xmlParserInputBufferRead(buf, 128) > 0) { int len; const xmlChar *content; - content = xmlBufferContent(buf->buffer); - len = xmlBufferLength(buf->buffer); + content = xmlBufContent(buf->buffer); + len = xmlBufLength(buf->buffer); for (i = 0;i < len;) { int cur; int l; cur = xmlStringCurrentChar(NULL, &content[i], &l); if (!IS_CHAR(cur)) { - xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, - XML_XINCLUDE_INVALID_CHAR, - "%s contains invalid char\n", URL); - xmlFreeParserInputBuffer(buf); - xmlFree(URL); - return(-1); + /* Handle splitted multibyte char at buffer boundary */ + if (((len - i) < 4) && (!xinclude_multibyte_fallback_used)) { + xinclude_multibyte_fallback_used = 1; + xmlBufShrink(buf->buffer, i); + goto xinclude_multibyte_fallback; + } else { + xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, + XML_XINCLUDE_INVALID_CHAR, + "%s contains invalid char\n", URL); + xmlFreeParserInputBuffer(buf); + xmlFree(URL); + return(-1); + } } else { + xinclude_multibyte_fallback_used = 0; xmlNodeAddContentLen(node, &content[i], l); } i += l; } - xmlBufferShrink(buf->buffer, len); + xmlBufShrink(buf->buffer, len); } - xmlFreeParserInputBuffer(buf); + xmlFreeParserCtxt(pctxt); xmlXIncludeAddTxt(ctxt, node, URL); + xmlFreeInputStream(inputStream); loaded: /* @@ -1922,7 +1950,7 @@ loaded: * @ctxt: the XInclude context * @fallback: the fallback node * @nr: the xinclude node number - * + * * Load the content of the fallback node, and store the result * in the XInclude context * @@ -1932,8 +1960,9 @@ static int xmlXIncludeLoadFallback(xmlXIncludeCtxtPtr ctxt, xmlNodePtr fallback, int nr) { xmlXIncludeCtxtPtr newctxt; int ret = 0; - - if ((fallback == NULL) || (ctxt == NULL)) + + if ((fallback == NULL) || (fallback->type == XML_NAMESPACE_DECL) || + (ctxt == NULL)) return(-1); if (fallback->children != NULL) { /* @@ -2018,7 +2047,7 @@ xmlXIncludeLoadNode(xmlXIncludeCtxtPtr ctxt, int nr) { href = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_HREF); if (href == NULL) { href = xmlStrdup(BAD_CAST ""); /* @@@@ href is now optional */ - if (href == NULL) + if (href == NULL) return(-1); } parse = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_PARSE); @@ -2063,7 +2092,7 @@ xmlXIncludeLoadNode(xmlXIncludeCtxtPtr ctxt, int nr) { xmlFree(eschref); } if (URI == NULL) { - xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, + xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_HREF_URI, "failed build URL\n", NULL); if (parse != NULL) xmlFree(parse); @@ -2096,7 +2125,7 @@ xmlXIncludeLoadNode(xmlXIncludeCtxtPtr ctxt, int nr) { * Restore the original base before checking for fallback */ ctxt->base = oldBase; - + if (ret < 0) { xmlNodePtr children; @@ -2114,14 +2143,14 @@ xmlXIncludeLoadNode(xmlXIncludeCtxtPtr ctxt, int nr) { ((xmlStrEqual(children->ns->href, XINCLUDE_NS)) || (xmlStrEqual(children->ns->href, XINCLUDE_OLD_NS)))) { ret = xmlXIncludeLoadFallback(ctxt, children, nr); - if (ret == 0) + if (ret == 0) break; } children = children->next; } } if (ret < 0) { - xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, + xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_NO_FALLBACK, "could not load %s, and no fallback was found\n", URI); @@ -2159,7 +2188,7 @@ xmlXIncludeIncludeNode(xmlXIncludeCtxtPtr ctxt, int nr) { if ((nr < 0) || (nr >= ctxt->incNr)) return(-1); cur = ctxt->incTab[nr]->ref; - if (cur == NULL) + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) return(-1); /* @@ -2190,7 +2219,7 @@ xmlXIncludeIncludeNode(xmlXIncludeCtxtPtr ctxt, int nr) { tmp = tmp->next; } if (nb_elem > 1) { - xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, + xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_MULTIPLE_ROOT, "XInclude error: would result in multiple root nodes\n", NULL); @@ -2237,7 +2266,7 @@ xmlXIncludeIncludeNode(xmlXIncludeCtxtPtr ctxt, int nr) { } } - + return(0); } @@ -2334,7 +2363,7 @@ xmlXIncludeDoProcess(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr tree) { int ret = 0; int i, start; - if ((doc == NULL) || (tree == NULL)) + if ((doc == NULL) || (tree == NULL) || (tree->type == XML_NAMESPACE_DECL)) return(-1); if (ctxt == NULL) return(-1); @@ -2448,7 +2477,8 @@ xmlXIncludeProcessTreeFlagsData(xmlNodePtr tree, int flags, void *data) { xmlXIncludeCtxtPtr ctxt; int ret = 0; - if ((tree == NULL) || (tree->doc == NULL)) + if ((tree == NULL) || (tree->type == XML_NAMESPACE_DECL) || + (tree->doc == NULL)) return(-1); ctxt = xmlXIncludeNewContext(tree->doc); @@ -2533,7 +2563,8 @@ xmlXIncludeProcessTreeFlags(xmlNodePtr tree, int flags) { xmlXIncludeCtxtPtr ctxt; int ret = 0; - if ((tree == NULL) || (tree->doc == NULL)) + if ((tree == NULL) || (tree->type == XML_NAMESPACE_DECL) || + (tree->doc == NULL)) return(-1); ctxt = xmlXIncludeNewContext(tree->doc); if (ctxt == NULL) @@ -2577,7 +2608,8 @@ int xmlXIncludeProcessNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node) { int ret = 0; - if ((node == NULL) || (node->doc == NULL) || (ctxt == NULL)) + if ((node == NULL) || (node->type == XML_NAMESPACE_DECL) || + (node->doc == NULL) || (ctxt == NULL)) return(-1); ret = xmlXIncludeDoProcess(ctxt, node->doc, node); if ((ret >= 0) && (ctxt->nbErrors > 0)) diff --git a/lib/3rdparty/libxml2/xlink.c b/lib/3rdparty/libxml2/xlink.c index 0d9be738cd2..3566e06fafd 100644 --- a/lib/3rdparty/libxml2/xlink.c +++ b/lib/3rdparty/libxml2/xlink.c @@ -47,7 +47,7 @@ * Default setting and related functions * * * ****************************************************************/ - + static xlinkHandlerPtr xlinkDefaultHandler = NULL; static xlinkNodeDetectFunc xlinkDefaultDetect = NULL; @@ -93,7 +93,7 @@ xlinkGetDefaultDetect (void) { * * Set the default xlink detection routine */ -void +void xlinkSetDefaultDetect (xlinkNodeDetectFunc func) { xlinkDefaultDetect = func; } @@ -104,7 +104,7 @@ xlinkSetDefaultDetect (xlinkNodeDetectFunc func) { * * ****************************************************************/ - + /** * xlinkIsLink: * @doc: the document containing the node @@ -119,7 +119,7 @@ xlinkSetDefaultDetect (xlinkNodeDetectFunc func) { * Returns the xlinkType of the node (XLINK_TYPE_NONE if there is no * link detected. */ -xlinkType +xlinkType xlinkIsLink (xmlDocPtr doc, xmlNodePtr node) { xmlChar *type = NULL, *role = NULL; xlinkType ret = XLINK_TYPE_NONE; @@ -157,7 +157,7 @@ xlinkIsLink (xmlDocPtr doc, xmlNodePtr node) { xlink = xmlSearchNs(doc, node, XLINK_NAMESPACE); if (xlink == NULL) { /* Humm, fallback method */ - if (xmlStrEqual(role, BAD_CAST"xlink:external-linkset")) + if (xmlStrEqual(role, BAD_CAST"xlink:external-linkset")) ret = XLINK_TYPE_EXTENDED_SET; } else { xmlChar buf[200]; diff --git a/lib/3rdparty/libxml2/xml2-config.1 b/lib/3rdparty/libxml2/xml2-config.1 index 8a259620872..8cf9858ba5e 100644 --- a/lib/3rdparty/libxml2/xml2-config.1 +++ b/lib/3rdparty/libxml2/xml2-config.1 @@ -9,7 +9,6 @@ xml-config - script to get information about the installed version of GNOME-XML linker flags that should be used to compile and link programs that use \fIGNOME-XML\fP. .SH OPTIONS -.l \fIxml-config\fP accepts the following options: .TP 8 .B \-\-version diff --git a/lib/3rdparty/libxml2/xml2-config.in b/lib/3rdparty/libxml2/xml2-config.in index 29893250ba6..19574864cb6 100644 --- a/lib/3rdparty/libxml2/xml2-config.in +++ b/lib/3rdparty/libxml2/xml2-config.in @@ -86,12 +86,12 @@ while test $# -gt 0; do then if [ "@XML_LIBDIR@" = "-L/usr/lib" -o "@XML_LIBDIR@" = "-L/usr/lib64" ] then - echo @XML_LIBS@ + echo @XML_LIBS@ @MODULE_PLATFORM_LIBS@ else - echo @XML_LIBDIR@ @XML_LIBS@ + echo @XML_LIBDIR@ @XML_LIBS@ @MODULE_PLATFORM_LIBS@ fi else - echo @XML_LIBDIR@ @XML_LIBS@ @WIN32_EXTRA_LIBADD@ + echo @XML_LIBDIR@ @XML_LIBS@ @MODULE_PLATFORM_LIBS@ @WIN32_EXTRA_LIBADD@ fi ;; diff --git a/lib/3rdparty/libxml2/xmlIO.c b/lib/3rdparty/libxml2/xmlIO.c index 0ac4875763b..ac6f4723d1e 100644 --- a/lib/3rdparty/libxml2/xmlIO.c +++ b/lib/3rdparty/libxml2/xmlIO.c @@ -35,6 +35,9 @@ #ifdef HAVE_ZLIB_H #include #endif +#ifdef HAVE_LZMA_H +#include +#endif #if defined(WIN32) || defined(_WIN32) //#include @@ -94,6 +97,9 @@ #endif #include +#include "buf.h" +#include "enc.h" + /* #define VERBOSE_FAILURE */ /* #define DEBUG_EXTERNAL_ENTITIES */ /* #define DEBUG_INPUT */ @@ -766,13 +772,21 @@ int xmlCheckFilename (const char *path) { #ifdef HAVE_STAT - struct stat stat_buffer; + struct stat stat_buffer; #endif - if (path == NULL) - return(0); + if (path == NULL) + return(0); #ifdef HAVE_STAT #if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) + /* + * On Windows stat and wstat do not work with long pathname, + * which start with '\\?\' + */ + if ((path[0] == '\\') && (path[1] == '\\') && (path[2] == '?') && + (path[3] == '\\') ) + return 1; + if (xmlWrapStat(path, &stat_buffer) == -1) return 0; #else @@ -988,7 +1002,7 @@ xmlFileOpenW (const char *filename) { #if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__) fd = xmlWrapOpen(path, 1); #else - fd = fopen(path, "wb"); + fd = fopen(path, "wb"); #endif /* WIN32 */ if (fd == NULL) xmlIOErr(0, path); @@ -1307,6 +1321,125 @@ xmlGzfileClose (void * context) { } #endif /* HAVE_ZLIB_H */ +#ifdef HAVE_LZMA_H +/************************************************************************ + * * + * I/O for compressed file accesses * + * * + ************************************************************************/ +#include "xzlib.h" +/** + * xmlXzfileMatch: + * @filename: the URI for matching + * + * input from compressed file test + * + * Returns 1 if matches, 0 otherwise + */ +static int +xmlXzfileMatch (const char *filename ATTRIBUTE_UNUSED) { + return(1); +} + +/** + * xmlXzFileOpen_real: + * @filename: the URI for matching + * + * input from compressed file open + * if @filename is " " then the standard input is used + * + * Returns an I/O context or NULL in case of error + */ +static void * +xmlXzfileOpen_real (const char *filename) { + const char *path = NULL; + xzFile fd; + + if (!strcmp(filename, "-")) { + fd = __libxml2_xzdopen(dup(0), "rb"); + return((void *) fd); + } + + if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file://localhost/", 17)) { + path = &filename[16]; + } else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:///", 8)) { + path = &filename[7]; + } else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:/", 6)) { + /* lots of generators seems to lazy to read RFC 1738 */ + path = &filename[5]; + } else + path = filename; + + if (path == NULL) + return(NULL); + if (!xmlCheckFilename(path)) + return(NULL); + + fd = __libxml2_xzopen(path, "rb"); + return((void *) fd); +} + +/** + * xmlXzfileOpen: + * @filename: the URI for matching + * + * Wrapper around xmlXzfileOpen_real that try it with an unescaped + * version of @filename, if this fails fallback to @filename + * + * Returns a handler or NULL in case or failure + */ +static void * +xmlXzfileOpen (const char *filename) { + char *unescaped; + void *retval; + + retval = xmlXzfileOpen_real(filename); + if (retval == NULL) { + unescaped = xmlURIUnescapeString(filename, 0, NULL); + if (unescaped != NULL) { + retval = xmlXzfileOpen_real(unescaped); + } + xmlFree(unescaped); + } + + return retval; +} + +/** + * xmlXzfileRead: + * @context: the I/O context + * @buffer: where to drop data + * @len: number of bytes to write + * + * Read @len bytes to @buffer from the compressed I/O channel. + * + * Returns the number of bytes written + */ +static int +xmlXzfileRead (void * context, char * buffer, int len) { + int ret; + + ret = __libxml2_xzread((xzFile) context, &buffer[0], len); + if (ret < 0) xmlIOErr(0, "xzread()"); + return(ret); +} + +/** + * xmlXzfileClose: + * @context: the I/O context + * + * Close a compressed I/O channel + */ +static int +xmlXzfileClose (void * context) { + int ret; + + ret = (__libxml2_xzclose((xzFile) context) == LZMA_OK ) ? 0 : -1; + if (ret < 0) xmlIOErr(0, "xzclose()"); + return(ret); +} +#endif /* HAVE_LZMA_H */ + #ifdef LIBXML_HTTP_ENABLED /************************************************************************ * * @@ -1915,8 +2048,8 @@ xmlIOHTTPCloseWrite( void * context, const char * http_mthd ) { /* Pull the data out of the memory output buffer */ xmlOutputBufferPtr dctxt = ctxt->doc_buff; - http_content = (char *)dctxt->buffer->content; - content_lgth = dctxt->buffer->use; + http_content = (char *) xmlBufContent(dctxt->buffer); + content_lgth = xmlBufUse(dctxt->buffer); } if ( http_content == NULL ) { @@ -2182,6 +2315,10 @@ xmlRegisterDefaultInputCallbacks(void) { xmlRegisterInputCallbacks(xmlGzfileMatch, xmlGzfileOpen, xmlGzfileRead, xmlGzfileClose); #endif /* HAVE_ZLIB_H */ +#ifdef HAVE_LZMA_H + xmlRegisterInputCallbacks(xmlXzfileMatch, xmlXzfileOpen, + xmlXzfileRead, xmlXzfileClose); +#endif /* HAVE_ZLIB_H */ #ifdef LIBXML_HTTP_ENABLED xmlRegisterInputCallbacks(xmlIOHTTPMatch, xmlIOHTTPOpen, @@ -2279,15 +2416,15 @@ xmlAllocParserInputBuffer(xmlCharEncoding enc) { return(NULL); } memset(ret, 0, (size_t) sizeof(xmlParserInputBuffer)); - ret->buffer = xmlBufferCreateSize(2 * xmlDefaultBufferSize); + ret->buffer = xmlBufCreateSize(2 * xmlDefaultBufferSize); if (ret->buffer == NULL) { xmlFree(ret); return(NULL); } - ret->buffer->alloc = XML_BUFFER_ALLOC_DOUBLEIT; + xmlBufSetAllocationScheme(ret->buffer, XML_BUFFER_ALLOC_DOUBLEIT); ret->encoder = xmlGetCharEncodingHandler(enc); if (ret->encoder != NULL) - ret->raw = xmlBufferCreateSize(2 * xmlDefaultBufferSize); + ret->raw = xmlBufCreateSize(2 * xmlDefaultBufferSize); else ret->raw = NULL; ret->readcallback = NULL; @@ -2318,19 +2455,19 @@ xmlAllocOutputBuffer(xmlCharEncodingHandlerPtr encoder) { return(NULL); } memset(ret, 0, (size_t) sizeof(xmlOutputBuffer)); - ret->buffer = xmlBufferCreate(); + ret->buffer = xmlBufCreate(); if (ret->buffer == NULL) { xmlFree(ret); return(NULL); } /* try to avoid a performance problem with Windows realloc() */ - if (ret->buffer->alloc == XML_BUFFER_ALLOC_EXACT) - ret->buffer->alloc = XML_BUFFER_ALLOC_DOUBLEIT; + if (xmlBufGetAllocationScheme(ret->buffer) == XML_BUFFER_ALLOC_EXACT) + xmlBufSetAllocationScheme(ret->buffer, XML_BUFFER_ALLOC_DOUBLEIT); ret->encoder = encoder; if (encoder != NULL) { - ret->conv = xmlBufferCreateSize(4000); + ret->conv = xmlBufCreateSize(4000); if (ret->conv == NULL) { xmlFree(ret); return(NULL); @@ -2339,7 +2476,7 @@ xmlAllocOutputBuffer(xmlCharEncodingHandlerPtr encoder) { /* * This call is designed to initiate the encoder state */ - xmlCharEncOutFunc(encoder, ret->conv, NULL); + xmlCharEncOutput(ret, 1); } else ret->conv = NULL; ret->writecallback = NULL; @@ -2368,7 +2505,7 @@ xmlAllocOutputBufferInternal(xmlCharEncodingHandlerPtr encoder) { return(NULL); } memset(ret, 0, (size_t) sizeof(xmlOutputBuffer)); - ret->buffer = xmlBufferCreate(); + ret->buffer = xmlBufCreate(); if (ret->buffer == NULL) { xmlFree(ret); return(NULL); @@ -2377,15 +2514,12 @@ xmlAllocOutputBufferInternal(xmlCharEncodingHandlerPtr encoder) { /* * For conversion buffers we use the special IO handling - * We don't do that from the exported API to avoid confusing - * user's code. */ - ret->buffer->alloc = XML_BUFFER_ALLOC_IO; - ret->buffer->contentIO = ret->buffer->content; + xmlBufSetAllocationScheme(ret->buffer, XML_BUFFER_ALLOC_IO); ret->encoder = encoder; if (encoder != NULL) { - ret->conv = xmlBufferCreateSize(4000); + ret->conv = xmlBufCreateSize(4000); if (ret->conv == NULL) { xmlFree(ret); return(NULL); @@ -2394,7 +2528,7 @@ xmlAllocOutputBufferInternal(xmlCharEncodingHandlerPtr encoder) { /* * This call is designed to initiate the encoder state */ - xmlCharEncOutFunc(encoder, ret->conv, NULL); + xmlCharEncOutput(ret, 1); } else ret->conv = NULL; ret->writecallback = NULL; @@ -2418,7 +2552,7 @@ xmlFreeParserInputBuffer(xmlParserInputBufferPtr in) { if (in == NULL) return; if (in->raw) { - xmlBufferFree(in->raw); + xmlBufFree(in->raw); in->raw = NULL; } if (in->encoder != NULL) { @@ -2428,7 +2562,7 @@ xmlFreeParserInputBuffer(xmlParserInputBufferPtr in) { in->closecallback(in->context); } if (in->buffer != NULL) { - xmlBufferFree(in->buffer); + xmlBufFree(in->buffer); in->buffer = NULL; } @@ -2460,14 +2594,14 @@ xmlOutputBufferClose(xmlOutputBufferPtr out) } written = out->written; if (out->conv) { - xmlBufferFree(out->conv); + xmlBufFree(out->conv); out->conv = NULL; } if (out->encoder != NULL) { xmlCharEncCloseFunc(out->encoder); } if (out->buffer != NULL) { - xmlBufferFree(out->buffer); + xmlBufFree(out->buffer); out->buffer = NULL; } @@ -2797,6 +2931,39 @@ xmlOutputBufferCreateBuffer(xmlBufferPtr buffer, return(ret); } +/** + * xmlOutputBufferGetContent: + * @out: an xmlOutputBufferPtr + * + * Gives a pointer to the data currently held in the output buffer + * + * Returns a pointer to the data or NULL in case of error + */ +const xmlChar * +xmlOutputBufferGetContent(xmlOutputBufferPtr out) { + if ((out == NULL) || (out->buffer == NULL)) + return(NULL); + + return(xmlBufContent(out->buffer)); +} + +/** + * xmlOutputBufferGetSize: + * @out: an xmlOutputBufferPtr + * + * Gives the length of the data currently held in the output buffer + * + * Returns 0 in case or error or no data is held, the size otherwise + */ +size_t +xmlOutputBufferGetSize(xmlOutputBufferPtr out) { + if ((out == NULL) || (out->buffer == NULL)) + return(0); + + return(xmlBufUse(out->buffer)); +} + + #endif /* LIBXML_OUTPUT_ENABLED */ /** @@ -2849,7 +3016,7 @@ xmlParserInputBufferCreateMem(const char *mem, int size, xmlCharEncoding enc) { ret->context = (void *) mem; ret->readcallback = (xmlInputReadCallback) xmlNop; ret->closecallback = NULL; - errcode = xmlBufferAdd(ret->buffer, (const xmlChar *) mem, size); + errcode = xmlBufAdd(ret->buffer, (const xmlChar *) mem, size); if (errcode != 0) { xmlFree(ret); return(NULL); @@ -2886,14 +3053,14 @@ xmlParserInputBufferCreateStatic(const char *mem, int size, return(NULL); } memset(ret, 0, (size_t) sizeof(xmlParserInputBuffer)); - ret->buffer = xmlBufferCreateStatic((void *)mem, (size_t) size); + ret->buffer = xmlBufCreateStatic((void *)mem, (size_t) size); if (ret->buffer == NULL) { xmlFree(ret); return(NULL); } ret->encoder = xmlGetCharEncodingHandler(enc); if (ret->encoder != NULL) - ret->raw = xmlBufferCreateSize(2 * xmlDefaultBufferSize); + ret->raw = xmlBufCreateSize(2 * xmlDefaultBufferSize); else ret->raw = NULL; ret->compressed = -1; @@ -3062,33 +3229,33 @@ xmlParserInputBufferPush(xmlParserInputBufferPtr in, * Store the data in the incoming raw buffer */ if (in->raw == NULL) { - in->raw = xmlBufferCreate(); + in->raw = xmlBufCreate(); } - ret = xmlBufferAdd(in->raw, (const xmlChar *) buf, len); + ret = xmlBufAdd(in->raw, (const xmlChar *) buf, len); if (ret != 0) return(-1); /* * convert as much as possible to the parser reading buffer. */ - use = in->raw->use; - nbchars = xmlCharEncInFunc(in->encoder, in->buffer, in->raw); + use = xmlBufUse(in->raw); + nbchars = xmlCharEncInput(in); if (nbchars < 0) { xmlIOErr(XML_IO_ENCODER, NULL); in->error = XML_IO_ENCODER; return(-1); } - in->rawconsumed += (use - in->raw->use); + in->rawconsumed += (use - xmlBufUse(in->raw)); } else { nbchars = len; - ret = xmlBufferAdd(in->buffer, (xmlChar *) buf, nbchars); + ret = xmlBufAdd(in->buffer, (xmlChar *) buf, nbchars); if (ret != 0) return(-1); } #ifdef DEBUG_INPUT xmlGenericError(xmlGenericErrorContext, "I/O: pushed %d chars, buffer %d/%d\n", - nbchars, in->buffer->use, in->buffer->size); + nbchars, xmlBufUse(in->buffer), xmlBufLength(in->buffer)); #endif return(nbchars); } @@ -3126,29 +3293,23 @@ xmlParserInputBufferGrow(xmlParserInputBufferPtr in, int len) { char *buffer = NULL; int res = 0; int nbchars = 0; - int buffree; - unsigned int needSize; if ((in == NULL) || (in->error)) return(-1); if ((len <= MINLEN) && (len != 4)) len = MINLEN; - buffree = in->buffer->size - in->buffer->use; - if (buffree <= 0) { + if (xmlBufAvail(in->buffer) <= 0) { xmlIOErr(XML_IO_BUFFER_FULL, NULL); in->error = XML_IO_BUFFER_FULL; return(-1); } - needSize = in->buffer->use + len + 1; - if (needSize > in->buffer->size){ - if (!xmlBufferResize(in->buffer, needSize)){ - xmlIOErrMemory("growing input buffer"); - in->error = XML_ERR_NO_MEMORY; - return(-1); - } + if (xmlBufGrow(in->buffer, len + 1) < 0) { + xmlIOErrMemory("growing input buffer"); + in->error = XML_ERR_NO_MEMORY; + return(-1); } - buffer = (char *)&in->buffer->content[in->buffer->use]; + buffer = (char *)xmlBufEnd(in->buffer); /* * Call the read method for this I/O type. @@ -3173,32 +3334,31 @@ xmlParserInputBufferGrow(xmlParserInputBufferPtr in, int len) { * Store the data in the incoming raw buffer */ if (in->raw == NULL) { - in->raw = xmlBufferCreate(); + in->raw = xmlBufCreate(); } - res = xmlBufferAdd(in->raw, (const xmlChar *) buffer, len); + res = xmlBufAdd(in->raw, (const xmlChar *) buffer, len); if (res != 0) return(-1); /* * convert as much as possible to the parser reading buffer. */ - use = in->raw->use; - nbchars = xmlCharEncInFunc(in->encoder, in->buffer, in->raw); + use = xmlBufUse(in->raw); + nbchars = xmlCharEncInput(in); if (nbchars < 0) { xmlIOErr(XML_IO_ENCODER, NULL); in->error = XML_IO_ENCODER; return(-1); } - in->rawconsumed += (use - in->raw->use); + in->rawconsumed += (use - xmlBufUse(in->raw)); } else { nbchars = len; - in->buffer->use += nbchars; - buffer[nbchars] = 0; + xmlBufAddLen(in->buffer, nbchars); } #ifdef DEBUG_INPUT xmlGenericError(xmlGenericErrorContext, - "I/O: read %d chars, buffer %d/%d\n", - nbchars, in->buffer->use, in->buffer->size); + "I/O: read %d chars, buffer %d\n", + nbchars, xmlBufUse(in->buffer)); #endif return(nbchars); } @@ -3220,8 +3380,7 @@ xmlParserInputBufferRead(xmlParserInputBufferPtr in, int len) { if ((in == NULL) || (in->error)) return(-1); if (in->readcallback != NULL) return(xmlParserInputBufferGrow(in, len)); - else if ((in->buffer != NULL) && - (in->buffer->alloc == XML_BUFFER_ALLOC_IMMUTABLE)) + else if (xmlBufGetAllocationScheme(in->buffer) == XML_BUFFER_ALLOC_IMMUTABLE) return(0); else return(-1); @@ -3266,30 +3425,30 @@ xmlOutputBufferWrite(xmlOutputBufferPtr out, int len, const char *buf) { * Store the data in the incoming raw buffer */ if (out->conv == NULL) { - out->conv = xmlBufferCreate(); + out->conv = xmlBufCreate(); } - ret = xmlBufferAdd(out->buffer, (const xmlChar *) buf, chunk); + ret = xmlBufAdd(out->buffer, (const xmlChar *) buf, chunk); if (ret != 0) return(-1); - if ((out->buffer->use < MINLEN) && (chunk == len)) + if ((xmlBufUse(out->buffer) < MINLEN) && (chunk == len)) goto done; /* * convert as much as possible to the parser reading buffer. */ - ret = xmlCharEncOutFunc(out->encoder, out->conv, out->buffer); + ret = xmlCharEncOutput(out, 0); if ((ret < 0) && (ret != -3)) { xmlIOErr(XML_IO_ENCODER, NULL); out->error = XML_IO_ENCODER; return(-1); } - nbchars = out->conv->use; + nbchars = xmlBufUse(out->conv); } else { - ret = xmlBufferAdd(out->buffer, (const xmlChar *) buf, chunk); + ret = xmlBufAdd(out->buffer, (const xmlChar *) buf, chunk); if (ret != 0) return(-1); - nbchars = out->buffer->use; + nbchars = xmlBufUse(out->buffer); } buf += chunk; len -= chunk; @@ -3303,14 +3462,14 @@ xmlOutputBufferWrite(xmlOutputBufferPtr out, int len, const char *buf) { */ if (out->encoder != NULL) { ret = out->writecallback(out->context, - (const char *)out->conv->content, nbchars); + (const char *)xmlBufContent(out->conv), nbchars); if (ret >= 0) - xmlBufferShrink(out->conv, ret); + xmlBufShrink(out->conv, ret); } else { ret = out->writecallback(out->context, - (const char *)out->buffer->content, nbchars); + (const char *)xmlBufContent(out->buffer), nbchars); if (ret >= 0) - xmlBufferShrink(out->buffer, ret); + xmlBufShrink(out->buffer, ret); } if (ret < 0) { xmlIOErr(XML_IO_WRITE, NULL); @@ -3354,7 +3513,7 @@ xmlEscapeContent(unsigned char* out, int *outlen, inend = in + (*inlen); while ((in < inend) && (out < outend)) { - if (*in == '<') { + if (*in == '<') { if (outend - out < 4) break; *out++ = '&'; *out++ = 'l'; @@ -3418,7 +3577,8 @@ xmlOutputBufferWriteEscape(xmlOutputBufferPtr out, const xmlChar *str, if ((out == NULL) || (out->error) || (str == NULL) || (out->buffer == NULL) || - (out->buffer->alloc == XML_BUFFER_ALLOC_IMMUTABLE)) return(-1); + (xmlBufGetAllocationScheme(out->buffer) == XML_BUFFER_ALLOC_IMMUTABLE)) + return(-1); len = strlen((const char *)str); if (len < 0) return(0); if (out->error) return(-1); @@ -3431,14 +3591,14 @@ xmlOutputBufferWriteEscape(xmlOutputBufferPtr out, const xmlChar *str, * how many bytes to consume and how many bytes to store. */ cons = len; - chunk = (out->buffer->size - out->buffer->use) - 1; + chunk = xmlBufAvail(out->buffer) - 1; /* * make sure we have enough room to save first, if this is * not the case force a flush, but make sure we stay in the loop */ if (chunk < 40) { - if (xmlBufferGrow(out->buffer, out->buffer->size + 100) < 0) + if (xmlBufGrow(out->buffer, 100) < 0) return(-1); oldwritten = -1; continue; @@ -3452,36 +3612,33 @@ xmlOutputBufferWriteEscape(xmlOutputBufferPtr out, const xmlChar *str, * Store the data in the incoming raw buffer */ if (out->conv == NULL) { - out->conv = xmlBufferCreate(); + out->conv = xmlBufCreate(); } - ret = escaping(out->buffer->content + out->buffer->use , + ret = escaping(xmlBufEnd(out->buffer) , &chunk, str, &cons); if ((ret < 0) || (chunk == 0)) /* chunk==0 => nothing done */ return(-1); - out->buffer->use += chunk; - out->buffer->content[out->buffer->use] = 0; + xmlBufAddLen(out->buffer, chunk); - if ((out->buffer->use < MINLEN) && (cons == len)) + if ((xmlBufUse(out->buffer) < MINLEN) && (cons == len)) goto done; /* * convert as much as possible to the output buffer. */ - ret = xmlCharEncOutFunc(out->encoder, out->conv, out->buffer); + ret = xmlCharEncOutput(out, 0); if ((ret < 0) && (ret != -3)) { xmlIOErr(XML_IO_ENCODER, NULL); out->error = XML_IO_ENCODER; return(-1); } - nbchars = out->conv->use; + nbchars = xmlBufUse(out->conv); } else { - ret = escaping(out->buffer->content + out->buffer->use , - &chunk, str, &cons); + ret = escaping(xmlBufEnd(out->buffer), &chunk, str, &cons); if ((ret < 0) || (chunk == 0)) /* chunk==0 => nothing done */ return(-1); - out->buffer->use += chunk; - out->buffer->content[out->buffer->use] = 0; - nbchars = out->buffer->use; + xmlBufAddLen(out->buffer, chunk); + nbchars = xmlBufUse(out->buffer); } str += cons; len -= cons; @@ -3495,14 +3652,14 @@ xmlOutputBufferWriteEscape(xmlOutputBufferPtr out, const xmlChar *str, */ if (out->encoder != NULL) { ret = out->writecallback(out->context, - (const char *)out->conv->content, nbchars); + (const char *)xmlBufContent(out->conv), nbchars); if (ret >= 0) - xmlBufferShrink(out->conv, ret); + xmlBufShrink(out->conv, ret); } else { ret = out->writecallback(out->context, - (const char *)out->buffer->content, nbchars); + (const char *)xmlBufContent(out->buffer), nbchars); if (ret >= 0) - xmlBufferShrink(out->buffer, ret); + xmlBufShrink(out->buffer, ret); } if (ret < 0) { xmlIOErr(XML_IO_WRITE, NULL); @@ -3510,8 +3667,8 @@ xmlOutputBufferWriteEscape(xmlOutputBufferPtr out, const xmlChar *str, return(ret); } out->written += ret; - } else if (out->buffer->size - out->buffer->use < MINLEN) { - xmlBufferResize(out->buffer, out->buffer->size + MINLEN); + } else if (xmlBufAvail(out->buffer) < MINLEN) { + xmlBufGrow(out->buffer, MINLEN); } written += nbchars; } while ((len > 0) && (oldwritten != written)); @@ -3571,7 +3728,7 @@ xmlOutputBufferFlush(xmlOutputBufferPtr out) { /* * convert as much as possible to the parser reading buffer. */ - nbchars = xmlCharEncOutFunc(out->encoder, out->conv, out->buffer); + nbchars = xmlCharEncOutput(out, 0); if (nbchars < 0) { xmlIOErr(XML_IO_ENCODER, NULL); out->error = XML_IO_ENCODER; @@ -3585,14 +3742,16 @@ xmlOutputBufferFlush(xmlOutputBufferPtr out) { if ((out->conv != NULL) && (out->encoder != NULL) && (out->writecallback != NULL)) { ret = out->writecallback(out->context, - (const char *)out->conv->content, out->conv->use); + (const char *)xmlBufContent(out->conv), + xmlBufUse(out->conv)); if (ret >= 0) - xmlBufferShrink(out->conv, ret); + xmlBufShrink(out->conv, ret); } else if (out->writecallback != NULL) { ret = out->writecallback(out->context, - (const char *)out->buffer->content, out->buffer->use); + (const char *)xmlBufContent(out->buffer), + xmlBufUse(out->buffer)); if (ret >= 0) - xmlBufferShrink(out->buffer, ret); + xmlBufShrink(out->buffer, ret); } if (ret < 0) { xmlIOErr(XML_IO_FLUSH, NULL); diff --git a/lib/3rdparty/libxml2/xmlcatalog.c b/lib/3rdparty/libxml2/xmlcatalog.c index 489509f5bf7..43f455a66ca 100644 --- a/lib/3rdparty/libxml2/xmlcatalog.c +++ b/lib/3rdparty/libxml2/xmlcatalog.c @@ -47,16 +47,16 @@ static char *filename = NULL; #endif /************************************************************************ - * * - * Shell Interface * - * * + * * + * Shell Interface * + * * ************************************************************************/ /** * xmlShellReadline: * @prompt: the prompt value * * Read a string - * + * * Returns a pointer to it or NULL on EOF the caller is expected to * free the returned string. */ @@ -157,7 +157,7 @@ static void usershell(void) { i++; cur++; } - } else if (*cur == '"') { + } else if (*cur == '"') { cur++; argv[i] = cur; while ((*cur != 0) && (*cur != '"')) cur++; @@ -296,15 +296,15 @@ static void usershell(void) { printf("\tdebug: increase the verbosity level\n"); printf("\tquiet: decrease the verbosity level\n"); printf("\texit: quit the shell\n"); - } + } free(cmdline); /* not xmlFree here ! */ } } /************************************************************************ - * * - * Main * - * * + * * + * Main * + * * ************************************************************************/ static void usage(const char *name) { /* split into 2 printf's to avoid overly long string (gcc warning) */ @@ -507,7 +507,7 @@ int main(int argc, char **argv) { exit_value = 2; noout = 0; } else { - + xmlACatalogDump(super, out); fclose(out); } @@ -544,14 +544,14 @@ int main(int argc, char **argv) { } } } - + } else if (shell) { usershell(); } else { for (i++; i < argc; i++) { xmlURIPtr uri; xmlChar *ans; - + uri = xmlParseURI(argv[i]); if (uri == NULL) { ans = xmlCatalogResolvePublic((const xmlChar *) argv[i]); diff --git a/lib/3rdparty/libxml2/xmllint.c b/lib/3rdparty/libxml2/xmllint.c index b7af32f090f..9415d9aa49d 100644 --- a/lib/3rdparty/libxml2/xmllint.c +++ b/lib/3rdparty/libxml2/xmllint.c @@ -130,6 +130,7 @@ static int copy = 0; #endif /* LIBXML_TREE_ENABLED */ static int recovery = 0; static int noent = 0; +static int noenc = 0; static int noblanks = 0; static int noout = 0; static int nowrap = 0; @@ -168,7 +169,7 @@ static int nodefdtd = 0; #ifdef LIBXML_PUSH_ENABLED static int push = 0; #endif /* LIBXML_PUSH_ENABLED */ -#ifdef HAVE_SYS_MMAN_H +#ifdef HAVE_MMAP static int memory = 0; #endif static int testIO = 0; @@ -208,7 +209,7 @@ static xmlStreamCtxtPtr patstream = NULL; #ifdef LIBXML_XPATH_ENABLED static const char *xpathquery = NULL; #endif -static int options = XML_PARSE_COMPACT; +static int options = XML_PARSE_COMPACT | XML_PARSE_BIG_LINES; static int sax = 0; static int oldxml10 = 0; @@ -519,10 +520,11 @@ endTimer(char *format, ...) * We cannot do anything because we don't have a timing function */ #ifdef HAVE_STDARG_H + va_list ap; va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap); - fprintf(stderr, " was not timed\n", msec); + fprintf(stderr, " was not timed\n"); #else /* We don't have gettimeofday, time or stdarg.h, what crazy world is * this ?! @@ -1667,6 +1669,7 @@ testSAX(const char *filename) { (xmlSchemaValidityErrorFunc) fprintf, (xmlSchemaValidityWarningFunc) fprintf, stderr); + xmlSchemaValidateSetFilename(vctxt, filename); ret = xmlSchemaValidateStream(vctxt, buf, 0, handler, (void *)user_data); @@ -1821,7 +1824,7 @@ static void processNode(xmlTextReaderPtr reader) { static void streamFile(char *filename) { xmlTextReaderPtr reader; int ret; -#ifdef HAVE_SYS_MMAN_H +#ifdef HAVE_MMAP int fd = -1; struct stat info; const char *base = NULL; @@ -1972,7 +1975,7 @@ static void streamFile(char *filename) { patstream = NULL; } #endif -#ifdef HAVE_SYS_MMAN_H +#ifdef HAVE_MMAP if (memory) { xmlFreeParserInputBuffer(input); munmap((char *) base, info.st_size); @@ -2072,7 +2075,7 @@ static void doXPathDump(xmlXPathObjectPtr cur) { #ifdef LIBXML_OUTPUT_ENABLED xmlSaveCtxtPtr ctxt; - if (cur->nodesetval->nodeNr <= 0) { + if ((cur->nodesetval == NULL) || (cur->nodesetval->nodeNr <= 0)) { fprintf(stderr, "XPath set is empty\n"); progresult = XMLLINT_ERR_XPATH; break; @@ -2137,7 +2140,7 @@ static void doXPathQuery(xmlDocPtr doc, const char *query) { progresult = XMLLINT_ERR_MEM; return; } - ctxt->node = xmlDocGetRootElement(doc); + ctxt->node = (xmlNodePtr) doc; res = xmlXPathEval(BAD_CAST query, ctxt); xmlXPathFreeContext(ctxt); @@ -2210,7 +2213,7 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) { } } #endif /* LIBXML_PUSH_ENABLED */ -#ifdef HAVE_SYS_MMAN_H +#ifdef HAVE_MMAP else if ((html) && (memory)) { int fd; struct stat info; @@ -2325,7 +2328,7 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) { if (rectxt == NULL) xmlFreeParserCtxt(ctxt); } -#ifdef HAVE_SYS_MMAN_H +#ifdef HAVE_MMAP } else if (memory) { int fd; struct stat info; @@ -2550,7 +2553,9 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) { size = xmlC14NDocDumpMemory(doc, NULL, XML_C14N_1_0, NULL, 1, &result); if (size >= 0) { - write(1, result, size); + if (write(1, result, size) == -1) { + fprintf(stderr, "Can't write data\n"); + } xmlFree(result); } else { fprintf(stderr, "Failed to canonicalize\n"); @@ -2562,7 +2567,9 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) { size = xmlC14NDocDumpMemory(doc, NULL, XML_C14N_1_1, NULL, 1, &result); if (size >= 0) { - write(1, result, size); + if (write(1, result, size) == -1) { + fprintf(stderr, "Can't write data\n"); + } xmlFree(result); } else { fprintf(stderr, "Failed to canonicalize\n"); @@ -2575,7 +2582,9 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) { size = xmlC14NDocDumpMemory(doc, NULL, XML_C14N_EXCLUSIVE_1_0, NULL, 1, &result); if (size >= 0) { - write(1, result, size); + if (write(1, result, size) == -1) { + fprintf(stderr, "Can't write data\n"); + } xmlFree(result); } else { fprintf(stderr, "Failed to canonicalize\n"); @@ -2583,7 +2592,7 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) { } } else #endif -#ifdef HAVE_SYS_MMAN_H +#ifdef HAVE_MMAP if (memory) { xmlChar *result; int len; @@ -2604,12 +2613,14 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) { fprintf(stderr, "Failed to save\n"); progresult = XMLLINT_ERR_OUT; } else { - write(1, result, len); + if (write(1, result, len) == -1) { + fprintf(stderr, "Can't write data\n"); + } xmlFree(result); } } else -#endif /* HAVE_SYS_MMAN_H */ +#endif /* HAVE_MMAP */ if (compress) { xmlSaveFile(output ? output : "-", doc); } else if (oldout) { @@ -2949,6 +2960,7 @@ static void showVersion(const char *name) { if (xmlHasFeature(XML_WITH_DEBUG_MEM)) fprintf(stderr, "MemDebug "); if (xmlHasFeature(XML_WITH_DEBUG_RUN)) fprintf(stderr, "RunDebug "); if (xmlHasFeature(XML_WITH_ZLIB)) fprintf(stderr, "Zlib "); + if (xmlHasFeature(XML_WITH_LZMA)) fprintf(stderr, "Lzma "); fprintf(stderr, "\n"); } @@ -2975,6 +2987,7 @@ static void usage(const char *name) { printf("\t--recover : output what was parsable on broken XML documents\n"); printf("\t--huge : remove any internal arbitrary parser limits\n"); printf("\t--noent : substitute entity references by their value\n"); + printf("\t--noenc : ignore any encoding specified inside the document\n"); printf("\t--noout : don't output the result tree\n"); printf("\t--path 'paths': provide a set of paths for resources\n"); printf("\t--load-trace : print trace of all external entites loaded\n"); @@ -3005,7 +3018,7 @@ static void usage(const char *name) { #ifdef LIBXML_PUSH_ENABLED printf("\t--push : use the push mode of the parser\n"); #endif /* LIBXML_PUSH_ENABLED */ -#ifdef HAVE_SYS_MMAN_H +#ifdef HAVE_MMAP printf("\t--memory : parse from memory\n"); #endif printf("\t--maxmem nbbytes : limits memory allocation to nbbytes bytes\n"); @@ -3129,6 +3142,10 @@ main(int argc, char **argv) { (!strcmp(argv[i], "--noent"))) { noent++; options |= XML_PARSE_NOENT; + } else if ((!strcmp(argv[i], "-noenc")) || + (!strcmp(argv[i], "--noenc"))) { + noenc++; + options |= XML_PARSE_IGNORE_ENC; } else if ((!strcmp(argv[i], "-nsclean")) || (!strcmp(argv[i], "--nsclean"))) { options |= XML_PARSE_NSCLEAN; @@ -3231,7 +3248,7 @@ main(int argc, char **argv) { (!strcmp(argv[i], "--push"))) push++; #endif /* LIBXML_PUSH_ENABLED */ -#ifdef HAVE_SYS_MMAN_H +#ifdef HAVE_MMAP else if ((!strcmp(argv[i], "-memory")) || (!strcmp(argv[i], "--memory"))) memory++; @@ -3323,8 +3340,9 @@ main(int argc, char **argv) { } else if ((!strcmp(argv[i], "-noblanks")) || (!strcmp(argv[i], "--noblanks"))) { - noblanks++; - xmlKeepBlanksDefault(0); + noblanks++; + xmlKeepBlanksDefault(0); + options |= XML_PARSE_NOBLANKS; } else if ((!strcmp(argv[i], "-maxmem")) || (!strcmp(argv[i], "--maxmem"))) { @@ -3349,11 +3367,11 @@ main(int argc, char **argv) { i++; #ifdef LIBXML_OUTPUT_ENABLED format = atoi(argv[i]); -#endif /* LIBXML_OUTPUT_ENABLED */ if (format == 1) { noblanks++; xmlKeepBlanksDefault(0); } +#endif /* LIBXML_OUTPUT_ENABLED */ } #ifdef LIBXML_READER_ENABLED else if ((!strcmp(argv[i], "-stream")) || diff --git a/lib/3rdparty/libxml2/xmlmemory.c b/lib/3rdparty/libxml2/xmlmemory.c index 433abb8efed..25d93185b8c 100644 --- a/lib/3rdparty/libxml2/xmlmemory.c +++ b/lib/3rdparty/libxml2/xmlmemory.c @@ -58,7 +58,7 @@ void xmlMallocBreakpoint(void); /************************************************************************ * * - * Macros, variables and associated types * + * Macros, variables and associated types * * * ************************************************************************/ @@ -205,7 +205,8 @@ xmlMallocLoc(size_t size, const char * file, int line) if (xmlMemTraceBlockAt == ret) { xmlGenericError(xmlGenericErrorContext, - "%p : Malloc(%ld) Ok\n", xmlMemTraceBlockAt, size); + "%p : Malloc(%lu) Ok\n", xmlMemTraceBlockAt, + (long unsigned)size); xmlMallocBreakpoint(); } @@ -273,7 +274,8 @@ xmlMallocAtomicLoc(size_t size, const char * file, int line) if (xmlMemTraceBlockAt == ret) { xmlGenericError(xmlGenericErrorContext, - "%p : Malloc(%ld) Ok\n", xmlMemTraceBlockAt, size); + "%p : Malloc(%lu) Ok\n", xmlMemTraceBlockAt, + (long unsigned)size); xmlMallocBreakpoint(); } @@ -348,8 +350,9 @@ xmlReallocLoc(void *ptr,size_t size, const char * file, int line) } if (xmlMemTraceBlockAt == ptr) { xmlGenericError(xmlGenericErrorContext, - "%p : Realloced(%ld -> %ld) Ok\n", - xmlMemTraceBlockAt, p->mh_size, size); + "%p : Realloced(%lu -> %lu) Ok\n", + xmlMemTraceBlockAt, (long unsigned)p->mh_size, + (long unsigned)size); xmlMallocBreakpoint(); } p->mh_tag = MEMTAG; diff --git a/lib/3rdparty/libxml2/xmlmodule.c b/lib/3rdparty/libxml2/xmlmodule.c index 577c49bcd1c..9232da3b5f9 100644 --- a/lib/3rdparty/libxml2/xmlmodule.c +++ b/lib/3rdparty/libxml2/xmlmodule.c @@ -30,7 +30,7 @@ static int xmlModulePlatformSymbol(void *handle, const char *name, void **result /************************************************************************ * * - * module memory error handler * + * module memory error handler * * * ************************************************************************/ @@ -61,6 +61,10 @@ xmlModuleErrMemory(xmlModulePtr module, const char *extra) * @options: a set of xmlModuleOption * * Opens a module/shared library given its name or path + * NOTE: that due to portability issues, behaviour can only be + * guaranteed with @name using ASCII. We canot guarantee that + * an UTF-8 string would work, which is why name is a const char * + * and not a const xmlChar * . * TODO: options are not yet implemented. * * Returns a handle for the module or NULL in case of error @@ -99,6 +103,10 @@ xmlModuleOpen(const char *name, int options ATTRIBUTE_UNUSED) * @symbol: the resulting symbol address * * Lookup for a symbol address in the given module + * NOTE: that due to portability issues, behaviour can only be + * guaranteed with @name using ASCII. We canot guarantee that + * an UTF-8 string would work, which is why name is a const char * + * and not a const xmlChar * . * * Returns 0 if the symbol was found, or -1 in case of error */ @@ -106,7 +114,7 @@ int xmlModuleSymbol(xmlModulePtr module, const char *name, void **symbol) { int rc = -1; - + if ((NULL == module) || (symbol == NULL)) { __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE, XML_MODULE_OPEN, XML_ERR_FATAL, NULL, 0, 0, @@ -300,7 +308,7 @@ xmlModulePlatformSymbol(void *handle, const char *name, void **symbol) static void * xmlModulePlatformOpen(const char *name) { - return LoadLibrary(name); + return LoadLibraryA(name); } /* @@ -326,7 +334,14 @@ xmlModulePlatformClose(void *handle) static int xmlModulePlatformSymbol(void *handle, const char *name, void **symbol) { +#ifdef _WIN32_WCE + /* + * GetProcAddressA seems only available on WinCE + */ + *symbol = GetProcAddressA(handle, name); +#else *symbol = GetProcAddress(handle, name); +#endif return (NULL == *symbol) ? -1 : 0; } diff --git a/lib/3rdparty/libxml2/xmlreader.c b/lib/3rdparty/libxml2/xmlreader.c index 97c71abbf39..579e9437a45 100644 --- a/lib/3rdparty/libxml2/xmlreader.c +++ b/lib/3rdparty/libxml2/xmlreader.c @@ -44,6 +44,8 @@ #include #endif +#include "buf.h" + #define MAX_ERR_MSG_SIZE 64000 /* @@ -135,7 +137,7 @@ struct _xmlTextReader { int depth; /* depth of the current node */ xmlNodePtr faketext;/* fake xmlNs chld */ int preserve;/* preserve the resulting document */ - xmlBufferPtr buffer; /* used to return const xmlChar * */ + xmlBufPtr buffer; /* used to return const xmlChar * */ xmlDictPtr dict; /* the context dictionnary */ /* entity stack when traversing entities content */ @@ -152,6 +154,7 @@ struct _xmlTextReader { /* Handling of RelaxNG validation */ xmlRelaxNGPtr rngSchemas; /* The Relax NG schemas */ xmlRelaxNGValidCtxtPtr rngValidCtxt;/* The Relax NG validation context */ + int rngPreserveCtxt; /* 1 if the context was provided by the user */ int rngValidErrors;/* The number of errors detected */ xmlNodePtr rngFullNode; /* the node if RNG not progressive */ /* Handling of Schemas validation */ @@ -806,9 +809,10 @@ xmlTextReaderCDataBlock(void *ctx, const xmlChar *ch, int len) */ static int xmlTextReaderPushData(xmlTextReaderPtr reader) { - xmlBufferPtr inbuf; + xmlBufPtr inbuf; int val, s; xmlTextReaderState oldstate; + int alloc; if ((reader->input == NULL) || (reader->input->buffer == NULL)) return(-1); @@ -816,17 +820,18 @@ xmlTextReaderPushData(xmlTextReaderPtr reader) { oldstate = reader->state; reader->state = XML_TEXTREADER_NONE; inbuf = reader->input->buffer; + alloc = xmlBufGetAllocationScheme(inbuf); while (reader->state == XML_TEXTREADER_NONE) { - if (inbuf->use < reader->cur + CHUNK_SIZE) { + if (xmlBufUse(inbuf) < reader->cur + CHUNK_SIZE) { /* * Refill the buffer unless we are at the end of the stream */ if (reader->mode != XML_TEXTREADER_MODE_EOF) { val = xmlParserInputBufferRead(reader->input, 4096); if ((val == 0) && - (inbuf->alloc == XML_BUFFER_ALLOC_IMMUTABLE)) { - if (inbuf->use == reader->cur) { + (alloc == XML_BUFFER_ALLOC_IMMUTABLE)) { + if (xmlBufUse(inbuf) == reader->cur) { reader->mode = XML_TEXTREADER_MODE_EOF; reader->state = oldstate; } @@ -849,21 +854,23 @@ xmlTextReaderPushData(xmlTextReaderPtr reader) { * parse by block of CHUNK_SIZE bytes, various tests show that * it's the best tradeoff at least on a 1.2GH Duron */ - if (inbuf->use >= reader->cur + CHUNK_SIZE) { + if (xmlBufUse(inbuf) >= reader->cur + CHUNK_SIZE) { val = xmlParseChunk(reader->ctxt, - (const char *) &inbuf->content[reader->cur], - CHUNK_SIZE, 0); + (const char *) xmlBufContent(inbuf) + reader->cur, + CHUNK_SIZE, 0); reader->cur += CHUNK_SIZE; - if ((val != 0) || (reader->ctxt->wellFormed == 0)) - return(-1); + if (val != 0) + reader->ctxt->wellFormed = 0; + if (reader->ctxt->wellFormed == 0) + break; } else { - s = inbuf->use - reader->cur; + s = xmlBufUse(inbuf) - reader->cur; val = xmlParseChunk(reader->ctxt, - (const char *) &inbuf->content[reader->cur], - s, 0); + (const char *) xmlBufContent(inbuf) + reader->cur, + s, 0); reader->cur += s; - if ((val != 0) || (reader->ctxt->wellFormed == 0)) - return(-1); + if (val != 0) + reader->ctxt->wellFormed = 0; break; } } @@ -872,10 +879,10 @@ xmlTextReaderPushData(xmlTextReaderPtr reader) { * Discard the consumed input when needed and possible */ if (reader->mode == XML_TEXTREADER_MODE_INTERACTIVE) { - if (inbuf->alloc != XML_BUFFER_ALLOC_IMMUTABLE) { + if (alloc != XML_BUFFER_ALLOC_IMMUTABLE) { if ((reader->cur >= 4096) && - (inbuf->use - reader->cur <= CHUNK_SIZE)) { - val = xmlBufferShrink(inbuf, reader->cur); + (xmlBufUse(inbuf) - reader->cur <= CHUNK_SIZE)) { + val = xmlBufShrink(inbuf, reader->cur); if (val >= 0) { reader->cur -= val; } @@ -889,17 +896,26 @@ xmlTextReaderPushData(xmlTextReaderPtr reader) { */ else if (reader->mode == XML_TEXTREADER_MODE_EOF) { if (reader->state != XML_TEXTREADER_DONE) { - s = inbuf->use - reader->cur; + s = xmlBufUse(inbuf) - reader->cur; val = xmlParseChunk(reader->ctxt, - (const char *) &inbuf->content[reader->cur], - s, 1); - reader->cur = inbuf->use; + (const char *) xmlBufContent(inbuf) + reader->cur, + s, 1); + reader->cur = xmlBufUse(inbuf); reader->state = XML_TEXTREADER_DONE; - if ((val != 0) || (reader->ctxt->wellFormed == 0)) - return(-1); + if (val != 0) { + if (reader->ctxt->wellFormed) + reader->ctxt->wellFormed = 0; + else + return(-1); + } } } reader->state = oldstate; + if (reader->ctxt->wellFormed == 0) { + reader->mode = XML_TEXTREADER_MODE_EOF; + return(-1); + } + return(0); } @@ -1212,6 +1228,9 @@ xmlTextReaderCollectSiblings(xmlNodePtr node) xmlBufferPtr buffer; xmlChar *ret; + if ((node == NULL) || (node->type == XML_NAMESPACE_DECL)) + return(NULL); + buffer = xmlBufferCreate(); if (buffer == NULL) return NULL; @@ -1264,8 +1283,6 @@ xmlTextReaderRead(xmlTextReaderPtr reader) { return(xmlTextReaderReadTree(reader)); if (reader->ctxt == NULL) return(-1); - if (reader->ctxt->wellFormed != 1) - return(-1); #ifdef DEBUG_READER fprintf(stderr, "\nREAD "); @@ -1709,8 +1726,8 @@ xmlTextReaderReadInnerXml(xmlTextReaderPtr reader ATTRIBUTE_UNUSED) * * Reads the contents of the current node, including child nodes and markup. * - * Returns a string containing the node and any XML content, or NULL if the - * current node cannot be serialized. The string must be deallocated + * Returns a string containing the node and any XML content, or NULL if the + * current node cannot be serialized. The string must be deallocated * by the caller. */ xmlChar * @@ -2055,7 +2072,7 @@ xmlNewTextReader(xmlParserInputBufferPtr input, const char *URI) { ret->entMax = 0; ret->entNr = 0; ret->input = input; - ret->buffer = xmlBufferCreateSize(100); + ret->buffer = xmlBufCreateSize(100); if (ret->buffer == NULL) { xmlFree(ret); xmlGenericError(xmlGenericErrorContext, @@ -2064,7 +2081,7 @@ xmlNewTextReader(xmlParserInputBufferPtr input, const char *URI) { } ret->sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler)); if (ret->sax == NULL) { - xmlBufferFree(ret->buffer); + xmlBufFree(ret->buffer); xmlFree(ret); xmlGenericError(xmlGenericErrorContext, "xmlNewTextReader : malloc failed\n"); @@ -2097,12 +2114,13 @@ xmlNewTextReader(xmlParserInputBufferPtr input, const char *URI) { ret->mode = XML_TEXTREADER_MODE_INITIAL; ret->node = NULL; ret->curnode = NULL; - if (ret->input->buffer->use < 4) { + if (xmlBufUse(ret->input->buffer) < 4) { xmlParserInputBufferRead(input, 4); } - if (ret->input->buffer->use >= 4) { + if (xmlBufUse(ret->input->buffer) >= 4) { ret->ctxt = xmlCreatePushParserCtxt(ret->sax, NULL, - (const char *) ret->input->buffer->content, 4, URI); + (const char *) xmlBufContent(ret->input->buffer), + 4, URI); ret->base = 0; ret->cur = 4; } else { @@ -2114,7 +2132,7 @@ xmlNewTextReader(xmlParserInputBufferPtr input, const char *URI) { if (ret->ctxt == NULL) { xmlGenericError(xmlGenericErrorContext, "xmlNewTextReader : malloc failed\n"); - xmlBufferFree(ret->buffer); + xmlBufFree(ret->buffer); xmlFree(ret->sax); xmlFree(ret); return(NULL); @@ -2187,7 +2205,8 @@ xmlFreeTextReader(xmlTextReaderPtr reader) { reader->rngSchemas = NULL; } if (reader->rngValidCtxt != NULL) { - xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt); + if (! reader->rngPreserveCtxt) + xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt); reader->rngValidCtxt = NULL; } if (reader->xsdPlug != NULL) { @@ -2243,7 +2262,7 @@ xmlFreeTextReader(xmlTextReaderPtr reader) { if ((reader->input != NULL) && (reader->allocs & XML_TEXTREADER_INPUT)) xmlFreeParserInputBuffer(reader->input); if (reader->buffer != NULL) - xmlBufferFree(reader->buffer); + xmlBufFree(reader->buffer); if (reader->entTab != NULL) xmlFree(reader->entTab); if (reader->dict != NULL) @@ -3591,16 +3610,17 @@ xmlTextReaderConstValue(xmlTextReaderPtr reader) { (attr->children->next == NULL)) return(attr->children->content); else { - if (reader->buffer == NULL) - reader->buffer = xmlBufferCreateSize(100); if (reader->buffer == NULL) { - xmlGenericError(xmlGenericErrorContext, - "xmlTextReaderSetup : malloc failed\n"); - return (NULL); - } - reader->buffer->use = 0; - xmlNodeBufGetContent(reader->buffer, node); - return(reader->buffer->content); + reader->buffer = xmlBufCreateSize(100); + if (reader->buffer == NULL) { + xmlGenericError(xmlGenericErrorContext, + "xmlTextReaderSetup : malloc failed\n"); + return (NULL); + } + } else + xmlBufEmpty(reader->buffer); + xmlBufGetNodeContent(reader->buffer, node); + return(xmlBufContent(reader->buffer)); } break; } @@ -4095,9 +4115,11 @@ xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader, xmlRelaxNGPtr schema) { reader->rngSchemas = NULL; } if (reader->rngValidCtxt != NULL) { - xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt); + if (! reader->rngPreserveCtxt) + xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt); reader->rngValidCtxt = NULL; } + reader->rngPreserveCtxt = 0; return(0); } if (reader->mode != XML_TEXTREADER_MODE_INITIAL) @@ -4107,9 +4129,11 @@ xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader, xmlRelaxNGPtr schema) { reader->rngSchemas = NULL; } if (reader->rngValidCtxt != NULL) { - xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt); + if (! reader->rngPreserveCtxt) + xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt); reader->rngValidCtxt = NULL; } + reader->rngPreserveCtxt = 0; reader->rngValidCtxt = xmlRelaxNGNewValidCtxt(schema); if (reader->rngValidCtxt == NULL) return(-1); @@ -4130,6 +4154,60 @@ xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader, xmlRelaxNGPtr schema) { return(0); } +/** + * xmlTextReaderLocator: + * @ctx: the xmlTextReaderPtr used + * @file: returned file information + * @line: returned line information + * + * Internal locator function for the readers + * + * Returns 0 in case the Schema validation could be (des)activated and + * -1 in case of error. + */ +static int +xmlTextReaderLocator(void *ctx, const char **file, unsigned long *line) { + xmlTextReaderPtr reader; + + if ((ctx == NULL) || ((file == NULL) && (line == NULL))) + return(-1); + + if (file != NULL) + *file = NULL; + if (line != NULL) + *line = 0; + + reader = (xmlTextReaderPtr) ctx; + if ((reader->ctxt != NULL) && (reader->ctxt->input != NULL)) { + if (file != NULL) + *file = reader->ctxt->input->filename; + if (line != NULL) + *line = reader->ctxt->input->line; + return(0); + } + if (reader->node != NULL) { + long res; + int ret = 0; + + if (line != NULL) { + res = xmlGetLineNo(reader->node); + if (res > 0) + *line = (unsigned long) res; + else + ret = -1; + } + if (file != NULL) { + xmlDocPtr doc = reader->node->doc; + if ((doc != NULL) && (doc->URL != NULL)) + *file = (const char *) doc->URL; + else + ret = -1; + } + return(ret); + } + return(-1); +} + /** * xmlTextReaderSetSchema: * @reader: the xmlTextReaderPtr used @@ -4197,6 +4275,10 @@ xmlTextReaderSetSchema(xmlTextReaderPtr reader, xmlSchemaPtr schema) { reader->xsdValidCtxt = NULL; return(-1); } + xmlSchemaValidateSetLocator(reader->xsdValidCtxt, + xmlTextReaderLocator, + (void *) reader); + if (reader->errorFunc != NULL) { xmlSchemaSetValidErrors(reader->xsdValidCtxt, xmlTextReaderValidityErrorRelay, @@ -4214,67 +4296,91 @@ xmlTextReaderSetSchema(xmlTextReaderPtr reader, xmlSchemaPtr schema) { } /** - * xmlTextReaderRelaxNGValidate: + * xmlTextReaderRelaxNGValidateInternal: * @reader: the xmlTextReaderPtr used * @rng: the path to a RelaxNG schema or NULL + * @ctxt: the RelaxNG schema validation context or NULL + * @options: options (not yet used) * * Use RelaxNG to validate the document as it is processed. * Activation is only possible before the first Read(). - * if @rng is NULL, then RelaxNG validation is deactivated. + * If both @rng and @ctxt are NULL, then RelaxNG validation is deactivated. * * Returns 0 in case the RelaxNG validation could be (de)activated and - * -1 in case of error. + * -1 in case of error. */ -int -xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader, const char *rng) { - xmlRelaxNGParserCtxtPtr ctxt; - +static int +xmlTextReaderRelaxNGValidateInternal(xmlTextReaderPtr reader, + const char *rng, + xmlRelaxNGValidCtxtPtr ctxt, + int options ATTRIBUTE_UNUSED) +{ if (reader == NULL) - return(-1); - - if (rng == NULL) { - if (reader->rngValidCtxt != NULL) { - xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt); - reader->rngValidCtxt = NULL; - } - if (reader->rngSchemas != NULL) { - xmlRelaxNGFree(reader->rngSchemas); - reader->rngSchemas = NULL; - } - return(0); - } - if (reader->mode != XML_TEXTREADER_MODE_INITIAL) return(-1); + + if ((rng != NULL) && (ctxt != NULL)) + return (-1); + + if (((rng != NULL) || (ctxt != NULL)) && + ((reader->mode != XML_TEXTREADER_MODE_INITIAL) || + (reader->ctxt == NULL))) + return(-1); + + /* Cleanup previous validation stuff. */ + if (reader->rngValidCtxt != NULL) { + if ( !reader->rngPreserveCtxt) + xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt); + reader->rngValidCtxt = NULL; + } + reader->rngPreserveCtxt = 0; if (reader->rngSchemas != NULL) { xmlRelaxNGFree(reader->rngSchemas); reader->rngSchemas = NULL; } - if (reader->rngValidCtxt != NULL) { - xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt); - reader->rngValidCtxt = NULL; + + if ((rng == NULL) && (ctxt == NULL)) { + /* We just want to deactivate the validation, so get out. */ + return(0); } - ctxt = xmlRelaxNGNewParserCtxt(rng); - if (reader->errorFunc != NULL) { - xmlRelaxNGSetParserErrors(ctxt, - xmlTextReaderValidityErrorRelay, - xmlTextReaderValidityWarningRelay, - reader); - } - if (reader->sErrorFunc != NULL) { - xmlRelaxNGSetValidStructuredErrors(reader->rngValidCtxt, - xmlTextReaderValidityStructuredRelay, - reader); - } - reader->rngSchemas = xmlRelaxNGParse(ctxt); - xmlRelaxNGFreeParserCtxt(ctxt); - if (reader->rngSchemas == NULL) - return(-1); - reader->rngValidCtxt = xmlRelaxNGNewValidCtxt(reader->rngSchemas); - if (reader->rngValidCtxt == NULL) { - xmlRelaxNGFree(reader->rngSchemas); - reader->rngSchemas = NULL; - return(-1); + + + if (rng != NULL) { + xmlRelaxNGParserCtxtPtr pctxt; + /* Parse the schema and create validation environment. */ + + pctxt = xmlRelaxNGNewParserCtxt(rng); + if (reader->errorFunc != NULL) { + xmlRelaxNGSetParserErrors(pctxt, + xmlTextReaderValidityErrorRelay, + xmlTextReaderValidityWarningRelay, + reader); + } + if (reader->sErrorFunc != NULL) { + xmlRelaxNGSetValidStructuredErrors(reader->rngValidCtxt, + xmlTextReaderValidityStructuredRelay, + reader); + } + reader->rngSchemas = xmlRelaxNGParse(pctxt); + xmlRelaxNGFreeParserCtxt(pctxt); + if (reader->rngSchemas == NULL) + return(-1); + reader->rngValidCtxt = xmlRelaxNGNewValidCtxt(reader->rngSchemas); + if (reader->rngValidCtxt == NULL) { + xmlRelaxNGFree(reader->rngSchemas); + reader->rngSchemas = NULL; + return(-1); + } + } else { + /* Use the given validation context. */ + reader->rngValidCtxt = ctxt; + reader->rngPreserveCtxt = 1; } + /* + * Redirect the validation context's error channels to use + * the reader channels. + * TODO: In case the user provides the validation context we + * could make this redirection optional. + */ if (reader->errorFunc != NULL) { xmlRelaxNGSetValidErrors(reader->rngValidCtxt, xmlTextReaderValidityErrorRelay, @@ -4387,6 +4493,9 @@ xmlTextReaderSchemaValidateInternal(xmlTextReaderPtr reader, return(-1); } } + xmlSchemaValidateSetLocator(reader->xsdValidCtxt, + xmlTextReaderLocator, + (void *) reader); /* * Redirect the validation context's error channels to use * the reader channels. @@ -4447,6 +4556,46 @@ xmlTextReaderSchemaValidate(xmlTextReaderPtr reader, const char *xsd) { return(xmlTextReaderSchemaValidateInternal(reader, xsd, NULL, 0)); } + +/** + * xmlTextReaderRelaxNGValidateCtxt: + * @reader: the xmlTextReaderPtr used + * @ctxt: the RelaxNG schema validation context or NULL + * @options: options (not used yet) + * + * Use RelaxNG schema context to validate the document as it is processed. + * Activation is only possible before the first Read(). + * If @ctxt is NULL, then RelaxNG schema validation is deactivated. + * + * Returns 0 in case the schemas validation could be (de)activated and + * -1 in case of error. + */ +int +xmlTextReaderRelaxNGValidateCtxt(xmlTextReaderPtr reader, + xmlRelaxNGValidCtxtPtr ctxt, + int options) +{ + return(xmlTextReaderRelaxNGValidateInternal(reader, NULL, ctxt, options)); +} + +/** + * xmlTextReaderRelaxNGValidate: + * @reader: the xmlTextReaderPtr used + * @rng: the path to a RelaxNG schema or NULL + * + * Use RelaxNG schema to validate the document as it is processed. + * Activation is only possible before the first Read(). + * If @rng is NULL, then RelaxNG schema validation is deactivated. + * + * Returns 0 in case the schemas validation could be (de)activated and + * -1 in case of error. + */ +int +xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader, const char *rng) +{ + return(xmlTextReaderRelaxNGValidateInternal(reader, rng, NULL, 0)); +} + #endif /** @@ -4964,7 +5113,7 @@ xmlTextReaderSetup(xmlTextReaderPtr reader, reader->allocs |= XML_TEXTREADER_INPUT; } if (reader->buffer == NULL) - reader->buffer = xmlBufferCreateSize(100); + reader->buffer = xmlBufCreateSize(100); if (reader->buffer == NULL) { xmlGenericError(xmlGenericErrorContext, "xmlTextReaderSetup : malloc failed\n"); @@ -5005,13 +5154,14 @@ xmlTextReaderSetup(xmlTextReaderPtr reader, reader->node = NULL; reader->curnode = NULL; if (input != NULL) { - if (reader->input->buffer->use < 4) { + if (xmlBufUse(reader->input->buffer) < 4) { xmlParserInputBufferRead(input, 4); } if (reader->ctxt == NULL) { - if (reader->input->buffer->use >= 4) { + if (xmlBufUse(reader->input->buffer) >= 4) { reader->ctxt = xmlCreatePushParserCtxt(reader->sax, NULL, - (const char *) reader->input->buffer->content, 4, URL); + (const char *) xmlBufContent(reader->input->buffer), + 4, URL); reader->base = 0; reader->cur = 4; } else { @@ -5040,10 +5190,7 @@ xmlTextReaderSetup(xmlTextReaderPtr reader, inputStream->filename = (char *) xmlCanonicPath((const xmlChar *) URL); inputStream->buf = buf; - inputStream->base = inputStream->buf->buffer->content; - inputStream->cur = inputStream->buf->buffer->content; - inputStream->end = - &inputStream->buf->buffer->content[inputStream->buf->buffer->use]; + xmlBufResetInput(buf->buffer, inputStream); inputPush(reader->ctxt, inputStream); reader->cur = 0; @@ -5331,8 +5478,11 @@ xmlReaderForIO(xmlInputReadCallback ioread, xmlInputCloseCallback ioclose, input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx, XML_CHAR_ENCODING_NONE); - if (input == NULL) + if (input == NULL) { + if (ioclose != NULL) + ioclose(ioctx); return (NULL); + } reader = xmlNewTextReader(input, URL); if (reader == NULL) { xmlFreeParserInputBuffer(input); @@ -5549,10 +5699,14 @@ xmlReaderNewIO(xmlTextReaderPtr reader, xmlInputReadCallback ioread, input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx, XML_CHAR_ENCODING_NONE); - if (input == NULL) + if (input == NULL) { + if (ioclose != NULL) + ioclose(ioctx); return (-1); + } return (xmlTextReaderSetup(reader, input, URL, encoding, options)); } + /************************************************************************ * * * Utilities * diff --git a/lib/3rdparty/libxml2/xmlregexp.c b/lib/3rdparty/libxml2/xmlregexp.c index aaff33e78b2..68e7bed9492 100644 --- a/lib/3rdparty/libxml2/xmlregexp.c +++ b/lib/3rdparty/libxml2/xmlregexp.c @@ -1,7 +1,7 @@ /* * regexp.c: generic and extensible Regular Expression engine * - * Basically designed with the purpose of compiling regexps for + * Basically designed with the purpose of compiling regexps for * the variety of validation/shemas mechanisms now available in * XML related specifications these include: * - XML-1.0 DTD validation @@ -44,6 +44,9 @@ #define MAX_PUSH 10000000 +#ifdef ERROR +#undef ERROR +#endif #define ERROR(str) \ ctxt->error = XML_REGEXP_COMPILE_ERROR; \ xmlRegexpErrCompile(ctxt, str); @@ -65,15 +68,15 @@ * * macro to flag unimplemented blocks */ -#define TODO \ +#define TODO \ xmlGenericError(xmlGenericErrorContext, \ "Unimplemented block at %s:%d\n", \ __FILE__, __LINE__); /************************************************************************ - * * - * Datatypes and structures * - * * + * * + * Datatypes and structures * + * * ************************************************************************/ /* @@ -219,6 +222,7 @@ struct _xmlRegTrans { struct _xmlAutomataState { xmlRegStateType type; xmlRegMarkedType mark; + xmlRegMarkedType markd; xmlRegMarkedType reached; int no; int maxTrans; @@ -361,7 +365,7 @@ void xmlAutomataSetFlags(xmlAutomataPtr am, int flags); /************************************************************************ * * - * Regexp memory error handler * + * Regexp memory error handler * * * ************************************************************************/ /** @@ -408,9 +412,9 @@ xmlRegexpErrCompile(xmlRegParserCtxtPtr ctxt, const char *extra) } /************************************************************************ - * * - * Allocation/Deallocation * - * * + * * + * Allocation/Deallocation * + * * ************************************************************************/ static int xmlFAComputesDeterminism(xmlRegParserCtxtPtr ctxt); @@ -931,9 +935,9 @@ xmlRegFreeParserCtxt(xmlRegParserCtxtPtr ctxt) { } /************************************************************************ - * * - * Display of Data structures * - * * + * * + * Display of Data structures * + * * ************************************************************************/ static void @@ -1140,7 +1144,7 @@ xmlRegPrintTrans(FILE *output, xmlRegTransPtr trans) { fprintf(output, "char %c ", trans->atom->codepoint); fprintf(output, "atom %d, to %d\n", trans->atom->no, trans->to); } - + static void xmlRegPrintState(FILE *output, xmlRegStatePtr state) { int i; @@ -1154,7 +1158,7 @@ xmlRegPrintState(FILE *output, xmlRegStatePtr state) { fprintf(output, "START "); if (state->type == XML_REGEXP_FINAL_STATE) fprintf(output, "FINAL "); - + fprintf(output, "%d, %d transitions:\n", state->no, state->nbTrans); for (i = 0;i < state->nbTrans; i++) { xmlRegPrintTrans(output, &(state->trans[i])); @@ -1204,12 +1208,12 @@ xmlRegPrintCtxt(FILE *output, xmlRegParserCtxtPtr ctxt) { #endif /************************************************************************ - * * + * * * Finite Automata structures manipulations * - * * + * * ************************************************************************/ -static void +static void xmlRegAtomAddRange(xmlRegParserCtxtPtr ctxt, xmlRegAtomPtr atom, int neg, xmlRegAtomType type, int start, int end, xmlChar *blockName) { @@ -1249,7 +1253,7 @@ xmlRegAtomAddRange(xmlRegParserCtxtPtr ctxt, xmlRegAtomPtr atom, return; range->blockName = blockName; atom->ranges[atom->nbRanges++] = range; - + } static int @@ -1280,7 +1284,7 @@ xmlRegGetCounter(xmlRegParserCtxtPtr ctxt) { return(ctxt->nbCounters++); } -static int +static int xmlRegAtomPush(xmlRegParserCtxtPtr ctxt, xmlRegAtomPtr atom) { if (atom == NULL) { ERROR("atom push: atom is NULL"); @@ -1312,7 +1316,7 @@ xmlRegAtomPush(xmlRegParserCtxtPtr ctxt, xmlRegAtomPtr atom) { return(0); } -static void +static void xmlRegStateAddTransTo(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr target, int from) { if (target->maxTransTo == 0) { @@ -1340,7 +1344,7 @@ xmlRegStateAddTransTo(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr target, target->nbTransTo++; } -static void +static void xmlRegStateAddTrans(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state, xmlRegAtomPtr atom, xmlRegStatePtr target, int counter, int count) { @@ -1406,7 +1410,7 @@ xmlRegStateAddTrans(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state, printf("counted %d\n", counter); else if (atom == NULL) printf("epsilon transition\n"); - else if (atom != NULL) + else if (atom != NULL) xmlRegPrintAtom(stdout, atom); #endif @@ -1560,7 +1564,7 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from, */ xmlFAGenerateEpsilonTransition(ctxt, atom->stop, to); #ifdef DV - } else if ((to == NULL) && (atom->quant != XML_REGEXP_QUANT_RANGE) && + } else if ((to == NULL) && (atom->quant != XML_REGEXP_QUANT_RANGE) && (atom->quant != XML_REGEXP_QUANT_ONCE)) { to = xmlRegNewState(ctxt); xmlRegStatePush(ctxt, to); @@ -1574,7 +1578,7 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from, /* * transition done to the state after end of atom. * 1. set transition from atom start to new state - * 2. set transition from atom end to this state. + * 2. set transition from atom end to this state. */ if (to == NULL) { xmlFAGenerateEpsilonTransition(ctxt, atom->start, 0); @@ -1618,7 +1622,7 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from, /* * duplicate a transition based on atom to count next * occurences after 1. We cannot loop to atom->start - * directly because we need an epsilon transition to + * directly because we need an epsilon transition to * newstate. */ /* ???? For some reason it seems we never reach that @@ -1677,7 +1681,7 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from, break; } return(0); - } + } if ((atom->min == 0) && (atom->max == 0) && (atom->quant == XML_REGEXP_QUANT_RANGE)) { /* @@ -1703,9 +1707,9 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from, else { return(-1); } - } + } end = to; - if ((atom->quant == XML_REGEXP_QUANT_MULT) || + if ((atom->quant == XML_REGEXP_QUANT_MULT) || (atom->quant == XML_REGEXP_QUANT_PLUS)) { /* * Do not pollute the target state by adding transitions from @@ -1713,7 +1717,7 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from, * So isolate with an epsilon transition. */ xmlRegStatePtr tmp; - + tmp = xmlRegNewState(ctxt); if (tmp != NULL) xmlRegStatePush(ctxt, tmp); @@ -1742,7 +1746,7 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from, atom->quant = XML_REGEXP_QUANT_ONCE; xmlRegStateAddTrans(ctxt, to, atom, to, -1, -1); break; - case XML_REGEXP_QUANT_RANGE: + case XML_REGEXP_QUANT_RANGE: #if DV_test if (atom->min == 0) { xmlFAGenerateEpsilonTransition(ctxt, from, to); @@ -1759,7 +1763,7 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from, * xmlFAReduceEpsilonTransitions: * @ctxt: a regexp parser context * @fromnr: the from state - * @tonr: the to state + * @tonr: the to state * @counter: should that transition be associated to a counted * */ @@ -1803,7 +1807,7 @@ xmlFAReduceEpsilonTransitions(xmlRegParserCtxtPtr ctxt, int fromnr, int newto = to->trans[transnr].to; xmlRegStateAddTrans(ctxt, from, NULL, - ctxt->states[newto], + ctxt->states[newto], -1, to->trans[transnr].count); } else { #ifdef DEBUG_REGEXP_GRAPH @@ -1825,11 +1829,11 @@ xmlFAReduceEpsilonTransitions(xmlRegParserCtxtPtr ctxt, int fromnr, int newto = to->trans[transnr].to; if (to->trans[transnr].counter >= 0) { - xmlRegStateAddTrans(ctxt, from, to->trans[transnr].atom, - ctxt->states[newto], + xmlRegStateAddTrans(ctxt, from, to->trans[transnr].atom, + ctxt->states[newto], to->trans[transnr].counter, -1); } else { - xmlRegStateAddTrans(ctxt, from, to->trans[transnr].atom, + xmlRegStateAddTrans(ctxt, from, to->trans[transnr].atom, ctxt->states[newto], counter, -1); } } @@ -1841,7 +1845,7 @@ xmlFAReduceEpsilonTransitions(xmlRegParserCtxtPtr ctxt, int fromnr, * xmlFAEliminateSimpleEpsilonTransitions: * @ctxt: a regexp parser context * - * Eliminating general epsilon transitions can get costly in the general + * Eliminating general epsilon transitions can get costly in the general * algorithm due to the large amount of generated new transitions and * associated comparisons. However for simple epsilon transition used just * to separate building blocks when generating the automata this can be @@ -1877,12 +1881,12 @@ xmlFAEliminateSimpleEpsilonTransitions(xmlRegParserCtxtPtr ctxt) { #ifdef DEBUG_REGEXP_GRAPH printf("Found simple epsilon trans from start %d to %d\n", statenr, newto); -#endif +#endif } else { #ifdef DEBUG_REGEXP_GRAPH printf("Found simple epsilon trans from %d to %d\n", statenr, newto); -#endif +#endif for (i = 0;i < state->nbTransTo;i++) { tmp = ctxt->states[state->transTo[i]]; for (j = 0;j < tmp->nbTrans;j++) { @@ -1890,10 +1894,10 @@ xmlFAEliminateSimpleEpsilonTransitions(xmlRegParserCtxtPtr ctxt) { #ifdef DEBUG_REGEXP_GRAPH printf("Changed transition %d on %d to go to %d\n", j, tmp->no, newto); -#endif +#endif tmp->trans[j].to = -1; xmlRegStateAddTrans(ctxt, tmp, tmp->trans[j].atom, - ctxt->states[newto], + ctxt->states[newto], tmp->trans[j].counter, tmp->trans[j].count); } @@ -1907,7 +1911,7 @@ xmlFAEliminateSimpleEpsilonTransitions(xmlRegParserCtxtPtr ctxt) { state->type = XML_REGEXP_UNREACH_STATE; } - + } } } @@ -2109,7 +2113,7 @@ xmlFACompareRanges(xmlRegRangePtr range1, xmlRegRangePtr range2) { /* * just check all codepoints in the range for acceptance, * this is usually way cheaper since done only once at - * compilation than testing over and over at runtime or + * compilation than testing over and over at runtime or * pushing too many states when evaluating. */ if (((range1->neg == 0) && (range2->neg != 0)) || @@ -2586,6 +2590,8 @@ xmlFARecurseDeterminism(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state, if (state == NULL) return(ret); + if (state->markd == XML_REGEXP_MARK_VISITED) + return(ret); if (ctxt->flags & AM_AUTOMATA_RNG) deep = 0; @@ -2603,8 +2609,10 @@ xmlFARecurseDeterminism(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state, if (t1->atom == NULL) { if (t1->to < 0) continue; + state->markd = XML_REGEXP_MARK_VISITED; res = xmlFARecurseDeterminism(ctxt, ctxt->states[t1->to], to, atom); + state->markd = 0; if (res == 0) { ret = 0; /* t1->nd = 1; */ @@ -2773,9 +2781,9 @@ xmlFAComputesDeterminism(xmlRegParserCtxtPtr ctxt) { } /************************************************************************ - * * + * * * Routines to check input against transition atoms * - * * + * * ************************************************************************/ static int @@ -2804,7 +2812,7 @@ xmlRegCheckCharacterRange(xmlRegAtomType type, int codepoint, int neg, case XML_REGEXP_NOTINITNAME: neg = !neg; case XML_REGEXP_INITNAME: - ret = (IS_LETTER(codepoint) || + ret = (IS_LETTER(codepoint) || (codepoint == '_') || (codepoint == ':')); break; case XML_REGEXP_NOTNAMECHAR: @@ -3052,9 +3060,9 @@ xmlRegCheckCharacter(xmlRegAtomPtr atom, int codepoint) { } /************************************************************************ - * * + * * * Saving and restoring state of an execution context * - * * + * * ************************************************************************/ #ifdef DEBUG_REGEXP_EXEC @@ -3165,9 +3173,9 @@ xmlFARegExecRollBack(xmlRegExecCtxtPtr exec) { } /************************************************************************ - * * + * * * Verifier, running an input against a compiled regexp * - * * + * * ************************************************************************/ static int @@ -3199,7 +3207,7 @@ xmlFARegExec(xmlRegexpPtr comp, const xmlChar *content) { memset(exec->counts, 0, comp->nbCounters * sizeof(int)); } else exec->counts = NULL; - while ((exec->status == 0) && + while ((exec->status == 0) && (exec->state != NULL) && ((exec->inputString[exec->index] != 0) || ((exec->state != NULL) && (exec->state->type != XML_REGEXP_FINAL_STATE)))) { @@ -3453,6 +3461,8 @@ error: } xmlFree(exec->rollbacks); } + if (exec->state == NULL) + return(-1); if (exec->counts != NULL) xmlFree(exec->counts); if (exec->status == 0) @@ -3466,9 +3476,9 @@ error: } /************************************************************************ - * * + * * * Progressive interface to the verifier one atom at a time * - * * + * * ************************************************************************/ #ifdef DEBUG_ERR static void testerr(xmlRegExecCtxtPtr exec); @@ -3585,7 +3595,7 @@ xmlFARegExecSaveInputString(xmlRegExecCtxtPtr exec, const xmlChar *value, #endif if (exec->inputStackMax == 0) { exec->inputStackMax = 4; - exec->inputStack = (xmlRegInputTokenPtr) + exec->inputStack = (xmlRegInputTokenPtr) xmlMalloc(exec->inputStackMax * sizeof(xmlRegInputToken)); if (exec->inputStack == NULL) { xmlRegexpErrMemory(NULL, "pushing input string"); @@ -3614,11 +3624,11 @@ xmlFARegExecSaveInputString(xmlRegExecCtxtPtr exec, const xmlChar *value, /** * xmlRegStrEqualWildcard: - * @expStr: the string to be evaluated + * @expStr: the string to be evaluated * @valStr: the validation string * * Checks if both strings are equal or have the same content. "*" - * can be used as a wildcard in @valStr; "|" is used as a seperator of + * can be used as a wildcard in @valStr; "|" is used as a seperator of * substrings in both @expStr and @valStr. * * Returns 1 if the comparison is satisfied and the number of substrings @@ -3684,7 +3694,7 @@ xmlRegCompactPushString(xmlRegExecCtxtPtr exec, if ((comp == NULL) || (comp->compact == NULL) || (comp->stringMap == NULL)) return(-1); - + if (value == NULL) { /* * are we at a final state ? @@ -3705,9 +3715,9 @@ xmlRegCompactPushString(xmlRegExecCtxtPtr exec, for (i = 0;i < comp->nbstrings;i++) { target = comp->compact[state * (comp->nbstrings + 1) + i + 1]; if ((target > 0) && (target <= comp->nbstates)) { - target--; /* to avoid 0 */ + target--; /* to avoid 0 */ if (xmlRegStrEqualWildcard(comp->stringMap[i], value)) { - exec->index = target; + exec->index = target; if ((exec->callback != NULL) && (comp->transdata != NULL)) { exec->callback(exec->data, value, comp->transdata[state * comp->nbstrings + i], data); @@ -3841,7 +3851,7 @@ xmlRegExecPushStringInternal(xmlRegExecCtxtPtr exec, const xmlChar *value, continue; counter = &exec->comp->counters[t->counter]; count = exec->counts[t->counter]; - if ((count < counter->max) && + if ((count < counter->max) && (t->atom != NULL) && (xmlStrEqual(value, t->atom->valuep))) { ret = 0; @@ -4199,7 +4209,7 @@ xmlRegExecGetValues(xmlRegExecCtxtPtr exec, int err, int maxval; int nb = 0; - if ((exec == NULL) || (nbval == NULL) || (nbneg == NULL) || + if ((exec == NULL) || (nbval == NULL) || (nbneg == NULL) || (values == NULL) || (*nbval <= 0)) return(-1); @@ -4305,7 +4315,7 @@ xmlRegExecGetValues(xmlRegExecCtxtPtr exec, int err, values[nb++] = (xmlChar *) atom->valuep; (*nbval)++; } - } + } } for (transno = 0; (transno < state->nbTrans) && (nb < maxval); @@ -4332,7 +4342,7 @@ xmlRegExecGetValues(xmlRegExecCtxtPtr exec, int err, values[nb++] = (xmlChar *) atom->valuep; (*nbneg)++; } - } + } } } return(0); @@ -4563,10 +4573,10 @@ progress: } #endif /************************************************************************ - * * + * * * Parser for the Schemas Datatype Regular Expressions * * http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/#regexs * - * * + * * ************************************************************************/ /** @@ -4595,7 +4605,7 @@ xmlFAIsChar(xmlRegParserCtxtPtr ctxt) { * * [27] charProp ::= IsCategory | IsBlock * [28] IsCategory ::= Letters | Marks | Numbers | Punctuation | - * Separators | Symbols | Others + * Separators | Symbols | Others * [29] Letters ::= 'L' [ultmo]? * [30] Marks ::= 'M' [nce]? * [31] Numbers ::= 'N' [dlo]? @@ -4610,7 +4620,7 @@ xmlFAParseCharProp(xmlRegParserCtxtPtr ctxt) { int cur; xmlRegAtomType type = (xmlRegAtomType) 0; xmlChar *blockName = NULL; - + cur = CUR; if (cur == 'L') { NEXT; @@ -4782,15 +4792,15 @@ xmlFAParseCharProp(xmlRegParserCtxtPtr ctxt) { NEXT; start = ctxt->cur; cur = CUR; - if (((cur >= 'a') && (cur <= 'z')) || - ((cur >= 'A') && (cur <= 'Z')) || - ((cur >= '0') && (cur <= '9')) || + if (((cur >= 'a') && (cur <= 'z')) || + ((cur >= 'A') && (cur <= 'Z')) || + ((cur >= '0') && (cur <= '9')) || (cur == 0x2D)) { NEXT; cur = CUR; - while (((cur >= 'a') && (cur <= 'z')) || - ((cur >= 'A') && (cur <= 'Z')) || - ((cur >= '0') && (cur <= '9')) || + while (((cur >= 'a') && (cur <= 'z')) || + ((cur >= 'A') && (cur <= 'Z')) || + ((cur >= '0') && (cur <= '9')) || (cur == 0x2D)) { NEXT; cur = CUR; @@ -4816,7 +4826,7 @@ xmlFAParseCharProp(xmlRegParserCtxtPtr ctxt) { * xmlFAParseCharClassEsc: * @ctxt: a regexp parser context * - * [23] charClassEsc ::= ( SingleCharEsc | MultiCharEsc | catEsc | complEsc ) + * [23] charClassEsc ::= ( SingleCharEsc | MultiCharEsc | catEsc | complEsc ) * [24] SingleCharEsc ::= '\' [nrt\|.?*+(){}#x2D#x5B#x5D#x5E] * [25] catEsc ::= '\p{' charProp '}' * [26] complEsc ::= '\P{' charProp '}' @@ -4913,34 +4923,34 @@ xmlFAParseCharClassEsc(xmlRegParserCtxtPtr ctxt) { xmlRegAtomType type = XML_REGEXP_ANYSPACE; switch (cur) { - case 's': + case 's': type = XML_REGEXP_ANYSPACE; break; - case 'S': + case 'S': type = XML_REGEXP_NOTSPACE; break; - case 'i': + case 'i': type = XML_REGEXP_INITNAME; break; - case 'I': + case 'I': type = XML_REGEXP_NOTINITNAME; break; - case 'c': + case 'c': type = XML_REGEXP_NAMECHAR; break; - case 'C': + case 'C': type = XML_REGEXP_NOTNAMECHAR; break; - case 'd': + case 'd': type = XML_REGEXP_DECIMAL; break; - case 'D': + case 'D': type = XML_REGEXP_NOTDECIMAL; break; - case 'w': + case 'w': type = XML_REGEXP_REALCHAR; break; - case 'W': + case 'W': type = XML_REGEXP_NOTREALCHAR; break; } @@ -4960,7 +4970,7 @@ xmlFAParseCharClassEsc(xmlRegParserCtxtPtr ctxt) { * xmlFAParseCharRange: * @ctxt: a regexp parser context * - * [17] charRange ::= seRange | XmlCharRef | XmlCharIncDash + * [17] charRange ::= seRange | XmlCharRef | XmlCharIncDash * [18] seRange ::= charOrEsc '-' charOrEsc * [20] charOrEsc ::= XmlChar | SingleCharEsc * [21] XmlChar ::= [^\#x2D#x5B#x5D] @@ -5075,7 +5085,7 @@ xmlFAParsePosCharGroup(xmlRegParserCtxtPtr ctxt) { * * [13] charGroup ::= posCharGroup | negCharGroup | charClassSub * [15] negCharGroup ::= '^' posCharGroup - * [16] charClassSub ::= ( posCharGroup | negCharGroup ) '-' charClassExpr + * [16] charClassSub ::= ( posCharGroup | negCharGroup ) '-' charClassExpr * [12] charClassExpr ::= '[' charGroup ']' */ static void @@ -5323,7 +5333,7 @@ xmlFAParseBranch(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr to) { previous = ctxt->state; ret = xmlFAParsePiece(ctxt); if (ret != 0) { - if (xmlFAGenerateTransitions(ctxt, previous, + if (xmlFAGenerateTransitions(ctxt, previous, (CUR=='|' || CUR==')') ? to : NULL, ctxt->atom) < 0) return(-1); previous = ctxt->state; @@ -5332,7 +5342,7 @@ xmlFAParseBranch(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr to) { while ((ret != 0) && (ctxt->error == 0)) { ret = xmlFAParsePiece(ctxt); if (ret != 0) { - if (xmlFAGenerateTransitions(ctxt, previous, + if (xmlFAGenerateTransitions(ctxt, previous, (CUR=='|' || CUR==')') ? to : NULL, ctxt->atom) < 0) return(-1); previous = ctxt->state; @@ -5370,6 +5380,10 @@ xmlFAParseRegExp(xmlRegParserCtxtPtr ctxt, int top) { end = ctxt->state; while ((CUR == '|') && (ctxt->error == 0)) { NEXT; + if (CUR == 0) { + ERROR("expecting a branch after |") + return; + } ctxt->state = start; ctxt->end = NULL; xmlFAParseBranch(ctxt, end); @@ -5381,9 +5395,9 @@ xmlFAParseRegExp(xmlRegParserCtxtPtr ctxt, int top) { } /************************************************************************ - * * - * The basic API * - * * + * * + * The basic API * + * * ************************************************************************/ /** @@ -5570,9 +5584,9 @@ xmlRegFreeRegexp(xmlRegexpPtr regexp) { #ifdef LIBXML_AUTOMATA_ENABLED /************************************************************************ - * * - * The Automata interface * - * * + * * + * The Automata interface * + * * ************************************************************************/ /** @@ -5843,7 +5857,7 @@ xmlAutomataNewNegTrans(xmlAutomataPtr am, xmlAutomataStatePtr from, * * If @to is NULL, this creates first a new target state in the automata * and then adds a transition from the @from state to the target state - * activated by a succession of input of value @token and @token2 and + * activated by a succession of input of value @token and @token2 and * whose number is between @min and @max * * Returns the target state or NULL in case of error @@ -5997,8 +6011,8 @@ xmlAutomataNewCountTrans(xmlAutomataPtr am, xmlAutomataStatePtr from, * * If @to is NULL, this creates first a new target state in the automata * and then adds a transition from the @from state to the target state - * activated by a succession of input of value @token and @token2 and whose - * number is between @min and @max, moreover that transition can only be + * activated by a succession of input of value @token and @token2 and whose + * number is between @min and @max, moreover that transition can only be * crossed once. * * Returns the target state or NULL in case of error @@ -6040,7 +6054,7 @@ xmlAutomataNewOnceTrans2(xmlAutomataPtr am, xmlAutomataStatePtr from, str[lenn + lenp + 1] = 0; atom->valuep = str; - } + } atom->data = data; atom->quant = XML_REGEXP_QUANT_ONCEONLY; atom->min = min; @@ -6063,7 +6077,7 @@ xmlAutomataNewOnceTrans2(xmlAutomataPtr am, xmlAutomataStatePtr from, return(to); } - + /** * xmlAutomataNewOnceTrans: @@ -6132,7 +6146,7 @@ xmlAutomataNewOnceTrans(xmlAutomataPtr am, xmlAutomataStatePtr from, */ xmlAutomataStatePtr xmlAutomataNewState(xmlAutomataPtr am) { - xmlAutomataStatePtr to; + xmlAutomataStatePtr to; if (am == NULL) return(NULL); @@ -6199,7 +6213,7 @@ xmlAutomataNewAllTrans(xmlAutomataPtr am, xmlAutomataStatePtr from, * * Returns the counter number or -1 in case of error */ -int +int xmlAutomataNewCounter(xmlAutomataPtr am, int min, int max) { int ret; @@ -6271,7 +6285,7 @@ xmlAutomataNewCounterTrans(xmlAutomataPtr am, xmlAutomataStatePtr from, * * Returns the compiled regexp or NULL in case of error */ -xmlRegexpPtr +xmlRegexpPtr xmlAutomataCompile(xmlAutomataPtr am) { xmlRegexpPtr ret; @@ -6291,7 +6305,7 @@ xmlAutomataCompile(xmlAutomataPtr am) { * * Returns 1 if true, 0 if not, and -1 in case of error */ -int +int xmlAutomataIsDeterminist(xmlAutomataPtr am) { int ret; @@ -6344,7 +6358,7 @@ xmlExpNewCtxt(int maxNodes, xmlDictPtr dict) { if (maxNodes <= 4096) maxNodes = 4096; - + ret = (xmlExpCtxtPtr) xmlMalloc(sizeof(xmlExpCtxt)); if (ret == NULL) return(NULL); @@ -6398,7 +6412,7 @@ xmlExpFreeCtxt(xmlExpCtxtPtr ctxt) { /* #define DEBUG_DERIV */ /* - * TODO: + * TODO: * - Wildcards * - public API for creation * @@ -6466,7 +6480,7 @@ static unsigned short xmlExpHashNameComputeKey(const xmlChar *name) { unsigned short value = 0L; char ch; - + if (name != NULL) { value += 30 * (*name); while ((ch = *name++) != 0) { @@ -6485,7 +6499,7 @@ xmlExpHashComputeKey(xmlExpNodeType type, xmlExpNodePtr left, xmlExpNodePtr right) { unsigned long value; unsigned short ret; - + switch (type) { case XML_EXP_SEQ: value = left->key; @@ -6626,7 +6640,7 @@ xmlExpHashGetEntry(xmlExpCtxtPtr ctxt, xmlExpNodeType type, left->exp_left->ref++; tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, left->exp_left, tmp, NULL, 0, 0); - + xmlExpFree(ctxt, left); return(tmp); } @@ -6683,7 +6697,7 @@ xmlExpHashGetEntry(xmlExpCtxtPtr ctxt, xmlExpNodeType type, return(right); } kbase = xmlExpHashComputeKey(type, left, right); - } else + } else return(NULL); key = kbase % ctxt->size; @@ -6924,7 +6938,7 @@ xmlExpNewRange(xmlExpCtxtPtr ctxt, xmlExpNodePtr subset, int min, int max) { ************************************************************************/ static int -xmlExpGetLanguageInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, +xmlExpGetLanguageInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, const xmlChar**list, int len, int nb) { int tmp, tmp2; tail: @@ -6969,7 +6983,7 @@ tail: * -2 if there is more than @len strings */ int -xmlExpGetLanguage(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, +xmlExpGetLanguage(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, const xmlChar**langList, int len) { if ((ctxt == NULL) || (exp == NULL) || (langList == NULL) || (len <= 0)) return(-1); @@ -6977,7 +6991,7 @@ xmlExpGetLanguage(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, } static int -xmlExpGetStartInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, +xmlExpGetStartInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, const xmlChar**list, int len, int nb) { int tmp, tmp2; tail: @@ -7037,7 +7051,7 @@ tail: * -2 if there is more than @len strings */ int -xmlExpGetStart(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, +xmlExpGetStart(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, const xmlChar**tokList, int len) { if ((ctxt == NULL) || (exp == NULL) || (tokList == NULL) || (len <= 0)) return(-1); @@ -7734,7 +7748,7 @@ xmlExpExpDeriveInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub) { xmlFree((xmlChar **) tab); return(ret); } - + /** * xmlExpExpDerive: * @ctxt: the expressions context @@ -7786,7 +7800,7 @@ xmlExpExpDerive(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub) { int xmlExpSubsume(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub) { xmlExpNodePtr tmp; - + if ((exp == NULL) || (ctxt == NULL) || (sub == NULL)) return(-1); @@ -7830,7 +7844,7 @@ xmlExpSubsume(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub) { /************************************************************************ * * - * Parsing expression * + * Parsing expression * * * ************************************************************************/ @@ -7934,7 +7948,7 @@ parse_quantifier: ret = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, ret, NULL, NULL, 0, -1); SKIP_BLANKS - } + } return(ret); } @@ -8056,7 +8070,7 @@ xmlExpDumpInt(xmlBufferPtr buf, xmlExpNodePtr expr, int glob) { break; case XML_EXP_COUNT: { char rep[40]; - + c = expr->exp_left; if ((c->type == XML_EXP_SEQ) || (c->type == XML_EXP_OR)) xmlExpDumpInt(buf, c, 1); diff --git a/lib/3rdparty/libxml2/xmlsave.c b/lib/3rdparty/libxml2/xmlsave.c index ddf7143c10b..829abb36b14 100644 --- a/lib/3rdparty/libxml2/xmlsave.c +++ b/lib/3rdparty/libxml2/xmlsave.c @@ -19,6 +19,10 @@ #include +#include "buf.h" +#include "enc.h" +#include "save.h" + /************************************************************************ * * * XHTML detection * @@ -66,7 +70,7 @@ xmlIsXHTML(const xmlChar *systemID, const xmlChar *publicID) { #ifdef LIBXML_OUTPUT_ENABLED -#define TODO \ +#define TODO \ xmlGenericError(xmlGenericErrorContext, \ "Unimplemented block at %s:%d\n", \ __FILE__, __LINE__); @@ -92,7 +96,7 @@ struct _xmlSaveCtxt { /************************************************************************ * * - * Output error handlers * + * Output error handlers * * * ************************************************************************/ /** @@ -210,9 +214,9 @@ xmlEscapeEntities(unsigned char* out, int *outlen, int val; inend = in + (*inlen); - + while ((in < inend) && (out < outend)) { - if (*in == '<') { + if (*in == '<') { if (outend - out < 4) break; *out++ = '&'; *out++ = 'l'; @@ -248,7 +252,7 @@ xmlEscapeEntities(unsigned char* out, int *outlen, /* * We assume we have UTF-8 input. */ - if (outend - out < 10) break; + if (outend - out < 11) break; if (*in < 0xC0) { xmlSaveErr(XML_SAVE_NOT_UTF8, NULL, NULL); @@ -416,7 +420,7 @@ xmlNewSaveCtxt(const char *encoding, int options) /************************************************************************ * * - * Dumping XML tree content to a simple buffer * + * Dumping XML tree content to a simple buffer * * * ************************************************************************/ /** @@ -436,14 +440,14 @@ xmlAttrSerializeContent(xmlOutputBufferPtr buf, xmlAttrPtr attr) while (children != NULL) { switch (children->type) { case XML_TEXT_NODE: - xmlAttrSerializeTxtContent(buf->buffer, attr->doc, - attr, children->content); + xmlBufAttrSerializeTxtContent(buf->buffer, attr->doc, + attr, children->content); break; case XML_ENTITY_REF_NODE: - xmlBufferAdd(buf->buffer, BAD_CAST "&", 1); - xmlBufferAdd(buf->buffer, children->name, + xmlBufAdd(buf->buffer, BAD_CAST "&", 1); + xmlBufAdd(buf->buffer, children->name, xmlStrlen(children->name)); - xmlBufferAdd(buf->buffer, BAD_CAST ";", 1); + xmlBufAdd(buf->buffer, BAD_CAST ";", 1); break; default: /* should not happen unless we have a badly built tree */ @@ -453,9 +457,99 @@ xmlAttrSerializeContent(xmlOutputBufferPtr buf, xmlAttrPtr attr) } } +/** + * xmlBufDumpNotationTable: + * @buf: an xmlBufPtr output + * @table: A notation table + * + * This will dump the content of the notation table as an XML DTD definition + */ +void +xmlBufDumpNotationTable(xmlBufPtr buf, xmlNotationTablePtr table) { + xmlBufferPtr buffer; + + buffer = xmlBufferCreate(); + if (buffer == NULL) { + /* + * TODO set the error in buf + */ + return; + } + xmlDumpNotationTable(buffer, table); + xmlBufMergeBuffer(buf, buffer); +} + +/** + * xmlBufDumpElementDecl: + * @buf: an xmlBufPtr output + * @elem: An element table + * + * This will dump the content of the element declaration as an XML + * DTD definition + */ +void +xmlBufDumpElementDecl(xmlBufPtr buf, xmlElementPtr elem) { + xmlBufferPtr buffer; + + buffer = xmlBufferCreate(); + if (buffer == NULL) { + /* + * TODO set the error in buf + */ + return; + } + xmlDumpElementDecl(buffer, elem); + xmlBufMergeBuffer(buf, buffer); +} + +/** + * xmlBufDumpAttributeDecl: + * @buf: an xmlBufPtr output + * @attr: An attribute declaration + * + * This will dump the content of the attribute declaration as an XML + * DTD definition + */ +void +xmlBufDumpAttributeDecl(xmlBufPtr buf, xmlAttributePtr attr) { + xmlBufferPtr buffer; + + buffer = xmlBufferCreate(); + if (buffer == NULL) { + /* + * TODO set the error in buf + */ + return; + } + xmlDumpAttributeDecl(buffer, attr); + xmlBufMergeBuffer(buf, buffer); +} + +/** + * xmlBufDumpEntityDecl: + * @buf: an xmlBufPtr output + * @ent: An entity table + * + * This will dump the content of the entity table as an XML DTD definition + */ +void +xmlBufDumpEntityDecl(xmlBufPtr buf, xmlEntityPtr ent) { + xmlBufferPtr buffer; + + buffer = xmlBufferCreate(); + if (buffer == NULL) { + /* + * TODO set the error in buf + */ + return; + } + xmlDumpEntityDecl(buffer, ent); + xmlBufMergeBuffer(buf, buffer); +} + /************************************************************************ * * - * Dumping XML tree content to an I/O output buffer * + * Dumping XML tree content to an I/O output buffer * * * ************************************************************************/ @@ -469,7 +563,7 @@ static int xmlSaveSwitchEncoding(xmlSaveCtxtPtr ctxt, const char *encoding) { (const char *)encoding); return(-1); } - buf->conv = xmlBufferCreate(); + buf->conv = xmlBufCreate(); if (buf->conv == NULL) { xmlCharEncCloseFunc(buf->encoder); xmlSaveErrMemory("creating encoding buffer"); @@ -478,7 +572,7 @@ static int xmlSaveSwitchEncoding(xmlSaveCtxtPtr ctxt, const char *encoding) { /* * initialize the state, e.g. if outputting a BOM */ - xmlCharEncOutFunc(buf->encoder, buf->conv, NULL); + xmlCharEncOutput(buf, 1); } return(0); } @@ -487,7 +581,7 @@ static int xmlSaveClearEncoding(xmlSaveCtxtPtr ctxt) { xmlOutputBufferPtr buf = ctxt->buf; xmlOutputBufferFlush(buf); xmlCharEncCloseFunc(buf->encoder); - xmlBufferFree(buf->conv); + xmlBufFree(buf->conv); buf->encoder = NULL; buf->conv = NULL; return(0); @@ -553,7 +647,7 @@ xmlNsDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur, xmlSaveCtxtPtr ctxt) { } else xmlOutputBufferWrite(buf, 5, "xmlns"); xmlOutputBufferWrite(buf, 1, "="); - xmlBufferWriteQuotedString(buf->buffer, cur->href); + xmlBufWriteQuotedString(buf->buffer, cur->href); } } @@ -606,7 +700,7 @@ xmlNsListDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur) { * xmlDtdDumpOutput: * @buf: the XML buffer output * @dtd: the pointer to the DTD - * + * * Dump the XML document DTD, if any. */ static void @@ -623,12 +717,12 @@ xmlDtdDumpOutput(xmlSaveCtxtPtr ctxt, xmlDtdPtr dtd) { xmlOutputBufferWriteString(buf, (const char *)dtd->name); if (dtd->ExternalID != NULL) { xmlOutputBufferWrite(buf, 8, " PUBLIC "); - xmlBufferWriteQuotedString(buf->buffer, dtd->ExternalID); + xmlBufWriteQuotedString(buf->buffer, dtd->ExternalID); xmlOutputBufferWrite(buf, 1, " "); - xmlBufferWriteQuotedString(buf->buffer, dtd->SystemID); + xmlBufWriteQuotedString(buf->buffer, dtd->SystemID); } else if (dtd->SystemID != NULL) { xmlOutputBufferWrite(buf, 8, " SYSTEM "); - xmlBufferWriteQuotedString(buf->buffer, dtd->SystemID); + xmlBufWriteQuotedString(buf->buffer, dtd->SystemID); } if ((dtd->entities == NULL) && (dtd->elements == NULL) && (dtd->attributes == NULL) && (dtd->notations == NULL) && @@ -643,7 +737,8 @@ xmlDtdDumpOutput(xmlSaveCtxtPtr ctxt, xmlDtdPtr dtd) { */ if ((dtd->notations != NULL) && ((dtd->doc == NULL) || (dtd->doc->intSubset == dtd))) { - xmlDumpNotationTable(buf->buffer, (xmlNotationTablePtr) dtd->notations); + xmlBufDumpNotationTable(buf->buffer, + (xmlNotationTablePtr) dtd->notations); } format = ctxt->format; level = ctxt->level; @@ -724,7 +819,7 @@ xmlNodeListDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { (cur->type == XML_COMMENT_NODE) || (cur->type == XML_PI_NODE))) xmlOutputBufferWrite(buf, ctxt->indent_size * - (ctxt->level > ctxt->indent_nr ? + (ctxt->level > ctxt->indent_nr ? ctxt->indent_nr : ctxt->level), ctxt->indent); xmlNodeDumpOutputInternal(ctxt, cur); @@ -841,15 +936,15 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { return; } if (cur->type == XML_ELEMENT_DECL) { - xmlDumpElementDecl(buf->buffer, (xmlElementPtr) cur); + xmlBufDumpElementDecl(buf->buffer, (xmlElementPtr) cur); return; } if (cur->type == XML_ATTRIBUTE_DECL) { - xmlDumpAttributeDecl(buf->buffer, (xmlAttributePtr) cur); + xmlBufDumpAttributeDecl(buf->buffer, (xmlAttributePtr) cur); return; } if (cur->type == XML_ENTITY_DECL) { - xmlDumpEntityDecl(buf->buffer, (xmlEntityPtr) cur); + xmlBufDumpEntityDecl(buf->buffer, (xmlEntityPtr) cur); return; } if (cur->type == XML_TEXT_NODE) { @@ -980,7 +1075,7 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { if (ctxt->level > 0) ctxt->level--; if ((xmlIndentTreeOutput) && (ctxt->format == 1)) xmlOutputBufferWrite(buf, ctxt->indent_size * - (ctxt->level > ctxt->indent_nr ? + (ctxt->level > ctxt->indent_nr ? ctxt->indent_nr : ctxt->level), ctxt->indent); } @@ -1096,13 +1191,13 @@ xmlDocContentDumpOutput(xmlSaveCtxtPtr ctxt, xmlDocPtr cur) { */ if ((ctxt->options & XML_SAVE_NO_DECL) == 0) { xmlOutputBufferWrite(buf, 14, "version != NULL) - xmlBufferWriteQuotedString(buf->buffer, cur->version); + if (cur->version != NULL) + xmlBufWriteQuotedString(buf->buffer, cur->version); else xmlOutputBufferWrite(buf, 5, "\"1.0\""); if (encoding != NULL) { xmlOutputBufferWrite(buf, 10, " encoding="); - xmlBufferWriteQuotedString(buf->buffer, (xmlChar *) encoding); + xmlBufWriteQuotedString(buf->buffer, (xmlChar *) encoding); } switch (cur->standalone) { case 0: @@ -1260,7 +1355,7 @@ xhtmlAttrListDumpOutput(xmlSaveCtxtPtr ctxt, xmlAttrPtr cur) { if ((cur->ns != NULL) && (xmlStrEqual(cur->name, BAD_CAST "lang")) && (xmlStrEqual(cur->ns->prefix, BAD_CAST "xml"))) xml_lang = cur; - else if ((cur->ns == NULL) && + else if ((cur->ns == NULL) && ((cur->children == NULL) || (cur->children->content == NULL) || (cur->children->content[0] == 0)) && @@ -1300,7 +1395,7 @@ xhtmlAttrListDumpOutput(xmlSaveCtxtPtr ctxt, xmlAttrPtr cur) { xmlOutputBufferWrite(buf, 11, " xml:lang=\""); xmlAttrSerializeContent(buf, lang); xmlOutputBufferWrite(buf, 1, "\""); - } else + } else if ((xml_lang != NULL) && (lang == NULL)) { xmlOutputBufferWrite(buf, 7, " lang=\""); xmlAttrSerializeContent(buf, xml_lang); @@ -1331,7 +1426,7 @@ xhtmlNodeListDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { if ((ctxt->format == 1) && (xmlIndentTreeOutput) && (cur->type == XML_ELEMENT_NODE)) xmlOutputBufferWrite(buf, ctxt->indent_size * - (ctxt->level > ctxt->indent_nr ? + (ctxt->level > ctxt->indent_nr ? ctxt->indent_nr : ctxt->level), ctxt->indent); xhtmlNodeDumpOutput(ctxt, cur); @@ -1370,6 +1465,10 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { return; if (cur->type == XML_XINCLUDE_END) return; + if (cur->type == XML_NAMESPACE_DECL) { + xmlNsDumpOutputCtxt(ctxt, (xmlNsPtr) cur); + return; + } if (cur->type == XML_DTD_NODE) { xmlDtdDumpOutput(ctxt, (xmlDtdPtr) cur); return; @@ -1380,15 +1479,15 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { } buf = ctxt->buf; if (cur->type == XML_ELEMENT_DECL) { - xmlDumpElementDecl(buf->buffer, (xmlElementPtr) cur); + xmlBufDumpElementDecl(buf->buffer, (xmlElementPtr) cur); return; } if (cur->type == XML_ATTRIBUTE_DECL) { - xmlDumpAttributeDecl(buf->buffer, (xmlAttributePtr) cur); + xmlBufDumpAttributeDecl(buf->buffer, (xmlAttributePtr) cur); return; } if (cur->type == XML_ENTITY_DECL) { - xmlDumpEntityDecl(buf->buffer, (xmlEntityPtr) cur); + xmlBufDumpEntityDecl(buf->buffer, (xmlEntityPtr) cur); return; } if (cur->type == XML_TEXT_NODE) { @@ -1468,7 +1567,7 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { if (format == 1) { tmp = cur->children; while (tmp != NULL) { - if ((tmp->type == XML_TEXT_NODE) || + if ((tmp->type == XML_TEXT_NODE) || (tmp->type == XML_ENTITY_REF_NODE)) { format = 0; break; @@ -1496,10 +1595,10 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { if (cur->properties != NULL) xhtmlAttrListDumpOutput(ctxt, cur->properties); - if ((cur->type == XML_ELEMENT_NODE) && - (cur->parent != NULL) && - (cur->parent->parent == (xmlNodePtr) cur->doc) && - xmlStrEqual(cur->name, BAD_CAST"head") && + if ((cur->type == XML_ELEMENT_NODE) && + (cur->parent != NULL) && + (cur->parent->parent == (xmlNodePtr) cur->doc) && + xmlStrEqual(cur->name, BAD_CAST"head") && xmlStrEqual(cur->parent->name, BAD_CAST"html")) { tmp = cur->children; @@ -1536,7 +1635,7 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { xmlOutputBufferWrite(buf, 1, "\n"); if (xmlIndentTreeOutput) xmlOutputBufferWrite(buf, ctxt->indent_size * - (ctxt->level + 1 > ctxt->indent_nr ? + (ctxt->level + 1 > ctxt->indent_nr ? ctxt->indent_nr : ctxt->level + 1), ctxt->indent); } xmlOutputBufferWriteString(buf, @@ -1571,7 +1670,7 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { xmlOutputBufferWrite(buf, 1, "\n"); if (xmlIndentTreeOutput) xmlOutputBufferWrite(buf, ctxt->indent_size * - (ctxt->level + 1 > ctxt->indent_nr ? + (ctxt->level + 1 > ctxt->indent_nr ? ctxt->indent_nr : ctxt->level + 1), ctxt->indent); } xmlOutputBufferWriteString(buf, @@ -1661,7 +1760,7 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { if (cur->children != NULL) { int indent = ctxt->format; - + if (format == 1) xmlOutputBufferWrite(buf, 1, "\n"); if (ctxt->level >= 0) ctxt->level++; ctxt->format = format; @@ -1670,7 +1769,7 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { ctxt->format = indent; if ((xmlIndentTreeOutput) && (format == 1)) xmlOutputBufferWrite(buf, ctxt->indent_size * - (ctxt->level > ctxt->indent_nr ? + (ctxt->level > ctxt->indent_nr ? ctxt->indent_nr : ctxt->level), ctxt->indent); } @@ -1936,18 +2035,19 @@ xmlSaveSetAttrEscape(xmlSaveCtxtPtr ctxt, xmlCharEncodingOutputFunc escape) * Public entry points based on buffers * * * ************************************************************************/ + /** - * xmlAttrSerializeTxtContent: - * @buf: the XML buffer output + * xmlBufAttrSerializeTxtContent: + * @buf: and xmlBufPtr output * @doc: the document * @attr: the attribute node * @string: the text content * - * Serialize text attribute values to an xml simple buffer + * Serialize text attribute values to an xmlBufPtr */ void -xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc, - xmlAttrPtr attr, const xmlChar * string) +xmlBufAttrSerializeTxtContent(xmlBufPtr buf, xmlDocPtr doc, + xmlAttrPtr attr, const xmlChar * string) { xmlChar *base, *cur; @@ -1957,44 +2057,44 @@ xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc, while (*cur != 0) { if (*cur == '\n') { if (base != cur) - xmlBufferAdd(buf, base, cur - base); - xmlBufferAdd(buf, BAD_CAST " ", 5); + xmlBufAdd(buf, base, cur - base); + xmlBufAdd(buf, BAD_CAST " ", 5); cur++; base = cur; } else if (*cur == '\r') { if (base != cur) - xmlBufferAdd(buf, base, cur - base); - xmlBufferAdd(buf, BAD_CAST " ", 5); + xmlBufAdd(buf, base, cur - base); + xmlBufAdd(buf, BAD_CAST " ", 5); cur++; base = cur; } else if (*cur == '\t') { if (base != cur) - xmlBufferAdd(buf, base, cur - base); - xmlBufferAdd(buf, BAD_CAST " ", 4); + xmlBufAdd(buf, base, cur - base); + xmlBufAdd(buf, BAD_CAST " ", 4); cur++; base = cur; } else if (*cur == '"') { if (base != cur) - xmlBufferAdd(buf, base, cur - base); - xmlBufferAdd(buf, BAD_CAST """, 6); + xmlBufAdd(buf, base, cur - base); + xmlBufAdd(buf, BAD_CAST """, 6); cur++; base = cur; } else if (*cur == '<') { if (base != cur) - xmlBufferAdd(buf, base, cur - base); - xmlBufferAdd(buf, BAD_CAST "<", 4); + xmlBufAdd(buf, base, cur - base); + xmlBufAdd(buf, BAD_CAST "<", 4); cur++; base = cur; } else if (*cur == '>') { if (base != cur) - xmlBufferAdd(buf, base, cur - base); - xmlBufferAdd(buf, BAD_CAST ">", 4); + xmlBufAdd(buf, base, cur - base); + xmlBufAdd(buf, BAD_CAST ">", 4); cur++; base = cur; } else if (*cur == '&') { if (base != cur) - xmlBufferAdd(buf, base, cur - base); - xmlBufferAdd(buf, BAD_CAST "&", 5); + xmlBufAdd(buf, base, cur - base); + xmlBufAdd(buf, BAD_CAST "&", 5); cur++; base = cur; } else if ((*cur >= 0x80) && ((doc == NULL) || @@ -2002,17 +2102,17 @@ xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc, /* * We assume we have UTF-8 content. */ - unsigned char tmp[10]; + unsigned char tmp[12]; int val = 0, l = 1; if (base != cur) - xmlBufferAdd(buf, base, cur - base); + xmlBufAdd(buf, base, cur - base); if (*cur < 0xC0) { xmlSaveErr(XML_SAVE_NOT_UTF8, (xmlNodePtr) attr, NULL); if (doc != NULL) doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1"); xmlSerializeHexCharRef(tmp, *cur); - xmlBufferAdd(buf, (xmlChar *) tmp, -1); + xmlBufAdd(buf, (xmlChar *) tmp, -1); cur++; base = cur; continue; @@ -2042,9 +2142,9 @@ xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc, xmlSaveErr(XML_SAVE_CHAR_INVALID, (xmlNodePtr) attr, NULL); if (doc != NULL) doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1"); - + xmlSerializeHexCharRef(tmp, *cur); - xmlBufferAdd(buf, (xmlChar *) tmp, -1); + xmlBufAdd(buf, (xmlChar *) tmp, -1); cur++; base = cur; continue; @@ -2054,7 +2154,7 @@ xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc, * as a char ref */ xmlSerializeHexCharRef(tmp, val); - xmlBufferAdd(buf, (xmlChar *) tmp, -1); + xmlBufAdd(buf, (xmlChar *) tmp, -1); cur += l; base = cur; } else { @@ -2062,7 +2162,31 @@ xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc, } } if (base != cur) - xmlBufferAdd(buf, base, cur - base); + xmlBufAdd(buf, base, cur - base); +} + +/** + * xmlAttrSerializeTxtContent: + * @buf: the XML buffer output + * @doc: the document + * @attr: the attribute node + * @string: the text content + * + * Serialize text attribute values to an xml simple buffer + */ +void +xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc, + xmlAttrPtr attr, const xmlChar * string) +{ + xmlBufPtr buffer; + + if ((buf == NULL) || (string == NULL)) + return; + buffer = xmlBufFromBuffer(buf); + if (buffer == NULL) + return; + xmlBufAttrSerializeTxtContent(buffer, doc, attr, string); + xmlBufBackToBuffer(buffer); } /** @@ -2076,6 +2200,8 @@ xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc, * Dump an XML node, recursive behaviour,children are printed too. * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 * or xmlKeepBlanksDefault(0) was called + * Since this is using xmlBuffer structures it is limited to 2GB and somehow + * deprecated, use xmlBufNodeDump() instead. * * Returns the number of bytes written to the buffer or -1 in case of error */ @@ -2083,7 +2209,42 @@ int xmlNodeDump(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, int level, int format) { - unsigned int use; + xmlBufPtr buffer; + int ret; + + if ((buf == NULL) || (cur == NULL)) + return(-1); + buffer = xmlBufFromBuffer(buf); + if (buffer == NULL) + return(-1); + ret = xmlBufNodeDump(buffer, doc, cur, level, format); + xmlBufBackToBuffer(buffer); + if (ret > INT_MAX) + return(-1); + return((int) ret); +} + +/** + * xmlBufNodeDump: + * @buf: the XML buffer output + * @doc: the document + * @cur: the current node + * @level: the imbrication level for indenting + * @format: is formatting allowed + * + * Dump an XML node, recursive behaviour,children are printed too. + * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 + * or xmlKeepBlanksDefault(0) was called + * + * Returns the number of bytes written to the buffer, in case of error 0 + * is returned or @buf stores the error + */ + +size_t +xmlBufNodeDump(xmlBufPtr buf, xmlDocPtr doc, xmlNodePtr cur, int level, + int format) +{ + size_t use; int ret; xmlOutputBufferPtr outbuf; @@ -2116,10 +2277,10 @@ xmlNodeDump(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, int level, outbuf->context = NULL; outbuf->written = 0; - use = buf->use; + use = xmlBufUse(buf); xmlNodeDumpOutput(outbuf, doc, cur, level, format, NULL); xmlFree(outbuf); - ret = buf->use - use; + ret = xmlBufUse(buf) - use; return (ret); } @@ -2299,11 +2460,11 @@ xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc, xmlChar **doc_txt_ptr, xmlDocContentDumpOutput(&ctxt, out_doc); xmlOutputBufferFlush(out_buff); if (out_buff->conv != NULL) { - *doc_txt_len = out_buff->conv->use; - *doc_txt_ptr = xmlStrndup(out_buff->conv->content, *doc_txt_len); + *doc_txt_len = xmlBufUse(out_buff->conv); + *doc_txt_ptr = xmlStrndup(xmlBufContent(out_buff->conv), *doc_txt_len); } else { - *doc_txt_len = out_buff->buffer->use; - *doc_txt_ptr = xmlStrndup(out_buff->buffer->content, *doc_txt_len); + *doc_txt_len = xmlBufUse(out_buff->buffer); + *doc_txt_ptr = xmlStrndup(xmlBufContent(out_buff->buffer),*doc_txt_len); } (void)xmlOutputBufferClose(out_buff); @@ -2547,7 +2708,7 @@ xmlSaveFormatFileEnc( const char * filename, xmlDocPtr cur, #ifdef HAVE_ZLIB_H if (cur->compression < 0) cur->compression = xmlGetCompressMode(); #endif - /* + /* * save the content to a temp buffer. */ buf = xmlOutputBufferCreateFilename(filename, handler, cur->compression); diff --git a/lib/3rdparty/libxml2/xmlschemas.c b/lib/3rdparty/libxml2/xmlschemas.c index 5de7ca5ba16..d6a47e4d47b 100644 --- a/lib/3rdparty/libxml2/xmlschemas.c +++ b/lib/3rdparty/libxml2/xmlschemas.c @@ -107,7 +107,7 @@ #endif #define UNBOUNDED (1 << 30) -#define TODO \ +#define TODO \ xmlGenericError(xmlGenericErrorContext, \ "Unimplemented block at %s:%d\n", \ __FILE__, __LINE__); @@ -975,6 +975,7 @@ struct _xmlSchemaValidCtxt { xmlSAXHandlerPtr sax; xmlParserCtxtPtr parserCtxt; void *user_data; /* TODO: What is this for? */ + char *filename; int err; int nberrors; @@ -1028,6 +1029,10 @@ struct _xmlSchemaValidCtxt { int hasKeyrefs; int createIDCNodeTables; int psviExposeIDCNodeTables; + + /* Locator for error reporting in streaming mode */ + xmlSchemaValidityLocatorFunc locFunc; + void *locCtxt; }; /** @@ -1043,9 +1048,9 @@ struct _xmlSchemaSubstGroup { }; /************************************************************************ - * * - * Some predeclarations * - * * + * * + * Some predeclarations * + * * ************************************************************************/ static int xmlSchemaParseInclude(xmlSchemaParserCtxtPtr ctxt, @@ -1098,7 +1103,7 @@ xmlSchemaParseAttributeGroupRef(xmlSchemaParserCtxtPtr pctxt, /************************************************************************ * * - * Helper functions * + * Helper functions * * * ************************************************************************/ @@ -1836,7 +1841,7 @@ xmlSchemaFormatFacetEnumSet(xmlSchemaAbstractCtxtPtr actxt, /************************************************************************ * * - * Error functions * + * Error functions * * * ************************************************************************/ @@ -1974,7 +1979,7 @@ xmlSchemaPErrExt(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node, int error, /************************************************************************ * * - * Allround error functions * + * Allround error functions * * * ************************************************************************/ @@ -2078,6 +2083,20 @@ xmlSchemaErr4Line(xmlSchemaAbstractCtxtPtr ctxt, (vctxt->parserCtxt->input != NULL)) file = vctxt->parserCtxt->input->filename; } + if (vctxt->locFunc != NULL) { + if ((file == NULL) || (line == 0)) { + unsigned long l; + const char *f; + vctxt->locFunc(vctxt->locCtxt, &f, &l); + if (file == NULL) + file = f; + if (line == 0) + line = (int) l; + } + } + if ((file == NULL) && (vctxt->filename != NULL)) + file = vctxt->filename; + __xmlRaiseError(schannel, channel, data, ctxt, node, XML_FROM_SCHEMASV, error, errorLevel, file, line, @@ -3199,25 +3218,25 @@ xmlSchemaPContentErr(xmlSchemaParserCtxtPtr ctxt, } /************************************************************************ - * * - * Streamable error functions * - * * + * * + * Streamable error functions * + * * ************************************************************************/ /************************************************************************ - * * - * Validation helper functions * - * * + * * + * Validation helper functions * + * * ************************************************************************/ /************************************************************************ - * * - * Allocation functions * - * * + * * + * Allocation functions * + * * ************************************************************************/ /** @@ -4135,9 +4154,9 @@ xmlSchemaFree(xmlSchemaPtr schema) } /************************************************************************ - * * - * Debug functions * - * * + * * + * Debug functions * + * * ************************************************************************/ #ifdef LIBXML_OUTPUT_ENABLED @@ -4587,7 +4606,7 @@ xmlSchemaDebugDumpIDCTable(FILE * output, /************************************************************************ * * - * Utilities * + * Utilities * * * ************************************************************************/ @@ -4692,9 +4711,9 @@ xmlSchemaGetProp(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node, } /************************************************************************ - * * - * Parsing functions * - * * + * * + * Parsing functions * + * * ************************************************************************/ #define WXS_FIND_GLOBAL_ITEM(slot) \ @@ -4966,9 +4985,9 @@ xmlSchemaGetNamedComponent(xmlSchemaPtr schema, } /************************************************************************ - * * - * Parsing functions * - * * + * * + * Parsing functions * + * * ************************************************************************/ #define IS_BLANK_NODE(n) \ @@ -5743,9 +5762,9 @@ xmlSchemaAddElementSubstitutionMember(xmlSchemaParserCtxtPtr pctxt, } /************************************************************************ - * * + * * * Utilities for parsing * - * * + * * ************************************************************************/ /** @@ -5939,7 +5958,7 @@ xmlSchemaPValAttrNodeID(xmlSchemaParserCtxtPtr ctxt, xmlAttrPtr attr) xmlFree((xmlChar *) value); value = strip; } - res = xmlAddID(NULL, attr->doc, value, attr); + res = xmlAddID(NULL, attr->doc, value, attr); if (res == NULL) { ret = XML_SCHEMAP_S4S_ATTR_INVALID_VALUE; xmlSchemaPSimpleTypeErr(ctxt, @@ -6191,9 +6210,9 @@ xmlGetBooleanProp(xmlSchemaParserCtxtPtr ctxt, } /************************************************************************ - * * + * * * Shema extraction from an Infoset * - * * + * * ************************************************************************/ static xmlSchemaTypePtr xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema, @@ -8227,7 +8246,7 @@ xmlSchemaParseIDCSelectorAndField(xmlSchemaParserCtxtPtr ctxt, */ attr = xmlSchemaGetPropNode(node, "xpath"); if (attr == NULL) { - xmlSchemaPMissingAttrErr(ctxt, + xmlSchemaPMissingAttrErr(ctxt, XML_SCHEMAP_S4S_ATTR_MISSING, NULL, node, "name", NULL); @@ -12353,15 +12372,15 @@ xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema, } /************************************************************************ - * * - * Validating using Schemas * - * * + * * + * Validating using Schemas * + * * ************************************************************************/ /************************************************************************ - * * - * Reading/Writing Schemas * - * * + * * + * Reading/Writing Schemas * + * * ************************************************************************/ #if 0 /* Will be enabled if it is clear what options are needed. */ @@ -12938,6 +12957,15 @@ xmlSchemaBuildAContentModel(xmlSchemaParserCtxtPtr pctxt, if (tmp2 != 1) ret = 0; sub = sub->next; } + + /* + * epsilon needed to block previous trans from + * being allowed to enter back from another + * construct + */ + pctxt->state = xmlAutomataNewEpsilon(pctxt->am, + pctxt->state, NULL); + if (particle->minOccurs == 0) { xmlAutomataNewEpsilon(pctxt->am, oldstate, pctxt->state); @@ -13946,7 +13974,7 @@ xmlSchemaCheckCOSNSSubset(xmlSchemaWildcardPtr sub, */ if ((sub->negNsSet != NULL) && (super->negNsSet != NULL) && - (sub->negNsSet->value == sub->negNsSet->value)) + (sub->negNsSet->value == super->negNsSet->value)) return (0); /* * 3.1 sub must be a set whose members are either namespace names or �absent�. @@ -15156,9 +15184,10 @@ xmlSchemaCheckSTPropsCorrect(xmlSchemaParserCtxtPtr ctxt, FREE_AND_NULL(str) return (XML_SCHEMAP_ST_PROPS_CORRECT_1); } - if ( (WXS_IS_LIST(type) || WXS_IS_UNION(type)) && - (WXS_IS_RESTRICTION(type) == 0) && - (! WXS_IS_ANY_SIMPLE_TYPE(baseType))) { + if ((WXS_IS_LIST(type) || WXS_IS_UNION(type)) && + (WXS_IS_RESTRICTION(type) == 0) && + ((! WXS_IS_ANY_SIMPLE_TYPE(baseType)) && + (baseType->type != XML_SCHEMA_TYPE_SIMPLE))) { xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_ST_PROPS_CORRECT_1, WXS_BASIC_CAST type, NULL, @@ -18475,8 +18504,8 @@ xmlSchemaFixupComplexType(xmlSchemaParserCtxtPtr pctxt, particle->children->children = (xmlSchemaTreeItemPtr) xmlSchemaAddParticle(pctxt, type->node, - ((xmlSchemaParticlePtr) type->subtypes)->minOccurs, - ((xmlSchemaParticlePtr) type->subtypes)->maxOccurs); + ((xmlSchemaParticlePtr) baseType->subtypes)->minOccurs, + ((xmlSchemaParticlePtr) baseType->subtypes)->maxOccurs); if (particle->children->children == NULL) goto exit_failure; particle = (xmlSchemaParticlePtr) @@ -20152,7 +20181,7 @@ xmlSchemaResolveAttrUseReferences(xmlSchemaAttributeUsePtr ause, ref->name, ref->targetNamespace); if (ause->attrDecl == NULL) { xmlSchemaPResCompAttrErr(ctxt, - XML_SCHEMAP_SRC_RESOLVE, + XML_SCHEMAP_SRC_RESOLVE, WXS_BASIC_CAST ause, ause->node, "ref", ref->name, ref->targetNamespace, XML_SCHEMA_TYPE_ATTRIBUTE, NULL); @@ -21532,16 +21561,16 @@ xmlSchemaGetWhiteSpaceFacetValue(xmlSchemaTypePtr type) } /************************************************************************ - * * - * Simple type validation * - * * + * * + * Simple type validation * + * * ************************************************************************/ /************************************************************************ - * * - * DOM Validation code * - * * + * * + * DOM Validation code * + * * ************************************************************************/ /** @@ -21935,9 +21964,9 @@ xmlSchemaVAddNodeQName(xmlSchemaValidCtxtPtr vctxt, } /************************************************************************ - * * + * * * Validation of identity-constraints (IDC) * - * * + * * ************************************************************************/ /** @@ -23865,9 +23894,9 @@ xmlSchemaCheckCVCIDCKeyRef(xmlSchemaValidCtxtPtr vctxt) } /************************************************************************ - * * - * XML Reader validation code * - * * + * * + * XML Reader validation code * + * * ************************************************************************/ static xmlSchemaAttrInfoPtr @@ -24987,9 +25016,9 @@ xmlSchemaValidateElemDecl(xmlSchemaValidCtxtPtr vctxt) return (vctxt->err); } if (actualType == NULL) { - VERROR(XML_SCHEMAV_CVC_TYPE_1, NULL, - "The type definition is absent"); - return (XML_SCHEMAV_CVC_TYPE_1); + VERROR(XML_SCHEMAV_CVC_TYPE_1, NULL, + "The type definition is absent"); + return (XML_SCHEMAV_CVC_TYPE_1); } if (vctxt->nbAttrInfos != 0) { int ret; @@ -25079,9 +25108,9 @@ xmlSchemaValidateElemDecl(xmlSchemaValidCtxtPtr vctxt) * No actual type definition. */ if (actualType == NULL) { - VERROR(XML_SCHEMAV_CVC_TYPE_1, NULL, - "The type definition is absent"); - return (XML_SCHEMAV_CVC_TYPE_1); + VERROR(XML_SCHEMAV_CVC_TYPE_1, NULL, + "The type definition is absent"); + return (XML_SCHEMAV_CVC_TYPE_1); } /* * Remember the actual type definition. @@ -26909,15 +26938,15 @@ type_validation: if (vctxt->inode->typeDef == NULL) { vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE; ret = XML_SCHEMAV_CVC_TYPE_1; - VERROR(ret, NULL, - "The type definition is absent"); + VERROR(ret, NULL, + "The type definition is absent"); goto exit; } if (vctxt->inode->typeDef->flags & XML_SCHEMAS_TYPE_ABSTRACT) { vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE; ret = XML_SCHEMAV_CVC_TYPE_2; - VERROR(ret, NULL, - "The type definition is abstract"); + VERROR(ret, NULL, + "The type definition is abstract"); goto exit; } /* @@ -27164,9 +27193,9 @@ internal_error: #endif /************************************************************************ - * * - * SAX validation handlers * - * * + * * + * SAX validation handlers * + * * ************************************************************************/ /* @@ -27417,9 +27446,9 @@ internal_error: } /************************************************************************ - * * - * Validation interfaces * - * * + * * + * Validation interfaces * + * * ************************************************************************/ /** @@ -27448,9 +27477,29 @@ xmlSchemaNewValidCtxt(xmlSchemaPtr schema) return (ret); } +/** + * xmlSchemaValidateSetFilename: + * @vctxt: the schema validation context + * @filename: the file name + * + * Workaround to provide file error reporting information when this is + * not provided by current APIs + */ +void +xmlSchemaValidateSetFilename(xmlSchemaValidCtxtPtr vctxt, const char *filename) { + if (vctxt == NULL) + return; + if (vctxt->filename != NULL) + xmlFree(vctxt->filename); + if (filename != NULL) + vctxt->filename = (char *) xmlStrdup((const xmlChar *) filename); + else + vctxt->filename = NULL; +} + /** * xmlSchemaClearValidCtxt: - * @ctxt: the schema validation context + * @vctxt: the schema validation context * * Free the resources associated to the schema validation context; * leaves some fields alive intended for reuse of the context. @@ -27551,6 +27600,11 @@ xmlSchemaClearValidCtxt(xmlSchemaValidCtxtPtr vctxt) * where the user provides the dict? */ vctxt->dict = xmlDictCreate(); + + if (vctxt->filename != NULL) { + xmlFree(vctxt->filename); + vctxt->filename = NULL; + } } /** @@ -27636,6 +27690,8 @@ xmlSchemaFreeValidCtxt(xmlSchemaValidCtxtPtr ctxt) xmlSchemaItemListFree(ctxt->nodeQNames); if (ctxt->dict != NULL) xmlDictFree(ctxt->dict); + if (ctxt->filename != NULL) + xmlFree(ctxt->filename); xmlFree(ctxt); } @@ -28111,9 +28167,9 @@ xmlSchemaValidateDoc(xmlSchemaValidCtxtPtr ctxt, xmlDocPtr doc) /************************************************************************ - * * - * Function and data for SAX streaming API * - * * + * * + * Function and data for SAX streaming API * + * * ************************************************************************/ typedef struct _xmlSchemaSplitSAXData xmlSchemaSplitSAXData; typedef xmlSchemaSplitSAXData *xmlSchemaSplitSAXDataPtr; @@ -28629,6 +28685,63 @@ xmlSchemaSAXUnplug(xmlSchemaSAXPlugPtr plug) return(0); } +/** + * xmlSchemaValidateSetLocator: + * @vctxt: a schema validation context + * @f: the locator function pointer + * @ctxt: the locator context + * + * Allows to set a locator function to the validation context, + * which will be used to provide file and line information since + * those are not provided as part of the SAX validation flow + * Setting @f to NULL disable the locator. + */ + +void +xmlSchemaValidateSetLocator(xmlSchemaValidCtxtPtr vctxt, + xmlSchemaValidityLocatorFunc f, + void *ctxt) +{ + if (vctxt == NULL) return; + vctxt->locFunc = f; + vctxt->locCtxt = ctxt; +} + +/** + * xmlSchemaValidateStreamLocator: + * @ctx: the xmlTextReaderPtr used + * @file: returned file information + * @line: returned line information + * + * Internal locator function for the readers + * + * Returns 0 in case the Schema validation could be (des)activated and + * -1 in case of error. + */ +static int +xmlSchemaValidateStreamLocator(void *ctx, const char **file, + unsigned long *line) { + xmlParserCtxtPtr ctxt; + + if ((ctx == NULL) || ((file == NULL) && (line == NULL))) + return(-1); + + if (file != NULL) + *file = NULL; + if (line != NULL) + *line = 0; + + ctxt = (xmlParserCtxtPtr) ctx; + if (ctxt->input != NULL) { + if (file != NULL) + *file = ctxt->input->filename; + if (line != NULL) + *line = ctxt->input->line; + return(0); + } + return(-1); +} + /** * xmlSchemaValidateStream: * @ctxt: a schema validation context @@ -28672,6 +28785,7 @@ xmlSchemaValidateStream(xmlSchemaValidCtxtPtr ctxt, xmlCtxtUseOptions(pctxt, options); #endif pctxt->linenumbers = 1; + xmlSchemaValidateSetLocator(ctxt, xmlSchemaValidateStreamLocator, pctxt); inputStream = xmlNewIOInputStream(pctxt, input, enc);; if (inputStream == NULL) { diff --git a/lib/3rdparty/libxml2/xmlschemastypes.c b/lib/3rdparty/libxml2/xmlschemastypes.c index 1a5454c2497..a9edc03bab8 100644 --- a/lib/3rdparty/libxml2/xmlschemastypes.c +++ b/lib/3rdparty/libxml2/xmlschemastypes.c @@ -40,7 +40,7 @@ extern double xmlXPathPINF; extern double xmlXPathNINF; #endif -#define TODO \ +#define TODO \ xmlGenericError(xmlGenericErrorContext, \ "Unimplemented block at %s:%d\n", \ __FILE__, __LINE__); @@ -75,7 +75,7 @@ typedef struct _xmlSchemaValDuration xmlSchemaValDuration; typedef xmlSchemaValDuration *xmlSchemaValDurationPtr; struct _xmlSchemaValDuration { long mon; /* mon stores years also */ - long day; + long day; double sec; /* sec stores min and hour also */ }; @@ -189,7 +189,7 @@ static xmlSchemaTypePtr xmlSchemaTypeNmtokensDef = NULL; /************************************************************************ * * - * Datatype error handlers * + * Datatype error handlers * * * ************************************************************************/ /** @@ -206,7 +206,7 @@ xmlSchemaTypeErrMemory(xmlNodePtr node, const char *extra) /************************************************************************ * * - * Base types support * + * Base types support * * * ************************************************************************/ @@ -254,7 +254,7 @@ xmlSchemaNewMinLengthFacet(int value) * Initialize one primitive built-in type */ static xmlSchemaTypePtr -xmlSchemaInitBasicType(const char *name, xmlSchemaValType type, +xmlSchemaInitBasicType(const char *name, xmlSchemaValType type, xmlSchemaTypePtr baseType) { xmlSchemaTypePtr ret; @@ -267,31 +267,31 @@ xmlSchemaInitBasicType(const char *name, xmlSchemaValType type, ret->name = (const xmlChar *)name; ret->targetNamespace = XML_SCHEMAS_NAMESPACE_NAME; ret->type = XML_SCHEMA_TYPE_BASIC; - ret->baseType = baseType; + ret->baseType = baseType; ret->contentType = XML_SCHEMA_CONTENT_BASIC; /* * Primitive types. */ - switch (type) { - case XML_SCHEMAS_STRING: - case XML_SCHEMAS_DECIMAL: - case XML_SCHEMAS_DATE: - case XML_SCHEMAS_DATETIME: - case XML_SCHEMAS_TIME: - case XML_SCHEMAS_GYEAR: - case XML_SCHEMAS_GYEARMONTH: - case XML_SCHEMAS_GMONTH: - case XML_SCHEMAS_GMONTHDAY: - case XML_SCHEMAS_GDAY: - case XML_SCHEMAS_DURATION: - case XML_SCHEMAS_FLOAT: - case XML_SCHEMAS_DOUBLE: - case XML_SCHEMAS_BOOLEAN: - case XML_SCHEMAS_ANYURI: - case XML_SCHEMAS_HEXBINARY: - case XML_SCHEMAS_BASE64BINARY: - case XML_SCHEMAS_QNAME: - case XML_SCHEMAS_NOTATION: + switch (type) { + case XML_SCHEMAS_STRING: + case XML_SCHEMAS_DECIMAL: + case XML_SCHEMAS_DATE: + case XML_SCHEMAS_DATETIME: + case XML_SCHEMAS_TIME: + case XML_SCHEMAS_GYEAR: + case XML_SCHEMAS_GYEARMONTH: + case XML_SCHEMAS_GMONTH: + case XML_SCHEMAS_GMONTHDAY: + case XML_SCHEMAS_GDAY: + case XML_SCHEMAS_DURATION: + case XML_SCHEMAS_FLOAT: + case XML_SCHEMAS_DOUBLE: + case XML_SCHEMAS_BOOLEAN: + case XML_SCHEMAS_ANYURI: + case XML_SCHEMAS_HEXBINARY: + case XML_SCHEMAS_BASE64BINARY: + case XML_SCHEMAS_QNAME: + case XML_SCHEMAS_NOTATION: ret->flags |= XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE; break; default: @@ -309,7 +309,7 @@ xmlSchemaInitBasicType(const char *name, xmlSchemaValType type, case XML_SCHEMAS_ENTITIES: ret->flags |= XML_SCHEMAS_TYPE_VARIETY_LIST; ret->facets = xmlSchemaNewMinLengthFacet(1); - ret->flags |= XML_SCHEMAS_TYPE_HAS_FACETS; + ret->flags |= XML_SCHEMAS_TYPE_HAS_FACETS; break; default: ret->flags |= XML_SCHEMAS_TYPE_VARIETY_ATOMIC; @@ -390,19 +390,19 @@ xmlSchemaInitTypes(void) return; xmlSchemaTypesBank = xmlHashCreate(40); - + /* * 3.4.7 Built-in Complex Type Definition */ xmlSchemaTypeAnyTypeDef = xmlSchemaInitBasicType("anyType", - XML_SCHEMAS_ANYTYPE, + XML_SCHEMAS_ANYTYPE, NULL); xmlSchemaTypeAnyTypeDef->baseType = xmlSchemaTypeAnyTypeDef; xmlSchemaTypeAnyTypeDef->contentType = XML_SCHEMA_CONTENT_MIXED; /* * Init the content type. */ - xmlSchemaTypeAnyTypeDef->contentType = XML_SCHEMA_CONTENT_MIXED; + xmlSchemaTypeAnyTypeDef->contentType = XML_SCHEMA_CONTENT_MIXED; { xmlSchemaParticlePtr particle; xmlSchemaModelGroupPtr sequence; @@ -420,7 +420,7 @@ xmlSchemaInitTypes(void) return; } memset(sequence, 0, sizeof(xmlSchemaModelGroup)); - sequence->type = XML_SCHEMA_TYPE_SEQUENCE; + sequence->type = XML_SCHEMA_TYPE_SEQUENCE; particle->children = (xmlSchemaTreeItemPtr) sequence; /* Second particle. */ particle = xmlSchemaAddParticle(); @@ -437,9 +437,9 @@ xmlSchemaInitTypes(void) } memset(wild, 0, sizeof(xmlSchemaWildcard)); wild->type = XML_SCHEMA_TYPE_ANY; - wild->any = 1; - wild->processContents = XML_SCHEMAS_ANY_LAX; - particle->children = (xmlSchemaTreeItemPtr) wild; + wild->any = 1; + wild->processContents = XML_SCHEMAS_ANY_LAX; + particle->children = (xmlSchemaTreeItemPtr) wild; /* * Create the attribute wildcard. */ @@ -451,10 +451,10 @@ xmlSchemaInitTypes(void) } memset(wild, 0, sizeof(xmlSchemaWildcard)); wild->any = 1; - wild->processContents = XML_SCHEMAS_ANY_LAX; + wild->processContents = XML_SCHEMAS_ANY_LAX; xmlSchemaTypeAnyTypeDef->attributeWildcard = wild; } - xmlSchemaTypeAnySimpleTypeDef = xmlSchemaInitBasicType("anySimpleType", + xmlSchemaTypeAnySimpleTypeDef = xmlSchemaInitBasicType("anySimpleType", XML_SCHEMAS_ANYSIMPLETYPE, xmlSchemaTypeAnyTypeDef); /* @@ -513,7 +513,7 @@ xmlSchemaInitTypes(void) xmlSchemaTypeAnySimpleTypeDef); xmlSchemaTypeNotationDef = xmlSchemaInitBasicType("NOTATION", XML_SCHEMAS_NOTATION, - xmlSchemaTypeAnySimpleTypeDef); + xmlSchemaTypeAnySimpleTypeDef); xmlSchemaTypeQNameDef = xmlSchemaInitBasicType("QName", XML_SCHEMAS_QNAME, xmlSchemaTypeAnySimpleTypeDef); @@ -583,7 +583,7 @@ xmlSchemaInitTypes(void) xmlSchemaTypeNCNameDef); xmlSchemaTypeIdrefDef = xmlSchemaInitBasicType("IDREF", XML_SCHEMAS_IDREF, - xmlSchemaTypeNCNameDef); + xmlSchemaTypeNCNameDef); xmlSchemaTypeEntityDef = xmlSchemaInitBasicType("ENTITY", XML_SCHEMAS_ENTITY, xmlSchemaTypeNCNameDef); @@ -615,7 +615,7 @@ xmlSchemaInitTypes(void) * * Cleanup the default XML Schemas type library */ -void +void xmlSchemaCleanupTypes(void) { if (xmlSchemaTypesInitialized == 0) return; @@ -629,13 +629,13 @@ xmlSchemaCleanupTypes(void) { /* Content type. */ particle = (xmlSchemaParticlePtr) xmlSchemaTypeAnyTypeDef->subtypes; /* Wildcard. */ - xmlSchemaFreeWildcard((xmlSchemaWildcardPtr) + xmlSchemaFreeWildcard((xmlSchemaWildcardPtr) particle->children->children->children); xmlFree((xmlSchemaParticlePtr) particle->children->children); /* Sequence model group. */ xmlFree((xmlSchemaModelGroupPtr) particle->children); xmlFree((xmlSchemaParticlePtr) particle); - xmlSchemaTypeAnyTypeDef->subtypes = NULL; + xmlSchemaTypeAnyTypeDef->subtypes = NULL; } xmlHashFree(xmlSchemaTypesBank, (xmlHashDeallocator) xmlSchemaFreeType); xmlSchemaTypesInitialized = 0; @@ -665,12 +665,12 @@ xmlSchemaIsBuiltInTypeFacet(xmlSchemaTypePtr type, int facetType) (facetType == XML_SCHEMA_FACET_WHITESPACE)) return (1); else - return (0); + return (0); case XML_SCHEMAS_STRING: case XML_SCHEMAS_NOTATION: case XML_SCHEMAS_QNAME: - case XML_SCHEMAS_ANYURI: - case XML_SCHEMAS_BASE64BINARY: + case XML_SCHEMAS_ANYURI: + case XML_SCHEMAS_BASE64BINARY: case XML_SCHEMAS_HEXBINARY: if ((facetType == XML_SCHEMA_FACET_LENGTH) || (facetType == XML_SCHEMA_FACET_MINLENGTH) || @@ -693,12 +693,12 @@ xmlSchemaIsBuiltInTypeFacet(xmlSchemaTypePtr type, int facetType) (facetType == XML_SCHEMA_FACET_MINEXCLUSIVE)) return (1); else - return (0); + return (0); case XML_SCHEMAS_TIME: - case XML_SCHEMAS_GDAY: + case XML_SCHEMAS_GDAY: case XML_SCHEMAS_GMONTH: - case XML_SCHEMAS_GMONTHDAY: - case XML_SCHEMAS_GYEAR: + case XML_SCHEMAS_GMONTHDAY: + case XML_SCHEMAS_GYEAR: case XML_SCHEMAS_GYEARMONTH: case XML_SCHEMAS_DATE: case XML_SCHEMAS_DATETIME: @@ -714,7 +714,7 @@ xmlSchemaIsBuiltInTypeFacet(xmlSchemaTypePtr type, int facetType) (facetType == XML_SCHEMA_FACET_MINEXCLUSIVE)) return (1); else - return (0); + return (0); default: break; } @@ -736,7 +736,7 @@ xmlSchemaGetBuiltInType(xmlSchemaValType type) if (xmlSchemaTypesInitialized == 0) xmlSchemaInitTypes(); switch (type) { - + case XML_SCHEMAS_ANYSIMPLETYPE: return (xmlSchemaTypeAnySimpleTypeDef); case XML_SCHEMAS_STRING: @@ -752,7 +752,7 @@ xmlSchemaGetBuiltInType(xmlSchemaValType type) case XML_SCHEMAS_GMONTH: return (xmlSchemaTypeGMonthDef); case XML_SCHEMAS_GMONTHDAY: - return (xmlSchemaTypeGMonthDayDef); + return (xmlSchemaTypeGMonthDayDef); case XML_SCHEMAS_GYEAR: return (xmlSchemaTypeGYearDef); case XML_SCHEMAS_GYEARMONTH: @@ -828,7 +828,7 @@ xmlSchemaGetBuiltInType(xmlSchemaValType type) case XML_SCHEMAS_BASE64BINARY: return (xmlSchemaTypeBase64BinaryDef); case XML_SCHEMAS_ANYTYPE: - return (xmlSchemaTypeAnyTypeDef); + return (xmlSchemaTypeAnyTypeDef); default: return (NULL); } @@ -880,7 +880,7 @@ xmlSchemaValueGetNext(xmlSchemaValPtr cur) { */ const xmlChar * xmlSchemaValueGetAsString(xmlSchemaValPtr val) -{ +{ if (val == NULL) return (NULL); switch (val->type) { @@ -913,7 +913,7 @@ xmlSchemaValueGetAsString(xmlSchemaValPtr val) */ int xmlSchemaValueGetAsBoolean(xmlSchemaValPtr val) -{ +{ if ((val == NULL) || (val->type != XML_SCHEMAS_BOOLEAN)) return (0); return (val->value.b); @@ -924,8 +924,8 @@ xmlSchemaValueGetAsBoolean(xmlSchemaValPtr val) * @type: the value type * @value: the value * - * Allocate a new simple type value. The type can be - * of XML_SCHEMAS_STRING. + * Allocate a new simple type value. The type can be + * of XML_SCHEMAS_STRING. * WARNING: This one is intended to be expanded for other * string based types. We need this for anySimpleType as well. * The given value is consumed and freed with the struct. @@ -1007,11 +1007,11 @@ xmlSchemaNewQNameValue(const xmlChar *namespaceName, * * Cleanup the default XML Schemas type library */ -void +void xmlSchemaFreeValue(xmlSchemaValPtr value) { xmlSchemaValPtr prev; - while (value != NULL) { + while (value != NULL) { switch (value->type) { case XML_SCHEMAS_STRING: case XML_SCHEMAS_NORMSTRING: @@ -1025,7 +1025,7 @@ xmlSchemaFreeValue(xmlSchemaValPtr value) { case XML_SCHEMAS_IDREF: case XML_SCHEMAS_IDREFS: case XML_SCHEMAS_ENTITY: - case XML_SCHEMAS_ENTITIES: + case XML_SCHEMAS_ENTITIES: case XML_SCHEMAS_ANYURI: case XML_SCHEMAS_ANYSIMPLETYPE: if (value->value.str != NULL) @@ -1052,7 +1052,7 @@ xmlSchemaFreeValue(xmlSchemaValPtr value) { prev = value; value = value->next; xmlFree(prev); - } + } } /** @@ -1088,9 +1088,9 @@ xmlSchemaGetBuiltInListSimpleTypeItemType(xmlSchemaTypePtr type) if ((type == NULL) || (type->type != XML_SCHEMA_TYPE_BASIC)) return (NULL); switch (type->builtInType) { - case XML_SCHEMAS_NMTOKENS: + case XML_SCHEMAS_NMTOKENS: return (xmlSchemaTypeNmtokenDef ); - case XML_SCHEMAS_IDREFS: + case XML_SCHEMAS_IDREFS: return (xmlSchemaTypeIdrefDef); case XML_SCHEMAS_ENTITIES: return (xmlSchemaTypeEntityDef); @@ -1342,13 +1342,13 @@ _xmlSchemaParseGDay (xmlSchemaValDatePtr dt, const xmlChar **str) { */ static int _xmlSchemaParseTime (xmlSchemaValDatePtr dt, const xmlChar **str) { - const xmlChar *cur = *str; + const xmlChar *cur = *str; int ret = 0; int value = 0; PARSE_2_DIGITS(value, cur, ret); if (ret != 0) - return ret; + return ret; if (*cur != ':') return 1; if (!VALID_HOUR(value)) @@ -1614,7 +1614,7 @@ xmlSchemaValidateDates (xmlSchemaValType type, const xmlChar *rewnd = cur; cur++; - ret = _xmlSchemaParseGDay(&(dt->value.date), &cur); + ret = _xmlSchemaParseGDay(&(dt->value.date), &cur); if ((ret == 0) && ((*cur == 0) || (*cur != ':'))) { /* @@ -1852,7 +1852,7 @@ xmlSchemaValidateDuration (xmlSchemaTypePtr type ATTRIBUTE_UNUSED, } cur++; if (collapse) - while IS_WSP_BLANK_CH(*cur) cur++; + while IS_WSP_BLANK_CH(*cur) cur++; } if (isneg) { @@ -1908,13 +1908,13 @@ xmlSchemaStrip(const xmlChar *value) { */ xmlChar * xmlSchemaWhiteSpaceReplace(const xmlChar *value) { - const xmlChar *cur = value; - xmlChar *ret = NULL, *mcur; + const xmlChar *cur = value; + xmlChar *ret = NULL, *mcur; - if (value == NULL) + if (value == NULL) return(NULL); - - while ((*cur != 0) && + + while ((*cur != 0) && (((*cur) != 0xd) && ((*cur) != 0x9) && ((*cur) != 0xa))) { cur++; } @@ -1927,7 +1927,7 @@ xmlSchemaWhiteSpaceReplace(const xmlChar *value) { if ( ((*mcur) == 0xd) || ((*mcur) == 0x9) || ((*mcur) == 0xa) ) *mcur = ' '; mcur++; - } while (*mcur != 0); + } while (*mcur != 0); return(ret); } @@ -2072,7 +2072,7 @@ xmlSchemaParseUInt(const xmlChar **str, unsigned long *llo, const xmlChar *tmp, *cur = *str; int ret = 0, i = 0; - if (!((*cur >= '0') && (*cur <= '9'))) + if (!((*cur >= '0') && (*cur <= '9'))) return(-2); while (*cur == '0') { /* ignore leading zeroes */ @@ -2148,7 +2148,7 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value, if ((flags == 0) && (value != NULL)) { if ((type->builtInType != XML_SCHEMAS_STRING) && - (type->builtInType != XML_SCHEMAS_ANYTYPE) && + (type->builtInType != XML_SCHEMAS_ANYTYPE) && (type->builtInType != XML_SCHEMAS_ANYSIMPLETYPE)) { if (type->builtInType == XML_SCHEMAS_NORMSTRING) norm = xmlSchemaWhiteSpaceReplace(value); @@ -2160,7 +2160,7 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value, } switch (type->builtInType) { - case XML_SCHEMAS_UNKNOWN: + case XML_SCHEMAS_UNKNOWN: goto error; case XML_SCHEMAS_ANYTYPE: case XML_SCHEMAS_ANYSIMPLETYPE: @@ -2171,10 +2171,10 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value, *val = v; } else { goto error; - } + } } goto return0; - case XML_SCHEMAS_STRING: + case XML_SCHEMAS_STRING: if (! normOnTheFly) { const xmlChar *cur = value; @@ -2253,7 +2253,7 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value, const xmlChar *cur = value; unsigned int len, neg, integ, hasLeadingZeroes; xmlChar cval[25]; - xmlChar *cptr = cval; + xmlChar *cptr = cval; if ((cur == NULL) || (*cur == 0)) goto return1; @@ -2327,10 +2327,10 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value, v = xmlSchemaNewValue(XML_SCHEMAS_DECIMAL); if (v != NULL) { /* - * Now evaluate the significant digits of the number - */ + * Now evaluate the significant digits of the number + */ if (len != 0) { - + if (integ != ~0u) { /* * Get rid of trailing zeroes in the @@ -2604,8 +2604,8 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value, } else { cur++; } - } - } + } + } if (val != NULL) { v = xmlSchemaNewValue(XML_SCHEMAS_TOKEN); if (v != NULL) { @@ -2618,7 +2618,7 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value, goto return0; } case XML_SCHEMAS_LANGUAGE: - if (normOnTheFly) { + if (normOnTheFly) { norm = xmlSchemaCollapseString(value); if (norm != NULL) value = norm; @@ -2903,11 +2903,11 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value, } goto done; } - case XML_SCHEMAS_ANYURI:{ + case XML_SCHEMAS_ANYURI:{ if (*value != 0) { xmlURIPtr uri; xmlChar *tmpval, *cur; - if (normOnTheFly) { + if (normOnTheFly) { norm = xmlSchemaCollapseString(value); if (norm != NULL) value = norm; @@ -2996,12 +2996,12 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value, } case XML_SCHEMAS_BASE64BINARY:{ /* ISSUE: - * + * * Ignore all stray characters? (yes, currently) * Worry about long lines? (no, currently) - * + * * rfc2045.txt: - * + * * "The encoded output stream must be represented in lines of * no more than 76 characters each. All line breaks or other * characters not found in Table 1 must be ignored by decoding @@ -3412,7 +3412,7 @@ xmlSchemaCompareDecimals(xmlSchemaValPtr x, xmlSchemaValPtr y) /* * First test: If x is -ve and not zero */ - if ((x->value.decimal.sign) && + if ((x->value.decimal.sign) && ((x->value.decimal.lo != 0) || (x->value.decimal.mi != 0) || (x->value.decimal.hi != 0))) { @@ -3569,8 +3569,8 @@ xmlSchemaCompareDurations(xmlSchemaValPtr x, xmlSchemaValPtr y) /* seconds */ sec = x->value.dur.sec - y->value.dur.sec; - carry = (long)sec / SECS_PER_DAY; - sec -= (double)(carry * SECS_PER_DAY); + carry = (long)(sec / SECS_PER_DAY); + sec -= ((double)carry) * SECS_PER_DAY; /* days */ day = x->value.dur.day - y->value.dur.day + carry; @@ -3653,7 +3653,7 @@ xmlSchemaDupVal (xmlSchemaValPtr v) xmlSchemaValPtr ret = xmlSchemaNewValue(v->type); if (ret == NULL) return NULL; - + memcpy(ret, v, sizeof(xmlSchemaVal)); ret->next = NULL; return ret; @@ -3699,7 +3699,7 @@ xmlSchemaCopyValue(xmlSchemaValPtr val) if (val->value.str != NULL) cur->value.str = xmlStrdup(BAD_CAST val->value.str); break; - case XML_SCHEMAS_QNAME: + case XML_SCHEMAS_QNAME: case XML_SCHEMAS_NOTATION: cur = xmlSchemaDupVal(val); if (val->value.qname.name != NULL) @@ -3841,7 +3841,7 @@ _xmlSchemaDateAdd (xmlSchemaValPtr dt, xmlSchemaValPtr dur) if (tyr == 0) tyr--; /* - * Coverity detected an overrun in daysInMonth + * Coverity detected an overrun in daysInMonth * of size 12 at position 12 with index variable "((r)->mon - 1)" */ if (tmon < 0) @@ -3866,7 +3866,7 @@ _xmlSchemaDateAdd (xmlSchemaValPtr dt, xmlSchemaValPtr dur) r->year++; } } - + r->day = tempdays; /* @@ -3931,7 +3931,7 @@ xmlSchemaDateNormalize (xmlSchemaValPtr dt, double offset) * _xmlSchemaDateCastYMToDays: * @dt: an #xmlSchemaValPtr * - * Convert mon and year of @dt to total number of days. Take the + * Convert mon and year of @dt to total number of days. Take the * number of years since (or before) 1 AD and add the number of leap * years. This is a function because negative * years must be handled a little differently and there is no zero year. @@ -4111,7 +4111,7 @@ xmlSchemaCompareDates (xmlSchemaValPtr x, xmlSchemaValPtr y) ret = -1; else if (sec > 0.0) ret = 1; - + } xmlSchemaFreeValue(p1); xmlSchemaFreeValue(q1); @@ -4252,7 +4252,7 @@ xmlSchemaComparePreserveReplaceStrings(const xmlChar *x, int invert) { int tmp; - + while ((*x != 0) && (*y != 0)) { if (IS_WSP_REPLACE_CH(*y)) { if (! IS_WSP_SPACE_CH(*x)) { @@ -4267,7 +4267,7 @@ xmlSchemaComparePreserveReplaceStrings(const xmlChar *x, else return(1); } - } + } } else { tmp = *x - *y; if (tmp < 0) { @@ -4321,7 +4321,7 @@ xmlSchemaComparePreserveCollapseStrings(const xmlChar *x, { int tmp; - /* + /* * Skip leading blank chars of the collapsed string. */ while IS_WSP_BLANK_CH(*y) @@ -4410,12 +4410,12 @@ xmlSchemaCompareReplaceCollapseStrings(const xmlChar *x, { int tmp; - /* + /* * Skip leading blank chars of the collapsed string. */ while IS_WSP_BLANK_CH(*y) y++; - + while ((*x != 0) && (*y != 0)) { if IS_WSP_BLANK_CH(*y) { if (! IS_WSP_BLANK_CH(*x)) { @@ -4435,8 +4435,8 @@ xmlSchemaCompareReplaceCollapseStrings(const xmlChar *x, } } x++; - y++; - /* + y++; + /* * Skip contiguous blank chars of the collapsed string. */ while IS_WSP_BLANK_CH(*y) @@ -4470,7 +4470,7 @@ xmlSchemaCompareReplaceCollapseStrings(const xmlChar *x, return(-1); else return(1); - } + } if (*y != 0) { /* * Skip trailing blank chars of the collapsed string. @@ -4503,27 +4503,27 @@ xmlSchemaCompareReplacedStrings(const xmlChar *x, const xmlChar *y) { int tmp; - + while ((*x != 0) && (*y != 0)) { if IS_WSP_BLANK_CH(*y) { if (! IS_WSP_BLANK_CH(*x)) { if ((*x - 0x20) < 0) - return(-1); + return(-1); else return(1); - } + } } else { if IS_WSP_BLANK_CH(*x) { if ((0x20 - *y) < 0) - return(-1); + return(-1); else return(1); } tmp = *x - *y; if (tmp < 0) - return(-1); + return(-1); if (tmp > 0) - return(1); + return(1); } x++; y++; @@ -4549,7 +4549,7 @@ static int xmlSchemaCompareNormStrings(const xmlChar *x, const xmlChar *y) { int tmp; - + while (IS_BLANK_CH(*x)) x++; while (IS_BLANK_CH(*y)) y++; while ((*x != 0) && (*y != 0)) { @@ -4742,13 +4742,13 @@ xmlSchemaCompareValuesInternal(xmlSchemaValType xtype, (ytype == XML_SCHEMAS_GYEARMONTH)) return (xmlSchemaCompareDates(x, y)); return (-2); - /* + /* * Note that we will support comparison of string types against * anySimpleType as well. */ case XML_SCHEMAS_ANYSIMPLETYPE: case XML_SCHEMAS_STRING: - case XML_SCHEMAS_NORMSTRING: + case XML_SCHEMAS_NORMSTRING: case XML_SCHEMAS_TOKEN: case XML_SCHEMAS_LANGUAGE: case XML_SCHEMAS_NMTOKEN: @@ -4772,10 +4772,10 @@ xmlSchemaCompareValuesInternal(xmlSchemaValType xtype, /* * TODO: Compare those against QName. */ - if (ytype == XML_SCHEMAS_QNAME) { + if (ytype == XML_SCHEMAS_QNAME) { TODO if (y == NULL) - return(-2); + return(-2); return (-2); } if ((ytype == XML_SCHEMAS_ANYSIMPLETYPE) || @@ -4797,7 +4797,7 @@ xmlSchemaCompareValuesInternal(xmlSchemaValType xtype, /* TODO: What about x < y or x > y. */ if (xmlStrEqual(xv, yv)) return (0); - else + else return (2); } else if (yws == XML_SCHEMA_WHITESPACE_REPLACE) return (xmlSchemaComparePreserveReplaceStrings(xv, yv, 0)); @@ -4823,7 +4823,7 @@ xmlSchemaCompareValuesInternal(xmlSchemaValType xtype, return (xmlSchemaCompareNormStrings(xv, yv)); } else return (-2); - + } return (-2); } @@ -4894,7 +4894,7 @@ xmlSchemaCompareValuesInternal(xmlSchemaValType xtype, else return(-1); } - return (-2); + return (-2); case XML_SCHEMAS_IDREFS: case XML_SCHEMAS_ENTITIES: case XML_SCHEMAS_NMTOKENS: @@ -5082,7 +5082,7 @@ xmlSchemaValidateListSimpleTypeFacet(xmlSchemaFacetPtr facet, if (expectedLen != NULL) *expectedLen = facet->val->value.decimal.lo; return (XML_SCHEMAV_CVC_LENGTH_VALID); - } + } } else if (facet->type == XML_SCHEMA_FACET_MINLENGTH) { if (actualLen < facet->val->value.decimal.lo) { if (expectedLen != NULL) @@ -5096,12 +5096,12 @@ xmlSchemaValidateListSimpleTypeFacet(xmlSchemaFacetPtr facet, return (XML_SCHEMAV_CVC_MAXLENGTH_VALID); } } else - /* - * NOTE: That we can pass NULL as xmlSchemaValPtr to + /* + * NOTE: That we can pass NULL as xmlSchemaValPtr to * xmlSchemaValidateFacet, since the remaining facet types - * are: XML_SCHEMA_FACET_PATTERN, XML_SCHEMA_FACET_ENUMERATION. + * are: XML_SCHEMA_FACET_PATTERN, XML_SCHEMA_FACET_ENUMERATION. */ - return(xmlSchemaValidateFacet(NULL, facet, value, NULL)); + return(xmlSchemaValidateFacet(NULL, facet, value, NULL)); return (0); } @@ -5114,7 +5114,7 @@ xmlSchemaValidateListSimpleTypeFacet(xmlSchemaFacetPtr facet, * @ws: the whitespace type of the value * @length: the actual length of the value * - * Checka a value against a "length", "minLength" and "maxLength" + * Checka a value against a "length", "minLength" and "maxLength" * facet; sets @length to the computed length of @value. * * Returns 0 if the value is valid, a positive error code @@ -5122,11 +5122,11 @@ xmlSchemaValidateListSimpleTypeFacet(xmlSchemaFacetPtr facet, */ static int xmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet, - xmlSchemaTypeType valType, + xmlSchemaValType valType, const xmlChar *value, - xmlSchemaValPtr val, + xmlSchemaValPtr val, unsigned long *length, - xmlSchemaWhitespaceValueType ws) + xmlSchemaWhitespaceValueType ws) { unsigned int len = 0; @@ -5137,7 +5137,7 @@ xmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet, (facet->type != XML_SCHEMA_FACET_MAXLENGTH) && (facet->type != XML_SCHEMA_FACET_MINLENGTH)) return (-1); - + /* * TODO: length, maxLength and minLength must be of type * nonNegativeInteger only. Check if decimal is used somehow. @@ -5171,7 +5171,7 @@ xmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet, if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE) len = xmlSchemaNormLen(value); else - /* + /* * Should be OK for "preserve" as well. */ len = xmlUTF8Strlen(value); @@ -5183,7 +5183,7 @@ xmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet, case XML_SCHEMAS_NMTOKEN: case XML_SCHEMAS_NAME: case XML_SCHEMAS_NCNAME: - case XML_SCHEMAS_ID: + case XML_SCHEMAS_ID: /* * FIXME: What exactly to do with anyURI? */ @@ -5192,11 +5192,11 @@ xmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet, len = xmlSchemaNormLen(value); break; case XML_SCHEMAS_QNAME: - case XML_SCHEMAS_NOTATION: - /* + case XML_SCHEMAS_NOTATION: + /* * For QName and NOTATION, those facets are * deprecated and should be ignored. - */ + */ return (0); default: TODO @@ -5216,7 +5216,7 @@ xmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet, if (len > facet->val->value.decimal.lo) return(XML_SCHEMAV_CVC_MAXLENGTH_VALID); } - + return (0); } @@ -5228,18 +5228,18 @@ xmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet, * @val: the precomputed value * @length: the actual length of the value * - * Checka a value against a "length", "minLength" and "maxLength" + * Checka a value against a "length", "minLength" and "maxLength" * facet; sets @length to the computed length of @value. * * Returns 0 if the value is valid, a positive error code * otherwise and -1 in case of an internal or API error. */ int -xmlSchemaValidateLengthFacet(xmlSchemaTypePtr type, +xmlSchemaValidateLengthFacet(xmlSchemaTypePtr type, xmlSchemaFacetPtr facet, const xmlChar *value, xmlSchemaValPtr val, - unsigned long *length) + unsigned long *length) { if (type == NULL) return(-1); @@ -5249,7 +5249,7 @@ xmlSchemaValidateLengthFacet(xmlSchemaTypePtr type, } /** - * xmlSchemaValidateLengthFacetWhtsp: + * xmlSchemaValidateLengthFacetWhtsp: * @facet: the facet to check * @valType: the built-in type * @value: the lexical repr. of the value to be validated @@ -5257,7 +5257,7 @@ xmlSchemaValidateLengthFacet(xmlSchemaTypePtr type, * @ws: the whitespace type of the value * @length: the actual length of the value * - * Checka a value against a "length", "minLength" and "maxLength" + * Checka a value against a "length", "minLength" and "maxLength" * facet; sets @length to the computed length of @value. * * Returns 0 if the value is valid, a positive error code @@ -5292,7 +5292,7 @@ xmlSchemaValidateLengthFacetWhtsp(xmlSchemaFacetPtr facet, static int xmlSchemaValidateFacetInternal(xmlSchemaFacetPtr facet, xmlSchemaWhitespaceValueType fws, - xmlSchemaValType valType, + xmlSchemaValType valType, const xmlChar *value, xmlSchemaValPtr val, xmlSchemaWhitespaceValueType ws) @@ -5304,7 +5304,7 @@ xmlSchemaValidateFacetInternal(xmlSchemaFacetPtr facet, switch (facet->type) { case XML_SCHEMA_FACET_PATTERN: - /* + /* * NOTE that for patterns, the @value needs to be the normalized * value, *not* the lexical initial value or the canonical value. */ @@ -5405,7 +5405,7 @@ xmlSchemaValidateFacetInternal(xmlSchemaFacetPtr facet, else { switch (valType) { case XML_SCHEMAS_STRING: - case XML_SCHEMAS_NORMSTRING: + case XML_SCHEMAS_NORMSTRING: if (ws == XML_SCHEMA_WHITESPACE_UNKNOWN) { /* * This is to ensure API compatibility with the old @@ -5421,13 +5421,13 @@ xmlSchemaValidateFacetInternal(xmlSchemaFacetPtr facet, if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE) len = xmlSchemaNormLen(value); else - /* + /* * Should be OK for "preserve" as well. */ len = xmlUTF8Strlen(value); } break; - case XML_SCHEMAS_IDREF: + case XML_SCHEMAS_IDREF: case XML_SCHEMAS_TOKEN: case XML_SCHEMAS_LANGUAGE: case XML_SCHEMAS_NMTOKEN: @@ -5436,11 +5436,11 @@ xmlSchemaValidateFacetInternal(xmlSchemaFacetPtr facet, case XML_SCHEMAS_ID: case XML_SCHEMAS_ANYURI: if (value != NULL) - len = xmlSchemaNormLen(value); - break; + len = xmlSchemaNormLen(value); + break; default: TODO - } + } } if (facet->type == XML_SCHEMA_FACET_LENGTH) { if (len != facet->val->value.decimal.lo) @@ -5550,7 +5550,7 @@ xmlSchemaValidateFacet(xmlSchemaTypePtr base, int xmlSchemaValidateFacetWhtsp(xmlSchemaFacetPtr facet, xmlSchemaWhitespaceValueType fws, - xmlSchemaValType valType, + xmlSchemaValType valType, const xmlChar *value, xmlSchemaValPtr val, xmlSchemaWhitespaceValueType ws) @@ -5611,13 +5611,13 @@ xmlSchemaFormatFloat(double number, char buffer[], int buffersize) /* * Result is in work, and after_fraction points * just past the fractional part. - * Use scientific notation + * Use scientific notation */ integer_place = DBL_DIG + EXPONENT_DIGITS + 1; fraction_place = DBL_DIG - 1; snprintf(work, sizeof(work),"%*.*e", integer_place, fraction_place, number); - after_fraction = strchr(work + DBL_DIG, 'e'); + after_fraction = strchr(work + DBL_DIG, 'e'); /* Remove fractional trailing zeroes */ ptr = after_fraction; while (*(--ptr) == '0') @@ -5649,7 +5649,7 @@ xmlSchemaFormatFloat(double number, char buffer[], int buffersize) * * WARNING: Some value types are not supported yet, resulting * in a @retValue of "???". - * + * * TODO: XML Schema 1.0 does not define canonical representations * for: duration, gYearMonth, gYear, gMonthDay, gMonth, gDay, * anyURI, QName, NOTATION. This will be fixed in XML Schema 1.1. @@ -5669,7 +5669,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue) if (val->value.str == NULL) *retValue = BAD_CAST xmlStrdup(BAD_CAST ""); else - *retValue = + *retValue = BAD_CAST xmlStrdup((const xmlChar *) val->value.str); break; case XML_SCHEMAS_NORMSTRING: @@ -5686,7 +5686,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue) case XML_SCHEMAS_TOKEN: case XML_SCHEMAS_LANGUAGE: case XML_SCHEMAS_NMTOKEN: - case XML_SCHEMAS_NAME: + case XML_SCHEMAS_NAME: case XML_SCHEMAS_NCNAME: case XML_SCHEMAS_ID: case XML_SCHEMAS_IDREF: @@ -5695,10 +5695,10 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue) case XML_SCHEMAS_ANYURI: /* Unclear */ if (val->value.str == NULL) return (-1); - *retValue = + *retValue = BAD_CAST xmlSchemaCollapseString(BAD_CAST val->value.str); if (*retValue == NULL) - *retValue = + *retValue = BAD_CAST xmlStrdup((const xmlChar *) val->value.str); break; case XML_SCHEMAS_QNAME: @@ -5720,7 +5720,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue) /* * TODO: Lookout for a more simple implementation. */ - if ((val->value.decimal.total == 1) && + if ((val->value.decimal.total == 1) && (val->value.decimal.lo == 0)) { *retValue = xmlStrdup(BAD_CAST "0.0"); } else { @@ -5754,7 +5754,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue) else snprintf(offs, bufsize - (offs - buf), "%lu", dec.lo); - + if (dec.frac != 0) { if (dec.frac != dec.total) { int diff = dec.total - dec.frac; @@ -5767,7 +5767,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue) unsigned int i = 0; /* * Insert missing zeroes behind the decimal point. - */ + */ while (*(offs + i) != 0) i++; if (i < dec.total) { @@ -5904,7 +5904,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue) snprintf((char *) *retValue, 6, "---%02u", val->value.date.day); } - break; + break; case XML_SCHEMAS_GMONTHDAY: { /* TODO: Unclear in XML Schema 1.0 */ /* TODO: What to do with the timezone? */ @@ -5921,14 +5921,14 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue) /* TODO: What to do with the timezone? */ if (val->value.date.year < 0) snprintf(buf, 35, "-%04ld-%02u", - labs(val->value.date.year), + labs(val->value.date.year), val->value.date.mon); else snprintf(buf, 35, "%04ld-%02u", val->value.date.year, val->value.date.mon); *retValue = BAD_CAST xmlStrdup(BAD_CAST buf); } - break; + break; case XML_SCHEMAS_TIME: { char buf[30]; @@ -5939,8 +5939,8 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue) norm = xmlSchemaDateNormalize(val, 0); if (norm == NULL) return (-1); - /* - * TODO: Check if "%.14g" is portable. + /* + * TODO: Check if "%.14g" is portable. */ snprintf(buf, 30, "%02u:%02u:%02.14gZ", @@ -5956,7 +5956,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue) val->value.date.sec); } *retValue = BAD_CAST xmlStrdup(BAD_CAST buf); - } + } break; case XML_SCHEMAS_DATE: { @@ -5984,7 +5984,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue) val->value.date.day); } *retValue = BAD_CAST xmlStrdup(BAD_CAST buf); - } + } break; case XML_SCHEMAS_DATETIME: { @@ -6028,8 +6028,8 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue) *retValue = BAD_CAST xmlStrdup(BAD_CAST val->value.base64.str); break; case XML_SCHEMAS_FLOAT: { - char buf[30]; - /* + char buf[30]; + /* * |m| < 16777216, -149 <= e <= 104. * TODO: Handle, NaN, INF, -INF. The format is not * yet conformant. The c type float does not cover @@ -6050,7 +6050,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue) snprintf(buf, 40, "%01.14e", val->value.d); *retValue = BAD_CAST xmlStrdup(BAD_CAST buf); } - break; + break; default: *retValue = BAD_CAST xmlStrdup(BAD_CAST "???"); return (1); @@ -6109,7 +6109,7 @@ xmlSchemaGetCanonValueWhtsp(xmlSchemaValPtr val, break; default: return (xmlSchemaGetCanonValue(val, retValue)); - } + } return (0); } diff --git a/lib/3rdparty/libxml2/xmlstring.c b/lib/3rdparty/libxml2/xmlstring.c index 910f244485d..a37220d7808 100644 --- a/lib/3rdparty/libxml2/xmlstring.c +++ b/lib/3rdparty/libxml2/xmlstring.c @@ -3,7 +3,7 @@ * * This module provides various utility functions for manipulating * the xmlChar* type. All functions named xmlStr* have been moved here - * from the parser.c file (their original home). + * from the parser.c file (their original home). * * See Copyright for the status of this software. * @@ -40,7 +40,7 @@ xmlChar * xmlStrndup(const xmlChar *cur, int len) { xmlChar *ret; - + if ((cur == NULL) || (len < 0)) return(NULL); ret = (xmlChar *) xmlMallocAtomic((len + 1) * sizeof(xmlChar)); if (ret == NULL) { @@ -85,7 +85,7 @@ xmlChar * xmlCharStrndup(const char *cur, int len) { int i; xmlChar *ret; - + if ((cur == NULL) || (len < 0)) return(NULL); ret = (xmlChar *) xmlMallocAtomic((len + 1) * sizeof(xmlChar)); if (ret == NULL) { @@ -170,7 +170,7 @@ xmlStrEqual(const xmlChar *str1, const xmlChar *str2) { * @name: the localname of the QName * @str: the second xmlChar * * - * Check if a QName is Equal to a given string + * Check if a QName is Equal to a given string * * Returns 1 if they are equal, 0 if they are different */ @@ -340,7 +340,7 @@ xmlStrchr(const xmlChar *str, xmlChar val) { const xmlChar * xmlStrstr(const xmlChar *str, const xmlChar *val) { int n; - + if (str == NULL) return(NULL); if (val == NULL) return(NULL); n = xmlStrlen(val); @@ -368,7 +368,7 @@ xmlStrstr(const xmlChar *str, const xmlChar *val) { const xmlChar * xmlStrcasestr(const xmlChar *str, const xmlChar *val) { int n; - + if (str == NULL) return(NULL); if (val == NULL) return(NULL); n = xmlStrlen(val); @@ -396,7 +396,7 @@ xmlStrcasestr(const xmlChar *str, const xmlChar *val) { xmlChar * xmlStrsub(const xmlChar *str, int start, int len) { int i; - + if (str == NULL) return(NULL); if (start < 0) return(NULL); if (len < 0) return(NULL); @@ -519,7 +519,7 @@ xmlStrcat(xmlChar *cur, const xmlChar *add) { const xmlChar *p = add; if (add == NULL) return(cur); - if (cur == NULL) + if (cur == NULL) return(xmlStrdup(add)); while (*p != 0) p++; /* non input consuming */ @@ -537,20 +537,20 @@ xmlStrcat(xmlChar *cur, const xmlChar *add) { * * Returns the number of characters written to @buf or -1 if an error occurs. */ -int XMLCDECL +int XMLCDECL xmlStrPrintf(xmlChar *buf, int len, const xmlChar *msg, ...) { va_list args; int ret; - + if((buf == NULL) || (msg == NULL)) { return(-1); } - + va_start(args, msg); ret = vsnprintf((char *) buf, len, (const char *) msg, args); va_end(args); buf[len - 1] = 0; /* be safe ! */ - + return(ret); } @@ -565,17 +565,17 @@ xmlStrPrintf(xmlChar *buf, int len, const xmlChar *msg, ...) { * * Returns the number of characters written to @buf or -1 if an error occurs. */ -int +int xmlStrVPrintf(xmlChar *buf, int len, const xmlChar *msg, va_list ap) { int ret; - + if((buf == NULL) || (msg == NULL)) { return(-1); } - + ret = vsnprintf((char *) buf, len, (const char *) msg, ap); buf[len - 1] = 0; /* be safe ! */ - + return(ret); } @@ -858,7 +858,7 @@ xmlChar * xmlUTF8Strndup(const xmlChar *utf, int len) { xmlChar *ret; int i; - + if ((utf == NULL) || (len < 0)) return(NULL); i = xmlUTF8Strsize(utf, len); ret = (xmlChar *) xmlMallocAtomic((i + 1) * sizeof(xmlChar)); diff --git a/lib/3rdparty/libxml2/xmlunicode.c b/lib/3rdparty/libxml2/xmlunicode.c index 450d0f09379..ce6e9a4f10d 100644 --- a/lib/3rdparty/libxml2/xmlunicode.c +++ b/lib/3rdparty/libxml2/xmlunicode.c @@ -204,729 +204,729 @@ static xmlUnicodeRange xmlUnicodeCats[] = { {"Zp", xmlUCSIsCatZp}, {"Zs", xmlUCSIsCatZs}}; -static const xmlChSRange xmlCS[] = {{0x0, 0x1f}, {0x7f, 0x9f}, - {0xad, 0xad}, {0x600, 0x603}, {0x6dd, 0x6dd}, {0x70f, 0x70f}, - {0x17b4, 0x17b5}, {0x200b, 0x200f}, {0x202a, 0x202e}, {0x2060, 0x2063}, - {0x206a, 0x206f}, {0xd800, 0xd800}, {0xdb7f, 0xdb80}, {0xdbff, 0xdc00}, +static const xmlChSRange xmlCS[] = {{0x0, 0x1f}, {0x7f, 0x9f}, + {0xad, 0xad}, {0x600, 0x603}, {0x6dd, 0x6dd}, {0x70f, 0x70f}, + {0x17b4, 0x17b5}, {0x200b, 0x200f}, {0x202a, 0x202e}, {0x2060, 0x2063}, + {0x206a, 0x206f}, {0xd800, 0xd800}, {0xdb7f, 0xdb80}, {0xdbff, 0xdc00}, {0xdfff, 0xe000}, {0xf8ff, 0xf8ff}, {0xfeff, 0xfeff}, {0xfff9, 0xfffb} }; -static const xmlChLRange xmlCL[] = {{0x1d173, 0x1d17a}, {0xe0001, 0xe0001}, - {0xe0020, 0xe007f}, {0xf0000, 0xf0000}, {0xffffd, 0xffffd}, +static const xmlChLRange xmlCL[] = {{0x1d173, 0x1d17a}, {0xe0001, 0xe0001}, + {0xe0020, 0xe007f}, {0xf0000, 0xf0000}, {0xffffd, 0xffffd}, {0x100000, 0x100000}, {0x10fffd, 0x10fffd} }; static xmlChRangeGroup xmlCG = {18,7,xmlCS,xmlCL}; -static const xmlChSRange xmlCfS[] = {{0xad, 0xad}, {0x600, 0x603}, - {0x6dd, 0x6dd}, {0x70f, 0x70f}, {0x17b4, 0x17b5}, {0x200b, 0x200f}, - {0x202a, 0x202e}, {0x2060, 0x2063}, {0x206a, 0x206f}, {0xfeff, 0xfeff}, +static const xmlChSRange xmlCfS[] = {{0xad, 0xad}, {0x600, 0x603}, + {0x6dd, 0x6dd}, {0x70f, 0x70f}, {0x17b4, 0x17b5}, {0x200b, 0x200f}, + {0x202a, 0x202e}, {0x2060, 0x2063}, {0x206a, 0x206f}, {0xfeff, 0xfeff}, {0xfff9, 0xfffb} }; -static const xmlChLRange xmlCfL[] = {{0x1d173, 0x1d17a}, {0xe0001, 0xe0001}, +static const xmlChLRange xmlCfL[] = {{0x1d173, 0x1d17a}, {0xe0001, 0xe0001}, {0xe0020, 0xe007f} }; static xmlChRangeGroup xmlCfG = {11,3,xmlCfS,xmlCfL}; -static const xmlChSRange xmlLS[] = {{0x41, 0x5a}, {0x61, 0x7a}, - {0xaa, 0xaa}, {0xb5, 0xb5}, {0xba, 0xba}, {0xc0, 0xd6}, {0xd8, 0xf6}, - {0xf8, 0x236}, {0x250, 0x2c1}, {0x2c6, 0x2d1}, {0x2e0, 0x2e4}, - {0x2ee, 0x2ee}, {0x37a, 0x37a}, {0x386, 0x386}, {0x388, 0x38a}, - {0x38c, 0x38c}, {0x38e, 0x3a1}, {0x3a3, 0x3ce}, {0x3d0, 0x3f5}, - {0x3f7, 0x3fb}, {0x400, 0x481}, {0x48a, 0x4ce}, {0x4d0, 0x4f5}, - {0x4f8, 0x4f9}, {0x500, 0x50f}, {0x531, 0x556}, {0x559, 0x559}, - {0x561, 0x587}, {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a}, - {0x640, 0x64a}, {0x66e, 0x66f}, {0x671, 0x6d3}, {0x6d5, 0x6d5}, - {0x6e5, 0x6e6}, {0x6ee, 0x6ef}, {0x6fa, 0x6fc}, {0x6ff, 0x6ff}, - {0x710, 0x710}, {0x712, 0x72f}, {0x74d, 0x74f}, {0x780, 0x7a5}, - {0x7b1, 0x7b1}, {0x904, 0x939}, {0x93d, 0x93d}, {0x950, 0x950}, - {0x958, 0x961}, {0x985, 0x98c}, {0x98f, 0x990}, {0x993, 0x9a8}, - {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9}, {0x9bd, 0x9bd}, - {0x9dc, 0x9dd}, {0x9df, 0x9e1}, {0x9f0, 0x9f1}, {0xa05, 0xa0a}, - {0xa0f, 0xa10}, {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa32, 0xa33}, - {0xa35, 0xa36}, {0xa38, 0xa39}, {0xa59, 0xa5c}, {0xa5e, 0xa5e}, - {0xa72, 0xa74}, {0xa85, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8}, - {0xaaa, 0xab0}, {0xab2, 0xab3}, {0xab5, 0xab9}, {0xabd, 0xabd}, - {0xad0, 0xad0}, {0xae0, 0xae1}, {0xb05, 0xb0c}, {0xb0f, 0xb10}, - {0xb13, 0xb28}, {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb35, 0xb39}, - {0xb3d, 0xb3d}, {0xb5c, 0xb5d}, {0xb5f, 0xb61}, {0xb71, 0xb71}, - {0xb83, 0xb83}, {0xb85, 0xb8a}, {0xb8e, 0xb90}, {0xb92, 0xb95}, - {0xb99, 0xb9a}, {0xb9c, 0xb9c}, {0xb9e, 0xb9f}, {0xba3, 0xba4}, - {0xba8, 0xbaa}, {0xbae, 0xbb5}, {0xbb7, 0xbb9}, {0xc05, 0xc0c}, - {0xc0e, 0xc10}, {0xc12, 0xc28}, {0xc2a, 0xc33}, {0xc35, 0xc39}, - {0xc60, 0xc61}, {0xc85, 0xc8c}, {0xc8e, 0xc90}, {0xc92, 0xca8}, - {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, {0xcbd, 0xcbd}, {0xcde, 0xcde}, - {0xce0, 0xce1}, {0xd05, 0xd0c}, {0xd0e, 0xd10}, {0xd12, 0xd28}, - {0xd2a, 0xd39}, {0xd60, 0xd61}, {0xd85, 0xd96}, {0xd9a, 0xdb1}, - {0xdb3, 0xdbb}, {0xdbd, 0xdbd}, {0xdc0, 0xdc6}, {0xe01, 0xe30}, - {0xe32, 0xe33}, {0xe40, 0xe46}, {0xe81, 0xe82}, {0xe84, 0xe84}, - {0xe87, 0xe88}, {0xe8a, 0xe8a}, {0xe8d, 0xe8d}, {0xe94, 0xe97}, - {0xe99, 0xe9f}, {0xea1, 0xea3}, {0xea5, 0xea5}, {0xea7, 0xea7}, - {0xeaa, 0xeab}, {0xead, 0xeb0}, {0xeb2, 0xeb3}, {0xebd, 0xebd}, - {0xec0, 0xec4}, {0xec6, 0xec6}, {0xedc, 0xedd}, {0xf00, 0xf00}, - {0xf40, 0xf47}, {0xf49, 0xf6a}, {0xf88, 0xf8b}, {0x1000, 0x1021}, - {0x1023, 0x1027}, {0x1029, 0x102a}, {0x1050, 0x1055}, {0x10a0, 0x10c5}, - {0x10d0, 0x10f8}, {0x1100, 0x1159}, {0x115f, 0x11a2}, {0x11a8, 0x11f9}, - {0x1200, 0x1206}, {0x1208, 0x1246}, {0x1248, 0x1248}, {0x124a, 0x124d}, - {0x1250, 0x1256}, {0x1258, 0x1258}, {0x125a, 0x125d}, {0x1260, 0x1286}, - {0x1288, 0x1288}, {0x128a, 0x128d}, {0x1290, 0x12ae}, {0x12b0, 0x12b0}, - {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c0, 0x12c0}, {0x12c2, 0x12c5}, - {0x12c8, 0x12ce}, {0x12d0, 0x12d6}, {0x12d8, 0x12ee}, {0x12f0, 0x130e}, - {0x1310, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x131e}, {0x1320, 0x1346}, - {0x1348, 0x135a}, {0x13a0, 0x13f4}, {0x1401, 0x166c}, {0x166f, 0x1676}, - {0x1681, 0x169a}, {0x16a0, 0x16ea}, {0x1700, 0x170c}, {0x170e, 0x1711}, - {0x1720, 0x1731}, {0x1740, 0x1751}, {0x1760, 0x176c}, {0x176e, 0x1770}, - {0x1780, 0x17b3}, {0x17d7, 0x17d7}, {0x17dc, 0x17dc}, {0x1820, 0x1877}, - {0x1880, 0x18a8}, {0x1900, 0x191c}, {0x1950, 0x196d}, {0x1970, 0x1974}, - {0x1d00, 0x1d6b}, {0x1e00, 0x1e9b}, {0x1ea0, 0x1ef9}, {0x1f00, 0x1f15}, - {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, - {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b}, {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f7d}, - {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, - {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3}, {0x1fd6, 0x1fdb}, {0x1fe0, 0x1fec}, - {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc}, {0x2071, 0x2071}, {0x207f, 0x207f}, - {0x2102, 0x2102}, {0x2107, 0x2107}, {0x210a, 0x2113}, {0x2115, 0x2115}, - {0x2119, 0x211d}, {0x2124, 0x2124}, {0x2126, 0x2126}, {0x2128, 0x2128}, - {0x212a, 0x212d}, {0x212f, 0x2131}, {0x2133, 0x2139}, {0x213d, 0x213f}, - {0x2145, 0x2149}, {0x3005, 0x3006}, {0x3031, 0x3035}, {0x303b, 0x303c}, - {0x3041, 0x3096}, {0x309d, 0x309f}, {0x30a1, 0x30fa}, {0x30fc, 0x30ff}, - {0x3105, 0x312c}, {0x3131, 0x318e}, {0x31a0, 0x31b7}, {0x31f0, 0x31ff}, - {0x3400, 0x3400}, {0x4db5, 0x4db5}, {0x4e00, 0x4e00}, {0x9fa5, 0x9fa5}, - {0xa000, 0xa48c}, {0xac00, 0xac00}, {0xd7a3, 0xd7a3}, {0xf900, 0xfa2d}, - {0xfa30, 0xfa6a}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, {0xfb1d, 0xfb1d}, - {0xfb1f, 0xfb28}, {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c}, {0xfb3e, 0xfb3e}, - {0xfb40, 0xfb41}, {0xfb43, 0xfb44}, {0xfb46, 0xfbb1}, {0xfbd3, 0xfd3d}, - {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb}, {0xfe70, 0xfe74}, - {0xfe76, 0xfefc}, {0xff21, 0xff3a}, {0xff41, 0xff5a}, {0xff66, 0xffbe}, +static const xmlChSRange xmlLS[] = {{0x41, 0x5a}, {0x61, 0x7a}, + {0xaa, 0xaa}, {0xb5, 0xb5}, {0xba, 0xba}, {0xc0, 0xd6}, {0xd8, 0xf6}, + {0xf8, 0x236}, {0x250, 0x2c1}, {0x2c6, 0x2d1}, {0x2e0, 0x2e4}, + {0x2ee, 0x2ee}, {0x37a, 0x37a}, {0x386, 0x386}, {0x388, 0x38a}, + {0x38c, 0x38c}, {0x38e, 0x3a1}, {0x3a3, 0x3ce}, {0x3d0, 0x3f5}, + {0x3f7, 0x3fb}, {0x400, 0x481}, {0x48a, 0x4ce}, {0x4d0, 0x4f5}, + {0x4f8, 0x4f9}, {0x500, 0x50f}, {0x531, 0x556}, {0x559, 0x559}, + {0x561, 0x587}, {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a}, + {0x640, 0x64a}, {0x66e, 0x66f}, {0x671, 0x6d3}, {0x6d5, 0x6d5}, + {0x6e5, 0x6e6}, {0x6ee, 0x6ef}, {0x6fa, 0x6fc}, {0x6ff, 0x6ff}, + {0x710, 0x710}, {0x712, 0x72f}, {0x74d, 0x74f}, {0x780, 0x7a5}, + {0x7b1, 0x7b1}, {0x904, 0x939}, {0x93d, 0x93d}, {0x950, 0x950}, + {0x958, 0x961}, {0x985, 0x98c}, {0x98f, 0x990}, {0x993, 0x9a8}, + {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9}, {0x9bd, 0x9bd}, + {0x9dc, 0x9dd}, {0x9df, 0x9e1}, {0x9f0, 0x9f1}, {0xa05, 0xa0a}, + {0xa0f, 0xa10}, {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa32, 0xa33}, + {0xa35, 0xa36}, {0xa38, 0xa39}, {0xa59, 0xa5c}, {0xa5e, 0xa5e}, + {0xa72, 0xa74}, {0xa85, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8}, + {0xaaa, 0xab0}, {0xab2, 0xab3}, {0xab5, 0xab9}, {0xabd, 0xabd}, + {0xad0, 0xad0}, {0xae0, 0xae1}, {0xb05, 0xb0c}, {0xb0f, 0xb10}, + {0xb13, 0xb28}, {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb35, 0xb39}, + {0xb3d, 0xb3d}, {0xb5c, 0xb5d}, {0xb5f, 0xb61}, {0xb71, 0xb71}, + {0xb83, 0xb83}, {0xb85, 0xb8a}, {0xb8e, 0xb90}, {0xb92, 0xb95}, + {0xb99, 0xb9a}, {0xb9c, 0xb9c}, {0xb9e, 0xb9f}, {0xba3, 0xba4}, + {0xba8, 0xbaa}, {0xbae, 0xbb5}, {0xbb7, 0xbb9}, {0xc05, 0xc0c}, + {0xc0e, 0xc10}, {0xc12, 0xc28}, {0xc2a, 0xc33}, {0xc35, 0xc39}, + {0xc60, 0xc61}, {0xc85, 0xc8c}, {0xc8e, 0xc90}, {0xc92, 0xca8}, + {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, {0xcbd, 0xcbd}, {0xcde, 0xcde}, + {0xce0, 0xce1}, {0xd05, 0xd0c}, {0xd0e, 0xd10}, {0xd12, 0xd28}, + {0xd2a, 0xd39}, {0xd60, 0xd61}, {0xd85, 0xd96}, {0xd9a, 0xdb1}, + {0xdb3, 0xdbb}, {0xdbd, 0xdbd}, {0xdc0, 0xdc6}, {0xe01, 0xe30}, + {0xe32, 0xe33}, {0xe40, 0xe46}, {0xe81, 0xe82}, {0xe84, 0xe84}, + {0xe87, 0xe88}, {0xe8a, 0xe8a}, {0xe8d, 0xe8d}, {0xe94, 0xe97}, + {0xe99, 0xe9f}, {0xea1, 0xea3}, {0xea5, 0xea5}, {0xea7, 0xea7}, + {0xeaa, 0xeab}, {0xead, 0xeb0}, {0xeb2, 0xeb3}, {0xebd, 0xebd}, + {0xec0, 0xec4}, {0xec6, 0xec6}, {0xedc, 0xedd}, {0xf00, 0xf00}, + {0xf40, 0xf47}, {0xf49, 0xf6a}, {0xf88, 0xf8b}, {0x1000, 0x1021}, + {0x1023, 0x1027}, {0x1029, 0x102a}, {0x1050, 0x1055}, {0x10a0, 0x10c5}, + {0x10d0, 0x10f8}, {0x1100, 0x1159}, {0x115f, 0x11a2}, {0x11a8, 0x11f9}, + {0x1200, 0x1206}, {0x1208, 0x1246}, {0x1248, 0x1248}, {0x124a, 0x124d}, + {0x1250, 0x1256}, {0x1258, 0x1258}, {0x125a, 0x125d}, {0x1260, 0x1286}, + {0x1288, 0x1288}, {0x128a, 0x128d}, {0x1290, 0x12ae}, {0x12b0, 0x12b0}, + {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c0, 0x12c0}, {0x12c2, 0x12c5}, + {0x12c8, 0x12ce}, {0x12d0, 0x12d6}, {0x12d8, 0x12ee}, {0x12f0, 0x130e}, + {0x1310, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x131e}, {0x1320, 0x1346}, + {0x1348, 0x135a}, {0x13a0, 0x13f4}, {0x1401, 0x166c}, {0x166f, 0x1676}, + {0x1681, 0x169a}, {0x16a0, 0x16ea}, {0x1700, 0x170c}, {0x170e, 0x1711}, + {0x1720, 0x1731}, {0x1740, 0x1751}, {0x1760, 0x176c}, {0x176e, 0x1770}, + {0x1780, 0x17b3}, {0x17d7, 0x17d7}, {0x17dc, 0x17dc}, {0x1820, 0x1877}, + {0x1880, 0x18a8}, {0x1900, 0x191c}, {0x1950, 0x196d}, {0x1970, 0x1974}, + {0x1d00, 0x1d6b}, {0x1e00, 0x1e9b}, {0x1ea0, 0x1ef9}, {0x1f00, 0x1f15}, + {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, + {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b}, {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f7d}, + {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, + {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3}, {0x1fd6, 0x1fdb}, {0x1fe0, 0x1fec}, + {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc}, {0x2071, 0x2071}, {0x207f, 0x207f}, + {0x2102, 0x2102}, {0x2107, 0x2107}, {0x210a, 0x2113}, {0x2115, 0x2115}, + {0x2119, 0x211d}, {0x2124, 0x2124}, {0x2126, 0x2126}, {0x2128, 0x2128}, + {0x212a, 0x212d}, {0x212f, 0x2131}, {0x2133, 0x2139}, {0x213d, 0x213f}, + {0x2145, 0x2149}, {0x3005, 0x3006}, {0x3031, 0x3035}, {0x303b, 0x303c}, + {0x3041, 0x3096}, {0x309d, 0x309f}, {0x30a1, 0x30fa}, {0x30fc, 0x30ff}, + {0x3105, 0x312c}, {0x3131, 0x318e}, {0x31a0, 0x31b7}, {0x31f0, 0x31ff}, + {0x3400, 0x3400}, {0x4db5, 0x4db5}, {0x4e00, 0x4e00}, {0x9fa5, 0x9fa5}, + {0xa000, 0xa48c}, {0xac00, 0xac00}, {0xd7a3, 0xd7a3}, {0xf900, 0xfa2d}, + {0xfa30, 0xfa6a}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, {0xfb1d, 0xfb1d}, + {0xfb1f, 0xfb28}, {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c}, {0xfb3e, 0xfb3e}, + {0xfb40, 0xfb41}, {0xfb43, 0xfb44}, {0xfb46, 0xfbb1}, {0xfbd3, 0xfd3d}, + {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb}, {0xfe70, 0xfe74}, + {0xfe76, 0xfefc}, {0xff21, 0xff3a}, {0xff41, 0xff5a}, {0xff66, 0xffbe}, {0xffc2, 0xffc7}, {0xffca, 0xffcf}, {0xffd2, 0xffd7}, {0xffda, 0xffdc} }; -static const xmlChLRange xmlLL[] = {{0x10000, 0x1000b}, {0x1000d, 0x10026}, - {0x10028, 0x1003a}, {0x1003c, 0x1003d}, {0x1003f, 0x1004d}, - {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10300, 0x1031e}, - {0x10330, 0x10349}, {0x10380, 0x1039d}, {0x10400, 0x1049d}, - {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080a, 0x10835}, - {0x10837, 0x10838}, {0x1083c, 0x1083c}, {0x1083f, 0x1083f}, - {0x1d400, 0x1d454}, {0x1d456, 0x1d49c}, {0x1d49e, 0x1d49f}, - {0x1d4a2, 0x1d4a2}, {0x1d4a5, 0x1d4a6}, {0x1d4a9, 0x1d4ac}, - {0x1d4ae, 0x1d4b9}, {0x1d4bb, 0x1d4bb}, {0x1d4bd, 0x1d4c3}, - {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514}, - {0x1d516, 0x1d51c}, {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e}, - {0x1d540, 0x1d544}, {0x1d546, 0x1d546}, {0x1d54a, 0x1d550}, - {0x1d552, 0x1d6a3}, {0x1d6a8, 0x1d6c0}, {0x1d6c2, 0x1d6da}, - {0x1d6dc, 0x1d6fa}, {0x1d6fc, 0x1d714}, {0x1d716, 0x1d734}, - {0x1d736, 0x1d74e}, {0x1d750, 0x1d76e}, {0x1d770, 0x1d788}, - {0x1d78a, 0x1d7a8}, {0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7c9}, +static const xmlChLRange xmlLL[] = {{0x10000, 0x1000b}, {0x1000d, 0x10026}, + {0x10028, 0x1003a}, {0x1003c, 0x1003d}, {0x1003f, 0x1004d}, + {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10300, 0x1031e}, + {0x10330, 0x10349}, {0x10380, 0x1039d}, {0x10400, 0x1049d}, + {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080a, 0x10835}, + {0x10837, 0x10838}, {0x1083c, 0x1083c}, {0x1083f, 0x1083f}, + {0x1d400, 0x1d454}, {0x1d456, 0x1d49c}, {0x1d49e, 0x1d49f}, + {0x1d4a2, 0x1d4a2}, {0x1d4a5, 0x1d4a6}, {0x1d4a9, 0x1d4ac}, + {0x1d4ae, 0x1d4b9}, {0x1d4bb, 0x1d4bb}, {0x1d4bd, 0x1d4c3}, + {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514}, + {0x1d516, 0x1d51c}, {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e}, + {0x1d540, 0x1d544}, {0x1d546, 0x1d546}, {0x1d54a, 0x1d550}, + {0x1d552, 0x1d6a3}, {0x1d6a8, 0x1d6c0}, {0x1d6c2, 0x1d6da}, + {0x1d6dc, 0x1d6fa}, {0x1d6fc, 0x1d714}, {0x1d716, 0x1d734}, + {0x1d736, 0x1d74e}, {0x1d750, 0x1d76e}, {0x1d770, 0x1d788}, + {0x1d78a, 0x1d7a8}, {0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7c9}, {0x20000, 0x20000}, {0x2a6d6, 0x2a6d6}, {0x2f800, 0x2fa1d} }; static xmlChRangeGroup xmlLG = {279,50,xmlLS,xmlLL}; -static const xmlChSRange xmlLlS[] = {{0x61, 0x7a}, {0xaa, 0xaa}, - {0xb5, 0xb5}, {0xba, 0xba}, {0xdf, 0xf6}, {0xf8, 0xff}, {0x101, 0x101}, - {0x103, 0x103}, {0x105, 0x105}, {0x107, 0x107}, {0x109, 0x109}, - {0x10b, 0x10b}, {0x10d, 0x10d}, {0x10f, 0x10f}, {0x111, 0x111}, - {0x113, 0x113}, {0x115, 0x115}, {0x117, 0x117}, {0x119, 0x119}, - {0x11b, 0x11b}, {0x11d, 0x11d}, {0x11f, 0x11f}, {0x121, 0x121}, - {0x123, 0x123}, {0x125, 0x125}, {0x127, 0x127}, {0x129, 0x129}, - {0x12b, 0x12b}, {0x12d, 0x12d}, {0x12f, 0x12f}, {0x131, 0x131}, - {0x133, 0x133}, {0x135, 0x135}, {0x137, 0x138}, {0x13a, 0x13a}, - {0x13c, 0x13c}, {0x13e, 0x13e}, {0x140, 0x140}, {0x142, 0x142}, - {0x144, 0x144}, {0x146, 0x146}, {0x148, 0x149}, {0x14b, 0x14b}, - {0x14d, 0x14d}, {0x14f, 0x14f}, {0x151, 0x151}, {0x153, 0x153}, - {0x155, 0x155}, {0x157, 0x157}, {0x159, 0x159}, {0x15b, 0x15b}, - {0x15d, 0x15d}, {0x15f, 0x15f}, {0x161, 0x161}, {0x163, 0x163}, - {0x165, 0x165}, {0x167, 0x167}, {0x169, 0x169}, {0x16b, 0x16b}, - {0x16d, 0x16d}, {0x16f, 0x16f}, {0x171, 0x171}, {0x173, 0x173}, - {0x175, 0x175}, {0x177, 0x177}, {0x17a, 0x17a}, {0x17c, 0x17c}, - {0x17e, 0x180}, {0x183, 0x183}, {0x185, 0x185}, {0x188, 0x188}, - {0x18c, 0x18d}, {0x192, 0x192}, {0x195, 0x195}, {0x199, 0x19b}, - {0x19e, 0x19e}, {0x1a1, 0x1a1}, {0x1a3, 0x1a3}, {0x1a5, 0x1a5}, - {0x1a8, 0x1a8}, {0x1aa, 0x1ab}, {0x1ad, 0x1ad}, {0x1b0, 0x1b0}, - {0x1b4, 0x1b4}, {0x1b6, 0x1b6}, {0x1b9, 0x1ba}, {0x1bd, 0x1bf}, - {0x1c6, 0x1c6}, {0x1c9, 0x1c9}, {0x1cc, 0x1cc}, {0x1ce, 0x1ce}, - {0x1d0, 0x1d0}, {0x1d2, 0x1d2}, {0x1d4, 0x1d4}, {0x1d6, 0x1d6}, - {0x1d8, 0x1d8}, {0x1da, 0x1da}, {0x1dc, 0x1dd}, {0x1df, 0x1df}, - {0x1e1, 0x1e1}, {0x1e3, 0x1e3}, {0x1e5, 0x1e5}, {0x1e7, 0x1e7}, - {0x1e9, 0x1e9}, {0x1eb, 0x1eb}, {0x1ed, 0x1ed}, {0x1ef, 0x1f0}, - {0x1f3, 0x1f3}, {0x1f5, 0x1f5}, {0x1f9, 0x1f9}, {0x1fb, 0x1fb}, - {0x1fd, 0x1fd}, {0x1ff, 0x1ff}, {0x201, 0x201}, {0x203, 0x203}, - {0x205, 0x205}, {0x207, 0x207}, {0x209, 0x209}, {0x20b, 0x20b}, - {0x20d, 0x20d}, {0x20f, 0x20f}, {0x211, 0x211}, {0x213, 0x213}, - {0x215, 0x215}, {0x217, 0x217}, {0x219, 0x219}, {0x21b, 0x21b}, - {0x21d, 0x21d}, {0x21f, 0x21f}, {0x221, 0x221}, {0x223, 0x223}, - {0x225, 0x225}, {0x227, 0x227}, {0x229, 0x229}, {0x22b, 0x22b}, - {0x22d, 0x22d}, {0x22f, 0x22f}, {0x231, 0x231}, {0x233, 0x236}, - {0x250, 0x2af}, {0x390, 0x390}, {0x3ac, 0x3ce}, {0x3d0, 0x3d1}, - {0x3d5, 0x3d7}, {0x3d9, 0x3d9}, {0x3db, 0x3db}, {0x3dd, 0x3dd}, - {0x3df, 0x3df}, {0x3e1, 0x3e1}, {0x3e3, 0x3e3}, {0x3e5, 0x3e5}, - {0x3e7, 0x3e7}, {0x3e9, 0x3e9}, {0x3eb, 0x3eb}, {0x3ed, 0x3ed}, - {0x3ef, 0x3f3}, {0x3f5, 0x3f5}, {0x3f8, 0x3f8}, {0x3fb, 0x3fb}, - {0x430, 0x45f}, {0x461, 0x461}, {0x463, 0x463}, {0x465, 0x465}, - {0x467, 0x467}, {0x469, 0x469}, {0x46b, 0x46b}, {0x46d, 0x46d}, - {0x46f, 0x46f}, {0x471, 0x471}, {0x473, 0x473}, {0x475, 0x475}, - {0x477, 0x477}, {0x479, 0x479}, {0x47b, 0x47b}, {0x47d, 0x47d}, - {0x47f, 0x47f}, {0x481, 0x481}, {0x48b, 0x48b}, {0x48d, 0x48d}, - {0x48f, 0x48f}, {0x491, 0x491}, {0x493, 0x493}, {0x495, 0x495}, - {0x497, 0x497}, {0x499, 0x499}, {0x49b, 0x49b}, {0x49d, 0x49d}, - {0x49f, 0x49f}, {0x4a1, 0x4a1}, {0x4a3, 0x4a3}, {0x4a5, 0x4a5}, - {0x4a7, 0x4a7}, {0x4a9, 0x4a9}, {0x4ab, 0x4ab}, {0x4ad, 0x4ad}, - {0x4af, 0x4af}, {0x4b1, 0x4b1}, {0x4b3, 0x4b3}, {0x4b5, 0x4b5}, - {0x4b7, 0x4b7}, {0x4b9, 0x4b9}, {0x4bb, 0x4bb}, {0x4bd, 0x4bd}, - {0x4bf, 0x4bf}, {0x4c2, 0x4c2}, {0x4c4, 0x4c4}, {0x4c6, 0x4c6}, - {0x4c8, 0x4c8}, {0x4ca, 0x4ca}, {0x4cc, 0x4cc}, {0x4ce, 0x4ce}, - {0x4d1, 0x4d1}, {0x4d3, 0x4d3}, {0x4d5, 0x4d5}, {0x4d7, 0x4d7}, - {0x4d9, 0x4d9}, {0x4db, 0x4db}, {0x4dd, 0x4dd}, {0x4df, 0x4df}, - {0x4e1, 0x4e1}, {0x4e3, 0x4e3}, {0x4e5, 0x4e5}, {0x4e7, 0x4e7}, - {0x4e9, 0x4e9}, {0x4eb, 0x4eb}, {0x4ed, 0x4ed}, {0x4ef, 0x4ef}, - {0x4f1, 0x4f1}, {0x4f3, 0x4f3}, {0x4f5, 0x4f5}, {0x4f9, 0x4f9}, - {0x501, 0x501}, {0x503, 0x503}, {0x505, 0x505}, {0x507, 0x507}, - {0x509, 0x509}, {0x50b, 0x50b}, {0x50d, 0x50d}, {0x50f, 0x50f}, - {0x561, 0x587}, {0x1d00, 0x1d2b}, {0x1d62, 0x1d6b}, {0x1e01, 0x1e01}, - {0x1e03, 0x1e03}, {0x1e05, 0x1e05}, {0x1e07, 0x1e07}, {0x1e09, 0x1e09}, - {0x1e0b, 0x1e0b}, {0x1e0d, 0x1e0d}, {0x1e0f, 0x1e0f}, {0x1e11, 0x1e11}, - {0x1e13, 0x1e13}, {0x1e15, 0x1e15}, {0x1e17, 0x1e17}, {0x1e19, 0x1e19}, - {0x1e1b, 0x1e1b}, {0x1e1d, 0x1e1d}, {0x1e1f, 0x1e1f}, {0x1e21, 0x1e21}, - {0x1e23, 0x1e23}, {0x1e25, 0x1e25}, {0x1e27, 0x1e27}, {0x1e29, 0x1e29}, - {0x1e2b, 0x1e2b}, {0x1e2d, 0x1e2d}, {0x1e2f, 0x1e2f}, {0x1e31, 0x1e31}, - {0x1e33, 0x1e33}, {0x1e35, 0x1e35}, {0x1e37, 0x1e37}, {0x1e39, 0x1e39}, - {0x1e3b, 0x1e3b}, {0x1e3d, 0x1e3d}, {0x1e3f, 0x1e3f}, {0x1e41, 0x1e41}, - {0x1e43, 0x1e43}, {0x1e45, 0x1e45}, {0x1e47, 0x1e47}, {0x1e49, 0x1e49}, - {0x1e4b, 0x1e4b}, {0x1e4d, 0x1e4d}, {0x1e4f, 0x1e4f}, {0x1e51, 0x1e51}, - {0x1e53, 0x1e53}, {0x1e55, 0x1e55}, {0x1e57, 0x1e57}, {0x1e59, 0x1e59}, - {0x1e5b, 0x1e5b}, {0x1e5d, 0x1e5d}, {0x1e5f, 0x1e5f}, {0x1e61, 0x1e61}, - {0x1e63, 0x1e63}, {0x1e65, 0x1e65}, {0x1e67, 0x1e67}, {0x1e69, 0x1e69}, - {0x1e6b, 0x1e6b}, {0x1e6d, 0x1e6d}, {0x1e6f, 0x1e6f}, {0x1e71, 0x1e71}, - {0x1e73, 0x1e73}, {0x1e75, 0x1e75}, {0x1e77, 0x1e77}, {0x1e79, 0x1e79}, - {0x1e7b, 0x1e7b}, {0x1e7d, 0x1e7d}, {0x1e7f, 0x1e7f}, {0x1e81, 0x1e81}, - {0x1e83, 0x1e83}, {0x1e85, 0x1e85}, {0x1e87, 0x1e87}, {0x1e89, 0x1e89}, - {0x1e8b, 0x1e8b}, {0x1e8d, 0x1e8d}, {0x1e8f, 0x1e8f}, {0x1e91, 0x1e91}, - {0x1e93, 0x1e93}, {0x1e95, 0x1e9b}, {0x1ea1, 0x1ea1}, {0x1ea3, 0x1ea3}, - {0x1ea5, 0x1ea5}, {0x1ea7, 0x1ea7}, {0x1ea9, 0x1ea9}, {0x1eab, 0x1eab}, - {0x1ead, 0x1ead}, {0x1eaf, 0x1eaf}, {0x1eb1, 0x1eb1}, {0x1eb3, 0x1eb3}, - {0x1eb5, 0x1eb5}, {0x1eb7, 0x1eb7}, {0x1eb9, 0x1eb9}, {0x1ebb, 0x1ebb}, - {0x1ebd, 0x1ebd}, {0x1ebf, 0x1ebf}, {0x1ec1, 0x1ec1}, {0x1ec3, 0x1ec3}, - {0x1ec5, 0x1ec5}, {0x1ec7, 0x1ec7}, {0x1ec9, 0x1ec9}, {0x1ecb, 0x1ecb}, - {0x1ecd, 0x1ecd}, {0x1ecf, 0x1ecf}, {0x1ed1, 0x1ed1}, {0x1ed3, 0x1ed3}, - {0x1ed5, 0x1ed5}, {0x1ed7, 0x1ed7}, {0x1ed9, 0x1ed9}, {0x1edb, 0x1edb}, - {0x1edd, 0x1edd}, {0x1edf, 0x1edf}, {0x1ee1, 0x1ee1}, {0x1ee3, 0x1ee3}, - {0x1ee5, 0x1ee5}, {0x1ee7, 0x1ee7}, {0x1ee9, 0x1ee9}, {0x1eeb, 0x1eeb}, - {0x1eed, 0x1eed}, {0x1eef, 0x1eef}, {0x1ef1, 0x1ef1}, {0x1ef3, 0x1ef3}, - {0x1ef5, 0x1ef5}, {0x1ef7, 0x1ef7}, {0x1ef9, 0x1ef9}, {0x1f00, 0x1f07}, - {0x1f10, 0x1f15}, {0x1f20, 0x1f27}, {0x1f30, 0x1f37}, {0x1f40, 0x1f45}, - {0x1f50, 0x1f57}, {0x1f60, 0x1f67}, {0x1f70, 0x1f7d}, {0x1f80, 0x1f87}, - {0x1f90, 0x1f97}, {0x1fa0, 0x1fa7}, {0x1fb0, 0x1fb4}, {0x1fb6, 0x1fb7}, - {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fc7}, {0x1fd0, 0x1fd3}, - {0x1fd6, 0x1fd7}, {0x1fe0, 0x1fe7}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ff7}, - {0x2071, 0x2071}, {0x207f, 0x207f}, {0x210a, 0x210a}, {0x210e, 0x210f}, - {0x2113, 0x2113}, {0x212f, 0x212f}, {0x2134, 0x2134}, {0x2139, 0x2139}, - {0x213d, 0x213d}, {0x2146, 0x2149}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, +static const xmlChSRange xmlLlS[] = {{0x61, 0x7a}, {0xaa, 0xaa}, + {0xb5, 0xb5}, {0xba, 0xba}, {0xdf, 0xf6}, {0xf8, 0xff}, {0x101, 0x101}, + {0x103, 0x103}, {0x105, 0x105}, {0x107, 0x107}, {0x109, 0x109}, + {0x10b, 0x10b}, {0x10d, 0x10d}, {0x10f, 0x10f}, {0x111, 0x111}, + {0x113, 0x113}, {0x115, 0x115}, {0x117, 0x117}, {0x119, 0x119}, + {0x11b, 0x11b}, {0x11d, 0x11d}, {0x11f, 0x11f}, {0x121, 0x121}, + {0x123, 0x123}, {0x125, 0x125}, {0x127, 0x127}, {0x129, 0x129}, + {0x12b, 0x12b}, {0x12d, 0x12d}, {0x12f, 0x12f}, {0x131, 0x131}, + {0x133, 0x133}, {0x135, 0x135}, {0x137, 0x138}, {0x13a, 0x13a}, + {0x13c, 0x13c}, {0x13e, 0x13e}, {0x140, 0x140}, {0x142, 0x142}, + {0x144, 0x144}, {0x146, 0x146}, {0x148, 0x149}, {0x14b, 0x14b}, + {0x14d, 0x14d}, {0x14f, 0x14f}, {0x151, 0x151}, {0x153, 0x153}, + {0x155, 0x155}, {0x157, 0x157}, {0x159, 0x159}, {0x15b, 0x15b}, + {0x15d, 0x15d}, {0x15f, 0x15f}, {0x161, 0x161}, {0x163, 0x163}, + {0x165, 0x165}, {0x167, 0x167}, {0x169, 0x169}, {0x16b, 0x16b}, + {0x16d, 0x16d}, {0x16f, 0x16f}, {0x171, 0x171}, {0x173, 0x173}, + {0x175, 0x175}, {0x177, 0x177}, {0x17a, 0x17a}, {0x17c, 0x17c}, + {0x17e, 0x180}, {0x183, 0x183}, {0x185, 0x185}, {0x188, 0x188}, + {0x18c, 0x18d}, {0x192, 0x192}, {0x195, 0x195}, {0x199, 0x19b}, + {0x19e, 0x19e}, {0x1a1, 0x1a1}, {0x1a3, 0x1a3}, {0x1a5, 0x1a5}, + {0x1a8, 0x1a8}, {0x1aa, 0x1ab}, {0x1ad, 0x1ad}, {0x1b0, 0x1b0}, + {0x1b4, 0x1b4}, {0x1b6, 0x1b6}, {0x1b9, 0x1ba}, {0x1bd, 0x1bf}, + {0x1c6, 0x1c6}, {0x1c9, 0x1c9}, {0x1cc, 0x1cc}, {0x1ce, 0x1ce}, + {0x1d0, 0x1d0}, {0x1d2, 0x1d2}, {0x1d4, 0x1d4}, {0x1d6, 0x1d6}, + {0x1d8, 0x1d8}, {0x1da, 0x1da}, {0x1dc, 0x1dd}, {0x1df, 0x1df}, + {0x1e1, 0x1e1}, {0x1e3, 0x1e3}, {0x1e5, 0x1e5}, {0x1e7, 0x1e7}, + {0x1e9, 0x1e9}, {0x1eb, 0x1eb}, {0x1ed, 0x1ed}, {0x1ef, 0x1f0}, + {0x1f3, 0x1f3}, {0x1f5, 0x1f5}, {0x1f9, 0x1f9}, {0x1fb, 0x1fb}, + {0x1fd, 0x1fd}, {0x1ff, 0x1ff}, {0x201, 0x201}, {0x203, 0x203}, + {0x205, 0x205}, {0x207, 0x207}, {0x209, 0x209}, {0x20b, 0x20b}, + {0x20d, 0x20d}, {0x20f, 0x20f}, {0x211, 0x211}, {0x213, 0x213}, + {0x215, 0x215}, {0x217, 0x217}, {0x219, 0x219}, {0x21b, 0x21b}, + {0x21d, 0x21d}, {0x21f, 0x21f}, {0x221, 0x221}, {0x223, 0x223}, + {0x225, 0x225}, {0x227, 0x227}, {0x229, 0x229}, {0x22b, 0x22b}, + {0x22d, 0x22d}, {0x22f, 0x22f}, {0x231, 0x231}, {0x233, 0x236}, + {0x250, 0x2af}, {0x390, 0x390}, {0x3ac, 0x3ce}, {0x3d0, 0x3d1}, + {0x3d5, 0x3d7}, {0x3d9, 0x3d9}, {0x3db, 0x3db}, {0x3dd, 0x3dd}, + {0x3df, 0x3df}, {0x3e1, 0x3e1}, {0x3e3, 0x3e3}, {0x3e5, 0x3e5}, + {0x3e7, 0x3e7}, {0x3e9, 0x3e9}, {0x3eb, 0x3eb}, {0x3ed, 0x3ed}, + {0x3ef, 0x3f3}, {0x3f5, 0x3f5}, {0x3f8, 0x3f8}, {0x3fb, 0x3fb}, + {0x430, 0x45f}, {0x461, 0x461}, {0x463, 0x463}, {0x465, 0x465}, + {0x467, 0x467}, {0x469, 0x469}, {0x46b, 0x46b}, {0x46d, 0x46d}, + {0x46f, 0x46f}, {0x471, 0x471}, {0x473, 0x473}, {0x475, 0x475}, + {0x477, 0x477}, {0x479, 0x479}, {0x47b, 0x47b}, {0x47d, 0x47d}, + {0x47f, 0x47f}, {0x481, 0x481}, {0x48b, 0x48b}, {0x48d, 0x48d}, + {0x48f, 0x48f}, {0x491, 0x491}, {0x493, 0x493}, {0x495, 0x495}, + {0x497, 0x497}, {0x499, 0x499}, {0x49b, 0x49b}, {0x49d, 0x49d}, + {0x49f, 0x49f}, {0x4a1, 0x4a1}, {0x4a3, 0x4a3}, {0x4a5, 0x4a5}, + {0x4a7, 0x4a7}, {0x4a9, 0x4a9}, {0x4ab, 0x4ab}, {0x4ad, 0x4ad}, + {0x4af, 0x4af}, {0x4b1, 0x4b1}, {0x4b3, 0x4b3}, {0x4b5, 0x4b5}, + {0x4b7, 0x4b7}, {0x4b9, 0x4b9}, {0x4bb, 0x4bb}, {0x4bd, 0x4bd}, + {0x4bf, 0x4bf}, {0x4c2, 0x4c2}, {0x4c4, 0x4c4}, {0x4c6, 0x4c6}, + {0x4c8, 0x4c8}, {0x4ca, 0x4ca}, {0x4cc, 0x4cc}, {0x4ce, 0x4ce}, + {0x4d1, 0x4d1}, {0x4d3, 0x4d3}, {0x4d5, 0x4d5}, {0x4d7, 0x4d7}, + {0x4d9, 0x4d9}, {0x4db, 0x4db}, {0x4dd, 0x4dd}, {0x4df, 0x4df}, + {0x4e1, 0x4e1}, {0x4e3, 0x4e3}, {0x4e5, 0x4e5}, {0x4e7, 0x4e7}, + {0x4e9, 0x4e9}, {0x4eb, 0x4eb}, {0x4ed, 0x4ed}, {0x4ef, 0x4ef}, + {0x4f1, 0x4f1}, {0x4f3, 0x4f3}, {0x4f5, 0x4f5}, {0x4f9, 0x4f9}, + {0x501, 0x501}, {0x503, 0x503}, {0x505, 0x505}, {0x507, 0x507}, + {0x509, 0x509}, {0x50b, 0x50b}, {0x50d, 0x50d}, {0x50f, 0x50f}, + {0x561, 0x587}, {0x1d00, 0x1d2b}, {0x1d62, 0x1d6b}, {0x1e01, 0x1e01}, + {0x1e03, 0x1e03}, {0x1e05, 0x1e05}, {0x1e07, 0x1e07}, {0x1e09, 0x1e09}, + {0x1e0b, 0x1e0b}, {0x1e0d, 0x1e0d}, {0x1e0f, 0x1e0f}, {0x1e11, 0x1e11}, + {0x1e13, 0x1e13}, {0x1e15, 0x1e15}, {0x1e17, 0x1e17}, {0x1e19, 0x1e19}, + {0x1e1b, 0x1e1b}, {0x1e1d, 0x1e1d}, {0x1e1f, 0x1e1f}, {0x1e21, 0x1e21}, + {0x1e23, 0x1e23}, {0x1e25, 0x1e25}, {0x1e27, 0x1e27}, {0x1e29, 0x1e29}, + {0x1e2b, 0x1e2b}, {0x1e2d, 0x1e2d}, {0x1e2f, 0x1e2f}, {0x1e31, 0x1e31}, + {0x1e33, 0x1e33}, {0x1e35, 0x1e35}, {0x1e37, 0x1e37}, {0x1e39, 0x1e39}, + {0x1e3b, 0x1e3b}, {0x1e3d, 0x1e3d}, {0x1e3f, 0x1e3f}, {0x1e41, 0x1e41}, + {0x1e43, 0x1e43}, {0x1e45, 0x1e45}, {0x1e47, 0x1e47}, {0x1e49, 0x1e49}, + {0x1e4b, 0x1e4b}, {0x1e4d, 0x1e4d}, {0x1e4f, 0x1e4f}, {0x1e51, 0x1e51}, + {0x1e53, 0x1e53}, {0x1e55, 0x1e55}, {0x1e57, 0x1e57}, {0x1e59, 0x1e59}, + {0x1e5b, 0x1e5b}, {0x1e5d, 0x1e5d}, {0x1e5f, 0x1e5f}, {0x1e61, 0x1e61}, + {0x1e63, 0x1e63}, {0x1e65, 0x1e65}, {0x1e67, 0x1e67}, {0x1e69, 0x1e69}, + {0x1e6b, 0x1e6b}, {0x1e6d, 0x1e6d}, {0x1e6f, 0x1e6f}, {0x1e71, 0x1e71}, + {0x1e73, 0x1e73}, {0x1e75, 0x1e75}, {0x1e77, 0x1e77}, {0x1e79, 0x1e79}, + {0x1e7b, 0x1e7b}, {0x1e7d, 0x1e7d}, {0x1e7f, 0x1e7f}, {0x1e81, 0x1e81}, + {0x1e83, 0x1e83}, {0x1e85, 0x1e85}, {0x1e87, 0x1e87}, {0x1e89, 0x1e89}, + {0x1e8b, 0x1e8b}, {0x1e8d, 0x1e8d}, {0x1e8f, 0x1e8f}, {0x1e91, 0x1e91}, + {0x1e93, 0x1e93}, {0x1e95, 0x1e9b}, {0x1ea1, 0x1ea1}, {0x1ea3, 0x1ea3}, + {0x1ea5, 0x1ea5}, {0x1ea7, 0x1ea7}, {0x1ea9, 0x1ea9}, {0x1eab, 0x1eab}, + {0x1ead, 0x1ead}, {0x1eaf, 0x1eaf}, {0x1eb1, 0x1eb1}, {0x1eb3, 0x1eb3}, + {0x1eb5, 0x1eb5}, {0x1eb7, 0x1eb7}, {0x1eb9, 0x1eb9}, {0x1ebb, 0x1ebb}, + {0x1ebd, 0x1ebd}, {0x1ebf, 0x1ebf}, {0x1ec1, 0x1ec1}, {0x1ec3, 0x1ec3}, + {0x1ec5, 0x1ec5}, {0x1ec7, 0x1ec7}, {0x1ec9, 0x1ec9}, {0x1ecb, 0x1ecb}, + {0x1ecd, 0x1ecd}, {0x1ecf, 0x1ecf}, {0x1ed1, 0x1ed1}, {0x1ed3, 0x1ed3}, + {0x1ed5, 0x1ed5}, {0x1ed7, 0x1ed7}, {0x1ed9, 0x1ed9}, {0x1edb, 0x1edb}, + {0x1edd, 0x1edd}, {0x1edf, 0x1edf}, {0x1ee1, 0x1ee1}, {0x1ee3, 0x1ee3}, + {0x1ee5, 0x1ee5}, {0x1ee7, 0x1ee7}, {0x1ee9, 0x1ee9}, {0x1eeb, 0x1eeb}, + {0x1eed, 0x1eed}, {0x1eef, 0x1eef}, {0x1ef1, 0x1ef1}, {0x1ef3, 0x1ef3}, + {0x1ef5, 0x1ef5}, {0x1ef7, 0x1ef7}, {0x1ef9, 0x1ef9}, {0x1f00, 0x1f07}, + {0x1f10, 0x1f15}, {0x1f20, 0x1f27}, {0x1f30, 0x1f37}, {0x1f40, 0x1f45}, + {0x1f50, 0x1f57}, {0x1f60, 0x1f67}, {0x1f70, 0x1f7d}, {0x1f80, 0x1f87}, + {0x1f90, 0x1f97}, {0x1fa0, 0x1fa7}, {0x1fb0, 0x1fb4}, {0x1fb6, 0x1fb7}, + {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fc7}, {0x1fd0, 0x1fd3}, + {0x1fd6, 0x1fd7}, {0x1fe0, 0x1fe7}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ff7}, + {0x2071, 0x2071}, {0x207f, 0x207f}, {0x210a, 0x210a}, {0x210e, 0x210f}, + {0x2113, 0x2113}, {0x212f, 0x212f}, {0x2134, 0x2134}, {0x2139, 0x2139}, + {0x213d, 0x213d}, {0x2146, 0x2149}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, {0xff41, 0xff5a} }; -static const xmlChLRange xmlLlL[] = {{0x10428, 0x1044f}, {0x1d41a, 0x1d433}, - {0x1d44e, 0x1d454}, {0x1d456, 0x1d467}, {0x1d482, 0x1d49b}, - {0x1d4b6, 0x1d4b9}, {0x1d4bb, 0x1d4bb}, {0x1d4bd, 0x1d4c3}, - {0x1d4c5, 0x1d4cf}, {0x1d4ea, 0x1d503}, {0x1d51e, 0x1d537}, - {0x1d552, 0x1d56b}, {0x1d586, 0x1d59f}, {0x1d5ba, 0x1d5d3}, - {0x1d5ee, 0x1d607}, {0x1d622, 0x1d63b}, {0x1d656, 0x1d66f}, - {0x1d68a, 0x1d6a3}, {0x1d6c2, 0x1d6da}, {0x1d6dc, 0x1d6e1}, - {0x1d6fc, 0x1d714}, {0x1d716, 0x1d71b}, {0x1d736, 0x1d74e}, - {0x1d750, 0x1d755}, {0x1d770, 0x1d788}, {0x1d78a, 0x1d78f}, +static const xmlChLRange xmlLlL[] = {{0x10428, 0x1044f}, {0x1d41a, 0x1d433}, + {0x1d44e, 0x1d454}, {0x1d456, 0x1d467}, {0x1d482, 0x1d49b}, + {0x1d4b6, 0x1d4b9}, {0x1d4bb, 0x1d4bb}, {0x1d4bd, 0x1d4c3}, + {0x1d4c5, 0x1d4cf}, {0x1d4ea, 0x1d503}, {0x1d51e, 0x1d537}, + {0x1d552, 0x1d56b}, {0x1d586, 0x1d59f}, {0x1d5ba, 0x1d5d3}, + {0x1d5ee, 0x1d607}, {0x1d622, 0x1d63b}, {0x1d656, 0x1d66f}, + {0x1d68a, 0x1d6a3}, {0x1d6c2, 0x1d6da}, {0x1d6dc, 0x1d6e1}, + {0x1d6fc, 0x1d714}, {0x1d716, 0x1d71b}, {0x1d736, 0x1d74e}, + {0x1d750, 0x1d755}, {0x1d770, 0x1d788}, {0x1d78a, 0x1d78f}, {0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7c9} }; static xmlChRangeGroup xmlLlG = {396,28,xmlLlS,xmlLlL}; -static const xmlChSRange xmlLmS[] = {{0x2b0, 0x2c1}, {0x2c6, 0x2d1}, - {0x2e0, 0x2e4}, {0x2ee, 0x2ee}, {0x37a, 0x37a}, {0x559, 0x559}, - {0x640, 0x640}, {0x6e5, 0x6e6}, {0xe46, 0xe46}, {0xec6, 0xec6}, - {0x17d7, 0x17d7}, {0x1843, 0x1843}, {0x1d2c, 0x1d61}, {0x3005, 0x3005}, - {0x3031, 0x3035}, {0x303b, 0x303b}, {0x309d, 0x309e}, {0x30fc, 0x30fe}, +static const xmlChSRange xmlLmS[] = {{0x2b0, 0x2c1}, {0x2c6, 0x2d1}, + {0x2e0, 0x2e4}, {0x2ee, 0x2ee}, {0x37a, 0x37a}, {0x559, 0x559}, + {0x640, 0x640}, {0x6e5, 0x6e6}, {0xe46, 0xe46}, {0xec6, 0xec6}, + {0x17d7, 0x17d7}, {0x1843, 0x1843}, {0x1d2c, 0x1d61}, {0x3005, 0x3005}, + {0x3031, 0x3035}, {0x303b, 0x303b}, {0x309d, 0x309e}, {0x30fc, 0x30fe}, {0xff70, 0xff70}, {0xff9e, 0xff9f} }; static xmlChRangeGroup xmlLmG = {20,0,xmlLmS,NULL}; -static const xmlChSRange xmlLoS[] = {{0x1bb, 0x1bb}, {0x1c0, 0x1c3}, - {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a}, {0x641, 0x64a}, - {0x66e, 0x66f}, {0x671, 0x6d3}, {0x6d5, 0x6d5}, {0x6ee, 0x6ef}, - {0x6fa, 0x6fc}, {0x6ff, 0x6ff}, {0x710, 0x710}, {0x712, 0x72f}, - {0x74d, 0x74f}, {0x780, 0x7a5}, {0x7b1, 0x7b1}, {0x904, 0x939}, - {0x93d, 0x93d}, {0x950, 0x950}, {0x958, 0x961}, {0x985, 0x98c}, - {0x98f, 0x990}, {0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, - {0x9b6, 0x9b9}, {0x9bd, 0x9bd}, {0x9dc, 0x9dd}, {0x9df, 0x9e1}, - {0x9f0, 0x9f1}, {0xa05, 0xa0a}, {0xa0f, 0xa10}, {0xa13, 0xa28}, - {0xa2a, 0xa30}, {0xa32, 0xa33}, {0xa35, 0xa36}, {0xa38, 0xa39}, - {0xa59, 0xa5c}, {0xa5e, 0xa5e}, {0xa72, 0xa74}, {0xa85, 0xa8d}, - {0xa8f, 0xa91}, {0xa93, 0xaa8}, {0xaaa, 0xab0}, {0xab2, 0xab3}, - {0xab5, 0xab9}, {0xabd, 0xabd}, {0xad0, 0xad0}, {0xae0, 0xae1}, - {0xb05, 0xb0c}, {0xb0f, 0xb10}, {0xb13, 0xb28}, {0xb2a, 0xb30}, - {0xb32, 0xb33}, {0xb35, 0xb39}, {0xb3d, 0xb3d}, {0xb5c, 0xb5d}, - {0xb5f, 0xb61}, {0xb71, 0xb71}, {0xb83, 0xb83}, {0xb85, 0xb8a}, - {0xb8e, 0xb90}, {0xb92, 0xb95}, {0xb99, 0xb9a}, {0xb9c, 0xb9c}, - {0xb9e, 0xb9f}, {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb5}, - {0xbb7, 0xbb9}, {0xc05, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28}, - {0xc2a, 0xc33}, {0xc35, 0xc39}, {0xc60, 0xc61}, {0xc85, 0xc8c}, - {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, - {0xcbd, 0xcbd}, {0xcde, 0xcde}, {0xce0, 0xce1}, {0xd05, 0xd0c}, - {0xd0e, 0xd10}, {0xd12, 0xd28}, {0xd2a, 0xd39}, {0xd60, 0xd61}, - {0xd85, 0xd96}, {0xd9a, 0xdb1}, {0xdb3, 0xdbb}, {0xdbd, 0xdbd}, - {0xdc0, 0xdc6}, {0xe01, 0xe30}, {0xe32, 0xe33}, {0xe40, 0xe45}, - {0xe81, 0xe82}, {0xe84, 0xe84}, {0xe87, 0xe88}, {0xe8a, 0xe8a}, - {0xe8d, 0xe8d}, {0xe94, 0xe97}, {0xe99, 0xe9f}, {0xea1, 0xea3}, - {0xea5, 0xea5}, {0xea7, 0xea7}, {0xeaa, 0xeab}, {0xead, 0xeb0}, - {0xeb2, 0xeb3}, {0xebd, 0xebd}, {0xec0, 0xec4}, {0xedc, 0xedd}, - {0xf00, 0xf00}, {0xf40, 0xf47}, {0xf49, 0xf6a}, {0xf88, 0xf8b}, - {0x1000, 0x1021}, {0x1023, 0x1027}, {0x1029, 0x102a}, {0x1050, 0x1055}, - {0x10d0, 0x10f8}, {0x1100, 0x1159}, {0x115f, 0x11a2}, {0x11a8, 0x11f9}, - {0x1200, 0x1206}, {0x1208, 0x1246}, {0x1248, 0x1248}, {0x124a, 0x124d}, - {0x1250, 0x1256}, {0x1258, 0x1258}, {0x125a, 0x125d}, {0x1260, 0x1286}, - {0x1288, 0x1288}, {0x128a, 0x128d}, {0x1290, 0x12ae}, {0x12b0, 0x12b0}, - {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c0, 0x12c0}, {0x12c2, 0x12c5}, - {0x12c8, 0x12ce}, {0x12d0, 0x12d6}, {0x12d8, 0x12ee}, {0x12f0, 0x130e}, - {0x1310, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x131e}, {0x1320, 0x1346}, - {0x1348, 0x135a}, {0x13a0, 0x13f4}, {0x1401, 0x166c}, {0x166f, 0x1676}, - {0x1681, 0x169a}, {0x16a0, 0x16ea}, {0x1700, 0x170c}, {0x170e, 0x1711}, - {0x1720, 0x1731}, {0x1740, 0x1751}, {0x1760, 0x176c}, {0x176e, 0x1770}, - {0x1780, 0x17b3}, {0x17dc, 0x17dc}, {0x1820, 0x1842}, {0x1844, 0x1877}, - {0x1880, 0x18a8}, {0x1900, 0x191c}, {0x1950, 0x196d}, {0x1970, 0x1974}, - {0x2135, 0x2138}, {0x3006, 0x3006}, {0x303c, 0x303c}, {0x3041, 0x3096}, - {0x309f, 0x309f}, {0x30a1, 0x30fa}, {0x30ff, 0x30ff}, {0x3105, 0x312c}, - {0x3131, 0x318e}, {0x31a0, 0x31b7}, {0x31f0, 0x31ff}, {0x3400, 0x3400}, - {0x4db5, 0x4db5}, {0x4e00, 0x4e00}, {0x9fa5, 0x9fa5}, {0xa000, 0xa48c}, - {0xac00, 0xac00}, {0xd7a3, 0xd7a3}, {0xf900, 0xfa2d}, {0xfa30, 0xfa6a}, - {0xfb1d, 0xfb1d}, {0xfb1f, 0xfb28}, {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c}, - {0xfb3e, 0xfb3e}, {0xfb40, 0xfb41}, {0xfb43, 0xfb44}, {0xfb46, 0xfbb1}, - {0xfbd3, 0xfd3d}, {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb}, - {0xfe70, 0xfe74}, {0xfe76, 0xfefc}, {0xff66, 0xff6f}, {0xff71, 0xff9d}, - {0xffa0, 0xffbe}, {0xffc2, 0xffc7}, {0xffca, 0xffcf}, {0xffd2, 0xffd7}, +static const xmlChSRange xmlLoS[] = {{0x1bb, 0x1bb}, {0x1c0, 0x1c3}, + {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a}, {0x641, 0x64a}, + {0x66e, 0x66f}, {0x671, 0x6d3}, {0x6d5, 0x6d5}, {0x6ee, 0x6ef}, + {0x6fa, 0x6fc}, {0x6ff, 0x6ff}, {0x710, 0x710}, {0x712, 0x72f}, + {0x74d, 0x74f}, {0x780, 0x7a5}, {0x7b1, 0x7b1}, {0x904, 0x939}, + {0x93d, 0x93d}, {0x950, 0x950}, {0x958, 0x961}, {0x985, 0x98c}, + {0x98f, 0x990}, {0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, + {0x9b6, 0x9b9}, {0x9bd, 0x9bd}, {0x9dc, 0x9dd}, {0x9df, 0x9e1}, + {0x9f0, 0x9f1}, {0xa05, 0xa0a}, {0xa0f, 0xa10}, {0xa13, 0xa28}, + {0xa2a, 0xa30}, {0xa32, 0xa33}, {0xa35, 0xa36}, {0xa38, 0xa39}, + {0xa59, 0xa5c}, {0xa5e, 0xa5e}, {0xa72, 0xa74}, {0xa85, 0xa8d}, + {0xa8f, 0xa91}, {0xa93, 0xaa8}, {0xaaa, 0xab0}, {0xab2, 0xab3}, + {0xab5, 0xab9}, {0xabd, 0xabd}, {0xad0, 0xad0}, {0xae0, 0xae1}, + {0xb05, 0xb0c}, {0xb0f, 0xb10}, {0xb13, 0xb28}, {0xb2a, 0xb30}, + {0xb32, 0xb33}, {0xb35, 0xb39}, {0xb3d, 0xb3d}, {0xb5c, 0xb5d}, + {0xb5f, 0xb61}, {0xb71, 0xb71}, {0xb83, 0xb83}, {0xb85, 0xb8a}, + {0xb8e, 0xb90}, {0xb92, 0xb95}, {0xb99, 0xb9a}, {0xb9c, 0xb9c}, + {0xb9e, 0xb9f}, {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb5}, + {0xbb7, 0xbb9}, {0xc05, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28}, + {0xc2a, 0xc33}, {0xc35, 0xc39}, {0xc60, 0xc61}, {0xc85, 0xc8c}, + {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, + {0xcbd, 0xcbd}, {0xcde, 0xcde}, {0xce0, 0xce1}, {0xd05, 0xd0c}, + {0xd0e, 0xd10}, {0xd12, 0xd28}, {0xd2a, 0xd39}, {0xd60, 0xd61}, + {0xd85, 0xd96}, {0xd9a, 0xdb1}, {0xdb3, 0xdbb}, {0xdbd, 0xdbd}, + {0xdc0, 0xdc6}, {0xe01, 0xe30}, {0xe32, 0xe33}, {0xe40, 0xe45}, + {0xe81, 0xe82}, {0xe84, 0xe84}, {0xe87, 0xe88}, {0xe8a, 0xe8a}, + {0xe8d, 0xe8d}, {0xe94, 0xe97}, {0xe99, 0xe9f}, {0xea1, 0xea3}, + {0xea5, 0xea5}, {0xea7, 0xea7}, {0xeaa, 0xeab}, {0xead, 0xeb0}, + {0xeb2, 0xeb3}, {0xebd, 0xebd}, {0xec0, 0xec4}, {0xedc, 0xedd}, + {0xf00, 0xf00}, {0xf40, 0xf47}, {0xf49, 0xf6a}, {0xf88, 0xf8b}, + {0x1000, 0x1021}, {0x1023, 0x1027}, {0x1029, 0x102a}, {0x1050, 0x1055}, + {0x10d0, 0x10f8}, {0x1100, 0x1159}, {0x115f, 0x11a2}, {0x11a8, 0x11f9}, + {0x1200, 0x1206}, {0x1208, 0x1246}, {0x1248, 0x1248}, {0x124a, 0x124d}, + {0x1250, 0x1256}, {0x1258, 0x1258}, {0x125a, 0x125d}, {0x1260, 0x1286}, + {0x1288, 0x1288}, {0x128a, 0x128d}, {0x1290, 0x12ae}, {0x12b0, 0x12b0}, + {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c0, 0x12c0}, {0x12c2, 0x12c5}, + {0x12c8, 0x12ce}, {0x12d0, 0x12d6}, {0x12d8, 0x12ee}, {0x12f0, 0x130e}, + {0x1310, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x131e}, {0x1320, 0x1346}, + {0x1348, 0x135a}, {0x13a0, 0x13f4}, {0x1401, 0x166c}, {0x166f, 0x1676}, + {0x1681, 0x169a}, {0x16a0, 0x16ea}, {0x1700, 0x170c}, {0x170e, 0x1711}, + {0x1720, 0x1731}, {0x1740, 0x1751}, {0x1760, 0x176c}, {0x176e, 0x1770}, + {0x1780, 0x17b3}, {0x17dc, 0x17dc}, {0x1820, 0x1842}, {0x1844, 0x1877}, + {0x1880, 0x18a8}, {0x1900, 0x191c}, {0x1950, 0x196d}, {0x1970, 0x1974}, + {0x2135, 0x2138}, {0x3006, 0x3006}, {0x303c, 0x303c}, {0x3041, 0x3096}, + {0x309f, 0x309f}, {0x30a1, 0x30fa}, {0x30ff, 0x30ff}, {0x3105, 0x312c}, + {0x3131, 0x318e}, {0x31a0, 0x31b7}, {0x31f0, 0x31ff}, {0x3400, 0x3400}, + {0x4db5, 0x4db5}, {0x4e00, 0x4e00}, {0x9fa5, 0x9fa5}, {0xa000, 0xa48c}, + {0xac00, 0xac00}, {0xd7a3, 0xd7a3}, {0xf900, 0xfa2d}, {0xfa30, 0xfa6a}, + {0xfb1d, 0xfb1d}, {0xfb1f, 0xfb28}, {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c}, + {0xfb3e, 0xfb3e}, {0xfb40, 0xfb41}, {0xfb43, 0xfb44}, {0xfb46, 0xfbb1}, + {0xfbd3, 0xfd3d}, {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb}, + {0xfe70, 0xfe74}, {0xfe76, 0xfefc}, {0xff66, 0xff6f}, {0xff71, 0xff9d}, + {0xffa0, 0xffbe}, {0xffc2, 0xffc7}, {0xffca, 0xffcf}, {0xffd2, 0xffd7}, {0xffda, 0xffdc} }; -static const xmlChLRange xmlLoL[] = {{0x10000, 0x1000b}, {0x1000d, 0x10026}, - {0x10028, 0x1003a}, {0x1003c, 0x1003d}, {0x1003f, 0x1004d}, - {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10300, 0x1031e}, - {0x10330, 0x10349}, {0x10380, 0x1039d}, {0x10450, 0x1049d}, - {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080a, 0x10835}, - {0x10837, 0x10838}, {0x1083c, 0x1083c}, {0x1083f, 0x1083f}, +static const xmlChLRange xmlLoL[] = {{0x10000, 0x1000b}, {0x1000d, 0x10026}, + {0x10028, 0x1003a}, {0x1003c, 0x1003d}, {0x1003f, 0x1004d}, + {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10300, 0x1031e}, + {0x10330, 0x10349}, {0x10380, 0x1039d}, {0x10450, 0x1049d}, + {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080a, 0x10835}, + {0x10837, 0x10838}, {0x1083c, 0x1083c}, {0x1083f, 0x1083f}, {0x20000, 0x20000}, {0x2a6d6, 0x2a6d6}, {0x2f800, 0x2fa1d} }; static xmlChRangeGroup xmlLoG = {211,20,xmlLoS,xmlLoL}; -static const xmlChSRange xmlLtS[] = {{0x1c5, 0x1c5}, {0x1c8, 0x1c8}, - {0x1cb, 0x1cb}, {0x1f2, 0x1f2}, {0x1f88, 0x1f8f}, {0x1f98, 0x1f9f}, +static const xmlChSRange xmlLtS[] = {{0x1c5, 0x1c5}, {0x1c8, 0x1c8}, + {0x1cb, 0x1cb}, {0x1f2, 0x1f2}, {0x1f88, 0x1f8f}, {0x1f98, 0x1f9f}, {0x1fa8, 0x1faf}, {0x1fbc, 0x1fbc}, {0x1fcc, 0x1fcc}, {0x1ffc, 0x1ffc} }; static xmlChRangeGroup xmlLtG = {10,0,xmlLtS,NULL}; -static const xmlChSRange xmlLuS[] = {{0x41, 0x5a}, {0xc0, 0xd6}, - {0xd8, 0xde}, {0x100, 0x100}, {0x102, 0x102}, {0x104, 0x104}, - {0x106, 0x106}, {0x108, 0x108}, {0x10a, 0x10a}, {0x10c, 0x10c}, - {0x10e, 0x10e}, {0x110, 0x110}, {0x112, 0x112}, {0x114, 0x114}, - {0x116, 0x116}, {0x118, 0x118}, {0x11a, 0x11a}, {0x11c, 0x11c}, - {0x11e, 0x11e}, {0x120, 0x120}, {0x122, 0x122}, {0x124, 0x124}, - {0x126, 0x126}, {0x128, 0x128}, {0x12a, 0x12a}, {0x12c, 0x12c}, - {0x12e, 0x12e}, {0x130, 0x130}, {0x132, 0x132}, {0x134, 0x134}, - {0x136, 0x136}, {0x139, 0x139}, {0x13b, 0x13b}, {0x13d, 0x13d}, - {0x13f, 0x13f}, {0x141, 0x141}, {0x143, 0x143}, {0x145, 0x145}, - {0x147, 0x147}, {0x14a, 0x14a}, {0x14c, 0x14c}, {0x14e, 0x14e}, - {0x150, 0x150}, {0x152, 0x152}, {0x154, 0x154}, {0x156, 0x156}, - {0x158, 0x158}, {0x15a, 0x15a}, {0x15c, 0x15c}, {0x15e, 0x15e}, - {0x160, 0x160}, {0x162, 0x162}, {0x164, 0x164}, {0x166, 0x166}, - {0x168, 0x168}, {0x16a, 0x16a}, {0x16c, 0x16c}, {0x16e, 0x16e}, - {0x170, 0x170}, {0x172, 0x172}, {0x174, 0x174}, {0x176, 0x176}, - {0x178, 0x179}, {0x17b, 0x17b}, {0x17d, 0x17d}, {0x181, 0x182}, - {0x184, 0x184}, {0x186, 0x187}, {0x189, 0x18b}, {0x18e, 0x191}, - {0x193, 0x194}, {0x196, 0x198}, {0x19c, 0x19d}, {0x19f, 0x1a0}, - {0x1a2, 0x1a2}, {0x1a4, 0x1a4}, {0x1a6, 0x1a7}, {0x1a9, 0x1a9}, - {0x1ac, 0x1ac}, {0x1ae, 0x1af}, {0x1b1, 0x1b3}, {0x1b5, 0x1b5}, - {0x1b7, 0x1b8}, {0x1bc, 0x1bc}, {0x1c4, 0x1c4}, {0x1c7, 0x1c7}, - {0x1ca, 0x1ca}, {0x1cd, 0x1cd}, {0x1cf, 0x1cf}, {0x1d1, 0x1d1}, - {0x1d3, 0x1d3}, {0x1d5, 0x1d5}, {0x1d7, 0x1d7}, {0x1d9, 0x1d9}, - {0x1db, 0x1db}, {0x1de, 0x1de}, {0x1e0, 0x1e0}, {0x1e2, 0x1e2}, - {0x1e4, 0x1e4}, {0x1e6, 0x1e6}, {0x1e8, 0x1e8}, {0x1ea, 0x1ea}, - {0x1ec, 0x1ec}, {0x1ee, 0x1ee}, {0x1f1, 0x1f1}, {0x1f4, 0x1f4}, - {0x1f6, 0x1f8}, {0x1fa, 0x1fa}, {0x1fc, 0x1fc}, {0x1fe, 0x1fe}, - {0x200, 0x200}, {0x202, 0x202}, {0x204, 0x204}, {0x206, 0x206}, - {0x208, 0x208}, {0x20a, 0x20a}, {0x20c, 0x20c}, {0x20e, 0x20e}, - {0x210, 0x210}, {0x212, 0x212}, {0x214, 0x214}, {0x216, 0x216}, - {0x218, 0x218}, {0x21a, 0x21a}, {0x21c, 0x21c}, {0x21e, 0x21e}, - {0x220, 0x220}, {0x222, 0x222}, {0x224, 0x224}, {0x226, 0x226}, - {0x228, 0x228}, {0x22a, 0x22a}, {0x22c, 0x22c}, {0x22e, 0x22e}, - {0x230, 0x230}, {0x232, 0x232}, {0x386, 0x386}, {0x388, 0x38a}, - {0x38c, 0x38c}, {0x38e, 0x38f}, {0x391, 0x3a1}, {0x3a3, 0x3ab}, - {0x3d2, 0x3d4}, {0x3d8, 0x3d8}, {0x3da, 0x3da}, {0x3dc, 0x3dc}, - {0x3de, 0x3de}, {0x3e0, 0x3e0}, {0x3e2, 0x3e2}, {0x3e4, 0x3e4}, - {0x3e6, 0x3e6}, {0x3e8, 0x3e8}, {0x3ea, 0x3ea}, {0x3ec, 0x3ec}, - {0x3ee, 0x3ee}, {0x3f4, 0x3f4}, {0x3f7, 0x3f7}, {0x3f9, 0x3fa}, - {0x400, 0x42f}, {0x460, 0x460}, {0x462, 0x462}, {0x464, 0x464}, - {0x466, 0x466}, {0x468, 0x468}, {0x46a, 0x46a}, {0x46c, 0x46c}, - {0x46e, 0x46e}, {0x470, 0x470}, {0x472, 0x472}, {0x474, 0x474}, - {0x476, 0x476}, {0x478, 0x478}, {0x47a, 0x47a}, {0x47c, 0x47c}, - {0x47e, 0x47e}, {0x480, 0x480}, {0x48a, 0x48a}, {0x48c, 0x48c}, - {0x48e, 0x48e}, {0x490, 0x490}, {0x492, 0x492}, {0x494, 0x494}, - {0x496, 0x496}, {0x498, 0x498}, {0x49a, 0x49a}, {0x49c, 0x49c}, - {0x49e, 0x49e}, {0x4a0, 0x4a0}, {0x4a2, 0x4a2}, {0x4a4, 0x4a4}, - {0x4a6, 0x4a6}, {0x4a8, 0x4a8}, {0x4aa, 0x4aa}, {0x4ac, 0x4ac}, - {0x4ae, 0x4ae}, {0x4b0, 0x4b0}, {0x4b2, 0x4b2}, {0x4b4, 0x4b4}, - {0x4b6, 0x4b6}, {0x4b8, 0x4b8}, {0x4ba, 0x4ba}, {0x4bc, 0x4bc}, - {0x4be, 0x4be}, {0x4c0, 0x4c1}, {0x4c3, 0x4c3}, {0x4c5, 0x4c5}, - {0x4c7, 0x4c7}, {0x4c9, 0x4c9}, {0x4cb, 0x4cb}, {0x4cd, 0x4cd}, - {0x4d0, 0x4d0}, {0x4d2, 0x4d2}, {0x4d4, 0x4d4}, {0x4d6, 0x4d6}, - {0x4d8, 0x4d8}, {0x4da, 0x4da}, {0x4dc, 0x4dc}, {0x4de, 0x4de}, - {0x4e0, 0x4e0}, {0x4e2, 0x4e2}, {0x4e4, 0x4e4}, {0x4e6, 0x4e6}, - {0x4e8, 0x4e8}, {0x4ea, 0x4ea}, {0x4ec, 0x4ec}, {0x4ee, 0x4ee}, - {0x4f0, 0x4f0}, {0x4f2, 0x4f2}, {0x4f4, 0x4f4}, {0x4f8, 0x4f8}, - {0x500, 0x500}, {0x502, 0x502}, {0x504, 0x504}, {0x506, 0x506}, - {0x508, 0x508}, {0x50a, 0x50a}, {0x50c, 0x50c}, {0x50e, 0x50e}, - {0x531, 0x556}, {0x10a0, 0x10c5}, {0x1e00, 0x1e00}, {0x1e02, 0x1e02}, - {0x1e04, 0x1e04}, {0x1e06, 0x1e06}, {0x1e08, 0x1e08}, {0x1e0a, 0x1e0a}, - {0x1e0c, 0x1e0c}, {0x1e0e, 0x1e0e}, {0x1e10, 0x1e10}, {0x1e12, 0x1e12}, - {0x1e14, 0x1e14}, {0x1e16, 0x1e16}, {0x1e18, 0x1e18}, {0x1e1a, 0x1e1a}, - {0x1e1c, 0x1e1c}, {0x1e1e, 0x1e1e}, {0x1e20, 0x1e20}, {0x1e22, 0x1e22}, - {0x1e24, 0x1e24}, {0x1e26, 0x1e26}, {0x1e28, 0x1e28}, {0x1e2a, 0x1e2a}, - {0x1e2c, 0x1e2c}, {0x1e2e, 0x1e2e}, {0x1e30, 0x1e30}, {0x1e32, 0x1e32}, - {0x1e34, 0x1e34}, {0x1e36, 0x1e36}, {0x1e38, 0x1e38}, {0x1e3a, 0x1e3a}, - {0x1e3c, 0x1e3c}, {0x1e3e, 0x1e3e}, {0x1e40, 0x1e40}, {0x1e42, 0x1e42}, - {0x1e44, 0x1e44}, {0x1e46, 0x1e46}, {0x1e48, 0x1e48}, {0x1e4a, 0x1e4a}, - {0x1e4c, 0x1e4c}, {0x1e4e, 0x1e4e}, {0x1e50, 0x1e50}, {0x1e52, 0x1e52}, - {0x1e54, 0x1e54}, {0x1e56, 0x1e56}, {0x1e58, 0x1e58}, {0x1e5a, 0x1e5a}, - {0x1e5c, 0x1e5c}, {0x1e5e, 0x1e5e}, {0x1e60, 0x1e60}, {0x1e62, 0x1e62}, - {0x1e64, 0x1e64}, {0x1e66, 0x1e66}, {0x1e68, 0x1e68}, {0x1e6a, 0x1e6a}, - {0x1e6c, 0x1e6c}, {0x1e6e, 0x1e6e}, {0x1e70, 0x1e70}, {0x1e72, 0x1e72}, - {0x1e74, 0x1e74}, {0x1e76, 0x1e76}, {0x1e78, 0x1e78}, {0x1e7a, 0x1e7a}, - {0x1e7c, 0x1e7c}, {0x1e7e, 0x1e7e}, {0x1e80, 0x1e80}, {0x1e82, 0x1e82}, - {0x1e84, 0x1e84}, {0x1e86, 0x1e86}, {0x1e88, 0x1e88}, {0x1e8a, 0x1e8a}, - {0x1e8c, 0x1e8c}, {0x1e8e, 0x1e8e}, {0x1e90, 0x1e90}, {0x1e92, 0x1e92}, - {0x1e94, 0x1e94}, {0x1ea0, 0x1ea0}, {0x1ea2, 0x1ea2}, {0x1ea4, 0x1ea4}, - {0x1ea6, 0x1ea6}, {0x1ea8, 0x1ea8}, {0x1eaa, 0x1eaa}, {0x1eac, 0x1eac}, - {0x1eae, 0x1eae}, {0x1eb0, 0x1eb0}, {0x1eb2, 0x1eb2}, {0x1eb4, 0x1eb4}, - {0x1eb6, 0x1eb6}, {0x1eb8, 0x1eb8}, {0x1eba, 0x1eba}, {0x1ebc, 0x1ebc}, - {0x1ebe, 0x1ebe}, {0x1ec0, 0x1ec0}, {0x1ec2, 0x1ec2}, {0x1ec4, 0x1ec4}, - {0x1ec6, 0x1ec6}, {0x1ec8, 0x1ec8}, {0x1eca, 0x1eca}, {0x1ecc, 0x1ecc}, - {0x1ece, 0x1ece}, {0x1ed0, 0x1ed0}, {0x1ed2, 0x1ed2}, {0x1ed4, 0x1ed4}, - {0x1ed6, 0x1ed6}, {0x1ed8, 0x1ed8}, {0x1eda, 0x1eda}, {0x1edc, 0x1edc}, - {0x1ede, 0x1ede}, {0x1ee0, 0x1ee0}, {0x1ee2, 0x1ee2}, {0x1ee4, 0x1ee4}, - {0x1ee6, 0x1ee6}, {0x1ee8, 0x1ee8}, {0x1eea, 0x1eea}, {0x1eec, 0x1eec}, - {0x1eee, 0x1eee}, {0x1ef0, 0x1ef0}, {0x1ef2, 0x1ef2}, {0x1ef4, 0x1ef4}, - {0x1ef6, 0x1ef6}, {0x1ef8, 0x1ef8}, {0x1f08, 0x1f0f}, {0x1f18, 0x1f1d}, - {0x1f28, 0x1f2f}, {0x1f38, 0x1f3f}, {0x1f48, 0x1f4d}, {0x1f59, 0x1f59}, - {0x1f5b, 0x1f5b}, {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f5f}, {0x1f68, 0x1f6f}, - {0x1fb8, 0x1fbb}, {0x1fc8, 0x1fcb}, {0x1fd8, 0x1fdb}, {0x1fe8, 0x1fec}, - {0x1ff8, 0x1ffb}, {0x2102, 0x2102}, {0x2107, 0x2107}, {0x210b, 0x210d}, - {0x2110, 0x2112}, {0x2115, 0x2115}, {0x2119, 0x211d}, {0x2124, 0x2124}, - {0x2126, 0x2126}, {0x2128, 0x2128}, {0x212a, 0x212d}, {0x2130, 0x2131}, +static const xmlChSRange xmlLuS[] = {{0x41, 0x5a}, {0xc0, 0xd6}, + {0xd8, 0xde}, {0x100, 0x100}, {0x102, 0x102}, {0x104, 0x104}, + {0x106, 0x106}, {0x108, 0x108}, {0x10a, 0x10a}, {0x10c, 0x10c}, + {0x10e, 0x10e}, {0x110, 0x110}, {0x112, 0x112}, {0x114, 0x114}, + {0x116, 0x116}, {0x118, 0x118}, {0x11a, 0x11a}, {0x11c, 0x11c}, + {0x11e, 0x11e}, {0x120, 0x120}, {0x122, 0x122}, {0x124, 0x124}, + {0x126, 0x126}, {0x128, 0x128}, {0x12a, 0x12a}, {0x12c, 0x12c}, + {0x12e, 0x12e}, {0x130, 0x130}, {0x132, 0x132}, {0x134, 0x134}, + {0x136, 0x136}, {0x139, 0x139}, {0x13b, 0x13b}, {0x13d, 0x13d}, + {0x13f, 0x13f}, {0x141, 0x141}, {0x143, 0x143}, {0x145, 0x145}, + {0x147, 0x147}, {0x14a, 0x14a}, {0x14c, 0x14c}, {0x14e, 0x14e}, + {0x150, 0x150}, {0x152, 0x152}, {0x154, 0x154}, {0x156, 0x156}, + {0x158, 0x158}, {0x15a, 0x15a}, {0x15c, 0x15c}, {0x15e, 0x15e}, + {0x160, 0x160}, {0x162, 0x162}, {0x164, 0x164}, {0x166, 0x166}, + {0x168, 0x168}, {0x16a, 0x16a}, {0x16c, 0x16c}, {0x16e, 0x16e}, + {0x170, 0x170}, {0x172, 0x172}, {0x174, 0x174}, {0x176, 0x176}, + {0x178, 0x179}, {0x17b, 0x17b}, {0x17d, 0x17d}, {0x181, 0x182}, + {0x184, 0x184}, {0x186, 0x187}, {0x189, 0x18b}, {0x18e, 0x191}, + {0x193, 0x194}, {0x196, 0x198}, {0x19c, 0x19d}, {0x19f, 0x1a0}, + {0x1a2, 0x1a2}, {0x1a4, 0x1a4}, {0x1a6, 0x1a7}, {0x1a9, 0x1a9}, + {0x1ac, 0x1ac}, {0x1ae, 0x1af}, {0x1b1, 0x1b3}, {0x1b5, 0x1b5}, + {0x1b7, 0x1b8}, {0x1bc, 0x1bc}, {0x1c4, 0x1c4}, {0x1c7, 0x1c7}, + {0x1ca, 0x1ca}, {0x1cd, 0x1cd}, {0x1cf, 0x1cf}, {0x1d1, 0x1d1}, + {0x1d3, 0x1d3}, {0x1d5, 0x1d5}, {0x1d7, 0x1d7}, {0x1d9, 0x1d9}, + {0x1db, 0x1db}, {0x1de, 0x1de}, {0x1e0, 0x1e0}, {0x1e2, 0x1e2}, + {0x1e4, 0x1e4}, {0x1e6, 0x1e6}, {0x1e8, 0x1e8}, {0x1ea, 0x1ea}, + {0x1ec, 0x1ec}, {0x1ee, 0x1ee}, {0x1f1, 0x1f1}, {0x1f4, 0x1f4}, + {0x1f6, 0x1f8}, {0x1fa, 0x1fa}, {0x1fc, 0x1fc}, {0x1fe, 0x1fe}, + {0x200, 0x200}, {0x202, 0x202}, {0x204, 0x204}, {0x206, 0x206}, + {0x208, 0x208}, {0x20a, 0x20a}, {0x20c, 0x20c}, {0x20e, 0x20e}, + {0x210, 0x210}, {0x212, 0x212}, {0x214, 0x214}, {0x216, 0x216}, + {0x218, 0x218}, {0x21a, 0x21a}, {0x21c, 0x21c}, {0x21e, 0x21e}, + {0x220, 0x220}, {0x222, 0x222}, {0x224, 0x224}, {0x226, 0x226}, + {0x228, 0x228}, {0x22a, 0x22a}, {0x22c, 0x22c}, {0x22e, 0x22e}, + {0x230, 0x230}, {0x232, 0x232}, {0x386, 0x386}, {0x388, 0x38a}, + {0x38c, 0x38c}, {0x38e, 0x38f}, {0x391, 0x3a1}, {0x3a3, 0x3ab}, + {0x3d2, 0x3d4}, {0x3d8, 0x3d8}, {0x3da, 0x3da}, {0x3dc, 0x3dc}, + {0x3de, 0x3de}, {0x3e0, 0x3e0}, {0x3e2, 0x3e2}, {0x3e4, 0x3e4}, + {0x3e6, 0x3e6}, {0x3e8, 0x3e8}, {0x3ea, 0x3ea}, {0x3ec, 0x3ec}, + {0x3ee, 0x3ee}, {0x3f4, 0x3f4}, {0x3f7, 0x3f7}, {0x3f9, 0x3fa}, + {0x400, 0x42f}, {0x460, 0x460}, {0x462, 0x462}, {0x464, 0x464}, + {0x466, 0x466}, {0x468, 0x468}, {0x46a, 0x46a}, {0x46c, 0x46c}, + {0x46e, 0x46e}, {0x470, 0x470}, {0x472, 0x472}, {0x474, 0x474}, + {0x476, 0x476}, {0x478, 0x478}, {0x47a, 0x47a}, {0x47c, 0x47c}, + {0x47e, 0x47e}, {0x480, 0x480}, {0x48a, 0x48a}, {0x48c, 0x48c}, + {0x48e, 0x48e}, {0x490, 0x490}, {0x492, 0x492}, {0x494, 0x494}, + {0x496, 0x496}, {0x498, 0x498}, {0x49a, 0x49a}, {0x49c, 0x49c}, + {0x49e, 0x49e}, {0x4a0, 0x4a0}, {0x4a2, 0x4a2}, {0x4a4, 0x4a4}, + {0x4a6, 0x4a6}, {0x4a8, 0x4a8}, {0x4aa, 0x4aa}, {0x4ac, 0x4ac}, + {0x4ae, 0x4ae}, {0x4b0, 0x4b0}, {0x4b2, 0x4b2}, {0x4b4, 0x4b4}, + {0x4b6, 0x4b6}, {0x4b8, 0x4b8}, {0x4ba, 0x4ba}, {0x4bc, 0x4bc}, + {0x4be, 0x4be}, {0x4c0, 0x4c1}, {0x4c3, 0x4c3}, {0x4c5, 0x4c5}, + {0x4c7, 0x4c7}, {0x4c9, 0x4c9}, {0x4cb, 0x4cb}, {0x4cd, 0x4cd}, + {0x4d0, 0x4d0}, {0x4d2, 0x4d2}, {0x4d4, 0x4d4}, {0x4d6, 0x4d6}, + {0x4d8, 0x4d8}, {0x4da, 0x4da}, {0x4dc, 0x4dc}, {0x4de, 0x4de}, + {0x4e0, 0x4e0}, {0x4e2, 0x4e2}, {0x4e4, 0x4e4}, {0x4e6, 0x4e6}, + {0x4e8, 0x4e8}, {0x4ea, 0x4ea}, {0x4ec, 0x4ec}, {0x4ee, 0x4ee}, + {0x4f0, 0x4f0}, {0x4f2, 0x4f2}, {0x4f4, 0x4f4}, {0x4f8, 0x4f8}, + {0x500, 0x500}, {0x502, 0x502}, {0x504, 0x504}, {0x506, 0x506}, + {0x508, 0x508}, {0x50a, 0x50a}, {0x50c, 0x50c}, {0x50e, 0x50e}, + {0x531, 0x556}, {0x10a0, 0x10c5}, {0x1e00, 0x1e00}, {0x1e02, 0x1e02}, + {0x1e04, 0x1e04}, {0x1e06, 0x1e06}, {0x1e08, 0x1e08}, {0x1e0a, 0x1e0a}, + {0x1e0c, 0x1e0c}, {0x1e0e, 0x1e0e}, {0x1e10, 0x1e10}, {0x1e12, 0x1e12}, + {0x1e14, 0x1e14}, {0x1e16, 0x1e16}, {0x1e18, 0x1e18}, {0x1e1a, 0x1e1a}, + {0x1e1c, 0x1e1c}, {0x1e1e, 0x1e1e}, {0x1e20, 0x1e20}, {0x1e22, 0x1e22}, + {0x1e24, 0x1e24}, {0x1e26, 0x1e26}, {0x1e28, 0x1e28}, {0x1e2a, 0x1e2a}, + {0x1e2c, 0x1e2c}, {0x1e2e, 0x1e2e}, {0x1e30, 0x1e30}, {0x1e32, 0x1e32}, + {0x1e34, 0x1e34}, {0x1e36, 0x1e36}, {0x1e38, 0x1e38}, {0x1e3a, 0x1e3a}, + {0x1e3c, 0x1e3c}, {0x1e3e, 0x1e3e}, {0x1e40, 0x1e40}, {0x1e42, 0x1e42}, + {0x1e44, 0x1e44}, {0x1e46, 0x1e46}, {0x1e48, 0x1e48}, {0x1e4a, 0x1e4a}, + {0x1e4c, 0x1e4c}, {0x1e4e, 0x1e4e}, {0x1e50, 0x1e50}, {0x1e52, 0x1e52}, + {0x1e54, 0x1e54}, {0x1e56, 0x1e56}, {0x1e58, 0x1e58}, {0x1e5a, 0x1e5a}, + {0x1e5c, 0x1e5c}, {0x1e5e, 0x1e5e}, {0x1e60, 0x1e60}, {0x1e62, 0x1e62}, + {0x1e64, 0x1e64}, {0x1e66, 0x1e66}, {0x1e68, 0x1e68}, {0x1e6a, 0x1e6a}, + {0x1e6c, 0x1e6c}, {0x1e6e, 0x1e6e}, {0x1e70, 0x1e70}, {0x1e72, 0x1e72}, + {0x1e74, 0x1e74}, {0x1e76, 0x1e76}, {0x1e78, 0x1e78}, {0x1e7a, 0x1e7a}, + {0x1e7c, 0x1e7c}, {0x1e7e, 0x1e7e}, {0x1e80, 0x1e80}, {0x1e82, 0x1e82}, + {0x1e84, 0x1e84}, {0x1e86, 0x1e86}, {0x1e88, 0x1e88}, {0x1e8a, 0x1e8a}, + {0x1e8c, 0x1e8c}, {0x1e8e, 0x1e8e}, {0x1e90, 0x1e90}, {0x1e92, 0x1e92}, + {0x1e94, 0x1e94}, {0x1ea0, 0x1ea0}, {0x1ea2, 0x1ea2}, {0x1ea4, 0x1ea4}, + {0x1ea6, 0x1ea6}, {0x1ea8, 0x1ea8}, {0x1eaa, 0x1eaa}, {0x1eac, 0x1eac}, + {0x1eae, 0x1eae}, {0x1eb0, 0x1eb0}, {0x1eb2, 0x1eb2}, {0x1eb4, 0x1eb4}, + {0x1eb6, 0x1eb6}, {0x1eb8, 0x1eb8}, {0x1eba, 0x1eba}, {0x1ebc, 0x1ebc}, + {0x1ebe, 0x1ebe}, {0x1ec0, 0x1ec0}, {0x1ec2, 0x1ec2}, {0x1ec4, 0x1ec4}, + {0x1ec6, 0x1ec6}, {0x1ec8, 0x1ec8}, {0x1eca, 0x1eca}, {0x1ecc, 0x1ecc}, + {0x1ece, 0x1ece}, {0x1ed0, 0x1ed0}, {0x1ed2, 0x1ed2}, {0x1ed4, 0x1ed4}, + {0x1ed6, 0x1ed6}, {0x1ed8, 0x1ed8}, {0x1eda, 0x1eda}, {0x1edc, 0x1edc}, + {0x1ede, 0x1ede}, {0x1ee0, 0x1ee0}, {0x1ee2, 0x1ee2}, {0x1ee4, 0x1ee4}, + {0x1ee6, 0x1ee6}, {0x1ee8, 0x1ee8}, {0x1eea, 0x1eea}, {0x1eec, 0x1eec}, + {0x1eee, 0x1eee}, {0x1ef0, 0x1ef0}, {0x1ef2, 0x1ef2}, {0x1ef4, 0x1ef4}, + {0x1ef6, 0x1ef6}, {0x1ef8, 0x1ef8}, {0x1f08, 0x1f0f}, {0x1f18, 0x1f1d}, + {0x1f28, 0x1f2f}, {0x1f38, 0x1f3f}, {0x1f48, 0x1f4d}, {0x1f59, 0x1f59}, + {0x1f5b, 0x1f5b}, {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f5f}, {0x1f68, 0x1f6f}, + {0x1fb8, 0x1fbb}, {0x1fc8, 0x1fcb}, {0x1fd8, 0x1fdb}, {0x1fe8, 0x1fec}, + {0x1ff8, 0x1ffb}, {0x2102, 0x2102}, {0x2107, 0x2107}, {0x210b, 0x210d}, + {0x2110, 0x2112}, {0x2115, 0x2115}, {0x2119, 0x211d}, {0x2124, 0x2124}, + {0x2126, 0x2126}, {0x2128, 0x2128}, {0x212a, 0x212d}, {0x2130, 0x2131}, {0x2133, 0x2133}, {0x213e, 0x213f}, {0x2145, 0x2145}, {0xff21, 0xff3a} }; -static const xmlChLRange xmlLuL[] = {{0x10400, 0x10427}, {0x1d400, 0x1d419}, - {0x1d434, 0x1d44d}, {0x1d468, 0x1d481}, {0x1d49c, 0x1d49c}, - {0x1d49e, 0x1d49f}, {0x1d4a2, 0x1d4a2}, {0x1d4a5, 0x1d4a6}, - {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b5}, {0x1d4d0, 0x1d4e9}, - {0x1d504, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514}, - {0x1d516, 0x1d51c}, {0x1d538, 0x1d539}, {0x1d53b, 0x1d53e}, - {0x1d540, 0x1d544}, {0x1d546, 0x1d546}, {0x1d54a, 0x1d550}, - {0x1d56c, 0x1d585}, {0x1d5a0, 0x1d5b9}, {0x1d5d4, 0x1d5ed}, - {0x1d608, 0x1d621}, {0x1d63c, 0x1d655}, {0x1d670, 0x1d689}, - {0x1d6a8, 0x1d6c0}, {0x1d6e2, 0x1d6fa}, {0x1d71c, 0x1d734}, +static const xmlChLRange xmlLuL[] = {{0x10400, 0x10427}, {0x1d400, 0x1d419}, + {0x1d434, 0x1d44d}, {0x1d468, 0x1d481}, {0x1d49c, 0x1d49c}, + {0x1d49e, 0x1d49f}, {0x1d4a2, 0x1d4a2}, {0x1d4a5, 0x1d4a6}, + {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b5}, {0x1d4d0, 0x1d4e9}, + {0x1d504, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514}, + {0x1d516, 0x1d51c}, {0x1d538, 0x1d539}, {0x1d53b, 0x1d53e}, + {0x1d540, 0x1d544}, {0x1d546, 0x1d546}, {0x1d54a, 0x1d550}, + {0x1d56c, 0x1d585}, {0x1d5a0, 0x1d5b9}, {0x1d5d4, 0x1d5ed}, + {0x1d608, 0x1d621}, {0x1d63c, 0x1d655}, {0x1d670, 0x1d689}, + {0x1d6a8, 0x1d6c0}, {0x1d6e2, 0x1d6fa}, {0x1d71c, 0x1d734}, {0x1d756, 0x1d76e}, {0x1d790, 0x1d7a8} }; static xmlChRangeGroup xmlLuG = {390,31,xmlLuS,xmlLuL}; -static const xmlChSRange xmlMS[] = {{0x300, 0x357}, {0x35d, 0x36f}, - {0x483, 0x486}, {0x488, 0x489}, {0x591, 0x5a1}, {0x5a3, 0x5b9}, - {0x5bb, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4}, - {0x610, 0x615}, {0x64b, 0x658}, {0x670, 0x670}, {0x6d6, 0x6dc}, - {0x6de, 0x6e4}, {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x711, 0x711}, - {0x730, 0x74a}, {0x7a6, 0x7b0}, {0x901, 0x903}, {0x93c, 0x93c}, - {0x93e, 0x94d}, {0x951, 0x954}, {0x962, 0x963}, {0x981, 0x983}, - {0x9bc, 0x9bc}, {0x9be, 0x9c4}, {0x9c7, 0x9c8}, {0x9cb, 0x9cd}, - {0x9d7, 0x9d7}, {0x9e2, 0x9e3}, {0xa01, 0xa03}, {0xa3c, 0xa3c}, - {0xa3e, 0xa42}, {0xa47, 0xa48}, {0xa4b, 0xa4d}, {0xa70, 0xa71}, - {0xa81, 0xa83}, {0xabc, 0xabc}, {0xabe, 0xac5}, {0xac7, 0xac9}, - {0xacb, 0xacd}, {0xae2, 0xae3}, {0xb01, 0xb03}, {0xb3c, 0xb3c}, - {0xb3e, 0xb43}, {0xb47, 0xb48}, {0xb4b, 0xb4d}, {0xb56, 0xb57}, - {0xb82, 0xb82}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8}, {0xbca, 0xbcd}, - {0xbd7, 0xbd7}, {0xc01, 0xc03}, {0xc3e, 0xc44}, {0xc46, 0xc48}, - {0xc4a, 0xc4d}, {0xc55, 0xc56}, {0xc82, 0xc83}, {0xcbc, 0xcbc}, - {0xcbe, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xcd5, 0xcd6}, - {0xd02, 0xd03}, {0xd3e, 0xd43}, {0xd46, 0xd48}, {0xd4a, 0xd4d}, - {0xd57, 0xd57}, {0xd82, 0xd83}, {0xdca, 0xdca}, {0xdcf, 0xdd4}, - {0xdd6, 0xdd6}, {0xdd8, 0xddf}, {0xdf2, 0xdf3}, {0xe31, 0xe31}, - {0xe34, 0xe3a}, {0xe47, 0xe4e}, {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, - {0xebb, 0xebc}, {0xec8, 0xecd}, {0xf18, 0xf19}, {0xf35, 0xf35}, - {0xf37, 0xf37}, {0xf39, 0xf39}, {0xf3e, 0xf3f}, {0xf71, 0xf84}, - {0xf86, 0xf87}, {0xf90, 0xf97}, {0xf99, 0xfbc}, {0xfc6, 0xfc6}, - {0x102c, 0x1032}, {0x1036, 0x1039}, {0x1056, 0x1059}, {0x1712, 0x1714}, - {0x1732, 0x1734}, {0x1752, 0x1753}, {0x1772, 0x1773}, {0x17b6, 0x17d3}, - {0x17dd, 0x17dd}, {0x180b, 0x180d}, {0x18a9, 0x18a9}, {0x1920, 0x192b}, - {0x1930, 0x193b}, {0x20d0, 0x20ea}, {0x302a, 0x302f}, {0x3099, 0x309a}, +static const xmlChSRange xmlMS[] = {{0x300, 0x357}, {0x35d, 0x36f}, + {0x483, 0x486}, {0x488, 0x489}, {0x591, 0x5a1}, {0x5a3, 0x5b9}, + {0x5bb, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4}, + {0x610, 0x615}, {0x64b, 0x658}, {0x670, 0x670}, {0x6d6, 0x6dc}, + {0x6de, 0x6e4}, {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x711, 0x711}, + {0x730, 0x74a}, {0x7a6, 0x7b0}, {0x901, 0x903}, {0x93c, 0x93c}, + {0x93e, 0x94d}, {0x951, 0x954}, {0x962, 0x963}, {0x981, 0x983}, + {0x9bc, 0x9bc}, {0x9be, 0x9c4}, {0x9c7, 0x9c8}, {0x9cb, 0x9cd}, + {0x9d7, 0x9d7}, {0x9e2, 0x9e3}, {0xa01, 0xa03}, {0xa3c, 0xa3c}, + {0xa3e, 0xa42}, {0xa47, 0xa48}, {0xa4b, 0xa4d}, {0xa70, 0xa71}, + {0xa81, 0xa83}, {0xabc, 0xabc}, {0xabe, 0xac5}, {0xac7, 0xac9}, + {0xacb, 0xacd}, {0xae2, 0xae3}, {0xb01, 0xb03}, {0xb3c, 0xb3c}, + {0xb3e, 0xb43}, {0xb47, 0xb48}, {0xb4b, 0xb4d}, {0xb56, 0xb57}, + {0xb82, 0xb82}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8}, {0xbca, 0xbcd}, + {0xbd7, 0xbd7}, {0xc01, 0xc03}, {0xc3e, 0xc44}, {0xc46, 0xc48}, + {0xc4a, 0xc4d}, {0xc55, 0xc56}, {0xc82, 0xc83}, {0xcbc, 0xcbc}, + {0xcbe, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xcd5, 0xcd6}, + {0xd02, 0xd03}, {0xd3e, 0xd43}, {0xd46, 0xd48}, {0xd4a, 0xd4d}, + {0xd57, 0xd57}, {0xd82, 0xd83}, {0xdca, 0xdca}, {0xdcf, 0xdd4}, + {0xdd6, 0xdd6}, {0xdd8, 0xddf}, {0xdf2, 0xdf3}, {0xe31, 0xe31}, + {0xe34, 0xe3a}, {0xe47, 0xe4e}, {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, + {0xebb, 0xebc}, {0xec8, 0xecd}, {0xf18, 0xf19}, {0xf35, 0xf35}, + {0xf37, 0xf37}, {0xf39, 0xf39}, {0xf3e, 0xf3f}, {0xf71, 0xf84}, + {0xf86, 0xf87}, {0xf90, 0xf97}, {0xf99, 0xfbc}, {0xfc6, 0xfc6}, + {0x102c, 0x1032}, {0x1036, 0x1039}, {0x1056, 0x1059}, {0x1712, 0x1714}, + {0x1732, 0x1734}, {0x1752, 0x1753}, {0x1772, 0x1773}, {0x17b6, 0x17d3}, + {0x17dd, 0x17dd}, {0x180b, 0x180d}, {0x18a9, 0x18a9}, {0x1920, 0x192b}, + {0x1930, 0x193b}, {0x20d0, 0x20ea}, {0x302a, 0x302f}, {0x3099, 0x309a}, {0xfb1e, 0xfb1e}, {0xfe00, 0xfe0f}, {0xfe20, 0xfe23} }; -static const xmlChLRange xmlML[] = {{0x1d165, 0x1d169}, {0x1d16d, 0x1d172}, - {0x1d17b, 0x1d182}, {0x1d185, 0x1d18b}, {0x1d1aa, 0x1d1ad}, +static const xmlChLRange xmlML[] = {{0x1d165, 0x1d169}, {0x1d16d, 0x1d172}, + {0x1d17b, 0x1d182}, {0x1d185, 0x1d18b}, {0x1d1aa, 0x1d1ad}, {0xe0100, 0xe01ef} }; static xmlChRangeGroup xmlMG = {113,6,xmlMS,xmlML}; -static const xmlChSRange xmlMcS[] = {{0x903, 0x903}, {0x93e, 0x940}, - {0x949, 0x94c}, {0x982, 0x983}, {0x9be, 0x9c0}, {0x9c7, 0x9c8}, - {0x9cb, 0x9cc}, {0x9d7, 0x9d7}, {0xa03, 0xa03}, {0xa3e, 0xa40}, - {0xa83, 0xa83}, {0xabe, 0xac0}, {0xac9, 0xac9}, {0xacb, 0xacc}, - {0xb02, 0xb03}, {0xb3e, 0xb3e}, {0xb40, 0xb40}, {0xb47, 0xb48}, - {0xb4b, 0xb4c}, {0xb57, 0xb57}, {0xbbe, 0xbbf}, {0xbc1, 0xbc2}, - {0xbc6, 0xbc8}, {0xbca, 0xbcc}, {0xbd7, 0xbd7}, {0xc01, 0xc03}, - {0xc41, 0xc44}, {0xc82, 0xc83}, {0xcbe, 0xcbe}, {0xcc0, 0xcc4}, - {0xcc7, 0xcc8}, {0xcca, 0xccb}, {0xcd5, 0xcd6}, {0xd02, 0xd03}, - {0xd3e, 0xd40}, {0xd46, 0xd48}, {0xd4a, 0xd4c}, {0xd57, 0xd57}, - {0xd82, 0xd83}, {0xdcf, 0xdd1}, {0xdd8, 0xddf}, {0xdf2, 0xdf3}, - {0xf3e, 0xf3f}, {0xf7f, 0xf7f}, {0x102c, 0x102c}, {0x1031, 0x1031}, - {0x1038, 0x1038}, {0x1056, 0x1057}, {0x17b6, 0x17b6}, {0x17be, 0x17c5}, - {0x17c7, 0x17c8}, {0x1923, 0x1926}, {0x1929, 0x192b}, {0x1930, 0x1931}, +static const xmlChSRange xmlMcS[] = {{0x903, 0x903}, {0x93e, 0x940}, + {0x949, 0x94c}, {0x982, 0x983}, {0x9be, 0x9c0}, {0x9c7, 0x9c8}, + {0x9cb, 0x9cc}, {0x9d7, 0x9d7}, {0xa03, 0xa03}, {0xa3e, 0xa40}, + {0xa83, 0xa83}, {0xabe, 0xac0}, {0xac9, 0xac9}, {0xacb, 0xacc}, + {0xb02, 0xb03}, {0xb3e, 0xb3e}, {0xb40, 0xb40}, {0xb47, 0xb48}, + {0xb4b, 0xb4c}, {0xb57, 0xb57}, {0xbbe, 0xbbf}, {0xbc1, 0xbc2}, + {0xbc6, 0xbc8}, {0xbca, 0xbcc}, {0xbd7, 0xbd7}, {0xc01, 0xc03}, + {0xc41, 0xc44}, {0xc82, 0xc83}, {0xcbe, 0xcbe}, {0xcc0, 0xcc4}, + {0xcc7, 0xcc8}, {0xcca, 0xccb}, {0xcd5, 0xcd6}, {0xd02, 0xd03}, + {0xd3e, 0xd40}, {0xd46, 0xd48}, {0xd4a, 0xd4c}, {0xd57, 0xd57}, + {0xd82, 0xd83}, {0xdcf, 0xdd1}, {0xdd8, 0xddf}, {0xdf2, 0xdf3}, + {0xf3e, 0xf3f}, {0xf7f, 0xf7f}, {0x102c, 0x102c}, {0x1031, 0x1031}, + {0x1038, 0x1038}, {0x1056, 0x1057}, {0x17b6, 0x17b6}, {0x17be, 0x17c5}, + {0x17c7, 0x17c8}, {0x1923, 0x1926}, {0x1929, 0x192b}, {0x1930, 0x1931}, {0x1933, 0x1938} }; static const xmlChLRange xmlMcL[] = {{0x1d165, 0x1d166}, {0x1d16d, 0x1d172} }; static xmlChRangeGroup xmlMcG = {55,2,xmlMcS,xmlMcL}; -static const xmlChSRange xmlMnS[] = {{0x300, 0x357}, {0x35d, 0x36f}, - {0x483, 0x486}, {0x591, 0x5a1}, {0x5a3, 0x5b9}, {0x5bb, 0x5bd}, - {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4}, {0x610, 0x615}, - {0x64b, 0x658}, {0x670, 0x670}, {0x6d6, 0x6dc}, {0x6df, 0x6e4}, - {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x711, 0x711}, {0x730, 0x74a}, - {0x7a6, 0x7b0}, {0x901, 0x902}, {0x93c, 0x93c}, {0x941, 0x948}, - {0x94d, 0x94d}, {0x951, 0x954}, {0x962, 0x963}, {0x981, 0x981}, - {0x9bc, 0x9bc}, {0x9c1, 0x9c4}, {0x9cd, 0x9cd}, {0x9e2, 0x9e3}, - {0xa01, 0xa02}, {0xa3c, 0xa3c}, {0xa41, 0xa42}, {0xa47, 0xa48}, - {0xa4b, 0xa4d}, {0xa70, 0xa71}, {0xa81, 0xa82}, {0xabc, 0xabc}, - {0xac1, 0xac5}, {0xac7, 0xac8}, {0xacd, 0xacd}, {0xae2, 0xae3}, - {0xb01, 0xb01}, {0xb3c, 0xb3c}, {0xb3f, 0xb3f}, {0xb41, 0xb43}, - {0xb4d, 0xb4d}, {0xb56, 0xb56}, {0xb82, 0xb82}, {0xbc0, 0xbc0}, - {0xbcd, 0xbcd}, {0xc3e, 0xc40}, {0xc46, 0xc48}, {0xc4a, 0xc4d}, - {0xc55, 0xc56}, {0xcbc, 0xcbc}, {0xcbf, 0xcbf}, {0xcc6, 0xcc6}, - {0xccc, 0xccd}, {0xd41, 0xd43}, {0xd4d, 0xd4d}, {0xdca, 0xdca}, - {0xdd2, 0xdd4}, {0xdd6, 0xdd6}, {0xe31, 0xe31}, {0xe34, 0xe3a}, - {0xe47, 0xe4e}, {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, {0xebb, 0xebc}, - {0xec8, 0xecd}, {0xf18, 0xf19}, {0xf35, 0xf35}, {0xf37, 0xf37}, - {0xf39, 0xf39}, {0xf71, 0xf7e}, {0xf80, 0xf84}, {0xf86, 0xf87}, - {0xf90, 0xf97}, {0xf99, 0xfbc}, {0xfc6, 0xfc6}, {0x102d, 0x1030}, - {0x1032, 0x1032}, {0x1036, 0x1037}, {0x1039, 0x1039}, {0x1058, 0x1059}, - {0x1712, 0x1714}, {0x1732, 0x1734}, {0x1752, 0x1753}, {0x1772, 0x1773}, - {0x17b7, 0x17bd}, {0x17c6, 0x17c6}, {0x17c9, 0x17d3}, {0x17dd, 0x17dd}, - {0x180b, 0x180d}, {0x18a9, 0x18a9}, {0x1920, 0x1922}, {0x1927, 0x1928}, - {0x1932, 0x1932}, {0x1939, 0x193b}, {0x20d0, 0x20dc}, {0x20e1, 0x20e1}, - {0x20e5, 0x20ea}, {0x302a, 0x302f}, {0x3099, 0x309a}, {0xfb1e, 0xfb1e}, +static const xmlChSRange xmlMnS[] = {{0x300, 0x357}, {0x35d, 0x36f}, + {0x483, 0x486}, {0x591, 0x5a1}, {0x5a3, 0x5b9}, {0x5bb, 0x5bd}, + {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4}, {0x610, 0x615}, + {0x64b, 0x658}, {0x670, 0x670}, {0x6d6, 0x6dc}, {0x6df, 0x6e4}, + {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x711, 0x711}, {0x730, 0x74a}, + {0x7a6, 0x7b0}, {0x901, 0x902}, {0x93c, 0x93c}, {0x941, 0x948}, + {0x94d, 0x94d}, {0x951, 0x954}, {0x962, 0x963}, {0x981, 0x981}, + {0x9bc, 0x9bc}, {0x9c1, 0x9c4}, {0x9cd, 0x9cd}, {0x9e2, 0x9e3}, + {0xa01, 0xa02}, {0xa3c, 0xa3c}, {0xa41, 0xa42}, {0xa47, 0xa48}, + {0xa4b, 0xa4d}, {0xa70, 0xa71}, {0xa81, 0xa82}, {0xabc, 0xabc}, + {0xac1, 0xac5}, {0xac7, 0xac8}, {0xacd, 0xacd}, {0xae2, 0xae3}, + {0xb01, 0xb01}, {0xb3c, 0xb3c}, {0xb3f, 0xb3f}, {0xb41, 0xb43}, + {0xb4d, 0xb4d}, {0xb56, 0xb56}, {0xb82, 0xb82}, {0xbc0, 0xbc0}, + {0xbcd, 0xbcd}, {0xc3e, 0xc40}, {0xc46, 0xc48}, {0xc4a, 0xc4d}, + {0xc55, 0xc56}, {0xcbc, 0xcbc}, {0xcbf, 0xcbf}, {0xcc6, 0xcc6}, + {0xccc, 0xccd}, {0xd41, 0xd43}, {0xd4d, 0xd4d}, {0xdca, 0xdca}, + {0xdd2, 0xdd4}, {0xdd6, 0xdd6}, {0xe31, 0xe31}, {0xe34, 0xe3a}, + {0xe47, 0xe4e}, {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, {0xebb, 0xebc}, + {0xec8, 0xecd}, {0xf18, 0xf19}, {0xf35, 0xf35}, {0xf37, 0xf37}, + {0xf39, 0xf39}, {0xf71, 0xf7e}, {0xf80, 0xf84}, {0xf86, 0xf87}, + {0xf90, 0xf97}, {0xf99, 0xfbc}, {0xfc6, 0xfc6}, {0x102d, 0x1030}, + {0x1032, 0x1032}, {0x1036, 0x1037}, {0x1039, 0x1039}, {0x1058, 0x1059}, + {0x1712, 0x1714}, {0x1732, 0x1734}, {0x1752, 0x1753}, {0x1772, 0x1773}, + {0x17b7, 0x17bd}, {0x17c6, 0x17c6}, {0x17c9, 0x17d3}, {0x17dd, 0x17dd}, + {0x180b, 0x180d}, {0x18a9, 0x18a9}, {0x1920, 0x1922}, {0x1927, 0x1928}, + {0x1932, 0x1932}, {0x1939, 0x193b}, {0x20d0, 0x20dc}, {0x20e1, 0x20e1}, + {0x20e5, 0x20ea}, {0x302a, 0x302f}, {0x3099, 0x309a}, {0xfb1e, 0xfb1e}, {0xfe00, 0xfe0f}, {0xfe20, 0xfe23} }; -static const xmlChLRange xmlMnL[] = {{0x1d167, 0x1d169}, {0x1d17b, 0x1d182}, +static const xmlChLRange xmlMnL[] = {{0x1d167, 0x1d169}, {0x1d17b, 0x1d182}, {0x1d185, 0x1d18b}, {0x1d1aa, 0x1d1ad}, {0xe0100, 0xe01ef} }; static xmlChRangeGroup xmlMnG = {108,5,xmlMnS,xmlMnL}; -static const xmlChSRange xmlNS[] = {{0x30, 0x39}, {0xb2, 0xb3}, - {0xb9, 0xb9}, {0xbc, 0xbe}, {0x660, 0x669}, {0x6f0, 0x6f9}, - {0x966, 0x96f}, {0x9e6, 0x9ef}, {0x9f4, 0x9f9}, {0xa66, 0xa6f}, - {0xae6, 0xaef}, {0xb66, 0xb6f}, {0xbe7, 0xbf2}, {0xc66, 0xc6f}, - {0xce6, 0xcef}, {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9}, - {0xf20, 0xf33}, {0x1040, 0x1049}, {0x1369, 0x137c}, {0x16ee, 0x16f0}, - {0x17e0, 0x17e9}, {0x17f0, 0x17f9}, {0x1810, 0x1819}, {0x1946, 0x194f}, - {0x2070, 0x2070}, {0x2074, 0x2079}, {0x2080, 0x2089}, {0x2153, 0x2183}, - {0x2460, 0x249b}, {0x24ea, 0x24ff}, {0x2776, 0x2793}, {0x3007, 0x3007}, - {0x3021, 0x3029}, {0x3038, 0x303a}, {0x3192, 0x3195}, {0x3220, 0x3229}, +static const xmlChSRange xmlNS[] = {{0x30, 0x39}, {0xb2, 0xb3}, + {0xb9, 0xb9}, {0xbc, 0xbe}, {0x660, 0x669}, {0x6f0, 0x6f9}, + {0x966, 0x96f}, {0x9e6, 0x9ef}, {0x9f4, 0x9f9}, {0xa66, 0xa6f}, + {0xae6, 0xaef}, {0xb66, 0xb6f}, {0xbe7, 0xbf2}, {0xc66, 0xc6f}, + {0xce6, 0xcef}, {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9}, + {0xf20, 0xf33}, {0x1040, 0x1049}, {0x1369, 0x137c}, {0x16ee, 0x16f0}, + {0x17e0, 0x17e9}, {0x17f0, 0x17f9}, {0x1810, 0x1819}, {0x1946, 0x194f}, + {0x2070, 0x2070}, {0x2074, 0x2079}, {0x2080, 0x2089}, {0x2153, 0x2183}, + {0x2460, 0x249b}, {0x24ea, 0x24ff}, {0x2776, 0x2793}, {0x3007, 0x3007}, + {0x3021, 0x3029}, {0x3038, 0x303a}, {0x3192, 0x3195}, {0x3220, 0x3229}, {0x3251, 0x325f}, {0x3280, 0x3289}, {0x32b1, 0x32bf}, {0xff10, 0xff19} }; -static const xmlChLRange xmlNL[] = {{0x10107, 0x10133}, {0x10320, 0x10323}, +static const xmlChLRange xmlNL[] = {{0x10107, 0x10133}, {0x10320, 0x10323}, {0x1034a, 0x1034a}, {0x104a0, 0x104a9}, {0x1d7ce, 0x1d7ff} }; static xmlChRangeGroup xmlNG = {42,5,xmlNS,xmlNL}; -static const xmlChSRange xmlNdS[] = {{0x30, 0x39}, {0x660, 0x669}, - {0x6f0, 0x6f9}, {0x966, 0x96f}, {0x9e6, 0x9ef}, {0xa66, 0xa6f}, - {0xae6, 0xaef}, {0xb66, 0xb6f}, {0xbe7, 0xbef}, {0xc66, 0xc6f}, - {0xce6, 0xcef}, {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9}, - {0xf20, 0xf29}, {0x1040, 0x1049}, {0x1369, 0x1371}, {0x17e0, 0x17e9}, +static const xmlChSRange xmlNdS[] = {{0x30, 0x39}, {0x660, 0x669}, + {0x6f0, 0x6f9}, {0x966, 0x96f}, {0x9e6, 0x9ef}, {0xa66, 0xa6f}, + {0xae6, 0xaef}, {0xb66, 0xb6f}, {0xbe7, 0xbef}, {0xc66, 0xc6f}, + {0xce6, 0xcef}, {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9}, + {0xf20, 0xf29}, {0x1040, 0x1049}, {0x1369, 0x1371}, {0x17e0, 0x17e9}, {0x1810, 0x1819}, {0x1946, 0x194f}, {0xff10, 0xff19} }; static const xmlChLRange xmlNdL[] = {{0x104a0, 0x104a9}, {0x1d7ce, 0x1d7ff} }; static xmlChRangeGroup xmlNdG = {21,2,xmlNdS,xmlNdL}; -static const xmlChSRange xmlNoS[] = {{0xb2, 0xb3}, {0xb9, 0xb9}, - {0xbc, 0xbe}, {0x9f4, 0x9f9}, {0xbf0, 0xbf2}, {0xf2a, 0xf33}, - {0x1372, 0x137c}, {0x17f0, 0x17f9}, {0x2070, 0x2070}, {0x2074, 0x2079}, - {0x2080, 0x2089}, {0x2153, 0x215f}, {0x2460, 0x249b}, {0x24ea, 0x24ff}, - {0x2776, 0x2793}, {0x3192, 0x3195}, {0x3220, 0x3229}, {0x3251, 0x325f}, +static const xmlChSRange xmlNoS[] = {{0xb2, 0xb3}, {0xb9, 0xb9}, + {0xbc, 0xbe}, {0x9f4, 0x9f9}, {0xbf0, 0xbf2}, {0xf2a, 0xf33}, + {0x1372, 0x137c}, {0x17f0, 0x17f9}, {0x2070, 0x2070}, {0x2074, 0x2079}, + {0x2080, 0x2089}, {0x2153, 0x215f}, {0x2460, 0x249b}, {0x24ea, 0x24ff}, + {0x2776, 0x2793}, {0x3192, 0x3195}, {0x3220, 0x3229}, {0x3251, 0x325f}, {0x3280, 0x3289}, {0x32b1, 0x32bf} }; static const xmlChLRange xmlNoL[] = {{0x10107, 0x10133}, {0x10320, 0x10323} }; static xmlChRangeGroup xmlNoG = {20,2,xmlNoS,xmlNoL}; -static const xmlChSRange xmlPS[] = {{0x21, 0x23}, {0x25, 0x2a}, - {0x2c, 0x2f}, {0x3a, 0x3b}, {0x3f, 0x40}, {0x5b, 0x5d}, {0x5f, 0x5f}, - {0x7b, 0x7b}, {0x7d, 0x7d}, {0xa1, 0xa1}, {0xab, 0xab}, {0xb7, 0xb7}, - {0xbb, 0xbb}, {0xbf, 0xbf}, {0x37e, 0x37e}, {0x387, 0x387}, - {0x55a, 0x55f}, {0x589, 0x58a}, {0x5be, 0x5be}, {0x5c0, 0x5c0}, - {0x5c3, 0x5c3}, {0x5f3, 0x5f4}, {0x60c, 0x60d}, {0x61b, 0x61b}, - {0x61f, 0x61f}, {0x66a, 0x66d}, {0x6d4, 0x6d4}, {0x700, 0x70d}, - {0x964, 0x965}, {0x970, 0x970}, {0xdf4, 0xdf4}, {0xe4f, 0xe4f}, - {0xe5a, 0xe5b}, {0xf04, 0xf12}, {0xf3a, 0xf3d}, {0xf85, 0xf85}, - {0x104a, 0x104f}, {0x10fb, 0x10fb}, {0x1361, 0x1368}, {0x166d, 0x166e}, - {0x169b, 0x169c}, {0x16eb, 0x16ed}, {0x1735, 0x1736}, {0x17d4, 0x17d6}, - {0x17d8, 0x17da}, {0x1800, 0x180a}, {0x1944, 0x1945}, {0x2010, 0x2027}, - {0x2030, 0x2043}, {0x2045, 0x2051}, {0x2053, 0x2054}, {0x2057, 0x2057}, - {0x207d, 0x207e}, {0x208d, 0x208e}, {0x2329, 0x232a}, {0x23b4, 0x23b6}, - {0x2768, 0x2775}, {0x27e6, 0x27eb}, {0x2983, 0x2998}, {0x29d8, 0x29db}, - {0x29fc, 0x29fd}, {0x3001, 0x3003}, {0x3008, 0x3011}, {0x3014, 0x301f}, - {0x3030, 0x3030}, {0x303d, 0x303d}, {0x30a0, 0x30a0}, {0x30fb, 0x30fb}, - {0xfd3e, 0xfd3f}, {0xfe30, 0xfe52}, {0xfe54, 0xfe61}, {0xfe63, 0xfe63}, - {0xfe68, 0xfe68}, {0xfe6a, 0xfe6b}, {0xff01, 0xff03}, {0xff05, 0xff0a}, - {0xff0c, 0xff0f}, {0xff1a, 0xff1b}, {0xff1f, 0xff20}, {0xff3b, 0xff3d}, +static const xmlChSRange xmlPS[] = {{0x21, 0x23}, {0x25, 0x2a}, + {0x2c, 0x2f}, {0x3a, 0x3b}, {0x3f, 0x40}, {0x5b, 0x5d}, {0x5f, 0x5f}, + {0x7b, 0x7b}, {0x7d, 0x7d}, {0xa1, 0xa1}, {0xab, 0xab}, {0xb7, 0xb7}, + {0xbb, 0xbb}, {0xbf, 0xbf}, {0x37e, 0x37e}, {0x387, 0x387}, + {0x55a, 0x55f}, {0x589, 0x58a}, {0x5be, 0x5be}, {0x5c0, 0x5c0}, + {0x5c3, 0x5c3}, {0x5f3, 0x5f4}, {0x60c, 0x60d}, {0x61b, 0x61b}, + {0x61f, 0x61f}, {0x66a, 0x66d}, {0x6d4, 0x6d4}, {0x700, 0x70d}, + {0x964, 0x965}, {0x970, 0x970}, {0xdf4, 0xdf4}, {0xe4f, 0xe4f}, + {0xe5a, 0xe5b}, {0xf04, 0xf12}, {0xf3a, 0xf3d}, {0xf85, 0xf85}, + {0x104a, 0x104f}, {0x10fb, 0x10fb}, {0x1361, 0x1368}, {0x166d, 0x166e}, + {0x169b, 0x169c}, {0x16eb, 0x16ed}, {0x1735, 0x1736}, {0x17d4, 0x17d6}, + {0x17d8, 0x17da}, {0x1800, 0x180a}, {0x1944, 0x1945}, {0x2010, 0x2027}, + {0x2030, 0x2043}, {0x2045, 0x2051}, {0x2053, 0x2054}, {0x2057, 0x2057}, + {0x207d, 0x207e}, {0x208d, 0x208e}, {0x2329, 0x232a}, {0x23b4, 0x23b6}, + {0x2768, 0x2775}, {0x27e6, 0x27eb}, {0x2983, 0x2998}, {0x29d8, 0x29db}, + {0x29fc, 0x29fd}, {0x3001, 0x3003}, {0x3008, 0x3011}, {0x3014, 0x301f}, + {0x3030, 0x3030}, {0x303d, 0x303d}, {0x30a0, 0x30a0}, {0x30fb, 0x30fb}, + {0xfd3e, 0xfd3f}, {0xfe30, 0xfe52}, {0xfe54, 0xfe61}, {0xfe63, 0xfe63}, + {0xfe68, 0xfe68}, {0xfe6a, 0xfe6b}, {0xff01, 0xff03}, {0xff05, 0xff0a}, + {0xff0c, 0xff0f}, {0xff1a, 0xff1b}, {0xff1f, 0xff20}, {0xff3b, 0xff3d}, {0xff3f, 0xff3f}, {0xff5b, 0xff5b}, {0xff5d, 0xff5d}, {0xff5f, 0xff65} }; static const xmlChLRange xmlPL[] = {{0x10100, 0x10101}, {0x1039f, 0x1039f} }; static xmlChRangeGroup xmlPG = {84,2,xmlPS,xmlPL}; -static const xmlChSRange xmlPdS[] = {{0x2d, 0x2d}, {0x58a, 0x58a}, - {0x1806, 0x1806}, {0x2010, 0x2015}, {0x301c, 0x301c}, {0x3030, 0x3030}, - {0x30a0, 0x30a0}, {0xfe31, 0xfe32}, {0xfe58, 0xfe58}, {0xfe63, 0xfe63}, +static const xmlChSRange xmlPdS[] = {{0x2d, 0x2d}, {0x58a, 0x58a}, + {0x1806, 0x1806}, {0x2010, 0x2015}, {0x301c, 0x301c}, {0x3030, 0x3030}, + {0x30a0, 0x30a0}, {0xfe31, 0xfe32}, {0xfe58, 0xfe58}, {0xfe63, 0xfe63}, {0xff0d, 0xff0d} }; static xmlChRangeGroup xmlPdG = {11,0,xmlPdS,NULL}; -static const xmlChSRange xmlPeS[] = {{0x29, 0x29}, {0x5d, 0x5d}, - {0x7d, 0x7d}, {0xf3b, 0xf3b}, {0xf3d, 0xf3d}, {0x169c, 0x169c}, - {0x2046, 0x2046}, {0x207e, 0x207e}, {0x208e, 0x208e}, {0x232a, 0x232a}, - {0x23b5, 0x23b5}, {0x2769, 0x2769}, {0x276b, 0x276b}, {0x276d, 0x276d}, - {0x276f, 0x276f}, {0x2771, 0x2771}, {0x2773, 0x2773}, {0x2775, 0x2775}, - {0x27e7, 0x27e7}, {0x27e9, 0x27e9}, {0x27eb, 0x27eb}, {0x2984, 0x2984}, - {0x2986, 0x2986}, {0x2988, 0x2988}, {0x298a, 0x298a}, {0x298c, 0x298c}, - {0x298e, 0x298e}, {0x2990, 0x2990}, {0x2992, 0x2992}, {0x2994, 0x2994}, - {0x2996, 0x2996}, {0x2998, 0x2998}, {0x29d9, 0x29d9}, {0x29db, 0x29db}, - {0x29fd, 0x29fd}, {0x3009, 0x3009}, {0x300b, 0x300b}, {0x300d, 0x300d}, - {0x300f, 0x300f}, {0x3011, 0x3011}, {0x3015, 0x3015}, {0x3017, 0x3017}, - {0x3019, 0x3019}, {0x301b, 0x301b}, {0x301e, 0x301f}, {0xfd3f, 0xfd3f}, - {0xfe36, 0xfe36}, {0xfe38, 0xfe38}, {0xfe3a, 0xfe3a}, {0xfe3c, 0xfe3c}, - {0xfe3e, 0xfe3e}, {0xfe40, 0xfe40}, {0xfe42, 0xfe42}, {0xfe44, 0xfe44}, - {0xfe48, 0xfe48}, {0xfe5a, 0xfe5a}, {0xfe5c, 0xfe5c}, {0xfe5e, 0xfe5e}, - {0xff09, 0xff09}, {0xff3d, 0xff3d}, {0xff5d, 0xff5d}, {0xff60, 0xff60}, +static const xmlChSRange xmlPeS[] = {{0x29, 0x29}, {0x5d, 0x5d}, + {0x7d, 0x7d}, {0xf3b, 0xf3b}, {0xf3d, 0xf3d}, {0x169c, 0x169c}, + {0x2046, 0x2046}, {0x207e, 0x207e}, {0x208e, 0x208e}, {0x232a, 0x232a}, + {0x23b5, 0x23b5}, {0x2769, 0x2769}, {0x276b, 0x276b}, {0x276d, 0x276d}, + {0x276f, 0x276f}, {0x2771, 0x2771}, {0x2773, 0x2773}, {0x2775, 0x2775}, + {0x27e7, 0x27e7}, {0x27e9, 0x27e9}, {0x27eb, 0x27eb}, {0x2984, 0x2984}, + {0x2986, 0x2986}, {0x2988, 0x2988}, {0x298a, 0x298a}, {0x298c, 0x298c}, + {0x298e, 0x298e}, {0x2990, 0x2990}, {0x2992, 0x2992}, {0x2994, 0x2994}, + {0x2996, 0x2996}, {0x2998, 0x2998}, {0x29d9, 0x29d9}, {0x29db, 0x29db}, + {0x29fd, 0x29fd}, {0x3009, 0x3009}, {0x300b, 0x300b}, {0x300d, 0x300d}, + {0x300f, 0x300f}, {0x3011, 0x3011}, {0x3015, 0x3015}, {0x3017, 0x3017}, + {0x3019, 0x3019}, {0x301b, 0x301b}, {0x301e, 0x301f}, {0xfd3f, 0xfd3f}, + {0xfe36, 0xfe36}, {0xfe38, 0xfe38}, {0xfe3a, 0xfe3a}, {0xfe3c, 0xfe3c}, + {0xfe3e, 0xfe3e}, {0xfe40, 0xfe40}, {0xfe42, 0xfe42}, {0xfe44, 0xfe44}, + {0xfe48, 0xfe48}, {0xfe5a, 0xfe5a}, {0xfe5c, 0xfe5c}, {0xfe5e, 0xfe5e}, + {0xff09, 0xff09}, {0xff3d, 0xff3d}, {0xff5d, 0xff5d}, {0xff60, 0xff60}, {0xff63, 0xff63} }; static xmlChRangeGroup xmlPeG = {63,0,xmlPeS,NULL}; -static const xmlChSRange xmlPoS[] = {{0x21, 0x23}, {0x25, 0x27}, - {0x2a, 0x2a}, {0x2c, 0x2c}, {0x2e, 0x2f}, {0x3a, 0x3b}, {0x3f, 0x40}, - {0x5c, 0x5c}, {0xa1, 0xa1}, {0xb7, 0xb7}, {0xbf, 0xbf}, {0x37e, 0x37e}, - {0x387, 0x387}, {0x55a, 0x55f}, {0x589, 0x589}, {0x5be, 0x5be}, - {0x5c0, 0x5c0}, {0x5c3, 0x5c3}, {0x5f3, 0x5f4}, {0x60c, 0x60d}, - {0x61b, 0x61b}, {0x61f, 0x61f}, {0x66a, 0x66d}, {0x6d4, 0x6d4}, - {0x700, 0x70d}, {0x964, 0x965}, {0x970, 0x970}, {0xdf4, 0xdf4}, - {0xe4f, 0xe4f}, {0xe5a, 0xe5b}, {0xf04, 0xf12}, {0xf85, 0xf85}, - {0x104a, 0x104f}, {0x10fb, 0x10fb}, {0x1361, 0x1368}, {0x166d, 0x166e}, - {0x16eb, 0x16ed}, {0x1735, 0x1736}, {0x17d4, 0x17d6}, {0x17d8, 0x17da}, - {0x1800, 0x1805}, {0x1807, 0x180a}, {0x1944, 0x1945}, {0x2016, 0x2017}, - {0x2020, 0x2027}, {0x2030, 0x2038}, {0x203b, 0x203e}, {0x2041, 0x2043}, - {0x2047, 0x2051}, {0x2053, 0x2053}, {0x2057, 0x2057}, {0x23b6, 0x23b6}, - {0x3001, 0x3003}, {0x303d, 0x303d}, {0xfe30, 0xfe30}, {0xfe45, 0xfe46}, - {0xfe49, 0xfe4c}, {0xfe50, 0xfe52}, {0xfe54, 0xfe57}, {0xfe5f, 0xfe61}, - {0xfe68, 0xfe68}, {0xfe6a, 0xfe6b}, {0xff01, 0xff03}, {0xff05, 0xff07}, - {0xff0a, 0xff0a}, {0xff0c, 0xff0c}, {0xff0e, 0xff0f}, {0xff1a, 0xff1b}, +static const xmlChSRange xmlPoS[] = {{0x21, 0x23}, {0x25, 0x27}, + {0x2a, 0x2a}, {0x2c, 0x2c}, {0x2e, 0x2f}, {0x3a, 0x3b}, {0x3f, 0x40}, + {0x5c, 0x5c}, {0xa1, 0xa1}, {0xb7, 0xb7}, {0xbf, 0xbf}, {0x37e, 0x37e}, + {0x387, 0x387}, {0x55a, 0x55f}, {0x589, 0x589}, {0x5be, 0x5be}, + {0x5c0, 0x5c0}, {0x5c3, 0x5c3}, {0x5f3, 0x5f4}, {0x60c, 0x60d}, + {0x61b, 0x61b}, {0x61f, 0x61f}, {0x66a, 0x66d}, {0x6d4, 0x6d4}, + {0x700, 0x70d}, {0x964, 0x965}, {0x970, 0x970}, {0xdf4, 0xdf4}, + {0xe4f, 0xe4f}, {0xe5a, 0xe5b}, {0xf04, 0xf12}, {0xf85, 0xf85}, + {0x104a, 0x104f}, {0x10fb, 0x10fb}, {0x1361, 0x1368}, {0x166d, 0x166e}, + {0x16eb, 0x16ed}, {0x1735, 0x1736}, {0x17d4, 0x17d6}, {0x17d8, 0x17da}, + {0x1800, 0x1805}, {0x1807, 0x180a}, {0x1944, 0x1945}, {0x2016, 0x2017}, + {0x2020, 0x2027}, {0x2030, 0x2038}, {0x203b, 0x203e}, {0x2041, 0x2043}, + {0x2047, 0x2051}, {0x2053, 0x2053}, {0x2057, 0x2057}, {0x23b6, 0x23b6}, + {0x3001, 0x3003}, {0x303d, 0x303d}, {0xfe30, 0xfe30}, {0xfe45, 0xfe46}, + {0xfe49, 0xfe4c}, {0xfe50, 0xfe52}, {0xfe54, 0xfe57}, {0xfe5f, 0xfe61}, + {0xfe68, 0xfe68}, {0xfe6a, 0xfe6b}, {0xff01, 0xff03}, {0xff05, 0xff07}, + {0xff0a, 0xff0a}, {0xff0c, 0xff0c}, {0xff0e, 0xff0f}, {0xff1a, 0xff1b}, {0xff1f, 0xff20}, {0xff3c, 0xff3c}, {0xff61, 0xff61}, {0xff64, 0xff64} }; static const xmlChLRange xmlPoL[] = {{0x10100, 0x10101}, {0x1039f, 0x1039f} }; static xmlChRangeGroup xmlPoG = {72,2,xmlPoS,xmlPoL}; -static const xmlChSRange xmlPsS[] = {{0x28, 0x28}, {0x5b, 0x5b}, - {0x7b, 0x7b}, {0xf3a, 0xf3a}, {0xf3c, 0xf3c}, {0x169b, 0x169b}, - {0x201a, 0x201a}, {0x201e, 0x201e}, {0x2045, 0x2045}, {0x207d, 0x207d}, - {0x208d, 0x208d}, {0x2329, 0x2329}, {0x23b4, 0x23b4}, {0x2768, 0x2768}, - {0x276a, 0x276a}, {0x276c, 0x276c}, {0x276e, 0x276e}, {0x2770, 0x2770}, - {0x2772, 0x2772}, {0x2774, 0x2774}, {0x27e6, 0x27e6}, {0x27e8, 0x27e8}, - {0x27ea, 0x27ea}, {0x2983, 0x2983}, {0x2985, 0x2985}, {0x2987, 0x2987}, - {0x2989, 0x2989}, {0x298b, 0x298b}, {0x298d, 0x298d}, {0x298f, 0x298f}, - {0x2991, 0x2991}, {0x2993, 0x2993}, {0x2995, 0x2995}, {0x2997, 0x2997}, - {0x29d8, 0x29d8}, {0x29da, 0x29da}, {0x29fc, 0x29fc}, {0x3008, 0x3008}, - {0x300a, 0x300a}, {0x300c, 0x300c}, {0x300e, 0x300e}, {0x3010, 0x3010}, - {0x3014, 0x3014}, {0x3016, 0x3016}, {0x3018, 0x3018}, {0x301a, 0x301a}, - {0x301d, 0x301d}, {0xfd3e, 0xfd3e}, {0xfe35, 0xfe35}, {0xfe37, 0xfe37}, - {0xfe39, 0xfe39}, {0xfe3b, 0xfe3b}, {0xfe3d, 0xfe3d}, {0xfe3f, 0xfe3f}, - {0xfe41, 0xfe41}, {0xfe43, 0xfe43}, {0xfe47, 0xfe47}, {0xfe59, 0xfe59}, - {0xfe5b, 0xfe5b}, {0xfe5d, 0xfe5d}, {0xff08, 0xff08}, {0xff3b, 0xff3b}, +static const xmlChSRange xmlPsS[] = {{0x28, 0x28}, {0x5b, 0x5b}, + {0x7b, 0x7b}, {0xf3a, 0xf3a}, {0xf3c, 0xf3c}, {0x169b, 0x169b}, + {0x201a, 0x201a}, {0x201e, 0x201e}, {0x2045, 0x2045}, {0x207d, 0x207d}, + {0x208d, 0x208d}, {0x2329, 0x2329}, {0x23b4, 0x23b4}, {0x2768, 0x2768}, + {0x276a, 0x276a}, {0x276c, 0x276c}, {0x276e, 0x276e}, {0x2770, 0x2770}, + {0x2772, 0x2772}, {0x2774, 0x2774}, {0x27e6, 0x27e6}, {0x27e8, 0x27e8}, + {0x27ea, 0x27ea}, {0x2983, 0x2983}, {0x2985, 0x2985}, {0x2987, 0x2987}, + {0x2989, 0x2989}, {0x298b, 0x298b}, {0x298d, 0x298d}, {0x298f, 0x298f}, + {0x2991, 0x2991}, {0x2993, 0x2993}, {0x2995, 0x2995}, {0x2997, 0x2997}, + {0x29d8, 0x29d8}, {0x29da, 0x29da}, {0x29fc, 0x29fc}, {0x3008, 0x3008}, + {0x300a, 0x300a}, {0x300c, 0x300c}, {0x300e, 0x300e}, {0x3010, 0x3010}, + {0x3014, 0x3014}, {0x3016, 0x3016}, {0x3018, 0x3018}, {0x301a, 0x301a}, + {0x301d, 0x301d}, {0xfd3e, 0xfd3e}, {0xfe35, 0xfe35}, {0xfe37, 0xfe37}, + {0xfe39, 0xfe39}, {0xfe3b, 0xfe3b}, {0xfe3d, 0xfe3d}, {0xfe3f, 0xfe3f}, + {0xfe41, 0xfe41}, {0xfe43, 0xfe43}, {0xfe47, 0xfe47}, {0xfe59, 0xfe59}, + {0xfe5b, 0xfe5b}, {0xfe5d, 0xfe5d}, {0xff08, 0xff08}, {0xff3b, 0xff3b}, {0xff5b, 0xff5b}, {0xff5f, 0xff5f}, {0xff62, 0xff62} }; static xmlChRangeGroup xmlPsG = {65,0,xmlPsS,NULL}; -static const xmlChSRange xmlSS[] = {{0x24, 0x24}, {0x2b, 0x2b}, - {0x3c, 0x3e}, {0x5e, 0x5e}, {0x60, 0x60}, {0x7c, 0x7c}, {0x7e, 0x7e}, - {0xa2, 0xa9}, {0xac, 0xac}, {0xae, 0xb1}, {0xb4, 0xb4}, {0xb6, 0xb6}, - {0xb8, 0xb8}, {0xd7, 0xd7}, {0xf7, 0xf7}, {0x2c2, 0x2c5}, - {0x2d2, 0x2df}, {0x2e5, 0x2ed}, {0x2ef, 0x2ff}, {0x374, 0x375}, - {0x384, 0x385}, {0x3f6, 0x3f6}, {0x482, 0x482}, {0x60e, 0x60f}, - {0x6e9, 0x6e9}, {0x6fd, 0x6fe}, {0x9f2, 0x9f3}, {0x9fa, 0x9fa}, - {0xaf1, 0xaf1}, {0xb70, 0xb70}, {0xbf3, 0xbfa}, {0xe3f, 0xe3f}, - {0xf01, 0xf03}, {0xf13, 0xf17}, {0xf1a, 0xf1f}, {0xf34, 0xf34}, - {0xf36, 0xf36}, {0xf38, 0xf38}, {0xfbe, 0xfc5}, {0xfc7, 0xfcc}, - {0xfcf, 0xfcf}, {0x17db, 0x17db}, {0x1940, 0x1940}, {0x19e0, 0x19ff}, - {0x1fbd, 0x1fbd}, {0x1fbf, 0x1fc1}, {0x1fcd, 0x1fcf}, {0x1fdd, 0x1fdf}, - {0x1fed, 0x1fef}, {0x1ffd, 0x1ffe}, {0x2044, 0x2044}, {0x2052, 0x2052}, - {0x207a, 0x207c}, {0x208a, 0x208c}, {0x20a0, 0x20b1}, {0x2100, 0x2101}, - {0x2103, 0x2106}, {0x2108, 0x2109}, {0x2114, 0x2114}, {0x2116, 0x2118}, - {0x211e, 0x2123}, {0x2125, 0x2125}, {0x2127, 0x2127}, {0x2129, 0x2129}, - {0x212e, 0x212e}, {0x2132, 0x2132}, {0x213a, 0x213b}, {0x2140, 0x2144}, - {0x214a, 0x214b}, {0x2190, 0x2328}, {0x232b, 0x23b3}, {0x23b7, 0x23d0}, - {0x2400, 0x2426}, {0x2440, 0x244a}, {0x249c, 0x24e9}, {0x2500, 0x2617}, - {0x2619, 0x267d}, {0x2680, 0x2691}, {0x26a0, 0x26a1}, {0x2701, 0x2704}, - {0x2706, 0x2709}, {0x270c, 0x2727}, {0x2729, 0x274b}, {0x274d, 0x274d}, - {0x274f, 0x2752}, {0x2756, 0x2756}, {0x2758, 0x275e}, {0x2761, 0x2767}, - {0x2794, 0x2794}, {0x2798, 0x27af}, {0x27b1, 0x27be}, {0x27d0, 0x27e5}, - {0x27f0, 0x2982}, {0x2999, 0x29d7}, {0x29dc, 0x29fb}, {0x29fe, 0x2b0d}, - {0x2e80, 0x2e99}, {0x2e9b, 0x2ef3}, {0x2f00, 0x2fd5}, {0x2ff0, 0x2ffb}, - {0x3004, 0x3004}, {0x3012, 0x3013}, {0x3020, 0x3020}, {0x3036, 0x3037}, - {0x303e, 0x303f}, {0x309b, 0x309c}, {0x3190, 0x3191}, {0x3196, 0x319f}, - {0x3200, 0x321e}, {0x322a, 0x3243}, {0x3250, 0x3250}, {0x3260, 0x327d}, - {0x327f, 0x327f}, {0x328a, 0x32b0}, {0x32c0, 0x32fe}, {0x3300, 0x33ff}, - {0x4dc0, 0x4dff}, {0xa490, 0xa4c6}, {0xfb29, 0xfb29}, {0xfdfc, 0xfdfd}, - {0xfe62, 0xfe62}, {0xfe64, 0xfe66}, {0xfe69, 0xfe69}, {0xff04, 0xff04}, - {0xff0b, 0xff0b}, {0xff1c, 0xff1e}, {0xff3e, 0xff3e}, {0xff40, 0xff40}, - {0xff5c, 0xff5c}, {0xff5e, 0xff5e}, {0xffe0, 0xffe6}, {0xffe8, 0xffee}, +static const xmlChSRange xmlSS[] = {{0x24, 0x24}, {0x2b, 0x2b}, + {0x3c, 0x3e}, {0x5e, 0x5e}, {0x60, 0x60}, {0x7c, 0x7c}, {0x7e, 0x7e}, + {0xa2, 0xa9}, {0xac, 0xac}, {0xae, 0xb1}, {0xb4, 0xb4}, {0xb6, 0xb6}, + {0xb8, 0xb8}, {0xd7, 0xd7}, {0xf7, 0xf7}, {0x2c2, 0x2c5}, + {0x2d2, 0x2df}, {0x2e5, 0x2ed}, {0x2ef, 0x2ff}, {0x374, 0x375}, + {0x384, 0x385}, {0x3f6, 0x3f6}, {0x482, 0x482}, {0x60e, 0x60f}, + {0x6e9, 0x6e9}, {0x6fd, 0x6fe}, {0x9f2, 0x9f3}, {0x9fa, 0x9fa}, + {0xaf1, 0xaf1}, {0xb70, 0xb70}, {0xbf3, 0xbfa}, {0xe3f, 0xe3f}, + {0xf01, 0xf03}, {0xf13, 0xf17}, {0xf1a, 0xf1f}, {0xf34, 0xf34}, + {0xf36, 0xf36}, {0xf38, 0xf38}, {0xfbe, 0xfc5}, {0xfc7, 0xfcc}, + {0xfcf, 0xfcf}, {0x17db, 0x17db}, {0x1940, 0x1940}, {0x19e0, 0x19ff}, + {0x1fbd, 0x1fbd}, {0x1fbf, 0x1fc1}, {0x1fcd, 0x1fcf}, {0x1fdd, 0x1fdf}, + {0x1fed, 0x1fef}, {0x1ffd, 0x1ffe}, {0x2044, 0x2044}, {0x2052, 0x2052}, + {0x207a, 0x207c}, {0x208a, 0x208c}, {0x20a0, 0x20b1}, {0x2100, 0x2101}, + {0x2103, 0x2106}, {0x2108, 0x2109}, {0x2114, 0x2114}, {0x2116, 0x2118}, + {0x211e, 0x2123}, {0x2125, 0x2125}, {0x2127, 0x2127}, {0x2129, 0x2129}, + {0x212e, 0x212e}, {0x2132, 0x2132}, {0x213a, 0x213b}, {0x2140, 0x2144}, + {0x214a, 0x214b}, {0x2190, 0x2328}, {0x232b, 0x23b3}, {0x23b7, 0x23d0}, + {0x2400, 0x2426}, {0x2440, 0x244a}, {0x249c, 0x24e9}, {0x2500, 0x2617}, + {0x2619, 0x267d}, {0x2680, 0x2691}, {0x26a0, 0x26a1}, {0x2701, 0x2704}, + {0x2706, 0x2709}, {0x270c, 0x2727}, {0x2729, 0x274b}, {0x274d, 0x274d}, + {0x274f, 0x2752}, {0x2756, 0x2756}, {0x2758, 0x275e}, {0x2761, 0x2767}, + {0x2794, 0x2794}, {0x2798, 0x27af}, {0x27b1, 0x27be}, {0x27d0, 0x27e5}, + {0x27f0, 0x2982}, {0x2999, 0x29d7}, {0x29dc, 0x29fb}, {0x29fe, 0x2b0d}, + {0x2e80, 0x2e99}, {0x2e9b, 0x2ef3}, {0x2f00, 0x2fd5}, {0x2ff0, 0x2ffb}, + {0x3004, 0x3004}, {0x3012, 0x3013}, {0x3020, 0x3020}, {0x3036, 0x3037}, + {0x303e, 0x303f}, {0x309b, 0x309c}, {0x3190, 0x3191}, {0x3196, 0x319f}, + {0x3200, 0x321e}, {0x322a, 0x3243}, {0x3250, 0x3250}, {0x3260, 0x327d}, + {0x327f, 0x327f}, {0x328a, 0x32b0}, {0x32c0, 0x32fe}, {0x3300, 0x33ff}, + {0x4dc0, 0x4dff}, {0xa490, 0xa4c6}, {0xfb29, 0xfb29}, {0xfdfc, 0xfdfd}, + {0xfe62, 0xfe62}, {0xfe64, 0xfe66}, {0xfe69, 0xfe69}, {0xff04, 0xff04}, + {0xff0b, 0xff0b}, {0xff1c, 0xff1e}, {0xff3e, 0xff3e}, {0xff40, 0xff40}, + {0xff5c, 0xff5c}, {0xff5e, 0xff5e}, {0xffe0, 0xffe6}, {0xffe8, 0xffee}, {0xfffc, 0xfffd} }; -static const xmlChLRange xmlSL[] = {{0x10102, 0x10102}, {0x10137, 0x1013f}, - {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126}, {0x1d12a, 0x1d164}, - {0x1d16a, 0x1d16c}, {0x1d183, 0x1d184}, {0x1d18c, 0x1d1a9}, - {0x1d1ae, 0x1d1dd}, {0x1d300, 0x1d356}, {0x1d6c1, 0x1d6c1}, - {0x1d6db, 0x1d6db}, {0x1d6fb, 0x1d6fb}, {0x1d715, 0x1d715}, - {0x1d735, 0x1d735}, {0x1d74f, 0x1d74f}, {0x1d76f, 0x1d76f}, +static const xmlChLRange xmlSL[] = {{0x10102, 0x10102}, {0x10137, 0x1013f}, + {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126}, {0x1d12a, 0x1d164}, + {0x1d16a, 0x1d16c}, {0x1d183, 0x1d184}, {0x1d18c, 0x1d1a9}, + {0x1d1ae, 0x1d1dd}, {0x1d300, 0x1d356}, {0x1d6c1, 0x1d6c1}, + {0x1d6db, 0x1d6db}, {0x1d6fb, 0x1d6fb}, {0x1d715, 0x1d715}, + {0x1d735, 0x1d735}, {0x1d74f, 0x1d74f}, {0x1d76f, 0x1d76f}, {0x1d789, 0x1d789}, {0x1d7a9, 0x1d7a9}, {0x1d7c3, 0x1d7c3} }; static xmlChRangeGroup xmlSG = {133,20,xmlSS,xmlSL}; -static const xmlChSRange xmlScS[] = {{0x24, 0x24}, {0xa2, 0xa5}, - {0x9f2, 0x9f3}, {0xaf1, 0xaf1}, {0xbf9, 0xbf9}, {0xe3f, 0xe3f}, - {0x17db, 0x17db}, {0x20a0, 0x20b1}, {0xfdfc, 0xfdfc}, {0xfe69, 0xfe69}, +static const xmlChSRange xmlScS[] = {{0x24, 0x24}, {0xa2, 0xa5}, + {0x9f2, 0x9f3}, {0xaf1, 0xaf1}, {0xbf9, 0xbf9}, {0xe3f, 0xe3f}, + {0x17db, 0x17db}, {0x20a0, 0x20b1}, {0xfdfc, 0xfdfc}, {0xfe69, 0xfe69}, {0xff04, 0xff04}, {0xffe0, 0xffe1}, {0xffe5, 0xffe6} }; static xmlChRangeGroup xmlScG = {13,0,xmlScS,NULL}; -static const xmlChSRange xmlSkS[] = {{0x5e, 0x5e}, {0x60, 0x60}, - {0xa8, 0xa8}, {0xaf, 0xaf}, {0xb4, 0xb4}, {0xb8, 0xb8}, {0x2c2, 0x2c5}, - {0x2d2, 0x2df}, {0x2e5, 0x2ed}, {0x2ef, 0x2ff}, {0x374, 0x375}, - {0x384, 0x385}, {0x1fbd, 0x1fbd}, {0x1fbf, 0x1fc1}, {0x1fcd, 0x1fcf}, - {0x1fdd, 0x1fdf}, {0x1fed, 0x1fef}, {0x1ffd, 0x1ffe}, {0x309b, 0x309c}, +static const xmlChSRange xmlSkS[] = {{0x5e, 0x5e}, {0x60, 0x60}, + {0xa8, 0xa8}, {0xaf, 0xaf}, {0xb4, 0xb4}, {0xb8, 0xb8}, {0x2c2, 0x2c5}, + {0x2d2, 0x2df}, {0x2e5, 0x2ed}, {0x2ef, 0x2ff}, {0x374, 0x375}, + {0x384, 0x385}, {0x1fbd, 0x1fbd}, {0x1fbf, 0x1fc1}, {0x1fcd, 0x1fcf}, + {0x1fdd, 0x1fdf}, {0x1fed, 0x1fef}, {0x1ffd, 0x1ffe}, {0x309b, 0x309c}, {0xff3e, 0xff3e}, {0xff40, 0xff40}, {0xffe3, 0xffe3} }; static xmlChRangeGroup xmlSkG = {22,0,xmlSkS,NULL}; -static const xmlChSRange xmlSmS[] = {{0x2b, 0x2b}, {0x3c, 0x3e}, - {0x7c, 0x7c}, {0x7e, 0x7e}, {0xac, 0xac}, {0xb1, 0xb1}, {0xd7, 0xd7}, - {0xf7, 0xf7}, {0x3f6, 0x3f6}, {0x2044, 0x2044}, {0x2052, 0x2052}, - {0x207a, 0x207c}, {0x208a, 0x208c}, {0x2140, 0x2144}, {0x214b, 0x214b}, - {0x2190, 0x2194}, {0x219a, 0x219b}, {0x21a0, 0x21a0}, {0x21a3, 0x21a3}, - {0x21a6, 0x21a6}, {0x21ae, 0x21ae}, {0x21ce, 0x21cf}, {0x21d2, 0x21d2}, - {0x21d4, 0x21d4}, {0x21f4, 0x22ff}, {0x2308, 0x230b}, {0x2320, 0x2321}, - {0x237c, 0x237c}, {0x239b, 0x23b3}, {0x25b7, 0x25b7}, {0x25c1, 0x25c1}, - {0x25f8, 0x25ff}, {0x266f, 0x266f}, {0x27d0, 0x27e5}, {0x27f0, 0x27ff}, - {0x2900, 0x2982}, {0x2999, 0x29d7}, {0x29dc, 0x29fb}, {0x29fe, 0x2aff}, - {0xfb29, 0xfb29}, {0xfe62, 0xfe62}, {0xfe64, 0xfe66}, {0xff0b, 0xff0b}, - {0xff1c, 0xff1e}, {0xff5c, 0xff5c}, {0xff5e, 0xff5e}, {0xffe2, 0xffe2}, +static const xmlChSRange xmlSmS[] = {{0x2b, 0x2b}, {0x3c, 0x3e}, + {0x7c, 0x7c}, {0x7e, 0x7e}, {0xac, 0xac}, {0xb1, 0xb1}, {0xd7, 0xd7}, + {0xf7, 0xf7}, {0x3f6, 0x3f6}, {0x2044, 0x2044}, {0x2052, 0x2052}, + {0x207a, 0x207c}, {0x208a, 0x208c}, {0x2140, 0x2144}, {0x214b, 0x214b}, + {0x2190, 0x2194}, {0x219a, 0x219b}, {0x21a0, 0x21a0}, {0x21a3, 0x21a3}, + {0x21a6, 0x21a6}, {0x21ae, 0x21ae}, {0x21ce, 0x21cf}, {0x21d2, 0x21d2}, + {0x21d4, 0x21d4}, {0x21f4, 0x22ff}, {0x2308, 0x230b}, {0x2320, 0x2321}, + {0x237c, 0x237c}, {0x239b, 0x23b3}, {0x25b7, 0x25b7}, {0x25c1, 0x25c1}, + {0x25f8, 0x25ff}, {0x266f, 0x266f}, {0x27d0, 0x27e5}, {0x27f0, 0x27ff}, + {0x2900, 0x2982}, {0x2999, 0x29d7}, {0x29dc, 0x29fb}, {0x29fe, 0x2aff}, + {0xfb29, 0xfb29}, {0xfe62, 0xfe62}, {0xfe64, 0xfe66}, {0xff0b, 0xff0b}, + {0xff1c, 0xff1e}, {0xff5c, 0xff5c}, {0xff5e, 0xff5e}, {0xffe2, 0xffe2}, {0xffe9, 0xffec} }; -static const xmlChLRange xmlSmL[] = {{0x1d6c1, 0x1d6c1}, {0x1d6db, 0x1d6db}, - {0x1d6fb, 0x1d6fb}, {0x1d715, 0x1d715}, {0x1d735, 0x1d735}, - {0x1d74f, 0x1d74f}, {0x1d76f, 0x1d76f}, {0x1d789, 0x1d789}, +static const xmlChLRange xmlSmL[] = {{0x1d6c1, 0x1d6c1}, {0x1d6db, 0x1d6db}, + {0x1d6fb, 0x1d6fb}, {0x1d715, 0x1d715}, {0x1d735, 0x1d735}, + {0x1d74f, 0x1d74f}, {0x1d76f, 0x1d76f}, {0x1d789, 0x1d789}, {0x1d7a9, 0x1d7a9}, {0x1d7c3, 0x1d7c3} }; static xmlChRangeGroup xmlSmG = {48,10,xmlSmS,xmlSmL}; -static const xmlChSRange xmlSoS[] = {{0xa6, 0xa7}, {0xa9, 0xa9}, - {0xae, 0xae}, {0xb0, 0xb0}, {0xb6, 0xb6}, {0x482, 0x482}, - {0x60e, 0x60f}, {0x6e9, 0x6e9}, {0x6fd, 0x6fe}, {0x9fa, 0x9fa}, - {0xb70, 0xb70}, {0xbf3, 0xbf8}, {0xbfa, 0xbfa}, {0xf01, 0xf03}, - {0xf13, 0xf17}, {0xf1a, 0xf1f}, {0xf34, 0xf34}, {0xf36, 0xf36}, - {0xf38, 0xf38}, {0xfbe, 0xfc5}, {0xfc7, 0xfcc}, {0xfcf, 0xfcf}, - {0x1940, 0x1940}, {0x19e0, 0x19ff}, {0x2100, 0x2101}, {0x2103, 0x2106}, - {0x2108, 0x2109}, {0x2114, 0x2114}, {0x2116, 0x2118}, {0x211e, 0x2123}, - {0x2125, 0x2125}, {0x2127, 0x2127}, {0x2129, 0x2129}, {0x212e, 0x212e}, - {0x2132, 0x2132}, {0x213a, 0x213b}, {0x214a, 0x214a}, {0x2195, 0x2199}, - {0x219c, 0x219f}, {0x21a1, 0x21a2}, {0x21a4, 0x21a5}, {0x21a7, 0x21ad}, - {0x21af, 0x21cd}, {0x21d0, 0x21d1}, {0x21d3, 0x21d3}, {0x21d5, 0x21f3}, - {0x2300, 0x2307}, {0x230c, 0x231f}, {0x2322, 0x2328}, {0x232b, 0x237b}, - {0x237d, 0x239a}, {0x23b7, 0x23d0}, {0x2400, 0x2426}, {0x2440, 0x244a}, - {0x249c, 0x24e9}, {0x2500, 0x25b6}, {0x25b8, 0x25c0}, {0x25c2, 0x25f7}, - {0x2600, 0x2617}, {0x2619, 0x266e}, {0x2670, 0x267d}, {0x2680, 0x2691}, - {0x26a0, 0x26a1}, {0x2701, 0x2704}, {0x2706, 0x2709}, {0x270c, 0x2727}, - {0x2729, 0x274b}, {0x274d, 0x274d}, {0x274f, 0x2752}, {0x2756, 0x2756}, - {0x2758, 0x275e}, {0x2761, 0x2767}, {0x2794, 0x2794}, {0x2798, 0x27af}, - {0x27b1, 0x27be}, {0x2800, 0x28ff}, {0x2b00, 0x2b0d}, {0x2e80, 0x2e99}, - {0x2e9b, 0x2ef3}, {0x2f00, 0x2fd5}, {0x2ff0, 0x2ffb}, {0x3004, 0x3004}, - {0x3012, 0x3013}, {0x3020, 0x3020}, {0x3036, 0x3037}, {0x303e, 0x303f}, - {0x3190, 0x3191}, {0x3196, 0x319f}, {0x3200, 0x321e}, {0x322a, 0x3243}, - {0x3250, 0x3250}, {0x3260, 0x327d}, {0x327f, 0x327f}, {0x328a, 0x32b0}, - {0x32c0, 0x32fe}, {0x3300, 0x33ff}, {0x4dc0, 0x4dff}, {0xa490, 0xa4c6}, - {0xfdfd, 0xfdfd}, {0xffe4, 0xffe4}, {0xffe8, 0xffe8}, {0xffed, 0xffee}, +static const xmlChSRange xmlSoS[] = {{0xa6, 0xa7}, {0xa9, 0xa9}, + {0xae, 0xae}, {0xb0, 0xb0}, {0xb6, 0xb6}, {0x482, 0x482}, + {0x60e, 0x60f}, {0x6e9, 0x6e9}, {0x6fd, 0x6fe}, {0x9fa, 0x9fa}, + {0xb70, 0xb70}, {0xbf3, 0xbf8}, {0xbfa, 0xbfa}, {0xf01, 0xf03}, + {0xf13, 0xf17}, {0xf1a, 0xf1f}, {0xf34, 0xf34}, {0xf36, 0xf36}, + {0xf38, 0xf38}, {0xfbe, 0xfc5}, {0xfc7, 0xfcc}, {0xfcf, 0xfcf}, + {0x1940, 0x1940}, {0x19e0, 0x19ff}, {0x2100, 0x2101}, {0x2103, 0x2106}, + {0x2108, 0x2109}, {0x2114, 0x2114}, {0x2116, 0x2118}, {0x211e, 0x2123}, + {0x2125, 0x2125}, {0x2127, 0x2127}, {0x2129, 0x2129}, {0x212e, 0x212e}, + {0x2132, 0x2132}, {0x213a, 0x213b}, {0x214a, 0x214a}, {0x2195, 0x2199}, + {0x219c, 0x219f}, {0x21a1, 0x21a2}, {0x21a4, 0x21a5}, {0x21a7, 0x21ad}, + {0x21af, 0x21cd}, {0x21d0, 0x21d1}, {0x21d3, 0x21d3}, {0x21d5, 0x21f3}, + {0x2300, 0x2307}, {0x230c, 0x231f}, {0x2322, 0x2328}, {0x232b, 0x237b}, + {0x237d, 0x239a}, {0x23b7, 0x23d0}, {0x2400, 0x2426}, {0x2440, 0x244a}, + {0x249c, 0x24e9}, {0x2500, 0x25b6}, {0x25b8, 0x25c0}, {0x25c2, 0x25f7}, + {0x2600, 0x2617}, {0x2619, 0x266e}, {0x2670, 0x267d}, {0x2680, 0x2691}, + {0x26a0, 0x26a1}, {0x2701, 0x2704}, {0x2706, 0x2709}, {0x270c, 0x2727}, + {0x2729, 0x274b}, {0x274d, 0x274d}, {0x274f, 0x2752}, {0x2756, 0x2756}, + {0x2758, 0x275e}, {0x2761, 0x2767}, {0x2794, 0x2794}, {0x2798, 0x27af}, + {0x27b1, 0x27be}, {0x2800, 0x28ff}, {0x2b00, 0x2b0d}, {0x2e80, 0x2e99}, + {0x2e9b, 0x2ef3}, {0x2f00, 0x2fd5}, {0x2ff0, 0x2ffb}, {0x3004, 0x3004}, + {0x3012, 0x3013}, {0x3020, 0x3020}, {0x3036, 0x3037}, {0x303e, 0x303f}, + {0x3190, 0x3191}, {0x3196, 0x319f}, {0x3200, 0x321e}, {0x322a, 0x3243}, + {0x3250, 0x3250}, {0x3260, 0x327d}, {0x327f, 0x327f}, {0x328a, 0x32b0}, + {0x32c0, 0x32fe}, {0x3300, 0x33ff}, {0x4dc0, 0x4dff}, {0xa490, 0xa4c6}, + {0xfdfd, 0xfdfd}, {0xffe4, 0xffe4}, {0xffe8, 0xffe8}, {0xffed, 0xffee}, {0xfffc, 0xfffd} }; -static const xmlChLRange xmlSoL[] = {{0x10102, 0x10102}, {0x10137, 0x1013f}, - {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126}, {0x1d12a, 0x1d164}, - {0x1d16a, 0x1d16c}, {0x1d183, 0x1d184}, {0x1d18c, 0x1d1a9}, +static const xmlChLRange xmlSoL[] = {{0x10102, 0x10102}, {0x10137, 0x1013f}, + {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126}, {0x1d12a, 0x1d164}, + {0x1d16a, 0x1d16c}, {0x1d183, 0x1d184}, {0x1d18c, 0x1d1a9}, {0x1d1ae, 0x1d1dd}, {0x1d300, 0x1d356} }; static xmlChRangeGroup xmlSoG = {103,10,xmlSoS,xmlSoL}; -static const xmlChSRange xmlZS[] = {{0x20, 0x20}, {0xa0, 0xa0}, - {0x1680, 0x1680}, {0x180e, 0x180e}, {0x2000, 0x200a}, {0x2028, 0x2029}, +static const xmlChSRange xmlZS[] = {{0x20, 0x20}, {0xa0, 0xa0}, + {0x1680, 0x1680}, {0x180e, 0x180e}, {0x2000, 0x200a}, {0x2028, 0x2029}, {0x202f, 0x202f}, {0x205f, 0x205f}, {0x3000, 0x3000} }; static xmlChRangeGroup xmlZG = {9,0,xmlZS,NULL}; @@ -961,7 +961,7 @@ static xmlIntFunc else low = mid + 1; } - return (NULL); + return (NULL); } /** diff --git a/lib/3rdparty/libxml2/xmlwriter.c b/lib/3rdparty/libxml2/xmlwriter.c index 11b15e03571..d3f29f8e602 100644 --- a/lib/3rdparty/libxml2/xmlwriter.c +++ b/lib/3rdparty/libxml2/xmlwriter.c @@ -21,6 +21,10 @@ #include +#include "buf.h" +#include "enc.h" +#include "save.h" + #define B64LINELEN 72 #define B64CRLF "\r\n" @@ -548,9 +552,9 @@ xmlTextWriterStartDocument(xmlTextWriterPtr writer, const char *version, writer->out->encoder = encoder; if (encoder != NULL) { if (writer->out->conv == NULL) { - writer->out->conv = xmlBufferCreateSize(4000); + writer->out->conv = xmlBufCreateSize(4000); } - xmlCharEncOutFunc(encoder, writer->out->conv, NULL); + xmlCharEncOutput(writer->out, 1); if ((writer->doc != NULL) && (writer->doc->encoding == NULL)) writer->doc->encoding = xmlStrdup((xmlChar *)writer->out->encoder->name); } else @@ -1074,10 +1078,10 @@ xmlTextWriterStartElementNS(xmlTextWriterPtr writer, sum += count; if (namespaceURI != 0) { - xmlTextWriterNsStackEntry *p = (xmlTextWriterNsStackEntry *) + xmlTextWriterNsStackEntry *p = (xmlTextWriterNsStackEntry *) xmlMalloc(sizeof(xmlTextWriterNsStackEntry)); if (p == 0) { - xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, + xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, "xmlTextWriterStartElementNS : out of memory!\n"); return -1; } @@ -1501,8 +1505,8 @@ xmlTextWriterWriteString(xmlTextWriterPtr writer, const xmlChar * content) break; case XML_TEXTWRITER_ATTRIBUTE: buf = NULL; - xmlAttrSerializeTxtContent(writer->out->buffer, writer->doc, - NULL, content); + xmlBufAttrSerializeTxtContent(writer->out->buffer, + writer->doc, NULL, content); break; default: break; @@ -1663,7 +1667,7 @@ xmlTextWriterWriteBase64(xmlTextWriterPtr writer, const char *data, * Write hqx encoded data to an xmlOutputBuffer. * ::todo * - * Returns the bytes written (may be 0 because of buffering) + * Returns the bytes written (may be 0 because of buffering) * or -1 in case of error */ static int @@ -1672,8 +1676,8 @@ xmlOutputBufferWriteBinHex(xmlOutputBufferPtr out, { int count; int sum; - static char hex[16] = - {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; + static char hex[16] = + {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; int i; if ((out == NULL) || (data == NULL) || (len < 0)) { @@ -1849,7 +1853,7 @@ xmlTextWriterStartAttributeNS(xmlTextWriterPtr writer, nsentry.uri = (xmlChar *)namespaceURI; nsentry.elem = xmlListFront(writer->nodes); - curns = (xmlTextWriterNsStackEntry *)xmlListSearch(writer->nsstack, + curns = (xmlTextWriterNsStackEntry *)xmlListSearch(writer->nsstack, (void *)&nsentry); if ((curns != NULL)) { xmlFree(buf); @@ -2496,8 +2500,8 @@ xmlTextWriterEndPI(xmlTextWriterPtr writer) if (writer->indent) { count = xmlOutputBufferWriteString(writer->out, "\n"); - if (count < 0) - return -1; + if (count < 0) + return -1; sum += count; } @@ -4605,6 +4609,26 @@ xmlTextWriterSetIndentString(xmlTextWriterPtr writer, const xmlChar * str) return 0; } +/** + * xmlTextWriterSetQuoteChar: + * @writer: the xmlTextWriterPtr + * @quotechar: the quote character + * + * Set the character used for quoting attributes. + * + * Returns -1 on error or 0 otherwise. + */ +int +xmlTextWriterSetQuoteChar(xmlTextWriterPtr writer, xmlChar quotechar) +{ + if ((writer == NULL) || ((quotechar != '\'') && (quotechar != '"'))) + return -1; + + writer->qchar = quotechar; + + return 0; +} + /** * xmlTextWriterWriteIndent: * @writer: the xmlTextWriterPtr diff --git a/lib/3rdparty/libxml2/xpath.c b/lib/3rdparty/libxml2/xpath.c index 4d6826d7779..9a82e9091a3 100644 --- a/lib/3rdparty/libxml2/xpath.c +++ b/lib/3rdparty/libxml2/xpath.c @@ -55,6 +55,8 @@ #include #endif +#include "buf.h" + #ifdef LIBXML_PATTERN_ENABLED #define XPATH_STREAMING #endif @@ -64,6 +66,15 @@ "Unimplemented block at %s:%d\n", \ __FILE__, __LINE__); +/** + * WITH_TIM_SORT: + * + * Use the Timsort algorithm provided in timsort.h to sort + * nodeset as this is a great improvement over the old Shell sort + * used in xmlXPathNodeSetSort() + */ +#define WITH_TIM_SORT + /* * XP_OPTIMIZED_NON_ELEM_COMPARISON: * If defined, this will use xmlXPathCmpNodesExt() instead of @@ -89,6 +100,34 @@ */ /* #define XP_DEBUG_OBJ_USAGE */ +/* + * XPATH_MAX_STEPS: + * when compiling an XPath expression we arbitrary limit the maximum + * number of step operation in the compiled expression. 1000000 is + * an insanely large value which should never be reached under normal + * circumstances + */ +#define XPATH_MAX_STEPS 1000000 + +/* + * XPATH_MAX_STACK_DEPTH: + * when evaluating an XPath expression we arbitrary limit the maximum + * number of object allowed to be pushed on the stack. 1000000 is + * an insanely large value which should never be reached under normal + * circumstances + */ +#define XPATH_MAX_STACK_DEPTH 1000000 + +/* + * XPATH_MAX_NODESET_LENGTH: + * when evaluating an XPath expression nodesets are created and we + * arbitrary limit the maximum length of those node set. 10000000 is + * an insanely large value which should never be reached under normal + * circumstances, one would first need to construct an in memory tree + * with more than 10 millions nodes. + */ +#define XPATH_MAX_NODESET_LENGTH 10000000 + /* * TODO: * There are a few spots where some tests are done which depend upon ascii @@ -96,6 +135,42 @@ * any use of the macros IS_ASCII_CHARACTER and IS_ASCII_DIGIT) */ +/* + * Wrapper for the Timsort argorithm from timsort.h + */ +#ifdef WITH_TIM_SORT +#define SORT_NAME libxml_domnode +#define SORT_TYPE xmlNodePtr +/** + * wrap_cmp: + * @x: a node + * @y: another node + * + * Comparison function for the Timsort implementation + * + * Returns -2 in case of error -1 if first point < second point, 0 if + * it's the same node, +1 otherwise + */ +static +int wrap_cmp( xmlNodePtr x, xmlNodePtr y ); +#ifdef XP_OPTIMIZED_NON_ELEM_COMPARISON + static int xmlXPathCmpNodesExt(xmlNodePtr, xmlNodePtr); + static int wrap_cmp( xmlNodePtr x, xmlNodePtr y ) + { + int res = xmlXPathCmpNodesExt(x, y); + return res == -2 ? res : -res; + } +#else + static int wrap_cmp( xmlNodePtr x, xmlNodePtr y ) + { + int res = xmlXPathCmpNodes(x, y); + return res == -2 ? res : -res; + } +#endif +#define SORT_CMP(x, y) (wrap_cmp(x, y)) +#include "timsort.h" +#endif /* WITH_TIM_SORT */ + #if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) /************************************************************************ @@ -252,6 +327,8 @@ static const char *xmlXPathErrorMessages[] = { "Encoding error\n", "Char out of XML range\n", "Invalid or incomplete context\n", + "Stack usage errror\n", + "Forbidden variable\n", "?? Unknown error ??\n" /* Must be last in the list! */ }; #define MAXERRNO ((int)(sizeof(xmlXPathErrorMessages) / \ @@ -419,8 +496,7 @@ xmlPointerListAddSize(xmlPointerListPtr list, if (list->items == NULL) { if (initialSize <= 0) initialSize = 1; - list->items = (void **) xmlMalloc( - initialSize * sizeof(void *)); + list->items = (void **) xmlMalloc(initialSize * sizeof(void *)); if (list->items == NULL) { xmlXPathErrMemory(NULL, "xmlPointerListCreate: allocating item\n"); @@ -429,12 +505,17 @@ xmlPointerListAddSize(xmlPointerListPtr list, list->number = 0; list->size = initialSize; } else if (list->size <= list->number) { + if (list->size > 50000000) { + xmlXPathErrMemory(NULL, + "xmlPointerListAddSize: re-allocating item\n"); + return(-1); + } list->size *= 2; list->items = (void **) xmlRealloc(list->items, list->size * sizeof(void *)); if (list->items == NULL) { xmlXPathErrMemory(NULL, - "xmlPointerListCreate: re-allocating item\n"); + "xmlPointerListAddSize: re-allocating item\n"); list->size = 0; return(-1); } @@ -552,8 +633,6 @@ typedef enum { NODE_TYPE_PI = XML_PI_NODE } xmlXPathTypeVal; -#define XP_REWRITE_DOS_CHILD_ELEM 1 - typedef struct _xmlXPathStepOp xmlXPathStepOp; typedef xmlXPathStepOp *xmlXPathStepOpPtr; struct _xmlXPathStepOp { @@ -567,7 +646,6 @@ struct _xmlXPathStepOp { void *value5; void *cache; void *cacheURI; - int rewriteType; }; struct _xmlXPathCompExpr { @@ -722,6 +800,10 @@ xmlXPathCompExprAdd(xmlXPathCompExprPtr comp, int ch1, int ch2, if (comp->nbStep >= comp->maxStep) { xmlXPathStepOp *real; + if (comp->maxStep >= XPATH_MAX_STEPS) { + xmlXPathErrMemory(NULL, "adding step\n"); + return(-1); + } comp->maxStep *= 2; real = (xmlXPathStepOp *) xmlRealloc(comp->steps, comp->maxStep * sizeof(xmlXPathStepOp)); @@ -733,7 +815,6 @@ xmlXPathCompExprAdd(xmlXPathCompExprPtr comp, int ch1, int ch2, comp->steps = real; } comp->last = comp->nbStep; - comp->steps[comp->nbStep].rewriteType = 0; comp->steps[comp->nbStep].ch1 = ch1; comp->steps[comp->nbStep].ch2 = ch2; comp->steps[comp->nbStep].op = op; @@ -2051,6 +2132,11 @@ xmlXPathCacheNewNodeSet(xmlXPathContextPtr ctxt, xmlNodePtr val) ret->type = XPATH_NODESET; ret->boolval = 0; ret->nodesetval = xmlXPathNodeSetCreate(val); + if (ret->nodesetval == NULL) { + ctxt->lastError.domain = XML_FROM_XPATH; + ctxt->lastError.code = XML_ERR_NO_MEMORY; + return(NULL); + } #ifdef XP_DEBUG_OBJ_USAGE xmlXPathDebugObjUsageRequested(ctxt, XPATH_NODESET); #endif @@ -2397,6 +2483,42 @@ xmlXPathCacheConvertNumber(xmlXPathContextPtr ctxt, xmlXPathObjectPtr val) { * * ************************************************************************/ +/** + * xmlXPathSetFrame: + * @ctxt: an XPath parser context + * + * Set the callee evaluation frame + * + * Returns the previous frame value to be restored once done + */ +static int +xmlXPathSetFrame(xmlXPathParserContextPtr ctxt) { + int ret; + + if (ctxt == NULL) + return(0); + ret = ctxt->valueFrame; + ctxt->valueFrame = ctxt->valueNr; + return(ret); +} + +/** + * xmlXPathPopFrame: + * @ctxt: an XPath parser context + * @frame: the previous frame value + * + * Remove the callee evaluation frame + */ +static void +xmlXPathPopFrame(xmlXPathParserContextPtr ctxt, int frame) { + if (ctxt == NULL) + return; + if (ctxt->valueNr < ctxt->valueFrame) { + xmlXPatherror(ctxt, __FILE__, __LINE__, XPATH_STACK_ERROR); + } + ctxt->valueFrame = frame; +} + /** * valuePop: * @ctxt: an XPath evaluation context @@ -2412,6 +2534,12 @@ valuePop(xmlXPathParserContextPtr ctxt) if ((ctxt == NULL) || (ctxt->valueNr <= 0)) return (NULL); + + if (ctxt->valueNr <= ctxt->valueFrame) { + xmlXPatherror(ctxt, __FILE__, __LINE__, XPATH_STACK_ERROR); + return (NULL); + } + ctxt->valueNr--; if (ctxt->valueNr > 0) ctxt->value = ctxt->valueTab[ctxt->valueNr - 1]; @@ -2437,11 +2565,17 @@ valuePush(xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr value) if (ctxt->valueNr >= ctxt->valueMax) { xmlXPathObjectPtr *tmp; + if (ctxt->valueMax >= XPATH_MAX_STACK_DEPTH) { + xmlXPathErrMemory(NULL, "XPath stack depth limit reached\n"); + ctxt->error = XPATH_MEMORY_ERROR; + return (0); + } tmp = (xmlXPathObjectPtr *) xmlRealloc(ctxt->valueTab, 2 * ctxt->valueMax * sizeof(ctxt->valueTab[0])); if (tmp == NULL) { - xmlGenericError(xmlGenericErrorContext, "realloc failed !\n"); + xmlXPathErrMemory(NULL, "pushing value\n"); + ctxt->error = XPATH_MEMORY_ERROR; return (0); } ctxt->valueMax *= 2; @@ -3276,13 +3410,19 @@ turtle_comparison: */ void xmlXPathNodeSetSort(xmlNodeSetPtr set) { +#ifndef WITH_TIM_SORT int i, j, incr, len; xmlNodePtr tmp; +#endif if (set == NULL) return; - /* Use Shell's sort to sort the node-set */ +#ifndef WITH_TIM_SORT + /* + * Use the old Shell's sort implementation to sort the node-set + * Timsort ought to be quite faster + */ len = set->nodeNr; for (incr = len / 2; incr > 0; incr /= 2) { for (i = incr; i < len; i++) { @@ -3305,6 +3445,9 @@ xmlXPathNodeSetSort(xmlNodeSetPtr set) { } } } +#else /* WITH_TIM_SORT */ + libxml_domnode_tim_sort(set->nodeTab, set->nodeNr); +#endif /* WITH_TIM_SORT */ } #define XML_NODESET_DEFAULT 10 @@ -3483,8 +3626,10 @@ xmlXPathNodeSetContains (xmlNodeSetPtr cur, xmlNodePtr val) { * @ns: a the namespace node * * add a new namespace node to an existing NodeSet + * + * Returns 0 in case of success and -1 in case of error */ -void +int xmlXPathNodeSetAddNs(xmlNodeSetPtr cur, xmlNodePtr node, xmlNsPtr ns) { int i; @@ -3492,7 +3637,7 @@ xmlXPathNodeSetAddNs(xmlNodeSetPtr cur, xmlNodePtr node, xmlNsPtr ns) { if ((cur == NULL) || (ns == NULL) || (node == NULL) || (ns->type != XML_NAMESPACE_DECL) || (node->type != XML_ELEMENT_NODE)) - return; + return(-1); /* @@ with_ns to check whether namespace nodes should be looked at @@ */ /* @@ -3503,7 +3648,7 @@ xmlXPathNodeSetAddNs(xmlNodeSetPtr cur, xmlNodePtr node, xmlNsPtr ns) { (cur->nodeTab[i]->type == XML_NAMESPACE_DECL) && (((xmlNsPtr)cur->nodeTab[i])->next == (xmlNsPtr) node) && (xmlStrEqual(ns->prefix, ((xmlNsPtr)cur->nodeTab[i])->prefix))) - return; + return(0); } /* @@ -3514,7 +3659,7 @@ xmlXPathNodeSetAddNs(xmlNodeSetPtr cur, xmlNodePtr node, xmlNsPtr ns) { sizeof(xmlNodePtr)); if (cur->nodeTab == NULL) { xmlXPathErrMemory(NULL, "growing nodeset\n"); - return; + return(-1); } memset(cur->nodeTab, 0 , XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr)); @@ -3522,16 +3667,21 @@ xmlXPathNodeSetAddNs(xmlNodeSetPtr cur, xmlNodePtr node, xmlNsPtr ns) { } else if (cur->nodeNr == cur->nodeMax) { xmlNodePtr *temp; - cur->nodeMax *= 2; - temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax * + if (cur->nodeMax >= XPATH_MAX_NODESET_LENGTH) { + xmlXPathErrMemory(NULL, "growing nodeset hit limit\n"); + return(-1); + } + temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax * 2 * sizeof(xmlNodePtr)); if (temp == NULL) { xmlXPathErrMemory(NULL, "growing nodeset\n"); - return; + return(-1); } + cur->nodeMax *= 2; cur->nodeTab = temp; } cur->nodeTab[cur->nodeNr++] = xmlXPathNodeSetDupNs(node, ns); + return(0); } /** @@ -3540,24 +3690,21 @@ xmlXPathNodeSetAddNs(xmlNodeSetPtr cur, xmlNodePtr node, xmlNsPtr ns) { * @val: a new xmlNodePtr * * add a new xmlNodePtr to an existing NodeSet + * + * Returns 0 in case of success, and -1 in case of error */ -void +int xmlXPathNodeSetAdd(xmlNodeSetPtr cur, xmlNodePtr val) { int i; - if ((cur == NULL) || (val == NULL)) return; - -#if 0 - if ((val->type == XML_ELEMENT_NODE) && (val->name[0] == ' ')) - return; /* an XSLT fake node */ -#endif + if ((cur == NULL) || (val == NULL)) return(-1); /* @@ with_ns to check whether namespace nodes should be looked at @@ */ /* * prevent duplcates */ for (i = 0;i < cur->nodeNr;i++) - if (cur->nodeTab[i] == val) return; + if (cur->nodeTab[i] == val) return(0); /* * grow the nodeTab if needed @@ -3567,7 +3714,7 @@ xmlXPathNodeSetAdd(xmlNodeSetPtr cur, xmlNodePtr val) { sizeof(xmlNodePtr)); if (cur->nodeTab == NULL) { xmlXPathErrMemory(NULL, "growing nodeset\n"); - return; + return(-1); } memset(cur->nodeTab, 0 , XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr)); @@ -3575,13 +3722,17 @@ xmlXPathNodeSetAdd(xmlNodeSetPtr cur, xmlNodePtr val) { } else if (cur->nodeNr == cur->nodeMax) { xmlNodePtr *temp; - cur->nodeMax *= 2; - temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax * + if (cur->nodeMax >= XPATH_MAX_NODESET_LENGTH) { + xmlXPathErrMemory(NULL, "growing nodeset hit limit\n"); + return(-1); + } + temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax * 2 * sizeof(xmlNodePtr)); if (temp == NULL) { xmlXPathErrMemory(NULL, "growing nodeset\n"); - return; + return(-1); } + cur->nodeMax *= 2; cur->nodeTab = temp; } if (val->type == XML_NAMESPACE_DECL) { @@ -3591,6 +3742,7 @@ xmlXPathNodeSetAdd(xmlNodeSetPtr cur, xmlNodePtr val) { xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns); } else cur->nodeTab[cur->nodeNr++] = val; + return(0); } /** @@ -3600,15 +3752,12 @@ xmlXPathNodeSetAdd(xmlNodeSetPtr cur, xmlNodePtr val) { * * add a new xmlNodePtr to an existing NodeSet, optimized version * when we are sure the node is not already in the set. + * + * Returns 0 in case of success and -1 in case of failure */ -void +int xmlXPathNodeSetAddUnique(xmlNodeSetPtr cur, xmlNodePtr val) { - if ((cur == NULL) || (val == NULL)) return; - -#if 0 - if ((val->type == XML_ELEMENT_NODE) && (val->name[0] == ' ')) - return; /* an XSLT fake node */ -#endif + if ((cur == NULL) || (val == NULL)) return(-1); /* @@ with_ns to check whether namespace nodes should be looked at @@ */ /* @@ -3619,7 +3768,7 @@ xmlXPathNodeSetAddUnique(xmlNodeSetPtr cur, xmlNodePtr val) { sizeof(xmlNodePtr)); if (cur->nodeTab == NULL) { xmlXPathErrMemory(NULL, "growing nodeset\n"); - return; + return(-1); } memset(cur->nodeTab, 0 , XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr)); @@ -3627,14 +3776,18 @@ xmlXPathNodeSetAddUnique(xmlNodeSetPtr cur, xmlNodePtr val) { } else if (cur->nodeNr == cur->nodeMax) { xmlNodePtr *temp; - cur->nodeMax *= 2; - temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax * + if (cur->nodeMax >= XPATH_MAX_NODESET_LENGTH) { + xmlXPathErrMemory(NULL, "growing nodeset hit limit\n"); + return(-1); + } + temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax * 2 * sizeof(xmlNodePtr)); if (temp == NULL) { xmlXPathErrMemory(NULL, "growing nodeset\n"); - return; + return(-1); } cur->nodeTab = temp; + cur->nodeMax *= 2; } if (val->type == XML_NAMESPACE_DECL) { xmlNsPtr ns = (xmlNsPtr) val; @@ -3643,6 +3796,7 @@ xmlXPathNodeSetAddUnique(xmlNodeSetPtr cur, xmlNodePtr val) { xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns); } else cur->nodeTab[cur->nodeNr++] = val; + return(0); } /** @@ -3738,14 +3892,18 @@ xmlXPathNodeSetMerge(xmlNodeSetPtr val1, xmlNodeSetPtr val2) { } else if (val1->nodeNr == val1->nodeMax) { xmlNodePtr *temp; - val1->nodeMax *= 2; - temp = (xmlNodePtr *) xmlRealloc(val1->nodeTab, val1->nodeMax * + if (val1->nodeMax >= XPATH_MAX_NODESET_LENGTH) { + xmlXPathErrMemory(NULL, "merging nodeset hit limit\n"); + return(NULL); + } + temp = (xmlNodePtr *) xmlRealloc(val1->nodeTab, val1->nodeMax * 2 * sizeof(xmlNodePtr)); if (temp == NULL) { xmlXPathErrMemory(NULL, "merging nodeset\n"); return(NULL); } val1->nodeTab = temp; + val1->nodeMax *= 2; } if (n2->type == XML_NAMESPACE_DECL) { xmlNsPtr ns = (xmlNsPtr) n2; @@ -3759,68 +3917,6 @@ xmlXPathNodeSetMerge(xmlNodeSetPtr val1, xmlNodeSetPtr val2) { return(val1); } -#if 0 /* xmlXPathNodeSetMergeUnique() is currently not used anymore */ -/** - * xmlXPathNodeSetMergeUnique: - * @val1: the first NodeSet or NULL - * @val2: the second NodeSet - * - * Merges two nodesets, all nodes from @val2 are added to @val1 - * if @val1 is NULL, a new set is created and copied from @val2 - * - * Returns @val1 once extended or NULL in case of error. - */ -static xmlNodeSetPtr -xmlXPathNodeSetMergeUnique(xmlNodeSetPtr val1, xmlNodeSetPtr val2) { - int i; - - if (val2 == NULL) return(val1); - if (val1 == NULL) { - val1 = xmlXPathNodeSetCreate(NULL); - } - if (val1 == NULL) - return (NULL); - - /* @@ with_ns to check whether namespace nodes should be looked at @@ */ - - for (i = 0;i < val2->nodeNr;i++) { - /* - * grow the nodeTab if needed - */ - if (val1->nodeMax == 0) { - val1->nodeTab = (xmlNodePtr *) xmlMalloc(XML_NODESET_DEFAULT * - sizeof(xmlNodePtr)); - if (val1->nodeTab == NULL) { - xmlXPathErrMemory(NULL, "merging nodeset\n"); - return(NULL); - } - memset(val1->nodeTab, 0 , - XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr)); - val1->nodeMax = XML_NODESET_DEFAULT; - } else if (val1->nodeNr == val1->nodeMax) { - xmlNodePtr *temp; - - val1->nodeMax *= 2; - temp = (xmlNodePtr *) xmlRealloc(val1->nodeTab, val1->nodeMax * - sizeof(xmlNodePtr)); - if (temp == NULL) { - xmlXPathErrMemory(NULL, "merging nodeset\n"); - return(NULL); - } - val1->nodeTab = temp; - } - if (val2->nodeTab[i]->type == XML_NAMESPACE_DECL) { - xmlNsPtr ns = (xmlNsPtr) val2->nodeTab[i]; - - val1->nodeTab[val1->nodeNr++] = - xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns); - } else - val1->nodeTab[val1->nodeNr++] = val2->nodeTab[i]; - } - - return(val1); -} -#endif /* xmlXPathNodeSetMergeUnique() is currently not used anymore */ /** * xmlXPathNodeSetMergeAndClear: @@ -3907,14 +4003,18 @@ xmlXPathNodeSetMergeAndClear(xmlNodeSetPtr set1, xmlNodeSetPtr set2, } else if (set1->nodeNr >= set1->nodeMax) { xmlNodePtr *temp; - set1->nodeMax *= 2; + if (set1->nodeMax >= XPATH_MAX_NODESET_LENGTH) { + xmlXPathErrMemory(NULL, "merging nodeset hit limit\n"); + return(NULL); + } temp = (xmlNodePtr *) xmlRealloc( - set1->nodeTab, set1->nodeMax * sizeof(xmlNodePtr)); + set1->nodeTab, set1->nodeMax * 2 * sizeof(xmlNodePtr)); if (temp == NULL) { xmlXPathErrMemory(NULL, "merging nodeset\n"); return(NULL); } set1->nodeTab = temp; + set1->nodeMax *= 2; } if (n2->type == XML_NAMESPACE_DECL) { xmlNsPtr ns = (xmlNsPtr) n2; @@ -3991,14 +4091,18 @@ xmlXPathNodeSetMergeAndClearNoDupls(xmlNodeSetPtr set1, xmlNodeSetPtr set2, } else if (set1->nodeNr >= set1->nodeMax) { xmlNodePtr *temp; - set1->nodeMax *= 2; + if (set1->nodeMax >= XPATH_MAX_NODESET_LENGTH) { + xmlXPathErrMemory(NULL, "merging nodeset hit limit\n"); + return(NULL); + } temp = (xmlNodePtr *) xmlRealloc( - set1->nodeTab, set1->nodeMax * sizeof(xmlNodePtr)); + set1->nodeTab, set1->nodeMax * 2 * sizeof(xmlNodePtr)); if (temp == NULL) { xmlXPathErrMemory(NULL, "merging nodeset\n"); return(NULL); } set1->nodeTab = temp; + set1->nodeMax *= 2; } set1->nodeTab[set1->nodeNr++] = n2; } @@ -4289,9 +4393,12 @@ xmlXPathNewNodeSetList(xmlNodeSetPtr val) ret = xmlXPathNewNodeSet(NULL); else { ret = xmlXPathNewNodeSet(val->nodeTab[0]); - if (ret) - for (i = 1; i < val->nodeNr; ++i) - xmlXPathNodeSetAddUnique(ret->nodesetval, val->nodeTab[i]); + if (ret) { + for (i = 1; i < val->nodeNr; ++i) { + if (xmlXPathNodeSetAddUnique(ret->nodesetval, val->nodeTab[i]) + < 0) break; + } + } } return (ret); @@ -4367,8 +4474,10 @@ xmlXPathDifference (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) { for (i = 0; i < l1; i++) { cur = xmlXPathNodeSetItem(nodes1, i); - if (!xmlXPathNodeSetContains(nodes2, cur)) - xmlXPathNodeSetAddUnique(ret, cur); + if (!xmlXPathNodeSetContains(nodes2, cur)) { + if (xmlXPathNodeSetAddUnique(ret, cur) < 0) + break; + } } return(ret); } @@ -4401,8 +4510,10 @@ xmlXPathIntersection (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) { for (i = 0; i < l1; i++) { cur = xmlXPathNodeSetItem(nodes1, i); - if (xmlXPathNodeSetContains(nodes2, cur)) - xmlXPathNodeSetAddUnique(ret, cur); + if (xmlXPathNodeSetContains(nodes2, cur)) { + if (xmlXPathNodeSetAddUnique(ret, cur) < 0) + break; + } } return(ret); } @@ -4438,7 +4549,8 @@ xmlXPathDistinctSorted (xmlNodeSetPtr nodes) { strval = xmlXPathCastNodeToString(cur); if (xmlHashLookup(hash, strval) == NULL) { xmlHashAddEntry(hash, strval, strval); - xmlXPathNodeSetAddUnique(ret, cur); + if (xmlXPathNodeSetAddUnique(ret, cur) < 0) + break; } else { xmlFree(strval); } @@ -4530,7 +4642,8 @@ xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes, xmlNodePtr node) { cur = xmlXPathNodeSetItem(nodes, i); if (cur == node) break; - xmlXPathNodeSetAddUnique(ret, cur); + if (xmlXPathNodeSetAddUnique(ret, cur) < 0) + break; } return(ret); } @@ -4634,7 +4747,8 @@ xmlXPathNodeTrailingSorted (xmlNodeSetPtr nodes, xmlNodePtr node) { cur = xmlXPathNodeSetItem(nodes, i); if (cur == node) break; - xmlXPathNodeSetAddUnique(ret, cur); + if (xmlXPathNodeSetAddUnique(ret, cur) < 0) + break; } xmlXPathNodeSetSort(ret); /* bug 413451 */ return(ret); @@ -6154,6 +6268,7 @@ xmlXPathCompParserContext(xmlXPathCompExprPtr comp, xmlXPathContextPtr ctxt) { ret->valueNr = 0; ret->valueMax = 10; ret->value = NULL; + ret->valueFrame = 0; ret->context = ctxt; ret->comp = comp; @@ -7656,6 +7771,7 @@ xmlXPathNextChildElement(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { return(NULL); } +#if 0 /** * xmlXPathNextDescendantOrSelfElemParent: * @ctxt: the XPath Parser context @@ -7683,7 +7799,7 @@ xmlXPathNextDescendantOrSelfElemParent(xmlNodePtr cur, #ifdef LIBXML_DOCB_ENABLED case XML_DOCB_DOCUMENT_NODE: #endif - case XML_HTML_DOCUMENT_NODE: + case XML_HTML_DOCUMENT_NODE: return(contextNode); default: return(NULL); @@ -7731,6 +7847,7 @@ next_sibling: } return(NULL); } +#endif /** * xmlXPathNextDescendant: @@ -7758,6 +7875,8 @@ xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { return(ctxt->context->node->children); } + if (cur->type == XML_NAMESPACE_DECL) + return(NULL); if (cur->children != NULL) { /* * Do not descend on entities declarations @@ -8140,6 +8259,10 @@ xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { static int xmlXPathIsAncestor(xmlNodePtr ancestor, xmlNodePtr node) { if ((ancestor == NULL) || (node == NULL)) return(0); + if (node->type == XML_NAMESPACE_DECL) + return(0); + if (ancestor->type == XML_NAMESPACE_DECL) + return(0); /* nodes need to be in the same document */ if (ancestor->doc != node->doc) return(0); /* avoid searching if ancestor or node is the root node */ @@ -8177,7 +8300,7 @@ xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) if (cur->type == XML_ATTRIBUTE_NODE) return(cur->parent); } - if (cur == NULL) + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) return (NULL); if ((cur->prev != NULL) && (cur->prev->type == XML_DTD_NODE)) cur = cur->prev; @@ -8224,6 +8347,8 @@ xmlXPathNextPrecedingInternal(xmlXPathParserContextPtr ctxt, return (NULL); ctxt->ancestor = cur->parent; } + if (cur->type == XML_NAMESPACE_DECL) + return(NULL); if ((cur->prev != NULL) && (cur->prev->type == XML_DTD_NODE)) cur = cur->prev; while (cur->prev == NULL) { @@ -8431,7 +8556,7 @@ xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs) { int i = 0; tmp = cur->nodesetval->nodeTab[0]; - if (tmp != NULL) { + if ((tmp != NULL) && (tmp->type != XML_NAMESPACE_DECL)) { tmp = tmp->children; while (tmp != NULL) { tmp = tmp->next; @@ -9101,7 +9226,7 @@ void xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs) { xmlXPathObjectPtr str; xmlXPathObjectPtr find; - xmlBufferPtr target; + xmlBufPtr target; const xmlChar *point; int offset; @@ -9111,16 +9236,16 @@ xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs) { CAST_TO_STRING; str = valuePop(ctxt); - target = xmlBufferCreate(); + target = xmlBufCreate(); if (target) { point = xmlStrstr(str->stringval, find->stringval); if (point) { offset = (int)(point - str->stringval); - xmlBufferAdd(target, str->stringval, offset); + xmlBufAdd(target, str->stringval, offset); } valuePush(ctxt, xmlXPathCacheNewString(ctxt->context, - xmlBufferContent(target))); - xmlBufferFree(target); + xmlBufContent(target))); + xmlBufFree(target); } xmlXPathReleaseObject(ctxt->context, str); xmlXPathReleaseObject(ctxt->context, find); @@ -9144,7 +9269,7 @@ void xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs) { xmlXPathObjectPtr str; xmlXPathObjectPtr find; - xmlBufferPtr target; + xmlBufPtr target; const xmlChar *point; int offset; @@ -9154,17 +9279,17 @@ xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs) { CAST_TO_STRING; str = valuePop(ctxt); - target = xmlBufferCreate(); + target = xmlBufCreate(); if (target) { point = xmlStrstr(str->stringval, find->stringval); if (point) { offset = (int)(point - str->stringval) + xmlStrlen(find->stringval); - xmlBufferAdd(target, &str->stringval[offset], + xmlBufAdd(target, &str->stringval[offset], xmlStrlen(str->stringval) - offset); } valuePush(ctxt, xmlXPathCacheNewString(ctxt->context, - xmlBufferContent(target))); - xmlBufferFree(target); + xmlBufContent(target))); + xmlBufFree(target); } xmlXPathReleaseObject(ctxt->context, str); xmlXPathReleaseObject(ctxt->context, find); @@ -9188,7 +9313,7 @@ void xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs) { xmlXPathObjectPtr obj = NULL; xmlChar *source = NULL; - xmlBufferPtr target; + xmlBufPtr target; xmlChar blank; if (ctxt == NULL) return; @@ -9206,7 +9331,7 @@ xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs) { obj = valuePop(ctxt); source = obj->stringval; - target = xmlBufferCreate(); + target = xmlBufCreate(); if (target && source) { /* Skip leading whitespaces */ @@ -9220,16 +9345,16 @@ xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs) { blank = 0x20; } else { if (blank) { - xmlBufferAdd(target, &blank, 1); + xmlBufAdd(target, &blank, 1); blank = 0; } - xmlBufferAdd(target, source, 1); + xmlBufAdd(target, source, 1); } source++; } valuePush(ctxt, xmlXPathCacheNewString(ctxt->context, - xmlBufferContent(target))); - xmlBufferFree(target); + xmlBufContent(target))); + xmlBufFree(target); } xmlXPathReleaseObject(ctxt->context, obj); } @@ -9260,7 +9385,7 @@ xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs) { xmlXPathObjectPtr str; xmlXPathObjectPtr from; xmlXPathObjectPtr to; - xmlBufferPtr target; + xmlBufPtr target; int offset, max; xmlChar ch; const xmlChar *point; @@ -9275,7 +9400,7 @@ xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs) { CAST_TO_STRING; str = valuePop(ctxt); - target = xmlBufferCreate(); + target = xmlBufCreate(); if (target) { max = xmlUTF8Strlen(to->stringval); for (cptr = str->stringval; (ch=*cptr); ) { @@ -9284,10 +9409,10 @@ xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs) { if (offset < max) { point = xmlUTF8Strpos(to->stringval, offset); if (point) - xmlBufferAdd(target, point, xmlUTF8Strsize(point, 1)); + xmlBufAdd(target, point, xmlUTF8Strsize(point, 1)); } } else - xmlBufferAdd(target, cptr, xmlUTF8Strsize(cptr, 1)); + xmlBufAdd(target, cptr, xmlUTF8Strsize(cptr, 1)); /* Step to next character in input */ cptr++; @@ -9296,6 +9421,7 @@ xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs) { if ( (ch & 0xc0) != 0xc0 ) { xmlGenericError(xmlGenericErrorContext, "xmlXPathTranslateFunction: Invalid UTF8 string\n"); + /* not asserting an XPath error is probably better */ break; } /* then skip over remaining bytes for this char */ @@ -9303,6 +9429,7 @@ xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs) { if ( (*cptr++ & 0xc0) != 0x80 ) { xmlGenericError(xmlGenericErrorContext, "xmlXPathTranslateFunction: Invalid UTF8 string\n"); + /* not asserting an XPath error is probably better */ break; } if (ch & 0x80) /* must have had error encountered */ @@ -9311,8 +9438,8 @@ xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs) { } } valuePush(ctxt, xmlXPathCacheNewString(ctxt->context, - xmlBufferContent(target))); - xmlBufferFree(target); + xmlBufContent(target))); + xmlBufFree(target); xmlXPathReleaseObject(ctxt->context, str); xmlXPathReleaseObject(ctxt->context, from); xmlXPathReleaseObject(ctxt->context, to); @@ -9819,7 +9946,7 @@ xmlChar * xmlXPathParseName(xmlXPathParserContextPtr ctxt) { const xmlChar *in; xmlChar *ret; - int count = 0; + size_t count = 0; if ((ctxt == NULL) || (ctxt->cur == NULL)) return(NULL); /* @@ -9838,6 +9965,10 @@ xmlXPathParseName(xmlXPathParserContextPtr ctxt) { in++; if ((*in > 0) && (*in < 0x80)) { count = in - ctxt->cur; + if (count > XML_MAX_NAME_LENGTH) { + ctxt->cur = in; + XP_ERRORNULL(XPATH_EXPR_ERROR); + } ret = xmlStrndup(ctxt->cur, count); ctxt->cur = in; return(ret); @@ -9881,6 +10012,9 @@ xmlXPathParseNameComplex(xmlXPathParserContextPtr ctxt, int qualified) { xmlChar *buffer; int max = len * 2; + if (len > XML_MAX_NAME_LENGTH) { + XP_ERRORNULL(XPATH_EXPR_ERROR); + } buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar)); if (buffer == NULL) { XP_ERRORNULL(XPATH_MEMORY_ERROR); @@ -9892,6 +10026,9 @@ xmlXPathParseNameComplex(xmlXPathParserContextPtr ctxt, int qualified) { (IS_COMBINING(c)) || (IS_EXTENDER(c))) { if (len + 10 > max) { + if (max > XML_MAX_NAME_LENGTH) { + XP_ERRORNULL(XPATH_EXPR_ERROR); + } max *= 2; buffer = (xmlChar *) xmlRealloc(buffer, max * sizeof(xmlChar)); @@ -10044,7 +10181,6 @@ static void xmlXPathCompNumber(xmlXPathParserContextPtr ctxt) { double ret = 0.0; - double mult = 1; int ok = 0; int exponent = 0; int is_exponent_negative = 0; @@ -10245,7 +10381,7 @@ xmlXPathCompVariableReference(xmlXPathParserContextPtr ctxt) { name, prefix); SKIP_BLANKS; if ((ctxt->context != NULL) && (ctxt->context->flags & XML_XPATH_NOVAR)) { - XP_ERROR(XPATH_UNDEF_VARIABLE_ERROR); + XP_ERROR(XPATH_FORBID_VARIABLE_ERROR); } } @@ -11609,9 +11745,13 @@ xmlXPathCompOpEvalPredicate(xmlXPathParserContextPtr ctxt, */ if (contextObj == NULL) contextObj = xmlXPathCacheNewNodeSet(xpctxt, contextNode); - else - xmlXPathNodeSetAddUnique(contextObj->nodesetval, - contextNode); + else { + if (xmlXPathNodeSetAddUnique(contextObj->nodesetval, + contextNode) < 0) { + ctxt->error = XPATH_MEMORY_ERROR; + goto evaluation_exit; + } + } valuePush(ctxt, contextObj); @@ -11712,6 +11852,7 @@ xmlXPathCompOpEvalPositionalPredicate(xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr contextObj = NULL, exprRes = NULL; xmlNodePtr oldContextNode, contextNode = NULL; xmlXPathContextPtr xpctxt = ctxt->context; + int frame; #ifdef LIBXML_XPTR_ENABLED /* @@ -11731,6 +11872,8 @@ xmlXPathCompOpEvalPositionalPredicate(xmlXPathParserContextPtr ctxt, */ exprOp = &ctxt->comp->steps[op->ch2]; for (i = 0; i < set->nodeNr; i++) { + xmlXPathObjectPtr tmp; + if (set->nodeTab[i] == NULL) continue; @@ -11754,22 +11897,33 @@ xmlXPathCompOpEvalPositionalPredicate(xmlXPathParserContextPtr ctxt, */ if (contextObj == NULL) contextObj = xmlXPathCacheNewNodeSet(xpctxt, contextNode); - else - xmlXPathNodeSetAddUnique(contextObj->nodesetval, - contextNode); + else { + if (xmlXPathNodeSetAddUnique(contextObj->nodesetval, + contextNode) < 0) { + ctxt->error = XPATH_MEMORY_ERROR; + goto evaluation_exit; + } + } + frame = xmlXPathSetFrame(ctxt); valuePush(ctxt, contextObj); res = xmlXPathCompOpEvalToBoolean(ctxt, exprOp, 1); + tmp = valuePop(ctxt); + xmlXPathPopFrame(ctxt, frame); if ((ctxt->error != XPATH_EXPRESSION_OK) || (res == -1)) { - xmlXPathObjectPtr tmp; - /* pop the result */ - tmp = valuePop(ctxt); - xmlXPathReleaseObject(xpctxt, tmp); - /* then pop off contextObj, which will be freed later */ - valuePop(ctxt); + while (tmp != contextObj) { + /* + * Free up the result + * then pop off contextObj, which will be freed later + */ + xmlXPathReleaseObject(xpctxt, tmp); + tmp = valuePop(ctxt); + } goto evaluation_error; } + /* push the result back onto the stack */ + valuePush(ctxt, tmp); if (res) pos++; @@ -11921,22 +12075,25 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt, #define XP_TEST_HIT \ if (hasAxisRange != 0) { \ if (++pos == maxPos) { \ - addNode(seq, cur); \ - goto axis_range_end; } \ + if (addNode(seq, cur) < 0) \ + ctxt->error = XPATH_MEMORY_ERROR; \ + goto axis_range_end; } \ } else { \ - addNode(seq, cur); \ + if (addNode(seq, cur) < 0) \ + ctxt->error = XPATH_MEMORY_ERROR; \ if (breakOnFirstHit) goto first_hit; } #define XP_TEST_HIT_NS \ if (hasAxisRange != 0) { \ if (++pos == maxPos) { \ hasNsNodes = 1; \ - xmlXPathNodeSetAddNs(seq, xpctxt->node, (xmlNsPtr) cur); \ + if (xmlXPathNodeSetAddNs(seq, xpctxt->node, (xmlNsPtr) cur) < 0) \ + ctxt->error = XPATH_MEMORY_ERROR; \ goto axis_range_end; } \ } else { \ hasNsNodes = 1; \ - xmlXPathNodeSetAddNs(seq, \ - xpctxt->node, (xmlNsPtr) cur); \ + if (xmlXPathNodeSetAddNs(seq, xpctxt->node, (xmlNsPtr) cur) < 0) \ + ctxt->error = XPATH_MEMORY_ERROR; \ if (breakOnFirstHit) goto first_hit; } xmlXPathAxisVal axis = (xmlXPathAxisVal) op->value; @@ -11956,8 +12113,6 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt, xmlNodeSetPtr contextSeq; int contextIdx; xmlNodePtr contextNode; - /* The context node for a compound traversal */ - xmlNodePtr outerContextNode; /* The final resulting node set wrt to all context nodes */ xmlNodeSetPtr outSeq; /* @@ -11973,9 +12128,7 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt, int breakOnFirstHit; xmlXPathTraversalFunction next = NULL; - /* compound axis traversal */ - xmlXPathTraversalFunctionExt outerNext = NULL; - void (*addNode) (xmlNodeSetPtr, xmlNodePtr); + int (*addNode) (xmlNodeSetPtr, xmlNodePtr); xmlXPathNodeSetMergeFunction mergeAndClear; xmlNodePtr oldContextNode; xmlXPathContextPtr xpctxt = ctxt->context; @@ -12024,13 +12177,6 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt, break; case AXIS_CHILD: last = NULL; - if (op->rewriteType == XP_REWRITE_DOS_CHILD_ELEM) { - /* - * This iterator will give us only nodes which can - * hold element nodes. - */ - outerNext = xmlXPathNextDescendantOrSelfElemParent; - } if (((test == NODE_TEST_NAME) || (test == NODE_TEST_ALL)) && (type == NODE_TYPE_NODE)) { @@ -12160,32 +12306,13 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt, addNode = xmlXPathNodeSetAddUnique; outSeq = NULL; seq = NULL; - outerContextNode = NULL; contextNode = NULL; contextIdx = 0; - while ((contextIdx < contextSeq->nodeNr) || (contextNode != NULL)) { - if (outerNext != NULL) { - /* - * This is a compound traversal. - */ - if (contextNode == NULL) { - /* - * Set the context for the outer traversal. - */ - outerContextNode = contextSeq->nodeTab[contextIdx++]; - contextNode = outerNext(NULL, outerContextNode); - } else - contextNode = outerNext(contextNode, outerContextNode); - if (contextNode == NULL) - continue; - /* - * Set the context for the main traversal. - */ - xpctxt->node = contextNode; - } else - xpctxt->node = contextSeq->nodeTab[contextIdx++]; + while (((contextIdx < contextSeq->nodeNr) || (contextNode != NULL)) && + (ctxt->error == XPATH_EXPRESSION_OK)) { + xpctxt->node = contextSeq->nodeTab[contextIdx++]; if (seq == NULL) { seq = xmlXPathNodeSetCreate(NULL); @@ -12383,7 +12510,7 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt, } break; } /* switch(test) */ - } while (cur != NULL); + } while ((cur != NULL) && (ctxt->error == XPATH_EXPRESSION_OK)); goto apply_predicates; @@ -12424,13 +12551,16 @@ first_hit: /* ---------------------------------------------------------- */ #endif apply_predicates: /* --------------------------------------------------- */ + if (ctxt->error != XPATH_EXPRESSION_OK) + goto error; + /* * Apply predicates. */ if ((predOp != NULL) && (seq->nodeNr > 0)) { /* * E.g. when we have a "/foo[some expression][n]". - */ + */ /* * QUESTION TODO: The old predicate evaluation took into * account location-sets. @@ -12439,7 +12569,7 @@ apply_predicates: /* --------------------------------------------------- */ * All what I learned now from the evaluation semantics * does not indicate that a location-set will be processed * here, so this looks OK. - */ + */ /* * Iterate over all predicates, starting with the outermost * predicate. @@ -12932,8 +13062,10 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt, tmp = xmlXPathCacheNewNodeSet(ctxt->context, ctxt->context->node); } else { - xmlXPathNodeSetAddUnique(tmp->nodesetval, - ctxt->context->node); + if (xmlXPathNodeSetAddUnique(tmp->nodesetval, + ctxt->context->node) < 0) { + ctxt->error = XPATH_MEMORY_ERROR; + } } valuePush(ctxt, tmp); if (op->ch2 != -1) @@ -13046,8 +13178,10 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt, tmp = xmlXPathCacheNewNodeSet(ctxt->context, ctxt->context->node); } else { - xmlXPathNodeSetAddUnique(tmp->nodesetval, - ctxt->context->node); + if (xmlXPathNodeSetAddUnique(tmp->nodesetval, + ctxt->context->node) < 0) { + ctxt->error = XPATH_MEMORY_ERROR; + } } valuePush(ctxt, tmp); ctxt->context->contextSize = oldset->nodeNr; @@ -13065,7 +13199,8 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt, */ res = valuePop(ctxt); if (xmlXPathEvaluatePredicateResult(ctxt, res)) { - xmlXPathNodeSetAdd(newset, oldset->nodeTab[i]); + if (xmlXPathNodeSetAdd(newset, oldset->nodeTab[i]) < 0) + ctxt->error = XPATH_MEMORY_ERROR; } /* * Cleanup @@ -13357,6 +13492,7 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op) xmlGenericError(xmlGenericErrorContext, "xmlXPathCompOpEval: variable %s bound to undefined prefix %s\n", (char *) op->value4, (char *)op->value5); + ctxt->error = XPATH_UNDEF_PREFIX_ERROR; return (total); } val = xmlXPathVariableLookupNS(ctxt->context, @@ -13373,7 +13509,9 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op) xmlXPathFunction func; const xmlChar *oldFunc, *oldFuncURI; int i; + int frame; + frame = xmlXPathSetFrame(ctxt); if (op->ch1 != -1) total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]); @@ -13381,15 +13519,18 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op) xmlGenericError(xmlGenericErrorContext, "xmlXPathCompOpEval: parameter error\n"); ctxt->error = XPATH_INVALID_OPERAND; + xmlXPathPopFrame(ctxt, frame); return (total); } - for (i = 0; i < op->value; i++) + for (i = 0; i < op->value; i++) { if (ctxt->valueTab[(ctxt->valueNr - 1) - i] == NULL) { xmlGenericError(xmlGenericErrorContext, "xmlXPathCompOpEval: parameter error\n"); ctxt->error = XPATH_INVALID_OPERAND; + xmlXPathPopFrame(ctxt, frame); return (total); } + } if (op->cache != NULL) XML_CAST_FPTR(func) = op->cache; else { @@ -13405,6 +13546,8 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op) xmlGenericError(xmlGenericErrorContext, "xmlXPathCompOpEval: function %s bound to undefined prefix %s\n", (char *)op->value4, (char *)op->value5); + xmlXPathPopFrame(ctxt, frame); + ctxt->error = XPATH_UNDEF_PREFIX_ERROR; return (total); } func = xmlXPathFunctionLookupNS(ctxt->context, @@ -13426,6 +13569,7 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op) func(ctxt, op->value); ctxt->context->function = oldFunc; ctxt->context->functionURI = oldFuncURI; + xmlXPathPopFrame(ctxt, frame); return (total); } case XPATH_OP_ARG: @@ -13735,8 +13879,10 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op) tmp = xmlXPathCacheNewNodeSet(ctxt->context, ctxt->context->node); } else { - xmlXPathNodeSetAddUnique(tmp->nodesetval, - ctxt->context->node); + if (xmlXPathNodeSetAddUnique(tmp->nodesetval, + ctxt->context->node) < 0) { + ctxt->error = XPATH_MEMORY_ERROR; + } } valuePush(ctxt, tmp); ctxt->context->contextSize = oldset->nodeNr; @@ -13766,7 +13912,9 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op) */ res = valuePop(ctxt); if (xmlXPathEvaluatePredicateResult(ctxt, res)) { - xmlXPathNodeSetAdd(newset, oldset->nodeTab[i]); + if (xmlXPathNodeSetAdd(newset, oldset->nodeTab[i]) + < 0) + ctxt->error = XPATH_MEMORY_ERROR; } /* @@ -13982,6 +14130,7 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op) } xmlGenericError(xmlGenericErrorContext, "XPath: unknown precompiled operation %d\n", op->op); + ctxt->error = XPATH_INVALID_OPERAND; return (total); } @@ -14128,7 +14277,7 @@ xmlXPathRunStreamEval(xmlXPathContextPtr ctxt, xmlPatternPtr comp, if (toBool) return(1); xmlXPathNodeSetAddUnique((*resultSeq)->nodesetval, - (xmlNodePtr) ctxt->doc); + (xmlNodePtr) ctxt->doc); } else { /* Select "self::node()" */ if (toBool) @@ -14221,7 +14370,11 @@ next_node: } else if (ret == 1) { if (toBool) goto return_1; - xmlXPathNodeSetAddUnique((*resultSeq)->nodesetval, cur); + if (xmlXPathNodeSetAddUnique((*resultSeq)->nodesetval, cur) + < 0) { + ctxt->lastError.domain = XML_FROM_XPATH; + ctxt->lastError.code = XML_ERR_NO_MEMORY; + } } if ((cur->children == NULL) || (depth >= max_depth)) { ret = xmlStreamPop(patstream); @@ -14237,6 +14390,7 @@ next_node: } scan_children: + if (cur->type == XML_NAMESPACE_DECL) break; if ((cur->children != NULL) && (depth < max_depth)) { /* * Do not descend on entities declarations @@ -14329,6 +14483,7 @@ xmlXPathRunEval(xmlXPathParserContextPtr ctxt, int toBool) ctxt->valueNr = 0; ctxt->valueMax = 10; ctxt->value = NULL; + ctxt->valueFrame = 0; } #ifdef XPATH_STREAMING if (ctxt->comp->stream) { @@ -14556,57 +14711,63 @@ xmlXPathTryStreamCompile(xmlXPathContextPtr ctxt, const xmlChar *str) { } #endif /* XPATH_STREAMING */ -static int -xmlXPathCanRewriteDosExpression(xmlChar *expr) -{ - if (expr == NULL) - return(0); - do { - if ((*expr == '/') && (*(++expr) == '/')) - return(1); - } while (*expr++); - return(0); -} static void -xmlXPathRewriteDOSExpression(xmlXPathCompExprPtr comp, xmlXPathStepOpPtr op) +xmlXPathOptimizeExpression(xmlXPathCompExprPtr comp, xmlXPathStepOpPtr op) { /* * Try to rewrite "descendant-or-self::node()/foo" to an optimized * internal representation. */ - if (op->ch1 != -1) { - if ((op->op == XPATH_OP_COLLECT /* 11 */) && - ((xmlXPathAxisVal) op->value == AXIS_CHILD /* 4 */) && - ((xmlXPathTestVal) op->value2 == NODE_TEST_NAME /* 5 */) && - ((xmlXPathTypeVal) op->value3 == NODE_TYPE_NODE /* 0 */)) - { - /* - * This is a "child::foo" - */ - xmlXPathStepOpPtr prevop = &comp->steps[op->ch1]; - if ((prevop->op == XPATH_OP_COLLECT /* 11 */) && - (prevop->ch1 != -1) && - ((xmlXPathAxisVal) prevop->value == - AXIS_DESCENDANT_OR_SELF) && - (prevop->ch2 == -1) && - ((xmlXPathTestVal) prevop->value2 == NODE_TEST_TYPE) && - ((xmlXPathTypeVal) prevop->value3 == NODE_TYPE_NODE) && - (comp->steps[prevop->ch1].op == XPATH_OP_ROOT)) - { - /* - * This is a "/descendant-or-self::node()" without predicates. - * Eliminate it. - */ - op->ch1 = prevop->ch1; - op->rewriteType = XP_REWRITE_DOS_CHILD_ELEM; - } + if ((op->ch1 != -1) && + (op->op == XPATH_OP_COLLECT /* 11 */)) + { + xmlXPathStepOpPtr prevop = &comp->steps[op->ch1]; + + if ((prevop->op == XPATH_OP_COLLECT /* 11 */) && + ((xmlXPathAxisVal) prevop->value == + AXIS_DESCENDANT_OR_SELF) && + (prevop->ch2 == -1) && + ((xmlXPathTestVal) prevop->value2 == NODE_TEST_TYPE) && + ((xmlXPathTypeVal) prevop->value3 == NODE_TYPE_NODE)) + { + /* + * This is a "descendant-or-self::node()" without predicates. + * Try to eliminate it. + */ + + switch ((xmlXPathAxisVal) op->value) { + case AXIS_CHILD: + case AXIS_DESCENDANT: + /* + * Convert "descendant-or-self::node()/child::" or + * "descendant-or-self::node()/descendant::" to + * "descendant::" + */ + op->ch1 = prevop->ch1; + op->value = AXIS_DESCENDANT; + break; + case AXIS_SELF: + case AXIS_DESCENDANT_OR_SELF: + /* + * Convert "descendant-or-self::node()/self::" or + * "descendant-or-self::node()/descendant-or-self::" to + * to "descendant-or-self::" + */ + op->ch1 = prevop->ch1; + op->value = AXIS_DESCENDANT_OR_SELF; + break; + default: + break; + } } - if (op->ch1 != -1) - xmlXPathRewriteDOSExpression(comp, &comp->steps[op->ch1]); } + + /* Recurse */ + if (op->ch1 != -1) + xmlXPathOptimizeExpression(comp, &comp->steps[op->ch1]); if (op->ch2 != -1) - xmlXPathRewriteDOSExpression(comp, &comp->steps[op->ch2]); + xmlXPathOptimizeExpression(comp, &comp->steps[op->ch2]); } /** @@ -14664,12 +14825,8 @@ xmlXPathCtxtCompile(xmlXPathContextPtr ctxt, const xmlChar *str) { comp->string = xmlStrdup(str); comp->nb = 0; #endif - if ((comp->expr != NULL) && - (comp->nbStep > 2) && - (comp->last >= 0) && - (xmlXPathCanRewriteDosExpression(comp->expr) == 1)) - { - xmlXPathRewriteDOSExpression(comp, &comp->steps[comp->last]); + if ((comp->nbStep > 1) && (comp->last >= 0)) { + xmlXPathOptimizeExpression(comp, &comp->steps[comp->last]); } } return(comp); @@ -14846,17 +15003,12 @@ xmlXPathEvalExpr(xmlXPathParserContextPtr ctxt) { #endif { xmlXPathCompileExpr(ctxt, 1); - /* - * In this scenario the expression string will sit in ctxt->base. - */ if ((ctxt->error == XPATH_EXPRESSION_OK) && (ctxt->comp != NULL) && - (ctxt->base != NULL) && - (ctxt->comp->nbStep > 2) && - (ctxt->comp->last >= 0) && - (xmlXPathCanRewriteDosExpression((xmlChar *) ctxt->base) == 1)) + (ctxt->comp->nbStep > 1) && + (ctxt->comp->last >= 0)) { - xmlXPathRewriteDOSExpression(ctxt->comp, + xmlXPathOptimizeExpression(ctxt->comp, &ctxt->comp->steps[ctxt->comp->last]); } } @@ -15030,7 +15182,7 @@ static void xmlXPathEscapeUriFunction(xmlXPathParserContextPtr ctxt, int nargs) { xmlXPathObjectPtr str; int escape_reserved; - xmlBufferPtr target; + xmlBufPtr target; xmlChar *cptr; xmlChar escape[4]; @@ -15041,7 +15193,7 @@ xmlXPathEscapeUriFunction(xmlXPathParserContextPtr ctxt, int nargs) { CAST_TO_STRING; str = valuePop(ctxt); - target = xmlBufferCreate(); + target = xmlBufCreate(); escape[0] = '%'; escape[3] = 0; @@ -15066,7 +15218,7 @@ xmlXPathEscapeUriFunction(xmlXPathParserContextPtr ctxt, int nargs) { *cptr == ':' || *cptr == '@' || *cptr == '&' || *cptr == '=' || *cptr == '+' || *cptr == '$' || *cptr == ','))) { - xmlBufferAdd(target, cptr, 1); + xmlBufAdd(target, cptr, 1); } else { if ((*cptr >> 4) < 10) escape[1] = '0' + (*cptr >> 4); @@ -15077,13 +15229,13 @@ xmlXPathEscapeUriFunction(xmlXPathParserContextPtr ctxt, int nargs) { else escape[2] = 'A' - 10 + (*cptr & 0xF); - xmlBufferAdd(target, &escape[0], 3); + xmlBufAdd(target, &escape[0], 3); } } } valuePush(ctxt, xmlXPathCacheNewString(ctxt->context, - xmlBufferContent(target))); - xmlBufferFree(target); + xmlBufContent(target))); + xmlBufFree(target); xmlXPathReleaseObject(ctxt->context, str); } diff --git a/lib/3rdparty/libxml2/xpointer.c b/lib/3rdparty/libxml2/xpointer.c index 7a42d02e385..46f11e8d6dc 100644 --- a/lib/3rdparty/libxml2/xpointer.c +++ b/lib/3rdparty/libxml2/xpointer.c @@ -7,7 +7,7 @@ * * Added support for the element() scheme described in: * W3C Proposed Recommendation 13 November 2002 - * http://www.w3.org/TR/2002/PR-xptr-element-20021113/ + * http://www.w3.org/TR/2002/PR-xptr-element-20021113/ * * See Copyright for the status of this software. * @@ -47,19 +47,19 @@ #endif #endif -#define TODO \ +#define TODO \ xmlGenericError(xmlGenericErrorContext, \ "Unimplemented block at %s:%d\n", \ __FILE__, __LINE__); -#define STRANGE \ +#define STRANGE \ xmlGenericError(xmlGenericErrorContext, \ "Internal error at %s:%d\n", \ __FILE__, __LINE__); /************************************************************************ * * - * Some factorized error routines * + * Some factorized error routines * * * ************************************************************************/ @@ -134,7 +134,7 @@ xmlNodePtr xmlXPtrAdvanceNode(xmlNodePtr cur, int *level); static int xmlXPtrGetArity(xmlNodePtr cur) { int i; - if (cur == NULL) + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) return(-1); cur = cur->children; for (i = 0;cur != NULL;cur = cur->next) { @@ -157,7 +157,7 @@ xmlXPtrGetArity(xmlNodePtr cur) { static int xmlXPtrGetIndex(xmlNodePtr cur) { int i; - if (cur == NULL) + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) return(-1); for (i = 1;cur != NULL;cur = cur->prev) { if ((cur->type == XML_ELEMENT_NODE) || @@ -179,11 +179,11 @@ xmlXPtrGetIndex(xmlNodePtr cur) { static xmlNodePtr xmlXPtrGetNthChild(xmlNodePtr cur, int no) { int i; - if (cur == NULL) + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) return(cur); cur = cur->children; for (i = 0;i <= no;cur = cur->next) { - if (cur == NULL) + if (cur == NULL) return(cur); if ((cur->type == XML_ELEMENT_NODE) || (cur->type == XML_DOCUMENT_NODE) || @@ -553,7 +553,7 @@ xmlXPtrNewRangeNodeObject(xmlNodePtr start, xmlXPathObjectPtr end) { break; case XPATH_NODESET: /* - * Empty set ... + * Empty set ... */ if (end->nodesetval->nodeNr <= 0) return(NULL); @@ -731,7 +731,7 @@ xmlXPtrLocationSetDel(xmlLocationSetPtr cur, xmlXPathObjectPtr val) { if (i >= cur->locNr) { #ifdef DEBUG - xmlGenericError(xmlGenericErrorContext, + xmlGenericError(xmlGenericErrorContext, "xmlXPtrLocationSetDel: Range wasn't found in RangeList\n"); #endif return; @@ -903,7 +903,7 @@ static void xmlXPtrEvalChildSeq(xmlXPathParserContextPtr ctxt, xmlChar *name); #define NXT(val) ctxt->cur[(val)] #define CUR_PTR ctxt->cur -#define SKIP_BLANKS \ +#define SKIP_BLANKS \ while (IS_BLANK_CH(*(ctxt->cur))) NEXT #define CURRENT (*ctxt->cur) @@ -945,7 +945,7 @@ xmlXPtrGetChildNo(xmlXPathParserContextPtr ctxt, int indx) { * xmlXPtrEvalXPtrPart: * @ctxt: the XPointer Parser context * @name: the preparsed Scheme for the XPtrPart - * + * * XPtrPart ::= 'xpointer' '(' XPtrExpr ')' * | Scheme '(' SchemeSpecificExpr ')' * @@ -953,7 +953,7 @@ xmlXPtrGetChildNo(xmlXPathParserContextPtr ctxt, int indx) { * * SchemeSpecificExpr ::= StringWithBalancedParens * - * StringWithBalancedParens ::= + * StringWithBalancedParens ::= * [^()]* ('(' StringWithBalancedParens ')' [^()]*)* * [VC: Parenthesis escaping] * @@ -971,7 +971,7 @@ xmlXPtrGetChildNo(xmlXPathParserContextPtr ctxt, int indx) { * * Parse and evaluate an XPtrPart. Basically it generates the unescaped * string and if the scheme is 'xpointer' it will call the XPath interpreter. - * + * * TODO: there is no new scheme registration mechanism */ @@ -1007,21 +1007,14 @@ xmlXPtrEvalXPtrPart(xmlXPathParserContextPtr ctxt, xmlChar *name) { NEXT; break; } - *cur++ = CUR; } else if (CUR == '(') { level++; - *cur++ = CUR; } else if (CUR == '^') { - NEXT; - if ((CUR == ')') || (CUR == '(') || (CUR == '^')) { - *cur++ = CUR; - } else { - *cur++ = '^'; - *cur++ = CUR; - } - } else { - *cur++ = CUR; + if ((NXT(1) == ')') || (NXT(1) == '(') || (NXT(1) == '^')) { + NEXT; + } } + *cur++ = CUR; NEXT; } *cur = 0; @@ -1104,7 +1097,7 @@ xmlXPtrEvalXPtrPart(xmlXPathParserContextPtr ctxt, xmlChar *name) { xmlFree(name); XP_ERROR(XPATH_MEMORY_ERROR); } - + xmlXPathRegisterNs(ctxt->context, prefix, URI); CUR_PTR = left; xmlFree(URI); @@ -1236,7 +1229,7 @@ xmlXPtrEvalChildSeq(xmlXPathParserContextPtr ctxt, xmlChar *name) { while (CUR == '/') { int child = 0; NEXT; - + while ((CUR >= '0') && (CUR <= '9')) { child = child * 10 + (CUR - '0'); NEXT; @@ -1260,7 +1253,7 @@ static void xmlXPtrEvalXPointer(xmlXPathParserContextPtr ctxt) { if (ctxt->valueTab == NULL) { /* Allocate the value stack */ - ctxt->valueTab = (xmlXPathObjectPtr *) + ctxt->valueTab = (xmlXPathObjectPtr *) xmlMalloc(10 * sizeof(xmlXPathObjectPtr)); if (ctxt->valueTab == NULL) { xmlXPtrErrMemory("allocating evaluation context"); @@ -1269,6 +1262,7 @@ xmlXPtrEvalXPointer(xmlXPathParserContextPtr ctxt) { ctxt->valueNr = 0; ctxt->valueMax = 10; ctxt->value = NULL; + ctxt->valueFrame = 0; } SKIP_BLANKS; if (CUR == '/') { @@ -1402,13 +1396,13 @@ xmlXPtrEval(const xmlChar *str, xmlXPathContextPtr ctx) { /* * Evaluation may push a root nodeset which is unused */ - xmlNodeSetPtr set; + xmlNodeSetPtr set; set = tmp->nodesetval; if ((set->nodeNr != 1) || (set->nodeTab[0] != (xmlNodePtr) ctx->doc)) stack++; } else - stack++; + stack++; } xmlXPathFreeObject(tmp); } @@ -1422,7 +1416,7 @@ xmlXPtrEval(const xmlChar *str, xmlXPathContextPtr ctx) { xmlXPathFreeObject(res); res = NULL; } - + xmlXPathFreeParserContext(ctxt); return(res); } @@ -1450,11 +1444,13 @@ xmlXPtrBuildRangeNodeList(xmlXPathObjectPtr range) { return(NULL); start = (xmlNodePtr) range->user; - if (start == NULL) + if ((start == NULL) || (start->type == XML_NAMESPACE_DECL)) return(NULL); end = range->user2; if (end == NULL) return(xmlCopyNode(start, 1)); + if (end->type == XML_NAMESPACE_DECL) + return(NULL); cur = start; index1 = range->index; @@ -1484,7 +1480,7 @@ xmlXPtrBuildRangeNodeList(xmlXPathObjectPtr range) { /* prune and return full set */ if (last != NULL) xmlAddNextSibling(last, tmp); - else + else xmlAddChild(parent, tmp); return(list); } else { @@ -1738,7 +1734,7 @@ xmlXPtrNbLocChildren(xmlNodePtr node) { * @ctxt: the XPointer Parser context * @nargs: the number of args * - * Function implementing here() operation + * Function implementing here() operation * as described in 5.4.3 */ static void @@ -1747,7 +1743,7 @@ xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int nargs) { if (ctxt->context->here == NULL) XP_ERROR(XPTR_SYNTAX_ERROR); - + valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->here, NULL)); } @@ -1756,7 +1752,7 @@ xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int nargs) { * @ctxt: the XPointer Parser context * @nargs: the number of args * - * Function implementing origin() operation + * Function implementing origin() operation * as described in 5.4.3 */ static void @@ -1765,7 +1761,7 @@ xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, int nargs) { if (ctxt->context->origin == NULL) XP_ERROR(XPTR_SYNTAX_ERROR); - + valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->origin, NULL)); } @@ -1774,7 +1770,7 @@ xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, int nargs) { * @ctxt: the XPointer Parser context * @nargs: the number of args * - * Function implementing start-point() operation + * Function implementing start-point() operation * as described in 5.4.3 * ---------------- * location-set start-point(location-set) @@ -1866,7 +1862,7 @@ xmlXPtrStartPointFunction(xmlXPathParserContextPtr ctxt, int nargs) { * @ctxt: the XPointer Parser context * @nargs: the number of args * - * Function implementing end-point() operation + * Function implementing end-point() operation * as described in 5.4.3 * ---------------------------- * location-set end-point(location-set) @@ -2002,7 +1998,7 @@ xmlXPtrCoveringRange(xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr loc) { case XML_NOTATION_NODE: case XML_HTML_DOCUMENT_NODE: { int indx = xmlXPtrGetIndex(node); - + node = node->parent; return(xmlXPtrNewRange(node, indx - 1, node, indx + 1)); @@ -2249,7 +2245,7 @@ xmlXPtrRangeToFunction(xmlXPathParserContextPtr ctxt, int nargs) { cur = ctxt->cur; newset = xmlXPtrLocationSetCreate(NULL); - + for (i = 0; i < oldset->nodeNr; i++) { ctxt->cur = cur; @@ -2283,7 +2279,7 @@ xmlXPtrRangeToFunction(xmlXPathParserContextPtr ctxt, int nargs) { res = valuePop(ctxt); xmlXPathFreeObject(res); } - + ctxt->context->node = NULL; } @@ -2303,14 +2299,14 @@ xmlXPtrRangeToFunction(xmlXPathParserContextPtr ctxt, int nargs) { * @level: incremented/decremented to show level in tree * * Advance to the next element or text node in document order - * TODO: add a stack for entering/exiting entities + * TODO: add a stack for entering/exiting entities * * Returns -1 in case of failure, 0 otherwise */ xmlNodePtr xmlXPtrAdvanceNode(xmlNodePtr cur, int *level) { next: - if (cur == NULL) + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) return(NULL); if (cur->children != NULL) { cur = cur->children ; @@ -2368,7 +2364,7 @@ xmlXPtrAdvanceChar(xmlNodePtr *node, int *indx, int bytes) { if ((node == NULL) || (indx == NULL)) return(-1); cur = *node; - if (cur == NULL) + if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) return(-1); pos = *indx; @@ -2406,7 +2402,7 @@ xmlXPtrAdvanceChar(xmlNodePtr *node, int *indx, int bytes) { return(0); } /* - * We should have a text (or cdata) node ... + * We should have a text (or cdata) node ... */ len = 0; if ((cur->type != XML_ELEMENT_NODE) && @@ -2459,9 +2455,10 @@ xmlXPtrMatchString(const xmlChar *string, xmlNodePtr start, int startindex, if (string == NULL) return(-1); - if (start == NULL) + if ((start == NULL) || (start->type == XML_NAMESPACE_DECL)) return(-1); - if ((end == NULL) || (endindex == NULL)) + if ((end == NULL) || (*end == NULL) || + ((*end)->type == XML_NAMESPACE_DECL) || (endindex == NULL)) return(-1); cur = start; if (cur == NULL) @@ -2544,13 +2541,12 @@ xmlXPtrSearchString(const xmlChar *string, xmlNodePtr *start, int *startindex, if (string == NULL) return(-1); - if ((start == NULL) || (startindex == NULL)) + if ((start == NULL) || (*start == NULL) || + ((*start)->type == XML_NAMESPACE_DECL) || (startindex == NULL)) return(-1); if ((end == NULL) || (endindex == NULL)) return(-1); cur = *start; - if (cur == NULL) - return(-1); pos = *startindex - 1; first = string[0]; @@ -2583,7 +2579,7 @@ xmlXPtrSearchString(const xmlChar *string, xmlNodePtr *start, int *startindex, /* * An empty string is considered to match before each * character of the string-value and after the final - * character. + * character. */ #ifdef DEBUG_RANGES xmlGenericError(xmlGenericErrorContext, @@ -2624,14 +2620,12 @@ xmlXPtrGetLastChar(xmlNodePtr *node, int *indx) { xmlNodePtr cur; int pos, len = 0; - if ((node == NULL) || (indx == NULL)) + if ((node == NULL) || (*node == NULL) || + ((*node)->type == XML_NAMESPACE_DECL) || (indx == NULL)) return(-1); cur = *node; pos = *indx; - if (cur == NULL) - return(-1); - if ((cur->type == XML_ELEMENT_NODE) || (cur->type == XML_DOCUMENT_NODE) || (cur->type == XML_HTML_DOCUMENT_NODE)) { @@ -2735,7 +2729,7 @@ xmlXPtrGetEndPoint(xmlXPathObjectPtr obj, xmlNodePtr *node, int *indx) { * @nargs: the number of args * * Function implementing the string-range() function - * range as described in 5.4.2 + * range as described in 5.4.2 * * ------------------------------ * [Definition: For each location in the location-set argument, @@ -2899,7 +2893,7 @@ error: * @ctxt: the XPointer Parser context * * [8] Predicate ::= '[' PredicateExpr ']' - * [9] PredicateExpr ::= Expr + * [9] PredicateExpr ::= Expr * * Evaluate a predicate as in xmlXPathEvalPredicate() but for * a Location Set instead of a node set @@ -2948,7 +2942,7 @@ xmlXPtrEvalRangePredicate(xmlXPathParserContextPtr ctxt) { */ cur = ctxt->cur; newset = xmlXPtrLocationSetCreate(NULL); - + for (i = 0; i < oldset->locNr; i++) { ctxt->cur = cur; @@ -2984,7 +2978,7 @@ xmlXPtrEvalRangePredicate(xmlXPathParserContextPtr ctxt) { res = valuePop(ctxt); xmlXPathFreeObject(res); } - + ctxt->context->node = NULL; } diff --git a/lib/3rdparty/libxml2/xzlib.c b/lib/3rdparty/libxml2/xzlib.c new file mode 100644 index 00000000000..928bd17cb7c --- /dev/null +++ b/lib/3rdparty/libxml2/xzlib.c @@ -0,0 +1,755 @@ +/** + * xzlib.c: front end for the transparent suport of lzma compression + * at the I/O layer, based on an example file from lzma project + * + * See Copyright for the status of this software. + * + * Anders F Bjorklund + */ +#define IN_LIBXML +#include "libxml.h" +#ifdef HAVE_LZMA_H + +#include +#ifdef HAVE_ERRNO_H +#include +#endif + + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_STAT_H +#include +#endif +#ifdef HAVE_FCNTL_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_ZLIB_H +#include +#endif +#include + +#include "xzlib.h" +#include + +/* values for xz_state how */ +#define LOOK 0 /* look for a gzip/lzma header */ +#define COPY 1 /* copy input directly */ +#define GZIP 2 /* decompress a gzip stream */ +#define LZMA 3 /* decompress a lzma stream */ + +/* internal lzma file state data structure */ +typedef struct { + int mode; /* see lzma modes above */ + int fd; /* file descriptor */ + char *path; /* path or fd for error messages */ + uint64_t pos; /* current position in uncompressed data */ + unsigned int size; /* buffer size, zero if not allocated yet */ + unsigned int want; /* requested buffer size, default is BUFSIZ */ + unsigned char *in; /* input buffer */ + unsigned char *out; /* output buffer (double-sized when reading) */ + unsigned char *next; /* next output data to deliver or write */ + unsigned int have; /* amount of output data unused at next */ + int eof; /* true if end of input file reached */ + uint64_t start; /* where the lzma data started, for rewinding */ + uint64_t raw; /* where the raw data started, for seeking */ + int how; /* 0: get header, 1: copy, 2: decompress */ + int direct; /* true if last read direct, false if lzma */ + /* seek request */ + uint64_t skip; /* amount to skip (already rewound if backwards) */ + int seek; /* true if seek request pending */ + /* error information */ + int err; /* error code */ + char *msg; /* error message */ + /* lzma stream */ + int init; /* is the iniflate stream initialized */ + lzma_stream strm; /* stream structure in-place (not a pointer) */ + char padding1[32]; /* padding allowing to cope with possible + extensions of above structure without + too much side effect */ +#ifdef HAVE_ZLIB_H + /* zlib inflate or deflate stream */ + z_stream zstrm; /* stream structure in-place (not a pointer) */ +#endif + char padding2[32]; /* padding allowing to cope with possible + extensions of above structure without + too much side effect */ +} xz_state, *xz_statep; + +static void +xz_error(xz_statep state, int err, const char *msg) +{ + /* free previously allocated message and clear */ + if (state->msg != NULL) { + if (state->err != LZMA_MEM_ERROR) + xmlFree(state->msg); + state->msg = NULL; + } + + /* set error code, and if no message, then done */ + state->err = err; + if (msg == NULL) + return; + + /* for an out of memory error, save as static string */ + if (err == LZMA_MEM_ERROR) { + state->msg = (char *) msg; + return; + } + + /* construct error message with path */ + if ((state->msg = + xmlMalloc(strlen(state->path) + strlen(msg) + 3)) == NULL) { + state->err = LZMA_MEM_ERROR; + state->msg = (char *) "out of memory"; + return; + } + strcpy(state->msg, state->path); + strcat(state->msg, ": "); + strcat(state->msg, msg); + return; +} + +static void +xz_reset(xz_statep state) +{ + state->have = 0; /* no output data available */ + state->eof = 0; /* not at end of file */ + state->how = LOOK; /* look for gzip header */ + state->direct = 1; /* default for empty file */ + state->seek = 0; /* no seek request pending */ + xz_error(state, LZMA_OK, NULL); /* clear error */ + state->pos = 0; /* no uncompressed data yet */ + state->strm.avail_in = 0; /* no input data yet */ +#ifdef HAVE_ZLIB_H + state->zstrm.avail_in = 0; /* no input data yet */ +#endif +} + +static xzFile +xz_open(const char *path, int fd, const char *mode ATTRIBUTE_UNUSED) +{ + xz_statep state; + + /* allocate xzFile structure to return */ + state = xmlMalloc(sizeof(xz_state)); + if (state == NULL) + return NULL; + state->size = 0; /* no buffers allocated yet */ + state->want = BUFSIZ; /* requested buffer size */ + state->msg = NULL; /* no error message yet */ + state->init = 0; /* initialization of zlib data */ + + /* save the path name for error messages */ + state->path = xmlMalloc(strlen(path) + 1); + if (state->path == NULL) { + xmlFree(state); + return NULL; + } + strcpy(state->path, path); + + /* open the file with the appropriate mode (or just use fd) */ + state->fd = fd != -1 ? fd : open(path, +#ifdef O_LARGEFILE + O_LARGEFILE | +#endif +#ifdef O_BINARY + O_BINARY | +#endif + O_RDONLY, 0666); + if (state->fd == -1) { + xmlFree(state->path); + xmlFree(state); + return NULL; + } + + /* save the current position for rewinding (only if reading) */ + state->start = lseek(state->fd, 0, SEEK_CUR); + if (state->start == (uint64_t) - 1) + state->start = 0; + + /* initialize stream */ + xz_reset(state); + + /* return stream */ + return (xzFile) state; +} + +xzFile +__libxml2_xzopen(const char *path, const char *mode) +{ + return xz_open(path, -1, mode); +} + +xzFile +__libxml2_xzdopen(int fd, const char *mode) +{ + char *path; /* identifier for error messages */ + xzFile xz; + + if (fd == -1 || (path = xmlMalloc(7 + 3 * sizeof(int))) == NULL) + return NULL; + sprintf(path, "", fd); /* for debugging */ + xz = xz_open(path, fd, mode); + xmlFree(path); + return xz; +} + +static int +xz_load(xz_statep state, unsigned char *buf, unsigned int len, + unsigned int *have) +{ + int ret; + + *have = 0; + do { + ret = read(state->fd, buf + *have, len - *have); + if (ret <= 0) + break; + *have += ret; + } while (*have < len); + if (ret < 0) { + xz_error(state, -1, strerror(errno)); + return -1; + } + if (ret == 0) + state->eof = 1; + return 0; +} + +static int +xz_avail(xz_statep state) +{ + lzma_stream *strm = &(state->strm); + + if (state->err != LZMA_OK) + return -1; + if (state->eof == 0) { + /* avail_in is size_t, which is not necessary sizeof(unsigned) */ + unsigned tmp = strm->avail_in; + + if (xz_load(state, state->in, state->size, &tmp) == -1) { + strm->avail_in = tmp; + return -1; + } + strm->avail_in = tmp; + strm->next_in = state->in; + } + return 0; +} + +static int +is_format_xz(xz_statep state) +{ + lzma_stream *strm = &(state->strm); + + return strm->avail_in >= 6 && memcmp(state->in, "\3757zXZ", 6) == 0; +} + +static int +is_format_lzma(xz_statep state) +{ + lzma_stream *strm = &(state->strm); + + lzma_filter filter; + lzma_options_lzma *opt; + uint32_t dict_size; + uint64_t uncompressed_size; + size_t i; + + if (strm->avail_in < 13) + return 0; + + filter.id = LZMA_FILTER_LZMA1; + if (lzma_properties_decode(&filter, NULL, state->in, 5) != LZMA_OK) + return 0; + + opt = filter.options; + dict_size = opt->dict_size; + free(opt); /* we can't use xmlFree on a string returned by zlib */ + + /* A hack to ditch tons of false positives: We allow only dictionary + * sizes that are 2^n or 2^n + 2^(n-1) or UINT32_MAX. LZMA_Alone + * created only files with 2^n, but accepts any dictionary size. + * If someone complains, this will be reconsidered. + */ + if (dict_size != UINT32_MAX) { + uint32_t d = dict_size - 1; + + d |= d >> 2; + d |= d >> 3; + d |= d >> 4; + d |= d >> 8; + d |= d >> 16; + ++d; + if (d != dict_size || dict_size == 0) + return 0; + } + + /* Another hack to ditch false positives: Assume that if the + * uncompressed size is known, it must be less than 256 GiB. + * Again, if someone complains, this will be reconsidered. + */ + uncompressed_size = 0; + for (i = 0; i < 8; ++i) + uncompressed_size |= (uint64_t) (state->in[5 + i]) << (i * 8); + + if (uncompressed_size != UINT64_MAX + && uncompressed_size > (UINT64_C(1) << 38)) + return 0; + + return 1; +} + +#ifdef HAVE_ZLIB_H + +/* Get next byte from input, or -1 if end or error. */ +#define NEXT() ((strm->avail_in == 0 && xz_avail(state) == -1) ? -1 : \ + (strm->avail_in == 0 ? -1 : \ + (strm->avail_in--, *(strm->next_in)++))) + +/* Get a four-byte little-endian integer and return 0 on success and the value + in *ret. Otherwise -1 is returned and *ret is not modified. */ +static int +gz_next4(xz_statep state, unsigned long *ret) +{ + int ch; + unsigned long val; + z_streamp strm = &(state->zstrm); + + val = NEXT(); + val += (unsigned) NEXT() << 8; + val += (unsigned long) NEXT() << 16; + ch = NEXT(); + if (ch == -1) + return -1; + val += (unsigned long) ch << 24; + *ret = val; + return 0; +} +#endif + +static int +xz_head(xz_statep state) +{ + lzma_stream *strm = &(state->strm); + lzma_stream init = LZMA_STREAM_INIT; + int flags; + unsigned len; + + /* allocate read buffers and inflate memory */ + if (state->size == 0) { + /* allocate buffers */ + state->in = xmlMalloc(state->want); + state->out = xmlMalloc(state->want << 1); + if (state->in == NULL || state->out == NULL) { + if (state->out != NULL) + xmlFree(state->out); + if (state->in != NULL) + xmlFree(state->in); + xz_error(state, LZMA_MEM_ERROR, "out of memory"); + return -1; + } + state->size = state->want; + + /* allocate decoder memory */ + state->strm = init; + state->strm.avail_in = 0; + state->strm.next_in = NULL; + if (lzma_auto_decoder(&state->strm, UINT64_MAX, 0) != LZMA_OK) { + xmlFree(state->out); + xmlFree(state->in); + state->size = 0; + xz_error(state, LZMA_MEM_ERROR, "out of memory"); + return -1; + } +#ifdef HAVE_ZLIB_H + /* allocate inflate memory */ + state->zstrm.zalloc = Z_NULL; + state->zstrm.zfree = Z_NULL; + state->zstrm.opaque = Z_NULL; + state->zstrm.avail_in = 0; + state->zstrm.next_in = Z_NULL; + if (state->init == 0) { + if (inflateInit2(&(state->zstrm), -15) != Z_OK) {/* raw inflate */ + xmlFree(state->out); + xmlFree(state->in); + state->size = 0; + xz_error(state, LZMA_MEM_ERROR, "out of memory"); + return -1; + } + state->init = 1; + } +#endif + } + + /* get some data in the input buffer */ + if (strm->avail_in == 0) { + if (xz_avail(state) == -1) + return -1; + if (strm->avail_in == 0) + return 0; + } + + /* look for the xz magic header bytes */ + if (is_format_xz(state) || is_format_lzma(state)) { + state->how = LZMA; + state->direct = 0; + return 0; + } +#ifdef HAVE_ZLIB_H + /* look for the gzip magic header bytes 31 and 139 */ + if (strm->next_in[0] == 31) { + strm->avail_in--; + strm->next_in++; + if (strm->avail_in == 0 && xz_avail(state) == -1) + return -1; + if (strm->avail_in && strm->next_in[0] == 139) { + /* we have a gzip header, woo hoo! */ + strm->avail_in--; + strm->next_in++; + + /* skip rest of header */ + if (NEXT() != 8) { /* compression method */ + xz_error(state, LZMA_DATA_ERROR, + "unknown compression method"); + return -1; + } + flags = NEXT(); + if (flags & 0xe0) { /* reserved flag bits */ + xz_error(state, LZMA_DATA_ERROR, + "unknown header flags set"); + return -1; + } + NEXT(); /* modification time */ + NEXT(); + NEXT(); + NEXT(); + NEXT(); /* extra flags */ + NEXT(); /* operating system */ + if (flags & 4) { /* extra field */ + len = (unsigned) NEXT(); + len += (unsigned) NEXT() << 8; + while (len--) + if (NEXT() < 0) + break; + } + if (flags & 8) /* file name */ + while (NEXT() > 0) ; + if (flags & 16) /* comment */ + while (NEXT() > 0) ; + if (flags & 2) { /* header crc */ + NEXT(); + NEXT(); + } + /* an unexpected end of file is not checked for here -- it will be + * noticed on the first request for uncompressed data */ + + /* set up for decompression */ + inflateReset(&state->zstrm); + state->zstrm.adler = crc32(0L, Z_NULL, 0); + state->how = GZIP; + state->direct = 0; + return 0; + } else { + /* not a gzip file -- save first byte (31) and fall to raw i/o */ + state->out[0] = 31; + state->have = 1; + } + } +#endif + + /* doing raw i/o, save start of raw data for seeking, copy any leftover + * input to output -- this assumes that the output buffer is larger than + * the input buffer, which also assures space for gzungetc() */ + state->raw = state->pos; + state->next = state->out; + if (strm->avail_in) { + memcpy(state->next + state->have, strm->next_in, strm->avail_in); + state->have += strm->avail_in; + strm->avail_in = 0; + } + state->how = COPY; + state->direct = 1; + return 0; +} + +static int +xz_decomp(xz_statep state) +{ + int ret; + unsigned had; + unsigned long crc, len; + lzma_stream *strm = &(state->strm); + + lzma_action action = LZMA_RUN; + + /* fill output buffer up to end of deflate stream */ + had = strm->avail_out; + do { + /* get more input for inflate() */ + if (strm->avail_in == 0 && xz_avail(state) == -1) + return -1; + if (strm->avail_in == 0) { + xz_error(state, LZMA_DATA_ERROR, "unexpected end of file"); + return -1; + } + if (state->eof) + action = LZMA_FINISH; + + /* decompress and handle errors */ +#ifdef HAVE_ZLIB_H + if (state->how == GZIP) { + state->zstrm.avail_in = (uInt) state->strm.avail_in; + state->zstrm.next_in = (Bytef *) state->strm.next_in; + state->zstrm.avail_out = (uInt) state->strm.avail_out; + state->zstrm.next_out = (Bytef *) state->strm.next_out; + ret = inflate(&state->zstrm, Z_NO_FLUSH); + if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) { + xz_error(state, Z_STREAM_ERROR, + "internal error: inflate stream corrupt"); + return -1; + } + if (ret == Z_MEM_ERROR) + ret = LZMA_MEM_ERROR; + if (ret == Z_DATA_ERROR) + ret = LZMA_DATA_ERROR; + if (ret == Z_STREAM_END) + ret = LZMA_STREAM_END; + state->strm.avail_in = state->zstrm.avail_in; + state->strm.next_in = state->zstrm.next_in; + state->strm.avail_out = state->zstrm.avail_out; + state->strm.next_out = state->zstrm.next_out; + } else /* state->how == LZMA */ +#endif + ret = lzma_code(strm, action); + if (ret == LZMA_MEM_ERROR) { + xz_error(state, LZMA_MEM_ERROR, "out of memory"); + return -1; + } + if (ret == LZMA_DATA_ERROR) { + xz_error(state, LZMA_DATA_ERROR, "compressed data error"); + return -1; + } + } while (strm->avail_out && ret != LZMA_STREAM_END); + + /* update available output and crc check value */ + state->have = had - strm->avail_out; + state->next = strm->next_out - state->have; +#ifdef HAVE_ZLIB_H + state->zstrm.adler = + crc32(state->zstrm.adler, state->next, state->have); +#endif + + if (ret == LZMA_STREAM_END) { +#ifdef HAVE_ZLIB_H + if (state->how == GZIP) { + if (gz_next4(state, &crc) == -1 || gz_next4(state, &len) == -1) { + xz_error(state, LZMA_DATA_ERROR, "unexpected end of file"); + return -1; + } + if (crc != state->zstrm.adler) { + xz_error(state, LZMA_DATA_ERROR, "incorrect data check"); + return -1; + } + if (len != (state->zstrm.total_out & 0xffffffffL)) { + xz_error(state, LZMA_DATA_ERROR, "incorrect length check"); + return -1; + } + state->strm.avail_in = 0; + state->strm.next_in = NULL; + state->strm.avail_out = 0; + state->strm.next_out = NULL; + } else +#endif + if (strm->avail_in != 0 || !state->eof) { + xz_error(state, LZMA_DATA_ERROR, "trailing garbage"); + return -1; + } + state->how = LOOK; /* ready for next stream, once have is 0 (leave + * state->direct unchanged to remember how) */ + } + + /* good decompression */ + return 0; +} + +static int +xz_make(xz_statep state) +{ + lzma_stream *strm = &(state->strm); + + if (state->how == LOOK) { /* look for lzma / gzip header */ + if (xz_head(state) == -1) + return -1; + if (state->have) /* got some data from xz_head() */ + return 0; + } + if (state->how == COPY) { /* straight copy */ + if (xz_load(state, state->out, state->size << 1, &(state->have)) == + -1) + return -1; + state->next = state->out; + } else if (state->how == LZMA || state->how == GZIP) { /* decompress */ + strm->avail_out = state->size << 1; + strm->next_out = state->out; + if (xz_decomp(state) == -1) + return -1; + } + return 0; +} + +static int +xz_skip(xz_statep state, uint64_t len) +{ + unsigned n; + + /* skip over len bytes or reach end-of-file, whichever comes first */ + while (len) + /* skip over whatever is in output buffer */ + if (state->have) { + n = (uint64_t) state->have > len ? + (unsigned) len : state->have; + state->have -= n; + state->next += n; + state->pos += n; + len -= n; + } + + /* output buffer empty -- return if we're at the end of the input */ + else if (state->eof && state->strm.avail_in == 0) + break; + + /* need more data to skip -- load up output buffer */ + else { + /* get more output, looking for header if required */ + if (xz_make(state) == -1) + return -1; + } + return 0; +} + +int +__libxml2_xzread(xzFile file, void *buf, unsigned len) +{ + unsigned got, n; + xz_statep state; + lzma_stream *strm; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (xz_statep) file; + strm = &(state->strm); + + /* check that we're reading and that there's no error */ + if (state->err != LZMA_OK) + return -1; + + /* since an int is returned, make sure len fits in one, otherwise return + * with an error (this avoids the flaw in the interface) */ + if ((int) len < 0) { + xz_error(state, LZMA_BUF_ERROR, + "requested length does not fit in int"); + return -1; + } + + /* if len is zero, avoid unnecessary operations */ + if (len == 0) + return 0; + + /* process a skip request */ + if (state->seek) { + state->seek = 0; + if (xz_skip(state, state->skip) == -1) + return -1; + } + + /* get len bytes to buf, or less than len if at the end */ + got = 0; + do { + /* first just try copying data from the output buffer */ + if (state->have) { + n = state->have > len ? len : state->have; + memcpy(buf, state->next, n); + state->next += n; + state->have -= n; + } + + /* output buffer empty -- return if we're at the end of the input */ + else if (state->eof && strm->avail_in == 0) + break; + + /* need output data -- for small len or new stream load up our output + * buffer */ + else if (state->how == LOOK || len < (state->size << 1)) { + /* get more output, looking for header if required */ + if (xz_make(state) == -1) + return -1; + continue; /* no progress yet -- go back to memcpy() above */ + /* the copy above assures that we will leave with space in the + * output buffer, allowing at least one gzungetc() to succeed */ + } + + /* large len -- read directly into user buffer */ + else if (state->how == COPY) { /* read directly */ + if (xz_load(state, buf, len, &n) == -1) + return -1; + } + + /* large len -- decompress directly into user buffer */ + else { /* state->how == LZMA */ + strm->avail_out = len; + strm->next_out = buf; + if (xz_decomp(state) == -1) + return -1; + n = state->have; + state->have = 0; + } + + /* update progress */ + len -= n; + buf = (char *) buf + n; + got += n; + state->pos += n; + } while (len); + + /* return number of bytes read into user buffer (will fit in int) */ + return (int) got; +} + +int +__libxml2_xzclose(xzFile file) +{ + int ret; + xz_statep state; + + /* get internal structure */ + if (file == NULL) + return LZMA_DATA_ERROR; + state = (xz_statep) file; + + /* free memory and close file */ + if (state->size) { + lzma_end(&(state->strm)); +#ifdef HAVE_ZLIB_H + if (state->init == 1) + inflateEnd(&(state->zstrm)); + state->init = 0; +#endif + xmlFree(state->out); + xmlFree(state->in); + } + xmlFree(state->path); + ret = close(state->fd); + xmlFree(state); + return ret ? ret : LZMA_OK; +} +#endif /* HAVE_LZMA_H */ diff --git a/lib/3rdparty/libxml2/xzlib.h b/lib/3rdparty/libxml2/xzlib.h new file mode 100644 index 00000000000..43c75e185bc --- /dev/null +++ b/lib/3rdparty/libxml2/xzlib.h @@ -0,0 +1,18 @@ +/** + * xzlib.h: header for the front end for the transparent suport of lzma + * compression at the I/O layer + * + * See Copyright for the status of this software. + * + * Anders F Bjorklund + */ + +#ifndef LIBXML2_XZLIB_H +#define LIBXML2_XZLIB_H +typedef void *xzFile; /* opaque lzma file descriptor */ + +xzFile __libxml2_xzopen(const char *path, const char *mode); +xzFile __libxml2_xzdopen(int fd, const char *mode); +int __libxml2_xzread(xzFile file, void *buf, unsigned len); +int __libxml2_xzclose(xzFile file); +#endif /* LIBXML2_XZLIB_H */ diff --git a/lib/drivers/chew/CMakeLists.txt b/lib/drivers/chew/CMakeLists.txt index 8f7b51762b5..4aed5e8a90b 100644 --- a/lib/drivers/chew/CMakeLists.txt +++ b/lib/drivers/chew/CMakeLists.txt @@ -1,4 +1,4 @@ add_definitions(-D_NTOSKRNL_) add_library(chew workqueue.c) -add_dependencies(chew bugcodes) \ No newline at end of file +add_dependencies(chew bugcodes) diff --git a/lib/drivers/csq/CMakeLists.txt b/lib/drivers/csq/CMakeLists.txt index 81d1ed0e880..72bebce0d85 100644 --- a/lib/drivers/csq/CMakeLists.txt +++ b/lib/drivers/csq/CMakeLists.txt @@ -1,4 +1,4 @@ add_definitions(-D_NTOSKRNL_) add_library(csq csq.c) -add_dependencies(csq bugcodes) \ No newline at end of file +add_dependencies(csq bugcodes) diff --git a/lib/drivers/libusb/common_interfaces.h b/lib/drivers/libusb/common_interfaces.h index aff2f8ba2e4..5c996612047 100644 --- a/lib/drivers/libusb/common_interfaces.h +++ b/lib/drivers/libusb/common_interfaces.h @@ -182,7 +182,9 @@ struct IUSBQueue; \ STDMETHOD_(VOID, SetStatusChangeEndpointCallBack)( THIS_ \ IN PVOID CallBack, \ - IN PVOID Context) PURE; + IN PVOID Context) PURE; \ + \ + STDMETHOD_(LPCWSTR, GetUSBType)(THIS) PURE; #define IMP_IUSBHARDWAREDEVICE \ @@ -228,7 +230,9 @@ struct IUSBQueue; \ STDMETHODIMP_(VOID) SetStatusChangeEndpointCallBack( \ IN PVOID CallBack, \ - IN PVOID Context); + IN PVOID Context); \ + \ + STDMETHODIMP_(LPCWSTR) GetUSBType(); DECLARE_INTERFACE_(IUSBHardwareDevice, IUnknown) { diff --git a/lib/drivers/libusb/hcd_controller.cpp b/lib/drivers/libusb/hcd_controller.cpp index 299b0faf3e7..ef6b4175a4c 100644 --- a/lib/drivers/libusb/hcd_controller.cpp +++ b/lib/drivers/libusb/hcd_controller.cpp @@ -60,6 +60,7 @@ protected: PUSBHARDWAREDEVICE m_Hardware; PHUBCONTROLLER m_HubController; ULONG m_FDODeviceNumber; + LPCWSTR m_USBType; }; //================================================================================================= @@ -93,7 +94,7 @@ CHCDController::Initialize( // // failed to create hardware object // - DPRINT1("[USBLIB] Failed to create hardware object\n"); + DPRINT1("Failed to create hardware object\n"); return STATUS_INSUFFICIENT_RESOURCES; } @@ -137,7 +138,7 @@ CHCDController::Initialize( Status = m_Hardware->Initialize(m_DriverObject, m_FunctionalDeviceObject, m_PhysicalDeviceObject, m_NextDeviceObject); if (!NT_SUCCESS(Status)) { - DPRINT1("[USBLIB] Failed to initialize hardware object %x\n", Status); + DPRINT1("[%S] Failed to initialize hardware object %x\n", m_Hardware->GetUSBType(), Status); // // failed to initialize hardware object, detach from device stack @@ -158,6 +159,11 @@ CHCDController::Initialize( return Status; } + // + // get usb controller type + // + m_USBType = m_Hardware->GetUSBType(); + // // set device flags @@ -234,7 +240,7 @@ CHCDController::HandleDeviceControl( // PC_ASSERT(DeviceExtension->IsFDO); - DPRINT1("[USBLIB] HandleDeviceControl>Type: IoCtl %x InputBufferLength %lu OutputBufferLength %lu\n", + DPRINT1("[%S] HandleDeviceControl>Type: IoCtl %x InputBufferLength %lu OutputBufferLength %lu\n", m_USBType, IoStack->Parameters.DeviceIoControl.IoControlCode, IoStack->Parameters.DeviceIoControl.InputBufferLength, IoStack->Parameters.DeviceIoControl.OutputBufferLength); @@ -279,7 +285,7 @@ CHCDController::HandleDeviceControl( // // informal debug print // - DPRINT1("[USBLIB] Result %S\n", DriverKey->DriverKeyName); + DPRINT1("[%S] Result %S\n", m_USBType, DriverKey->DriverKeyName); } } @@ -331,7 +337,7 @@ CHCDController::HandleDeviceControl( PC_ASSERT(IoStack->Parameters.DeviceIoControl.OutputBufferLength - sizeof(ULONG) - sizeof(WCHAR) >= ResultLength); DriverKey->DriverKeyName[ResultLength / sizeof(WCHAR)] = L'\0'; - DPRINT1("[USBLIB] Result %S\n", DriverKey->DriverKeyName); + DPRINT1("[%S] Result %S\n", m_USBType, DriverKey->DriverKeyName); } // @@ -394,7 +400,7 @@ CHCDController::HandlePnp( { case IRP_MN_START_DEVICE: { - DPRINT("[USBLIB] HandlePnp IRP_MN_START FDO\n"); + DPRINT("[%S] HandlePnp IRP_MN_START FDO\n", m_USBType); // // first start lower device object @@ -423,12 +429,12 @@ CHCDController::HandlePnp( Status = SetSymbolicLink(TRUE); } - DPRINT("[USBLIB] HandlePnp IRP_MN_START FDO: Status %x\n", Status); + DPRINT("[%S] HandlePnp IRP_MN_START FDO: Status %x\n", m_USBType ,Status); break; } case IRP_MN_QUERY_DEVICE_RELATIONS: { - DPRINT("[USBLIB] HandlePnp IRP_MN_QUERY_DEVICE_RELATIONS Type %lx\n", IoStack->Parameters.QueryDeviceRelations.Type); + DPRINT("[%S] HandlePnp IRP_MN_QUERY_DEVICE_RELATIONS Type %lx\n", m_USBType, IoStack->Parameters.QueryDeviceRelations.Type); if (m_HubController == NULL) { @@ -508,7 +514,7 @@ CHCDController::HandlePnp( } case IRP_MN_STOP_DEVICE: { - DPRINT("[USBLIB] HandlePnp IRP_MN_STOP_DEVICE\n"); + DPRINT("[%S] HandlePnp IRP_MN_STOP_DEVICE\n", m_USBType); if (m_Hardware) { @@ -549,7 +555,7 @@ CHCDController::HandlePnp( IoSkipCurrentIrpStackLocation(Irp); return IoCallDriver(m_NextDeviceObject, Irp); #else - DPRINT1("[USBLIB] Denying controller removal due to reinitialization bugs\n"); + DPRINT1("[%S] Denying controller removal due to reinitialization bugs\n", m_USBType); Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; IoCompleteRequest(Irp, IO_NO_INCREMENT); return STATUS_UNSUCCESSFUL; @@ -557,7 +563,7 @@ CHCDController::HandlePnp( } case IRP_MN_REMOVE_DEVICE: { - DPRINT("[USBLIB] HandlePnp IRP_MN_REMOVE_DEVICE FDO\n"); + DPRINT("[%S] HandlePnp IRP_MN_REMOVE_DEVICE FDO\n", m_USBType); // // delete the symbolic link @@ -670,7 +676,7 @@ CHCDController::CreateFDO( // if (!NT_SUCCESS(Status)) { - DPRINT1("[USBLIB] CreateFDO: Failed to create %wZ, Status %x\n", &DeviceName, Status); + DPRINT1("[%S] CreateFDO: Failed to create %wZ, Status %x\n", m_USBType, &DeviceName, Status); return Status; } } @@ -680,7 +686,7 @@ CHCDController::CreateFDO( // m_FDODeviceNumber = UsbDeviceNumber; - DPRINT("[USBLIB] CreateFDO: DeviceName %wZ\n", &DeviceName); + DPRINT("[%S] CreateFDO: DeviceName %wZ\n", m_USBType, &DeviceName); /* done */ return Status; diff --git a/lib/drivers/libusb/hub_controller.cpp b/lib/drivers/libusb/hub_controller.cpp index 59f5245d4d4..5b70f034380 100644 --- a/lib/drivers/libusb/hub_controller.cpp +++ b/lib/drivers/libusb/hub_controller.cpp @@ -105,6 +105,8 @@ protected: PULONG m_DeviceAddressBitmapBuffer; LIST_ENTRY m_UsbDeviceList; PIRP m_PendingSCEIrp; + LPCWSTR m_USBType; + //Internal Functions BOOLEAN QueryStatusChageEndpoint(PIRP Irp); @@ -195,8 +197,6 @@ CHubController::Initialize( USHORT VendorID, DeviceID; ULONG Dummy1; - DPRINT1("CHubController::Initialize\n"); - // // initialize members // @@ -205,6 +205,7 @@ CHubController::Initialize( m_IsRootHubDevice = IsRootHubDevice; m_DeviceAddress = DeviceAddress; m_DriverObject = DriverObject; + m_USBType = m_Hardware->GetUSBType(); KeInitializeSpinLock(&m_Lock); InitializeListHead(&m_UsbDeviceList); @@ -226,7 +227,6 @@ CHubController::Initialize( RtlInitializeBitMap(&m_DeviceAddressBitmap, m_DeviceAddressBitmapBuffer, 128); RtlClearAllBits(&m_DeviceAddressBitmap); - // // create PDO // @@ -310,7 +310,7 @@ CHubController::QueryStatusChageEndpoint( // Get the number of ports and check each one for device connected // m_Hardware->GetDeviceDetails(NULL, NULL, &PortCount, NULL); - DPRINT1("[USBLIB] SCE Request %p TransferBufferLength %lu Flags %x MDL %p\n", Urb->UrbBulkOrInterruptTransfer.TransferBuffer, Urb->UrbBulkOrInterruptTransfer.TransferBufferLength, Urb->UrbBulkOrInterruptTransfer.TransferFlags, Urb->UrbBulkOrInterruptTransfer.TransferBufferMDL); + DPRINT1("[%S] SCE Request %p TransferBufferLength %lu Flags %x MDL %p\n", m_USBType, Urb->UrbBulkOrInterruptTransfer.TransferBuffer, Urb->UrbBulkOrInterruptTransfer.TransferBufferLength, Urb->UrbBulkOrInterruptTransfer.TransferFlags, Urb->UrbBulkOrInterruptTransfer.TransferBufferMDL); TransferBuffer = (PUCHAR)Urb->UrbBulkOrInterruptTransfer.TransferBuffer; @@ -321,7 +321,7 @@ CHubController::QueryStatusChageEndpoint( { m_Hardware->GetPortStatus(PortId, &PortStatus, &PortChange); - DPRINT1("[USBLIB] Port %d: Status %x, Change %x\n", PortId, PortStatus, PortChange); + DPRINT1("[%S] Port %d: Status %x, Change %x\n", m_USBType, PortId, PortStatus, PortChange); // @@ -329,7 +329,7 @@ CHubController::QueryStatusChageEndpoint( // if (PortChange != 0) { - DPRINT1("[USBLIB] Change state on port %d\n", PortId); + DPRINT1("[%S] Change state on port %d\n", m_USBType, PortId); // Set the value for the port number *TransferBuffer = 1 << ((PortId + 1) & 7); Changed = TRUE; @@ -432,7 +432,7 @@ CHubController::HandlePnp( { case IRP_MN_START_DEVICE: { - DPRINT("[USBLIB] HandlePnp IRP_MN_START_DEVICE\n"); + DPRINT("[%S] HandlePnp IRP_MN_START_DEVICE\n", m_USBType); // // register device interface // @@ -450,7 +450,7 @@ CHubController::HandlePnp( } case IRP_MN_QUERY_ID: { - DPRINT("[USBLIB] HandlePnp IRP_MN_QUERY_ID Type %x\n", IoStack->Parameters.QueryId.IdType); + DPRINT("[%S] HandlePnp IRP_MN_QUERY_ID Type %x\n", m_USBType, IoStack->Parameters.QueryId.IdType); if (IoStack->Parameters.QueryId.IdType == BusQueryDeviceID) { @@ -525,7 +525,7 @@ CHubController::HandlePnp( if (!NT_SUCCESS(Status)) { - DPRINT1("[USBLIB] HandlePnp> failed to get hardware id %x\n", Status); + DPRINT1("[%S] HandlePnp> failed to get hardware id %x\n", m_USBType, Status); VendorID = 0x8086; DeviceID = 0x3A37; } @@ -553,7 +553,7 @@ CHubController::HandlePnp( Index++; - DPRINT1("[USBLIB] Name %S\n", Buffer); + DPRINT1("[%S] Name %S\n", m_USBType, Buffer); // // allocate buffer @@ -587,7 +587,7 @@ CHubController::HandlePnp( } case IRP_MN_QUERY_CAPABILITIES: { - DPRINT("[USBLIB] HandlePnp IRP_MN_QUERY_CAPABILITIES\n"); + DPRINT("[%S] HandlePnp IRP_MN_QUERY_CAPABILITIES\n", m_USBType); DeviceCapabilities = (PDEVICE_CAPABILITIES)IoStack->Parameters.DeviceCapabilities.Capabilities; @@ -619,7 +619,7 @@ CHubController::HandlePnp( } case IRP_MN_QUERY_INTERFACE: { - DPRINT("[USBLIB] HandlePnp IRP_MN_QUERY_INTERFACE\n"); + DPRINT("[%S] HandlePnp IRP_MN_QUERY_INTERFACE\n", m_USBType); // // handle device interface requests @@ -629,7 +629,7 @@ CHubController::HandlePnp( } case IRP_MN_REMOVE_DEVICE: { - DPRINT("[USBLIB] HandlePnp IRP_MN_REMOVE_DEVICE\n"); + DPRINT("[%S] HandlePnp IRP_MN_REMOVE_DEVICE\n", m_USBType); // // deactivate device interface for BUS PDO @@ -659,7 +659,7 @@ CHubController::HandlePnp( } case IRP_MN_QUERY_DEVICE_RELATIONS: { - DPRINT("[USBLIB] HandlePnp IRP_MN_QUERY_DEVICE_RELATIONS Type %x\n", IoStack->Parameters.QueryDeviceRelations.Type); + DPRINT("[%S] HandlePnp IRP_MN_QUERY_DEVICE_RELATIONS Type %x\n", m_USBType, IoStack->Parameters.QueryDeviceRelations.Type); if (IoStack->Parameters.QueryDeviceRelations.Type == TargetDeviceRelation) { @@ -700,7 +700,7 @@ CHubController::HandlePnp( } case IRP_MN_QUERY_BUS_INFORMATION: { - DPRINT("[USBLIB] HandlePnp IRP_MN_QUERY_BUS_INFORMATION\n"); + DPRINT("[%S] HandlePnp IRP_MN_QUERY_BUS_INFORMATION\n", m_USBType); // // allocate buffer for bus information @@ -733,7 +733,7 @@ CHubController::HandlePnp( } case IRP_MN_STOP_DEVICE: { - DPRINT("[USBLIB] HandlePnp IRP_MN_STOP_DEVICE\n"); + DPRINT("[%S] HandlePnp IRP_MN_STOP_DEVICE\n", m_USBType); // // stop device // @@ -742,7 +742,7 @@ CHubController::HandlePnp( } case IRP_MN_SURPRISE_REMOVAL: { - DPRINT("[USBLIB] HandlePnp IRP_MN_SURPRISE_REMOVAL\n"); + DPRINT("[%S] HandlePnp IRP_MN_SURPRISE_REMOVAL\n", m_USBType); Status = STATUS_SUCCESS; break; } @@ -796,7 +796,7 @@ CHubController::HandleIsochronousTransfer( if (!EndPointDesc) { - DPRINT1("[USBLIB] Error No EndpointDesc\n"); + DPRINT1("[%S] Error No EndpointDesc\n", m_USBType); Urb->UrbIsochronousTransfer.Hdr.Status = USBD_STATUS_INVALID_PIPE_HANDLE; return STATUS_INVALID_PARAMETER; } @@ -805,7 +805,7 @@ CHubController::HandleIsochronousTransfer( // sanity checks // ASSERT(EndPointDesc); - DPRINT("HandleIsochronousTransfer EndPointDesc %p Address %x bmAttributes %x\n", EndPointDesc, EndPointDesc->bEndpointAddress, EndPointDesc->bmAttributes); + DPRINT("[%S] HandleIsochronousTransfer EndPointDesc %p Address %x bmAttributes %x\n", m_USBType, EndPointDesc, EndPointDesc->bEndpointAddress, EndPointDesc->bmAttributes); ASSERT((EndPointDesc->bmAttributes & USB_ENDPOINT_TYPE_MASK) == USB_ENDPOINT_TYPE_ISOCHRONOUS); // @@ -813,7 +813,7 @@ CHubController::HandleIsochronousTransfer( // if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("[USBLIB] HandleIsochronousTransfer invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] HandleIsochronousTransfer invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle @@ -856,7 +856,7 @@ CHubController::HandleBulkOrInterruptTransfer( // // Else pend the IRP, to be completed when a device connects or disconnects. // - DPRINT("[USBLIB] Pending SCE Irp\n"); + DPRINT("[%S] Pending SCE Irp\n", m_USBType); m_PendingSCEIrp = Irp; IoMarkIrpPending(Irp); return STATUS_PENDING; @@ -878,7 +878,7 @@ CHubController::HandleBulkOrInterruptTransfer( // if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("[USBLIB] HandleBulkOrInterruptTransfer invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] HandleBulkOrInterruptTransfer invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle @@ -905,7 +905,7 @@ CHubController::HandleClassOther( ULONG NumPort; ULONG PortId; - DPRINT("[USBLIB] HandleClassOther> Request %x Value %x\n", Urb->UrbControlVendorClassRequest.Request, Urb->UrbControlVendorClassRequest.Value); + DPRINT("[%S] HandleClassOther> Request %x Value %x\n", m_USBType, Urb->UrbControlVendorClassRequest.Request, Urb->UrbControlVendorClassRequest.Value); // // get number of ports available @@ -947,7 +947,7 @@ CHubController::HandleClassOther( // // request contains buffer of 2 ushort which are used from submitting port status and port change status // - DPRINT("[USBLIB] PortId %x PortStatus %x PortChange %x\n", PortId, PortStatus, PortChange); + DPRINT("[%S] PortId %x PortStatus %x PortChange %x\n", m_USBType, PortId, PortStatus, PortChange); Buffer = (PUSHORT)Urb->UrbControlVendorClassRequest.TransferBuffer; // @@ -974,7 +974,7 @@ CHubController::HandleClassOther( Status = m_Hardware->ClearPortStatus(PortId, C_PORT_RESET); break; default: - DPRINT("[USBLIB] Unknown Value for Clear Feature %x \n", Urb->UrbControlVendorClassRequest.Value); + DPRINT("[%S] Unknown Value for Clear Feature %x \n", m_USBType, Urb->UrbControlVendorClassRequest.Value); break; } @@ -1023,13 +1023,13 @@ CHubController::HandleClassOther( break; } default: - DPRINT1("[USBLIB] Unsupported request id %x\n", Urb->UrbControlVendorClassRequest.Value); + DPRINT1("[%S] Unsupported request id %x\n", m_USBType, Urb->UrbControlVendorClassRequest.Value); PC_ASSERT(FALSE); } break; } default: - DPRINT1("[USBLIB] HandleClassOther Unknown request code %x\n", Urb->UrbControlVendorClassRequest.Request); + DPRINT1("[%S] HandleClassOther Unknown request code %x\n", m_USBType, Urb->UrbControlVendorClassRequest.Request); PC_ASSERT(0); Status = STATUS_INVALID_DEVICE_REQUEST; } @@ -1095,7 +1095,7 @@ CHubController::HandleSelectConfiguration( // if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("[USBLIB] HandleSelectConfiguration invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] HandleSelectConfiguration invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle @@ -1151,7 +1151,7 @@ CHubController::HandleSelectInterface( // if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("[USBLIB] HandleSelectInterface invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] HandleSelectInterface invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle @@ -1208,7 +1208,7 @@ CHubController::HandleGetStatusFromDevice( // if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("[USBLIB] HandleGetStatusFromDevice invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] HandleGetStatusFromDevice invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle @@ -1252,7 +1252,7 @@ CHubController::HandleGetStatusFromDevice( // Status = UsbDevice->SubmitSetupPacket(&CtrlSetup, Urb->UrbControlDescriptorRequest.TransferBufferLength, Urb->UrbControlDescriptorRequest.TransferBuffer); ASSERT(Status == STATUS_SUCCESS); - DPRINT1("[USBLIB] HandleGetStatusFromDevice Status %x Length %lu DeviceStatus %x\n", Status, Urb->UrbControlDescriptorRequest.TransferBufferLength, *DeviceStatus); + DPRINT1("[%S] HandleGetStatusFromDevice Status %x Length %lu DeviceStatus %x\n", m_USBType, Status, Urb->UrbControlDescriptorRequest.TransferBufferLength, *DeviceStatus); // // done @@ -1273,7 +1273,7 @@ CHubController::HandleClassDevice( PUSBDEVICE UsbDevice; USB_DEFAULT_PIPE_SETUP_PACKET CtrlSetup; - DPRINT("CHubController::HandleClassDevice Request %x Class %x\n", Urb->UrbControlVendorClassRequest.Request, Urb->UrbControlVendorClassRequest.Value >> 8); + DPRINT("[%S] HandleClassDevice Request %x Class %x\n", m_USBType, Urb->UrbControlVendorClassRequest.Request, Urb->UrbControlVendorClassRequest.Value >> 8); // // check class request type @@ -1287,7 +1287,7 @@ CHubController::HandleClassDevice( // if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("HandleClassDevice invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] HandleClassDevice invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle @@ -1371,7 +1371,7 @@ CHubController::HandleClassDevice( { if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("HandleClassDevice invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] HandleClassDevice invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle // @@ -1387,7 +1387,7 @@ CHubController::HandleClassDevice( break; } default: - DPRINT1("[USBLIB] HandleClassDevice Class %x not implemented\n", Urb->UrbControlVendorClassRequest.Value >> 8); + DPRINT1("[%S] HandleClassDevice Class %x not implemented\n", m_USBType, Urb->UrbControlVendorClassRequest.Value >> 8); break; } break; @@ -1399,7 +1399,7 @@ CHubController::HandleClassDevice( // if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("HandleClassDevice invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] HandleClassDevice invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle @@ -1465,7 +1465,7 @@ CHubController::HandleGetDescriptorFromInterface( // if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("[USBLIB] HandleGetDescriptorFromInterface invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] HandleGetDescriptorFromInterface invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle @@ -1494,7 +1494,7 @@ CHubController::HandleGetDescriptorFromInterface( Status = UsbDevice->SubmitSetupPacket(&CtrlSetup, Urb->UrbControlDescriptorRequest.TransferBufferLength, Urb->UrbControlDescriptorRequest.TransferBuffer); if (!NT_SUCCESS(Status)) { - DPRINT1("[USBLIB] HandleGetDescriptorFromInterface failed with %x\n", Status); + DPRINT1("[%S] HandleGetDescriptorFromInterface failed with %x\n", m_USBType, Status); } // @@ -1515,7 +1515,7 @@ CHubController::HandleGetDescriptor( PUSBDEVICE UsbDevice; ULONG Length, BufferLength; - DPRINT("[USBLIB] HandleGetDescriptor Type %x\n", Urb->UrbControlDescriptorRequest.DescriptorType); + DPRINT("[%S] HandleGetDescriptor Type %x\n", m_USBType, Urb->UrbControlDescriptorRequest.DescriptorType); // // check descriptor type @@ -1547,7 +1547,7 @@ CHubController::HandleGetDescriptor( // if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("[USBLIB] HandleGetDescriptor invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] HandleGetDescriptor invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle @@ -1654,7 +1654,7 @@ CHubController::HandleGetDescriptor( // if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("[USBLIB] USB_CONFIGURATION_DESCRIPTOR_TYPE invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] USB_CONFIGURATION_DESCRIPTOR_TYPE invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle @@ -1719,7 +1719,7 @@ CHubController::HandleGetDescriptor( // if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("[USBLIB] USB_STRING_DESCRIPTOR_TYPE invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] USB_STRING_DESCRIPTOR_TYPE invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle @@ -1749,7 +1749,7 @@ CHubController::HandleGetDescriptor( break; } default: - DPRINT1("[USBLIB] CHubController::HandleGetDescriptor DescriptorType %x unimplemented\n", Urb->UrbControlDescriptorRequest.DescriptorType); + DPRINT1("[%S] CHubController::HandleGetDescriptor DescriptorType %x unimplemented\n", m_USBType, Urb->UrbControlDescriptorRequest.DescriptorType); break; } @@ -1781,7 +1781,7 @@ CHubController::HandleClassEndpoint( // if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("[USBLIB] HandleClassEndpoint invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] HandleClassEndpoint invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle @@ -1862,7 +1862,7 @@ CHubController::HandleVendorDevice( // if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("[USBLIB] HandleVendorDevice invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] HandleVendorDevice invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle @@ -1930,7 +1930,7 @@ CHubController::HandleSyncResetAndClearStall( // if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("[USBLIB] HandleSyncResetAndClearStall invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] HandleSyncResetAndClearStall invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle @@ -1947,7 +1947,7 @@ CHubController::HandleSyncResetAndClearStall( // // failed // - DPRINT1("[USBLIB] failed to reset pipe %x\n", Status); + DPRINT1("[%S] failed to reset pipe %x\n", m_USBType, Status); } @@ -1967,7 +1967,7 @@ CHubController::HandleSyncResetAndClearStall( // Status = HandleClearStall(Irp, Urb); } - DPRINT1("[USBLIB] URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL Status %x\n", Status); + DPRINT1("[%S] URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL Status %x\n", m_USBType, Status); // // reset data toggle @@ -2003,7 +2003,7 @@ CHubController::HandleAbortPipe( // if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("[USBLIB] HandleAbortPipe invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] HandleAbortPipe invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle @@ -2026,7 +2026,7 @@ CHubController::HandleAbortPipe( // issue request // Status = UsbDevice->AbortPipe(EndpointDescriptor); - DPRINT1("[USBLIB] URB_FUNCTION_ABORT_PIPE Status %x\n", Status); + DPRINT1("[%S] URB_FUNCTION_ABORT_PIPE Status %x\n", m_USBType, Status); // // done @@ -2059,7 +2059,7 @@ CHubController::HandleClearStall( // if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("[USBLIB] HandleClearStall invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] HandleClearStall invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle @@ -2076,7 +2076,7 @@ CHubController::HandleClearStall( // get device // UsbDevice = PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle); - DPRINT1("[USBLIB] URB_FUNCTION_SYNC_CLEAR_STALL\n"); + DPRINT1("[%S] URB_FUNCTION_SYNC_CLEAR_STALL\n", m_USBType); // // initialize setup packet @@ -2093,7 +2093,7 @@ CHubController::HandleClearStall( // Status = UsbDevice->SubmitSetupPacket(&CtrlSetup, 0, 0); - DPRINT1("[USBLIB] URB_FUNCTION_CLEAR_STALL Status %x\n", Status); + DPRINT1("[%S] URB_FUNCTION_CLEAR_STALL Status %x\n", m_USBType, Status); // // done @@ -2124,7 +2124,7 @@ CHubController::HandleClassInterface( // if (!ValidateUsbDevice(PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle))) { - DPRINT1("[USBLIB] HandleClassInterface invalid device handle %p\n", Urb->UrbHeader.UsbdDeviceHandle); + DPRINT1("[%S] HandleClassInterface invalid device handle %p\n", m_USBType, Urb->UrbHeader.UsbdDeviceHandle); // // invalid device handle @@ -2178,7 +2178,7 @@ CHubController::HandleClassInterface( // // display error // - DPRINT1("URB_FUNCTION_CLASS_INTERFACE failed with Urb Status %x\n", Urb->UrbHeader.Status); + DPRINT1("[%S] URB_FUNCTION_CLASS_INTERFACE failed with Urb Status %x\n", m_USBType, Urb->UrbHeader.Status); } // @@ -2272,7 +2272,7 @@ CHubController::HandleDeviceControl( Status = HandleVendorDevice(Irp, Urb); break; default: - DPRINT1("[USBLIB] IOCTL_INTERNAL_USB_SUBMIT_URB Function %x NOT IMPLEMENTED\n", Urb->UrbHeader.Function); + DPRINT1("[%S] IOCTL_INTERNAL_USB_SUBMIT_URB Function %x NOT IMPLEMENTED\n", m_USBType, Urb->UrbHeader.Function); break; } // @@ -2282,7 +2282,7 @@ CHubController::HandleDeviceControl( } case IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE: { - DPRINT("[USBLIB] IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE %p\n", this); + DPRINT("[%S] IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE %p\n", m_USBType, this); if (IoStack->Parameters.Others.Argument1) { @@ -2307,7 +2307,7 @@ CHubController::HandleDeviceControl( } case IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO: { - DPRINT("[USBLIB] IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO\n"); + DPRINT("[%S] IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO\n", m_USBType); // // this is the first request send, it delivers the PDO to the caller @@ -2336,7 +2336,7 @@ CHubController::HandleDeviceControl( } case IOCTL_INTERNAL_USB_GET_HUB_COUNT: { - DPRINT("[USBLIB] IOCTL_INTERNAL_USB_GET_HUB_COUNT\n"); + DPRINT("[%S] IOCTL_INTERNAL_USB_GET_HUB_COUNT\n", m_USBType); // // after IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO is delivered, the usbhub driver @@ -2359,13 +2359,13 @@ CHubController::HandleDeviceControl( } case IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION: { - DPRINT1("[USBLIB] IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION UNIMPLEMENTED\n"); + DPRINT1("[%S] IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION UNIMPLEMENTED\n", m_USBType); Status = STATUS_SUCCESS; break; } default: { - DPRINT1("[USBLIB] HandleDeviceControl>Type: IoCtl %x InputBufferLength %lu OutputBufferLength %lu NOT IMPLEMENTED\n", + DPRINT1("[%S] HandleDeviceControl>Type: IoCtl %x InputBufferLength %lu OutputBufferLength %lu NOT IMPLEMENTED\n", m_USBType, IoStack->Parameters.DeviceIoControl.IoControlCode, IoStack->Parameters.DeviceIoControl.InputBufferLength, IoStack->Parameters.DeviceIoControl.OutputBufferLength); @@ -2797,7 +2797,7 @@ USBHI_InitializeUsbDevice( NTSTATUS Status; ULONG Index = 0; - DPRINT1("USBHI_InitializeUsbDevice\n"); + DPRINT("USBHI_InitializeUsbDevice\n"); // // first get controller @@ -2893,7 +2893,7 @@ USBHI_GetUsbDescriptors( PUSBDEVICE UsbDevice; CHubController * Controller; - DPRINT1("USBHI_GetUsbDescriptors\n"); + DPRINT("USBHI_GetUsbDescriptors\n"); // // sanity check @@ -2962,7 +2962,7 @@ USBHI_RemoveUsbDevice( CHubController * Controller; NTSTATUS Status; - DPRINT1("USBHI_RemoveUsbDevice\n"); + DPRINT("USBHI_RemoveUsbDevice\n"); // // first get controller @@ -3010,7 +3010,6 @@ USBHI_RemoveUsbDevice( // invalid device handle // DPRINT1("USBHI_RemoveUsbDevice Invalid device handle %p\n", UsbDevice); - PC_ASSERT(0); return STATUS_DEVICE_NOT_CONNECTED; } @@ -3035,7 +3034,7 @@ USBHI_RestoreUsbDevice( PUSBDEVICE OldUsbDevice, NewUsbDevice; CHubController * Controller; - DPRINT1("USBHI_RestoreUsbDevice\n"); + DPRINT("USBHI_RestoreUsbDevice\n"); // // first get controller @@ -3081,7 +3080,7 @@ USBHI_QueryDeviceInformation( PUSBDEVICE UsbDevice; CHubController * Controller; - DPRINT1("USBHI_QueryDeviceInformation %p\n", BusContext); + DPRINT("USBHI_QueryDeviceInformation %p\n", BusContext); // // sanity check @@ -3203,7 +3202,7 @@ USBHI_GetControllerInformation( { PUSB_CONTROLLER_INFORMATION_0 ControllerInfo; - DPRINT1("USBHI_GetControllerInformation\n"); + DPRINT("USBHI_GetControllerInformation\n"); // // sanity checks @@ -3266,7 +3265,7 @@ USBHI_GetExtendedHubInformation( USHORT Dummy1; NTSTATUS Status; - DPRINT1("USBHI_GetExtendedHubInformation\n"); + DPRINT("USBHI_GetExtendedHubInformation\n"); // // sanity checks @@ -3493,7 +3492,7 @@ USBDI_GetUSBDIVersion( ULONG Speed, Dummy2; USHORT Dummy1; - DPRINT1("USBDI_GetUSBDIVersion\n"); + DPRINT("USBDI_GetUSBDIVersion\n"); // // get controller @@ -3573,7 +3572,7 @@ USBDI_IsDeviceHighSpeed( ULONG Speed, Dummy2; USHORT Dummy1; - DPRINT1("USBDI_IsDeviceHighSpeed\n"); + DPRINT("USBDI_IsDeviceHighSpeed\n"); // // get controller diff --git a/lib/drivers/libusb/libusb.cpp b/lib/drivers/libusb/libusb.cpp index 1e7173b6dff..a6049fad1fc 100644 --- a/lib/drivers/libusb/libusb.cpp +++ b/lib/drivers/libusb/libusb.cpp @@ -28,7 +28,7 @@ USBLIB_AddDevice( NTSTATUS Status; PHCDCONTROLLER HcdController; - DPRINT1("EHCI_AddDevice\n"); + DPRINT1("USBLIB_AddDevice\n"); /* first create the controller object */ Status = CreateHCDController(&HcdController); @@ -114,7 +114,7 @@ USBLIB_Dispatch( } default: { - DPRINT1("EHCI_Dispatch> Major %lu Minor %lu unhandeled\n", IoStack->MajorFunction, IoStack->MinorFunction); + DPRINT1("USBLIB_Dispatch> Major %lu Minor %lu unhandeled\n", IoStack->MajorFunction, IoStack->MinorFunction); Status = STATUS_SUCCESS; } } diff --git a/lib/drivers/libusb/usb_device.cpp b/lib/drivers/libusb/usb_device.cpp index e02cd03a652..c9795d186b4 100644 --- a/lib/drivers/libusb/usb_device.cpp +++ b/lib/drivers/libusb/usb_device.cpp @@ -86,6 +86,7 @@ protected: ULONG m_PortStatus; PUSBQUEUE m_Queue; PDMAMEMORYMANAGER m_DmaManager; + LPCWSTR m_USBType; PUSB_CONFIGURATION m_ConfigurationDescriptors; }; @@ -119,6 +120,7 @@ CUSBDevice::Initialize( m_Parent = Parent; m_Port = Port; m_PortStatus = PortStatus; + m_USBType = m_Device->GetUSBType(); // // initialize device lock @@ -139,7 +141,7 @@ CUSBDevice::Initialize( // // failed to get usb queue // - DPRINT1("CUSBDevice::Initialize GetUsbQueue failed with %x\n", Status); + DPRINT1("[%S] GetUsbQueue failed with %x\n", m_USBType, Status); return Status; } @@ -152,7 +154,7 @@ CUSBDevice::Initialize( // // failed to get dma manager // - DPRINT1("CUSBDevice::Initialize GetDMA failed with %x\n", Status); + DPRINT1("[%S] GetDMA failed with %x\n", m_USBType, Status); return Status; } @@ -170,7 +172,7 @@ CUSBDevice::Initialize( // // failed to get device descriptor // - DPRINT1("CUSBDevice::Initialize Failed to get device descriptor with %x\n", Status); + DPRINT1("[%S] Failed to get device descriptor with %x\n", m_USBType, Status); return Status; } @@ -274,7 +276,7 @@ CUSBDevice::GetType() return Usb20Device; } - DPRINT1("CUSBDevice::GetType Unknown bcdUSB Type %x\n", m_DeviceDescriptor.bcdUSB); + DPRINT1("[%S] GetType Unknown bcdUSB Type %x\n", m_USBType, m_DeviceDescriptor.bcdUSB); //PC_ASSERT(FALSE); return Usb11Device; @@ -309,7 +311,7 @@ CUSBDevice::SetDeviceAddress( UCHAR OldAddress; UCHAR Index; - DPRINT1("CUSBDevice::SetDeviceAddress> Address %x\n", DeviceAddress); + DPRINT1("[%S] SetDeviceAddress> Address %x\n", m_USBType, DeviceAddress); CtrlSetup = (PUSB_DEFAULT_PIPE_SETUP_PACKET)ExAllocatePoolWithTag(NonPagedPool, sizeof(USB_DEFAULT_PIPE_SETUP_PACKET), TAG_USBLIB); if (!CtrlSetup) @@ -332,7 +334,7 @@ CUSBDevice::SetDeviceAddress( if (!NT_SUCCESS(Status)) { // failed to set device address - DPRINT1("CUSBDevice::SetDeviceAddress> failed to set device address with %lx Address %x\n", Status, DeviceAddress); + DPRINT1("[%S] SetDeviceAddress> failed to set device address with %lx Address %x\n", m_USBType, Status, DeviceAddress); return Status; } @@ -349,7 +351,7 @@ CUSBDevice::SetDeviceAddress( Status = CreateDeviceDescriptor(); if (!NT_SUCCESS(Status)) { - DPRINT1("CUSBDevice::SetDeviceAddress> failed to retrieve device descriptor with device address set Error %lx\n", Status); + DPRINT1("[%S] SetDeviceAddress failed to retrieve device descriptor with device address set Error %lx\n", m_USBType, Status); // return error status return Status; } @@ -360,7 +362,7 @@ CUSBDevice::SetDeviceAddress( m_DeviceDescriptor.bNumConfigurations == 0) { // failed to retrieve device descriptor - DPRINT1("CUSBDevice::SetDeviceAddress> device returned bogus device descriptor\n"); + DPRINT1("[%S] SetDeviceAddress> device returned bogus device descriptor\n", m_USBType); DumpDeviceDescriptor(&m_DeviceDescriptor); // return error status @@ -386,7 +388,7 @@ CUSBDevice::SetDeviceAddress( Status = CreateConfigurationDescriptor(Index); if (!NT_SUCCESS(Status)) { - DPRINT1("CUSBDevice::SetDeviceAddress> failed to retrieve configuration %lu\n", Index); + DPRINT1("[%S] SetDeviceAddress> failed to retrieve configuration %lu\n", m_USBType, Index); break; } } @@ -429,7 +431,7 @@ CUSBDevice::CommitIrp( // // no queue, wtf? // - DPRINT1("CUSBDevice::CommitIrp> no queue / dma !!!\n"); + DPRINT1("[%S] CommitIrp> no queue / dma !!!\n", m_USBType); return STATUS_UNSUCCESSFUL; } @@ -442,7 +444,7 @@ CUSBDevice::CommitIrp( // // failed to build request // - DPRINT1("CUSBDevice::CommitIrp> CreateUSBRequest failed with %lx\n", Status); + DPRINT1("[%S] CommitIrp> CreateUSBRequest failed with %lx\n", m_USBType, Status); return Status; } @@ -465,7 +467,7 @@ CUSBDevice::CommitIrp( // // failed to add request // - DPRINT1("CUSBDevice::CommitIrp> failed add request to queue with %lx\n", Status); + DPRINT1("[%S] failed add request to queue with %lx\n", m_USBType, Status); Request->Release(); return Status; } @@ -518,7 +520,7 @@ CUSBDevice::CommitSetupPacket( // // no queue, wtf? // - DPRINT1("CUSBDevice::CommitSetupPacket> no queue!!!\n"); + DPRINT1("[%S] CommitSetupPacket> no queue!!!\n", m_USBType); return STATUS_UNSUCCESSFUL; } @@ -531,7 +533,7 @@ CUSBDevice::CommitSetupPacket( // // failed to build request // - DPRINT1("CUSBDevice::CommitSetupPacket> CreateUSBRequest failed with %x\n", Status); + DPRINT1("[%S] CommitSetupPacket> CreateUSBRequest failed with %x\n", m_USBType, Status); return Status; } @@ -544,7 +546,7 @@ CUSBDevice::CommitSetupPacket( // // failed to initialize request // - DPRINT1("CUSBDevice::CommitSetupPacket> failed to initialize usb request with %x\n", Status); + DPRINT1("[%S] CommitSetupPacket failed to initialize usb request with %x\n", m_USBType, Status); Request->Release(); return Status; } @@ -558,7 +560,7 @@ CUSBDevice::CommitSetupPacket( // // failed to add request // - DPRINT1("CUSBDevice::CommitSetupPacket> failed add request to queue with %x\n", Status); + DPRINT1("[%S] CommitSetupPacket> failed add request to queue with %x\n", m_USBType, Status); Request->Release(); return Status; } @@ -759,7 +761,7 @@ CUSBDevice::CreateConfigurationDescriptor( // // failed to get partial configuration descriptor // - DPRINT1("[USBLIB] Failed to get partial configuration descriptor Status %x Index %x\n", Status, Index); + DPRINT1("[%S] Failed to get partial configuration descriptor Status %x Index %x\n", m_USBType, Status, Index); ExFreePoolWithTag(ConfigurationDescriptor, TAG_USBLIB); return Status; } @@ -773,7 +775,7 @@ CUSBDevice::CreateConfigurationDescriptor( // // failed to get full configuration descriptor // - DPRINT1("[USBLIB] Failed to get full configuration descriptor Status %x Index %x\n", Status, Index); + DPRINT1("[%S] Failed to get full configuration descriptor Status %x Index %x\n", m_USBType, Status, Index); ExFreePoolWithTag(ConfigurationDescriptor, TAG_USBLIB); return Status; } @@ -968,7 +970,7 @@ CUSBDevice::BuildInterfaceDescriptor( if (EndpointDescriptor->bLength == 0 || EndpointDescriptor->bDescriptorType == USB_INTERFACE_DESCRIPTOR_TYPE) { // bogus configuration descriptor - DPRINT1("[USBLIB] Bogus descriptor found in InterfaceNumber %x Alternate %x EndpointIndex %x bLength %x bDescriptorType %x\n", InterfaceDescriptor->bInterfaceNumber, InterfaceDescriptor->bAlternateSetting, PipeIndex, + DPRINT1("[%S] Bogus descriptor found in InterfaceNumber %x Alternate %x EndpointIndex %x bLength %x bDescriptorType %x\n", m_USBType, InterfaceDescriptor->bInterfaceNumber, InterfaceDescriptor->bAlternateSetting, PipeIndex, EndpointDescriptor->bLength, EndpointDescriptor->bDescriptorType); // failed @@ -1040,7 +1042,7 @@ CUSBDevice::SelectConfiguration( if (!Found) { - DPRINT1("[USBLIB] invalid configuration value %u\n", ConfigurationDescriptor->bConfigurationValue); + DPRINT1("[%S] invalid configuration value %u\n", m_USBType, ConfigurationDescriptor->bConfigurationValue); return STATUS_INVALID_PARAMETER; } @@ -1062,13 +1064,13 @@ CUSBDevice::SelectConfiguration( if (!ConfigurationDescriptor) { // unconfigure request - DPRINT1("CUSBDevice::SelectConfiguration Unconfigure Request Status %lx\n", Status); + DPRINT1("[%S] SelectConfiguration Unconfigure Request Status %lx\n", m_USBType, Status); m_ConfigurationIndex = 0; return Status; } // informal debug print - DPRINT1("CUSBDevice::SelectConfiguration New Configuration %x Old Configuration %x Result %lx\n", ConfigurationIndex, m_ConfigurationIndex, Status); + DPRINT1("[%S] SelectConfiguration New Configuration %x Old Configuration %x Result %lx\n", m_USBType, ConfigurationIndex, m_ConfigurationIndex, Status); if (!NT_SUCCESS(Status)) { // @@ -1123,7 +1125,7 @@ CUSBDevice::SelectConfiguration( if (!NT_SUCCESS(Status)) { // failed - DPRINT1("[LIBUSB] Failed to copy interface descriptor Index %lu InterfaceDescriptor %p InterfaceInfo %p\n", ConfigurationIndex, InterfaceDescriptor, InterfaceInfo); + DPRINT1("[%S] Failed to copy interface descriptor Index %lu InterfaceDescriptor %p InterfaceInfo %p\n", m_USBType, ConfigurationIndex, InterfaceDescriptor, InterfaceInfo); break; } @@ -1165,7 +1167,7 @@ CUSBDevice::SelectInterface( if (!Found) { // invalid handle passed - DPRINT1("[USBLIB] Invalid configuration handle passed %p\n", ConfigurationHandle); + DPRINT1("[%S] Invalid configuration handle passed %p\n", m_USBType, ConfigurationHandle); return STATUS_INVALID_PARAMETER; } @@ -1180,7 +1182,7 @@ CUSBDevice::SelectInterface( Status = CommitSetupPacket(&CtrlSetup, NULL, 0, NULL); // informal debug print - DPRINT1("CUSBDevice::SelectInterface AlternateSetting %x InterfaceNumber %x Status %lx\n", InterfaceInfo->AlternateSetting, InterfaceInfo->InterfaceNumber, Status); + DPRINT1("[%S] SelectInterface AlternateSetting %x InterfaceNumber %x Status %lx\n", m_USBType, InterfaceInfo->AlternateSetting, InterfaceInfo->InterfaceNumber, Status); #if 0 if (!NT_SUCCESS(Status)) { @@ -1216,7 +1218,7 @@ CUSBDevice::SelectInterface( InterfaceDescriptor = USBD_ParseConfigurationDescriptor(m_ConfigurationDescriptors[ConfigurationIndex].ConfigurationDescriptor, InterfaceInfo->InterfaceNumber, InterfaceInfo->AlternateSetting); if (!InterfaceDescriptor) { - DPRINT1("[LIBUSB] No such interface Alternate %x InterfaceNumber %x\n", InterfaceInfo->AlternateSetting, InterfaceInfo->InterfaceNumber); + DPRINT1("[%S] No such interface Alternate %x InterfaceNumber %x\n", m_USBType, InterfaceInfo->AlternateSetting, InterfaceInfo->InterfaceNumber); return STATUS_UNSUCCESSFUL; } @@ -1225,7 +1227,7 @@ CUSBDevice::SelectInterface( if (!NT_SUCCESS(Status)) { // failed - DPRINT1("[LIBUSB] Failed to build interface descriptor Status %x\n", Status); + DPRINT1("[%S] Failed to build interface descriptor Status %x\n", m_USBType, Status); return Status; } } diff --git a/lib/drivers/lwip/doc/contrib.txt b/lib/drivers/lwip/doc/contrib.txt index 39596fca335..df57004b30d 100644 --- a/lib/drivers/lwip/doc/contrib.txt +++ b/lib/drivers/lwip/doc/contrib.txt @@ -60,4 +60,3 @@ features of Savannah help us not lose users' input. 1. If you have ported lwIP to a platform (an OS, a uC/processor or a combination of these) and you think it could benefit others[1] you might want discuss this on the mailing list. You can also ask for CVS access to submit and maintain your port in the contrib CVS module. - \ No newline at end of file diff --git a/lib/drivers/lwip/doc/savannah.txt b/lib/drivers/lwip/doc/savannah.txt index 409905b10c6..e3178997dec 100644 --- a/lib/drivers/lwip/doc/savannah.txt +++ b/lib/drivers/lwip/doc/savannah.txt @@ -132,4 +132,4 @@ A new 0.6.3 release is now available here: http://savannah.nongnu.org/files/?group=lwip&highlight=0.6.3 You will have to submit this via the user News interface, then approve -this via the Administrator News interface. \ No newline at end of file +this via the Administrator News interface. diff --git a/lib/lsalib/lsa.c b/lib/lsalib/lsa.c index f2fe9d702bb..e6febf871c8 100644 --- a/lib/lsalib/lsa.c +++ b/lib/lsalib/lsa.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -30,26 +31,35 @@ extern HANDLE Secur32Heap; NTSTATUS WINAPI LsaDeregisterLogonProcess(HANDLE LsaHandle) { - LSASS_REQUEST Request; - LSASS_REPLY Reply; + LSA_API_MSG ApiMessage; NTSTATUS Status; - Request.Header.u1.s1.DataLength = 0; - Request.Header.u1.s1.TotalLength = sizeof(LSASS_REQUEST); - Request.Type = LSASS_REQUEST_DEREGISTER_LOGON_PROCESS; + DPRINT1("LsaDeregisterLogonProcess()\n"); + + ApiMessage.ApiNumber = LSASS_REQUEST_DEREGISTER_LOGON_PROCESS; + ApiMessage.h.u1.s1.DataLength = LSA_PORT_DATA_SIZE(ApiMessage.DeregisterLogonProcess.Request); + ApiMessage.h.u1.s1.TotalLength = LSA_PORT_MESSAGE_SIZE; + ApiMessage.h.u2.ZeroInit = 0; + Status = ZwRequestWaitReplyPort(LsaHandle, - &Request.Header, - &Reply.Header); + (PPORT_MESSAGE)&ApiMessage, + (PPORT_MESSAGE)&ApiMessage); if (!NT_SUCCESS(Status)) { + DPRINT1("ZwRequestWaitReplyPort() failed (Status 0x%08lx)\n", Status); return Status; } - if (!NT_SUCCESS(Reply.Status)) + if (!NT_SUCCESS(ApiMessage.Status)) { - return Reply.Status; + DPRINT1("ZwRequestWaitReplyPort() failed (ApiMessage.Status 0x%08lx)\n", ApiMessage.Status); + return ApiMessage.Status; } + NtClose(LsaHandle); + + DPRINT1("LsaDeregisterLogonProcess() done (Status 0x%08lx)\n", Status); + return Status; } @@ -77,6 +87,43 @@ LsaCallAuthenticationPackage(HANDLE LsaHandle, PULONG ReturnBufferLength, PNTSTATUS ProtocolStatus) { + LSA_API_MSG ApiMessage; + NTSTATUS Status; + + DPRINT1("LsaCallAuthenticationPackage()\n"); + + ApiMessage.ApiNumber = LSASS_REQUEST_CALL_AUTHENTICATION_PACKAGE; + ApiMessage.h.u1.s1.DataLength = LSA_PORT_DATA_SIZE(ApiMessage.CallAuthenticationPackage.Request); + ApiMessage.h.u1.s1.TotalLength = LSA_PORT_MESSAGE_SIZE; + ApiMessage.h.u2.ZeroInit = 0; + + ApiMessage.CallAuthenticationPackage.Request.AuthenticationPackage = AuthenticationPackage; + ApiMessage.CallAuthenticationPackage.Request.ProtocolSubmitBuffer = ProtocolSubmitBuffer; + ApiMessage.CallAuthenticationPackage.Request.SubmitBufferLength = SubmitBufferLength; + + Status = ZwRequestWaitReplyPort(LsaHandle, + (PPORT_MESSAGE)&ApiMessage, + (PPORT_MESSAGE)&ApiMessage); + if (!NT_SUCCESS(Status)) + { + DPRINT1("ZwRequestWaitReplyPort() failed (Status 0x%08lx)\n", Status); + return Status; + } + + if (!NT_SUCCESS(ApiMessage.Status)) + { + DPRINT1("ZwRequestWaitReplyPort() failed (ApiMessage.Status 0x%08lx)\n", ApiMessage.Status); + return ApiMessage.Status; + } + + *ProtocolReturnBuffer = ApiMessage.CallAuthenticationPackage.Reply.ProtocolReturnBuffer; + *ReturnBufferLength = ApiMessage.CallAuthenticationPackage.Reply.ReturnBufferLength; + *ProtocolStatus = ApiMessage.CallAuthenticationPackage.Reply.ProtocolStatus; + + return Status; + + +#if 0 PLSASS_REQUEST Request; PLSASS_REPLY Reply; LSASS_REQUEST RawRequest; @@ -123,6 +170,7 @@ LsaCallAuthenticationPackage(HANDLE LsaHandle, *ReturnBufferLength); return Status; +#endif } @@ -144,34 +192,42 @@ LsaLookupAuthenticationPackage(HANDLE LsaHandle, PLSA_STRING PackageName, PULONG AuthenticationPackage) { + LSA_API_MSG ApiMessage; NTSTATUS Status; - PLSASS_REQUEST Request; - LSASS_REQUEST RawRequest; - LSASS_REPLY Reply; - Request = (PLSASS_REQUEST)&RawRequest; - Request->Header.u1.s1.DataLength = sizeof(LSASS_REQUEST) + PackageName->Length - - sizeof(PORT_MESSAGE); - Request->Header.u1.s1.TotalLength = Request->Header.u1.s1.DataLength + - sizeof(PORT_MESSAGE); - Request->Type = LSASS_REQUEST_LOOKUP_AUTHENTICATION_PACKAGE; + /* Check the package name length */ + if (PackageName->Length > LSASS_MAX_PACKAGE_NAME_LENGTH) + { + return STATUS_NAME_TOO_LONG; + } + + ApiMessage.ApiNumber = LSASS_REQUEST_LOOKUP_AUTHENTICATION_PACKAGE; + ApiMessage.h.u1.s1.DataLength = LSA_PORT_DATA_SIZE(ApiMessage.LookupAuthenticationPackage.Request); + ApiMessage.h.u1.s1.TotalLength = LSA_PORT_MESSAGE_SIZE; + ApiMessage.h.u2.ZeroInit = 0; + + ApiMessage.LookupAuthenticationPackage.Request.PackageNameLength = PackageName->Length; + strncpy(ApiMessage.LookupAuthenticationPackage.Request.PackageName, + PackageName->Buffer, + ApiMessage.LookupAuthenticationPackage.Request.PackageNameLength); + ApiMessage.LookupAuthenticationPackage.Request.PackageName[ApiMessage.LookupAuthenticationPackage.Request.PackageNameLength] = '\0'; Status = ZwRequestWaitReplyPort(LsaHandle, - &Request->Header, - &Reply.Header); + (PPORT_MESSAGE)&ApiMessage, + (PPORT_MESSAGE)&ApiMessage); if (!NT_SUCCESS(Status)) { return Status; } - if (!NT_SUCCESS(Reply.Status)) + if (!NT_SUCCESS(ApiMessage.Status)) { - return Reply.Status; + return ApiMessage.Status; } - *AuthenticationPackage = Reply.d.LookupAuthenticationPackageReply.Package; + *AuthenticationPackage = ApiMessage.LookupAuthenticationPackage.Reply.Package; - return Reply.Status; + return Status; } @@ -194,6 +250,49 @@ LsaLogonUser(HANDLE LsaHandle, PQUOTA_LIMITS Quotas, PNTSTATUS SubStatus) { + LSA_API_MSG ApiMessage; + NTSTATUS Status; + + ApiMessage.ApiNumber = LSASS_REQUEST_LOGON_USER; + ApiMessage.h.u1.s1.DataLength = LSA_PORT_DATA_SIZE(ApiMessage.LogonUser.Request); + ApiMessage.h.u1.s1.TotalLength = LSA_PORT_MESSAGE_SIZE; + ApiMessage.h.u2.ZeroInit = 0; + + ApiMessage.LogonUser.Request.OriginName = *OriginName; + ApiMessage.LogonUser.Request.LogonType = LogonType; + ApiMessage.LogonUser.Request.AuthenticationPackage = AuthenticationPackage; + ApiMessage.LogonUser.Request.AuthenticationInformation = AuthenticationInformation; + ApiMessage.LogonUser.Request.AuthenticationInformationLength = AuthenticationInformationLength; + ApiMessage.LogonUser.Request.LocalGroups = LocalGroups; + if (LocalGroups != NULL) + ApiMessage.LogonUser.Request.LocalGroupsCount = LocalGroups->GroupCount; + else + ApiMessage.LogonUser.Request.LocalGroups = 0; + ApiMessage.LogonUser.Request.SourceContext = *SourceContext; + + Status = ZwRequestWaitReplyPort(LsaHandle, + (PPORT_MESSAGE)&ApiMessage, + (PPORT_MESSAGE)&ApiMessage); + if (!NT_SUCCESS(Status)) + { + return Status; + } + + if (!NT_SUCCESS(ApiMessage.Status)) + { + return ApiMessage.Status; + } + + *ProfileBuffer = ApiMessage.LogonUser.Reply.ProfileBuffer; + *ProfileBufferLength = ApiMessage.LogonUser.Reply.ProfileBufferLength; + *LogonId = ApiMessage.LogonUser.Reply.LogonId; + *Token = ApiMessage.LogonUser.Reply.Token; + *Quotas = ApiMessage.LogonUser.Reply.Quotas; + *SubStatus = ApiMessage.LogonUser.Reply.SubStatus; + + return Status; + +#if 0 ULONG RequestLength; ULONG CurrentLength; PLSASS_REQUEST Request; @@ -276,6 +375,7 @@ LsaLogonUser(HANDLE LsaHandle, sizeof(Reply->d.LogonUserReply.Quotas)); return Status; +#endif } @@ -289,11 +389,11 @@ LsaRegisterLogonProcess(PLSA_STRING LsaLogonProcessName, { UNICODE_STRING PortName; // = RTL_CONSTANT_STRING(L"\\LsaAuthenticationPort"); SECURITY_QUALITY_OF_SERVICE SecurityQos; - ULONG ConnectInfoLength; + LSA_CONNECTION_INFO ConnectInfo; + ULONG ConnectInfoLength = sizeof(ConnectInfo); NTSTATUS Status; - LSASS_CONNECT_DATA ConnectInfo; -// LSASS_REQUEST Request; -// LSASS_REPLY Reply; + + DPRINT1("LsaRegisterLogonProcess()\n"); /* Check the logon process name length */ if (LsaLogonProcessName->Length > LSASS_MAX_LOGON_PROCESS_NAME_LENGTH) @@ -302,13 +402,11 @@ LsaRegisterLogonProcess(PLSA_STRING LsaLogonProcessName, RtlInitUnicodeString(&PortName, L"\\LsaAuthenticationPort"); - SecurityQos.Length = sizeof (SecurityQos); + SecurityQos.Length = sizeof(SecurityQos); SecurityQos.ImpersonationLevel = SecurityIdentification; SecurityQos.ContextTrackingMode = SECURITY_DYNAMIC_TRACKING; SecurityQos.EffectiveOnly = TRUE; - ConnectInfoLength = sizeof(LSASS_CONNECT_DATA); - strncpy(ConnectInfo.LogonProcessNameBuffer, LsaLogonProcessName->Buffer, LsaLogonProcessName->Length); @@ -325,42 +423,19 @@ LsaRegisterLogonProcess(PLSA_STRING LsaLogonProcessName, &ConnectInfoLength); if (!NT_SUCCESS(Status)) { + DPRINT1("ZwConnectPort failed (Status 0x%08lx)\n", Status); return Status; } - return Status; -#if 0 - Request.Type = LSASS_REQUEST_REGISTER_LOGON_PROCESS; - Request.Header.u1.s1.DataLength = sizeof(LSASS_REQUEST) - - sizeof(PORT_MESSAGE); - Request.Header.u1.s1.TotalLength = sizeof(LSASS_REQUEST); + DPRINT("ConnectInfo.OperationalMode: 0x%08lx\n", ConnectInfo.OperationalMode); + *OperationalMode = ConnectInfo.OperationalMode; - Request.d.RegisterLogonProcessRequest.Length = LsaLogonProcessName->Length; - memcpy(Request.d.RegisterLogonProcessRequest.LogonProcessNameBuffer, - LsaLogonProcessName->Buffer, - Request.d.RegisterLogonProcessRequest.Length); - - Status = ZwRequestWaitReplyPort(*Handle, - &Request.Header, - &Reply.Header); if (!NT_SUCCESS(Status)) { -// NtClose(*Handle); -// *Handle = NULL; - return Status; + DPRINT1("ConnectInfo.Status: 0x%08lx\n", ConnectInfo.Status); } - if (!NT_SUCCESS(Reply.Status)) - { -// NtClose(*Handle); -// *Handle = NULL; - return Status; - } - - *OperationalMode = Reply.d.RegisterLogonProcessReply.OperationalMode; - - return Reply.Status; -#endif + return ConnectInfo.Status; } diff --git a/lib/recyclebin/readme.txt b/lib/recyclebin/readme.txt index c3f376d92ad..1ef5e4db033 100644 --- a/lib/recyclebin/readme.txt +++ b/lib/recyclebin/readme.txt @@ -8,4 +8,4 @@ TODO 3 levels - 1: recyclebin.c : Public C interface - 2: recyclebin_generic.c : 'System-wide' recycle bin, which knows no implementation detail -- 3: recyclebin_v5.c : Deals with recycle bins of Windows 2000/XP/2003 \ No newline at end of file +- 3: recyclebin_v5.c : Deals with recycle bins of Windows 2000/XP/2003 diff --git a/lib/rtl/actctx.c b/lib/rtl/actctx.c index 0d55e033bae..e08034aa5be 100644 --- a/lib/rtl/actctx.c +++ b/lib/rtl/actctx.c @@ -387,7 +387,7 @@ static void free_entity_array(struct entity_array *array) RtlFreeHeap(RtlGetProcessHeap(), 0, entity->u.clrsurrogate.clsid); break; default: - DPRINT1("Unknown entity kind %d\n", entity->kind); + DPRINT1("Unknown entity kind %u\n", entity->kind); } } RtlFreeHeap( RtlGetProcessHeap(), 0, array->base ); @@ -788,7 +788,7 @@ static BOOL parse_expect_no_attr(xmlbuf_t* xmlbuf, BOOL* end) { attr_nameU = xmlstr2unicode(&attr_name); attr_valueU = xmlstr2unicode(&attr_name); - DPRINT1( "unexpected attr %S=%S\n", &attr_nameU, + DPRINT1( "unexpected attr %wZ=%wZ\n", &attr_nameU, &attr_valueU); } return !error; @@ -2275,7 +2275,8 @@ NTSTATUS WINAPI RtlCreateActivationContext( HANDLE *handle, void *ptr ) if (pActCtx->dwFlags & ACTCTX_FLAG_HMODULE_VALID) module = pActCtx->hModule; else module = NtCurrentTeb()->ProcessEnvironmentBlock->ImageBaseAddress; - if ((status = get_module_filename( module, &dir, 0 ))) goto error; + status = get_module_filename(module, &dir, 0); + if (!NT_SUCCESS(status)) goto error; if ((p = strrchrW( dir.Buffer, '\\' ))) p[1] = 0; actctx->appdir.info = dir.Buffer; } @@ -2289,7 +2290,7 @@ NTSTATUS WINAPI RtlCreateActivationContext( HANDLE *handle, void *ptr ) goto error; } status = open_nt_file( &file, &nameW ); - if (status) + if (!NT_SUCCESS(status)) { RtlFreeUnicodeString( &nameW ); goto error; @@ -2334,10 +2335,11 @@ NTSTATUS WINAPI RtlCreateActivationContext( HANDLE *handle, void *ptr ) if (file) NtClose( file ); RtlFreeUnicodeString( &nameW ); - if (status == STATUS_SUCCESS) status = parse_depend_manifests(&acl); + if (NT_SUCCESS(status)) status = parse_depend_manifests(&acl); free_depend_manifests( &acl ); - if (status == STATUS_SUCCESS) *handle = actctx; + if (NT_SUCCESS(status)) + *handle = actctx; else actctx_release( actctx ); return status; @@ -2498,7 +2500,7 @@ RtlQueryInformationActivationContext( ULONG flags, HANDLE handle, PVOID subinst, ACTIVATION_CONTEXT *actctx; NTSTATUS status; - DPRINT("%08x %p %p %u %p %ld %p\n", flags, handle, + DPRINT("%08x %p %p %u %p %Iu %p\n", flags, handle, subinst, class, buffer, bufsize, retlen); if (retlen) *retlen = 0; diff --git a/lib/rtl/assert.c b/lib/rtl/assert.c index faa65ba1724..47cb0cc8ab4 100644 --- a/lib/rtl/assert.c +++ b/lib/rtl/assert.c @@ -100,7 +100,7 @@ RtlAssert(IN PVOID FailedAssertion, #else if (NULL != Message) { - DbgPrint("Assertion \'%s\' failed at %s line %d: %s\n", + DbgPrint("Assertion \'%s\' failed at %s line %u: %s\n", (PCHAR)FailedAssertion, (PCHAR)FileName, LineNumber, @@ -108,7 +108,7 @@ RtlAssert(IN PVOID FailedAssertion, } else { - DbgPrint("Assertion \'%s\' failed at %s line %d\n", + DbgPrint("Assertion \'%s\' failed at %s line %u\n", (PCHAR)FailedAssertion, (PCHAR)FileName, LineNumber); diff --git a/lib/rtl/atom.c b/lib/rtl/atom.c index 06e131e4b27..18dd1e293d2 100644 --- a/lib/rtl/atom.c +++ b/lib/rtl/atom.c @@ -33,23 +33,24 @@ extern PRTL_ATOM_TABLE_ENTRY RtlpGetAtomEntry(PRTL_ATOM_TABLE AtomTable, ULONG I /* FUNCTIONS *****************************************************************/ -static PRTL_ATOM_TABLE_ENTRY -RtlpHashAtomName(IN PRTL_ATOM_TABLE AtomTable, - IN PWSTR AtomName, - OUT PRTL_ATOM_TABLE_ENTRY **HashLink) +static +PRTL_ATOM_TABLE_ENTRY +RtlpHashAtomName( + IN PRTL_ATOM_TABLE AtomTable, + IN PWSTR AtomName, + OUT PRTL_ATOM_TABLE_ENTRY **HashLink) { - UNICODE_STRING Name; - ULONG Hash; + UNICODE_STRING Name; + ULONG Hash; - RtlInitUnicodeString(&Name, - AtomName); + RtlInitUnicodeString(&Name, AtomName); - if (Name.Length != 0 && - NT_SUCCESS(RtlHashUnicodeString(&Name, - TRUE, - HASH_STRING_ALGORITHM_X65599, - &Hash))) - { + if (Name.Length != 0 && + NT_SUCCESS(RtlHashUnicodeString(&Name, + TRUE, + HASH_STRING_ALGORITHM_X65599, + &Hash))) + { PRTL_ATOM_TABLE_ENTRY Current; PRTL_ATOM_TABLE_ENTRY *Link; @@ -58,237 +59,244 @@ RtlpHashAtomName(IN PRTL_ATOM_TABLE AtomTable, /* search for an existing entry */ Current = *Link; while (Current != NULL) - { - if (Current->NameLength == Name.Length / sizeof(WCHAR) && - !_wcsicmp(Current->Name, Name.Buffer)) - { - *HashLink = Link; - return Current; - } - Link = &Current->HashLink; - Current = Current->HashLink; - } + { + if (Current->NameLength == Name.Length / sizeof(WCHAR) && + !_wcsicmp(Current->Name, Name.Buffer)) + { + *HashLink = Link; + return Current; + } + + Link = &Current->HashLink; + Current = Current->HashLink; + } /* no matching atom found, return the hash link */ *HashLink = Link; - } - else - *HashLink = NULL; + } + else + *HashLink = NULL; - return NULL; + return NULL; } -static BOOLEAN -RtlpCheckIntegerAtom(PWSTR AtomName, - PUSHORT AtomValue) +static +BOOLEAN +RtlpCheckIntegerAtom( + PWSTR AtomName, + PUSHORT AtomValue) { - UNICODE_STRING AtomString; - ULONG LongValue; - USHORT LoValue; - PWCHAR p; + UNICODE_STRING AtomString; + ULONG LongValue; + USHORT LoValue; + PWCHAR p; - DPRINT("RtlpCheckIntegerAtom(AtomName '%S' AtomValue %p)\n", - AtomName, AtomValue); + DPRINT("RtlpCheckIntegerAtom(AtomName '%S' AtomValue %p)\n", + AtomName, AtomValue); - if (!((ULONG_PTR)AtomName & 0xFFFF0000)) - { + if (!((ULONG_PTR)AtomName & 0xFFFF0000)) + { LoValue = (USHORT)((ULONG_PTR)AtomName & 0xFFFF); if (LoValue == 0) - LoValue = 0xC000; + LoValue = 0xC000; if (AtomValue != NULL) - *AtomValue = LoValue; + *AtomValue = LoValue; return TRUE; - } + } - /* - * AtomName cannot be NULL because this - * case was caught by the previous test. - */ - ASSERT(AtomName != NULL); + /* + * AtomName cannot be NULL because this + * case was caught by the previous test. + */ + ASSERT(AtomName != NULL); - if (*AtomName != L'#') - return FALSE; + if (*AtomName != L'#') + return FALSE; - p = AtomName; - p++; - while (*p) - { + p = AtomName; + p++; + while (*p) + { if ((*p < L'0') || (*p > L'9')) - return FALSE; + return FALSE; p++; - } + } - p = AtomName; - p++; - RtlInitUnicodeString(&AtomString, - p); + p = AtomName; + p++; + RtlInitUnicodeString(&AtomString, p); - DPRINT("AtomString: %wZ\n", &AtomString); + DPRINT("AtomString: %wZ\n", &AtomString); - RtlUnicodeStringToInteger(&AtomString,10, &LongValue); + RtlUnicodeStringToInteger(&AtomString, 10, &LongValue); - DPRINT("LongValue: %lu\n", LongValue); + DPRINT("LongValue: %lu\n", LongValue); - *AtomValue = (USHORT)(LongValue & 0x0000FFFF); + *AtomValue = (USHORT)(LongValue & 0x0000FFFF); - return TRUE; + return TRUE; } /* * @implemented */ -NTSTATUS NTAPI -RtlCreateAtomTable(IN ULONG TableSize, - IN OUT PRTL_ATOM_TABLE *AtomTable) +NTSTATUS +NTAPI +RtlCreateAtomTable( + IN ULONG TableSize, + IN OUT PRTL_ATOM_TABLE *AtomTable) { - PRTL_ATOM_TABLE Table; - NTSTATUS Status; + PRTL_ATOM_TABLE Table; + NTSTATUS Status; - DPRINT("RtlCreateAtomTable(TableSize %lu AtomTable %p)\n", - TableSize, AtomTable); + DPRINT("RtlCreateAtomTable(TableSize %lu AtomTable %p)\n", + TableSize, AtomTable); - if (*AtomTable != NULL) - { + if (*AtomTable != NULL) + { return STATUS_SUCCESS; - } + } - /* Use default if size was incorrect */ - if (TableSize <= 1) TableSize = 37; + /* Use default if size was incorrect */ + if (TableSize <= 1) TableSize = 37; - /* allocate atom table */ - Table = RtlpAllocAtomTable(((TableSize - 1) * sizeof(PRTL_ATOM_TABLE_ENTRY)) + - sizeof(RTL_ATOM_TABLE)); - if (Table == NULL) - { + /* allocate atom table */ + Table = RtlpAllocAtomTable(((TableSize - 1) * sizeof(PRTL_ATOM_TABLE_ENTRY)) + + sizeof(RTL_ATOM_TABLE)); + if (Table == NULL) + { return STATUS_NO_MEMORY; - } + } - /* initialize atom table */ - Table->NumberOfBuckets = TableSize; + /* initialize atom table */ + Table->NumberOfBuckets = TableSize; - Status = RtlpInitAtomTableLock(Table); - if (!NT_SUCCESS(Status)) - { + Status = RtlpInitAtomTableLock(Table); + if (!NT_SUCCESS(Status)) + { RtlpFreeAtomTable(Table); return Status; - } + } - if (!RtlpCreateAtomHandleTable(Table)) - { + if (!RtlpCreateAtomHandleTable(Table)) + { RtlpDestroyAtomTableLock(Table); RtlpFreeAtomTable(Table); return STATUS_NO_MEMORY; - } + } - *AtomTable = Table; - return STATUS_SUCCESS; + *AtomTable = Table; + return STATUS_SUCCESS; } /* * @implemented */ -NTSTATUS NTAPI -RtlDestroyAtomTable(IN PRTL_ATOM_TABLE AtomTable) +NTSTATUS +NTAPI +RtlDestroyAtomTable( + IN PRTL_ATOM_TABLE AtomTable) { - PRTL_ATOM_TABLE_ENTRY *CurrentBucket, *LastBucket; - PRTL_ATOM_TABLE_ENTRY CurrentEntry, NextEntry; + PRTL_ATOM_TABLE_ENTRY *CurrentBucket, *LastBucket; + PRTL_ATOM_TABLE_ENTRY CurrentEntry, NextEntry; - DPRINT("RtlDestroyAtomTable (AtomTable %p)\n", AtomTable); + DPRINT("RtlDestroyAtomTable (AtomTable %p)\n", AtomTable); - if (!RtlpLockAtomTable(AtomTable)) - { + if (!RtlpLockAtomTable(AtomTable)) + { return (STATUS_INVALID_PARAMETER); - } + } - /* delete all atoms */ - LastBucket = AtomTable->Buckets + AtomTable->NumberOfBuckets; - for (CurrentBucket = AtomTable->Buckets; - CurrentBucket != LastBucket; - CurrentBucket++) - { + /* delete all atoms */ + LastBucket = AtomTable->Buckets + AtomTable->NumberOfBuckets; + for (CurrentBucket = AtomTable->Buckets; + CurrentBucket != LastBucket; + CurrentBucket++) + { NextEntry = *CurrentBucket; *CurrentBucket = NULL; while (NextEntry != NULL) - { - CurrentEntry = NextEntry; - NextEntry = NextEntry->HashLink; + { + CurrentEntry = NextEntry; + NextEntry = NextEntry->HashLink; - /* no need to delete the atom handle, the handles will all be freed - up when destroying the atom handle table! */ + /* no need to delete the atom handle, the handles will all be freed + up when destroying the atom handle table! */ - RtlpFreeAtomTableEntry(CurrentEntry); - } - } + RtlpFreeAtomTableEntry(CurrentEntry); + } + } - RtlpDestroyAtomHandleTable(AtomTable); + RtlpDestroyAtomHandleTable(AtomTable); - RtlpUnlockAtomTable(AtomTable); + RtlpUnlockAtomTable(AtomTable); - RtlpDestroyAtomTableLock(AtomTable); + RtlpDestroyAtomTableLock(AtomTable); - RtlpFreeAtomTable(AtomTable); + RtlpFreeAtomTable(AtomTable); - return STATUS_SUCCESS; + return STATUS_SUCCESS; } /* * @implemented */ -NTSTATUS NTAPI -RtlEmptyAtomTable(PRTL_ATOM_TABLE AtomTable, - BOOLEAN DeletePinned) +NTSTATUS +NTAPI +RtlEmptyAtomTable( + PRTL_ATOM_TABLE AtomTable, + BOOLEAN DeletePinned) { - PRTL_ATOM_TABLE_ENTRY *CurrentBucket, *LastBucket; - PRTL_ATOM_TABLE_ENTRY CurrentEntry, NextEntry, *PtrEntry; + PRTL_ATOM_TABLE_ENTRY *CurrentBucket, *LastBucket; + PRTL_ATOM_TABLE_ENTRY CurrentEntry, NextEntry, *PtrEntry; - DPRINT("RtlEmptyAtomTable (AtomTable %p DeletePinned %x)\n", - AtomTable, DeletePinned); + DPRINT("RtlEmptyAtomTable (AtomTable %p DeletePinned %x)\n", + AtomTable, DeletePinned); - if (RtlpLockAtomTable(AtomTable) == FALSE) - { + if (RtlpLockAtomTable(AtomTable) == FALSE) + { return (STATUS_INVALID_PARAMETER); - } + } - /* delete all atoms */ - LastBucket = AtomTable->Buckets + AtomTable->NumberOfBuckets; - for (CurrentBucket = AtomTable->Buckets; - CurrentBucket != LastBucket; - CurrentBucket++) - { + /* delete all atoms */ + LastBucket = AtomTable->Buckets + AtomTable->NumberOfBuckets; + for (CurrentBucket = AtomTable->Buckets; + CurrentBucket != LastBucket; + CurrentBucket++) + { NextEntry = *CurrentBucket; PtrEntry = CurrentBucket; while (NextEntry != NULL) - { - CurrentEntry = NextEntry; - NextEntry = NextEntry->HashLink; + { + CurrentEntry = NextEntry; + NextEntry = NextEntry->HashLink; - if (DeletePinned || !(CurrentEntry->Flags & RTL_ATOM_IS_PINNED)) - { - *PtrEntry = NextEntry; + if (DeletePinned || !(CurrentEntry->Flags & RTL_ATOM_IS_PINNED)) + { + *PtrEntry = NextEntry; - RtlpFreeAtomHandle(AtomTable, - CurrentEntry); + RtlpFreeAtomHandle(AtomTable, CurrentEntry); - RtlpFreeAtomTableEntry(CurrentEntry); - } - else - { - PtrEntry = &CurrentEntry->HashLink; - } - } - } + RtlpFreeAtomTableEntry(CurrentEntry); + } + else + { + PtrEntry = &CurrentEntry->HashLink; + } + } + } - RtlpUnlockAtomTable(AtomTable); + RtlpUnlockAtomTable(AtomTable); - return STATUS_SUCCESS; + return STATUS_SUCCESS; } @@ -300,187 +308,182 @@ RtlAddAtomToAtomTable(IN PRTL_ATOM_TABLE AtomTable, IN PWSTR AtomName, OUT PRTL_ATOM Atom) { - USHORT AtomValue; - PRTL_ATOM_TABLE_ENTRY *HashLink; - PRTL_ATOM_TABLE_ENTRY Entry = NULL; - NTSTATUS Status = STATUS_SUCCESS; + USHORT AtomValue; + PRTL_ATOM_TABLE_ENTRY *HashLink; + PRTL_ATOM_TABLE_ENTRY Entry = NULL; + NTSTATUS Status = STATUS_SUCCESS; - DPRINT("RtlAddAtomToAtomTable (AtomTable %p AtomName %S Atom %p)\n", - AtomTable, AtomName, Atom); + DPRINT("RtlAddAtomToAtomTable (AtomTable %p AtomName %S Atom %p)\n", + AtomTable, AtomName, Atom); - if (RtlpCheckIntegerAtom (AtomName, &AtomValue)) - { + if (RtlpCheckIntegerAtom (AtomName, &AtomValue)) + { /* integer atom */ if (AtomValue >= 0xC000) - { - Status = STATUS_INVALID_PARAMETER; - } + { + Status = STATUS_INVALID_PARAMETER; + } else if (Atom != NULL) - { - *Atom = (RTL_ATOM)AtomValue; - } + { + *Atom = (RTL_ATOM)AtomValue; + } return Status; - } + } - RtlpLockAtomTable(AtomTable); + RtlpLockAtomTable(AtomTable); - /* string atom, hash it and try to find an existing atom with the same name */ - Entry = RtlpHashAtomName(AtomTable, - AtomName, - &HashLink); + /* string atom, hash it and try to find an existing atom with the same name */ + Entry = RtlpHashAtomName(AtomTable, AtomName, &HashLink); - if (Entry != NULL) - { + if (Entry != NULL) + { /* found another atom, increment the reference counter unless it's pinned */ if (!(Entry->Flags & RTL_ATOM_IS_PINNED)) - { - if (++Entry->ReferenceCount == 0) - { - /* FIXME - references overflowed, pin the atom? */ - Entry->Flags |= RTL_ATOM_IS_PINNED; - } - } + { + if (++Entry->ReferenceCount == 0) + { + /* FIXME - references overflowed, pin the atom? */ + Entry->Flags |= RTL_ATOM_IS_PINNED; + } + } if (Atom != NULL) - { - *Atom = (RTL_ATOM)Entry->Atom; - } - } - else - { + { + *Atom = (RTL_ATOM)Entry->Atom; + } + } + else + { /* couldn't find an existing atom, HashLink now points to either the HashLink pointer of the previous atom or to the bucket so we can simply add it to the list */ if (HashLink != NULL) - { - ULONG AtomNameLen = (ULONG)wcslen(AtomName); + { + ULONG AtomNameLen = (ULONG)wcslen(AtomName); - if (AtomNameLen > RTL_MAXIMUM_ATOM_LENGTH) - { + if (AtomNameLen > RTL_MAXIMUM_ATOM_LENGTH) + { Status = STATUS_INVALID_PARAMETER; goto end; - } + } - Entry = RtlpAllocAtomTableEntry(sizeof(RTL_ATOM_TABLE_ENTRY) - - sizeof(Entry->Name) + - (AtomNameLen + 1) * sizeof(WCHAR)); - if (Entry != NULL) - { - Entry->HashLink = NULL; - Entry->ReferenceCount = 1; - Entry->Flags = 0x0; + Entry = RtlpAllocAtomTableEntry(sizeof(RTL_ATOM_TABLE_ENTRY) - + sizeof(Entry->Name) + + (AtomNameLen + 1) * sizeof(WCHAR)); + if (Entry != NULL) + { + Entry->HashLink = NULL; + Entry->ReferenceCount = 1; + Entry->Flags = 0x0; - Entry->NameLength = (UCHAR)AtomNameLen; - RtlCopyMemory(Entry->Name, - AtomName, - (AtomNameLen + 1) * sizeof(WCHAR)); + Entry->NameLength = (UCHAR)AtomNameLen; + RtlCopyMemory(Entry->Name, + AtomName, + (AtomNameLen + 1) * sizeof(WCHAR)); - if (RtlpCreateAtomHandle(AtomTable, - Entry)) + if (RtlpCreateAtomHandle(AtomTable, Entry)) + { + /* append the atom to the list */ + *HashLink = Entry; + + if (Atom != NULL) { - /* append the atom to the list */ - *HashLink = Entry; - - if (Atom != NULL) - { - *Atom = (RTL_ATOM)Entry->Atom; - } + *Atom = (RTL_ATOM)Entry->Atom; } - else - { - RtlpFreeAtomTableEntry(Entry); - Status = STATUS_NO_MEMORY; - } - } - else - { - Status = STATUS_NO_MEMORY; - } - } + } + else + { + RtlpFreeAtomTableEntry(Entry); + Status = STATUS_NO_MEMORY; + } + } + else + { + Status = STATUS_NO_MEMORY; + } + } else - { - /* The caller supplied an empty atom name! */ - Status = STATUS_OBJECT_NAME_INVALID; - } - } + { + /* The caller supplied an empty atom name! */ + Status = STATUS_OBJECT_NAME_INVALID; + } + } end: - RtlpUnlockAtomTable(AtomTable); + RtlpUnlockAtomTable(AtomTable); - return Status; + return Status; } /* * @implemented */ -NTSTATUS NTAPI -RtlDeleteAtomFromAtomTable(IN PRTL_ATOM_TABLE AtomTable, - IN RTL_ATOM Atom) +NTSTATUS +NTAPI +RtlDeleteAtomFromAtomTable( + IN PRTL_ATOM_TABLE AtomTable, + IN RTL_ATOM Atom) { - PRTL_ATOM_TABLE_ENTRY Entry; - NTSTATUS Status = STATUS_SUCCESS; + PRTL_ATOM_TABLE_ENTRY Entry; + NTSTATUS Status = STATUS_SUCCESS; - DPRINT("RtlDeleteAtomFromAtomTable (AtomTable %p Atom %x)\n", - AtomTable, Atom); + DPRINT("RtlDeleteAtomFromAtomTable (AtomTable %p Atom %x)\n", + AtomTable, Atom); - if (Atom >= 0xC000) - { + if (Atom >= 0xC000) + { RtlpLockAtomTable(AtomTable); - Entry = RtlpGetAtomEntry(AtomTable, - (ULONG)((USHORT)Atom - 0xC000)); + Entry = RtlpGetAtomEntry(AtomTable, (ULONG)((USHORT)Atom - 0xC000)); if (Entry != NULL && Entry->Atom == (USHORT)Atom) - { - if (!(Entry->Flags & RTL_ATOM_IS_PINNED)) - { - if (--Entry->ReferenceCount == 0) + { + if (!(Entry->Flags & RTL_ATOM_IS_PINNED)) + { + if (--Entry->ReferenceCount == 0) + { + PRTL_ATOM_TABLE_ENTRY *HashLink; + + /* it's time to delete the atom. we need to unlink it from + the list. The easiest way is to take the atom name and + hash it again, this way we get the pointer to either + the hash bucket or the previous atom that links to the + one we want to delete. This way we can easily bypass + this item. */ + if (RtlpHashAtomName(AtomTable, Entry->Name, &HashLink) != NULL) { - PRTL_ATOM_TABLE_ENTRY *HashLink; + /* bypass this atom */ + *HashLink = Entry->HashLink; - /* it's time to delete the atom. we need to unlink it from - the list. The easiest way is to take the atom name and - hash it again, this way we get the pointer to either - the hash bucket or the previous atom that links to the - one we want to delete. This way we can easily bypass - this item. */ - if (RtlpHashAtomName(AtomTable, - Entry->Name, - &HashLink) != NULL) - { - /* bypass this atom */ - *HashLink = Entry->HashLink; + RtlpFreeAtomHandle(AtomTable, Entry); - RtlpFreeAtomHandle(AtomTable, - Entry); - - RtlpFreeAtomTableEntry(Entry); - } - else - { - /* WTF?! This should never happen!!! */ - ASSERT(FALSE); - } + RtlpFreeAtomTableEntry(Entry); } - } - else - { - /* tried to delete a pinned atom, do nothing and return - STATUS_WAS_LOCKED, which is NOT a failure code! */ - Status = STATUS_WAS_LOCKED; - } - } + else + { + /* WTF?! This should never happen!!! */ + ASSERT(FALSE); + } + } + } + else + { + /* tried to delete a pinned atom, do nothing and return + STATUS_WAS_LOCKED, which is NOT a failure code! */ + Status = STATUS_WAS_LOCKED; + } + } else - { - Status = STATUS_INVALID_HANDLE; - } + { + Status = STATUS_INVALID_HANDLE; + } RtlpUnlockAtomTable(AtomTable); - } + } - return Status; + return Status; } @@ -492,47 +495,46 @@ RtlLookupAtomInAtomTable(IN PRTL_ATOM_TABLE AtomTable, IN PWSTR AtomName, OUT PRTL_ATOM Atom) { - PRTL_ATOM_TABLE_ENTRY Entry, *HashLink; - USHORT AtomValue; - RTL_ATOM FoundAtom = 0; - NTSTATUS Status = STATUS_SUCCESS; + PRTL_ATOM_TABLE_ENTRY Entry, *HashLink; + USHORT AtomValue; + RTL_ATOM FoundAtom = 0; + NTSTATUS Status = STATUS_SUCCESS; - DPRINT("RtlLookupAtomInAtomTable (AtomTable %p AtomName %S Atom %p)\n", - AtomTable, AtomName, Atom); + DPRINT("RtlLookupAtomInAtomTable (AtomTable %p AtomName %S Atom %p)\n", + AtomTable, AtomName, Atom); - if (RtlpCheckIntegerAtom (AtomName, &AtomValue)) - { + if (RtlpCheckIntegerAtom (AtomName, &AtomValue)) + { /* integer atom */ if (AtomValue >= 0xC000) - { - Status = STATUS_INVALID_PARAMETER; - } + { + Status = STATUS_INVALID_PARAMETER; + } else if (Atom != NULL) - { - *Atom = (RTL_ATOM)AtomValue; - } + { + *Atom = (RTL_ATOM)AtomValue; + } return Status; - } + } - RtlpLockAtomTable(AtomTable); - Status = STATUS_OBJECT_NAME_NOT_FOUND; + RtlpLockAtomTable(AtomTable); + Status = STATUS_OBJECT_NAME_NOT_FOUND; - /* string atom */ - Entry = RtlpHashAtomName(AtomTable, - AtomName, - &HashLink); - if (Entry != NULL) - { + /* string atom */ + Entry = RtlpHashAtomName(AtomTable, AtomName, &HashLink); + if (Entry != NULL) + { Status = STATUS_SUCCESS; FoundAtom = (RTL_ATOM)Entry->Atom; - } - RtlpUnlockAtomTable(AtomTable); - if (NT_SUCCESS(Status) && Atom != NULL) - { + } + + RtlpUnlockAtomTable(AtomTable); + if (NT_SUCCESS(Status) && Atom != NULL) + { *Atom = FoundAtom; - } - return Status; + } + return Status; } @@ -543,33 +545,32 @@ NTSTATUS NTAPI RtlPinAtomInAtomTable(IN PRTL_ATOM_TABLE AtomTable, IN RTL_ATOM Atom) { - NTSTATUS Status = STATUS_SUCCESS; + NTSTATUS Status = STATUS_SUCCESS; - DPRINT("RtlPinAtomInAtomTable (AtomTable %p Atom %x)\n", - AtomTable, Atom); + DPRINT("RtlPinAtomInAtomTable (AtomTable %p Atom %x)\n", + AtomTable, Atom); - if (Atom >= 0xC000) - { + if (Atom >= 0xC000) + { PRTL_ATOM_TABLE_ENTRY Entry; RtlpLockAtomTable(AtomTable); - Entry = RtlpGetAtomEntry(AtomTable, - (ULONG)((USHORT)Atom - 0xC000)); + Entry = RtlpGetAtomEntry(AtomTable, (ULONG)((USHORT)Atom - 0xC000)); if (Entry != NULL && Entry->Atom == (USHORT)Atom) - { - Entry->Flags |= RTL_ATOM_IS_PINNED; - } + { + Entry->Flags |= RTL_ATOM_IS_PINNED; + } else - { - Status = STATUS_INVALID_HANDLE; - } + { + Status = STATUS_INVALID_HANDLE; + } RtlpUnlockAtomTable(AtomTable); - } + } - return Status; + return Status; } @@ -593,154 +594,155 @@ RtlPinAtomInAtomTable(IN PRTL_ATOM_TABLE AtomTable, * (again EXCLUDING the null terminator) is returned in NameLength, at least * on Win2k, XP and ReactOS. NT4 will return 0 in that case. */ -NTSTATUS NTAPI -RtlQueryAtomInAtomTable(PRTL_ATOM_TABLE AtomTable, - RTL_ATOM Atom, - PULONG RefCount, - PULONG PinCount, - PWSTR AtomName, - PULONG NameLength) +NTSTATUS +NTAPI +RtlQueryAtomInAtomTable( + PRTL_ATOM_TABLE AtomTable, + RTL_ATOM Atom, + PULONG RefCount, + PULONG PinCount, + PWSTR AtomName, + PULONG NameLength) { - ULONG Length; - BOOL Unlock = FALSE; + ULONG Length; + BOOL Unlock = FALSE; - union - { - /* A RTL_ATOM_TABLE_ENTRY has a "WCHAR Name[1]" entry at the end. - * Make sure we reserve enough room to facilitate a 12 character name */ - RTL_ATOM_TABLE_ENTRY AtomTableEntry; - WCHAR StringBuffer[sizeof(RTL_ATOM_TABLE_ENTRY) / sizeof(WCHAR) + 12]; - } NumberEntry; - PRTL_ATOM_TABLE_ENTRY Entry; - NTSTATUS Status = STATUS_SUCCESS; + union + { + /* A RTL_ATOM_TABLE_ENTRY has a "WCHAR Name[1]" entry at the end. + * Make sure we reserve enough room to facilitate a 12 character name */ + RTL_ATOM_TABLE_ENTRY AtomTableEntry; + WCHAR StringBuffer[sizeof(RTL_ATOM_TABLE_ENTRY) / sizeof(WCHAR) + 12]; + } NumberEntry; + PRTL_ATOM_TABLE_ENTRY Entry; + NTSTATUS Status = STATUS_SUCCESS; - if (Atom < 0xC000) - { + if (Atom < 0xC000) + { /* Synthesize an entry */ NumberEntry.AtomTableEntry.Atom = Atom; NumberEntry.AtomTableEntry.NameLength = swprintf(NumberEntry.AtomTableEntry.Name, - L"#%lu", - (ULONG)Atom); + L"#%lu", + (ULONG)Atom); NumberEntry.AtomTableEntry.ReferenceCount = 1; NumberEntry.AtomTableEntry.Flags = RTL_ATOM_IS_PINNED; Entry = &NumberEntry.AtomTableEntry; - } - else - { + } + else + { RtlpLockAtomTable(AtomTable); Unlock = TRUE; - Entry = RtlpGetAtomEntry(AtomTable, - (ULONG)((USHORT)Atom - 0xC000)); - } + Entry = RtlpGetAtomEntry(AtomTable, (ULONG)((USHORT)Atom - 0xC000)); + } - if (Entry != NULL && Entry->Atom == (USHORT)Atom) - { + if (Entry != NULL && Entry->Atom == (USHORT)Atom) + { DPRINT("Atom name: %wZ\n", &Entry->Name); if (RefCount != NULL) - { - *RefCount = Entry->ReferenceCount; - } + { + *RefCount = Entry->ReferenceCount; + } if (PinCount != NULL) - { - *PinCount = ((Entry->Flags & RTL_ATOM_IS_PINNED) != 0); - } + { + *PinCount = ((Entry->Flags & RTL_ATOM_IS_PINNED) != 0); + } if (NULL != NameLength) - { - Length = Entry->NameLength * sizeof(WCHAR); - if (NULL != AtomName) - { - if (*NameLength < Length + sizeof(WCHAR)) + { + Length = Entry->NameLength * sizeof(WCHAR); + if (NULL != AtomName) + { + if (*NameLength < Length + sizeof(WCHAR)) + { + if (*NameLength < 4) { - if (*NameLength < 4) - { - *NameLength = Length; - Status = STATUS_BUFFER_TOO_SMALL; - } - else - { - Length = *NameLength - sizeof(WCHAR); - } + *NameLength = Length; + Status = STATUS_BUFFER_TOO_SMALL; } - if (NT_SUCCESS(Status)) + else { - RtlCopyMemory(AtomName, - Entry->Name, - Length); - AtomName[Length / sizeof(WCHAR)] = L'\0'; - *NameLength = Length; + Length = *NameLength - sizeof(WCHAR); } - } - else - { - *NameLength = Length; - } - } + } + if (NT_SUCCESS(Status)) + { + RtlCopyMemory(AtomName, Entry->Name, Length); + AtomName[Length / sizeof(WCHAR)] = L'\0'; + *NameLength = Length; + } + } + else + { + *NameLength = Length; + } + } else if (NULL != AtomName) - { - Status = STATUS_INVALID_PARAMETER; - } - } - else - { + { + Status = STATUS_INVALID_PARAMETER; + } + } + else + { Status = STATUS_INVALID_HANDLE; - } + } - if (Unlock) RtlpUnlockAtomTable(AtomTable); + if (Unlock) RtlpUnlockAtomTable(AtomTable); - return Status; + return Status; } /* * @private - only used by NtQueryInformationAtom */ -NTSTATUS NTAPI -RtlQueryAtomListInAtomTable(IN PRTL_ATOM_TABLE AtomTable, - IN ULONG MaxAtomCount, - OUT ULONG *AtomCount, - OUT RTL_ATOM *AtomList) +NTSTATUS +NTAPI +RtlQueryAtomListInAtomTable( + IN PRTL_ATOM_TABLE AtomTable, + IN ULONG MaxAtomCount, + OUT ULONG *AtomCount, + OUT RTL_ATOM *AtomList) { - PRTL_ATOM_TABLE_ENTRY *CurrentBucket, *LastBucket; - PRTL_ATOM_TABLE_ENTRY CurrentEntry; - ULONG Atoms = 0; - NTSTATUS Status = STATUS_SUCCESS; + PRTL_ATOM_TABLE_ENTRY *CurrentBucket, *LastBucket; + PRTL_ATOM_TABLE_ENTRY CurrentEntry; + ULONG Atoms = 0; + NTSTATUS Status = STATUS_SUCCESS; - RtlpLockAtomTable(AtomTable); + RtlpLockAtomTable(AtomTable); - LastBucket = AtomTable->Buckets + AtomTable->NumberOfBuckets; - for (CurrentBucket = AtomTable->Buckets; - CurrentBucket != LastBucket; - CurrentBucket++) - { + LastBucket = AtomTable->Buckets + AtomTable->NumberOfBuckets; + for (CurrentBucket = AtomTable->Buckets; + CurrentBucket != LastBucket; + CurrentBucket++) + { CurrentEntry = *CurrentBucket; while (CurrentEntry != NULL) - { - if (MaxAtomCount > 0) - { - *(AtomList++) = (RTL_ATOM)CurrentEntry->Atom; - MaxAtomCount--; - } - else - { - /* buffer too small, but don't bail. we need to determine the - total number of atoms in the table! */ - Status = STATUS_INFO_LENGTH_MISMATCH; - } + { + if (MaxAtomCount > 0) + { + *(AtomList++) = (RTL_ATOM)CurrentEntry->Atom; + MaxAtomCount--; + } + else + { + /* buffer too small, but don't bail. we need to determine the + total number of atoms in the table! */ + Status = STATUS_INFO_LENGTH_MISMATCH; + } - Atoms++; - CurrentEntry = CurrentEntry->HashLink; - } - } + Atoms++; + CurrentEntry = CurrentEntry->HashLink; + } + } - *AtomCount = Atoms; + *AtomCount = Atoms; - RtlpUnlockAtomTable(AtomTable); + RtlpUnlockAtomTable(AtomTable); - return Status; + return Status; } diff --git a/lib/rtl/bootdata.c b/lib/rtl/bootdata.c index 215df851374..71c908a7978 100644 --- a/lib/rtl/bootdata.c +++ b/lib/rtl/bootdata.c @@ -433,6 +433,7 @@ RtlpSysVolTakeOwnership(IN PUNICODE_STRING DirectoryPath, HANDLE hToken = NULL; HANDLE hDirectory = NULL; NTSTATUS Status; + ULONG ReturnLength; Status = ZwOpenProcessToken(NtCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, @@ -452,7 +453,7 @@ RtlpSysVolTakeOwnership(IN PUNICODE_STRING DirectoryPath, &TokenPrivileges, sizeof(TokenPrivileges), &TokenPrivileges, - NULL); + &ReturnLength); if (!NT_SUCCESS(Status)) { goto Cleanup; @@ -757,7 +758,7 @@ RtlGetSetBootStatusData(IN HANDLE FileHandle, LARGE_INTEGER ByteOffset; NTSTATUS Status; - DPRINT("RtlGetSetBootStatusData (%p %u %u %p %lu %p)\n", + DPRINT("RtlGetSetBootStatusData (%p %u %d %p %lu %p)\n", FileHandle, WriteMode, DataClass, Buffer, BufferSize, ReturnLength); if (DataClass >= RtlBsdItemMax) diff --git a/lib/rtl/crc32.c b/lib/rtl/crc32.c index 760eebd4fa0..b814ea34fde 100644 --- a/lib/rtl/crc32.c +++ b/lib/rtl/crc32.c @@ -91,7 +91,7 @@ RtlComputeCrc32(IN ULONG Initial, { ULONG CrcValue = ~Initial; - DPRINT("(%d,%p,%d)\n", Initial, Data, Length); + DPRINT("(%u,%p,%u)\n", Initial, Data, Length); while (Length > 0) { diff --git a/lib/rtl/dos8dot3.c b/lib/rtl/dos8dot3.c index 7b8bc4bdea4..3f1a19232ff 100644 --- a/lib/rtl/dos8dot3.c +++ b/lib/rtl/dos8dot3.c @@ -225,12 +225,18 @@ RtlGenerate8dot3Name(IN PUNICODE_STRING Name, /* * @implemented + * Note: the function does not conform to the annotations. + * SpacesFound is not always set! */ +_IRQL_requires_max_(PASSIVE_LEVEL) +_Must_inspect_result_ +NTSYSAPI BOOLEAN NTAPI -RtlIsNameLegalDOS8Dot3(IN PCUNICODE_STRING UnicodeName, - IN OUT POEM_STRING AnsiName OPTIONAL, - IN OUT PBOOLEAN SpacesFound OPTIONAL) +RtlIsNameLegalDOS8Dot3 ( + _In_ PCUNICODE_STRING Name, + _Inout_opt_ POEM_STRING OemName, + _Out_opt_ PBOOLEAN NameContainsSpaces) { static const char Illegal[] = "*?<>|\"+=,;[]:/\\\345"; int Dot = -1; @@ -238,34 +244,37 @@ RtlIsNameLegalDOS8Dot3(IN PCUNICODE_STRING UnicodeName, char Buffer[12]; OEM_STRING OemString; BOOLEAN GotSpace = FALSE; + NTSTATUS Status; - if (!AnsiName) + if (!OemName) { OemString.Length = sizeof(Buffer); OemString.MaximumLength = sizeof(Buffer); OemString.Buffer = Buffer; - AnsiName = &OemString; + OemName = &OemString; } - if (RtlUpcaseUnicodeStringToCountedOemString( AnsiName, UnicodeName, FALSE ) != STATUS_SUCCESS) + + Status = RtlUpcaseUnicodeStringToCountedOemString(OemName, Name, FALSE); + if (!NT_SUCCESS(Status)) return FALSE; - if ((AnsiName->Length > 12) || (AnsiName->Buffer == NULL)) return FALSE; + if ((OemName->Length > 12) || (OemName->Buffer == NULL)) return FALSE; /* a starting . is invalid, except for . and .. */ - if (AnsiName->Buffer[0] == '.') + if (OemName->Buffer[0] == '.') { - if (AnsiName->Length != 1 && (AnsiName->Length != 2 || AnsiName->Buffer[1] != '.')) return FALSE; - if (SpacesFound) *SpacesFound = FALSE; + if (OemName->Length != 1 && (OemName->Length != 2 || OemName->Buffer[1] != '.')) return FALSE; + if (NameContainsSpaces) *NameContainsSpaces = FALSE; return TRUE; } - for (i = 0; i < AnsiName->Length; i++) + for (i = 0; i < OemName->Length; i++) { - switch (AnsiName->Buffer[i]) + switch (OemName->Buffer[i]) { case ' ': /* leading/trailing spaces not allowed */ - if (!i || i == AnsiName->Length-1 || AnsiName->Buffer[i+1] == '.') return FALSE; + if (!i || i == OemName->Length-1 || OemName->Buffer[i+1] == '.') return FALSE; GotSpace = TRUE; break; case '.': @@ -273,7 +282,7 @@ RtlIsNameLegalDOS8Dot3(IN PCUNICODE_STRING UnicodeName, Dot = i; break; default: - if (strchr(Illegal, AnsiName->Buffer[i])) return FALSE; + if (strchr(Illegal, OemName->Buffer[i])) return FALSE; break; } } @@ -282,13 +291,13 @@ RtlIsNameLegalDOS8Dot3(IN PCUNICODE_STRING UnicodeName, */ if (Dot == -1) { - if (AnsiName->Length > 8) return FALSE; + if (OemName->Length > 8) return FALSE; } else { - if (Dot > 8 || (AnsiName->Length - Dot > 4) || Dot == AnsiName->Length - 1) return FALSE; + if (Dot > 8 || (OemName->Length - Dot > 4) || Dot == OemName->Length - 1) return FALSE; } - if (SpacesFound) *SpacesFound = GotSpace; + if (NameContainsSpaces) *NameContainsSpaces = GotSpace; return TRUE; } diff --git a/lib/rtl/env.c b/lib/rtl/env.c index c4dd08ead65..cce1278ad60 100644 --- a/lib/rtl/env.c +++ b/lib/rtl/env.c @@ -17,75 +17,85 @@ /* * @implemented */ -NTSTATUS NTAPI -RtlCreateEnvironment(BOOLEAN Inherit, - PWSTR *Environment) +NTSTATUS +NTAPI +RtlCreateEnvironment( + BOOLEAN Inherit, + PWSTR *OutEnvironment) { - MEMORY_BASIC_INFORMATION MemInfo; - PVOID EnvPtr = NULL; - NTSTATUS Status = STATUS_SUCCESS; - SIZE_T RegionSize = PAGE_SIZE; + MEMORY_BASIC_INFORMATION MemInfo; + PVOID CurrentEnvironment, NewEnvironment = NULL; + NTSTATUS Status = STATUS_SUCCESS; + SIZE_T RegionSize = PAGE_SIZE; - if (Inherit == TRUE) - { - RtlAcquirePebLock(); + /* Check if we should inherit the current environment */ + if (Inherit) + { + /* In this case we need to lock the PEB */ + RtlAcquirePebLock(); - if (NtCurrentPeb()->ProcessParameters->Environment != NULL) - { - Status = NtQueryVirtualMemory(NtCurrentProcess(), - NtCurrentPeb()->ProcessParameters->Environment, - MemoryBasicInformation, - &MemInfo, - sizeof(MEMORY_BASIC_INFORMATION), - NULL); - if (!NT_SUCCESS(Status)) - { - RtlReleasePebLock(); - *Environment = NULL; - return(Status); - } + /* Get a pointer to the current Environment and check if it's not NULL */ + CurrentEnvironment = NtCurrentPeb()->ProcessParameters->Environment; + if (CurrentEnvironment != NULL) + { + /* Query the size of the current environment allocation */ + Status = NtQueryVirtualMemory(NtCurrentProcess(), + CurrentEnvironment, + MemoryBasicInformation, + &MemInfo, + sizeof(MEMORY_BASIC_INFORMATION), + NULL); + if (!NT_SUCCESS(Status)) + { + RtlReleasePebLock(); + *OutEnvironment = NULL; + return Status; + } - RegionSize = MemInfo.RegionSize; - Status = NtAllocateVirtualMemory(NtCurrentProcess(), - &EnvPtr, - 0, - &RegionSize, - MEM_RESERVE | MEM_COMMIT, - PAGE_READWRITE); - if (!NT_SUCCESS(Status)) - { - RtlReleasePebLock(); - *Environment = NULL; - return(Status); - } + /* Allocate a new region of the same size */ + RegionSize = MemInfo.RegionSize; + Status = NtAllocateVirtualMemory(NtCurrentProcess(), + &NewEnvironment, + 0, + &RegionSize, + MEM_RESERVE | MEM_COMMIT, + PAGE_READWRITE); + if (!NT_SUCCESS(Status)) + { + RtlReleasePebLock(); + *OutEnvironment = NULL; + return Status; + } - memmove(EnvPtr, - NtCurrentPeb ()->ProcessParameters->Environment, - MemInfo.RegionSize); + /* Copy the current environment */ + RtlCopyMemory(NewEnvironment, + CurrentEnvironment, + MemInfo.RegionSize); + } - *Environment = EnvPtr; - } + /* We are done with the PEB, release the lock */ + RtlReleasePebLock (); + } - RtlReleasePebLock (); - } - else - { - Status = NtAllocateVirtualMemory(NtCurrentProcess(), - &EnvPtr, - 0, - &RegionSize, - MEM_RESERVE | MEM_COMMIT, - PAGE_READWRITE); - if (NT_SUCCESS(Status)) - { - memset(EnvPtr, - 0, - RegionSize); - *Environment = EnvPtr; - } - } + /* Check if we still need an environment */ + if (NewEnvironment == NULL) + { + /* Allocate a new environment */ + Status = NtAllocateVirtualMemory(NtCurrentProcess(), + &NewEnvironment, + 0, + &RegionSize, + MEM_RESERVE | MEM_COMMIT, + PAGE_READWRITE); + if (NT_SUCCESS(Status)) + { + RtlZeroMemory(NewEnvironment, RegionSize); + } + } - return(Status); + *OutEnvironment = NewEnvironment; + + return Status; } @@ -315,7 +325,7 @@ RtlSetEnvironmentVariable(PWSTR *Environment, while (*env_end); env_end++; env_len = env_end - env; - DPRINT("environment length %ld characters\n", env_len); + DPRINT("environment length %lu characters\n", env_len); /* find where to insert */ while (*wcs) diff --git a/lib/rtl/generictable.c b/lib/rtl/generictable.c index 6cb57fd6d7a..5eb5a16d202 100644 --- a/lib/rtl/generictable.c +++ b/lib/rtl/generictable.c @@ -345,6 +345,7 @@ RtlEnumerateGenericTable(IN PRTL_GENERIC_TABLE Table, } while(RtlLeftChild(FoundNode)); /* Splay it */ + _Analysis_assume_(FoundNode != NULL); Table->TableRoot = RtlSplay(FoundNode); } else diff --git a/lib/rtl/heap.c b/lib/rtl/heap.c index c41b60dd77a..c7a7bc619b3 100644 --- a/lib/rtl/heap.c +++ b/lib/rtl/heap.c @@ -541,7 +541,7 @@ RtlpInsertUnCommittedPages(PHEAP_SEGMENT Segment, PLIST_ENTRY Current; PHEAP_UCR_DESCRIPTOR UcrDescriptor; - DPRINT("RtlpInsertUnCommittedPages(%p %p %x)\n", Segment, Address, Size); + DPRINT("RtlpInsertUnCommittedPages(%p %08Ix %Ix)\n", Segment, Address, Size); /* Go through the list of UCR descriptors, they are sorted from lowest address to the highest */ @@ -596,7 +596,7 @@ RtlpInsertUnCommittedPages(PHEAP_SEGMENT Segment, /* "Current" is the descriptor before which our one should go */ InsertTailList(Current, &UcrDescriptor->SegmentEntry); - DPRINT("Added segment UCR with base %p, size 0x%x\n", Address, Size); + DPRINT("Added segment UCR with base %08Ix, size 0x%x\n", Address, Size); /* Increase counters */ Segment->NumberOfUnCommittedRanges++; @@ -614,7 +614,7 @@ RtlpFindAndCommitPages(PHEAP Heap, PHEAP_ENTRY FirstEntry, LastEntry; NTSTATUS Status; - DPRINT("RtlpFindAndCommitPages(%p %p %x %p)\n", Heap, Segment, *Size, Address); + DPRINT("RtlpFindAndCommitPages(%p %p %Ix %08Ix)\n", Heap, Segment, *Size, Address); /* Go through UCRs in a segment */ Current = Segment->UCRSegmentList.Flink; @@ -644,7 +644,7 @@ RtlpFindAndCommitPages(PHEAP Heap, PAGE_READWRITE); } - DPRINT("Committed %d bytes at base %p, UCR size is %d\n", *Size, Address, UcrDescriptor->Size); + DPRINT("Committed %Iu bytes at base %08Ix, UCR size is %lu\n", *Size, Address, UcrDescriptor->Size); /* Fail in unsuccessful case */ if (!NT_SUCCESS(Status)) @@ -679,7 +679,7 @@ RtlpFindAndCommitPages(PHEAP Heap, UcrDescriptor->Address = (PVOID)((ULONG_PTR)UcrDescriptor->Address + *Size); UcrDescriptor->Size -= *Size; - DPRINT("Updating UcrDescriptor %p, new Address %p, size %d\n", + DPRINT("Updating UcrDescriptor %p, new Address %p, size %lu\n", UcrDescriptor, UcrDescriptor->Address, UcrDescriptor->Size); /* Set various first entry fields */ @@ -1080,7 +1080,7 @@ RtlpExtendHeap(PHEAP Heap, { Segment = Heap->Segments[Index]; - if (Segment) DPRINT("Segment[%d] %p with NOUCP %x\n", Index, Segment, Segment->NumberOfUnCommittedPages); + if (Segment) DPRINT("Segment[%u] %p with NOUCP %x\n", Index, Segment, Segment->NumberOfUnCommittedPages); /* Check if its size suits us */ if (Segment && @@ -1162,7 +1162,7 @@ RtlpExtendHeap(PHEAP Heap, MEM_COMMIT, PAGE_READWRITE); - DPRINT("Committed %d bytes at base %p\n", CommitSize, Segment); + DPRINT("Committed %lu bytes at base %p\n", CommitSize, Segment); /* Initialize heap segment if commit was successful */ if (NT_SUCCESS(Status)) @@ -1479,7 +1479,7 @@ RtlCreateHeap(ULONG Flags, MEM_COMMIT, PAGE_READWRITE); - DPRINT("Committed %d bytes at base %p\n", CommitSize, CommittedAddress); + DPRINT("Committed %Iu bytes at base %p\n", CommitSize, CommittedAddress); if (!NT_SUCCESS(Status)) { @@ -3303,7 +3303,8 @@ RtlpValidateHeapSegment( if (CurrentEntry->SegmentOffset != SegmentOffset) { - DPRINT1("HEAP: Heap entry %p SegmentOffset is incorrect %x (should be %x)\n", CurrentEntry, SegmentOffset, CurrentEntry->SegmentOffset); + DPRINT1("HEAP: Heap entry %p SegmentOffset is incorrect %x (should be %x)\n", + CurrentEntry, SegmentOffset, CurrentEntry->SegmentOffset); return FALSE; } @@ -3317,7 +3318,8 @@ RtlpValidateHeapSegment( /* Check if it's not really the last one */ if (CurrentEntry != Segment->LastValidEntry) { - DPRINT1("HEAP: Heap entry %p is not last block in segment (%x)\n", CurrentEntry, Segment->LastValidEntry); + DPRINT1("HEAP: Heap entry %p is not last block in segment (%p)\n", + CurrentEntry, Segment->LastValidEntry); return FALSE; } } @@ -3439,24 +3441,24 @@ RtlpValidateHeap(PHEAP Heap, /* If there is an in-use entry in a free list - that's quite a big problem */ if (FreeEntry->Flags & HEAP_ENTRY_BUSY) { - DPRINT1("HEAP: %x-dedicated list free element %x is marked in-use\n", Size, FreeEntry); + DPRINT1("HEAP: %Ix-dedicated list free element %p is marked in-use\n", Size, FreeEntry); return FALSE; } /* Check sizes according to that specific list's size */ if ((Size == 0) && (FreeEntry->Size < HEAP_FREELISTS)) { - DPRINT1("HEAP: Non dedicated list free element %x has size %x which would fit a dedicated list\n", FreeEntry, FreeEntry->Size); + DPRINT1("HEAP: Non dedicated list free element %p has size %x which would fit a dedicated list\n", FreeEntry, FreeEntry->Size); return FALSE; } else if (Size && (FreeEntry->Size != Size)) { - DPRINT1("HEAP: %x-dedicated list free element %x has incorrect size %x\n", Size, FreeEntry, FreeEntry->Size); + DPRINT1("HEAP: %Ix-dedicated list free element %p has incorrect size %x\n", Size, FreeEntry, FreeEntry->Size); return FALSE; } else if ((Size == 0) && (FreeEntry->Size < PreviousSize)) { - DPRINT1("HEAP: Non dedicated list free element %x is not put in order\n", FreeEntry); + DPRINT1("HEAP: Non dedicated list free element %p is not put in order\n", FreeEntry); return FALSE; } @@ -3514,13 +3516,13 @@ RtlpValidateHeap(PHEAP Heap, if (FreeListEntriesCount != FreeBlocksCount) { - DPRINT1("HEAP: Free blocks count in arena (%d) does not match free blocks number in the free lists (%d)\n", FreeBlocksCount, FreeListEntriesCount); + DPRINT1("HEAP: Free blocks count in arena (%lu) does not match free blocks number in the free lists (%lu)\n", FreeBlocksCount, FreeListEntriesCount); return FALSE; } if (Heap->TotalFreeSize != TotalFreeSize) { - DPRINT1("HEAP: Total size of free blocks in arena (%d) does not equal to the one in heap header (%d)\n", TotalFreeSize, Heap->TotalFreeSize); + DPRINT1("HEAP: Total size of free blocks in arena (%Iu) does not equal to the one in heap header (%Iu)\n", TotalFreeSize, Heap->TotalFreeSize); return FALSE; } @@ -3562,7 +3564,7 @@ BOOLEAN NTAPI RtlValidateHeap( /* Check signature */ if (Heap->Signature != HEAP_SIGNATURE) { - DPRINT1("HEAP: Signature %x is invalid for heap %p\n", Heap->Signature, Heap); + DPRINT1("HEAP: Signature %lx is invalid for heap %p\n", Heap->Signature, Heap); return FALSE; } @@ -3810,12 +3812,12 @@ RtlGetUserInfoHeap(IN PVOID HeapHandle, /* Pass user value */ if (UserValue) *UserValue = (PVOID)Extra->Settable; - - /* Decode and return user flags */ - if (UserFlags) - *UserFlags = (HeapEntry->Flags & HEAP_ENTRY_SETTABLE_FLAGS) << 4; } + /* Decode and return user flags */ + if (UserFlags) + *UserFlags = (HeapEntry->Flags & HEAP_ENTRY_SETTABLE_FLAGS) << 4; + /* Release the heap lock if it was acquired */ if (HeapLocked) RtlLeaveHeapLock(Heap->LockVariable); @@ -3900,53 +3902,59 @@ RtlSetHeapInformation(IN HANDLE HeapHandle OPTIONAL, IN SIZE_T HeapInformationLength) { /* Setting heap information is not really supported except for enabling LFH */ - if (HeapInformationClass == 0) return STATUS_SUCCESS; - - /* Check buffer length */ - if (HeapInformationLength < sizeof(ULONG)) + if (HeapInformationClass == HeapCompatibilityInformation) { - /* The provided buffer is too small */ - return STATUS_BUFFER_TOO_SMALL; - } + /* Check buffer length */ + if (HeapInformationLength < sizeof(ULONG)) + { + /* The provided buffer is too small */ + return STATUS_BUFFER_TOO_SMALL; + } + + /* Check for a special magic value for enabling LFH */ + if (*(PULONG)HeapInformation != 2) + { + return STATUS_UNSUCCESSFUL; + } - /* Check for a special magic value for enabling LFH */ - if (*(PULONG)HeapInformation == 2) - { DPRINT1("RtlSetHeapInformation() needs to enable LFH\n"); return STATUS_SUCCESS; } - return STATUS_UNSUCCESSFUL; + return STATUS_SUCCESS; } NTSTATUS NTAPI RtlQueryHeapInformation(HANDLE HeapHandle, HEAP_INFORMATION_CLASS HeapInformationClass, - PVOID HeapInformation OPTIONAL, - SIZE_T HeapInformationLength OPTIONAL, + PVOID HeapInformation, + SIZE_T HeapInformationLength, PSIZE_T ReturnLength OPTIONAL) { PHEAP Heap = (PHEAP)HeapHandle; /* Only HeapCompatibilityInformation is supported */ - if (HeapInformationClass != HeapCompatibilityInformation) - return STATUS_UNSUCCESSFUL; - - /* Set result length */ - if (ReturnLength) *ReturnLength = sizeof(ULONG); - - /* Check buffer length */ - if (HeapInformationLength < sizeof(ULONG)) + if (HeapInformationClass == HeapCompatibilityInformation) { - /* It's too small, return needed length */ - return STATUS_BUFFER_TOO_SMALL; + /* Set result length */ + if (ReturnLength) + *ReturnLength = sizeof(ULONG); + + /* Check buffer length */ + if (HeapInformationLength < sizeof(ULONG)) + { + /* It's too small, return needed length */ + return STATUS_BUFFER_TOO_SMALL; + } + + /* Return front end heap type */ + *(PULONG)HeapInformation = Heap->FrontEndHeapType; + + return STATUS_SUCCESS; } - /* Return front end heap type */ - *(PULONG)HeapInformation = Heap->FrontEndHeapType; - - return STATUS_SUCCESS; + return STATUS_UNSUCCESSFUL; } NTSTATUS diff --git a/lib/rtl/heappage.c b/lib/rtl/heappage.c index 44c4cfe36b4..1cc3099b6b6 100644 --- a/lib/rtl/heappage.c +++ b/lib/rtl/heappage.c @@ -321,7 +321,7 @@ RtlpDphAllocateVm(PVOID *Base, SIZE_T Size, ULONG Type, ULONG Protection) &Size, Type, Protection); - DPRINT("Page heap: AllocVm (%p, %p, %x) status %x \n", Base, Size, Type, Status); + DPRINT("Page heap: AllocVm (%p, %Ix, %lx) status %lx \n", Base, Size, Type, Status); /* Check for failures */ if (!NT_SUCCESS(Status)) { @@ -330,7 +330,7 @@ RtlpDphAllocateVm(PVOID *Base, SIZE_T Size, ULONG Type, ULONG Protection) _InterlockedIncrement(&RtlpDphCounter); if (RtlpDphBreakOptions & DPH_BREAK_ON_RESERVE_FAIL) { - DPRINT1("Page heap: AllocVm (%p, %p, %x) failed with %x \n", Base, Size, Type, Status); + DPRINT1("Page heap: AllocVm (%p, %Ix, %x) failed with %x \n", Base, Size, Type, Status); DbgBreakPoint(); return Status; } @@ -340,7 +340,7 @@ RtlpDphAllocateVm(PVOID *Base, SIZE_T Size, ULONG Type, ULONG Protection) _InterlockedIncrement(&RtlpDphAllocFails); if (RtlpDphBreakOptions & DPH_BREAK_ON_COMMIT_FAIL) { - DPRINT1("Page heap: AllocVm (%p, %p, %x) failed with %x \n", Base, Size, Type, Status); + DPRINT1("Page heap: AllocVm (%p, %Ix, %x) failed with %x \n", Base, Size, Type, Status); DbgBreakPoint(); return Status; } @@ -357,7 +357,7 @@ RtlpDphFreeVm(PVOID Base, SIZE_T Size, ULONG Type) /* Free the memory */ Status = RtlpSecMemFreeVirtualMemory(NtCurrentProcess(), &Base, &Size, Type); - DPRINT1("Page heap: FreeVm (%p, %p, %x) status %x \n", Base, Size, Type, Status); + DPRINT1("Page heap: FreeVm (%p, %Ix, %x) status %x \n", Base, Size, Type, Status); /* Log/report failures */ if (!NT_SUCCESS(Status)) { @@ -366,7 +366,7 @@ RtlpDphFreeVm(PVOID Base, SIZE_T Size, ULONG Type) _InterlockedIncrement(&RtlpDphReleaseFails); if (RtlpDphBreakOptions & DPH_BREAK_ON_RELEASE_FAIL) { - DPRINT1("Page heap: FreeVm (%p, %p, %x) failed with %x \n", Base, Size, Type, Status); + DPRINT1("Page heap: FreeVm (%p, %Ix, %x) failed with %x \n", Base, Size, Type, Status); DbgBreakPoint(); return Status; } @@ -376,7 +376,7 @@ RtlpDphFreeVm(PVOID Base, SIZE_T Size, ULONG Type) _InterlockedIncrement(&RtlpDphFreeFails); if (RtlpDphBreakOptions & DPH_BREAK_ON_FREE_FAIL) { - DPRINT1("Page heap: FreeVm (%p, %p, %x) failed with %x \n", Base, Size, Type, Status); + DPRINT1("Page heap: FreeVm (%p, %Ix, %x) failed with %x \n", Base, Size, Type, Status); DbgBreakPoint(); return Status; } @@ -401,7 +401,7 @@ RtlpDphProtectVm(PVOID Base, SIZE_T Size, ULONG Protection) _InterlockedIncrement(&RtlpDphProtectFails); if (RtlpDphBreakOptions & DPH_BREAK_ON_PROTECT_FAIL) { - DPRINT1("Page heap: ProtectVm (%p, %p, %x) failed with %x \n", Base, Size, Protection, Status); + DPRINT1("Page heap: ProtectVm (%p, %Ix, %x) failed with %x \n", Base, Size, Protection, Status); DbgBreakPoint(); return Status; } @@ -732,7 +732,7 @@ RtlpDphCoalesceFreeIntoAvailable(PDPH_HEAP_ROOT DphRoot, /* Make sure requested size is not too big */ ASSERT(FreeAllocations >= LeaveOnFreeList); - DPRINT("RtlpDphCoalesceFreeIntoAvailable(%p %d)\n", DphRoot, LeaveOnFreeList); + DPRINT("RtlpDphCoalesceFreeIntoAvailable(%p %lu)\n", DphRoot, LeaveOnFreeList); while (Node) { @@ -1411,7 +1411,8 @@ RtlpDphProcessStartupInitialization() /* Per-process DPH init is done */ RtlpDphPageHeapListInitialized = TRUE; - DPRINT1("Page heap: pid 0x%X: page heap enabled with flags 0x%X.\n", Teb->ClientId.UniqueProcess, RtlpDphGlobalFlags); + DPRINT1("Page heap: pid 0x%p: page heap enabled with flags 0x%X.\n", + Teb->ClientId.UniqueProcess, RtlpDphGlobalFlags); return Status; } @@ -1554,8 +1555,9 @@ RtlpPageHeapCreate(ULONG Flags, if (RtlpDphDebugOptions & DPH_DEBUG_VERBOSE) { - DPRINT1("Page heap: process 0x%X created heap @ %p (%p, flags 0x%X)\n", - NtCurrentTeb()->ClientId.UniqueProcess, (PUCHAR)DphRoot - PAGE_SIZE, DphRoot->NormalHeap, DphRoot->ExtraFlags); + DPRINT1("Page heap: process 0x%p created heap @ %p (%p, flags 0x%X)\n", + NtCurrentTeb()->ClientId.UniqueProcess, (PUCHAR)DphRoot - PAGE_SIZE, + DphRoot->NormalHeap, DphRoot->ExtraFlags); } /* Perform internal validation if required */ @@ -1641,7 +1643,8 @@ RtlpPageHeapDestroy(HANDLE HeapPtr) /* Report success */ if (RtlpDphDebugOptions & DPH_DEBUG_VERBOSE) - DPRINT1("Page heap: process 0x%X destroyed heap @ %p (%p)\n", NtCurrentTeb()->ClientId.UniqueProcess, HeapPtr, NormalHeap); + DPRINT1("Page heap: process 0x%p destroyed heap @ %p (%p)\n", + NtCurrentTeb()->ClientId.UniqueProcess, HeapPtr, NormalHeap); return NULL; } diff --git a/lib/rtl/image.c b/lib/rtl/image.c index d901644d3df..d1fdeca2f97 100644 --- a/lib/rtl/image.c +++ b/lib/rtl/image.c @@ -274,8 +274,7 @@ RtlImageDirectoryEntryToData( MappedAsImage = FALSE; } - - NtHeader = RtlImageNtHeader (BaseAddress); + NtHeader = RtlImageNtHeader(BaseAddress); if (NtHeader == NULL) return NULL; @@ -292,7 +291,7 @@ RtlImageDirectoryEntryToData( return (PVOID)((ULONG_PTR)BaseAddress + Va); /* image mapped as ordinary file, we must find raw pointer */ - return RtlImageRvaToVa (NtHeader, BaseAddress, Va, NULL); + return RtlImageRvaToVa(NtHeader, BaseAddress, Va, NULL); } @@ -341,13 +340,13 @@ RtlImageRvaToVa( if (SectionHeader) Section = *SectionHeader; - if (Section == NULL || - Rva < SWAPD(Section->VirtualAddress) || - Rva >= SWAPD(Section->VirtualAddress) + SWAPD(Section->Misc.VirtualSize)) + if ((Section == NULL) || + (Rva < SWAPD(Section->VirtualAddress)) || + (Rva >= SWAPD(Section->VirtualAddress) + SWAPD(Section->Misc.VirtualSize))) { Section = RtlImageRvaToSection (NtHeader, BaseAddress, Rva); if (Section == NULL) - return 0; + return NULL; if (SectionHeader) *SectionHeader = Section; @@ -418,7 +417,7 @@ LdrProcessRelocationBlockLongLong( case IMAGE_REL_BASED_MIPS_JMPADDR: default: DPRINT1("Unknown/unsupported fixup type %hu.\n", Type); - DPRINT1("Address %x, Current %d, Count %d, *TypeOffset %x\n", Address, i, Count, SWAPW(*TypeOffset)); + DPRINT1("Address %x, Current %u, Count %u, *TypeOffset %x\n", Address, i, Count, SWAPW(*TypeOffset)); return (PIMAGE_BASE_RELOCATION)NULL; } diff --git a/lib/rtl/nls.c b/lib/rtl/nls.c index d6e181dd5ca..8352ea12fed 100644 --- a/lib/rtl/nls.c +++ b/lib/rtl/nls.c @@ -210,11 +210,9 @@ RtlInitNlsTables(IN PUSHORT AnsiTableBase, CaseTableBase == NULL) return; - RtlInitCodePageTable (AnsiTableBase, - &NlsTable->AnsiTableInfo); + RtlInitCodePageTable(AnsiTableBase, &NlsTable->AnsiTableInfo); - RtlInitCodePageTable (OemTableBase, - &NlsTable->OemTableInfo); + RtlInitCodePageTable(OemTableBase, &NlsTable->OemTableInfo); NlsTable->UpperCaseTable = (PUSHORT)CaseTableBase + 2; NlsTable->LowerCaseTable = (PUSHORT)CaseTableBase + *((PUSHORT)CaseTableBase + 1) + 2; diff --git a/lib/rtl/path.c b/lib/rtl/path.c index e82e808787b..8015dc99f7f 100644 --- a/lib/rtl/path.c +++ b/lib/rtl/path.c @@ -286,12 +286,13 @@ RtlpCheckDeviceName(IN PUNICODE_STRING FileName, ULONG NTAPI -RtlGetFullPathName_Ustr(IN PUNICODE_STRING FileName, - IN ULONG Size, - IN PWSTR Buffer, - OUT PCWSTR *ShortName, - OUT PBOOLEAN InvalidName, - OUT RTL_PATH_TYPE *PathType) +RtlGetFullPathName_Ustr( + _In_ PUNICODE_STRING FileName, + _In_ ULONG Size, + _Out_z_bytecap_(Size) PWSTR Buffer, + _Out_opt_ PCWSTR *ShortName, + _Out_opt_ PBOOLEAN InvalidName, + _Out_ RTL_PATH_TYPE *PathType) { PWCHAR FileNameBuffer; ULONG FileNameLength, FileNameChars, DosLength, DosLengthOffset, FullLength; @@ -300,7 +301,7 @@ RtlGetFullPathName_Ustr(IN PUNICODE_STRING FileName, /* For now, assume the name is valid */ DPRINT("Filename: %wZ\n", FileName); - DPRINT("Size and buffer: %lx %S\n", Size, Buffer); + DPRINT("Size and buffer: %lx %p\n", Size, Buffer); if (InvalidName) *InvalidName = FALSE; /* Handle initial path type and failure case */ @@ -374,7 +375,7 @@ RtlGetFullPathName_Ustr(IN PUNICODE_STRING FileName, DPRINT("Path type: %lx\n", *PathType); /* This is disgusting... but avoids re-writing everything */ - DPRINT("Calling old API with %s and %lx and %S\n", FileNameBuffer, Size, Buffer); + DPRINT("Calling old API with '%S' and %lu and %S\n", FileNameBuffer, Size, Buffer); return RtlGetFullPathName_U(FileNameBuffer, Size, Buffer, (PWSTR*)ShortName); } @@ -911,8 +912,9 @@ RtlIsDosDeviceName_U(IN PCWSTR Path) */ ULONG NTAPI -RtlGetCurrentDirectory_U(IN ULONG MaximumLength, - IN PWSTR Buffer) +RtlGetCurrentDirectory_U( + _In_ ULONG MaximumLength, + _Out_bytecap_(MaximumLength) PWSTR Buffer) { ULONG Length, Bytes; PCURDIR CurDir; @@ -983,6 +985,8 @@ RtlGetCurrentDirectory_U(IN ULONG MaximumLength, return Length * sizeof(WCHAR); } + + /* * @implemented */ @@ -1453,7 +1457,7 @@ static ULONG get_full_path_helper( if (reqsize) memcpy(buffer, ins_str, reqsize); reqsize += deplen; - if (ins_str != tmp && ins_str != cd->Buffer) + if (ins_str && ins_str != tmp && ins_str != cd->Buffer) RtlFreeHeap(RtlGetProcessHeap(), 0, ins_str); collapse_path( buffer, (ULONG)mark ); @@ -1824,7 +1828,7 @@ RtlGetFullPathName_UstrEx(IN PUNICODE_STRING FileName, &ShortName, NameInvalid, PathType); - DPRINT("Length: %d StaticBuffer: %S\n", Length, StaticBuffer); + DPRINT("Length: %u StaticBuffer: %S\n", Length, StaticBuffer); if (!Length) { /* Fail if it failed */ @@ -2310,6 +2314,7 @@ RtlDosSearchPath_Ustr(IN ULONG Flags, "the search path, but RtlGetfullPathNameUStrEx() " "returned %08lx\n", __FUNCTION__, + &StaticCandidateString, Status); } DPRINT("STatus: %lx BUFFER: %S\n", Status, CallerBuffer->Buffer); diff --git a/lib/rtl/readme.txt b/lib/rtl/readme.txt index c8b7cc40a54..b26e4c49a5c 100644 --- a/lib/rtl/readme.txt +++ b/lib/rtl/readme.txt @@ -2,4 +2,4 @@ RTL restrictions: ExAllocatePool (and friends) must be used exclusively. RtlAllocateHeap (and friends) must NOT be used! ExAllocatePool (and friends) translate to RtlAllocateHeap (and friends) in ntdll\rtl\libsupp.c. -RtlEnterCriticalSection (and friends) must be used exclusively. ExAcquireFastMutex (and friends) must NOT be used! RtlEnterCriticalSection (and friends) translate to ExAcquireFastMutex (and friends) in ntoskrnl\rtl\libsupp.c. This means that RtlEnterCriticalSection (and friends) can NOT be used recursively in RTL. The reason for choosing RtlEnterCriticalSection (and friends) over ExAcquireFastMutex (and friends) is that the FAST_MUTEX struct is smaller than the RTL_CRITICAL_SECTION struct. \ No newline at end of file +RtlEnterCriticalSection (and friends) must be used exclusively. ExAcquireFastMutex (and friends) must NOT be used! RtlEnterCriticalSection (and friends) translate to ExAcquireFastMutex (and friends) in ntoskrnl\rtl\libsupp.c. This means that RtlEnterCriticalSection (and friends) can NOT be used recursively in RTL. The reason for choosing RtlEnterCriticalSection (and friends) over ExAcquireFastMutex (and friends) is that the FAST_MUTEX struct is smaller than the RTL_CRITICAL_SECTION struct. diff --git a/lib/rtl/registry.c b/lib/rtl/registry.c index 00e3eea5f73..5b9a0e61c9b 100644 --- a/lib/rtl/registry.c +++ b/lib/rtl/registry.c @@ -409,12 +409,15 @@ RtlpCallQueryRegistryRoutine(IN PRTL_QUERY_REGISTRY_TABLE QueryTable, return (Status == STATUS_BUFFER_TOO_SMALL) ? STATUS_SUCCESS : Status; } +_Success_(return!=NULL || BufferSize==0) +_When_(BufferSize!=NULL,__drv_allocatesMem(Mem)) PVOID NTAPI -RtlpAllocDeallocQueryBuffer(IN OUT PSIZE_T BufferSize, - IN PVOID OldBuffer, - IN SIZE_T OldBufferSize, - OUT PNTSTATUS Status) +RtlpAllocDeallocQueryBuffer( + _In_opt_ PSIZE_T BufferSize, + _In_opt_ __drv_freesMem(Mem) PVOID OldBuffer, + _In_ SIZE_T OldBufferSize, + _Out_opt_ _On_failure_(_Post_satisfies_(*Status < 0)) PNTSTATUS Status) { PVOID Buffer = NULL; diff --git a/lib/rtl/res.c b/lib/rtl/res.c index a076295a4ea..a41a39223ff 100644 --- a/lib/rtl/res.c +++ b/lib/rtl/res.c @@ -216,16 +216,17 @@ LdrFindResource_U(PVOID BaseAddress, _SEH2_TRY { - if (ResourceInfo) + if (ResourceInfo) { - DPRINT( "module %p type %ws name %ws lang %04lx level %ld\n", + DPRINT( "module %p type %ws name %ws lang %04lx level %lu\n", BaseAddress, (LPCWSTR)ResourceInfo->Type, Level > 1 ? (LPCWSTR)ResourceInfo->Name : L"", Level > 2 ? ResourceInfo->Language : 0, Level ); } status = find_entry( BaseAddress, ResourceInfo, Level, &res, FALSE ); - if (status == STATUS_SUCCESS) *ResourceDataEntry = res; + if (NT_SUCCESS(status)) + *ResourceDataEntry = res; } _SEH2_EXCEPT(page_fault(_SEH2_GetExceptionCode())) { @@ -263,16 +264,17 @@ LdrFindResourceDirectory_U(IN PVOID BaseAddress, _SEH2_TRY { - if (info) + if (info) { - DPRINT( "module %p type %ws name %ws lang %04lx level %ld\n", + DPRINT( "module %p type %ws name %ws lang %04lx level %lu\n", BaseAddress, (LPCWSTR)info->Type, level > 1 ? (LPCWSTR)info->Name : L"", level > 2 ? info->Language : 0, level ); } status = find_entry( BaseAddress, info, level, &res, TRUE ); - if (status == STATUS_SUCCESS) *addr = res; + if (NT_SUCCESS(status)) + *addr = res; } _SEH2_EXCEPT(page_fault(_SEH2_GetExceptionCode())) { @@ -346,7 +348,7 @@ LdrEnumResources( _In_ PLDR_RESOURCE_INFO ResourceInfo, _In_ ULONG Level, _Inout_ ULONG *ResourceCount, - _Out_opt_ LDR_ENUM_RESOURCE_INFO *Resources) + _Out_writes_to_(*ResourceCount,*ResourceCount) LDR_ENUM_RESOURCE_INFO *Resources) { PUCHAR ResourceData; NTSTATUS Status; diff --git a/lib/rtl/resource.c b/lib/rtl/resource.c index 20ae8e7b7ae..40f6970ea79 100644 --- a/lib/rtl/resource.c +++ b/lib/rtl/resource.c @@ -310,7 +310,7 @@ VOID NTAPI RtlDumpResource(PRTL_RESOURCE Resource) { - DbgPrint("RtlDumpResource(%p):\n\tactive count = %i\n\twaiting readers = %i\n\twaiting writers = %i\n", + DbgPrint("RtlDumpResource(%p):\n\tactive count = %d\n\twaiting readers = %u\n\twaiting writers = %u\n", Resource, Resource->NumberActive, Resource->SharedWaiters, @@ -318,7 +318,7 @@ RtlDumpResource(PRTL_RESOURCE Resource) if (Resource->NumberActive != 0) { - DbgPrint("\towner thread = %08x\n", + DbgPrint("\towner thread = %p\n", Resource->OwningThread); } } diff --git a/lib/rtl/security.c b/lib/rtl/security.c index 0088b50517c..9aa50df5b94 100644 --- a/lib/rtl/security.c +++ b/lib/rtl/security.c @@ -57,7 +57,7 @@ RtlpConvertToAutoInheritSecurityObject(IN PSECURITY_DESCRIPTOR ParentDescriptor, UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } - + /* PUBLIC FUNCTIONS ***********************************************************/ /* @@ -288,7 +288,7 @@ RtlNewSecurityGrantedAccess(IN ACCESS_MASK DesiredAccess, BOOLEAN Granted, CallerToken; TOKEN_STATISTICS TokenStats; ULONG Size; - DPRINT1("RtlNewSecurityGrantedAccess(%p)\n", DesiredAccess); + DPRINT1("RtlNewSecurityGrantedAccess(%lx)\n", DesiredAccess); /* Has the caller passed a token? */ if (!Token) diff --git a/lib/rtl/unicode.c b/lib/rtl/unicode.c index 50a0e70ec5d..39006cd1ce8 100644 --- a/lib/rtl/unicode.c +++ b/lib/rtl/unicode.c @@ -584,14 +584,17 @@ RtlInitUnicodeString( IN PCWSTR SourceString) { SIZE_T Size; - CONST SIZE_T MaxSize = (MAXUSHORT & ~1) - sizeof(WCHAR); // an even number + CONST SIZE_T MaxSize = (MAXUSHORT & ~1) - sizeof(UNICODE_NULL); // an even number if (SourceString) { Size = wcslen(SourceString) * sizeof(WCHAR); - if (Size > MaxSize) Size = MaxSize; + __analysis_assume(Size <= MaxSize); + + if (Size > MaxSize) + Size = MaxSize; DestinationString->Length = (USHORT)Size; - DestinationString->MaximumLength = (USHORT)Size + sizeof(WCHAR); + DestinationString->MaximumLength = (USHORT)Size + sizeof(UNICODE_NULL); } else { diff --git a/lib/rtl/unicodeprefix.c b/lib/rtl/unicodeprefix.c index f3d05a9e533..cc05b3771a4 100644 --- a/lib/rtl/unicodeprefix.c +++ b/lib/rtl/unicodeprefix.c @@ -156,7 +156,7 @@ RtlFindUnicodePrefix(PUNICODE_PREFIX_TABLE PrefixTable, RTL_GENERIC_COMPARE_RESULTS Result; DPRINT("RtlFindUnicodePrefix(): Table %p, FullName %wZ, " - "CaseInsensitive %b\n", PrefixTable, FullName, CaseInsensitiveIndex); + "CaseInsensitive %lu\n", PrefixTable, FullName, CaseInsensitiveIndex); /* Find out how many names there are */ NameCount = ComputeUnicodeNameLength(FullName); @@ -467,7 +467,7 @@ RtlNextUnicodePrefix(PUNICODE_PREFIX_TABLE PrefixTable, PRTL_SPLAY_LINKS SplayLinks; PUNICODE_PREFIX_TABLE_ENTRY Entry, CaseMatchEntry = NULL; - DPRINT("RtlNextUnicodePrefix(): Table %p Restart %b\n", + DPRINT("RtlNextUnicodePrefix(): Table %p Restart %u\n", PrefixTable, Restart); /* We might need this entry 2/3rd of the time, so cache it now */ diff --git a/lib/rtl/workitem.c b/lib/rtl/workitem.c index 5d4fae03eab..e4f2b842011 100644 --- a/lib/rtl/workitem.c +++ b/lib/rtl/workitem.c @@ -456,7 +456,7 @@ RtlpQueueIoWorkerThread(IN OUT PRTLP_WORKITEM WorkItem) /* Couldn't find an appropriate thread, see if we can use the persistent thread (if it exists) for now */ if (ThreadPoolIOWorkerThreads == 0) { - DPRINT1("Failed to find a worker thread for the work item 0x%p!\n"); + DPRINT1("Failed to find a worker thread for the work item 0x%p!\n", WorkItem); ASSERT(IsListEmpty(&ThreadPoolIOWorkerThreadsList)); return STATUS_NO_MEMORY; } diff --git a/lib/sdk/crt/README.txt b/lib/sdk/crt/README.txt index 3ab5606ffdb..402c0081dd4 100644 --- a/lib/sdk/crt/README.txt +++ b/lib/sdk/crt/README.txt @@ -7,4 +7,4 @@ because they are linking with *both* original crt, and ms crt implementation. ReactOS has the only CRT, so no need to make distinct functions. 2. ReactOS compiles two versions of the CRT library, one for usermode (called just "crt"), and one version for kernelmode usage (called "libcntpr"). -In order to separate the code, you can use #ifdef _LIBCNT_ for libcntpr code. \ No newline at end of file +In order to separate the code, you can use #ifdef _LIBCNT_ for libcntpr code. diff --git a/lib/sdk/crt/crt.cmake b/lib/sdk/crt/crt.cmake index 90eac846264..eaf22f2c1c8 100644 --- a/lib/sdk/crt/crt.cmake +++ b/lib/sdk/crt/crt.cmake @@ -433,7 +433,7 @@ elseif(ARCH STREQUAL "amd64") float/amd64/getsetfpcw.S float/amd64/fpreset.S float/amd64/logb.S - math/amd64/acos.S + # math/amd64/acos.S math/amd64/acosf.S math/amd64/atan.S math/amd64/atan2.S diff --git a/lib/sdk/crt/locale/locale.c b/lib/sdk/crt/locale/locale.c index 557b99c24e0..d40608263f2 100644 --- a/lib/sdk/crt/locale/locale.c +++ b/lib/sdk/crt/locale/locale.c @@ -1402,6 +1402,7 @@ char* CDECL setlocale(int category, const char* locale) if(category == LC_ALL) return construct_lc_all(locinfo); + _Analysis_assume_(category <= 5); return locinfo->lc_category[category].locale; } @@ -1481,13 +1482,13 @@ MSVCRT__locale_t global_locale = NULL; void __init_global_locale() { unsigned i; - + LOCK_LOCALE; /* Someone created it before us */ if(global_locale) return; global_locale = MSVCRT__create_locale(0, "C"); - + __lc_codepage = MSVCRT_locale->locinfo->lc_codepage; MSVCRT___lc_collate_cp = MSVCRT_locale->locinfo->lc_collate_cp; __mb_cur_max = MSVCRT_locale->locinfo->mb_cur_max; diff --git a/lib/sdk/crt/math/amd64/asin.c b/lib/sdk/crt/math/amd64/asin.c new file mode 100644 index 00000000000..c38bbe4e0c2 --- /dev/null +++ b/lib/sdk/crt/math/amd64/asin.c @@ -0,0 +1,73 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS CRT + * FILE: lib/crt/math/acos.c + * PURPOSE: Generic C implementation of arc sine + * PROGRAMMER: Timo Kreuzer (timo.kreuzer@reactos.org) + */ + +#define PRECISION 9 + +/* + * The arc sine can be approximated with the following row: + * + * asin(x) = a0*x + a1*x^3 + a2*x^5 + a3*x^7 + a4*x^9 + ... + * + * To reduce the number of multiplications the formula is transformed to + * + * asin(x) = x * (1 + x^2*(a1 + x^2*(a2 + x^2*(a3 + ...) ) ) ) + * + * The coefficients are: + * a0 = 1 + * a1 = (1/2*3) + * a2 = (3*1/4*2*5) + * a3 = (5*3*1/6*4*2*7) + * a4 = (7*5*3*1/8*6*4*2*9) + * a5 = (9*7*5*3*1/10*8*6*4*2*11) + * ... + */ + +double +asin(double x) +{ + double x2, result; + + /* Check range */ + if ((x > 1.) || (x < -1.)) return NaN; + + /* Calculate the square of x */ + x2 = (x * x); + + /* Start with 0, compiler will optimize this away */ + result = 0; + + result += (15*13*11*9*7*5*3*1./(16*14*12*10*8*6*4*2*17)); + result *= x2; + + result += (13*11*9*7*5*3*1./(14*12*10*8*6*4*2*15)); + result *= x2; + + result += (11*9*7*5*3*1./(12*10*8*6*4*2*13)); + result *= x2; + + result += (9*7*5*3*1./(10*8*6*4*2*11)); + result *= x2; + + result += (7*5*3*1./(8*6*4*2*9)); + result *= x2; + + result += (5*3*1./(6*4*2*7)); + result *= x2; + + result += (3*1./(4*2*5)); + result *= x2; + + result += (1./(2*3)); + result *= x2; + + result += 1.; + result *= x; + + return result; +} + diff --git a/lib/sdk/crt/math/amd64/sqrt.S b/lib/sdk/crt/math/amd64/sqrt.S index 4c234eb0739..5238feebc98 100644 --- a/lib/sdk/crt/math/amd64/sqrt.S +++ b/lib/sdk/crt/math/amd64/sqrt.S @@ -9,14 +9,57 @@ /* INCLUDES ******************************************************************/ #include -#include /* CODE **********************************************************************/ .code64 PUBLIC sqrt sqrt: - UNIMPLEMENTED sqrt + + /* Load the sign bit into rdx */ + mov rdx, HEX(8000000000000000) + + /* Move the lower 64 bits of xmm0 into rax */ + movd rax, xmm0 + + /* Test the sign bit */ + test rax, rdx + + /* If it is set, go to the failure path */ + jnz x_is_negative + + /* x is positive, now check if it is NaN by checking if the unsigned + integer value is larger than the highest valid positive value. */ + mov rcx, 7FF0000000000000h + cmp rax, rcx + ja short x_is_nan + + /* All is well, calculate the sqrt */ + sqrtpd xmm0, xmm0 ret +x_is_negative: + /* Load failure return value (-1.#IND00) into rcx */ + mov rcx, HEX(0FFF8000000000000) + + /* Check if the parameter was -0.0 */ + cmp rax, rdx + + /* If it was not, load the failure value, otherwise keep -0.0 */ + cmovne rax, rcx + + /* Move the value back into the return register */ + movd xmm0, rax + ret + +x_is_nan: + /* Create a 1.#QNAN0 by setting this bit */ + mov rcx, HEX(8000000000000) + or rax, rcx + + /* Move the value back into the return register */ + movd xmm0, rax + ret + + END diff --git a/lib/sdk/crt/math/amd64/sqrt.c b/lib/sdk/crt/math/amd64/sqrt.c new file mode 100644 index 00000000000..636b9c7832c --- /dev/null +++ b/lib/sdk/crt/math/amd64/sqrt.c @@ -0,0 +1,77 @@ + +#include + +double +sqrt ( + double x) +{ + register union + { + __m128d x128d; + __m128i x128i; + } u ; + register union + { + unsigned long long ullx; + double dbl; + } u2; + + /* Set the lower double-precision value of u to x. + All that we want, is that the compiler understands that we have the + function parameter in a register that we can address as an __m128. + Sadly there is no obvious way to do that. If we use the union, VS will + generate code to store xmm0 in memory and the read it into a GPR. + We avoid memory access by using a direct move. But even here we won't + get a simple MOVSD. We can either do: + a) _mm_set_sd: move x into the lower part of an xmm register and zero + out the upper part (XORPD+MOVSD) + b) _mm_set1_pd: move x into the lower and higher part of an xmm register + (MOVSD+UNPCKLPD) + c) _mm_set_pd, which either generates a memory access, when we try to + tell it to keep the upper 64 bits, or generate 2 MOVAPS + UNPCKLPD + We choose a, which is probably the fastest. + */ + u.x128d = _mm_set_sd(x); + + /* Move the contents of the lower 64 bit into a 64 bit GPR using MOVD */ + u2.ullx = _mm_cvtsi128_si64(u.x128i); + + /* Check for negative values */ + if (u2.ullx & 0x8000000000000000ULL) + { + /* Check if this is *really* negative and not just -0.0 */ + if (u2.ullx != 0x8000000000000000ULL) + { + /* Return -1.#IND00 */ + u2.ullx = 0xfff8000000000000ULL; + } + + /* Return what we have */ + return u2.dbl; + } + + /* Check if this is a NaN (bits 52-62 are 1, bit 0-61 are not all 0) or + negative (bit 63 is 1) */ + if (u2.ullx > 0x7FF0000000000000ULL) + { + /* Set this bit. That's what MS function does. */ + u2.ullx |= 0x8000000000000ULL; + return u2.dbl; + } + + /* Calculate the square root. */ +#ifdef _MSC_VER + /* Another YAY for the MS compiler. There are 2 instructions we could use: + SQRTPD (computes sqrt for 2 double values) or SQRTSD (computes sqrt for + only the lower 64 bit double value). Obviously we only need 1. And on + Some architectures SQRTPD is twice as slow as SQRTSD. On the other hand + the MS compiler is stupid and always generates an additional MOVAPS + instruction when SQRTSD is used. We choose to use SQRTPD here since on + modern hardware it's as fast as SQRTSD. */ + u.x128d = _mm_sqrt_pd(u.x128d); // SQRTPD +#else + u.x128d = _mm_sqrt_sd(u.x128d, u.x128d); // SQRTSD +#endif + + return u.x128d.m128d_f64[0]; +} diff --git a/lib/sdk/crt/string/strxfrm.c b/lib/sdk/crt/string/strxfrm.c index dc7361bdcec..7e53591285b 100644 --- a/lib/sdk/crt/string/strxfrm.c +++ b/lib/sdk/crt/string/strxfrm.c @@ -17,7 +17,7 @@ size_t strxfrm( char *dest, const char *src, size_t n ) { strncpy(dest, src, n); - return (strlen(dest)); + return strnlen(src, n); } #else size_t strxfrm( char *dest, const char *src, size_t n ) diff --git a/lib/sdk/delayimp/CMakeLists.txt b/lib/sdk/delayimp/CMakeLists.txt index 4873173dbb0..dadd06e0d5b 100644 --- a/lib/sdk/delayimp/CMakeLists.txt +++ b/lib/sdk/delayimp/CMakeLists.txt @@ -1,4 +1,4 @@ add_definitions(-DUNICODE -D_UNICODE) add_library(delayimp delayimp.c) -add_dependencies(delayimp psdk) \ No newline at end of file +add_dependencies(delayimp psdk) diff --git a/lib/sdk/nt/CMakeLists.txt b/lib/sdk/nt/CMakeLists.txt index f3c0adf3c8e..f5cbd0b4233 100644 --- a/lib/sdk/nt/CMakeLists.txt +++ b/lib/sdk/nt/CMakeLists.txt @@ -1,3 +1,3 @@ add_library(nt entry_point.c) -add_dependencies(nt psdk) \ No newline at end of file +add_dependencies(nt psdk) diff --git a/media/CMakeLists.txt b/media/CMakeLists.txt index 87b64003cdb..5a9ef5c2b26 100644 --- a/media/CMakeLists.txt +++ b/media/CMakeLists.txt @@ -6,4 +6,4 @@ add_subdirectory(vgafonts) add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/drivers/etc/hosts DESTINATION reactos/system32/drivers/etc FOR all) add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/drivers/etc/KDBinit DESTINATION reactos/system32/drivers/etc FOR all) add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/drivers/etc/services DESTINATION reactos/system32/drivers/etc FOR all) -add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/sounds/ReactOS_LogOn.wav DESTINATION reactos/media FOR all) \ No newline at end of file +add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/sounds/ReactOS_LogOn.wav DESTINATION reactos/media FOR all) diff --git a/media/doc/DdDeleteDirectDrawObject.txt b/media/doc/DdDeleteDirectDrawObject.txt index 002a3eda0eb..2e0ad2fcfb6 100644 --- a/media/doc/DdDeleteDirectDrawObject.txt +++ b/media/doc/DdDeleteDirectDrawObject.txt @@ -13,4 +13,4 @@ we need release directdraw handler the cache or not cache handler use NtGdiDdDeleteDirectDrawObject((HANDLE)DirectDrawGlobal->hDD); -to release a directdraw handler. \ No newline at end of file +to release a directdraw handler. diff --git a/media/doc/LPC.txt b/media/doc/LPC.txt index acec9cb6047..271fc180c53 100644 --- a/media/doc/LPC.txt +++ b/media/doc/LPC.txt @@ -50,4 +50,4 @@ There are four imporant LPC Sizes to keep in mind. Try to understand them: ========================== 2. Structures ========================== -SOON. TODO. \ No newline at end of file +SOON. TODO. diff --git a/media/doc/README.WINE b/media/doc/README.WINE index 0a97a2a88ee..e2e8e019ac0 100644 --- a/media/doc/README.WINE +++ b/media/doc/README.WINE @@ -71,7 +71,7 @@ reactos/dll/win32/iccvid # Synced to Wine-1.5.19 reactos/dll/win32/icmp # Synced to Wine-0_9_10 reactos/dll/win32/imaadp32.acm # Synced to Wine-1.5.4 reactos/dll/win32/imagehlp # Synced to Wine-1.5.4 -reactos/dll/win32/imm32 # Synced to Wine-1.5.4 +reactos/dll/win32/imm32 # Synced to Wine-1.5.19 reactos/dll/win32/inetcomm # Synced to Wine-1.5.4 reactos/dll/win32/inetmib1 # Synced to Wine-1.5.4 reactos/dll/win32/initpki # Synced to Wine-1.5.19 @@ -179,7 +179,7 @@ reactos/dll/win32/unicows # Synced to Wine-1.3.32 (Win9x only, why do we reactos/dll/win32/updspapi # Synced to Wine-1.5.4 reactos/dll/win32/url # Synced to Wine-1.5.19 reactos/dll/win32/urlmon # Autosync -reactos/dll/win32/usp10 # Synced to Wine-1.5.4 +reactos/dll/win32/usp10 # Synced to Wine-1.5.24 reactos/dll/win32/uxtheme # Forked reactos/dll/win32/version # Autosync reactos/dll/win32/wer # Autosync diff --git a/media/doc/locks.txt b/media/doc/locks.txt index a240f0ec6f5..50796322d8c 100644 --- a/media/doc/locks.txt +++ b/media/doc/locks.txt @@ -36,4 +36,4 @@ EXAMPLES: None. REPLACES: Executive Resources. ROS STATUS: Unimplemented. -TODO: Kernel Locks (Queued and In-Stack Spinlocks) \ No newline at end of file +TODO: Kernel Locks (Queued and In-Stack Spinlocks) diff --git a/media/fonts/CMakeLists.txt b/media/fonts/CMakeLists.txt index 286f308cdf3..4135a9d1ed4 100644 --- a/media/fonts/CMakeLists.txt +++ b/media/fonts/CMakeLists.txt @@ -54,4 +54,4 @@ list(APPEND FONT_FILES foreach(item ${FONT_FILES}) add_cd_file(FILE "${CMAKE_CURRENT_SOURCE_DIR}/${item}" DESTINATION reactos/Fonts FOR all) -endforeach(item) \ No newline at end of file +endforeach(item) diff --git a/media/inf/CMakeLists.txt b/media/inf/CMakeLists.txt index 945ea6b30ca..31c89d36ae0 100644 --- a/media/inf/CMakeLists.txt +++ b/media/inf/CMakeLists.txt @@ -42,4 +42,4 @@ foreach(item ${INF_FILES}) add_cd_file(FILE "${CMAKE_CURRENT_SOURCE_DIR}/${item}" DESTINATION reactos/inf FOR all) endforeach(item) -add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/syssetup.inf DESTINATION reactos/inf FOR all) \ No newline at end of file +add_cd_file(FILE ${CMAKE_CURRENT_SOURCE_DIR}/syssetup.inf DESTINATION reactos/inf FOR all) diff --git a/media/inf/font.inf b/media/inf/font.inf index f51f9a18ffa..a5f4dc37891 100644 --- a/media/inf/font.inf +++ b/media/inf/font.inf @@ -24,90 +24,96 @@ HKLM,"Software\Microsoft\Windows NT\CurrentVersion\FontDPI","LogPixels",0x000100 HKLM,"System\CurrentControlSet\Hardware Profiles\Current\Software\Fonts","LogPixels",0x00010003,120 [Font.Latin.Reg] -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Arial",0x00000000,"Liberation Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Courier",0x00000000,"FreeMono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Courier New",0x00000000,"FreeMono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Fixedsys",0x00000000,"Fixedsys Excelsior 3.01" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Helv",0x00000000,"Tahoma" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Helvetica",0x00000000,"Liberation Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Sans Serif",0x00000000,"Tahoma" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Shell Dlg",0x00000000,"Tahoma" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Shell Dlg 2",0x00000000,"Tahoma" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Tahoma",0x00000000,"Tahoma" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Terminal",0x00000000,"DejaVu Sans Mono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Times New Roman",0x00000000,"Liberation Serif" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Arial",0x00000000,"Liberation Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Courier",0x00000000,"FreeMono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Courier New",0x00000000,"FreeMono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Fixedsys",0x00000000,"Fixedsys Excelsior 3.01-L2" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Helv",0x00000000,"Tahoma" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Helvetica",0x00000000,"Liberation Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Lucida Console",0x00000000,"DejaVu Sans Mono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Sans Serif",0x00000000,"Tahoma" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Shell Dlg",0x00000000,"Tahoma" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Shell Dlg 2",0x00000000,"Tahoma" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Tahoma",0x00000000,"Tahoma" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Terminal",0x00000000,"DejaVu Sans Mono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Times New Roman",0x00000000,"Liberation Serif" [Font.Cyrillic.Reg] -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Arial",0x00000000,"Liberation Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Courier",0x00000000,"FreeMono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Courier New",0x00000000,"FreeMono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Fixedsys",0x00000000,"Fixedsys Excelsior 3.01" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Helv",0x00000000,"Tahoma" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Helvetica",0x00000000,"Liberation Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Sans Serif",0x00000000,"Tahoma" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Shell Dlg",0x00000000,"Tahoma" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Shell Dlg 2",0x00000000,"Tahoma" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Tahoma",0x00000000,"Tahoma" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Terminal",0x00000000,"DejaVu Sans Mono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Times New Roman",0x00000000,"Liberation Serif" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Arial",0x00000000,"Liberation Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Courier",0x00000000,"FreeMono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Courier New",0x00000000,"FreeMono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Fixedsys",0x00000000,"Fixedsys Excelsior 3.01-L2" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Helv",0x00000000,"Tahoma" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Helvetica",0x00000000,"Liberation Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Lucida Console",0x00000000,"DejaVu Sans Mono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Sans Serif",0x00000000,"Tahoma" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Shell Dlg",0x00000000,"Tahoma" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Shell Dlg 2",0x00000000,"Tahoma" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Tahoma",0x00000000,"Tahoma" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Terminal",0x00000000,"DejaVu Sans Mono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Times New Roman",0x00000000,"Liberation Serif" [Font.Greek.Reg] -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Arial",0x00000000,"Liberation Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Courier",0x00000000,"FreeMono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Courier New",0x00000000,"FreeMono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Fixedsys",0x00000000,"Fixedsys Excelsior 3.01" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Helv",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Helvetica",0x00000000,"Liberation Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Sans Serif",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Shell Dlg",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Shell Dlg 2",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Tahoma",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Terminal",0x00000000,"DejaVu Sans Mono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Times New Roman",0x00000000,"Liberation Serif" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Arial",0x00000000,"Liberation Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Courier",0x00000000,"FreeMono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Courier New",0x00000000,"FreeMono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Fixedsys",0x00000000,"Fixedsys Excelsior 3.01-L2" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Helv",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Helvetica",0x00000000,"Liberation Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Lucida Console",0x00000000,"DejaVu Sans Mono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Sans Serif",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Shell Dlg",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Shell Dlg 2",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Tahoma",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Terminal",0x00000000,"DejaVu Sans Mono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Times New Roman",0x00000000,"Liberation Serif" [Font.Hebrew.Reg] -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Arial",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Courier",0x00000000,"FreeMono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Courier New",0x00000000,"FreeMono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Fixedsys",0x00000000,"Fixedsys Excelsior 3.01" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Helv",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Helvetica",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Sans Serif",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Shell Dlg",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Shell Dlg 2",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Tahoma",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Terminal",0x00000000,"DejaVu Sans Mono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Times New Roman",0x00000000,"DejaVu Serif" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Arial",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Courier",0x00000000,"FreeMono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Courier New",0x00000000,"FreeMono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Fixedsys",0x00000000,"Fixedsys Excelsior 3.01-L2" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Helv",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Helvetica",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Lucida Console",0x00000000,"DejaVu Sans Mono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Sans Serif",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Shell Dlg",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Shell Dlg 2",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Tahoma",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Terminal",0x00000000,"DejaVu Sans Mono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Times New Roman",0x00000000,"DejaVu Serif" [Font.CJK.Reg] -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Arial",0x00000000,"Liberation Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Courier",0x00000000,"FreeMono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Courier New",0x00000000,"FreeMono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Fixedsys",0x00000000,"Fixedsys Excelsior 3.01" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Helv",0x00000000,"Droid Sans Fallback" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Helvetica",0x00000000,"Liberation Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Sans Serif",0x00000000,"Droid Sans Fallback" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Shell Dlg",0x00000000,"Droid Sans Fallback" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Shell Dlg 2",0x00000000,"Droid Sans Fallback" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS UI Gothic",0x00000000,"Droid Sans Fallback" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS UI Gothic 2",0x00000000,"Droid Sans Fallback" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Tahoma",0x00000000,"Droid Sans Fallback" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Terminal",0x00000000,"DejaVu Sans Mono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Times New Roman",0x00000000,"Liberation Serif" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Arial",0x00000000,"Liberation Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Courier",0x00000000,"FreeMono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Courier New",0x00000000,"FreeMono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Fixedsys",0x00000000,"Fixedsys Excelsior 3.01-L2" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Helv",0x00000000,"Droid Sans Fallback" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Helvetica",0x00000000,"Liberation Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Lucida Console",0x00000000,"DejaVu Sans Mono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Sans Serif",0x00000000,"Droid Sans Fallback" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Shell Dlg",0x00000000,"Droid Sans Fallback" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Shell Dlg 2",0x00000000,"Droid Sans Fallback" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS UI Gothic",0x00000000,"Droid Sans Fallback" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS UI Gothic 2",0x00000000,"Droid Sans Fallback" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Tahoma",0x00000000,"Droid Sans Fallback" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Terminal",0x00000000,"DejaVu Sans Mono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Times New Roman",0x00000000,"Liberation Serif" [Font.Unicode.Reg] -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Arial",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Courier",0x00000000,"DejaVu Sans Mono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Courier New",0x00000000,"DejaVu Sans Mono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Fixedsys",0x00000000,"Fixedsys Excelsior 3.01" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Helv",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Helvetica",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Sans Serif",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Shell Dlg",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS Shell Dlg 2",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Tahoma",0x00000000,"DejaVu Sans" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Terminal",0x00000000,"DejaVu Sans Mono" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Times New Roman",0x00000000,"DejaVu Serif" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Arial",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Courier",0x00000000,"DejaVu Sans Mono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Courier New",0x00000000,"DejaVu Sans Mono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Fixedsys",0x00000000,"Fixedsys Excelsior 3.01-L2" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Helv",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Helvetica",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Lucida Console",0x00000000,"DejaVu Sans Mono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Sans Serif",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Shell Dlg",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","MS Shell Dlg 2",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Tahoma",0x00000000,"DejaVu Sans" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Terminal",0x00000000,"DejaVu Sans Mono" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes","Times New Roman",0x00000000,"DejaVu Serif" ; cp1252/cp437 US [Font.CP437.96] diff --git a/media/vgafonts/CMakeLists.txt b/media/vgafonts/CMakeLists.txt index d4df67a8ae5..a9232b22c0b 100644 --- a/media/vgafonts/CMakeLists.txt +++ b/media/vgafonts/CMakeLists.txt @@ -18,4 +18,4 @@ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/vgafonts.cab add_custom_target(vgafonts DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/vgafonts.cab) add_cd_file(TARGET vgafonts FILE ${CMAKE_CURRENT_BINARY_DIR}/vgafonts.cab DESTINATION reactos NO_CAB FOR all) -add_cd_file(TARGET vgafonts FILE ${CMAKE_CURRENT_BINARY_DIR}/vgafonts.cab DESTINATION reactos FOR all) \ No newline at end of file +add_cd_file(TARGET vgafonts FILE ${CMAKE_CURRENT_BINARY_DIR}/vgafonts.cab DESTINATION reactos FOR all) diff --git a/ntoskrnl/cache/section/data.c b/ntoskrnl/cache/section/data.c index faa785df34a..b253753ce67 100644 --- a/ntoskrnl/cache/section/data.c +++ b/ntoskrnl/cache/section/data.c @@ -131,9 +131,9 @@ MiZeroFillSection(PVOID Address, PLARGE_INTEGER FileOffsetPtr, ULONG Length) LARGE_INTEGER FileOffset = *FileOffsetPtr, End, FirstMapped; KIRQL OldIrql; - DPRINT("MiZeroFillSection(Address %x,Offset %x,Length %x)\n", + DPRINT("MiZeroFillSection(Address %p, Offset 0x%I64x,Length 0x%lx)\n", Address, - FileOffset.LowPart, + FileOffset.QuadPart, Length); AddressSpace = MmGetKernelAddressSpace(); @@ -224,10 +224,10 @@ _MiFlushMappedSection(PVOID BaseAddress, PPFN_NUMBER Pages; KIRQL OldIrql; - DPRINT("MiFlushMappedSection(%x,%08x,%x,%d,%s:%d)\n", + DPRINT("MiFlushMappedSection(%p,%I64x,%I64x,%u,%s:%d)\n", BaseAddress, - BaseOffset->LowPart, - FileSize, + BaseOffset->QuadPart, + FileSize ? FileSize->QuadPart : 0, WriteData, File, Line); @@ -508,7 +508,7 @@ MmCreateCacheSection(PROS_SECTION_OBJECT *SectionObject, return STATUS_NO_MEMORY; } - DPRINT("Zeroing %x\n", Segment); + DPRINT("Zeroing %p\n", Segment); RtlZeroMemory(Segment, sizeof(MM_SECTION_SEGMENT)); ExInitializeFastMutex(&Segment->Lock); @@ -555,7 +555,7 @@ MmCreateCacheSection(PROS_SECTION_OBJECT *SectionObject, else { KeReleaseSpinLock(&FileObject->IrpListLock, OldIrql); - DPRINTC("Free Segment %x\n", Segment); + DPRINTC("Free Segment %p\n", Segment); ExFreePoolWithTag(Segment, TAG_MM_SECTION_SEGMENT); DPRINT("Filling out Segment info (previous data section)\n"); @@ -583,16 +583,13 @@ MmCreateCacheSection(PROS_SECTION_OBJECT *SectionObject, Section->MaximumSize.QuadPart = MaximumSize.QuadPart; /* Extend file if section is longer */ - DPRINT("MaximumSize %08x%08x ValidDataLength %08x%08x\n", - MaximumSize.u.HighPart, - MaximumSize.u.LowPart, - FileSizes.ValidDataLength.u.HighPart, - FileSizes.ValidDataLength.u.LowPart); + DPRINT("MaximumSize %I64x ValidDataLength %I64x\n", + MaximumSize.QuadPart, + FileSizes.ValidDataLength.QuadPart); if (MaximumSize.QuadPart > FileSizes.ValidDataLength.QuadPart) { - DPRINT("Changing file size to %08x%08x, segment %x\n", - MaximumSize.u.HighPart, - MaximumSize.u.LowPart, + DPRINT("Changing file size to %I64x, segment %p\n", + MaximumSize.QuadPart, Segment); Status = IoSetInformation(FileObject, @@ -609,7 +606,7 @@ MmCreateCacheSection(PROS_SECTION_OBJECT *SectionObject, } } - DPRINTC("Segment %x created (%x)\n", Segment, Segment->Flags); + DPRINTC("Segment %p created (%x)\n", Segment, Segment->Flags); *SectionObject = Section; return STATUS_SUCCESS; @@ -645,7 +642,7 @@ _MiMapViewOfSegment(PMMSUPPORT AddressSpace, if (!NT_SUCCESS(Status)) { - DPRINT("Mapping between 0x%.8X and 0x%.8X failed (%X).\n", + DPRINT("Mapping between 0x%p and 0x%p failed (%X).\n", (*BaseAddress), (char*)(*BaseAddress) + ViewSize, Status); @@ -653,11 +650,11 @@ _MiMapViewOfSegment(PMMSUPPORT AddressSpace, return Status; } - DPRINTC("MiMapViewOfSegment %x %x %x %x %x %wZ %s:%d\n", + DPRINTC("MiMapViewOfSegment %p %p %p %I64x %Ix %wZ %s:%d\n", MmGetAddressSpaceOwner(AddressSpace), *BaseAddress, Segment, - ViewOffset ? ViewOffset->LowPart : 0, + ViewOffset ? ViewOffset->QuadPart : 0, ViewSize, Segment->FileObject ? &Segment->FileObject->FileName : NULL, file, @@ -680,7 +677,7 @@ _MiMapViewOfSegment(PMMSUPPORT AddressSpace, 0, Protect); - DPRINTC("MiMapViewOfSegment(P %x, A %x, T %x)\n", + DPRINTC("MiMapViewOfSegment(P %p, A %p, T %x)\n", MmGetAddressSpaceOwner(AddressSpace), *BaseAddress, MArea->Type); @@ -704,10 +701,9 @@ MiFreeSegmentPage(PMM_SECTION_SEGMENT Segment, PFILE_OBJECT FileObject = Segment->FileObject; Entry = MmGetPageEntrySectionSegment(Segment, FileOffset); - DPRINTC("MiFreeSegmentPage(%x:%08x%08x -> Entry %x\n", + DPRINTC("MiFreeSegmentPage(%p:%I64x -> Entry %Ix\n", Segment, - FileOffset->HighPart, - FileOffset->LowPart, + FileOffset->QuadPart, Entry); if (Entry && !IS_SWAP_FROM_SSE(Entry)) @@ -716,17 +712,16 @@ MiFreeSegmentPage(PMM_SECTION_SEGMENT Segment, PFN_NUMBER OldPage = PFN_FROM_SSE(Entry); if (IS_DIRTY_SSE(Entry) && FileObject) { - DPRINT("MiWriteBackPage(%x,%wZ,%08x%08x)\n", + DPRINT("MiWriteBackPage(%p,%wZ,%I64x)\n", Segment, &FileObject->FileName, - FileOffset->u.HighPart, - FileOffset->u.LowPart); + FileOffset->QuadPart); MiWriteBackPage(FileObject, FileOffset, PAGE_SIZE, OldPage); } - DPRINTC("Free page %x (off %x from %x) (ref ct %d, ent %x, dirty? %s)\n", + DPRINTC("Free page %Ix (off %I64x from %p) (ref ct %lu, ent %Ix, dirty? %s)\n", OldPage, - FileOffset->LowPart, + FileOffset->QuadPart, Segment, MmGetReferenceCountPage(OldPage), Entry, @@ -759,7 +754,7 @@ MmFreeCacheSectionPage(PVOID Context, PMM_SECTION_SEGMENT Segment; LARGE_INTEGER Offset; - DPRINT("MmFreeSectionPage(%x,%x,%x,%x,%d)\n", + DPRINT("MmFreeSectionPage(%p,%p,%Ix,%Ix,%u)\n", MmGetAddressSpaceOwner(ContextData[0]), Address, Page, @@ -777,12 +772,12 @@ MmFreeCacheSectionPage(PVOID Context, if (Page != 0 && PFN_FROM_SSE(Entry) == Page && Dirty) { - DPRINT("Freeing section page %x:%x -> %x\n", Segment, Offset.LowPart, Entry); + DPRINT("Freeing section page %p:%I64x -> %Ix\n", Segment, Offset.QuadPart, Entry); MmSetPageEntrySectionSegment(Segment, &Offset, DIRTY_SSE(Entry)); } if (Page) { - DPRINT("Removing page %x:%x -> %x\n", Segment, Offset.LowPart, Entry); + DPRINT("Removing page %p:%I64x -> %x\n", Segment, Offset.QuadPart, Entry); MmSetSavedSwapEntryPage(Page, 0); MmDeleteRmap(Page, Process, Address); MmDeleteVirtualMapping(Process, Address, FALSE, NULL, NULL); @@ -819,7 +814,7 @@ MmUnmapViewOfCacheSegment(PMMSUPPORT AddressSpace, Context[0] = AddressSpace; Context[1] = Segment; - DPRINT("MmFreeMemoryArea(%x,%x)\n", + DPRINT("MmFreeMemoryArea(%p,%p)\n", MmGetAddressSpaceOwner(AddressSpace), MemoryArea->StartingAddress); @@ -827,7 +822,7 @@ MmUnmapViewOfCacheSegment(PMMSUPPORT AddressSpace, MmUnlockSectionSegment(Segment); - DPRINTC("MiUnmapViewOfSegment %x %x %x\n", + DPRINTC("MiUnmapViewOfSegment %p %p %p\n", MmGetAddressSpaceOwner(AddressSpace), BaseAddress, Segment); @@ -843,15 +838,15 @@ MmExtendCacheSection(PROS_SECTION_OBJECT Section, { LARGE_INTEGER OldSize; PMM_SECTION_SEGMENT Segment = Section->Segment; - DPRINT("Extend Segment %x\n", Segment); + DPRINT("Extend Segment %p\n", Segment); MmLockSectionSegment(Segment); OldSize.QuadPart = Segment->RawLength.QuadPart; MmUnlockSectionSegment(Segment); - DPRINT("OldSize %08x%08x NewSize %08x%08x\n", - OldSize.u.HighPart, OldSize.u.LowPart, - NewSize->u.HighPart, NewSize->u.LowPart); + DPRINT("OldSize 0x%I64x NewSize 0x%I64x\n", + OldSize.QuadPart, + NewSize->QuadPart); if (ExtendFile && OldSize.QuadPart < NewSize->QuadPart) { @@ -883,9 +878,8 @@ MmMapCacheViewInSystemSpaceAtOffset(IN PMM_SECTION_SEGMENT Segment, PMMSUPPORT AddressSpace; NTSTATUS Status; - DPRINT("MmMapViewInSystemSpaceAtOffset() called offset %08x%08x\n", - FileOffset->HighPart, - FileOffset->LowPart); + DPRINT("MmMapViewInSystemSpaceAtOffset() called offset 0x%I64x\n", + FileOffset->QuadPart); AddressSpace = MmGetKernelAddressSpace(); diff --git a/ntoskrnl/cache/section/fault.c b/ntoskrnl/cache/section/fault.c index 41272c9ee23..d7dcb1828c2 100644 --- a/ntoskrnl/cache/section/fault.c +++ b/ntoskrnl/cache/section/fault.c @@ -189,7 +189,7 @@ MmNotPresentFaultCachePage ( } else { - DPRINT("Set %x in address space @ %x\n", Required->Page[0], Address); + DPRINT("Set %x in address space @ %p\n", Required->Page[0], Address); Status = MmCreateVirtualMapping(Process, Address, Attributes, @@ -332,7 +332,7 @@ MiCowCacheSectionPage ( LARGE_INTEGER Offset; PEPROCESS Process = MmGetAddressSpaceOwner(AddressSpace); - DPRINT("MmAccessFaultSectionView(%x, %x, %x, %x)\n", + DPRINT("MmAccessFaultSectionView(%p, %p, %p, %u)\n", AddressSpace, MemoryArea, Address, @@ -358,11 +358,11 @@ MiCowCacheSectionPage ( #endif { ULONG_PTR Entry; - DPRINTC("setting non-cow page %x %x:%x offset %x (%x) to writable\n", + DPRINTC("setting non-cow page %p %p:%p offset %I64x (%Ix) to writable\n", Segment, Process, PAddress, - Offset.u.LowPart, + Offset.QuadPart, MmGetPfnForProcess(Process, Address)); if (Segment->FileObject) { @@ -450,7 +450,7 @@ MiCowCacheSectionPage ( MmReleasePageMemoryConsumer(MC_CACHE, OldPage); MmUnlockSectionSegment(Segment); - DPRINT("Address 0x%.8X\n", Address); + DPRINT("Address 0x%p\n", Address); return STATUS_SUCCESS; } @@ -539,11 +539,11 @@ MmpSectionAccessFaultInner(KPROCESSOR_MODE Mode, RtlZeroMemory(&Context, sizeof(WORK_QUEUE_WITH_CONTEXT)); - DPRINT("MmAccessFault(Mode %d, Address %x)\n", Mode, Address); + DPRINT("MmAccessFault(Mode %d, Address %Ix)\n", Mode, Address); if (KeGetCurrentIrql() >= DISPATCH_LEVEL) { - DPRINT1("Page fault at high IRQL was %d\n", KeGetCurrentIrql()); + DPRINT1("Page fault at high IRQL was %u\n", KeGetCurrentIrql()); return STATUS_UNSUCCESSFUL; } @@ -553,7 +553,7 @@ MmpSectionAccessFaultInner(KPROCESSOR_MODE Mode, /* Check permissions */ if (Mode != KernelMode) { - DPRINT("MmAccessFault(Mode %d, Address %x)\n", Mode, Address); + DPRINT("MmAccessFault(Mode %d, Address %Ix)\n", Mode, Address); return STATUS_ACCESS_VIOLATION; } AddressSpace = MmGetKernelAddressSpace(); @@ -578,11 +578,11 @@ MmpSectionAccessFaultInner(KPROCESSOR_MODE Mode, { MmUnlockAddressSpace(AddressSpace); } - DPRINT("Address: %x\n", Address); + DPRINT("Address: %Ix\n", Address); return STATUS_ACCESS_VIOLATION; } - DPRINT("Type %x (%x -> %x)\n", + DPRINT("Type %x (%p -> %p)\n", MemoryArea->Type, MemoryArea->StartingAddress, MemoryArea->EndingAddress); @@ -605,9 +605,9 @@ MmpSectionAccessFaultInner(KPROCESSOR_MODE Mode, if (Status == STATUS_SUCCESS + 1) { /* Wait page ... */ - DPRINT("Waiting for %x\n", Address); + DPRINT("Waiting for %Ix\n", Address); MiWaitForPageEvent(MmGetAddressSpaceOwner(AddressSpace), Address); - DPRINT("Restarting fault %x\n", Address); + DPRINT("Restarting fault %Ix\n", Address); Status = STATUS_MM_RESTART_OPERATION; } else if (Status == STATUS_MM_RESTART_OPERATION) @@ -619,7 +619,7 @@ MmpSectionAccessFaultInner(KPROCESSOR_MODE Mode, { if (Thread->ActiveFaultCount > 0) { - DPRINT("Already fault handling ... going to work item (%x)\n", + DPRINT("Already fault handling ... going to work item (%Ix)\n", Address); Context.AddressSpace = AddressSpace; Context.MemoryArea = MemoryArea; @@ -657,8 +657,8 @@ MmpSectionAccessFaultInner(KPROCESSOR_MODE Mode, if (!NT_SUCCESS(Status) && MemoryArea->Type == 1) { - DPRINT1("Completed page fault handling %x %x\n", Address, Status); - DPRINT1("Type %x (%x -> %x)\n", + DPRINT1("Completed page fault handling %Ix %x\n", Address, Status); + DPRINT1("Type %x (%p -> %p)\n", MemoryArea->Type, MemoryArea->StartingAddress, MemoryArea->EndingAddress); @@ -693,13 +693,13 @@ MmAccessFaultCacheSection(KPROCESSOR_MODE Mode, PMMSUPPORT AddressSpace; NTSTATUS Status; - DPRINT("MmpAccessFault(Mode %d, Address %x)\n", Mode, Address); + DPRINT("MmpAccessFault(Mode %d, Address %Ix)\n", Mode, Address); Thread = PsGetCurrentThread(); if (KeGetCurrentIrql() >= DISPATCH_LEVEL) { - DPRINT1("Page fault at high IRQL %d, address %x\n", + DPRINT1("Page fault at high IRQL %u, address %Ix\n", KeGetCurrentIrql(), Address); return STATUS_UNSUCCESSFUL; @@ -711,7 +711,7 @@ MmAccessFaultCacheSection(KPROCESSOR_MODE Mode, /* Check permissions */ if (Mode != KernelMode) { - DPRINT1("Address: %x:%x\n", PsGetCurrentProcess(), Address); + DPRINT1("Address: %p:%Ix\n", PsGetCurrentProcess(), Address); return STATUS_ACCESS_VIOLATION; } AddressSpace = MmGetKernelAddressSpace(); @@ -780,13 +780,13 @@ MmNotPresentFaultCacheSectionInner(KPROCESSOR_MODE Mode, { DPRINT1("No memory area\n"); } - DPRINT1("Process %x, Address %x\n", + DPRINT1("Process %p, Address %Ix\n", MmGetAddressSpaceOwner(AddressSpace), Address); break; } - DPRINTC("Type %x (%x -> %x -> %x) in %x\n", + DPRINTC("Type %x (%p -> %08Ix -> %p) in %p\n", MemoryArea->Type, MemoryArea->StartingAddress, Address, @@ -816,9 +816,9 @@ MmNotPresentFaultCacheSectionInner(KPROCESSOR_MODE Mode, else if (Status == STATUS_SUCCESS + 1) { /* Wait page ... */ - DPRINT("Waiting for %x\n", Address); + DPRINT("Waiting for %Ix\n", Address); MiWaitForPageEvent(MmGetAddressSpaceOwner(AddressSpace), Address); - DPRINT("Done waiting for %x\n", Address); + DPRINT("Done waiting for %Ix\n", Address); Status = STATUS_MM_RESTART_OPERATION; } else if (Status == STATUS_MM_RESTART_OPERATION) @@ -831,7 +831,7 @@ MmNotPresentFaultCacheSectionInner(KPROCESSOR_MODE Mode, { if (Thread->ActiveFaultCount > 2) { - DPRINTC("Already fault handling ... going to work item (%x)\n", Address); + DPRINTC("Already fault handling ... going to work item (%Ix)\n", Address); Context.AddressSpace = AddressSpace; Context.MemoryArea = MemoryArea; Context.Required = &Resources; @@ -850,13 +850,13 @@ MmNotPresentFaultCacheSectionInner(KPROCESSOR_MODE Mode, } else { - DPRINT("DoAcquisition %x\n", Resources.DoAcquisition); + DPRINT("DoAcquisition %p\n", Resources.DoAcquisition); Status = Resources.DoAcquisition(AddressSpace, MemoryArea, &Resources); - DPRINT("DoAcquisition %x -> %x\n", + DPRINT("DoAcquisition %p -> %x\n", Resources.DoAcquisition, Status); } @@ -878,7 +878,7 @@ MmNotPresentFaultCacheSectionInner(KPROCESSOR_MODE Mode, } while (Status == STATUS_MM_RESTART_OPERATION); - DPRINTC("Completed page fault handling: %x:%x %x\n", + DPRINTC("Completed page fault handling: %p:%Ix %x\n", MmGetAddressSpaceOwner(AddressSpace), Address, Status); @@ -913,13 +913,13 @@ MmNotPresentFaultCacheSection(KPROCESSOR_MODE Mode, NTSTATUS Status; Address &= ~(PAGE_SIZE - 1); - DPRINT("MmNotPresentFault(Mode %d, Address %x)\n", Mode, Address); + DPRINT("MmNotPresentFault(Mode %d, Address %Ix)\n", Mode, Address); Thread = PsGetCurrentThread(); if (KeGetCurrentIrql() >= DISPATCH_LEVEL) { - DPRINT1("Page fault at high IRQL %d, address %x\n", + DPRINT1("Page fault at high IRQL %u, address %Ix\n", KeGetCurrentIrql(), Address); @@ -953,7 +953,7 @@ MmNotPresentFaultCacheSection(KPROCESSOR_MODE Mode, ASSERT(Status != STATUS_UNSUCCESSFUL); ASSERT(Status != STATUS_INVALID_PARAMETER); - DPRINT("MmAccessFault %x:%x -> %x\n", + DPRINT("MmAccessFault %p:%Ix -> %x\n", MmGetAddressSpaceOwner(AddressSpace), Address, Status); diff --git a/ntoskrnl/cache/section/io.c b/ntoskrnl/cache/section/io.c index c9997de4471..f56b8c7b07d 100644 --- a/ntoskrnl/cache/section/io.c +++ b/ntoskrnl/cache/section/io.c @@ -135,7 +135,7 @@ MiSimpleRead(PFILE_OBJECT FileObject, ASSERT(DeviceObject); - DPRINT("PAGING READ: FileObject %p <%wZ> Offset %08x%08x Length %d\n", + DPRINT("PAGING READ: FileObject %p <%wZ> Offset %08x%08x Length %ul\n", FileObject, &FileObject->FileName, FileOffset->HighPart, @@ -222,10 +222,10 @@ _MiSimpleWrite(PFILE_OBJECT FileObject, DeviceObject = MmGetDeviceObjectForFile(FileObject); ASSERT(DeviceObject); - DPRINT("PAGING WRITE: FileObject %x <%wZ> Offset %x Length %d (%s:%d)\n", + DPRINT("PAGING WRITE: FileObject %p <%wZ> Offset 0x%I64x Length %lu (%s:%d)\n", FileObject, &FileObject->FileName, - FileOffset->LowPart, + FileOffset->QuadPart, Length, File, Line); diff --git a/ntoskrnl/cache/section/newmm.h b/ntoskrnl/cache/section/newmm.h index 082263d1677..c2753f4e7da 100644 --- a/ntoskrnl/cache/section/newmm.h +++ b/ntoskrnl/cache/section/newmm.h @@ -36,12 +36,12 @@ #define SEC_CACHE (0x20000000) #define MiWaitForPageEvent(Process,Address) do { \ - DPRINT("MiWaitForPageEvent %x:%x #\n", Process, Address); \ + DPRINT("MiWaitForPageEvent %p:%Ix #\n", Process, Address); \ KeWaitForSingleObject(&MmWaitPageEvent, 0, KernelMode, FALSE, NULL); \ } while(0) #define MiSetPageEvent(Process,Address) do { \ - DPRINT("MiSetPageEvent %x:%x #\n",Process, Address); \ + DPRINT("MiSetPageEvent %p:%p #\n",Process, (PVOID)(Address)); \ KeSetEvent(&MmWaitPageEvent, IO_NO_INCREMENT, FALSE); \ } while(0) diff --git a/ntoskrnl/cache/section/reqtools.c b/ntoskrnl/cache/section/reqtools.c index 1dae6b7aa36..10b8611a45d 100644 --- a/ntoskrnl/cache/section/reqtools.c +++ b/ntoskrnl/cache/section/reqtools.c @@ -145,11 +145,10 @@ MiReadFilePage(PMMSUPPORT AddressSpace, PMDL Mdl = (PMDL)MdlBase; KIRQL OldIrql; - DPRINTC("Pulling page %08x%08x from %wZ to %x\n", - FileOffset->u.HighPart, - FileOffset->u.LowPart, + DPRINTC("Pulling page %I64x from %wZ to %Ix\n", + FileOffset->QuadPart, &FileObject->FileName, - Page); + *Page); Status = MmRequestPageMemoryConsumer(RequiredResources->Consumer, TRUE, diff --git a/ntoskrnl/cache/section/sptab.c b/ntoskrnl/cache/section/sptab.c index d3b04fd3fa9..d3eb1261965 100644 --- a/ntoskrnl/cache/section/sptab.c +++ b/ntoskrnl/cache/section/sptab.c @@ -123,10 +123,9 @@ MiSectionPageTableGet(PRTL_GENERIC_TABLE Table, ENTRIES_PER_ELEMENT * PAGE_SIZE); PageTable = RtlLookupElementGenericTable(Table, &SearchFileOffset); - DPRINT("MiSectionPageTableGet(%08x,%08x%08x)\n", + DPRINT("MiSectionPageTableGet(%p,%I64x)\n", Table, - FileOffset->HighPart, - FileOffset->LowPart); + FileOffset->QuadPart); return PageTable; } @@ -154,10 +153,9 @@ MiSectionPageTableGetOrAllocate(PRTL_GENERIC_TABLE Table, sizeof(SectionZeroPageTable), NULL); if (!PageTableSlice) return NULL; - DPRINT("Allocate page table %x (%08x%08x)\n", + DPRINT("Allocate page table %p (%I64x)\n", PageTableSlice, - PageTableSlice->FileOffset.u.HighPart, - PageTableSlice->FileOffset.u.LowPart); + PageTableSlice->FileOffset.QuadPart); } return PageTableSlice; } @@ -283,11 +281,10 @@ MmFreePageTablesSectionSegment(PMM_SECTION_SEGMENT Segment, PCACHE_SECTION_PAGE_TABLE Element; DPRINT("MiFreePageTablesSectionSegment(%p)\n", &Segment->PageTable); while ((Element = RtlGetElementGenericTable(&Segment->PageTable, 0))) { - DPRINT("Delete table for <%wZ> %x -> %08x%08x\n", + DPRINT("Delete table for <%wZ> %p -> %I64x\n", Segment->FileObject ? &Segment->FileObject->FileName : NULL, Segment, - Element->FileOffset.u.HighPart, - Element->FileOffset.u.LowPart); + Element->FileOffset.QuadPart); if (FreePage) { ULONG i; @@ -299,10 +296,10 @@ MmFreePageTablesSectionSegment(PMM_SECTION_SEGMENT Segment, Entry = Element->PageEntries[i]; if (Entry && !IS_SWAP_FROM_SSE(Entry)) { - DPRINT("Freeing page %x:%x @ %x\n", + DPRINT("Freeing page %p:%Ix @ %I64x\n", Segment, Entry, - Offset.LowPart); + Offset.QuadPart); FreePage(Segment, &Offset); } diff --git a/ntoskrnl/cc/copy.c b/ntoskrnl/cc/copy.c index 784c517f9b6..8f958140fe0 100644 --- a/ntoskrnl/cc/copy.c +++ b/ntoskrnl/cc/copy.c @@ -337,16 +337,16 @@ CcCopyRead ( PCACHE_SEGMENT current; DPRINT("CcCopyRead(FileObject 0x%p, FileOffset %I64x, " - "Length %d, Wait %d, Buffer 0x%p, IoStatus 0x%p)\n", + "Length %lu, Wait %u, Buffer 0x%p, IoStatus 0x%p)\n", FileObject, FileOffset->QuadPart, Length, Wait, Buffer, IoStatus); Bcb = FileObject->SectionObjectPointer->SharedCacheMap; ReadOffset = (ULONG)FileOffset->QuadPart; - DPRINT("AllocationSize %d, FileSize %d\n", - (ULONG)Bcb->AllocationSize.QuadPart, - (ULONG)Bcb->FileSize.QuadPart); + DPRINT("AllocationSize %I64d, FileSize %I64d\n", + Bcb->AllocationSize.QuadPart, + Bcb->FileSize.QuadPart); /* * Check for the nowait case that all the cache segments that would @@ -456,7 +456,7 @@ CcCopyWrite ( BOOLEAN Valid; DPRINT("CcCopyWrite(FileObject 0x%p, FileOffset %I64x, " - "Length %d, Wait %d, Buffer 0x%p)\n", + "Length %lu, Wait %u, Buffer 0x%p)\n", FileObject, FileOffset->QuadPart, Length, Wait, Buffer); Bcb = FileObject->SectionObjectPointer->SharedCacheMap; @@ -626,7 +626,7 @@ CcZeroData ( KEVENT Event; DPRINT("CcZeroData(FileObject 0x%p, StartOffset %I64x, EndOffset %I64x, " - "Wait %d)\n", FileObject, StartOffset->QuadPart, EndOffset->QuadPart, + "Wait %u)\n", FileObject, StartOffset->QuadPart, EndOffset->QuadPart, Wait); Length = EndOffset->u.LowPart - StartOffset->u.LowPart; diff --git a/ntoskrnl/cc/fs.c b/ntoskrnl/cc/fs.c index 322ca103db6..fd650bd2ddd 100644 --- a/ntoskrnl/cc/fs.c +++ b/ntoskrnl/cc/fs.c @@ -136,10 +136,10 @@ CcSetFileSizes ( DPRINT("CcSetFileSizes(FileObject 0x%p, FileSizes 0x%p)\n", FileObject, FileSizes); - DPRINT("AllocationSize %d, FileSize %d, ValidDataLength %d\n", - (ULONG)FileSizes->AllocationSize.QuadPart, - (ULONG)FileSizes->FileSize.QuadPart, - (ULONG)FileSizes->ValidDataLength.QuadPart); + DPRINT("AllocationSize %I64d, FileSize %I64d, ValidDataLength %I64d\n", + FileSizes->AllocationSize.QuadPart, + FileSizes->FileSize.QuadPart, + FileSizes->ValidDataLength.QuadPart); Bcb = FileObject->SectionObjectPointer->SharedCacheMap; diff --git a/ntoskrnl/cc/pin.c b/ntoskrnl/cc/pin.c index 682e0053d83..ca803d2f18d 100644 --- a/ntoskrnl/cc/pin.c +++ b/ntoskrnl/cc/pin.c @@ -40,7 +40,7 @@ CcMapData ( PINTERNAL_BCB iBcb; ULONG ROffset; - DPRINT("CcMapData(FileObject 0x%p, FileOffset %I64x, Length %d, Flags %d," + DPRINT("CcMapData(FileObject 0x%p, FileOffset %I64x, Length %lu, Flags 0x%lx," " pBcb 0x%p, pBuffer 0x%p)\n", FileObject, FileOffset->QuadPart, Length, Flags, pBcb, pBuffer); diff --git a/ntoskrnl/cc/view.c b/ntoskrnl/cc/view.c index dc12c7fd134..3b5ea8bf22b 100644 --- a/ntoskrnl/cc/view.c +++ b/ntoskrnl/cc/view.c @@ -76,7 +76,7 @@ static void CcRosCacheSegmentIncRefCount_ ( PCACHE_SEGMENT cs, const char* file, ++cs->ReferenceCount; if ( cs->Bcb->Trace ) { - DbgPrint("(%s:%i) CacheSegment %p ++RefCount=%d, Dirty %d, PageOut %d\n", + DbgPrint("(%s:%i) CacheSegment %p ++RefCount=%lu, Dirty %u, PageOut %lu\n", file, line, cs, cs->ReferenceCount, cs->Dirty, cs->PageOut ); } } @@ -85,7 +85,7 @@ static void CcRosCacheSegmentDecRefCount_ ( PCACHE_SEGMENT cs, const char* file, --cs->ReferenceCount; if ( cs->Bcb->Trace ) { - DbgPrint("(%s:%i) CacheSegment %p --RefCount=%d, Dirty %d, PageOut %d\n", + DbgPrint("(%s:%i) CacheSegment %p --RefCount=%lu, Dirty %u, PageOut %lu\n", file, line, cs, cs->ReferenceCount, cs->Dirty, cs->PageOut ); } } @@ -131,7 +131,7 @@ CcRosTraceCacheMap ( current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT, BcbSegmentListEntry); current_entry = current_entry->Flink; - DPRINT1(" CacheSegment 0x%p enabled, RefCount %d, Dirty %d, PageOut %d\n", + DPRINT1(" CacheSegment 0x%p enabled, RefCount %lu, Dirty %u, PageOut %lu\n", current, current->ReferenceCount, current->Dirty, current->PageOut ); } KeReleaseSpinLock(&Bcb->BcbLock, oldirql); @@ -188,7 +188,7 @@ CcRosFlushDirtyPages ( NTSTATUS Status; LARGE_INTEGER ZeroTimeout; - DPRINT("CcRosFlushDirtyPages(Target %d)\n", Target); + DPRINT("CcRosFlushDirtyPages(Target %lu)\n", Target); (*Count) = 0; ZeroTimeout.QuadPart = 0; @@ -300,7 +300,7 @@ CcRosTrimCache ( ULONG i; BOOLEAN FlushedPages = FALSE; - DPRINT("CcRosTrimCache(Target %d)\n", Target); + DPRINT("CcRosTrimCache(Target %lu)\n", Target); InitializeListHead(&FreeList); @@ -381,7 +381,7 @@ retry: if (PagesFreed != 0) { /* Try again after flushing dirty pages */ - DPRINT("Flushed %d dirty cache pages to disk\n", PagesFreed); + DPRINT("Flushed %lu dirty cache pages to disk\n", PagesFreed); goto retry; } } @@ -394,7 +394,7 @@ retry: CcRosInternalFreeCacheSegment(current); } - DPRINT("Evicted %d cache pages\n", (*NrFreed)); + DPRINT("Evicted %lu cache pages\n", (*NrFreed)); return(STATUS_SUCCESS); } @@ -413,7 +413,7 @@ CcRosReleaseCacheSegment ( ASSERT(Bcb); - DPRINT("CcReleaseCacheSegment(Bcb 0x%p, CacheSeg 0x%p, Valid %d)\n", + DPRINT("CcReleaseCacheSegment(Bcb 0x%p, CacheSeg 0x%p, Valid %u)\n", Bcb, CacheSeg, Valid); KeAcquireGuardedMutex(&ViewLock); @@ -464,7 +464,7 @@ CcRosLookupCacheSegment ( ASSERT(Bcb); - DPRINT("CcRosLookupCacheSegment(Bcb -x%p, FileOffset %d)\n", Bcb, FileOffset); + DPRINT("CcRosLookupCacheSegment(Bcb -x%p, FileOffset %lu)\n", Bcb, FileOffset); KeAcquireGuardedMutex(&ViewLock); KeAcquireSpinLock(&Bcb->BcbLock, &oldIrql); @@ -507,7 +507,7 @@ CcRosMarkDirtyCacheSegment ( ASSERT(Bcb); - DPRINT("CcRosMarkDirtyCacheSegment(Bcb 0x%p, FileOffset %d)\n", Bcb, FileOffset); + DPRINT("CcRosMarkDirtyCacheSegment(Bcb 0x%p, FileOffset %lu)\n", Bcb, FileOffset); CacheSeg = CcRosLookupCacheSegment(Bcb, FileOffset); if (CacheSeg == NULL) @@ -554,7 +554,7 @@ CcRosUnmapCacheSegment ( ASSERT(Bcb); - DPRINT("CcRosUnmapCacheSegment(Bcb 0x%p, FileOffset %d, NowDirty %d)\n", + DPRINT("CcRosUnmapCacheSegment(Bcb 0x%p, FileOffset %lu, NowDirty %u)\n", Bcb, FileOffset, NowDirty); CacheSeg = CcRosLookupCacheSegment(Bcb, FileOffset); @@ -1045,7 +1045,7 @@ CcFlushCache ( NTSTATUS Status; KIRQL oldIrql; - DPRINT("CcFlushCache(SectionObjectPointers 0x%p, FileOffset 0x%p, Length %d, IoStatus 0x%p)\n", + DPRINT("CcFlushCache(SectionObjectPointers 0x%p, FileOffset 0x%p, Length %lu, IoStatus 0x%p)\n", SectionObjectPointers, FileOffset, Length, IoStatus); if (SectionObjectPointers && SectionObjectPointers->SharedCacheMap) @@ -1333,7 +1333,7 @@ CcRosInitializeFileCache ( PBCB Bcb; Bcb = FileObject->SectionObjectPointer->SharedCacheMap; - DPRINT("CcRosInitializeFileCache(FileObject 0x%p, Bcb 0x%p, CacheSegmentSize %d)\n", + DPRINT("CcRosInitializeFileCache(FileObject 0x%p, Bcb 0x%p, CacheSegmentSize %lu)\n", FileObject, Bcb, CacheSegmentSize); KeAcquireGuardedMutex(&ViewLock); diff --git a/ntoskrnl/fsrtl/filelock.c b/ntoskrnl/fsrtl/filelock.c index 848e7467f42..6fe7bfd053f 100644 --- a/ntoskrnl/fsrtl/filelock.c +++ b/ntoskrnl/fsrtl/filelock.c @@ -858,7 +858,10 @@ FsRtlFastUnlockSingle(IN PFILE_LOCK FileLock, Find.Exclusive.FileLock.StartingByte = *FileOffset; Find.Exclusive.FileLock.EndingByte.QuadPart = FileOffset->QuadPart + Length->QuadPart; - ASSERT(InternalInfo); + if (!InternalInfo) { + DPRINT("File not previously locked (ever)\n"); + return STATUS_RANGE_NOT_LOCKED; + } Entry = RtlLookupElementGenericTable(&InternalInfo->RangeTable, &Find); if (!Entry) { DPRINT("Range not locked %wZ\n", &FileObject->FileName); diff --git a/ntoskrnl/inbv/inbv.c b/ntoskrnl/inbv/inbv.c index 381ed77ed68..a99677ca268 100644 --- a/ntoskrnl/inbv/inbv.c +++ b/ntoskrnl/inbv/inbv.c @@ -94,7 +94,7 @@ BootImageFadeIn(VOID) ClrUsed = sizeof(_MainPalette) / sizeof(_MainPalette[0]); RtlZeroMemory(PaletteBitmap, sizeof(BITMAPINFOHEADER)); PaletteBitmap->biSize = sizeof(BITMAPINFOHEADER); - PaletteBitmap->biBitCount = 4; + PaletteBitmap->biBitCount = 4; PaletteBitmap->biClrUsed = ClrUsed; /* @@ -104,12 +104,12 @@ BootImageFadeIn(VOID) { for (Index = 0; Index < ClrUsed; Index++) { - Palette[Index].rgbRed = - _MainPalette[Index].rgbRed * Iteration / PALETTE_FADE_STEPS; - Palette[Index].rgbGreen = - _MainPalette[Index].rgbGreen * Iteration / PALETTE_FADE_STEPS; - Palette[Index].rgbBlue = - _MainPalette[Index].rgbBlue * Iteration / PALETTE_FADE_STEPS; + Palette[Index].rgbRed = (UCHAR) + (_MainPalette[Index].rgbRed * Iteration / PALETTE_FADE_STEPS); + Palette[Index].rgbGreen = (UCHAR) + (_MainPalette[Index].rgbGreen * Iteration / PALETTE_FADE_STEPS); + Palette[Index].rgbBlue = (UCHAR) + (_MainPalette[Index].rgbBlue * Iteration / PALETTE_FADE_STEPS); } VidBitBlt(PaletteBitmapBuffer, 0, 0); @@ -221,7 +221,7 @@ InbvDriverInitialize(IN PLOADER_PARAMETER_BLOCK LoaderBlock, { /* Now reset the display, but only if there's a custom boot logo */ VidResetDisplay(CustomLogo); - + /* Find bitmap resources in the kernel */ ResourceCount = min(IDB_CLUSTER_SERVER, Count); for (i = 1; i <= Count; i++) @@ -709,7 +709,7 @@ DisplayBootBitmap(IN BOOLEAN TextMode) InbvSetTextColor(15); InbvSolidColorFill(0, 0, 639, 479, 7); InbvSolidColorFill(0, 421, 639, 479, 1); - + /* Get resources */ Header = InbvGetResourceAddress(IDB_LOGO_HEADER); Band = InbvGetResourceAddress(IDB_LOGO_BAND); @@ -768,7 +768,7 @@ DisplayBootBitmap(IN BOOLEAN TextMode) /* Normal edition */ Text = InbvGetResourceAddress(IDB_SERVER_LOGO); } - + /* Server product, display appropriate status bar color */ InbvGetResourceAddress(IDB_BAR_SERVER); } @@ -805,7 +805,7 @@ DisplayBootBitmap(IN BOOLEAN TextMode) InbvScreenToBufferBlt(Buffer, 413, 237, 7, 7, 8); InbvSolidColorFill(418, 230, 454, 256, 0); InbvBufferToScreenBlt(Buffer, 413, 237, 7, 7, 8); - + /* In setup mode, you haven't selected a SKU yet */ if (ExpInTextModeSetup) Text = NULL; } @@ -851,7 +851,7 @@ DisplayFilter(PCHAR *String) { /* Remove the filter */ InbvInstallDisplayStringFilter(NULL); - + DotHack = FALSE; /* Draw text screen */ diff --git a/ntoskrnl/mm/ARM3/expool.c b/ntoskrnl/mm/ARM3/expool.c index 73a4a8146fe..d496345e5d8 100644 --- a/ntoskrnl/mm/ARM3/expool.c +++ b/ntoskrnl/mm/ARM3/expool.c @@ -572,8 +572,8 @@ ExpRemovePoolTracker(IN ULONG Key, // if (!TableEntry->Key) { - DPRINT1("Empty item reached in tracker table. Tag=0x%08lx, NumberOfBytes=%lu, PoolType=%d\n", - Key, (ULONG)NumberOfBytes, PoolType); + DPRINT1("Empty item reached in tracker table. Hash=0x%lx, TableMask=0x%lx, Tag=0x%08lx, NumberOfBytes=%lu, PoolType=%d\n", + Hash, TableMask, Key, (ULONG)NumberOfBytes, PoolType); ASSERT(Hash == TableMask); } diff --git a/ntoskrnl/mm/ARM3/virtual.c b/ntoskrnl/mm/ARM3/virtual.c index 3d3b4a1f25d..55562cc7134 100644 --- a/ntoskrnl/mm/ARM3/virtual.c +++ b/ntoskrnl/mm/ARM3/virtual.c @@ -3856,8 +3856,7 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, if ((AllocationType & MEM_TOP_DOWN) == MEM_TOP_DOWN) { DPRINT1("MEM_TOP_DOWN not supported\n"); - Status = STATUS_INVALID_PARAMETER; - goto FailPathNoLock; + AllocationType &= ~MEM_TOP_DOWN; } if ((AllocationType & MEM_RESET) == MEM_RESET) { diff --git a/ntoskrnl/mm/rmap.c b/ntoskrnl/mm/rmap.c index 7d1c0b15901..cc35180478e 100644 --- a/ntoskrnl/mm/rmap.c +++ b/ntoskrnl/mm/rmap.c @@ -27,6 +27,16 @@ FAST_MUTEX RmapListLock; /* FUNCTIONS ****************************************************************/ +_IRQL_requires_max_(DISPATCH_LEVEL) +static +VOID +NTAPI +RmapListFree( + _In_ __drv_freesMem(Mem) PVOID P) +{ + ExFreePoolWithTag(P, TAG_RMAP); +} + VOID INIT_FUNCTION NTAPI @@ -35,7 +45,7 @@ MmInitializeRmapList(VOID) ExInitializeFastMutex(&RmapListLock); ExInitializeNPagedLookasideList (&RmapLookasideList, NULL, - NULL, + RmapListFree, 0, sizeof(MM_RMAP_ENTRY), TAG_RMAP, diff --git a/ntoskrnl/mm/section.c b/ntoskrnl/mm/section.c index 2dd55ee15ca..8d321dfd7cb 100644 --- a/ntoskrnl/mm/section.c +++ b/ntoskrnl/mm/section.c @@ -677,6 +677,7 @@ l_ReadHeaderFromFile: pssSegments[i].Length.QuadPart = pishSectionHeaders[i].Misc.VirtualSize; pssSegments[i].Length.LowPart = ALIGN_UP_BY(pssSegments[i].Length.LowPart, nSectionAlignment); + /* FIXME: always false */ if (pssSegments[i].Length.QuadPart < pssSegments[i].Length.QuadPart) DIE(("Cannot align the virtual size of section %u\n", i)); @@ -1393,52 +1394,6 @@ MmNotPresentFaultSectionView(PMMSUPPORT AddressSpace, return(STATUS_SUCCESS); } - /* - * Map anonymous memory for BSS sections - */ - if (Segment->Image.Characteristics & IMAGE_SCN_CNT_UNINITIALIZED_DATA) - { - /* We'll be unlocking the address space below. Prevent us from being preempted - * in faulting in the page. */ - MmCreatePageFileMapping(Process, Address, MM_WAIT_ENTRY); - MmUnlockSectionSegment(Segment); - MI_SET_USAGE(MI_USAGE_SECTION); - if (Process) MI_SET_PROCESS2(Process->ImageFileName); - if (!Process) MI_SET_PROCESS2("Kernel Section"); - Status = MmRequestPageMemoryConsumer(MC_USER, FALSE, &Page); - if (!NT_SUCCESS(Status)) - { - MmUnlockAddressSpace(AddressSpace); - Status = MmRequestPageMemoryConsumer(MC_USER, TRUE, &Page); - MmLockAddressSpace(AddressSpace); - } - if (!NT_SUCCESS(Status)) - { - KeBugCheck(MEMORY_MANAGEMENT); - } - /* Remove the wait entry we placed, so that we can map the page */ - MmDeletePageFileMapping(Process, PAddress, &SwapEntry); - Status = MmCreateVirtualMapping(Process, - PAddress, - Region->Protect, - &Page, - 1); - if (!NT_SUCCESS(Status)) - { - DPRINT("MmCreateVirtualMapping failed, not out of memory\n"); - KeBugCheck(MEMORY_MANAGEMENT); - return(Status); - } - MmInsertRmap(Page, Process, Address); - - /* - * Cleanup and release locks - */ - MiSetPageEvent(Process, Address); - DPRINT("Address 0x%.8X\n", Address); - return(STATUS_SUCCESS); - } - /* * Get the entry corresponding to the offset within the section */ @@ -1508,7 +1463,7 @@ MmNotPresentFaultSectionView(PMMSUPPORT AddressSpace, MmUnlockSectionSegment(Segment); MmDeletePageFileMapping(Process, PAddress, &FakeSwapEntry); - DPRINT("CreateVirtualMapping Page %x Process %p PAddress %p Attributes %x\n", + DPRINT("CreateVirtualMapping Page %x Process %p PAddress %p Attributes %x\n", Page, Process, PAddress, Attributes); Status = MmCreateVirtualMapping(Process, PAddress, @@ -2058,7 +2013,7 @@ MmPageOutSectionView(PMMSUPPORT AddressSpace, Address); KeBugCheckEx(MEMORY_MANAGEMENT, SwapEntry, Page, (ULONG_PTR)Process, (ULONG_PTR)Address); } - MmReleasePageMemoryConsumer(MC_USER, Page); + MmReleasePageMemoryConsumer(MC_USER, Page); MiSetPageEvent(NULL, NULL); return(STATUS_SUCCESS); } diff --git a/ntoskrnl/ob/obname.c b/ntoskrnl/ob/obname.c index 8aeb89fd88c..38e0574c50e 100644 --- a/ntoskrnl/ob/obname.c +++ b/ntoskrnl/ob/obname.c @@ -437,7 +437,7 @@ ObpLookupObjectName(IN HANDLE RootHandle OPTIONAL, } else if (!(ObjectName->Length) || !(ObjectName->Buffer)) { - /* Just return the Root Directory if we didn't get a name*/ + /* Just return the Root Directory if we didn't get a name */ Status = ObReferenceObjectByPointer(RootDirectory, 0, ObjectType, @@ -719,7 +719,7 @@ ParseFromRoot: if (ObjectNameInfo->Name.Buffer) { /* Free it */ - ExFreePoolWithTag(ObjectNameInfo->Name.Buffer, OB_NAME_TAG ); + ExFreePoolWithTag(ObjectNameInfo->Name.Buffer, OB_NAME_TAG); } /* Write new one */ @@ -796,6 +796,11 @@ ReparseObject: /* Reparse again */ Reparse = TRUE; --MaxReparse; + if (MaxReparse == 0) + { + Object = NULL; + break; + } /* Start over from root if we got sent back there */ if ((Status == STATUS_REPARSE_OBJECT) || diff --git a/toolchain-gcc.cmake b/toolchain-gcc.cmake index f2ef79a9e2d..a930b49bd3c 100644 --- a/toolchain-gcc.cmake +++ b/toolchain-gcc.cmake @@ -7,7 +7,7 @@ endif() if (NOT DEFINED MINGW_TOOLCHAIN_PREFIX) if(ARCH STREQUAL "i386") - if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + if(CMAKE_HOST_WIN32) set(MINGW_TOOLCHAIN_PREFIX "" CACHE STRING "MinGW Toolchain Prefix") else() if(NOT $ENV{_ROSBE_VERSION} VERSION_LESS 2.1) diff --git a/win32ss/drivers/displays/vga/CMakeLists.txt b/win32ss/drivers/displays/vga/CMakeLists.txt index c4bab970b2d..eeeca92d7b2 100644 --- a/win32ss/drivers/displays/vga/CMakeLists.txt +++ b/win32ss/drivers/displays/vga/CMakeLists.txt @@ -22,4 +22,4 @@ add_pch(vgaddi vgaddi.h) add_importlibs(vgaddi win32k) target_link_libraries(vgaddi libcntpr) add_dependencies(vgaddi psdk bugcodes) -add_cd_file(TARGET vgaddi DESTINATION reactos/system32 FOR all) \ No newline at end of file +add_cd_file(TARGET vgaddi DESTINATION reactos/system32 FOR all) diff --git a/win32ss/drivers/font/ftfd/freetype.def b/win32ss/drivers/font/ftfd/freetype.def index 883a977f464..74642b0ae99 100644 --- a/win32ss/drivers/font/ftfd/freetype.def +++ b/win32ss/drivers/font/ftfd/freetype.def @@ -27,3 +27,4 @@ EXPORTS FT_Set_Pixel_Sizes FT_Vector_Transform FT_Vector_Unit + FT_Set_Transform diff --git a/win32ss/drivers/font/ftfd/ftfd.spec b/win32ss/drivers/font/ftfd/ftfd.spec index 82143f17c2f..a6a46747b12 100644 --- a/win32ss/drivers/font/ftfd/ftfd.spec +++ b/win32ss/drivers/font/ftfd/ftfd.spec @@ -26,3 +26,4 @@ @ cdecl FT_Set_Pixel_Sizes() @ cdecl FT_Vector_Transform() @ cdecl FT_Vector_Unit() + @ cdecl FT_Set_Transform() diff --git a/win32ss/gdi/eng/bitblt.c b/win32ss/gdi/eng/bitblt.c index 20e34a034fc..5753000b24a 100644 --- a/win32ss/gdi/eng/bitblt.c +++ b/win32ss/gdi/eng/bitblt.c @@ -305,10 +305,10 @@ EngBitBlt( _In_opt_ CLIPOBJ *pco, _In_opt_ XLATEOBJ *pxlo, _In_ RECTL *prclTrg, - _When_(psoSrc, _In_) POINTL *pptlSrc, - _When_(psoMask, _In_) POINTL *pptlMask, + _In_opt_ POINTL *pptlSrc, + _In_opt_ POINTL *pptlMask, _In_opt_ BRUSHOBJ *pbo, - _When_(pbo, _In_) POINTL *pptlBrush, + _In_opt_ POINTL *pptlBrush, _In_ ROP4 rop4) { BYTE clippingType; diff --git a/win32ss/gdi/eng/engevent.c b/win32ss/gdi/eng/engevent.c index 7b3f00859bc..7fe0558b591 100644 --- a/win32ss/gdi/eng/engevent.c +++ b/win32ss/gdi/eng/engevent.c @@ -15,10 +15,12 @@ /* PUBLIC FUNCTIONS ***********************************************************/ +_Must_inspect_result_ +_Success_(return != FALSE) BOOL APIENTRY EngCreateEvent( - _Deref_out_opt_ PEVENT* Event) + _Outptr_ PEVENT *ppEvent) { BOOLEAN Result = TRUE; PENG_EVENT EngEvent; @@ -39,7 +41,7 @@ EngCreateEvent( FALSE); /* Pass pointer to our structure to the caller */ - *Event = EngEvent; + *ppEvent = EngEvent; DPRINT("EngCreateEvent() created %p\n", EngEvent); } else diff --git a/win32ss/gdi/eng/float.c b/win32ss/gdi/eng/float.c index c2030593bd0..84915aefbb6 100644 --- a/win32ss/gdi/eng/float.c +++ b/win32ss/gdi/eng/float.c @@ -18,7 +18,7 @@ BOOL APIENTRY EngRestoreFloatingPointState( - _In_ VOID *Buffer) + PVOID Buffer) { NTSTATUS Status; @@ -34,8 +34,8 @@ EngRestoreFloatingPointState( ULONG APIENTRY EngSaveFloatingPointState( - _Out_ VOID *Buffer, - _In_ ULONG BufferSize) + PVOID Buffer, + ULONG BufferSize) { KFLOATING_SAVE TempBuffer; NTSTATUS Status; diff --git a/win32ss/gdi/eng/mapping.c b/win32ss/gdi/eng/mapping.c index be5ddb185ba..971aad6b239 100644 --- a/win32ss/gdi/eng/mapping.c +++ b/win32ss/gdi/eng/mapping.c @@ -393,7 +393,7 @@ EngLoadModuleEx( Status = MmCreateSection(&pFileView->pSection, SECTION_ALL_ACCESS, NULL, - cjSizeOfModule ? &liSize : NULL, + &liSize, fl & FVF_READONLY ? PAGE_EXECUTE_READ : PAGE_EXECUTE_READWRITE, SEC_COMMIT, hFile, diff --git a/win32ss/gdi/eng/mouse.c b/win32ss/gdi/eng/mouse.c index 0600f266fb7..e4cd3abbba3 100644 --- a/win32ss/gdi/eng/mouse.c +++ b/win32ss/gdi/eng/mouse.c @@ -661,7 +661,7 @@ GreSetPointerShape( psurfMask = SURFACE_ShareLockSurface(hbmMask); else { - ASSERT(fl & SPS_ALPHA); + //ASSERT(fl & SPS_ALPHA); psurfMask = NULL; } diff --git a/win32ss/gdi/eng/surface.c b/win32ss/gdi/eng/surface.c index 6e08c550eec..364fa226e9c 100644 --- a/win32ss/gdi/eng/surface.c +++ b/win32ss/gdi/eng/surface.c @@ -279,7 +279,7 @@ EngCreateBitmap( _In_ LONG lWidth, _In_ ULONG iFormat, _In_ ULONG fl, - _In_ PVOID pvBits) + _In_opt_ PVOID pvBits) { PSURFACE psurf; HBITMAP hbmp; @@ -339,12 +339,12 @@ EngCreateDeviceBitmap( /* Set the device handle */ psurf->SurfObj.dhsurf = dhsurf; - /* Get the handle for the bitmap */ - hbmp = (HBITMAP)psurf->SurfObj.hsurf; - /* Set public ownership */ GDIOBJ_vSetObjectOwner(&psurf->BaseObject, GDI_OBJ_HMGR_PUBLIC); + /* Get the handle for the bitmap */ + hbmp = (HBITMAP)psurf->SurfObj.hsurf; + /* Unlock the surface and return */ SURFACE_UnlockSurface(psurf); return hbmp; @@ -377,12 +377,12 @@ EngCreateDeviceSurface( /* Set the device handle */ psurf->SurfObj.dhsurf = dhsurf; - /* Get the handle for the surface */ - hsurf = psurf->SurfObj.hsurf; - /* Set public ownership */ GDIOBJ_vSetObjectOwner(&psurf->BaseObject, GDI_OBJ_HMGR_PUBLIC); + /* Get the handle for the surface */ + hsurf = psurf->SurfObj.hsurf; + /* Unlock the surface and return */ SURFACE_UnlockSurface(psurf); return hsurf; @@ -479,7 +479,7 @@ EngModifySurface( BOOL APIENTRY EngDeleteSurface( - _In_ HSURF hsurf) + _In_ _Post_ptr_invalid_ HSURF hsurf) { PSURFACE psurf; @@ -537,7 +537,7 @@ NtGdiEngUnlockSurface(IN SURFOBJ *pso) VOID APIENTRY EngUnlockSurface( - _In_ SURFOBJ *pso) + _In_ _Post_ptr_invalid_ SURFOBJ *pso) { if (pso != NULL) { diff --git a/win32ss/gdi/eng/xlateobj.c b/win32ss/gdi/eng/xlateobj.c index b1cb79e5590..fbca0255d8a 100644 --- a/win32ss/gdi/eng/xlateobj.c +++ b/win32ss/gdi/eng/xlateobj.c @@ -11,7 +11,7 @@ #define NDEBUG #include -_Always_(_Post_satisfies_(return==iColor)) +_Post_satisfies_(return==iColor) _Function_class_(FN_XLATE) ULONG FASTCALL @@ -38,7 +38,7 @@ static const BYTE gajXlate6to8[64] = /** iXlate functions **********************************************************/ -_Always_(_Post_satisfies_(return==iColor)) +_Post_satisfies_(return==iColor) _Function_class_(FN_XLATE) ULONG FASTCALL diff --git a/win32ss/gdi/eng/xlateobj.h b/win32ss/gdi/eng/xlateobj.h index 2906fa15e3e..3249c1d1bfe 100644 --- a/win32ss/gdi/eng/xlateobj.h +++ b/win32ss/gdi/eng/xlateobj.h @@ -58,8 +58,8 @@ VOID NTAPI EXLATEOBJ_vInitialize( _Out_ PEXLATEOBJ pexlo, - _In_ PPALETTE ppalSrc, - _In_ PPALETTE ppalDst, + _In_opt_ PPALETTE ppalSrc, + _In_opt_ PPALETTE ppalDst, _In_ COLORREF crSrcBackColor, _In_ COLORREF crDstBackColor, _In_ COLORREF crDstForeColor); diff --git a/win32ss/gdi/gdi32/include/precomp.h b/win32ss/gdi/gdi32/include/precomp.h index e0eddddbc6b..d7afb96bda0 100644 --- a/win32ss/gdi/gdi32/include/precomp.h +++ b/win32ss/gdi/gdi32/include/precomp.h @@ -23,6 +23,7 @@ #include #include #include +#define _ENGINE_EXPORT_ #include #include #include diff --git a/win32ss/gdi/gdi32/misc/stubs.c b/win32ss/gdi/gdi32/misc/stubs.c index 32fbd5de8b7..8d57a8a4764 100644 --- a/win32ss/gdi/gdi32/misc/stubs.c +++ b/win32ss/gdi/gdi32/misc/stubs.c @@ -241,6 +241,8 @@ SetMetaFileBitsEx( if (!size || mh_in->mtType != METAFILE_MEMORY || mh_in->mtVersion != 0x300 || mh_in->mtHeaderSize != sizeof(METAHEADER) / 2) { + DPRINT1("SetMetaFileBitsEx failed: %lu,%lu,0x&lx,%lu\n", + size, mh_in->mtType, mh_in->mtVersion, mh_in->mtHeaderSize); SetLastError(ERROR_INVALID_DATA); return 0; } diff --git a/win32ss/gdi/ntgdi/arc.c b/win32ss/gdi/ntgdi/arc.c index 41cc1c46ec2..b332a90b4bf 100644 --- a/win32ss/gdi/ntgdi/arc.c +++ b/win32ss/gdi/ntgdi/arc.c @@ -131,6 +131,12 @@ IntArc( DC *dc, AngleEnd = atan2((RectSEpts.bottom - CenterY), RectSEpts.right - CenterX)*(360.0/(M_PI*2)); AngleStart = atan2((RectSEpts.top - CenterY), RectSEpts.left - CenterX)*(360.0/(M_PI*2)); + /* Edge Case: Check if the start segments overlaps(is equal) the end segment */ + if (AngleEnd == AngleStart) + { + AngleStart = AngleEnd + 360.0; // Arc(), ArcTo(), Pie() and Chord() are counterclockwise APIs. + } + SfCx = (LONG)(Rcos(AngleStart) * RadiusX); SfCy = (LONG)(Rsin(AngleStart) * RadiusY); EfCx = (LONG)(Rcos(AngleEnd) * RadiusX); diff --git a/win32ss/gdi/ntgdi/device.c b/win32ss/gdi/ntgdi/device.c index a54acdeda34..3740bea2108 100644 --- a/win32ss/gdi/ntgdi/device.c +++ b/win32ss/gdi/ntgdi/device.c @@ -57,7 +57,7 @@ IntCreatePrimarySurface(VOID) DPRINT1("No DESKTOP Window!!!!!\n"); } } - co_IntShowDesktop(rpDesk, SurfSize.cx, SurfSize.cy); + co_IntShowDesktop(rpDesk, SurfSize.cx, SurfSize.cy, TRUE); // Init Primary Displays Device Capabilities. PDEVOBJ_vGetDeviceCaps(gppdevPrimary, &GdiHandleTable->DevCaps); diff --git a/win32ss/gdi/ntgdi/freetype.c b/win32ss/gdi/ntgdi/freetype.c index 37ee0093467..652f22f6f7f 100644 --- a/win32ss/gdi/ntgdi/freetype.c +++ b/win32ss/gdi/ntgdi/freetype.c @@ -59,6 +59,7 @@ typedef struct _FONT_CACHE_ENTRY FT_Face Face; FT_BitmapGlyph BitmapGlyph; int Height; + MATRIX mxWorldToDevice; } FONT_CACHE_ENTRY, *PFONT_CACHE_ENTRY; static LIST_ENTRY FontCacheListHead; static UINT FontCacheNumEntries; @@ -158,6 +159,35 @@ InitFontSupport(VOID) return TRUE; } +VOID +FtSetCoordinateTransform( + FT_Face face, + PMATRIX pmx) +{ + FT_Matrix ftmatrix; + FLOATOBJ efTemp; + + /* Create a freetype matrix, by converting to 16.16 fixpoint format */ + efTemp = pmx->efM11; + FLOATOBJ_MulLong(&efTemp, 0x00010000); + ftmatrix.xx = FLOATOBJ_GetLong(&efTemp); + + efTemp = pmx->efM12; + FLOATOBJ_MulLong(&efTemp, 0x00010000); + ftmatrix.xy = FLOATOBJ_GetLong(&efTemp); + + efTemp = pmx->efM21; + FLOATOBJ_MulLong(&efTemp, 0x00010000); + ftmatrix.yx = FLOATOBJ_GetLong(&efTemp); + + efTemp = pmx->efM22; + FLOATOBJ_MulLong(&efTemp, 0x00010000); + ftmatrix.yy = FLOATOBJ_GetLong(&efTemp); + + /* Set the transformation matrix */ + FT_Set_Transform(face, &ftmatrix, 0); +} + /* * IntLoadSystemFonts * @@ -1264,7 +1294,7 @@ GetFontFamilyInfoForSubstitutes(LPLOGFONTW LogFont, FONT_FAMILY_INFO_CALLBACK_CONTEXT Context; NTSTATUS Status; - /* Enumerate font families found in HKLM\Software\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes + /* Enumerate font families found in HKLM\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes The real work is done in the registry callback function */ Context.LogFont = LogFont; Context.Info = Info; @@ -1283,7 +1313,7 @@ GetFontFamilyInfoForSubstitutes(LPLOGFONTW LogFont, QueryTable[1].Name = NULL; Status = RtlQueryRegistryValues(RTL_REGISTRY_WINDOWS_NT, - L"SysFontSubstitutes", + L"FontSubstitutes", QueryTable, &Context, NULL); @@ -1310,12 +1340,24 @@ ftGdiGetRasterizerCaps(LPRASTERIZER_STATUS lprs) return FALSE; } +static +BOOL +SameScaleMatrix( + PMATRIX pmx1, + PMATRIX pmx2) +{ + return (FLOATOBJ_Equal(&pmx1->efM11, &pmx2->efM11) && + FLOATOBJ_Equal(&pmx1->efM12, &pmx2->efM12) && + FLOATOBJ_Equal(&pmx1->efM21, &pmx2->efM21) && + FLOATOBJ_Equal(&pmx1->efM22, &pmx2->efM22)); +} FT_BitmapGlyph APIENTRY ftGdiGlyphCacheGet( FT_Face Face, INT GlyphIndex, - INT Height) + INT Height, + PMATRIX pmx) { PLIST_ENTRY CurrentEntry; PFONT_CACHE_ENTRY FontEntry; @@ -1324,9 +1366,10 @@ ftGdiGlyphCacheGet( while (CurrentEntry != &FontCacheListHead) { FontEntry = (PFONT_CACHE_ENTRY)CurrentEntry; - if (FontEntry->Face == Face && - FontEntry->GlyphIndex == GlyphIndex && - FontEntry->Height == Height) + if ((FontEntry->Face == Face) && + (FontEntry->GlyphIndex == GlyphIndex) && + (FontEntry->Height == Height) && + (SameScaleMatrix(&FontEntry->mxWorldToDevice, pmx))) break; CurrentEntry = CurrentEntry->Flink; } @@ -1346,6 +1389,7 @@ ftGdiGlyphCacheSet( FT_Face Face, INT GlyphIndex, INT Height, + PMATRIX pmx, FT_GlyphSlot GlyphSlot, FT_Render_Mode RenderMode) { @@ -1395,6 +1439,7 @@ ftGdiGlyphCacheSet( NewEntry->Face = Face; NewEntry->BitmapGlyph = BitmapGlyph; NewEntry->Height = Height; + NewEntry->mxWorldToDevice = *pmx; InsertHeadList(&FontCacheListHead, &NewEntry->ListEntry); if (FontCacheNumEntries++ > MAX_FONT_CACHE) @@ -1552,6 +1597,7 @@ ftGdiGetGlyphOutline( /* FIXME: Should set character height if neg */ // (TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight == 0 ? // dc->ppdev->devinfo.lfDefaultFont.lfHeight : abs(TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight))); +// FtSetCoordinateTransform(face, DC_pmxWorldToDevice(dc)); TEXTOBJ_UnlockText(TextObj); @@ -2098,6 +2144,7 @@ TextIntGetTextExtentPoint(PDC dc, BOOL use_kerning; FT_Render_Mode RenderMode; BOOLEAN Render; + PMATRIX pmxWorldToDevice; FontGDI = ObjToGDI(TextObj->Font, FONT); @@ -2152,6 +2199,10 @@ TextIntGetTextExtentPoint(PDC dc, DPRINT1("Error in setting pixel sizes: %u\n", error); } + /* Get the DC's world-to-device transformation matrix */ + pmxWorldToDevice = DC_pmxWorldToDevice(dc); + FtSetCoordinateTransform(face, pmxWorldToDevice); + use_kerning = FT_HAS_KERNING(face); previous = 0; @@ -2163,7 +2214,8 @@ TextIntGetTextExtentPoint(PDC dc, glyph_index = FT_Get_Char_Index(face, *String); if (!(realglyph = ftGdiGlyphCacheGet(face, glyph_index, - TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight))) + TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight, + pmxWorldToDevice))) { error = FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT); if (error) @@ -2173,8 +2225,12 @@ TextIntGetTextExtentPoint(PDC dc, } glyph = face->glyph; - realglyph = ftGdiGlyphCacheSet(face, glyph_index, - TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight, glyph, RenderMode); + realglyph = ftGdiGlyphCacheSet(face, + glyph_index, + TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight, + pmxWorldToDevice, + glyph, + RenderMode); if (!realglyph) { DPRINT1("Failed to render glyph! [index: %u]\n", glyph_index); @@ -2434,6 +2490,7 @@ ftGdiGetTextMetricsW( /* FIXME: Should set character height if neg */ (TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight == 0 ? dc->ppdev->devinfo.lfDefaultFont.lfHeight : abs(TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight))); + FtSetCoordinateTransform(Face, DC_pmxWorldToDevice(dc)); IntUnLockFreeType; if (0 != Error) { @@ -2660,8 +2717,7 @@ SubstituteFontFamily(PUNICODE_STRING FaceName, UINT Level) return; } - if (SubstituteFontFamilyKey(FaceName, L"SysFontSubstitutes") || - SubstituteFontFamilyKey(FaceName, L"FontSubstitutes")) + if (SubstituteFontFamilyKey(FaceName, L"FontSubstitutes")) { SubstituteFontFamily(FaceName, Level + 1); } @@ -3083,6 +3139,24 @@ NtGdiGetFontFamilyInfo(HDC Dc, return Count; } +LONG +FORCEINLINE +ScaleLong(LONG lValue, PFLOATOBJ pef) +{ + FLOATOBJ efTemp; + + /* Check if we have scaling different from 1 */ + if (!FLOATOBJ_Equal(pef, (PFLOATOBJ)&gef1)) + { + /* Need to multiply */ + FLOATOBJ_SetLong(&efTemp, lValue); + FLOATOBJ_Mul(&efTemp, pef); + lValue = FLOATOBJ_GetLong(&efTemp); + } + + return lValue; +} + BOOL APIENTRY GreExtTextOutW( @@ -3129,6 +3203,8 @@ GreExtTextOutW( POINT Start; BOOL DoBreak = FALSE; USHORT DxShift; + PMATRIX pmxWorldToDevice; + LONG fixAscender, fixDescender; // TODO: Write test-cases to exactly match real Windows in different // bad parameters (e.g. does Windows check the DC or the RECT first?). @@ -3292,16 +3368,22 @@ GreExtTextOutW( goto fail; } + pmxWorldToDevice = DC_pmxWorldToDevice(dc); + FtSetCoordinateTransform(face, pmxWorldToDevice); + /* * Process the vertical alignment and determine the yoff. */ + fixAscender = ScaleLong(face->size->metrics.ascender, &pmxWorldToDevice->efM22); + fixDescender = ScaleLong(face->size->metrics.descender, &pmxWorldToDevice->efM22); + if (pdcattr->lTextAlign & TA_BASELINE) yoff = 0; else if (pdcattr->lTextAlign & TA_BOTTOM) - yoff = -face->size->metrics.descender >> 6; + yoff = -fixDescender >> 6; else /* TA_TOP */ - yoff = face->size->metrics.ascender >> 6; + yoff = fixAscender >> 6; use_kerning = FT_HAS_KERNING(face); previous = 0; @@ -3339,7 +3421,8 @@ GreExtTextOutW( glyph_index = FT_Get_Char_Index(face, *TempText); if (!(realglyph = ftGdiGlyphCacheGet(face, glyph_index, - TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight))) + TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight, + pmxWorldToDevice))) { error = FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT); if (error) @@ -3348,8 +3431,12 @@ GreExtTextOutW( } glyph = face->glyph; - realglyph = ftGdiGlyphCacheSet(face, glyph_index, - TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight, glyph, RenderMode); + realglyph = ftGdiGlyphCacheSet(face, + glyph_index, + TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight, + pmxWorldToDevice, + glyph, + RenderMode); if (!realglyph) { DPRINT1("Failed to render glyph! [index: %u]\n", glyph_index); @@ -3415,7 +3502,8 @@ GreExtTextOutW( glyph_index = FT_Get_Char_Index(face, *String); if (!(realglyph = ftGdiGlyphCacheGet(face, glyph_index, - TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight))) + TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight, + pmxWorldToDevice))) { error = FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT); if (error) @@ -3428,6 +3516,7 @@ GreExtTextOutW( realglyph = ftGdiGlyphCacheSet(face, glyph_index, TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight, + pmxWorldToDevice, glyph, RenderMode); if (!realglyph) @@ -3453,8 +3542,8 @@ GreExtTextOutW( { DestRect.left = BackgroundLeft; DestRect.right = (TextLeft + (realglyph->root.advance.x >> 10) + 32) >> 6; - DestRect.top = TextTop + yoff - ((face->size->metrics.ascender + 32) >> 6); - DestRect.bottom = TextTop + yoff + ((32 - face->size->metrics.descender) >> 6); + DestRect.top = TextTop + yoff - ((fixAscender + 32) >> 6); + DestRect.bottom = TextTop + yoff + ((32 - fixDescender) >> 6); MouseSafetyOnDrawStart(dc->ppdev, DestRect.left, DestRect.top, DestRect.right, DestRect.bottom); IntEngBitBlt( &psurf->SurfObj, @@ -3739,6 +3828,7 @@ NtGdiGetCharABCWidthsW( UINT i, glyph_index, BufferSize; HFONT hFont = 0; NTSTATUS Status = STATUS_SUCCESS; + PMATRIX pmxWorldToDevice; if (pwch) { @@ -3785,6 +3875,9 @@ NtGdiGetCharABCWidthsW( pdcattr = dc->pdcattr; hFont = pdcattr->hlfntNew; TextObj = RealizeFontInit(hFont); + + /* Get the DC's world-to-device transformation matrix */ + pmxWorldToDevice = DC_pmxWorldToDevice(dc); DC_UnlockDc(dc); if (TextObj == NULL) @@ -3828,6 +3921,7 @@ NtGdiGetCharABCWidthsW( /* FIXME: Should set character height if neg */ (TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight == 0 ? dc->ppdev->devinfo.lfDefaultFont.lfHeight : abs(TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight))); + FtSetCoordinateTransform(face, pmxWorldToDevice); for (i = FirstChar; i < FirstChar+Count; i++) { @@ -3912,6 +4006,7 @@ NtGdiGetCharWidthW( FT_CharMap charmap, found = NULL; UINT i, glyph_index, BufferSize; HFONT hFont = 0; + PMATRIX pmxWorldToDevice; if (pwc) { @@ -3952,6 +4047,8 @@ NtGdiGetCharWidthW( pdcattr = dc->pdcattr; hFont = pdcattr->hlfntNew; TextObj = RealizeFontInit(hFont); + /* Get the DC's world-to-device transformation matrix */ + pmxWorldToDevice = DC_pmxWorldToDevice(dc); DC_UnlockDc(dc); if (TextObj == NULL) @@ -3995,6 +4092,7 @@ NtGdiGetCharWidthW( /* FIXME: Should set character height if neg */ (TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight == 0 ? dc->ppdev->devinfo.lfDefaultFont.lfHeight : abs(TextObj->logfont.elfEnumLogfontEx.elfLogFont.lfHeight))); + FtSetCoordinateTransform(face, pmxWorldToDevice); for (i = FirstChar; i < FirstChar+Count; i++) { diff --git a/win32ss/gdi/ntgdi/gdiobj.c b/win32ss/gdi/ntgdi/gdiobj.c index f3365cba33c..a5d75bba98c 100644 --- a/win32ss/gdi/ntgdi/gdiobj.c +++ b/win32ss/gdi/ntgdi/gdiobj.c @@ -1066,11 +1066,10 @@ INT APIENTRY NtGdiExtGetObjectW( IN HANDLE hobj, - IN INT cbCount, + IN INT cjBufferSize, OUT LPVOID lpBuffer) { - INT iRetCount = 0; - INT cbCopyCount; + UINT iResult, cjMaxSize; union { BITMAP bitmap; @@ -1083,33 +1082,33 @@ NtGdiExtGetObjectW( } object; /* Normalize to the largest supported object size */ - cbCount = min((UINT)cbCount, sizeof(object)); + cjMaxSize = min((UINT)cjBufferSize, sizeof(object)); /* Now do the actual call */ - iRetCount = GreGetObject(hobj, cbCount, lpBuffer ? &object : NULL); - cbCopyCount = min((UINT)cbCount, (UINT)iRetCount); + iResult = GreGetObject(hobj, cjMaxSize, lpBuffer ? &object : NULL); - /* Make sure we have a buffer and a copy size */ - if ((cbCopyCount) && (lpBuffer)) + /* Check if we have a buffer and data */ + if ((lpBuffer != NULL) && (iResult != 0)) { /* Enter SEH for buffer transfer */ _SEH2_TRY { /* Probe the buffer and copy it */ - ProbeForWrite(lpBuffer, cbCopyCount, sizeof(WORD)); - RtlCopyMemory(lpBuffer, &object, cbCopyCount); + cjMaxSize = min(cjMaxSize, iResult); + ProbeForWrite(lpBuffer, cjMaxSize, sizeof(WORD)); + RtlCopyMemory(lpBuffer, &object, cjMaxSize); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { /* Clear the return value. * Do *NOT* set last error here! */ - iRetCount = 0; + iResult = 0; } _SEH2_END; } /* Return the count */ - return iRetCount; + return iResult; } W32KAPI diff --git a/win32ss/gdi/ntgdi/gdipool.c b/win32ss/gdi/ntgdi/gdipool.c index 5fac66511be..410b2729c1c 100644 --- a/win32ss/gdi/ntgdi/gdipool.c +++ b/win32ss/gdi/ntgdi/gdipool.c @@ -127,6 +127,7 @@ GdiPoolAllocate( PLIST_ENTRY ple; PVOID pvAlloc, pvBaseAddress; SIZE_T cjSize; + NTSTATUS status; /* Disable APCs and acquire the pool lock */ KeEnterCriticalRegion(); @@ -191,12 +192,17 @@ GdiPoolAllocate( /* Commit the pages */ pvBaseAddress = PAGE_ALIGN(pvAlloc); cjSize = ADDRESS_AND_SIZE_TO_SPAN_PAGES(pvAlloc, pPool->cjAllocSize) * PAGE_SIZE; - ZwAllocateVirtualMemory(NtCurrentProcess(), - &pvBaseAddress, - 0, - &cjSize, - MEM_COMMIT, - PAGE_READWRITE); + status = ZwAllocateVirtualMemory(NtCurrentProcess(), + &pvBaseAddress, + 0, + &cjSize, + MEM_COMMIT, + PAGE_READWRITE); + if (!NT_SUCCESS(status)) + { + pvAlloc = NULL; + goto done; + } pSection->ulCommitBitmap |= ulPageBit; } diff --git a/win32ss/gdi/ntgdi/icm.c b/win32ss/gdi/ntgdi/icm.c index c8f534968c5..54aa505382b 100644 --- a/win32ss/gdi/ntgdi/icm.c +++ b/win32ss/gdi/ntgdi/icm.c @@ -19,17 +19,17 @@ FASTCALL IntGdiCreateColorSpace( PLOGCOLORSPACEEXW pLogColorSpace) { - PCOLORSPACE pCS; - HCOLORSPACE hCS; + PCOLORSPACE pCS; + HCOLORSPACE hCS; - pCS = COLORSPACEOBJ_AllocCSWithHandle(); - hCS = pCS->BaseObject.hHmgr; + pCS = COLORSPACEOBJ_AllocCSWithHandle(); + hCS = pCS->BaseObject.hHmgr; - pCS->lcsColorSpace = pLogColorSpace->lcsColorSpace; - pCS->dwFlags = pLogColorSpace->dwFlags; + pCS->lcsColorSpace = pLogColorSpace->lcsColorSpace; + pCS->dwFlags = pLogColorSpace->dwFlags; - COLORSPACEOBJ_UnlockCS(pCS); - return hCS; + COLORSPACEOBJ_UnlockCS(pCS); + return hCS; } BOOL @@ -37,15 +37,16 @@ FASTCALL IntGdiDeleteColorSpace( HCOLORSPACE hColorSpace) { - BOOL Ret = FALSE; + BOOL Ret = FALSE; - if ( hColorSpace != hStockColorSpace && - GDI_HANDLE_GET_TYPE(hColorSpace) == GDILoObjType_LO_ICMLCS_TYPE) - { - Ret = GreDeleteObject(hColorSpace); - if ( !Ret ) EngSetLastError(ERROR_INVALID_PARAMETER); - } - return Ret; + if ((hColorSpace != hStockColorSpace) && + (GDI_HANDLE_GET_TYPE(hColorSpace) == GDILoObjType_LO_ICMLCS_TYPE)) + { + Ret = GreDeleteObject(hColorSpace); + if (!Ret) EngSetLastError(ERROR_INVALID_PARAMETER); + } + + return Ret; } HANDLE @@ -53,28 +54,27 @@ APIENTRY NtGdiCreateColorSpace( IN PLOGCOLORSPACEEXW pLogColorSpace) { - LOGCOLORSPACEEXW Safelcs; - NTSTATUS Status = STATUS_SUCCESS; + LOGCOLORSPACEEXW Safelcs; + NTSTATUS Status = STATUS_SUCCESS; - _SEH2_TRY - { - ProbeForRead( pLogColorSpace, - sizeof(LOGCOLORSPACEEXW), - 1); - RtlCopyMemory(&Safelcs, pLogColorSpace, sizeof(LOGCOLORSPACEEXW)); - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - Status = _SEH2_GetExceptionCode(); - } - _SEH2_END; + _SEH2_TRY + { + ProbeForRead( pLogColorSpace, sizeof(LOGCOLORSPACEEXW), 1); + RtlCopyMemory(&Safelcs, pLogColorSpace, sizeof(LOGCOLORSPACEEXW)); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; - if (!NT_SUCCESS(Status)) - { - SetLastNtError(Status); - return NULL; - } - return IntGdiCreateColorSpace(&Safelcs); + if (!NT_SUCCESS(Status)) + { + SetLastNtError(Status); + return NULL; + } + + return IntGdiCreateColorSpace(&Safelcs); } BOOL @@ -82,92 +82,95 @@ APIENTRY NtGdiDeleteColorSpace( IN HANDLE hColorSpace) { - return IntGdiDeleteColorSpace(hColorSpace); + return IntGdiDeleteColorSpace(hColorSpace); } BOOL FASTCALL IntGetDeviceGammaRamp(HDEV hPDev, PGAMMARAMP Ramp) { - PPDEVOBJ pGDev = (PPDEVOBJ) hPDev; - int i; + PPDEVOBJ pGDev = (PPDEVOBJ) hPDev; + int i; - if (!(pGDev->flFlags & PDEV_DISPLAY )) return FALSE; + if (!(pGDev->flFlags & PDEV_DISPLAY)) return FALSE; - if ((pGDev->devinfo.iDitherFormat == BMF_8BPP) || - (pGDev->devinfo.iDitherFormat == BMF_16BPP) || - (pGDev->devinfo.iDitherFormat == BMF_24BPP) || - (pGDev->devinfo.iDitherFormat == BMF_32BPP)) - { - if (pGDev->flFlags & PDEV_GAMMARAMP_TABLE) - RtlCopyMemory( Ramp, - pGDev->pvGammaRamp, - sizeof(GAMMARAMP)); - else - // Generate the 256-colors array - for(i=0; i<256; i++ ) + if ((pGDev->devinfo.iDitherFormat == BMF_8BPP) || + (pGDev->devinfo.iDitherFormat == BMF_16BPP) || + (pGDev->devinfo.iDitherFormat == BMF_24BPP) || + (pGDev->devinfo.iDitherFormat == BMF_32BPP)) + { + if (pGDev->flFlags & PDEV_GAMMARAMP_TABLE) { - int NewValue = i * 256; - - Ramp->Red[i] = Ramp->Green[i] = Ramp->Blue[i] = ((WORD)NewValue); + RtlCopyMemory(Ramp, pGDev->pvGammaRamp, sizeof(GAMMARAMP)); } - return TRUE; - } - else - return FALSE; + else + { + // Generate the 256-colors array + for (i = 0; i < 256; i++ ) + { + int NewValue = i * 256; + + Ramp->Red[i] = Ramp->Green[i] = Ramp->Blue[i] = ((WORD)NewValue); + } + } + return TRUE; + } + + return FALSE; } BOOL APIENTRY -NtGdiGetDeviceGammaRamp(HDC hDC, - LPVOID Ramp) +NtGdiGetDeviceGammaRamp( + HDC hDC, + LPVOID Ramp) { - BOOL Ret; - PDC dc; - NTSTATUS Status = STATUS_SUCCESS; - PGAMMARAMP SafeRamp; + BOOL Ret; + PDC dc; + NTSTATUS Status = STATUS_SUCCESS; + PGAMMARAMP SafeRamp; - if (!Ramp) return FALSE; + if (!Ramp) return FALSE; - dc = DC_LockDc(hDC); - if (!dc) - { - EngSetLastError(ERROR_INVALID_HANDLE); - return FALSE; - } + dc = DC_LockDc(hDC); + if (!dc) + { + EngSetLastError(ERROR_INVALID_HANDLE); + return FALSE; + } - SafeRamp = ExAllocatePoolWithTag(PagedPool, sizeof(GAMMARAMP), GDITAG_ICM); - if (!SafeRamp) - { - DC_UnlockDc(dc); - EngSetLastError(STATUS_NO_MEMORY); - return FALSE; - } + SafeRamp = ExAllocatePoolWithTag(PagedPool, sizeof(GAMMARAMP), GDITAG_ICM); + if (!SafeRamp) + { + DC_UnlockDc(dc); + EngSetLastError(STATUS_NO_MEMORY); + return FALSE; + } - Ret = IntGetDeviceGammaRamp((HDEV)dc->ppdev, SafeRamp); + Ret = IntGetDeviceGammaRamp((HDEV)dc->ppdev, SafeRamp); - if (!Ret) return Ret; + if (!Ret) return Ret; - _SEH2_TRY - { - ProbeForWrite(Ramp, sizeof(GAMMARAMP), 1); - RtlCopyMemory(Ramp, SafeRamp, sizeof(GAMMARAMP)); - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - Status = _SEH2_GetExceptionCode(); - } - _SEH2_END; + _SEH2_TRY + { + ProbeForWrite(Ramp, sizeof(GAMMARAMP), 1); + RtlCopyMemory(Ramp, SafeRamp, sizeof(GAMMARAMP)); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; - DC_UnlockDc(dc); - ExFreePoolWithTag(SafeRamp, GDITAG_ICM); + DC_UnlockDc(dc); + ExFreePoolWithTag(SafeRamp, GDITAG_ICM); - if (!NT_SUCCESS(Status)) - { - SetLastNtError(Status); - return FALSE; - } - return Ret; + if (!NT_SUCCESS(Status)) + { + SetLastNtError(Status); + return FALSE; + } + return Ret; } BOOL @@ -175,94 +178,94 @@ APIENTRY NtGdiSetColorSpace(IN HDC hdc, IN HCOLORSPACE hColorSpace) { - PDC pDC; - PDC_ATTR pdcattr; - PCOLORSPACE pCS; + PDC pDC; + PDC_ATTR pdcattr; + PCOLORSPACE pCS; - pDC = DC_LockDc(hdc); - if (!pDC) - { - EngSetLastError(ERROR_INVALID_HANDLE); - return FALSE; - } - pdcattr = pDC->pdcattr; + pDC = DC_LockDc(hdc); + if (!pDC) + { + EngSetLastError(ERROR_INVALID_HANDLE); + return FALSE; + } + pdcattr = pDC->pdcattr; - if (pdcattr->hColorSpace == hColorSpace) - { - DC_UnlockDc(pDC); - return TRUE; - } + if (pdcattr->hColorSpace == hColorSpace) + { + DC_UnlockDc(pDC); + return TRUE; + } - pCS = COLORSPACEOBJ_LockCS(hColorSpace); - if (!pCS) - { - EngSetLastError(ERROR_INVALID_HANDLE); - return FALSE; - } + pCS = COLORSPACEOBJ_LockCS(hColorSpace); + if (!pCS) + { + EngSetLastError(ERROR_INVALID_HANDLE); + return FALSE; + } - if (pDC->dclevel.pColorSpace) - { - GDIOBJ_vDereferenceObject((POBJ) pDC->dclevel.pColorSpace); - } + if (pDC->dclevel.pColorSpace) + { + GDIOBJ_vDereferenceObject((POBJ) pDC->dclevel.pColorSpace); + } - pDC->dclevel.pColorSpace = pCS; - pdcattr->hColorSpace = hColorSpace; + pDC->dclevel.pColorSpace = pCS; + pdcattr->hColorSpace = hColorSpace; - COLORSPACEOBJ_UnlockCS(pCS); - DC_UnlockDc(pDC); - return TRUE; + COLORSPACEOBJ_UnlockCS(pCS); + DC_UnlockDc(pDC); + return TRUE; } BOOL FASTCALL -UpdateDeviceGammaRamp( HDEV hPDev ) +UpdateDeviceGammaRamp(HDEV hPDev) { - BOOL Ret = FALSE; - PPALETTE palGDI; - PALOBJ *palPtr; - PPDEVOBJ pGDev = (PPDEVOBJ) hPDev; + BOOL Ret = FALSE; + PPALETTE palGDI; + PALOBJ *palPtr; + PPDEVOBJ pGDev = (PPDEVOBJ)hPDev; - if ((pGDev->devinfo.iDitherFormat == BMF_8BPP) || - (pGDev->devinfo.iDitherFormat == BMF_16BPP) || - (pGDev->devinfo.iDitherFormat == BMF_24BPP) || - (pGDev->devinfo.iDitherFormat == BMF_32BPP)) - { - if (pGDev->DriverFunctions.IcmSetDeviceGammaRamp) - return pGDev->DriverFunctions.IcmSetDeviceGammaRamp( pGDev->dhpdev, - IGRF_RGB_256WORDS, - pGDev->pvGammaRamp); + if ((pGDev->devinfo.iDitherFormat == BMF_8BPP) || + (pGDev->devinfo.iDitherFormat == BMF_16BPP) || + (pGDev->devinfo.iDitherFormat == BMF_24BPP) || + (pGDev->devinfo.iDitherFormat == BMF_32BPP)) + { + if (pGDev->DriverFunctions.IcmSetDeviceGammaRamp) + return pGDev->DriverFunctions.IcmSetDeviceGammaRamp( pGDev->dhpdev, + IGRF_RGB_256WORDS, + pGDev->pvGammaRamp); - if ( (pGDev->devinfo.iDitherFormat != BMF_8BPP) || - !(pGDev->gdiinfo.flRaster & RC_PALETTE)) return FALSE; + if ((pGDev->devinfo.iDitherFormat != BMF_8BPP) || + !(pGDev->gdiinfo.flRaster & RC_PALETTE)) return FALSE; - if (!(pGDev->flFlags & PDEV_GAMMARAMP_TABLE)) return FALSE; + if (!(pGDev->flFlags & PDEV_GAMMARAMP_TABLE)) return FALSE; - palGDI = PALETTE_ShareLockPalette(pGDev->devinfo.hpalDefault); - if(!palGDI) return FALSE; - palPtr = (PALOBJ*) palGDI; + palGDI = PALETTE_ShareLockPalette(pGDev->devinfo.hpalDefault); + if(!palGDI) return FALSE; + palPtr = (PALOBJ*) palGDI; - if (pGDev->flFlags & PDEV_GAMMARAMP_TABLE) - palGDI->flFlags |= PAL_GAMMACORRECTION; - else - palGDI->flFlags &= ~PAL_GAMMACORRECTION; + if (pGDev->flFlags & PDEV_GAMMARAMP_TABLE) + palGDI->flFlags |= PAL_GAMMACORRECTION; + else + palGDI->flFlags &= ~PAL_GAMMACORRECTION; - if (!(pGDev->flFlags & PDEV_DRIVER_PUNTED_CALL)) // No punting, we hook - { - // BMF_8BPP only! - // PALOBJ_cGetColors check mode flags and update Gamma Correction. - // Set the HDEV to pal and go. - palGDI->hPDev = hPDev; - Ret = pGDev->DriverFunctions.SetPalette(pGDev->dhpdev, - palPtr, - 0, - 0, - palGDI->NumColors); - } - PALETTE_ShareUnlockPalette(palGDI); - return Ret; - } - else - return FALSE; + if (!(pGDev->flFlags & PDEV_DRIVER_PUNTED_CALL)) // No punting, we hook + { + // BMF_8BPP only! + // PALOBJ_cGetColors check mode flags and update Gamma Correction. + // Set the HDEV to pal and go. + palGDI->hPDev = hPDev; + Ret = pGDev->DriverFunctions.SetPalette(pGDev->dhpdev, + palPtr, + 0, + 0, + palGDI->NumColors); + } + PALETTE_ShareUnlockPalette(palGDI); + return Ret; + } + else + return FALSE; } // @@ -274,125 +277,134 @@ BOOL FASTCALL IntSetDeviceGammaRamp(HDEV hPDev, PGAMMARAMP Ramp, BOOL Test) { - WORD IcmGR, i, R, G, B; - BOOL Ret = FALSE, TstPeak; - PPDEVOBJ pGDev = (PPDEVOBJ) hPDev; + WORD IcmGR, i, R, G, B; + BOOL Ret = FALSE, TstPeak; + PPDEVOBJ pGDev = (PPDEVOBJ) hPDev; - if (!hPDev) return FALSE; + if (!hPDev) return FALSE; - if (!(pGDev->flFlags & PDEV_DISPLAY )) return FALSE; + if (!(pGDev->flFlags & PDEV_DISPLAY )) return FALSE; - if ((pGDev->devinfo.iDitherFormat == BMF_8BPP) || - (pGDev->devinfo.iDitherFormat == BMF_16BPP) || - (pGDev->devinfo.iDitherFormat == BMF_24BPP) || - (pGDev->devinfo.iDitherFormat == BMF_32BPP)) - { - if (!pGDev->DriverFunctions.IcmSetDeviceGammaRamp) - { // No driver support - if (!(pGDev->devinfo.flGraphicsCaps2 & GCAPS2_CHANGEGAMMARAMP)) - { // Driver does not support Gamma Ramp, so test to see we - // have BMF_8BPP only and palette operation support. - if ((pGDev->devinfo.iDitherFormat != BMF_8BPP) || - !(pGDev->gdiinfo.flRaster & RC_PALETTE)) return FALSE; - } - } - - if (pGDev->flFlags & PDEV_GAMMARAMP_TABLE) - if (RtlCompareMemory( pGDev->pvGammaRamp, Ramp, sizeof(GAMMARAMP)) == - sizeof(GAMMARAMP)) return TRUE; - // Verify Ramp is inside range. - IcmGR = -IcmGammaRangeSet; - TstPeak = (Test == FALSE); - for (i = 0; i < 256; i++) - { - R = Ramp->Red[i] / 256; - G = Ramp->Green[i] / 256; - B = Ramp->Blue[i] / 256; - if ( R >= IcmGR) - { - if ( R <= IcmGammaRangeSet + i) + if ((pGDev->devinfo.iDitherFormat == BMF_8BPP) || + (pGDev->devinfo.iDitherFormat == BMF_16BPP) || + (pGDev->devinfo.iDitherFormat == BMF_24BPP) || + (pGDev->devinfo.iDitherFormat == BMF_32BPP)) + { + if (!pGDev->DriverFunctions.IcmSetDeviceGammaRamp) + { + // No driver support + if (!(pGDev->devinfo.flGraphicsCaps2 & GCAPS2_CHANGEGAMMARAMP)) { - if ( G >= IcmGR && - (G <= IcmGammaRangeSet + i) && - B >= IcmGR && - (B <= IcmGammaRangeSet + i) ) continue; + // Driver does not support Gamma Ramp, so test to see we + // have BMF_8BPP only and palette operation support. + if ((pGDev->devinfo.iDitherFormat != BMF_8BPP) || + !(pGDev->gdiinfo.flRaster & RC_PALETTE)) return FALSE; } - } - if (Test) return Ret; // Don't set and return. - // No test override, check max range - if (TstPeak) - { - if ( R != (IcmGR * 256) || - G != (IcmGR * 256) || - B != (IcmGR * 256) ) TstPeak = FALSE; // W/i range. - } - } - // ReactOS allocates a ramp even if it is 8BPP and Palette only. - // This way we have a record of the change in memory. - if (!pGDev->pvGammaRamp && !(pGDev->flFlags & PDEV_GAMMARAMP_TABLE)) - { // If the above is true and we have nothing allocated, create it. - pGDev->pvGammaRamp = ExAllocatePoolWithTag(PagedPool, sizeof(GAMMARAMP), GDITAG_ICM); - pGDev->flFlags |= PDEV_GAMMARAMP_TABLE; - } - if (pGDev->pvGammaRamp) - RtlCopyMemory( pGDev->pvGammaRamp, Ramp, sizeof(GAMMARAMP)); + } - Ret = UpdateDeviceGammaRamp(hPDev); + if (pGDev->flFlags & PDEV_GAMMARAMP_TABLE) + { + if (RtlCompareMemory(pGDev->pvGammaRamp, Ramp, sizeof(GAMMARAMP)) == + sizeof(GAMMARAMP)) return TRUE; + } - return Ret; - } - else - return Ret; + // Verify Ramp is inside range. + IcmGR = -IcmGammaRangeSet; + TstPeak = (Test == FALSE); + for (i = 0; i < 256; i++) + { + R = Ramp->Red[i] / 256; + G = Ramp->Green[i] / 256; + B = Ramp->Blue[i] / 256; + + if (R >= IcmGR) + { + if (R <= IcmGammaRangeSet + i) + { + if ((G >= IcmGR) && + (G <= IcmGammaRangeSet + i) && + (B >= IcmGR) && + (B <= IcmGammaRangeSet + i) ) continue; + } + } + + if (Test) return Ret; // Don't set and return. + + // No test override, check max range + if (TstPeak) + { + if ((R != (IcmGR * 256)) || + (G != (IcmGR * 256)) || + (B != (IcmGR * 256)) ) TstPeak = FALSE; // W/i range. + } + } + // ReactOS allocates a ramp even if it is 8BPP and Palette only. + // This way we have a record of the change in memory. + if (!pGDev->pvGammaRamp && !(pGDev->flFlags & PDEV_GAMMARAMP_TABLE)) + { + // If the above is true and we have nothing allocated, create it. + pGDev->pvGammaRamp = ExAllocatePoolWithTag(PagedPool, sizeof(GAMMARAMP), GDITAG_ICM); + pGDev->flFlags |= PDEV_GAMMARAMP_TABLE; + } + + if (pGDev->pvGammaRamp) + RtlCopyMemory(pGDev->pvGammaRamp, Ramp, sizeof(GAMMARAMP)); + + Ret = UpdateDeviceGammaRamp(hPDev); + } + + return Ret; } BOOL APIENTRY -NtGdiSetDeviceGammaRamp(HDC hDC, - LPVOID Ramp) +NtGdiSetDeviceGammaRamp( + HDC hDC, + LPVOID Ramp) { - BOOL Ret; - PDC dc; - NTSTATUS Status = STATUS_SUCCESS; - PGAMMARAMP SafeRamp; - if (!Ramp) return FALSE; + BOOL Ret; + PDC dc; + NTSTATUS Status = STATUS_SUCCESS; + PGAMMARAMP SafeRamp; + if (!Ramp) return FALSE; - dc = DC_LockDc(hDC); - if (!dc) - { - EngSetLastError(ERROR_INVALID_HANDLE); - return FALSE; - } + dc = DC_LockDc(hDC); + if (!dc) + { + EngSetLastError(ERROR_INVALID_HANDLE); + return FALSE; + } - SafeRamp = ExAllocatePoolWithTag(PagedPool, sizeof(GAMMARAMP), GDITAG_ICM); - if (!SafeRamp) - { - DC_UnlockDc(dc); - EngSetLastError(STATUS_NO_MEMORY); - return FALSE; - } - _SEH2_TRY - { - ProbeForRead(Ramp, sizeof(GAMMARAMP), 1); - RtlCopyMemory(SafeRamp, Ramp, sizeof(GAMMARAMP)); - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - Status = _SEH2_GetExceptionCode(); - } - _SEH2_END; + SafeRamp = ExAllocatePoolWithTag(PagedPool, sizeof(GAMMARAMP), GDITAG_ICM); + if (!SafeRamp) + { + DC_UnlockDc(dc); + EngSetLastError(STATUS_NO_MEMORY); + return FALSE; + } + _SEH2_TRY + { + ProbeForRead(Ramp, sizeof(GAMMARAMP), 1); + RtlCopyMemory(SafeRamp, Ramp, sizeof(GAMMARAMP)); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; - if (!NT_SUCCESS(Status)) - { - DC_UnlockDc(dc); - ExFreePoolWithTag(SafeRamp, GDITAG_ICM); - SetLastNtError(Status); - return FALSE; - } + if (!NT_SUCCESS(Status)) + { + DC_UnlockDc(dc); + ExFreePoolWithTag(SafeRamp, GDITAG_ICM); + SetLastNtError(Status); + return FALSE; + } - Ret = IntSetDeviceGammaRamp((HDEV)dc->ppdev, SafeRamp, TRUE); - DC_UnlockDc(dc); - ExFreePoolWithTag(SafeRamp, GDITAG_ICM); - return Ret; + Ret = IntSetDeviceGammaRamp((HDEV)dc->ppdev, SafeRamp, TRUE); + DC_UnlockDc(dc); + ExFreePoolWithTag(SafeRamp, GDITAG_ICM); + return Ret; } INT @@ -401,21 +413,21 @@ NtGdiSetIcmMode(HDC hDC, ULONG nCommand, ULONG EnableICM) // ulMode { - /* FIXME: This should be coded someday */ - if (EnableICM == ICM_OFF) + /* FIXME: This should be coded someday */ + if (EnableICM == ICM_OFF) { - return ICM_OFF; + return ICM_OFF; } - if (EnableICM == ICM_ON) + if (EnableICM == ICM_ON) { - return 0; + return 0; } - if (EnableICM == ICM_QUERY) + if (EnableICM == ICM_QUERY) { - return ICM_OFF; + return ICM_OFF; } - return 0; + return 0; } /* EOF */ diff --git a/win32ss/gdi/ntgdi/line.c b/win32ss/gdi/ntgdi/line.c index 39a0c7124fe..edf98716661 100644 --- a/win32ss/gdi/ntgdi/line.c +++ b/win32ss/gdi/ntgdi/line.c @@ -420,7 +420,8 @@ NtGdiPolyDraw( { PDC dc; PDC_ATTR pdcattr; - POINT *line_pts = NULL, *line_pts_old, *bzr_pts = NULL, bzr[4]; + POINT bzr[4]; + volatile PPOINT line_pts, line_pts_old, bzr_pts; INT num_pts, num_bzr_pts, space, space_old, size; ULONG i; BOOL result = FALSE; @@ -441,6 +442,10 @@ NtGdiPolyDraw( return TRUE; } + line_pts = NULL; + line_pts_old = NULL; + bzr_pts = NULL; + _SEH2_TRY { ProbeArrayForRead(lppt, sizeof(POINT), cCount, sizeof(LONG)); @@ -475,6 +480,12 @@ NtGdiPolyDraw( space = cCount + 300; line_pts = ExAllocatePoolWithTag(PagedPool, space * sizeof(POINT), TAG_SHAPE); + if (line_pts == NULL) + { + result = FALSE; + _SEH2_LEAVE; + } + num_pts = 1; line_pts[0].x = pdcattr->ptlCurrent.x; @@ -510,10 +521,12 @@ NtGdiPolyDraw( if (!line_pts) _SEH2_LEAVE; RtlCopyMemory(line_pts, line_pts_old, space_old * sizeof(POINT)); ExFreePoolWithTag(line_pts_old, TAG_SHAPE); + line_pts_old = NULL; } RtlCopyMemory( &line_pts[num_pts], &bzr_pts[1], (num_bzr_pts - 1) * sizeof(POINT) ); num_pts += num_bzr_pts - 1; ExFreePoolWithTag(bzr_pts, TAG_BEZIER); + bzr_pts = NULL; } i += 2; break; @@ -523,7 +536,6 @@ NtGdiPolyDraw( if (num_pts >= 2) IntGdiPolyline( dc, line_pts, num_pts ); IntGdiMoveToEx( dc, line_pts[num_pts - 1].x, line_pts[num_pts - 1].y, NULL, TRUE ); - ExFreePoolWithTag(line_pts, TAG_SHAPE); result = TRUE; } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) @@ -532,6 +544,21 @@ NtGdiPolyDraw( } _SEH2_END; + if (line_pts != NULL) + { + ExFreePoolWithTag(line_pts, TAG_SHAPE); + } + + if ((line_pts_old != NULL) && (line_pts_old != line_pts)) + { + ExFreePoolWithTag(line_pts_old, TAG_SHAPE); + } + + if (bzr_pts != NULL) + { + ExFreePoolWithTag(bzr_pts, TAG_BEZIER); + } + DC_UnlockDc(dc); return result; diff --git a/win32ss/gdi/ntgdi/pen.c b/win32ss/gdi/ntgdi/pen.c index 1b2231575c0..7b845fb95fb 100644 --- a/win32ss/gdi/ntgdi/pen.c +++ b/win32ss/gdi/ntgdi/pen.c @@ -17,8 +17,8 @@ PBRUSH FASTCALL PEN_ShareLockPen(HGDIOBJ hobj) { - if (GDI_HANDLE_GET_TYPE(hobj) != GDILoObjType_LO_PEN_TYPE && - GDI_HANDLE_GET_TYPE(hobj) != GDILoObjType_LO_EXTPEN_TYPE) + if ((GDI_HANDLE_GET_TYPE(hobj) != GDILoObjType_LO_PEN_TYPE) && + (GDI_HANDLE_GET_TYPE(hobj) != GDILoObjType_LO_EXTPEN_TYPE)) { return NULL; } @@ -26,121 +26,122 @@ PEN_ShareLockPen(HGDIOBJ hobj) return (PBRUSH)GDIOBJ_ReferenceObjectByHandle(hobj, GDIObjType_BRUSH_TYPE); } -HPEN APIENTRY +HPEN +APIENTRY IntGdiExtCreatePen( - DWORD dwPenStyle, - DWORD dwWidth, - IN ULONG ulBrushStyle, - IN ULONG ulColor, - IN ULONG_PTR ulClientHatch, - IN ULONG_PTR ulHatch, - DWORD dwStyleCount, - PULONG pStyle, - IN ULONG cjDIB, - IN BOOL bOldStylePen, - IN OPTIONAL HBRUSH hbrush) + DWORD dwPenStyle, + DWORD dwWidth, + IN ULONG ulBrushStyle, + IN ULONG ulColor, + IN ULONG_PTR ulClientHatch, + IN ULONG_PTR ulHatch, + DWORD dwStyleCount, + PULONG pStyle, + IN ULONG cjDIB, + IN BOOL bOldStylePen, + IN OPTIONAL HBRUSH hbrush) { - HPEN hPen; - PBRUSH pbrushPen; - static const BYTE PatternAlternate[] = {0x55, 0x55, 0x55, 0}; - static const BYTE PatternDash[] = {0xFF, 0xFF, 0xC0, 0}; - static const BYTE PatternDot[] = {0xE3, 0x8E, 0x38, 0}; - static const BYTE PatternDashDot[] = {0xFF, 0x81, 0xC0, 0}; - static const BYTE PatternDashDotDot[] = {0xFF, 0x8E, 0x38, 0}; + HPEN hPen; + PBRUSH pbrushPen; + static const BYTE PatternAlternate[] = {0x55, 0x55, 0x55, 0}; + static const BYTE PatternDash[] = {0xFF, 0xFF, 0xC0, 0}; + static const BYTE PatternDot[] = {0xE3, 0x8E, 0x38, 0}; + static const BYTE PatternDashDot[] = {0xFF, 0x81, 0xC0, 0}; + static const BYTE PatternDashDotDot[] = {0xFF, 0x8E, 0x38, 0}; - dwWidth = abs(dwWidth); + dwWidth = abs(dwWidth); - if ( (dwPenStyle & PS_STYLE_MASK) == PS_NULL) - { - return StockObjects[NULL_PEN]; - } + if ( (dwPenStyle & PS_STYLE_MASK) == PS_NULL) + { + return StockObjects[NULL_PEN]; + } - if (bOldStylePen) - { - pbrushPen = PEN_AllocPenWithHandle(); - } - else - { - pbrushPen = PEN_AllocExtPenWithHandle(); - } + if (bOldStylePen) + { + pbrushPen = PEN_AllocPenWithHandle(); + } + else + { + pbrushPen = PEN_AllocExtPenWithHandle(); + } - if (!pbrushPen) - { - EngSetLastError(ERROR_NOT_ENOUGH_MEMORY); - DPRINT("Can't allocate pen\n"); - return 0; - } - hPen = pbrushPen->BaseObject.hHmgr; + if (!pbrushPen) + { + EngSetLastError(ERROR_NOT_ENOUGH_MEMORY); + DPRINT("Can't allocate pen\n"); + return 0; + } + hPen = pbrushPen->BaseObject.hHmgr; - // If nWidth is zero, the pen is a single pixel wide, regardless of the current transformation. - if ((bOldStylePen) && (!dwWidth) && (dwPenStyle & PS_STYLE_MASK) != PS_SOLID) - dwWidth = 1; + // If nWidth is zero, the pen is a single pixel wide, regardless of the current transformation. + if ((bOldStylePen) && (!dwWidth) && ((dwPenStyle & PS_STYLE_MASK) != PS_SOLID)) + dwWidth = 1; - pbrushPen->ptPenWidth.x = dwWidth; - pbrushPen->ptPenWidth.y = 0; - pbrushPen->ulPenStyle = dwPenStyle; - pbrushPen->BrushAttr.lbColor = ulColor; - pbrushPen->ulStyle = ulBrushStyle; - // FIXME: Copy the bitmap first ? - pbrushPen->hbmClient = (HANDLE)ulClientHatch; - pbrushPen->dwStyleCount = dwStyleCount; - pbrushPen->pStyle = pStyle; + pbrushPen->ptPenWidth.x = dwWidth; + pbrushPen->ptPenWidth.y = 0; + pbrushPen->ulPenStyle = dwPenStyle; + pbrushPen->BrushAttr.lbColor = ulColor; + pbrushPen->ulStyle = ulBrushStyle; + // FIXME: Copy the bitmap first ? + pbrushPen->hbmClient = (HANDLE)ulClientHatch; + pbrushPen->dwStyleCount = dwStyleCount; + pbrushPen->pStyle = pStyle; - pbrushPen->flAttrs = bOldStylePen? BR_IS_OLDSTYLEPEN : BR_IS_PEN; + pbrushPen->flAttrs = bOldStylePen ? BR_IS_OLDSTYLEPEN : BR_IS_PEN; - // If dwPenStyle is PS_COSMETIC, the width must be set to 1. - if ( !(bOldStylePen) && ((dwPenStyle & PS_TYPE_MASK) == PS_COSMETIC) && ( dwWidth != 1) ) - goto ExitCleanup; + // If dwPenStyle is PS_COSMETIC, the width must be set to 1. + if ( !(bOldStylePen) && ((dwPenStyle & PS_TYPE_MASK) == PS_COSMETIC) && ( dwWidth != 1) ) + goto ExitCleanup; - switch (dwPenStyle & PS_STYLE_MASK) - { - case PS_NULL: - pbrushPen->flAttrs |= BR_IS_NULL; - break; + switch (dwPenStyle & PS_STYLE_MASK) + { + case PS_NULL: + pbrushPen->flAttrs |= BR_IS_NULL; + break; - case PS_SOLID: - pbrushPen->flAttrs |= BR_IS_SOLID; - break; + case PS_SOLID: + pbrushPen->flAttrs |= BR_IS_SOLID; + break; - case PS_ALTERNATE: - pbrushPen->flAttrs |= BR_IS_BITMAP; - pbrushPen->hbmPattern = GreCreateBitmap(24, 1, 1, 1, (LPBYTE)PatternAlternate); - break; + case PS_ALTERNATE: + pbrushPen->flAttrs |= BR_IS_BITMAP; + pbrushPen->hbmPattern = GreCreateBitmap(24, 1, 1, 1, (LPBYTE)PatternAlternate); + break; - case PS_DOT: - pbrushPen->flAttrs |= BR_IS_BITMAP; - pbrushPen->hbmPattern = GreCreateBitmap(24, 1, 1, 1, (LPBYTE)PatternDot); - break; + case PS_DOT: + pbrushPen->flAttrs |= BR_IS_BITMAP; + pbrushPen->hbmPattern = GreCreateBitmap(24, 1, 1, 1, (LPBYTE)PatternDot); + break; - case PS_DASH: - pbrushPen->flAttrs |= BR_IS_BITMAP; - pbrushPen->hbmPattern = GreCreateBitmap(24, 1, 1, 1, (LPBYTE)PatternDash); - break; + case PS_DASH: + pbrushPen->flAttrs |= BR_IS_BITMAP; + pbrushPen->hbmPattern = GreCreateBitmap(24, 1, 1, 1, (LPBYTE)PatternDash); + break; - case PS_DASHDOT: - pbrushPen->flAttrs |= BR_IS_BITMAP; - pbrushPen->hbmPattern = GreCreateBitmap(24, 1, 1, 1, (LPBYTE)PatternDashDot); - break; + case PS_DASHDOT: + pbrushPen->flAttrs |= BR_IS_BITMAP; + pbrushPen->hbmPattern = GreCreateBitmap(24, 1, 1, 1, (LPBYTE)PatternDashDot); + break; - case PS_DASHDOTDOT: - pbrushPen->flAttrs |= BR_IS_BITMAP; - pbrushPen->hbmPattern = GreCreateBitmap(24, 1, 1, 1, (LPBYTE)PatternDashDotDot); - break; + case PS_DASHDOTDOT: + pbrushPen->flAttrs |= BR_IS_BITMAP; + pbrushPen->hbmPattern = GreCreateBitmap(24, 1, 1, 1, (LPBYTE)PatternDashDotDot); + break; - case PS_INSIDEFRAME: - pbrushPen->flAttrs |= (BR_IS_SOLID|BR_IS_INSIDEFRAME); - break; + case PS_INSIDEFRAME: + pbrushPen->flAttrs |= (BR_IS_SOLID | BR_IS_INSIDEFRAME); + break; - case PS_USERSTYLE: - if ((dwPenStyle & PS_TYPE_MASK) == PS_COSMETIC) - { + case PS_USERSTYLE: + if ((dwPenStyle & PS_TYPE_MASK) == PS_COSMETIC) + { /* FIXME: PS_USERSTYLE workaround */ DPRINT1("PS_COSMETIC | PS_USERSTYLE not handled\n"); pbrushPen->flAttrs |= BR_IS_SOLID; break; - } - else - { + } + else + { UINT i; BOOL has_neg = FALSE, all_zero = TRUE; @@ -154,220 +155,234 @@ IntGdiExtCreatePen( { goto ExitCleanup; } - } - /* FIXME: What style here? */ - pbrushPen->flAttrs |= 0; - break; + } + /* FIXME: What style here? */ + pbrushPen->flAttrs |= 0; + break; - default: - DPRINT1("IntGdiExtCreatePen unknown penstyle %x\n", dwPenStyle); - } - PEN_UnlockPen(pbrushPen); - return hPen; + default: + DPRINT1("IntGdiExtCreatePen unknown penstyle %x\n", dwPenStyle); + } + + PEN_UnlockPen(pbrushPen); + return hPen; ExitCleanup: - EngSetLastError(ERROR_INVALID_PARAMETER); - pbrushPen->pStyle = NULL; - GDIOBJ_vDeleteObject(&pbrushPen->BaseObject); - return NULL; + EngSetLastError(ERROR_INVALID_PARAMETER); + pbrushPen->pStyle = NULL; + GDIOBJ_vDeleteObject(&pbrushPen->BaseObject); + + return NULL; } -VOID FASTCALL +VOID +FASTCALL IntGdiSetSolidPenColor(HPEN hPen, COLORREF Color) { - PBRUSH pbrPen; + PBRUSH pbrPen; - pbrPen = PEN_ShareLockPen(hPen); - if (pbrPen) - { - if (pbrPen->flAttrs & BR_IS_SOLID) + pbrPen = PEN_ShareLockPen(hPen); + if (pbrPen) { - pbrPen->BrushAttr.lbColor = Color & 0xFFFFFF; + if (pbrPen->flAttrs & BR_IS_SOLID) + { + pbrPen->BrushAttr.lbColor = Color & 0xFFFFFF; + } + PEN_ShareUnlockPen(pbrPen); } - PEN_ShareUnlockPen(pbrPen); - } } -INT APIENTRY +INT +APIENTRY PEN_GetObject(PBRUSH pbrushPen, INT cbCount, PLOGPEN pBuffer) { - PLOGPEN pLogPen; - PEXTLOGPEN pExtLogPen; - INT cbRetCount; + PLOGPEN pLogPen; + PEXTLOGPEN pExtLogPen; + INT cbRetCount; - if (pbrushPen->flAttrs & BR_IS_OLDSTYLEPEN) - { - cbRetCount = sizeof(LOGPEN); - if (pBuffer) - { + if (pbrushPen->flAttrs & BR_IS_OLDSTYLEPEN) + { + cbRetCount = sizeof(LOGPEN); + if (pBuffer) + { + if (cbCount < cbRetCount) return 0; - if (cbCount < cbRetCount) return 0; + if (((pbrushPen->ulPenStyle & PS_STYLE_MASK) == PS_NULL) && + (cbCount == sizeof(EXTLOGPEN))) + { + pExtLogPen = (PEXTLOGPEN)pBuffer; + pExtLogPen->elpPenStyle = pbrushPen->ulPenStyle; + pExtLogPen->elpWidth = 0; + pExtLogPen->elpBrushStyle = pbrushPen->ulStyle; + pExtLogPen->elpColor = pbrushPen->BrushAttr.lbColor; + pExtLogPen->elpHatch = 0; + pExtLogPen->elpNumEntries = 0; + cbRetCount = sizeof(EXTLOGPEN); + } + else + { + pLogPen = (PLOGPEN)pBuffer; + pLogPen->lopnWidth = pbrushPen->ptPenWidth; + pLogPen->lopnStyle = pbrushPen->ulPenStyle; + pLogPen->lopnColor = pbrushPen->BrushAttr.lbColor; + } + } + } + else + { + // FIXME: Can we trust in dwStyleCount being <= 16? + cbRetCount = sizeof(EXTLOGPEN) - sizeof(DWORD) + pbrushPen->dwStyleCount * sizeof(DWORD); + if (pBuffer) + { + ULONG i; - if ( (pbrushPen->ulPenStyle & PS_STYLE_MASK) == PS_NULL && - cbCount == sizeof(EXTLOGPEN)) - { + if (cbCount < cbRetCount) return 0; pExtLogPen = (PEXTLOGPEN)pBuffer; pExtLogPen->elpPenStyle = pbrushPen->ulPenStyle; - pExtLogPen->elpWidth = 0; + pExtLogPen->elpWidth = pbrushPen->ptPenWidth.x; pExtLogPen->elpBrushStyle = pbrushPen->ulStyle; pExtLogPen->elpColor = pbrushPen->BrushAttr.lbColor; - pExtLogPen->elpHatch = 0; - pExtLogPen->elpNumEntries = 0; - cbRetCount = sizeof(EXTLOGPEN); - } - else - { - pLogPen = (PLOGPEN)pBuffer; - pLogPen->lopnWidth = pbrushPen->ptPenWidth; - pLogPen->lopnStyle = pbrushPen->ulPenStyle; - pLogPen->lopnColor = pbrushPen->BrushAttr.lbColor; - } - } - } - else - { - // FIXME: Can we trust in dwStyleCount being <= 16? - cbRetCount = sizeof(EXTLOGPEN) - sizeof(DWORD) + pbrushPen->dwStyleCount * sizeof(DWORD); - if (pBuffer) - { - ULONG i; + pExtLogPen->elpHatch = (ULONG_PTR)pbrushPen->hbmClient; + pExtLogPen->elpNumEntries = pbrushPen->dwStyleCount; + for (i = 0; i < pExtLogPen->elpNumEntries; i++) + { + pExtLogPen->elpStyleEntry[i] = pbrushPen->pStyle[i]; + } + } + } - if (cbCount < cbRetCount) return 0; - pExtLogPen = (PEXTLOGPEN)pBuffer; - pExtLogPen->elpPenStyle = pbrushPen->ulPenStyle; - pExtLogPen->elpWidth = pbrushPen->ptPenWidth.x; - pExtLogPen->elpBrushStyle = pbrushPen->ulStyle; - pExtLogPen->elpColor = pbrushPen->BrushAttr.lbColor; - pExtLogPen->elpHatch = (ULONG_PTR)pbrushPen->hbmClient; - pExtLogPen->elpNumEntries = pbrushPen->dwStyleCount; - for (i = 0; i < pExtLogPen->elpNumEntries; i++) - { - pExtLogPen->elpStyleEntry[i] = pbrushPen->pStyle[i]; - } - } - } - - return cbRetCount; + return cbRetCount; } /* PUBLIC FUNCTIONS ***********************************************************/ -HPEN APIENTRY +HPEN +APIENTRY NtGdiCreatePen( - INT PenStyle, - INT Width, - COLORREF Color, - IN HBRUSH hbr) + INT PenStyle, + INT Width, + COLORREF Color, + IN HBRUSH hbr) { - if ( PenStyle < PS_SOLID || PenStyle > PS_INSIDEFRAME ) - { - EngSetLastError(ERROR_INVALID_PARAMETER); - return NULL; - } + if ((PenStyle < PS_SOLID) ||( PenStyle > PS_INSIDEFRAME)) + { + EngSetLastError(ERROR_INVALID_PARAMETER); + return NULL; + } - return IntGdiExtCreatePen(PenStyle, - Width, - BS_SOLID, - Color, - 0, - 0, - 0, - NULL, - 0, - TRUE, - hbr); + return IntGdiExtCreatePen(PenStyle, + Width, + BS_SOLID, + Color, + 0, + 0, + 0, + NULL, + 0, + TRUE, + hbr); } -HPEN APIENTRY +HPEN +APIENTRY NtGdiExtCreatePen( - DWORD dwPenStyle, - DWORD ulWidth, - IN ULONG ulBrushStyle, - IN ULONG ulColor, - IN ULONG_PTR ulClientHatch, - IN ULONG_PTR ulHatch, - DWORD dwStyleCount, - PULONG pUnsafeStyle, - IN ULONG cjDIB, - IN BOOL bOldStylePen, - IN OPTIONAL HBRUSH hBrush) + DWORD dwPenStyle, + DWORD ulWidth, + IN ULONG ulBrushStyle, + IN ULONG ulColor, + IN ULONG_PTR ulClientHatch, + IN ULONG_PTR ulHatch, + DWORD dwStyleCount, + PULONG pUnsafeStyle, + IN ULONG cjDIB, + IN BOOL bOldStylePen, + IN OPTIONAL HBRUSH hBrush) { - NTSTATUS Status = STATUS_SUCCESS; - DWORD* pSafeStyle = NULL; - HPEN hPen; + NTSTATUS Status = STATUS_SUCCESS; + DWORD* pSafeStyle = NULL; + HPEN hPen; - if ((int)dwStyleCount < 0) return 0; - if (dwStyleCount > 16) - { - EngSetLastError(ERROR_INVALID_PARAMETER); - return 0; - } + if ((int)dwStyleCount < 0) return 0; + if (dwStyleCount > 16) + { + EngSetLastError(ERROR_INVALID_PARAMETER); + return 0; + } - if (dwStyleCount > 0) - { - pSafeStyle = ExAllocatePoolWithTag(NonPagedPool, dwStyleCount * sizeof(DWORD), GDITAG_PENSTYLE); - if (!pSafeStyle) - { - SetLastNtError(ERROR_NOT_ENOUGH_MEMORY); - return 0; - } - _SEH2_TRY - { - ProbeForRead(pUnsafeStyle, dwStyleCount * sizeof(DWORD), 1); - RtlCopyMemory(pSafeStyle, - pUnsafeStyle, - dwStyleCount * sizeof(DWORD)); - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - Status = _SEH2_GetExceptionCode(); - } - _SEH2_END - if(!NT_SUCCESS(Status)) - { - SetLastNtError(Status); - ExFreePoolWithTag(pSafeStyle, GDITAG_PENSTYLE); - return 0; - } - } + if (dwStyleCount > 0) + { + if (pUnsafeStyle == NULL) + { + EngSetLastError(ERROR_INVALID_PARAMETER); + return 0; + } - if (ulBrushStyle == BS_PATTERN) - { - _SEH2_TRY - { - ProbeForRead((PVOID)ulHatch, cjDIB, 1); - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - Status = _SEH2_GetExceptionCode(); - } - _SEH2_END - if(!NT_SUCCESS(Status)) - { - SetLastNtError(Status); - if (pSafeStyle) ExFreePoolWithTag(pSafeStyle, GDITAG_PENSTYLE); - return 0; - } - } + pSafeStyle = ExAllocatePoolWithTag(NonPagedPool, + dwStyleCount * sizeof(DWORD), + GDITAG_PENSTYLE); + if (!pSafeStyle) + { + SetLastNtError(ERROR_NOT_ENOUGH_MEMORY); + return 0; + } + _SEH2_TRY + { + ProbeForRead(pUnsafeStyle, dwStyleCount * sizeof(DWORD), 1); + RtlCopyMemory(pSafeStyle, + pUnsafeStyle, + dwStyleCount * sizeof(DWORD)); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END + if(!NT_SUCCESS(Status)) + { + SetLastNtError(Status); + ExFreePoolWithTag(pSafeStyle, GDITAG_PENSTYLE); + return 0; + } + } - hPen = IntGdiExtCreatePen(dwPenStyle, - ulWidth, - ulBrushStyle, - ulColor, - ulClientHatch, - ulHatch, - dwStyleCount, - pSafeStyle, - cjDIB, - bOldStylePen, - hBrush); + if (ulBrushStyle == BS_PATTERN) + { + _SEH2_TRY + { + ProbeForRead((PVOID)ulHatch, cjDIB, 1); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END + if(!NT_SUCCESS(Status)) + { + SetLastNtError(Status); + if (pSafeStyle) ExFreePoolWithTag(pSafeStyle, GDITAG_PENSTYLE); + return 0; + } + } - if (!hPen && pSafeStyle) - { - ExFreePoolWithTag(pSafeStyle, GDITAG_PENSTYLE); - } - return hPen; + hPen = IntGdiExtCreatePen(dwPenStyle, + ulWidth, + ulBrushStyle, + ulColor, + ulClientHatch, + ulHatch, + dwStyleCount, + pSafeStyle, + cjDIB, + bOldStylePen, + hBrush); + + if (!hPen && pSafeStyle) + { + ExFreePoolWithTag(pSafeStyle, GDITAG_PENSTYLE); + } + + return hPen; } /* EOF */ diff --git a/win32ss/gdi/ntgdi/text.c b/win32ss/gdi/ntgdi/text.c index 31dcbe2ecfa..82ceb015ae2 100644 --- a/win32ss/gdi/ntgdi/text.c +++ b/win32ss/gdi/ntgdi/text.c @@ -523,11 +523,9 @@ APIENTRY NtGdiGetTextMetricsW( IN HDC hDC, OUT TMW_INTERNAL * pUnsafeTmwi, - IN ULONG cj -) + IN ULONG cj) { TMW_INTERNAL Tmwi; - NTSTATUS Status = STATUS_SUCCESS; if ( cj <= sizeof(TMW_INTERNAL) ) { @@ -540,15 +538,11 @@ NtGdiGetTextMetricsW( } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { - Status = _SEH2_GetExceptionCode(); + SetLastNtError(_SEH2_GetExceptionCode()); + _SEH2_YIELD(return FALSE); } _SEH2_END - if (!NT_SUCCESS(Status)) - { - SetLastNtError(Status); - return FALSE; - } return TRUE; } } diff --git a/win32ss/include/ntuser.h b/win32ss/include/ntuser.h index 28fb20a99d0..c1fd55adc1e 100644 --- a/win32ss/include/ntuser.h +++ b/win32ss/include/ntuser.h @@ -3308,12 +3308,14 @@ typedef struct tagKMDDELPARAM * ReactOS-specific NtUser calls and their related structures, both which shouldn't exist. */ +#define NOPARAM_ROUTINE_ISCONSOLEMODE 0xffff0001 #define NOPARAM_ROUTINE_GETMESSAGEEXTRAINFO 0xffff0005 #define ONEPARAM_ROUTINE_CSRSS_GUICHECK 0xffff0008 #define ONEPARAM_ROUTINE_SWITCHCARETSHOWING 0xfffe0008 #define ONEPARAM_ROUTINE_ENABLEPROCWNDGHSTING 0xfffe000d #define ONEPARAM_ROUTINE_GETDESKTOPMAPPING 0xfffe000e #define TWOPARAM_ROUTINE_SETMENUBARHEIGHT 0xfffd0050 +#define TWOPARAM_ROUTINE_EXITREACTOS 0xfffd0051 #define TWOPARAM_ROUTINE_SETGUITHRDHANDLE 0xfffd0052 #define MSQ_STATE_CAPTURE 0x1 #define MSQ_STATE_ACTIVE 0x2 diff --git a/win32ss/pch.h b/win32ss/pch.h index cbc2da2d6fd..fe790bccc87 100644 --- a/win32ss/pch.h +++ b/win32ss/pch.h @@ -58,6 +58,7 @@ typedef struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES; #include #include #define NT_BUILD_ENVIRONMENT +#define _ENGINE_EXPORT_ #include #include #include @@ -86,6 +87,7 @@ typedef struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES; /* Undocumented user definitions */ #include +#include /* Freetype headers */ #include diff --git a/win32ss/reactx/dxapi/CMakeLists.txt b/win32ss/reactx/dxapi/CMakeLists.txt index f45e93a5c77..e839e95a3cd 100644 --- a/win32ss/reactx/dxapi/CMakeLists.txt +++ b/win32ss/reactx/dxapi/CMakeLists.txt @@ -11,4 +11,4 @@ add_library(dxapi SHARED set_module_type(dxapi kernelmodedriver) add_importlibs(dxapi ntoskrnl hal videoprt) -add_cd_file(TARGET dxapi DESTINATION reactos/system32/drivers FOR all) \ No newline at end of file +add_cd_file(TARGET dxapi DESTINATION reactos/system32/drivers FOR all) diff --git a/win32ss/reactx/ntddraw/dxeng.c b/win32ss/reactx/ntddraw/dxeng.c index 633949abe9a..9b256975e3b 100644 --- a/win32ss/reactx/ntddraw/dxeng.c +++ b/win32ss/reactx/ntddraw/dxeng.c @@ -286,7 +286,7 @@ DxEngGetHdevData(HDEV hDev, DPRINT1("ReactX Calling : DxEngGetHdevData DXEGSHDEVDATA : %ld\n", Type); #if 1 - DPRINT1("HDEV hDev %08lx\n", hDev); + DPRINT1("HDEV hDev %p\n", hDev); #endif switch ( Type ) @@ -454,7 +454,7 @@ DxEngGetDCState(HDC hDC, PDC pDC = DC_LockDc(hDC); DWORD_PTR retVal = 0; - DPRINT1("ReactX Calling : DxEngGetDCState type : %ld\n", type); + DPRINT1("ReactX Calling : DxEngGetDCState type : %lu\n", type); if (pDC) { @@ -474,7 +474,7 @@ DxEngGetDCState(HDC hDC, } default: /* If a valid type is not found, zero is returned */ - DPRINT1("Warning: did not find type %d\n",type); + DPRINT1("Warning: did not find type %lu\n", type); break; } DC_UnlockDc(pDC); @@ -531,7 +531,7 @@ DxEngLockHdev(HDEV hDev) DPRINT1("ReactX Calling : DxEngLockHdev \n"); - DPRINT1("hDev : 0x%08lx\n",hDev); + DPRINT1("hDev : 0x%p\n",hDev); Resource = (PERESOURCE)ppdev->hsemDevLock; diff --git a/win32ss/user/consrv/lang/he-IL.rc b/win32ss/user/consrv/lang/he-IL.rc new file mode 100644 index 00000000000..b9261ffc424 --- /dev/null +++ b/win32ss/user/consrv/lang/he-IL.rc @@ -0,0 +1,23 @@ +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + +STRINGTABLE +BEGIN + IDS_EDIT "ערוך" + IDS_MARK "סמן" + IDS_COPY "העתק\tEnter" + IDS_PASTE "הדבק" + IDS_SELECTALL "בחר הכל" + IDS_SCROLL "גלול" + IDS_FIND "מצא..." + IDS_DEFAULTS "ברירת מחדל" + IDS_PROPERTIES "מאפיינים" + IDS_SCROLLHERE "גלול לכאן" + IDS_SCROLLTOP "גלול למעלה" + IDS_SCROLLBOTTOM "גלול למטה" + IDS_SCROLLPAGE_UP "עמוד מעלה" + IDS_SCROLLPAGE_DOWN "עמוד מטה" + IDS_SCROLLUP "גלול מעלה" + IDS_SCROLLDOWN "גלול מטה" + + IDS_CONSOLE_TITLE "ReactOS Console" +END diff --git a/win32ss/user/consrv/rsrc.rc b/win32ss/user/consrv/rsrc.rc index 8463613b0b1..1839748b631 100644 --- a/win32ss/user/consrv/rsrc.rc +++ b/win32ss/user/consrv/rsrc.rc @@ -23,6 +23,9 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #ifdef LANGUAGE_FR_FR #include "lang/fr-FR.rc" #endif +#ifdef LANGUAGE_HE_IL + #include "lang/he-IL.rc" +#endif #ifdef LANGUAGE_ID_ID #include "lang/id-ID.rc" #endif diff --git a/win32ss/user/ntuser/callback.c b/win32ss/user/ntuser/callback.c index e1a69488488..5a253ea57a5 100644 --- a/win32ss/user/ntuser/callback.c +++ b/win32ss/user/ntuser/callback.c @@ -382,7 +382,7 @@ co_IntLoadSysMenuTemplate() UserLeaveCo(); Status = KeUserModeCallback(USER32_CALLBACK_LOADSYSMENUTEMPLATE, - NULL, + &ResultPointer, 0, &ResultPointer, &ResultLength); diff --git a/win32ss/user/ntuser/desktop.c b/win32ss/user/ntuser/desktop.c index c0923b653a0..82dead1f735 100644 --- a/win32ss/user/ntuser/desktop.c +++ b/win32ss/user/ntuser/desktop.c @@ -647,7 +647,19 @@ DesktopWindowProc(PWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam, LRESULT *lRe { UserDereferenceObject(pcurOld); } + return TRUE; } + + case WM_WINDOWPOSCHANGING: + { + PWINDOWPOS pWindowPos = (PWINDOWPOS)lParam; + if((pWindowPos->flags & SWP_SHOWWINDOW) != 0) + { + HDESK hdesk = IntGetDesktopObjectHandle(gpdeskInputDesktop); + IntSetThreadDesktop(hdesk, FALSE); + } + } + } return TRUE; /* We are done. Do not do any callbacks to user mode */ } @@ -737,20 +749,20 @@ UserRedrawDesktop() NTSTATUS FASTCALL -co_IntShowDesktop(PDESKTOP Desktop, ULONG Width, ULONG Height) +co_IntShowDesktop(PDESKTOP Desktop, ULONG Width, ULONG Height, BOOL bRedraw) { - PWND Window; + PWND pwnd = Desktop->pDeskInfo->spwnd; + UINT flags = SWP_NOACTIVATE|SWP_NOZORDER|SWP_SHOWWINDOW; + ASSERT(pwnd); - Window = IntGetWindowObject(Desktop->DesktopWindow); + if(!bRedraw) + flags |= SWP_NOREDRAW; - if (!Window) - { - ERR("No Desktop window.\n"); - return STATUS_UNSUCCESSFUL; - } - co_WinPosSetWindowPos(Window, NULL, 0, 0, Width, Height, SWP_NOACTIVATE|SWP_NOZORDER|SWP_SHOWWINDOW); + co_WinPosSetWindowPos(pwnd, NULL, 0, 0, Width, Height, flags); + + if(bRedraw) + co_UserRedrawWindow( pwnd, NULL, 0, RDW_UPDATENOW | RDW_ALLCHILDREN | RDW_INVALIDATE ); - co_UserRedrawWindow( Window, NULL, 0, RDW_UPDATENOW | RDW_ALLCHILDREN); return STATUS_SUCCESS; } @@ -1294,8 +1306,6 @@ NtUserCreateDesktop( RETURN(NULL); } - if (!ptiCurrent->rpdesk) IntSetThreadDesktop(hdesk,FALSE); - /* Get the desktop window class. The thread desktop does not belong to any desktop * so the classes created there (including the desktop class) are allocated in the shared heap * It would cause problems if we used a class that belongs to the caller @@ -1609,6 +1619,7 @@ NtUserSwitchDesktop(HDESK hdesk) { PDESKTOP pdesk; NTSTATUS Status; + BOOL bRedrawDesktop; DECLARE_RETURN(BOOL); UserEnterExclusive(); @@ -1621,6 +1632,12 @@ NtUserSwitchDesktop(HDESK hdesk) RETURN(FALSE); } + if(pdesk == gpdeskInputDesktop) + { + WARN("NtUserSwitchDesktop called for active desktop\n"); + RETURN(TRUE); + } + /* * Don't allow applications switch the desktop if it's locked, unless the caller * is the logon application itself @@ -1644,11 +1661,29 @@ NtUserSwitchDesktop(HDESK hdesk) desktop such as Winlogon or Screen-Saver */ /* FIXME: Connect to input device */ + TRACE("Switching from desktop 0x%p to 0x%p\n", gpdeskInputDesktop, pdesk); + + bRedrawDesktop = FALSE; + + /* The first time SwitchDesktop is called, gpdeskInputDesktop is NULL */ + if(gpdeskInputDesktop != NULL) + { + if((gpdeskInputDesktop->pDeskInfo->spwnd->style & WS_VISIBLE) == WS_VISIBLE) + bRedrawDesktop = TRUE; + + /* Hide the previous desktop window */ + IntHideDesktop(gpdeskInputDesktop); + } + /* Set the active desktop in the desktop's window station. */ InputWindowStation->ActiveDesktop = pdesk; /* Set the global state. */ gpdeskInputDesktop = pdesk; + + /* Show the new desktop window */ + co_IntShowDesktop(pdesk, UserGetSystemMetrics(SM_CXSCREEN), UserGetSystemMetrics(SM_CYSCREEN), bRedrawDesktop); + TRACE("SwitchDesktop gpdeskInputDesktop 0x%p\n",gpdeskInputDesktop); ObDereferenceObject(pdesk); diff --git a/win32ss/user/ntuser/desktop.h b/win32ss/user/ntuser/desktop.h index 6f492117dc0..672303eee05 100644 --- a/win32ss/user/ntuser/desktop.h +++ b/win32ss/user/ntuser/desktop.h @@ -132,7 +132,7 @@ PDESKTOP FASTCALL IntGetActiveDesktop(VOID); NTSTATUS FASTCALL -co_IntShowDesktop(PDESKTOP Desktop, ULONG Width, ULONG Height); +co_IntShowDesktop(PDESKTOP Desktop, ULONG Width, ULONG Height, BOOL Redraw); NTSTATUS FASTCALL IntHideDesktop(PDESKTOP Desktop); diff --git a/win32ss/user/ntuser/msgqueue.c b/win32ss/user/ntuser/msgqueue.c index 1d5627ee498..def9263e1d8 100644 --- a/win32ss/user/ntuser/msgqueue.c +++ b/win32ss/user/ntuser/msgqueue.c @@ -1352,7 +1352,7 @@ IntTrackMouseMove(PWND pwndTrack, PDESKTOP pDesk, PMSG msg, USHORT hittest) 0, 0); if ( pDesk->dwDTFlags & DF_TME_HOVER ) - IntKillTimer(UserHMGetHandle(pDesk->spwndTrack), ID_EVENT_SYSTIMER_MOUSEHOVER, TRUE); + IntKillTimer(pDesk->spwndTrack, ID_EVENT_SYSTIMER_MOUSEHOVER, TRUE); /* Clear the flags to sign a change. */ pDesk->dwDTFlags &= ~(DF_TME_LEAVE|DF_TME_HOVER); diff --git a/win32ss/user/ntuser/ntstubs.c b/win32ss/user/ntuser/ntstubs.c index cad4db60e96..fc41f80d3ed 100644 --- a/win32ss/user/ntuser/ntstubs.c +++ b/win32ss/user/ntuser/ntstubs.c @@ -307,15 +307,6 @@ NtUserInitTask( return 0; } -BOOL -APIENTRY -NtUserLockWorkStation(VOID) -{ - STUB - - return 0; -} - DWORD APIENTRY NtUserMNDragLeave(VOID) diff --git a/win32ss/user/ntuser/simplecall.c b/win32ss/user/ntuser/simplecall.c index 6176c3d9c4e..4c80bf849fa 100644 --- a/win32ss/user/ntuser/simplecall.c +++ b/win32ss/user/ntuser/simplecall.c @@ -117,6 +117,10 @@ NtUserCallNoParam(DWORD Routine) RETURN(0); } + /* this is a Reactos only case and is needed for gui-on-demand */ + case NOPARAM_ROUTINE_ISCONSOLEMODE: + RETURN( ScreenDeviceContext == NULL ); + default: ERR("Calling invalid routine number 0x%x in NtUserCallNoParam\n", Routine); EngSetLastError(ERROR_INVALID_PARAMETER); @@ -461,6 +465,13 @@ NtUserCallTwoParam( case TWOPARAM_ROUTINE_UNHOOKWINDOWSHOOK: RETURN( IntUnhookWindowsHook((int)Param1, (HOOKPROC)Param2)); + case TWOPARAM_ROUTINE_EXITREACTOS: + if(hwndSAS == NULL) + { + ASSERT(hwndSAS); + RETURN(STATUS_NOT_FOUND); + } + RETURN( co_IntSendMessage (hwndSAS, PM_WINLOGON_EXITWINDOWS, (WPARAM) Param1, (LPARAM)Param2)); } ERR("Calling invalid routine number 0x%x in NtUserCallTwoParam(), Param1=0x%x Parm2=0x%x\n", Routine, Param1, Param2); diff --git a/win32ss/user/ntuser/winpos.c b/win32ss/user/ntuser/winpos.c index f740ec188fd..ba3fb0e3cb0 100644 --- a/win32ss/user/ntuser/winpos.c +++ b/win32ss/user/ntuser/winpos.c @@ -2023,7 +2023,7 @@ co_WinPosShowWindow(PWND Wnd, INT Cmd) { BOOLEAN WasVisible; UINT Swp = 0, EventMsg = 0; - RECTL NewPos; + RECTL NewPos = {0, 0, 0, 0}; BOOLEAN ShowFlag; LONG style; PWND Parent; diff --git a/win32ss/user/ntuser/winsta.c b/win32ss/user/ntuser/winsta.c index bcee979ef35..5974fbc2f74 100644 --- a/win32ss/user/ntuser/winsta.c +++ b/win32ss/user/ntuser/winsta.c @@ -1320,4 +1320,27 @@ NtUserSetLogonNotifyWindow(HWND hWnd) return TRUE; } +BOOL +APIENTRY +NtUserLockWorkStation(VOID) +{ + BOOL ret; + PTHREADINFO pti = PsGetCurrentThreadWin32Thread(); + + UserEnterExclusive(); + + if (pti->rpdesk == IntGetActiveDesktop()) + { + ret = UserPostMessage(hwndSAS, WM_LOGONNOTIFY, LN_LOCK_WORKSTATION, 0); + } + else + { + ret = FALSE; + } + + UserLeave(); + + return ret; +} + /* EOF */ diff --git a/win32ss/user/user32/lang/he-IL.rc b/win32ss/user/user32/lang/he-IL.rc new file mode 100644 index 00000000000..27b037f0f4b --- /dev/null +++ b/win32ss/user/user32/lang/he-IL.rc @@ -0,0 +1,75 @@ +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + +///////////////////////////////////////////////////////////////////////////// +// +// Dialogs +// + +SELWINDOW DIALOGEX DISCARDABLE 20, 20, 220, 140 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | + WS_SYSMENU +FONT 8, "MS Shell Dlg" +CAPTION "Select Window" +BEGIN + LISTBOX 100, 5, 5, 210, 110, LBS_NOTIFY | LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_HSCROLL + PUSHBUTTON "&אישור", 1, 60, 120, 40, 15, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "&ביטול", 2, 120, 120, 40, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP +END + +///////////////////////////////////////////////////////////////////////////// +// +// Menus +// + +EDITMENU MENU LOADONCALL MOVEABLE DISCARDABLE +BEGIN + POPUP "DUMMY" + BEGIN + MENUITEM "&בטל", EM_UNDO + MENUITEM SEPARATOR + MENUITEM "&גזור", WM_CUT + MENUITEM "ה&עתק", WM_COPY + MENUITEM "ה&דבק", WM_PASTE + MENUITEM "&מחק", WM_CLEAR + MENUITEM SEPARATOR + MENUITEM "בחר &הכל", EM_SETSEL + END +END + + +SYSMENU MENU LOADONCALL MOVEABLE DISCARDABLE +BEGIN + MENUITEM "&שחזר", SC_RESTORE + MENUITEM "&הזז", SC_MOVE + MENUITEM "&שנה גודל", SC_SIZE + MENUITEM "&מזער", SC_MINIMIZE + MENUITEM "&הגדל", SC_MAXIMIZE + MENUITEM SEPARATOR + MENUITEM "&סגור\tAlt-F4", SC_CLOSE +END + +///////////////////////////////////////////////////////////////////////////// +// +// Strings +// + +STRINGTABLE +BEGIN + IDS_ERROR, "שגיאה" + IDS_OK, "אישור" + IDS_CANCEL, "ביטול" + IDS_ABORT, "&בטל" + IDS_RETRY, "&נסה שוב" + IDS_IGNORE, "ה&תעלם" + IDS_YES, "&כן" + IDS_NO, "&לא" + IDS_HELP, "עזרה" + IDS_TRYAGAIN, "&נסה שוב" + IDS_CONTINUE, "&המשך" +END + +STRINGTABLE +BEGIN + IDS_MDI_MOREWINDOWS, "&עוד חלונות..." +END + diff --git a/win32ss/user/user32/user32.rc b/win32ss/user/user32/user32.rc index cf2bf8f7c66..3bc29059a9e 100644 --- a/win32ss/user/user32/user32.rc +++ b/win32ss/user/user32/user32.rc @@ -137,6 +137,9 @@ OBM_OLD_CLOSE BITMAP "resources/obm_old_close.bmp" #ifdef LANGUAGE_FR_FR #include "lang/fr-FR.rc" #endif +#ifdef LANGUAGE_HE_IL + #include "lang/he-IL.rc" +#endif #ifdef LANGUAGE_HU_HU #include "lang/hu-HU.rc" #endif diff --git a/win32ss/user/user32/windows/message.c b/win32ss/user/user32/windows/message.c index 2d1c7eea465..89ddb6dd5b6 100644 --- a/win32ss/user/user32/windows/message.c +++ b/win32ss/user/user32/windows/message.c @@ -721,7 +721,7 @@ MsgiAnsiToUnicodeReply(LPMSG UnicodeMsg, LPMSG AnsiMsg, LRESULT *Result) !WideCharToMultiByte(CP_ACP, 0, Buffer, -1, AnsiBuffer, Size, NULL, NULL)) { AnsiBuffer[Size - 1] = 0; - } + } break; } case CB_GETLBTEXT: @@ -736,7 +736,7 @@ MsgiAnsiToUnicodeReply(LPMSG UnicodeMsg, LPMSG AnsiMsg, LRESULT *Result) !WideCharToMultiByte(CP_ACP, 0, Buffer, -1, AnsiBuffer, Size, NULL, NULL)) { AnsiBuffer[Size - 1] = 0; - } + } break; } } @@ -759,19 +759,22 @@ MsgiUnicodeToAnsiMessage(HWND hwnd, LPMSG AnsiMsg, LPMSG UnicodeMsg) case WM_CREATE: case WM_NCCREATE: { - MDICREATESTRUCTA mdi_cs; + MDICREATESTRUCTA *pmdi_cs; CREATESTRUCTA* CsA; CREATESTRUCTW* CsW; NTSTATUS Status; CsW = (CREATESTRUCTW*)(UnicodeMsg->lParam); - CsA = RtlAllocateHeap(GetProcessHeap(), 0, sizeof(CREATESTRUCTA)); + CsA = RtlAllocateHeap(GetProcessHeap(), 0, sizeof(CREATESTRUCTA) + sizeof(MDICREATESTRUCTA)); if (NULL == CsA) { return FALSE; } memcpy(CsA, CsW, sizeof(CREATESTRUCTW)); + /* pmdi_cs starts right after CsA */ + pmdi_cs = (MDICREATESTRUCTA*)(CsA + 1); + RtlInitUnicodeString(&UnicodeString, CsW->lpszName); Status = RtlUnicodeStringToAnsiString(&AnsiString, &UnicodeString, TRUE); if (! NT_SUCCESS(Status)) @@ -796,10 +799,10 @@ MsgiUnicodeToAnsiMessage(HWND hwnd, LPMSG AnsiMsg, LPMSG UnicodeMsg) if (GetWindowLongW(hwnd, GWL_EXSTYLE) & WS_EX_MDICHILD) { - mdi_cs = *(MDICREATESTRUCTA *)CsW->lpCreateParams; - mdi_cs.szTitle = CsA->lpszName; - mdi_cs.szClass = CsA->lpszClass; - CsA->lpCreateParams = &mdi_cs; + *pmdi_cs = *(MDICREATESTRUCTA *)CsW->lpCreateParams; + pmdi_cs->szTitle = CsA->lpszName; + pmdi_cs->szClass = CsA->lpszClass; + CsA->lpCreateParams = pmdi_cs; } AnsiMsg->lParam = (LPARAM)CsA; @@ -1043,7 +1046,7 @@ MsgiUnicodeToAnsiReply(LPMSG AnsiMsg, LPMSG UnicodeMsg, LRESULT *Result) ! MultiByteToWideChar(CP_ACP, 0, Buffer, -1, UBuffer, Size)) { UBuffer[Size - 1] = L'\0'; - } + } break; } case CB_GETLBTEXT: @@ -1058,7 +1061,7 @@ MsgiUnicodeToAnsiReply(LPMSG AnsiMsg, LPMSG UnicodeMsg, LRESULT *Result) ! MultiByteToWideChar(CP_ACP, 0, Buffer, -1, UBuffer, Size)) { UBuffer[Size - 1] = L'\0'; - } + } break; } } @@ -1179,12 +1182,12 @@ DesktopWndProcA( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) } Result = DesktopWndProcW(hwnd, message, UcMsg.wParam, UcMsg.lParam); - + MsgiAnsiToUnicodeCleanup(&UcMsg, &AnsiMsg); return Result; } - + /* * @implemented */ @@ -1317,7 +1320,7 @@ IntCallWindowProcW(BOOL IsAnsiProc, else MsgOverride = IsMsgOverride( Msg, &guah.DlgProcArray); } - + if (IsAnsiProc) { UnicodeMsg.hwnd = hWnd; @@ -1585,8 +1588,8 @@ IntCallMessageProc(IN PWND Wnd, IN HWND hWnd, IN UINT Msg, IN WPARAM wParam, IN WNDPROC WndProc; BOOL IsAnsi; PCLS Class; - - Class = DesktopPtrToUser(Wnd->pcls); + + Class = DesktopPtrToUser(Wnd->pcls); WndProc = NULL; if ( Wnd->head.pti != GetW32ThreadInfo()) @@ -2084,7 +2087,7 @@ PostMessageA( /* No drop files or current Process, just post message. */ if ( (Msg != WM_DROPFILES) || - ( NtUserQueryWindow( hWnd, QUERY_WINDOW_UNIQUE_PROCESS_ID) == + ( NtUserQueryWindow( hWnd, QUERY_WINDOW_UNIQUE_PROCESS_ID) == PtrToUint(NtCurrentTeb()->ClientId.UniqueProcess) ) ) { return NtUserPostMessage(hWnd, Msg, wParam, lParam); @@ -2129,7 +2132,7 @@ PostMessageW( /* No drop files or current Process, just post message. */ if ( (Msg != WM_DROPFILES) || - ( NtUserQueryWindow( hWnd, QUERY_WINDOW_UNIQUE_PROCESS_ID) == + ( NtUserQueryWindow( hWnd, QUERY_WINDOW_UNIQUE_PROCESS_ID) == PtrToUint(NtCurrentTeb()->ClientId.UniqueProcess) ) ) { return NtUserPostMessage(hWnd, Msg, wParam, lParam); @@ -2245,13 +2248,13 @@ SendMessageW(HWND Wnd, } Result = NtUserMessageCall( Wnd, - KMMsg.message, + KMMsg.message, KMMsg.wParam, KMMsg.lParam, (ULONG_PTR)&Result, FNID_SENDMESSAGE, FALSE); - + MsgiUMToKMCleanup(&UMMsg, &KMMsg); return Result; @@ -2291,7 +2294,7 @@ SendMessageA(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam) * Window belongs to calling thread * The calling thread is not being hooked for CallWndProc - * Not calling a server side proc: + * Not calling a server side proc: Desktop, Switch, ScrollBar, Menu, IconTitle, or hWndMessage */ @@ -2316,7 +2319,7 @@ SendMessageA(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam) } Result = NtUserMessageCall( Wnd, - KMMsg.message, + KMMsg.message, KMMsg.wParam, KMMsg.lParam, (ULONG_PTR)&Result, @@ -2403,7 +2406,7 @@ SendMessageCallbackW( CallBackInfo.Context = dwData; return NtUserMessageCall(hWnd, - Msg, + Msg, wParam, lParam, (ULONG_PTR)&CallBackInfo, @@ -2436,7 +2439,7 @@ SendMessageTimeoutA( SetLastError( ERROR_INVALID_PARAMETER ); return 0; } - + if (lpdwResult) *lpdwResult = 0; //// This is due to message system bug. @@ -2513,7 +2516,7 @@ SendMessageTimeoutW( SetLastError( ERROR_INVALID_PARAMETER ); return 0; } - + if (lpdwResult) *lpdwResult = 0; //// This is due to message system bug. @@ -2539,7 +2542,7 @@ SendMessageTimeoutW( dsm.uTimeout = uTimeout; Result = NtUserMessageCall( hWnd, - Msg, + Msg, wParam, lParam, (ULONG_PTR)&dsm, @@ -2658,7 +2661,7 @@ BOOL WINAPI TranslateMessage(CONST MSG *lpMsg) { BOOL Ret = FALSE; - + // Ref: msdn ImmGetVirtualKey: // http://msdn.microsoft.com/en-us/library/aa912145.aspx /* @@ -2752,7 +2755,7 @@ BOOL WINAPI GetInputState(VOID) if ((!pcti) || (pcti->fsChangeBits & (QS_KEY|QS_MOUSEBUTTON))) return (BOOL)NtUserGetThreadState(THREADSTATE_GETINPUTSTATE); - + return FALSE; } @@ -3103,7 +3106,7 @@ IntBroadcastSystemMessage( | BSF_POSTMESSAGE | BSF_FORCEIFHUNG | BSF_NOTIMEOUTIFNOTHUNG | BSF_ALLOWSFW | BSF_SENDNOTIFYMESSAGE | BSF_RETURNHDESK | BSF_LUID ); - if ((dwflags & ~all_flags) || + if ((dwflags & ~all_flags) || (!pBSMInfo && (dwflags & (BSF_RETURNHDESK|BSF_LUID))) ) { SetLastError(ERROR_INVALID_PARAMETER); @@ -3117,7 +3120,7 @@ IntBroadcastSystemMessage( } if (dwflags & BSF_FORCEIFHUNG) dwflags |= BSF_NOHANG; - + if (dwflags & BSF_QUERY) dwflags &= ~BSF_SENDNOTIFYMESSAGE|BSF_POSTMESSAGE; if (!lpdwRecipients) diff --git a/win32ss/user/winsrv/init.c b/win32ss/user/winsrv/init.c index 6af815bb760..4fa1a45d469 100644 --- a/win32ss/user/winsrv/init.c +++ b/win32ss/user/winsrv/init.c @@ -11,10 +11,6 @@ #include "winsrv.h" -/* Public Win32K Headers */ -// For calling NtUser...() -#include - #define NDEBUG #include @@ -41,9 +37,6 @@ PCSR_API_ROUTINE UserServerApiDispatchTable[UserpMaxApiNumber] = // SrvCancelShutdown, // Added in Vista // SrvConsoleHandleOperation, // Added in Win7 // SrvGetSetShutdownBlockReason, // Added in Vista - - /// HACK: ReactOS-specific - RosSetLogonNotifyWindow, }; BOOLEAN UserServerApiServerValidTable[UserpMaxApiNumber] = @@ -61,9 +54,6 @@ BOOLEAN UserServerApiServerValidTable[UserpMaxApiNumber] = // FALSE, // SrvCancelShutdown // FALSE, // SrvConsoleHandleOperation // FALSE, // SrvGetSetShutdownBlockReason - - /// HACK: ReactOS-specific - FALSE, // RosSetLogonNotifyWindow }; PCHAR UserServerApiNameTable[UserpMaxApiNumber] = @@ -81,9 +71,6 @@ PCHAR UserServerApiNameTable[UserpMaxApiNumber] = // "SrvCancelShutdown", // "SrvConsoleHandleOperation", // "SrvGetSetShutdownBlockReason", - - /// HACK: ReactOS-specific - "RosSetLogonNotifyWindow", }; diff --git a/win32ss/user/winsrv/lang/he-IL.rc b/win32ss/user/winsrv/lang/he-IL.rc new file mode 100644 index 00000000000..371c9d8983f --- /dev/null +++ b/win32ss/user/winsrv/lang/he-IL.rc @@ -0,0 +1,36 @@ +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + +IDD_END_NOW DIALOGEX DISCARDABLE 0, 0, 200, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "סיום תכנית - " +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "מסיים תכנית... נא להמתין",IDC_STATIC,7,7,186,11 + CONTROL "Progress",IDC_PROGRESS,"msctls_progress32",WS_BORDER, + 7,20,186,13 + LTEXT "If you choose to end the program immediately, you will lose any unsaved data. To end the program now, click End Now.", + IDC_STATIC,7,40,186,26 + DEFPUSHBUTTON "סיים כעת",IDC_END_NOW,150,71,43,17 +END + +IDD_NOT_RESPONDING DIALOGEX DISCARDABLE 0, 0, 192, 122 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "סיום תכנית - " +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "ביטול",IDCANCEL,142,98,43,17 + PUSHBUTTON "סיים כעת",IDC_END_NOW,78,98,43,17 + LTEXT "התכנית אינה מגיבה",IDC_STATIC,7,7,178,8 + LTEXT "To return to ReactOS and check the status of the program, click Cancel", + IDC_STATIC,7,26,178,16 + LTEXT "If you choose to end the program immediately, you will lose any unsaved data. To end the program now, click End Now", + IDC_STATIC,7,53,178,26 +END + +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END diff --git a/win32ss/user/winsrv/rsrc.rc b/win32ss/user/winsrv/rsrc.rc index d0c4d8cca50..fc9ea07d6d3 100644 --- a/win32ss/user/winsrv/rsrc.rc +++ b/win32ss/user/winsrv/rsrc.rc @@ -48,6 +48,9 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL // UTF-8 #pragma code_page(65001) +#ifdef LANGUAGE_HE_IL + #include "lang/he-IL.rc" +#endif #ifdef LANGUAGE_PL_PL #include "lang/pl-PL.rc" #endif diff --git a/win32ss/user/winsrv/winsrv.h b/win32ss/user/winsrv/winsrv.h index 1601ff9ec81..e6a91b6a29c 100644 --- a/win32ss/user/winsrv/winsrv.h +++ b/win32ss/user/winsrv/winsrv.h @@ -30,6 +30,9 @@ #include #include +/* Public Win32K Headers */ +#include + /* PSEH for SEH Support */ #include