aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authoregor-tensin <Egor.Tensin@gmail.com>2023-07-04 00:48:00 +0000
committeregor-tensin <Egor.Tensin@gmail.com>2023-07-04 00:48:00 +0000
commitdef5c50960eea4c112647f88361a3ae7155901a8 (patch)
tree9c058d72325a778aed7d0df0b50f0f33d1fba607
downloadwinapi-common-gh-pages.tar.gz
winapi-common-gh-pages.zip
Deploying to gh-pages from @ egor-tensin/winapi-common@0c196cbe8b4927c78c02b2c7312fc69a507db845 🚀gh-pages
-rw-r--r--annotated.html104
-rw-r--r--bc_s.pngbin0 -> 676 bytes
-rw-r--r--bdwn.pngbin0 -> 147 bytes
-rw-r--r--buffer_8hpp_source.html160
-rw-r--r--classes.html104
-rw-r--r--classwinapi_1_1Buffer-members.html92
-rw-r--r--classwinapi_1_1Buffer.html414
-rw-r--r--classwinapi_1_1Buffer.pngbin0 -> 678 bytes
-rw-r--r--classwinapi_1_1CanonicalPath-members.html85
-rw-r--r--classwinapi_1_1CanonicalPath.html141
-rw-r--r--classwinapi_1_1CommandLine-members.html96
-rw-r--r--classwinapi_1_1CommandLine.html536
-rw-r--r--classwinapi_1_1File-members.html112
-rw-r--r--classwinapi_1_1File.html495
-rw-r--r--classwinapi_1_1File.pngbin0 -> 479 bytes
-rw-r--r--classwinapi_1_1Handle-members.html101
-rw-r--r--classwinapi_1_1Handle.html434
-rw-r--r--classwinapi_1_1Handle.pngbin0 -> 486 bytes
-rw-r--r--classwinapi_1_1Pipe-members.html86
-rw-r--r--classwinapi_1_1Pipe.html240
-rw-r--r--classwinapi_1_1Process-members.html102
-rw-r--r--classwinapi_1_1Process.html697
-rw-r--r--classwinapi_1_1SharedMemory-members.html85
-rw-r--r--classwinapi_1_1SharedMemory.html245
-rw-r--r--classwinapi_1_1SharedObject-members.html92
-rw-r--r--classwinapi_1_1SharedObject.html279
-rw-r--r--classwinapi_1_1Sid-members.html89
-rw-r--r--classwinapi_1_1Sid.html128
-rw-r--r--classwinapi_1_1error_1_1CategoryWindows-members.html84
-rw-r--r--classwinapi_1_1error_1_1CategoryWindows.html104
-rw-r--r--classwinapi_1_1error_1_1CategoryWindows.pngbin0 -> 715 bytes
-rw-r--r--closed.pngbin0 -> 132 bytes
-rw-r--r--cmd__line_8cpp_source.html249
-rw-r--r--cmd__line_8hpp_source.html152
-rw-r--r--dir_68267d1309a1af8e8297ef4c3efbcdba.html78
-rw-r--r--dir_d44c64559bbebec7f509842c48db8b23.html82
-rw-r--r--dir_f1714771db42b7b5a0cd2ebe6e9736ed.html85
-rw-r--r--doc.pngbin0 -> 746 bytes
-rw-r--r--doxygen.css1793
-rw-r--r--doxygen.svg26
-rw-r--r--dynsections.js128
-rw-r--r--error_8cpp_source.html148
-rw-r--r--error_8hpp.html146
-rw-r--r--error_8hpp_source.html122
-rw-r--r--file_8cpp_source.html236
-rw-r--r--file_8hpp_source.html155
-rw-r--r--files.html105
-rw-r--r--folderclosed.pngbin0 -> 616 bytes
-rw-r--r--folderopen.pngbin0 -> 597 bytes
-rw-r--r--functions.html305
-rw-r--r--functions_func.html305
-rw-r--r--handle_8cpp_source.html225
-rw-r--r--handle_8hpp_source.html152
-rw-r--r--hierarchy.html102
-rw-r--r--index.html91
-rw-r--r--jquery.js35
-rw-r--r--menu.js51
-rw-r--r--menudata.js65
-rw-r--r--nav_f.pngbin0 -> 153 bytes
-rw-r--r--nav_g.pngbin0 -> 95 bytes
-rw-r--r--nav_h.pngbin0 -> 98 bytes
-rw-r--r--open.pngbin0 -> 123 bytes
-rw-r--r--path_8cpp_source.html135
-rw-r--r--path_8hpp_source.html105
-rw-r--r--pipe_8cpp_source.html125
-rw-r--r--pipe_8hpp_source.html113
-rw-r--r--process_8cpp_source.html503
-rw-r--r--process_8hpp_source.html193
-rw-r--r--process__io_8cpp_source.html143
-rw-r--r--process__io_8hpp_source.html145
-rw-r--r--resource_8hpp_source.html108
-rw-r--r--search/all_0.html37
-rw-r--r--search/all_0.js7
-rw-r--r--search/all_1.html37
-rw-r--r--search/all_1.js4
-rw-r--r--search/all_10.html37
-rw-r--r--search/all_10.js8
-rw-r--r--search/all_2.html37
-rw-r--r--search/all_2.js11
-rw-r--r--search/all_3.html37
-rw-r--r--search/all_3.js4
-rw-r--r--search/all_4.html37
-rw-r--r--search/all_4.js4
-rw-r--r--search/all_5.html37
-rw-r--r--search/all_5.js5
-rw-r--r--search/all_6.html37
-rw-r--r--search/all_6.js14
-rw-r--r--search/all_7.html37
-rw-r--r--search/all_7.js6
-rw-r--r--search/all_8.html37
-rw-r--r--search/all_8.js7
-rw-r--r--search/all_9.html37
-rw-r--r--search/all_9.js4
-rw-r--r--search/all_a.html37
-rw-r--r--search/all_a.js7
-rw-r--r--search/all_b.html37
-rw-r--r--search/all_b.js8
-rw-r--r--search/all_c.html37
-rw-r--r--search/all_c.js5
-rw-r--r--search/all_d.html37
-rw-r--r--search/all_d.js9
-rw-r--r--search/all_e.html37
-rw-r--r--search/all_e.js17
-rw-r--r--search/all_f.html37
-rw-r--r--search/all_f.js5
-rw-r--r--search/classes_0.html37
-rw-r--r--search/classes_0.js4
-rw-r--r--search/classes_1.html37
-rw-r--r--search/classes_1.js6
-rw-r--r--search/classes_2.html37
-rw-r--r--search/classes_2.js4
-rw-r--r--search/classes_3.html37
-rw-r--r--search/classes_3.js5
-rw-r--r--search/classes_4.html37
-rw-r--r--search/classes_4.js5
-rw-r--r--search/classes_5.html37
-rw-r--r--search/classes_5.js4
-rw-r--r--search/classes_6.html37
-rw-r--r--search/classes_6.js6
-rw-r--r--search/classes_7.html37
-rw-r--r--search/classes_7.js4
-rw-r--r--search/classes_8.html37
-rw-r--r--search/classes_8.js11
-rw-r--r--search/close.svg31
-rw-r--r--search/files_0.html37
-rw-r--r--search/files_0.js4
-rw-r--r--search/functions_0.html37
-rw-r--r--search/functions_0.js7
-rw-r--r--search/functions_1.html37
-rw-r--r--search/functions_1.js4
-rw-r--r--search/functions_2.html37
-rw-r--r--search/functions_2.js9
-rw-r--r--search/functions_3.html37
-rw-r--r--search/functions_3.js4
-rw-r--r--search/functions_4.html37
-rw-r--r--search/functions_4.js5
-rw-r--r--search/functions_5.html37
-rw-r--r--search/functions_5.js14
-rw-r--r--search/functions_6.html37
-rw-r--r--search/functions_6.js4
-rw-r--r--search/functions_7.html37
-rw-r--r--search/functions_7.js5
-rw-r--r--search/functions_8.html37
-rw-r--r--search/functions_8.js7
-rw-r--r--search/functions_9.html37
-rw-r--r--search/functions_9.js6
-rw-r--r--search/functions_a.html37
-rw-r--r--search/functions_a.js5
-rw-r--r--search/functions_b.html37
-rw-r--r--search/functions_b.js8
-rw-r--r--search/functions_c.html37
-rw-r--r--search/functions_c.js12
-rw-r--r--search/functions_d.html37
-rw-r--r--search/functions_d.js5
-rw-r--r--search/functions_e.html37
-rw-r--r--search/functions_e.js7
-rw-r--r--search/mag_sel.svg74
-rw-r--r--search/nomatches.html13
-rw-r--r--search/pages_0.html37
-rw-r--r--search/pages_0.js4
-rw-r--r--search/search.css257
-rw-r--r--search/search.js816
-rw-r--r--search/search_l.pngbin0 -> 567 bytes
-rw-r--r--search/search_m.pngbin0 -> 158 bytes
-rw-r--r--search/search_r.pngbin0 -> 553 bytes
-rw-r--r--search/searchdata.js27
-rw-r--r--shmem_8cpp_source.html154
-rw-r--r--shmem_8hpp_source.html169
-rw-r--r--sid_8cpp_source.html127
-rw-r--r--sid_8hpp_source.html121
-rw-r--r--splitbar.pngbin0 -> 314 bytes
-rw-r--r--structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4-members.html82
-rw-r--r--structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4.html94
-rw-r--r--structwinapi_1_1File_1_1ID-members.html83
-rw-r--r--structwinapi_1_1File_1_1ID.html101
-rw-r--r--structwinapi_1_1LocalDelete-members.html82
-rw-r--r--structwinapi_1_1LocalDelete.html94
-rw-r--r--structwinapi_1_1ProcessParameters-members.html89
-rw-r--r--structwinapi_1_1ProcessParameters.html129
-rw-r--r--structwinapi_1_1ProcessParameters.pngbin0 -> 724 bytes
-rw-r--r--structwinapi_1_1Resource-members.html86
-rw-r--r--structwinapi_1_1Resource.html139
-rw-r--r--structwinapi_1_1ShellParameters-members.html92
-rw-r--r--structwinapi_1_1ShellParameters.html144
-rw-r--r--structwinapi_1_1ShellParameters.pngbin0 -> 722 bytes
-rw-r--r--structwinapi_1_1process_1_1IO-members.html86
-rw-r--r--structwinapi_1_1process_1_1IO.html112
-rw-r--r--structwinapi_1_1process_1_1Stderr-members.html87
-rw-r--r--structwinapi_1_1process_1_1Stderr.html232
-rw-r--r--structwinapi_1_1process_1_1Stderr.pngbin0 -> 644 bytes
-rw-r--r--structwinapi_1_1process_1_1Stdin-members.html87
-rw-r--r--structwinapi_1_1process_1_1Stdin.html232
-rw-r--r--structwinapi_1_1process_1_1Stdin.pngbin0 -> 634 bytes
-rw-r--r--structwinapi_1_1process_1_1Stdout-members.html87
-rw-r--r--structwinapi_1_1process_1_1Stdout.html232
-rw-r--r--structwinapi_1_1process_1_1Stdout.pngbin0 -> 644 bytes
-rw-r--r--structwinapi_1_1process_1_1Stream-members.html83
-rw-r--r--structwinapi_1_1process_1_1Stream.html112
-rw-r--r--structwinapi_1_1process_1_1Stream.pngbin0 -> 1070 bytes
-rw-r--r--sync_off.pngbin0 -> 853 bytes
-rw-r--r--sync_on.pngbin0 -> 845 bytes
-rw-r--r--tab_a.pngbin0 -> 142 bytes
-rw-r--r--tab_b.pngbin0 -> 169 bytes
-rw-r--r--tab_h.pngbin0 -> 177 bytes
-rw-r--r--tab_s.pngbin0 -> 184 bytes
-rw-r--r--tabs.css1
-rw-r--r--utils_8hpp_source.html103
-rw-r--r--window__style_8hpp_source.html105
208 files changed, 17949 insertions, 0 deletions
diff --git a/annotated.html b/annotated.html
new file mode 100644
index 0000000..63a6c30
--- /dev/null
+++ b/annotated.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Class List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Class List</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>std</b></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4.html" target="_self">hash&lt; winapi::File::ID &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>winapi</b></td><td class="desc"></td></tr>
+<tr id="row_1_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_1_0_" class="arrow" onclick="toggleFolder('1_0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>error</b></td><td class="desc"></td></tr>
+<tr id="row_1_0_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1error_1_1CategoryWindows.html" target="_self">CategoryWindows</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_1_1_" class="arrow" onclick="toggleFolder('1_1_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>process</b></td><td class="desc"></td></tr>
+<tr id="row_1_1_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1process_1_1Stream.html" target="_self">Stream</a></td><td class="desc"></td></tr>
+<tr id="row_1_1_1_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1process_1_1Stdin.html" target="_self">Stdin</a></td><td class="desc">Redirect child process's stdin </td></tr>
+<tr id="row_1_1_2_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1process_1_1Stdout.html" target="_self">Stdout</a></td><td class="desc">Redirect child process's stdout </td></tr>
+<tr id="row_1_1_3_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1process_1_1Stderr.html" target="_self">Stderr</a></td><td class="desc">Redirect child process's stderr </td></tr>
+<tr id="row_1_1_4_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1process_1_1IO.html" target="_self">IO</a></td><td class="desc">Child process <a class="el" href="structwinapi_1_1process_1_1IO.html" title="Child process IO settings.">IO</a> settings </td></tr>
+<tr id="row_1_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1Buffer.html" target="_self">Buffer</a></td><td class="desc">Binary data container </td></tr>
+<tr id="row_1_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1CommandLine.html" target="_self">CommandLine</a></td><td class="desc">Command line for the current process or for launching new processes </td></tr>
+<tr id="row_1_4_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_1_4_" class="arrow" onclick="toggleFolder('1_4_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1File.html" target="_self">File</a></td><td class="desc"><a class="el" href="classwinapi_1_1File.html" title="File I/O.">File</a> I/O </td></tr>
+<tr id="row_1_4_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1File_1_1ID.html" target="_self">ID</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1Handle.html" target="_self">Handle</a></td><td class="desc">HANDLE wrapper </td></tr>
+<tr id="row_1_6_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1CanonicalPath.html" target="_self">CanonicalPath</a></td><td class="desc">Absolute, canonical path </td></tr>
+<tr id="row_1_7_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1Pipe.html" target="_self">Pipe</a></td><td class="desc">Anonymous pipe wrapper </td></tr>
+<tr id="row_1_8_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1ProcessParameters.html" target="_self">ProcessParameters</a></td><td class="desc"><a class="el" href="classwinapi_1_1Process.html" title="Create a new process or open an existing process.">Process</a> parameters for <a class="el" href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">Process::create()</a> </td></tr>
+<tr id="row_1_9_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1ShellParameters.html" target="_self">ShellParameters</a></td><td class="desc"><a class="el" href="classwinapi_1_1Process.html" title="Create a new process or open an existing process.">Process</a> parameters for <a class="el" href="classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e">Process::shell()</a> </td></tr>
+<tr id="row_1_10_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1Process.html" target="_self">Process</a></td><td class="desc">Create a new process or open an existing process </td></tr>
+<tr id="row_1_11_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1Resource.html" target="_self">Resource</a></td><td class="desc">Resources embedded in a PE (Portable Executable) </td></tr>
+<tr id="row_1_12_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1SharedMemory.html" target="_self">SharedMemory</a></td><td class="desc">Named shared memory region </td></tr>
+<tr id="row_1_13_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1SharedObject.html" target="_self">SharedObject</a></td><td class="desc">Easy way to represent a C++ object as a shared memory region </td></tr>
+<tr id="row_1_14_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1Sid.html" target="_self">Sid</a></td><td class="desc"></td></tr>
+<tr id="row_1_15_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1LocalDelete.html" target="_self">LocalDelete</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/bc_s.png b/bc_s.png
new file mode 100644
index 0000000..224b29a
--- /dev/null
+++ b/bc_s.png
Binary files differ
diff --git a/bdwn.png b/bdwn.png
new file mode 100644
index 0000000..940a0b9
--- /dev/null
+++ b/bdwn.png
Binary files differ
diff --git a/buffer_8hpp_source.html b/buffer_8hpp_source.html
new file mode 100644
index 0000000..81c5b54
--- /dev/null
+++ b/buffer_8hpp_source.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: include/winapi/buffer.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1714771db42b7b5a0cd2ebe6e9736ed.html">winapi</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">buffer.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;initializer_list&gt;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
+<div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="classwinapi_1_1Buffer.html"> 24</a></span>&#160;<span class="keyword">class </span><a class="code" href="classwinapi_1_1Buffer.html">Buffer</a> : <span class="keyword">public</span> std::vector&lt;unsigned char&gt; {</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">typedef</span> std::vector&lt;unsigned char&gt; Parent;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <a class="code" href="classwinapi_1_1Buffer.html">Buffer</a>() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
+<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classwinapi_1_1Buffer.html#abb43686e0f2e5798bc7b2c0e47722458"> 31</a></span>&#160; <a class="code" href="classwinapi_1_1Buffer.html#abb43686e0f2e5798bc7b2c0e47722458">Buffer</a>(std::initializer_list&lt;unsigned char&gt; lst) : Parent{lst} {}</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
+<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classwinapi_1_1Buffer.html#a46241e1fd3443c383c3930329ca9e0dd"> 34</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classwinapi_1_1Buffer.html#a46241e1fd3443c383c3930329ca9e0dd">Buffer</a>(Parent&amp;&amp; src) : Parent{std::move(src)} {}</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> CharT&gt;</div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classwinapi_1_1Buffer.html#aa3566a7ac7025a2f88abe116082b55a7"> 38</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classwinapi_1_1Buffer.html#aa3566a7ac7025a2f88abe116082b55a7">Buffer</a>(<span class="keyword">const</span> std::basic_string&lt;CharT&gt;&amp; src) {</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="classwinapi_1_1Buffer.html#a0b2fad438202fbcfd4946baf3f879f59">set</a>(src);</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="classwinapi_1_1Buffer.html#ab3649ebbd0cbc4b20d02b660a52be89c"> 43</a></span>&#160; <a class="code" href="classwinapi_1_1Buffer.html#ab3649ebbd0cbc4b20d02b660a52be89c">Buffer</a>(<span class="keyword">const</span> <span class="keywordtype">void</span>* src, std::size_t nb) { <a class="code" href="classwinapi_1_1Buffer.html#a0b2fad438202fbcfd4946baf3f879f59">set</a>(src, nb); }</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> CharT&gt;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classwinapi_1_1Buffer.html#a0b2fad438202fbcfd4946baf3f879f59"> 47</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classwinapi_1_1Buffer.html#a0b2fad438202fbcfd4946baf3f879f59">set</a>(<span class="keyword">const</span> std::basic_string&lt;CharT&gt;&amp; src) {</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <a class="code" href="classwinapi_1_1Buffer.html#a0b2fad438202fbcfd4946baf3f879f59">set</a>(src.c_str(), src.length() * <span class="keyword">sizeof</span>(std::basic_string&lt;CharT&gt;::char_type));</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; }</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; </div>
+<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classwinapi_1_1Buffer.html#ab09aa9c5075579510da463b4148ee610"> 52</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classwinapi_1_1Buffer.html#ab09aa9c5075579510da463b4148ee610">set</a>(<span class="keyword">const</span> <span class="keywordtype">void</span>* src, std::size_t nb) {</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; resize(nb);</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; std::memcpy(data(), src, nb);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; }</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
+<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classwinapi_1_1Buffer.html#afd8abcecacbcc9fdb4e5825068ebf561"> 58</a></span>&#160; std::string <a class="code" href="classwinapi_1_1Buffer.html#afd8abcecacbcc9fdb4e5825068ebf561">as_utf8</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> c_str = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(data());</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> nb = size();</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> nch = nb;</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> {c_str, nch};</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
+<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classwinapi_1_1Buffer.html#ac5ca93f1935f2259db0d68e1884897d5"> 66</a></span>&#160; std::wstring <a class="code" href="classwinapi_1_1Buffer.html#ac5ca93f1935f2259db0d68e1884897d5">as_utf16</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> c_str = <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">wchar_t</span>*<span class="keyword">&gt;</span>(data());</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> nb = size();</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">if</span> (nb % 2 != 0) {</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; std::ostringstream oss;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; oss &lt;&lt; <span class="stringliteral">&quot;Buffer size invalid at &quot;</span> &lt;&lt; nb &lt;&lt; <span class="stringliteral">&quot; bytes&quot;</span>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">throw</span> std::runtime_error{oss.str()};</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> nch = nb / 2;</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">return</span> {c_str, nch};</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classwinapi_1_1Buffer.html#a303645b281fb4f1a4d9e84f1d1370182"> 79</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classwinapi_1_1Buffer.html#a303645b281fb4f1a4d9e84f1d1370182">add</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1Buffer.html">Buffer</a>&amp; src) {</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> nb = size();</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; resize(nb + src.size());</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; std::memcpy(data() + nb, src.data(), src.size());</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;};</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; </div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1Buffer_html"><div class="ttname"><a href="classwinapi_1_1Buffer.html">winapi::Buffer</a></div><div class="ttdoc">Binary data container.</div><div class="ttdef"><b>Definition:</b> <a href="buffer_8hpp_source.html#l00024">buffer.hpp:24</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Buffer_html_a0b2fad438202fbcfd4946baf3f879f59"><div class="ttname"><a href="classwinapi_1_1Buffer.html#a0b2fad438202fbcfd4946baf3f879f59">winapi::Buffer::set</a></div><div class="ttdeci">void set(const std::basic_string&lt; CharT &gt; &amp;src)</div><div class="ttdef"><b>Definition:</b> <a href="buffer_8hpp_source.html#l00047">buffer.hpp:47</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Buffer_html_a303645b281fb4f1a4d9e84f1d1370182"><div class="ttname"><a href="classwinapi_1_1Buffer.html#a303645b281fb4f1a4d9e84f1d1370182">winapi::Buffer::add</a></div><div class="ttdeci">void add(const Buffer &amp;src)</div><div class="ttdef"><b>Definition:</b> <a href="buffer_8hpp_source.html#l00079">buffer.hpp:79</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Buffer_html_a46241e1fd3443c383c3930329ca9e0dd"><div class="ttname"><a href="classwinapi_1_1Buffer.html#a46241e1fd3443c383c3930329ca9e0dd">winapi::Buffer::Buffer</a></div><div class="ttdeci">Buffer(Parent &amp;&amp;src)</div><div class="ttdef"><b>Definition:</b> <a href="buffer_8hpp_source.html#l00034">buffer.hpp:34</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Buffer_html_aa3566a7ac7025a2f88abe116082b55a7"><div class="ttname"><a href="classwinapi_1_1Buffer.html#aa3566a7ac7025a2f88abe116082b55a7">winapi::Buffer::Buffer</a></div><div class="ttdeci">Buffer(const std::basic_string&lt; CharT &gt; &amp;src)</div><div class="ttdef"><b>Definition:</b> <a href="buffer_8hpp_source.html#l00038">buffer.hpp:38</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Buffer_html_ab09aa9c5075579510da463b4148ee610"><div class="ttname"><a href="classwinapi_1_1Buffer.html#ab09aa9c5075579510da463b4148ee610">winapi::Buffer::set</a></div><div class="ttdeci">void set(const void *src, std::size_t nb)</div><div class="ttdef"><b>Definition:</b> <a href="buffer_8hpp_source.html#l00052">buffer.hpp:52</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Buffer_html_ab3649ebbd0cbc4b20d02b660a52be89c"><div class="ttname"><a href="classwinapi_1_1Buffer.html#ab3649ebbd0cbc4b20d02b660a52be89c">winapi::Buffer::Buffer</a></div><div class="ttdeci">Buffer(const void *src, std::size_t nb)</div><div class="ttdef"><b>Definition:</b> <a href="buffer_8hpp_source.html#l00043">buffer.hpp:43</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Buffer_html_abb43686e0f2e5798bc7b2c0e47722458"><div class="ttname"><a href="classwinapi_1_1Buffer.html#abb43686e0f2e5798bc7b2c0e47722458">winapi::Buffer::Buffer</a></div><div class="ttdeci">Buffer(std::initializer_list&lt; unsigned char &gt; lst)</div><div class="ttdef"><b>Definition:</b> <a href="buffer_8hpp_source.html#l00031">buffer.hpp:31</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Buffer_html_ac5ca93f1935f2259db0d68e1884897d5"><div class="ttname"><a href="classwinapi_1_1Buffer.html#ac5ca93f1935f2259db0d68e1884897d5">winapi::Buffer::as_utf16</a></div><div class="ttdeci">std::wstring as_utf16() const</div><div class="ttdef"><b>Definition:</b> <a href="buffer_8hpp_source.html#l00066">buffer.hpp:66</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Buffer_html_afd8abcecacbcc9fdb4e5825068ebf561"><div class="ttname"><a href="classwinapi_1_1Buffer.html#afd8abcecacbcc9fdb4e5825068ebf561">winapi::Buffer::as_utf8</a></div><div class="ttdeci">std::string as_utf8() const</div><div class="ttdef"><b>Definition:</b> <a href="buffer_8hpp_source.html#l00058">buffer.hpp:58</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classes.html b/classes.html
new file mode 100644
index 0000000..fed0b2a
--- /dev/null
+++ b/classes.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Class Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Class Index</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_B">B</a>&#160;|&#160;<a class="qindex" href="#letter_C">C</a>&#160;|&#160;<a class="qindex" href="#letter_F">F</a>&#160;|&#160;<a class="qindex" href="#letter_H">H</a>&#160;|&#160;<a class="qindex" href="#letter_I">I</a>&#160;|&#160;<a class="qindex" href="#letter_L">L</a>&#160;|&#160;<a class="qindex" href="#letter_P">P</a>&#160;|&#160;<a class="qindex" href="#letter_R">R</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a></div>
+<div class="classindex">
+<dl class="classindex even">
+<dt class="alphachar"><a name="letter_B">B</a></dt>
+<dd><a class="el" href="classwinapi_1_1Buffer.html">Buffer</a> (winapi)</dd></dl>
+<dl class="classindex odd">
+<dt class="alphachar"><a name="letter_C">C</a></dt>
+<dd><a class="el" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a> (winapi)</dd><dd><a class="el" href="classwinapi_1_1error_1_1CategoryWindows.html">CategoryWindows</a> (winapi::error)</dd><dd><a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a> (winapi)</dd></dl>
+<dl class="classindex even">
+<dt class="alphachar"><a name="letter_F">F</a></dt>
+<dd><a class="el" href="classwinapi_1_1File.html">File</a> (winapi)</dd></dl>
+<dl class="classindex odd">
+<dt class="alphachar"><a name="letter_H">H</a></dt>
+<dd><a class="el" href="classwinapi_1_1Handle.html">Handle</a> (winapi)</dd><dd><a class="el" href="structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4.html">hash&lt; winapi::File::ID &gt;</a> (std)</dd></dl>
+<dl class="classindex even">
+<dt class="alphachar"><a name="letter_I">I</a></dt>
+<dd><a class="el" href="structwinapi_1_1File_1_1ID.html">File::ID</a> (winapi)</dd><dd><a class="el" href="structwinapi_1_1process_1_1IO.html">IO</a> (winapi::process)</dd></dl>
+<dl class="classindex odd">
+<dt class="alphachar"><a name="letter_L">L</a></dt>
+<dd><a class="el" href="structwinapi_1_1LocalDelete.html">LocalDelete</a> (winapi)</dd></dl>
+<dl class="classindex even">
+<dt class="alphachar"><a name="letter_P">P</a></dt>
+<dd><a class="el" href="classwinapi_1_1Pipe.html">Pipe</a> (winapi)</dd><dd><a class="el" href="classwinapi_1_1Process.html">Process</a> (winapi)</dd><dd><a class="el" href="structwinapi_1_1ProcessParameters.html">ProcessParameters</a> (winapi)</dd></dl>
+<dl class="classindex odd">
+<dt class="alphachar"><a name="letter_R">R</a></dt>
+<dd><a class="el" href="structwinapi_1_1Resource.html">Resource</a> (winapi)</dd></dl>
+<dl class="classindex even">
+<dt class="alphachar"><a name="letter_S">S</a></dt>
+<dd><a class="el" href="classwinapi_1_1SharedMemory.html">SharedMemory</a> (winapi)</dd><dd><a class="el" href="classwinapi_1_1SharedObject.html">SharedObject</a> (winapi)</dd><dd><a class="el" href="structwinapi_1_1ShellParameters.html">ShellParameters</a> (winapi)</dd><dd><a class="el" href="classwinapi_1_1Sid.html">Sid</a> (winapi)</dd><dd><a class="el" href="structwinapi_1_1process_1_1Stderr.html">Stderr</a> (winapi::process)</dd><dd><a class="el" href="structwinapi_1_1process_1_1Stdin.html">Stdin</a> (winapi::process)</dd><dd><a class="el" href="structwinapi_1_1process_1_1Stdout.html">Stdout</a> (winapi::process)</dd><dd><a class="el" href="structwinapi_1_1process_1_1Stream.html">Stream</a> (winapi::process)</dd></dl>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1Buffer-members.html b/classwinapi_1_1Buffer-members.html
new file mode 100644
index 0000000..d743a20
--- /dev/null
+++ b/classwinapi_1_1Buffer-members.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1Buffer.html">Buffer</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::Buffer Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classwinapi_1_1Buffer.html">winapi::Buffer</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html#a303645b281fb4f1a4d9e84f1d1370182">add</a>(const Buffer &amp;src)</td><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html">winapi::Buffer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html#ac5ca93f1935f2259db0d68e1884897d5">as_utf16</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html">winapi::Buffer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html#afd8abcecacbcc9fdb4e5825068ebf561">as_utf8</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html">winapi::Buffer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Buffer</b>()=default (defined in <a class="el" href="classwinapi_1_1Buffer.html">winapi::Buffer</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html">winapi::Buffer</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html#abb43686e0f2e5798bc7b2c0e47722458">Buffer</a>(std::initializer_list&lt; unsigned char &gt; lst)</td><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html">winapi::Buffer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html#a46241e1fd3443c383c3930329ca9e0dd">Buffer</a>(Parent &amp;&amp;src)</td><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html">winapi::Buffer</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html#aa3566a7ac7025a2f88abe116082b55a7">Buffer</a>(const std::basic_string&lt; CharT &gt; &amp;src)</td><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html">winapi::Buffer</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html#ab3649ebbd0cbc4b20d02b660a52be89c">Buffer</a>(const void *src, std::size_t nb)</td><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html">winapi::Buffer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Parent</b> typedef (defined in <a class="el" href="classwinapi_1_1Buffer.html">winapi::Buffer</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html">winapi::Buffer</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html#a0b2fad438202fbcfd4946baf3f879f59">set</a>(const std::basic_string&lt; CharT &gt; &amp;src)</td><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html">winapi::Buffer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html#ab09aa9c5075579510da463b4148ee610">set</a>(const void *src, std::size_t nb)</td><td class="entry"><a class="el" href="classwinapi_1_1Buffer.html">winapi::Buffer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1Buffer.html b/classwinapi_1_1Buffer.html
new file mode 100644
index 0000000..8c03e9c
--- /dev/null
+++ b/classwinapi_1_1Buffer.html
@@ -0,0 +1,414 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::Buffer Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1Buffer.html">Buffer</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-types">Public Types</a> &#124;
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="classwinapi_1_1Buffer-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::Buffer Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Binary data container.
+ <a href="classwinapi_1_1Buffer.html#details">More...</a></p>
+<div class="dynheader">
+Inheritance diagram for winapi::Buffer:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classwinapi_1_1Buffer.png" alt=""/>
+ </div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:ad1e4d5da01f165bfbf5dee7cc811d4e6"><td class="memItemLeft" align="right" valign="top"><a id="ad1e4d5da01f165bfbf5dee7cc811d4e6"></a>
+typedef std::vector&lt; unsigned char &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>Parent</b></td></tr>
+<tr class="separator:ad1e4d5da01f165bfbf5dee7cc811d4e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:abb43686e0f2e5798bc7b2c0e47722458"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Buffer.html#abb43686e0f2e5798bc7b2c0e47722458">Buffer</a> (std::initializer_list&lt; unsigned char &gt; lst)</td></tr>
+<tr class="separator:abb43686e0f2e5798bc7b2c0e47722458"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a46241e1fd3443c383c3930329ca9e0dd"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Buffer.html#a46241e1fd3443c383c3930329ca9e0dd">Buffer</a> (Parent &amp;&amp;src)</td></tr>
+<tr class="separator:a46241e1fd3443c383c3930329ca9e0dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa3566a7ac7025a2f88abe116082b55a7"><td class="memTemplParams" colspan="2">template&lt;typename CharT &gt; </td></tr>
+<tr class="memitem:aa3566a7ac7025a2f88abe116082b55a7"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Buffer.html#aa3566a7ac7025a2f88abe116082b55a7">Buffer</a> (const std::basic_string&lt; CharT &gt; &amp;src)</td></tr>
+<tr class="separator:aa3566a7ac7025a2f88abe116082b55a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab3649ebbd0cbc4b20d02b660a52be89c"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Buffer.html#ab3649ebbd0cbc4b20d02b660a52be89c">Buffer</a> (const void *src, std::size_t nb)</td></tr>
+<tr class="separator:ab3649ebbd0cbc4b20d02b660a52be89c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0b2fad438202fbcfd4946baf3f879f59"><td class="memTemplParams" colspan="2">template&lt;typename CharT &gt; </td></tr>
+<tr class="memitem:a0b2fad438202fbcfd4946baf3f879f59"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Buffer.html#a0b2fad438202fbcfd4946baf3f879f59">set</a> (const std::basic_string&lt; CharT &gt; &amp;src)</td></tr>
+<tr class="separator:a0b2fad438202fbcfd4946baf3f879f59"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab09aa9c5075579510da463b4148ee610"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Buffer.html#ab09aa9c5075579510da463b4148ee610">set</a> (const void *src, std::size_t nb)</td></tr>
+<tr class="separator:ab09aa9c5075579510da463b4148ee610"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afd8abcecacbcc9fdb4e5825068ebf561"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Buffer.html#afd8abcecacbcc9fdb4e5825068ebf561">as_utf8</a> () const</td></tr>
+<tr class="separator:afd8abcecacbcc9fdb4e5825068ebf561"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac5ca93f1935f2259db0d68e1884897d5"><td class="memItemLeft" align="right" valign="top">std::wstring&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Buffer.html#ac5ca93f1935f2259db0d68e1884897d5">as_utf16</a> () const</td></tr>
+<tr class="separator:ac5ca93f1935f2259db0d68e1884897d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a303645b281fb4f1a4d9e84f1d1370182"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Buffer.html#a303645b281fb4f1a4d9e84f1d1370182">add</a> (const <a class="el" href="classwinapi_1_1Buffer.html">Buffer</a> &amp;src)</td></tr>
+<tr class="separator:a303645b281fb4f1a4d9e84f1d1370182"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Binary data container. </p>
+<p>This class wraps a blob of binary data. </p>
+
+<p class="definition">Definition at line <a class="el" href="buffer_8hpp_source.html#l00024">24</a> of file <a class="el" href="buffer_8hpp_source.html">buffer.hpp</a>.</p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="abb43686e0f2e5798bc7b2c0e47722458"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abb43686e0f2e5798bc7b2c0e47722458">&#9670;&nbsp;</a></span>Buffer() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::Buffer::Buffer </td>
+ <td>(</td>
+ <td class="paramtype">std::initializer_list&lt; unsigned char &gt;&#160;</td>
+ <td class="paramname"><em>lst</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Construct a buffer from an explicit list of byte values. </p>
+
+<p class="definition">Definition at line <a class="el" href="buffer_8hpp_source.html#l00031">31</a> of file <a class="el" href="buffer_8hpp_source.html">buffer.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a46241e1fd3443c383c3930329ca9e0dd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a46241e1fd3443c383c3930329ca9e0dd">&#9670;&nbsp;</a></span>Buffer() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::Buffer::Buffer </td>
+ <td>(</td>
+ <td class="paramtype">Parent &amp;&amp;&#160;</td>
+ <td class="paramname"><em>src</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">explicit</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Construct a buffer from an instance of <code>std::vector&lt;unsigned char&gt;</code>. </p>
+
+<p class="definition">Definition at line <a class="el" href="buffer_8hpp_source.html#l00034">34</a> of file <a class="el" href="buffer_8hpp_source.html">buffer.hpp</a>.</p>
+
+</div>
+</div>
+<a id="aa3566a7ac7025a2f88abe116082b55a7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa3566a7ac7025a2f88abe116082b55a7">&#9670;&nbsp;</a></span>Buffer() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename CharT &gt; </div>
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::Buffer::Buffer </td>
+ <td>(</td>
+ <td class="paramtype">const std::basic_string&lt; CharT &gt; &amp;&#160;</td>
+ <td class="paramname"><em>src</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">explicit</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Construct a buffer from an instance of <code>std::basic_string</code>. </p>
+
+<p class="definition">Definition at line <a class="el" href="buffer_8hpp_source.html#l00038">38</a> of file <a class="el" href="buffer_8hpp_source.html">buffer.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ab3649ebbd0cbc4b20d02b660a52be89c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab3649ebbd0cbc4b20d02b660a52be89c">&#9670;&nbsp;</a></span>Buffer() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::Buffer::Buffer </td>
+ <td>(</td>
+ <td class="paramtype">const void *&#160;</td>
+ <td class="paramname"><em>src</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::size_t&#160;</td>
+ <td class="paramname"><em>nb</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Construct a buffer from a memory region. </p>
+
+<p class="definition">Definition at line <a class="el" href="buffer_8hpp_source.html#l00043">43</a> of file <a class="el" href="buffer_8hpp_source.html">buffer.hpp</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a0b2fad438202fbcfd4946baf3f879f59"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0b2fad438202fbcfd4946baf3f879f59">&#9670;&nbsp;</a></span>set() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename CharT &gt; </div>
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void winapi::Buffer::set </td>
+ <td>(</td>
+ <td class="paramtype">const std::basic_string&lt; CharT &gt; &amp;&#160;</td>
+ <td class="paramname"><em>src</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Replace the buffer's contents with the data from <code>std::basic_string</code>. </p>
+
+<p class="definition">Definition at line <a class="el" href="buffer_8hpp_source.html#l00047">47</a> of file <a class="el" href="buffer_8hpp_source.html">buffer.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ab09aa9c5075579510da463b4148ee610"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab09aa9c5075579510da463b4148ee610">&#9670;&nbsp;</a></span>set() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void winapi::Buffer::set </td>
+ <td>(</td>
+ <td class="paramtype">const void *&#160;</td>
+ <td class="paramname"><em>src</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::size_t&#160;</td>
+ <td class="paramname"><em>nb</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Replace the buffer's contents with the data from a memory region. </p>
+
+<p class="definition">Definition at line <a class="el" href="buffer_8hpp_source.html#l00052">52</a> of file <a class="el" href="buffer_8hpp_source.html">buffer.hpp</a>.</p>
+
+</div>
+</div>
+<a id="afd8abcecacbcc9fdb4e5825068ebf561"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afd8abcecacbcc9fdb4e5825068ebf561">&#9670;&nbsp;</a></span>as_utf8()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::string winapi::Buffer::as_utf8 </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Interpret the buffer's contents as a <code>std::string</code>. </p>
+
+<p class="definition">Definition at line <a class="el" href="buffer_8hpp_source.html#l00058">58</a> of file <a class="el" href="buffer_8hpp_source.html">buffer.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ac5ca93f1935f2259db0d68e1884897d5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac5ca93f1935f2259db0d68e1884897d5">&#9670;&nbsp;</a></span>as_utf16()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::wstring winapi::Buffer::as_utf16 </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Interpret the buffer's contents as a <code>std::wstring</code>. </p>
+
+<p class="definition">Definition at line <a class="el" href="buffer_8hpp_source.html#l00066">66</a> of file <a class="el" href="buffer_8hpp_source.html">buffer.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a303645b281fb4f1a4d9e84f1d1370182"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a303645b281fb4f1a4d9e84f1d1370182">&#9670;&nbsp;</a></span>add()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void winapi::Buffer::add </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classwinapi_1_1Buffer.html">Buffer</a> &amp;&#160;</td>
+ <td class="paramname"><em>src</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Append another buffer to the end of this one. </p>
+
+<p class="definition">Definition at line <a class="el" href="buffer_8hpp_source.html#l00079">79</a> of file <a class="el" href="buffer_8hpp_source.html">buffer.hpp</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>include/winapi/<a class="el" href="buffer_8hpp_source.html">buffer.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1Buffer.png b/classwinapi_1_1Buffer.png
new file mode 100644
index 0000000..7573e6f
--- /dev/null
+++ b/classwinapi_1_1Buffer.png
Binary files differ
diff --git a/classwinapi_1_1CanonicalPath-members.html b/classwinapi_1_1CanonicalPath-members.html
new file mode 100644
index 0000000..f800668
--- /dev/null
+++ b/classwinapi_1_1CanonicalPath-members.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::CanonicalPath Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classwinapi_1_1CanonicalPath.html">winapi::CanonicalPath</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1CanonicalPath.html#a7072d3b77d4f437246744c9c2a9407db">canonicalize</a>(const std::string &amp;)</td><td class="entry"><a class="el" href="classwinapi_1_1CanonicalPath.html">winapi::CanonicalPath</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>CanonicalPath</b>(const std::string &amp;) (defined in <a class="el" href="classwinapi_1_1CanonicalPath.html">winapi::CanonicalPath</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1CanonicalPath.html">winapi::CanonicalPath</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get</b>() const (defined in <a class="el" href="classwinapi_1_1CanonicalPath.html">winapi::CanonicalPath</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1CanonicalPath.html">winapi::CanonicalPath</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>path</b>() const (defined in <a class="el" href="classwinapi_1_1CanonicalPath.html">winapi::CanonicalPath</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1CanonicalPath.html">winapi::CanonicalPath</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1CanonicalPath.html b/classwinapi_1_1CanonicalPath.html
new file mode 100644
index 0000000..de994f0
--- /dev/null
+++ b/classwinapi_1_1CanonicalPath.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::CanonicalPath Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
+<a href="classwinapi_1_1CanonicalPath-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::CanonicalPath Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Absolute, canonical path.
+ <a href="classwinapi_1_1CanonicalPath.html#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ab428e95b2ce5e89e89ae86d2263073f1"><td class="memItemLeft" align="right" valign="top"><a id="ab428e95b2ce5e89e89ae86d2263073f1"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CanonicalPath</b> (const std::string &amp;)</td></tr>
+<tr class="separator:ab428e95b2ce5e89e89ae86d2263073f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af3420b9f1c49f50cc4ac4810a32b897e"><td class="memItemLeft" align="right" valign="top"><a id="af3420b9f1c49f50cc4ac4810a32b897e"></a>
+std::string&#160;</td><td class="memItemRight" valign="bottom"><b>get</b> () const</td></tr>
+<tr class="separator:af3420b9f1c49f50cc4ac4810a32b897e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a17fd30ee01ca9a0cf7f4536dee57aedc"><td class="memItemLeft" align="right" valign="top"><a id="a17fd30ee01ca9a0cf7f4536dee57aedc"></a>
+std::string&#160;</td><td class="memItemRight" valign="bottom"><b>path</b> () const</td></tr>
+<tr class="separator:a17fd30ee01ca9a0cf7f4536dee57aedc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a7072d3b77d4f437246744c9c2a9407db"><td class="memItemLeft" align="right" valign="top">static std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1CanonicalPath.html#a7072d3b77d4f437246744c9c2a9407db">canonicalize</a> (const std::string &amp;)</td></tr>
+<tr class="separator:a7072d3b77d4f437246744c9c2a9407db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Absolute, canonical path. </p>
+
+<p class="definition">Definition at line <a class="el" href="path_8hpp_source.html#l00013">13</a> of file <a class="el" href="path_8hpp_source.html">path.hpp</a>.</p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="a7072d3b77d4f437246744c9c2a9407db"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7072d3b77d4f437246744c9c2a9407db">&#9670;&nbsp;</a></span>canonicalize()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::string winapi::CanonicalPath::canonicalize </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>path</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Make an absolute, canonical path. </p>
+
+<p class="definition">Definition at line <a class="el" href="path_8cpp_source.html#l00052">52</a> of file <a class="el" href="path_8cpp_source.html">path.cpp</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>include/winapi/<a class="el" href="path_8hpp_source.html">path.hpp</a></li>
+<li>src/<a class="el" href="path_8cpp_source.html">path.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1CommandLine-members.html b/classwinapi_1_1CommandLine-members.html
new file mode 100644
index 0000000..625afc1
--- /dev/null
+++ b/classwinapi_1_1CommandLine-members.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::CommandLine Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html#afb35d8d6d2b8b66bd6f21d0adc37017f">args_to_string</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html#ad48bb83391e84db28c3c3c6bdf283003">CommandLine</a>()=default</td><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html#a90b5d19b9cb4bbad2515c97bd74731c8">CommandLine</a>(const std::string &amp;argv0, const std::vector&lt; std::string &gt; &amp;args={})</td><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html#ac0d211d82fd55cba2055a9679272a182">CommandLine</a>(std::string &amp;&amp;argv0, std::vector&lt; std::string &gt; &amp;&amp;args={})</td><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html#a69e5c796f37637e39b2e1d7d95ba922a">CommandLine</a>(std::vector&lt; std::string &gt; argv)</td><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>escape</b>(const std::string &amp;) (defined in <a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>escape_cmd</b>(const std::string &amp;) (defined in <a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html#a7a7bc2a7461f2f275a12c9fda23d312d">from_main</a>(int argc, wchar_t *argv[])</td><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html#aef5ea9b427d975af8e64948802b54af4">get_args</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html#ac21d30a214f529f80b91186e9724cf41">get_argv</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html#a8f75a5f374397c1c1dcc4900bf44ee32">get_argv0</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html#ae87fa727498660661753d2d456873033">has_args</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html#aabafd2d1d923c30c3da372909857e87e">parse</a>(const std::string &amp;src)</td><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html#aa07ee7bf5d61658f33e4a7571205ae5c">query</a>()</td><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html#ac47e738f255a85b3e0605d40c0124b24">to_string</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1CommandLine.html b/classwinapi_1_1CommandLine.html
new file mode 100644
index 0000000..5c00301
--- /dev/null
+++ b/classwinapi_1_1CommandLine.html
@@ -0,0 +1,536 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::CommandLine Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
+<a href="classwinapi_1_1CommandLine-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::CommandLine Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Command line for the current process or for launching new processes.
+ <a href="classwinapi_1_1CommandLine.html#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ad48bb83391e84db28c3c3c6bdf283003"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1CommandLine.html#ad48bb83391e84db28c3c3c6bdf283003">CommandLine</a> ()=default</td></tr>
+<tr class="separator:ad48bb83391e84db28c3c3c6bdf283003"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a90b5d19b9cb4bbad2515c97bd74731c8"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1CommandLine.html#a90b5d19b9cb4bbad2515c97bd74731c8">CommandLine</a> (const std::string &amp;argv0, const std::vector&lt; std::string &gt; &amp;args={})</td></tr>
+<tr class="separator:a90b5d19b9cb4bbad2515c97bd74731c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac0d211d82fd55cba2055a9679272a182"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1CommandLine.html#ac0d211d82fd55cba2055a9679272a182">CommandLine</a> (std::string &amp;&amp;argv0, std::vector&lt; std::string &gt; &amp;&amp;args={})</td></tr>
+<tr class="separator:ac0d211d82fd55cba2055a9679272a182"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69e5c796f37637e39b2e1d7d95ba922a"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1CommandLine.html#a69e5c796f37637e39b2e1d7d95ba922a">CommandLine</a> (std::vector&lt; std::string &gt; argv)</td></tr>
+<tr class="separator:a69e5c796f37637e39b2e1d7d95ba922a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac47e738f255a85b3e0605d40c0124b24"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1CommandLine.html#ac47e738f255a85b3e0605d40c0124b24">to_string</a> () const</td></tr>
+<tr class="separator:ac47e738f255a85b3e0605d40c0124b24"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afb35d8d6d2b8b66bd6f21d0adc37017f"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1CommandLine.html#afb35d8d6d2b8b66bd6f21d0adc37017f">args_to_string</a> () const</td></tr>
+<tr class="separator:afb35d8d6d2b8b66bd6f21d0adc37017f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8f75a5f374397c1c1dcc4900bf44ee32"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1CommandLine.html#a8f75a5f374397c1c1dcc4900bf44ee32">get_argv0</a> () const</td></tr>
+<tr class="separator:a8f75a5f374397c1c1dcc4900bf44ee32"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae87fa727498660661753d2d456873033"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1CommandLine.html#ae87fa727498660661753d2d456873033">has_args</a> () const</td></tr>
+<tr class="separator:ae87fa727498660661753d2d456873033"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aef5ea9b427d975af8e64948802b54af4"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; std::string &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1CommandLine.html#aef5ea9b427d975af8e64948802b54af4">get_args</a> () const</td></tr>
+<tr class="separator:aef5ea9b427d975af8e64948802b54af4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac21d30a214f529f80b91186e9724cf41"><td class="memItemLeft" align="right" valign="top">std::vector&lt; std::string &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1CommandLine.html#ac21d30a214f529f80b91186e9724cf41">get_argv</a> () const</td></tr>
+<tr class="separator:ac21d30a214f529f80b91186e9724cf41"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:aa07ee7bf5d61658f33e4a7571205ae5c"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1CommandLine.html#aa07ee7bf5d61658f33e4a7571205ae5c">query</a> ()</td></tr>
+<tr class="separator:aa07ee7bf5d61658f33e4a7571205ae5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aabafd2d1d923c30c3da372909857e87e"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1CommandLine.html#aabafd2d1d923c30c3da372909857e87e">parse</a> (const std::string &amp;src)</td></tr>
+<tr class="separator:aabafd2d1d923c30c3da372909857e87e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7a7bc2a7461f2f275a12c9fda23d312d"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1CommandLine.html#a7a7bc2a7461f2f275a12c9fda23d312d">from_main</a> (int argc, wchar_t *argv[])</td></tr>
+<tr class="separator:a7a7bc2a7461f2f275a12c9fda23d312d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a523057be96894a609899b336a6b2f56f"><td class="memItemLeft" align="right" valign="top"><a id="a523057be96894a609899b336a6b2f56f"></a>
+static std::string&#160;</td><td class="memItemRight" valign="bottom"><b>escape</b> (const std::string &amp;)</td></tr>
+<tr class="separator:a523057be96894a609899b336a6b2f56f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c9a26173607f53047ec3ffcd4f1c79d"><td class="memItemLeft" align="right" valign="top"><a id="a3c9a26173607f53047ec3ffcd4f1c79d"></a>
+static std::string&#160;</td><td class="memItemRight" valign="bottom"><b>escape_cmd</b> (const std::string &amp;)</td></tr>
+<tr class="separator:a3c9a26173607f53047ec3ffcd4f1c79d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Command line for the current process or for launching new processes. </p>
+<p>This class takes care of proper parsing and stringifying command line arguments so that they are safe to use with CreateProcess, ShellExecute, etc. </p>
+
+<p class="definition">Definition at line <a class="el" href="cmd__line_8hpp_source.html#l00021">21</a> of file <a class="el" href="cmd__line_8hpp_source.html">cmd_line.hpp</a>.</p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="ad48bb83391e84db28c3c3c6bdf283003"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad48bb83391e84db28c3c3c6bdf283003">&#9670;&nbsp;</a></span>CommandLine() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::CommandLine::CommandLine </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">default</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Build an empty command line. It won't have neither argv[0], nor any other args. </p>
+
+</div>
+</div>
+<a id="a90b5d19b9cb4bbad2515c97bd74731c8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a90b5d19b9cb4bbad2515c97bd74731c8">&#9670;&nbsp;</a></span>CommandLine() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::CommandLine::CommandLine </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>argv0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::vector&lt; std::string &gt; &amp;&#160;</td>
+ <td class="paramname"><em>args</em> = <code>{}</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">explicit</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Build a command line. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">argv0</td><td>UTF-8 string, argv[0]. </td></tr>
+ <tr><td class="paramname">args</td><td>List of UTF-8 strings, other arguments. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="cmd__line_8hpp_source.html#l00050">50</a> of file <a class="el" href="cmd__line_8hpp_source.html">cmd_line.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ac0d211d82fd55cba2055a9679272a182"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac0d211d82fd55cba2055a9679272a182">&#9670;&nbsp;</a></span>CommandLine() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::CommandLine::CommandLine </td>
+ <td>(</td>
+ <td class="paramtype">std::string &amp;&amp;&#160;</td>
+ <td class="paramname"><em>argv0</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::vector&lt; std::string &gt; &amp;&amp;&#160;</td>
+ <td class="paramname"><em>args</em> = <code>{}</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">explicit</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Build a command line. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">argv0</td><td>UTF-8 string, argv[0]. </td></tr>
+ <tr><td class="paramname">args</td><td>List of UTF-8 strings, other arguments. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="cmd__line_8hpp_source.html#l00058">58</a> of file <a class="el" href="cmd__line_8hpp_source.html">cmd_line.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a69e5c796f37637e39b2e1d7d95ba922a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a69e5c796f37637e39b2e1d7d95ba922a">&#9670;&nbsp;</a></span>CommandLine() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::CommandLine::CommandLine </td>
+ <td>(</td>
+ <td class="paramtype">std::vector&lt; std::string &gt;&#160;</td>
+ <td class="paramname"><em>argv</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">explicit</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Build a command line. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">argv</td><td>List of UTF-8 strings, including argv[0]. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="cmd__line_8cpp_source.html#l00089">89</a> of file <a class="el" href="cmd__line_8cpp_source.html">cmd_line.cpp</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="aa07ee7bf5d61658f33e4a7571205ae5c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa07ee7bf5d61658f33e4a7571205ae5c">&#9670;&nbsp;</a></span>query()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a> winapi::CommandLine::query </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Get the command line used to launch this process. </p>
+
+<p class="definition">Definition at line <a class="el" href="cmd__line_8cpp_source.html#l00075">75</a> of file <a class="el" href="cmd__line_8cpp_source.html">cmd_line.cpp</a>.</p>
+
+</div>
+</div>
+<a id="aabafd2d1d923c30c3da372909857e87e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aabafd2d1d923c30c3da372909857e87e">&#9670;&nbsp;</a></span>parse()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a> winapi::CommandLine::parse </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>src</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Parse a command line from a string. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">src</td><td>UTF-8 encoded string. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="cmd__line_8cpp_source.html#l00079">79</a> of file <a class="el" href="cmd__line_8cpp_source.html">cmd_line.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a7a7bc2a7461f2f275a12c9fda23d312d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7a7bc2a7461f2f275a12c9fda23d312d">&#9670;&nbsp;</a></span>from_main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a> winapi::CommandLine::from_main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">wchar_t *&#160;</td>
+ <td class="paramname"><em>argv</em>[]&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Build a command line from main() arguments. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">argc</td><td>Length of the argv array. </td></tr>
+ <tr><td class="paramname">argv</td><td>UTF-16 encoded strings. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="cmd__line_8cpp_source.html#l00083">83</a> of file <a class="el" href="cmd__line_8cpp_source.html">cmd_line.cpp</a>.</p>
+
+</div>
+</div>
+<a id="ac47e738f255a85b3e0605d40c0124b24"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac47e738f255a85b3e0605d40c0124b24">&#9670;&nbsp;</a></span>to_string()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::string winapi::CommandLine::to_string </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Build a string that represents this command line. </p><dl class="section return"><dt>Returns</dt><dd>UTF-8 string. </dd></dl>
+
+<p class="definition">Definition at line <a class="el" href="cmd__line_8cpp_source.html#l00138">138</a> of file <a class="el" href="cmd__line_8cpp_source.html">cmd_line.cpp</a>.</p>
+
+</div>
+</div>
+<a id="afb35d8d6d2b8b66bd6f21d0adc37017f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afb35d8d6d2b8b66bd6f21d0adc37017f">&#9670;&nbsp;</a></span>args_to_string()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::string winapi::CommandLine::args_to_string </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Build a string that represents this command line, but omit argv[0]. </p><dl class="section return"><dt>Returns</dt><dd>UTF-8 string. </dd></dl>
+
+<p class="definition">Definition at line <a class="el" href="cmd__line_8cpp_source.html#l00142">142</a> of file <a class="el" href="cmd__line_8cpp_source.html">cmd_line.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a8f75a5f374397c1c1dcc4900bf44ee32"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8f75a5f374397c1c1dcc4900bf44ee32">&#9670;&nbsp;</a></span>get_argv0()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::string winapi::CommandLine::get_argv0 </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Get argv[0] for this command line. </p><dl class="section return"><dt>Returns</dt><dd>UTF-8 string. </dd></dl>
+
+<p class="definition">Definition at line <a class="el" href="cmd__line_8hpp_source.html#l00087">87</a> of file <a class="el" href="cmd__line_8hpp_source.html">cmd_line.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ae87fa727498660661753d2d456873033"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae87fa727498660661753d2d456873033">&#9670;&nbsp;</a></span>has_args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool winapi::CommandLine::has_args </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Test if this command line has any additional arguments besides argv[0]. </p>
+
+<p class="definition">Definition at line <a class="el" href="cmd__line_8hpp_source.html#l00090">90</a> of file <a class="el" href="cmd__line_8hpp_source.html">cmd_line.hpp</a>.</p>
+
+</div>
+</div>
+<a id="aef5ea9b427d975af8e64948802b54af4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aef5ea9b427d975af8e64948802b54af4">&#9670;&nbsp;</a></span>get_args()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const std::vector&lt;std::string&gt;&amp; winapi::CommandLine::get_args </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Get list of arguments for this command line beyond argv[0]. </p><dl class="section return"><dt>Returns</dt><dd>List of UTF-8 strings. </dd></dl>
+
+<p class="definition">Definition at line <a class="el" href="cmd__line_8hpp_source.html#l00096">96</a> of file <a class="el" href="cmd__line_8hpp_source.html">cmd_line.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ac21d30a214f529f80b91186e9724cf41"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac21d30a214f529f80b91186e9724cf41">&#9670;&nbsp;</a></span>get_argv()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::vector&lt; std::string &gt; winapi::CommandLine::get_argv </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Get list of arguments for this command line. </p><dl class="section return"><dt>Returns</dt><dd>List of UTF-8 strings. </dd></dl>
+
+<p class="definition">Definition at line <a class="el" href="cmd__line_8cpp_source.html#l00146">146</a> of file <a class="el" href="cmd__line_8cpp_source.html">cmd_line.cpp</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>include/winapi/<a class="el" href="cmd__line_8hpp_source.html">cmd_line.hpp</a></li>
+<li>src/<a class="el" href="cmd__line_8cpp_source.html">cmd_line.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1File-members.html b/classwinapi_1_1File-members.html
new file mode 100644
index 0000000..e6509a0
--- /dev/null
+++ b/classwinapi_1_1File-members.html
@@ -0,0 +1,112 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1File.html">File</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::File Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classwinapi_1_1File.html">winapi::File</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#a6f28cc73ae2e3e447251cef0160e3555">close</a>()</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dont_inherit</b>() const (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1File.html#a4ae67aba44ba64654b888ace9b7dfb36">File</a>(Handle &amp;&amp;handle)</td><td class="entry"><a class="el" href="classwinapi_1_1File.html">winapi::File</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>get</b>() const (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1File.html#ad3c43351e4c032caa78525fc15e64ca7">get_size</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1File.html">winapi::File</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Handle</b>()=default (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Handle</b>(HANDLE) (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>inherit</b>(bool yes=true) const (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#acc001a0f466d9c92cf7f2ef62896afc5">is_std</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>is_valid</b>() const (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_valid</b>(HANDLE) (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>max_chunk_size</b> (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1File.html#ad3bacd22beea28dcb0a0df846b5c4215">open_r</a>(const std::string &amp;)</td><td class="entry"><a class="el" href="classwinapi_1_1File.html">winapi::File</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1File.html#aaa308b06a55f992f71e76f9e7a629647">open_r</a>(const CanonicalPath &amp;)</td><td class="entry"><a class="el" href="classwinapi_1_1File.html">winapi::File</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1File.html#a7d7eeb56c9f33f6ec1814472c61e51f4">open_read_attributes</a>(const std::string &amp;)</td><td class="entry"><a class="el" href="classwinapi_1_1File.html">winapi::File</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1File.html#aecba0e33d05893021f93a2348aeefa34">open_read_attributes</a>(const CanonicalPath &amp;)</td><td class="entry"><a class="el" href="classwinapi_1_1File.html">winapi::File</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1File.html#a36cda85b326592d7eadca5dc4a6b7981">open_w</a>(const std::string &amp;)</td><td class="entry"><a class="el" href="classwinapi_1_1File.html">winapi::File</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1File.html#a53bc6b8de007c630ac84d6519a520111">open_w</a>(const CanonicalPath &amp;)</td><td class="entry"><a class="el" href="classwinapi_1_1File.html">winapi::File</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator HANDLE</b>() const (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ptr</b>() const (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1File.html#aed36137d5b730166cfec4e0f8a5a6fdd">query_id</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1File.html">winapi::File</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#ae340b095569654f8b709614f23577f2e">read</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#a31c8440493e29cdd9b6fc40ffe8c06f1">read_chunk</a>(Buffer &amp;read_chunk) const</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1File.html#a453828fe42006bc7b6e925c41d1e965e">remove</a>(const std::string &amp;)</td><td class="entry"><a class="el" href="classwinapi_1_1File.html">winapi::File</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1File.html#a7aa6987387481fc3b2fc5187b0563e97">remove</a>(const CanonicalPath &amp;)</td><td class="entry"><a class="el" href="classwinapi_1_1File.html">winapi::File</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#a894d880e1241c9516889a7a63a0c1750">std_err</a>()</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#a1817fdf127291cf5f47d6429d8f468cd">std_in</a>()</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#a76e96327afd0b943d996c90289f2883e">std_out</a>()</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#afbfe1b7de229eb5656504e05acf9bbcc">write</a>(const void *data, std::size_t nb) const</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#aee2ff37831d686a8140403c10d7ebadd">write</a>(const Buffer &amp;buffer) const</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#ab78fab4796ef5ec3f9576f19b54cfd04">write</a>(const std::basic_string&lt; CharT &gt; &amp;src) const</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1File.html b/classwinapi_1_1File.html
new file mode 100644
index 0000000..49e9415
--- /dev/null
+++ b/classwinapi_1_1File.html
@@ -0,0 +1,495 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::File Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1File.html">File</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
+<a href="classwinapi_1_1File-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::File Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a class="el" href="classwinapi_1_1File.html" title="File I/O.">File</a> I/O.
+ <a href="classwinapi_1_1File.html#details">More...</a></p>
+<div class="dynheader">
+Inheritance diagram for winapi::File:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classwinapi_1_1File.png" usemap="#winapi::File_map" alt=""/>
+ <map id="winapi::File_map" name="winapi::File_map">
+<area href="classwinapi_1_1Handle.html" title="HANDLE wrapper." alt="winapi::Handle" shape="rect" coords="0,0,94,24"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structwinapi_1_1File_1_1ID.html">ID</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a4ae67aba44ba64654b888ace9b7dfb36"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1File.html#a4ae67aba44ba64654b888ace9b7dfb36">File</a> (<a class="el" href="classwinapi_1_1Handle.html">Handle</a> &amp;&amp;handle)</td></tr>
+<tr class="separator:a4ae67aba44ba64654b888ace9b7dfb36"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad3c43351e4c032caa78525fc15e64ca7"><td class="memItemLeft" align="right" valign="top">std::size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1File.html#ad3c43351e4c032caa78525fc15e64ca7">get_size</a> () const</td></tr>
+<tr class="separator:ad3c43351e4c032caa78525fc15e64ca7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aed36137d5b730166cfec4e0f8a5a6fdd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structwinapi_1_1File_1_1ID.html">ID</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1File.html#aed36137d5b730166cfec4e0f8a5a6fdd">query_id</a> () const</td></tr>
+<tr class="separator:aed36137d5b730166cfec4e0f8a5a6fdd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_classwinapi_1_1Handle"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classwinapi_1_1Handle')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td></tr>
+<tr class="memitem:aa005a3f927fab2a3bc5ca930ca22f61f inherit pub_methods_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top"><a id="aa005a3f927fab2a3bc5ca930ca22f61f"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Handle</b> (HANDLE)</td></tr>
+<tr class="separator:aa005a3f927fab2a3bc5ca930ca22f61f inherit pub_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aafd8ce44149f5f2c8e7aeb4d34225ef3 inherit pub_methods_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top"><a id="aafd8ce44149f5f2c8e7aeb4d34225ef3"></a>
+HANDLE&#160;</td><td class="memItemRight" valign="bottom"><b>get</b> () const</td></tr>
+<tr class="separator:aafd8ce44149f5f2c8e7aeb4d34225ef3 inherit pub_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a97d591e2b27613360af81e058a2f527c inherit pub_methods_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top"><a id="a97d591e2b27613360af81e058a2f527c"></a>
+HANDLE&#160;</td><td class="memItemRight" valign="bottom"><b>ptr</b> () const</td></tr>
+<tr class="separator:a97d591e2b27613360af81e058a2f527c inherit pub_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2309dd0b3fe0dfe25c5dd1cec30f6e7b inherit pub_methods_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top"><a id="a2309dd0b3fe0dfe25c5dd1cec30f6e7b"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>operator HANDLE</b> () const</td></tr>
+<tr class="separator:a2309dd0b3fe0dfe25c5dd1cec30f6e7b inherit pub_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0aae8a719302767f7f186f22195a40e6 inherit pub_methods_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top"><a id="a0aae8a719302767f7f186f22195a40e6"></a>
+bool&#160;</td><td class="memItemRight" valign="bottom"><b>is_valid</b> () const</td></tr>
+<tr class="separator:a0aae8a719302767f7f186f22195a40e6 inherit pub_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6f28cc73ae2e3e447251cef0160e3555 inherit pub_methods_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#a6f28cc73ae2e3e447251cef0160e3555">close</a> ()</td></tr>
+<tr class="separator:a6f28cc73ae2e3e447251cef0160e3555 inherit pub_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acc001a0f466d9c92cf7f2ef62896afc5 inherit pub_methods_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#acc001a0f466d9c92cf7f2ef62896afc5">is_std</a> () const</td></tr>
+<tr class="separator:acc001a0f466d9c92cf7f2ef62896afc5 inherit pub_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae340b095569654f8b709614f23577f2e inherit pub_methods_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classwinapi_1_1Buffer.html">Buffer</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#ae340b095569654f8b709614f23577f2e">read</a> () const</td></tr>
+<tr class="separator:ae340b095569654f8b709614f23577f2e inherit pub_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31c8440493e29cdd9b6fc40ffe8c06f1 inherit pub_methods_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#a31c8440493e29cdd9b6fc40ffe8c06f1">read_chunk</a> (<a class="el" href="classwinapi_1_1Buffer.html">Buffer</a> &amp;read_chunk) const</td></tr>
+<tr class="separator:a31c8440493e29cdd9b6fc40ffe8c06f1 inherit pub_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afbfe1b7de229eb5656504e05acf9bbcc inherit pub_methods_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#afbfe1b7de229eb5656504e05acf9bbcc">write</a> (const void *data, std::size_t nb) const</td></tr>
+<tr class="separator:afbfe1b7de229eb5656504e05acf9bbcc inherit pub_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee2ff37831d686a8140403c10d7ebadd inherit pub_methods_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#aee2ff37831d686a8140403c10d7ebadd">write</a> (const <a class="el" href="classwinapi_1_1Buffer.html">Buffer</a> &amp;buffer) const</td></tr>
+<tr class="separator:aee2ff37831d686a8140403c10d7ebadd inherit pub_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab78fab4796ef5ec3f9576f19b54cfd04 inherit pub_methods_classwinapi_1_1Handle"><td class="memTemplParams" colspan="2">template&lt;typename CharT &gt; </td></tr>
+<tr class="memitem:ab78fab4796ef5ec3f9576f19b54cfd04 inherit pub_methods_classwinapi_1_1Handle"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#ab78fab4796ef5ec3f9576f19b54cfd04">write</a> (const std::basic_string&lt; CharT &gt; &amp;src) const</td></tr>
+<tr class="separator:ab78fab4796ef5ec3f9576f19b54cfd04 inherit pub_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a630b9ee6bb6d1669af11005d2fc3c582 inherit pub_methods_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top"><a id="a630b9ee6bb6d1669af11005d2fc3c582"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>inherit</b> (bool yes=true) const</td></tr>
+<tr class="separator:a630b9ee6bb6d1669af11005d2fc3c582 inherit pub_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c4844b0bb53e30ace8ad17f5edde50b inherit pub_methods_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top"><a id="a2c4844b0bb53e30ace8ad17f5edde50b"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>dont_inherit</b> () const</td></tr>
+<tr class="separator:a2c4844b0bb53e30ace8ad17f5edde50b inherit pub_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:ad3bacd22beea28dcb0a0df846b5c4215"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1File.html">File</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1File.html#ad3bacd22beea28dcb0a0df846b5c4215">open_r</a> (const std::string &amp;)</td></tr>
+<tr class="separator:ad3bacd22beea28dcb0a0df846b5c4215"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaa308b06a55f992f71e76f9e7a629647"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1File.html">File</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1File.html#aaa308b06a55f992f71e76f9e7a629647">open_r</a> (const <a class="el" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a> &amp;)</td></tr>
+<tr class="separator:aaa308b06a55f992f71e76f9e7a629647"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d7eeb56c9f33f6ec1814472c61e51f4"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1File.html">File</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1File.html#a7d7eeb56c9f33f6ec1814472c61e51f4">open_read_attributes</a> (const std::string &amp;)</td></tr>
+<tr class="separator:a7d7eeb56c9f33f6ec1814472c61e51f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aecba0e33d05893021f93a2348aeefa34"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1File.html">File</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1File.html#aecba0e33d05893021f93a2348aeefa34">open_read_attributes</a> (const <a class="el" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a> &amp;)</td></tr>
+<tr class="separator:aecba0e33d05893021f93a2348aeefa34"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a36cda85b326592d7eadca5dc4a6b7981"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1File.html">File</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1File.html#a36cda85b326592d7eadca5dc4a6b7981">open_w</a> (const std::string &amp;)</td></tr>
+<tr class="separator:a36cda85b326592d7eadca5dc4a6b7981"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a53bc6b8de007c630ac84d6519a520111"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1File.html">File</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1File.html#a53bc6b8de007c630ac84d6519a520111">open_w</a> (const <a class="el" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a> &amp;)</td></tr>
+<tr class="separator:a53bc6b8de007c630ac84d6519a520111"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a453828fe42006bc7b6e925c41d1e965e"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1File.html#a453828fe42006bc7b6e925c41d1e965e">remove</a> (const std::string &amp;)</td></tr>
+<tr class="separator:a453828fe42006bc7b6e925c41d1e965e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7aa6987387481fc3b2fc5187b0563e97"><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1File.html#a7aa6987387481fc3b2fc5187b0563e97">remove</a> (const <a class="el" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a> &amp;)</td></tr>
+<tr class="separator:a7aa6987387481fc3b2fc5187b0563e97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_static_methods_classwinapi_1_1Handle"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_classwinapi_1_1Handle')"><img src="closed.png" alt="-"/>&#160;Static Public Member Functions inherited from <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td></tr>
+<tr class="memitem:a9c98cce78725c975bfd1f87614c2eaee inherit pub_static_methods_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top"><a id="a9c98cce78725c975bfd1f87614c2eaee"></a>
+static bool&#160;</td><td class="memItemRight" valign="bottom"><b>is_valid</b> (HANDLE)</td></tr>
+<tr class="separator:a9c98cce78725c975bfd1f87614c2eaee inherit pub_static_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1817fdf127291cf5f47d6429d8f468cd inherit pub_static_methods_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1Handle.html">Handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#a1817fdf127291cf5f47d6429d8f468cd">std_in</a> ()</td></tr>
+<tr class="separator:a1817fdf127291cf5f47d6429d8f468cd inherit pub_static_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a76e96327afd0b943d996c90289f2883e inherit pub_static_methods_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1Handle.html">Handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#a76e96327afd0b943d996c90289f2883e">std_out</a> ()</td></tr>
+<tr class="separator:a76e96327afd0b943d996c90289f2883e inherit pub_static_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a894d880e1241c9516889a7a63a0c1750 inherit pub_static_methods_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1Handle.html">Handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#a894d880e1241c9516889a7a63a0c1750">std_err</a> ()</td></tr>
+<tr class="separator:a894d880e1241c9516889a7a63a0c1750 inherit pub_static_methods_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_static_attribs_classwinapi_1_1Handle"><td colspan="2" onclick="javascript:toggleInherit('pub_static_attribs_classwinapi_1_1Handle')"><img src="closed.png" alt="-"/>&#160;Static Public Attributes inherited from <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td></tr>
+<tr class="memitem:a6c822b6e0b886e2200e6c7d9dc3e6604 inherit pub_static_attribs_classwinapi_1_1Handle"><td class="memItemLeft" align="right" valign="top"><a id="a6c822b6e0b886e2200e6c7d9dc3e6604"></a>
+static constexpr std::size_t&#160;</td><td class="memItemRight" valign="bottom"><b>max_chunk_size</b> = 16 * 1024</td></tr>
+<tr class="separator:a6c822b6e0b886e2200e6c7d9dc3e6604 inherit pub_static_attribs_classwinapi_1_1Handle"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="classwinapi_1_1File.html" title="File I/O.">File</a> I/O. </p>
+<p>Easily open, read &amp; write files. </p>
+
+<p class="definition">Definition at line <a class="el" href="file_8hpp_source.html#l00029">29</a> of file <a class="el" href="file_8hpp_source.html">file.hpp</a>.</p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a4ae67aba44ba64654b888ace9b7dfb36"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4ae67aba44ba64654b888ace9b7dfb36">&#9670;&nbsp;</a></span>File()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::File::File </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classwinapi_1_1Handle.html">Handle</a> &amp;&amp;&#160;</td>
+ <td class="paramname"><em>handle</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">explicit</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Make a <a class="el" href="classwinapi_1_1File.html" title="File I/O.">File</a> instance from an open handle. </p>
+
+<p class="definition">Definition at line <a class="el" href="file_8hpp_source.html#l00059">59</a> of file <a class="el" href="file_8hpp_source.html">file.hpp</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="ad3bacd22beea28dcb0a0df846b5c4215"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad3bacd22beea28dcb0a0df846b5c4215">&#9670;&nbsp;</a></span>open_r() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1File.html">File</a> winapi::File::open_r </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>path</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Open file for reading. </p>
+
+<p class="definition">Definition at line <a class="el" href="file_8cpp_source.html#l00092">92</a> of file <a class="el" href="file_8cpp_source.html">file.cpp</a>.</p>
+
+</div>
+</div>
+<a id="aaa308b06a55f992f71e76f9e7a629647"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaa308b06a55f992f71e76f9e7a629647">&#9670;&nbsp;</a></span>open_r() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1File.html">File</a> winapi::File::open_r </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a> &amp;&#160;</td>
+ <td class="paramname"><em>path</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+<p class="definition">Definition at line <a class="el" href="file_8cpp_source.html#l00096">96</a> of file <a class="el" href="file_8cpp_source.html">file.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a7d7eeb56c9f33f6ec1814472c61e51f4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7d7eeb56c9f33f6ec1814472c61e51f4">&#9670;&nbsp;</a></span>open_read_attributes() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1File.html">File</a> winapi::File::open_read_attributes </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>path</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Open file for reading (inc. ability to read its attributes). </p>
+
+<p class="definition">Definition at line <a class="el" href="file_8cpp_source.html#l00100">100</a> of file <a class="el" href="file_8cpp_source.html">file.cpp</a>.</p>
+
+</div>
+</div>
+<a id="aecba0e33d05893021f93a2348aeefa34"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aecba0e33d05893021f93a2348aeefa34">&#9670;&nbsp;</a></span>open_read_attributes() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1File.html">File</a> winapi::File::open_read_attributes </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a> &amp;&#160;</td>
+ <td class="paramname"><em>path</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+<p class="definition">Definition at line <a class="el" href="file_8cpp_source.html#l00104">104</a> of file <a class="el" href="file_8cpp_source.html">file.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a36cda85b326592d7eadca5dc4a6b7981"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a36cda85b326592d7eadca5dc4a6b7981">&#9670;&nbsp;</a></span>open_w() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1File.html">File</a> winapi::File::open_w </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>path</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Open file for writing. </p>
+
+<p class="definition">Definition at line <a class="el" href="file_8cpp_source.html#l00108">108</a> of file <a class="el" href="file_8cpp_source.html">file.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a53bc6b8de007c630ac84d6519a520111"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a53bc6b8de007c630ac84d6519a520111">&#9670;&nbsp;</a></span>open_w() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1File.html">File</a> winapi::File::open_w </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a> &amp;&#160;</td>
+ <td class="paramname"><em>path</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+<p class="definition">Definition at line <a class="el" href="file_8cpp_source.html#l00112">112</a> of file <a class="el" href="file_8cpp_source.html">file.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a453828fe42006bc7b6e925c41d1e965e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a453828fe42006bc7b6e925c41d1e965e">&#9670;&nbsp;</a></span>remove() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void winapi::File::remove </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>path</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Delete a file. </p>
+
+<p class="definition">Definition at line <a class="el" href="file_8cpp_source.html#l00116">116</a> of file <a class="el" href="file_8cpp_source.html">file.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a7aa6987387481fc3b2fc5187b0563e97"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7aa6987387481fc3b2fc5187b0563e97">&#9670;&nbsp;</a></span>remove() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void winapi::File::remove </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a> &amp;&#160;</td>
+ <td class="paramname"><em>path</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+<p class="definition">Definition at line <a class="el" href="file_8cpp_source.html#l00120">120</a> of file <a class="el" href="file_8cpp_source.html">file.cpp</a>.</p>
+
+</div>
+</div>
+<a id="ad3c43351e4c032caa78525fc15e64ca7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad3c43351e4c032caa78525fc15e64ca7">&#9670;&nbsp;</a></span>get_size()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::size_t winapi::File::get_size </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Get file size. </p><dl class="section return"><dt>Returns</dt><dd><a class="el" href="classwinapi_1_1File.html" title="File I/O.">File</a> size, bytes. </dd></dl>
+
+<p class="definition">Definition at line <a class="el" href="file_8cpp_source.html#l00124">124</a> of file <a class="el" href="file_8cpp_source.html">file.cpp</a>.</p>
+
+</div>
+</div>
+<a id="aed36137d5b730166cfec4e0f8a5a6fdd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aed36137d5b730166cfec4e0f8a5a6fdd">&#9670;&nbsp;</a></span>query_id()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structwinapi_1_1File_1_1ID.html">File::ID</a> winapi::File::query_id </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Get file <a class="el" href="structwinapi_1_1File_1_1ID.html">ID</a>. <a class="el" href="classwinapi_1_1File.html" title="File I/O.">File</a> <a class="el" href="structwinapi_1_1File_1_1ID.html">ID</a> is a unique representation of a file, suitable for hashing. </p>
+
+<p class="definition">Definition at line <a class="el" href="file_8cpp_source.html#l00139">139</a> of file <a class="el" href="file_8cpp_source.html">file.cpp</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>include/winapi/<a class="el" href="file_8hpp_source.html">file.hpp</a></li>
+<li>src/<a class="el" href="file_8cpp_source.html">file.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1File.png b/classwinapi_1_1File.png
new file mode 100644
index 0000000..4c14f92
--- /dev/null
+++ b/classwinapi_1_1File.png
Binary files differ
diff --git a/classwinapi_1_1Handle-members.html b/classwinapi_1_1Handle-members.html
new file mode 100644
index 0000000..e3e2a16
--- /dev/null
+++ b/classwinapi_1_1Handle-members.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1Handle.html">Handle</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::Handle Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#a6f28cc73ae2e3e447251cef0160e3555">close</a>()</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>dont_inherit</b>() const (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get</b>() const (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Handle</b>()=default (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Handle</b>(HANDLE) (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>inherit</b>(bool yes=true) const (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#acc001a0f466d9c92cf7f2ef62896afc5">is_std</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>is_valid</b>() const (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>is_valid</b>(HANDLE) (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>max_chunk_size</b> (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator HANDLE</b>() const (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ptr</b>() const (defined in <a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#ae340b095569654f8b709614f23577f2e">read</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#a31c8440493e29cdd9b6fc40ffe8c06f1">read_chunk</a>(Buffer &amp;read_chunk) const</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#a894d880e1241c9516889a7a63a0c1750">std_err</a>()</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#a1817fdf127291cf5f47d6429d8f468cd">std_in</a>()</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#a76e96327afd0b943d996c90289f2883e">std_out</a>()</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#afbfe1b7de229eb5656504e05acf9bbcc">write</a>(const void *data, std::size_t nb) const</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#aee2ff37831d686a8140403c10d7ebadd">write</a>(const Buffer &amp;buffer) const</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Handle.html#ab78fab4796ef5ec3f9576f19b54cfd04">write</a>(const std::basic_string&lt; CharT &gt; &amp;src) const</td><td class="entry"><a class="el" href="classwinapi_1_1Handle.html">winapi::Handle</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1Handle.html b/classwinapi_1_1Handle.html
new file mode 100644
index 0000000..1bea063
--- /dev/null
+++ b/classwinapi_1_1Handle.html
@@ -0,0 +1,434 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::Handle Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1Handle.html">Handle</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
+<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
+<a href="classwinapi_1_1Handle-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::Handle Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>HANDLE wrapper.
+ <a href="classwinapi_1_1Handle.html#details">More...</a></p>
+<div class="dynheader">
+Inheritance diagram for winapi::Handle:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classwinapi_1_1Handle.png" usemap="#winapi::Handle_map" alt=""/>
+ <map id="winapi::Handle_map" name="winapi::Handle_map">
+<area href="classwinapi_1_1File.html" title="File I/O." alt="winapi::File" shape="rect" coords="0,56,94,80"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aa005a3f927fab2a3bc5ca930ca22f61f"><td class="memItemLeft" align="right" valign="top"><a id="aa005a3f927fab2a3bc5ca930ca22f61f"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Handle</b> (HANDLE)</td></tr>
+<tr class="separator:aa005a3f927fab2a3bc5ca930ca22f61f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aafd8ce44149f5f2c8e7aeb4d34225ef3"><td class="memItemLeft" align="right" valign="top"><a id="aafd8ce44149f5f2c8e7aeb4d34225ef3"></a>
+HANDLE&#160;</td><td class="memItemRight" valign="bottom"><b>get</b> () const</td></tr>
+<tr class="separator:aafd8ce44149f5f2c8e7aeb4d34225ef3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a97d591e2b27613360af81e058a2f527c"><td class="memItemLeft" align="right" valign="top"><a id="a97d591e2b27613360af81e058a2f527c"></a>
+HANDLE&#160;</td><td class="memItemRight" valign="bottom"><b>ptr</b> () const</td></tr>
+<tr class="separator:a97d591e2b27613360af81e058a2f527c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2309dd0b3fe0dfe25c5dd1cec30f6e7b"><td class="memItemLeft" align="right" valign="top"><a id="a2309dd0b3fe0dfe25c5dd1cec30f6e7b"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>operator HANDLE</b> () const</td></tr>
+<tr class="separator:a2309dd0b3fe0dfe25c5dd1cec30f6e7b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0aae8a719302767f7f186f22195a40e6"><td class="memItemLeft" align="right" valign="top"><a id="a0aae8a719302767f7f186f22195a40e6"></a>
+bool&#160;</td><td class="memItemRight" valign="bottom"><b>is_valid</b> () const</td></tr>
+<tr class="separator:a0aae8a719302767f7f186f22195a40e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6f28cc73ae2e3e447251cef0160e3555"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#a6f28cc73ae2e3e447251cef0160e3555">close</a> ()</td></tr>
+<tr class="separator:a6f28cc73ae2e3e447251cef0160e3555"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acc001a0f466d9c92cf7f2ef62896afc5"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#acc001a0f466d9c92cf7f2ef62896afc5">is_std</a> () const</td></tr>
+<tr class="separator:acc001a0f466d9c92cf7f2ef62896afc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae340b095569654f8b709614f23577f2e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classwinapi_1_1Buffer.html">Buffer</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#ae340b095569654f8b709614f23577f2e">read</a> () const</td></tr>
+<tr class="separator:ae340b095569654f8b709614f23577f2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31c8440493e29cdd9b6fc40ffe8c06f1"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#a31c8440493e29cdd9b6fc40ffe8c06f1">read_chunk</a> (<a class="el" href="classwinapi_1_1Buffer.html">Buffer</a> &amp;read_chunk) const</td></tr>
+<tr class="separator:a31c8440493e29cdd9b6fc40ffe8c06f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afbfe1b7de229eb5656504e05acf9bbcc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#afbfe1b7de229eb5656504e05acf9bbcc">write</a> (const void *data, std::size_t nb) const</td></tr>
+<tr class="separator:afbfe1b7de229eb5656504e05acf9bbcc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee2ff37831d686a8140403c10d7ebadd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#aee2ff37831d686a8140403c10d7ebadd">write</a> (const <a class="el" href="classwinapi_1_1Buffer.html">Buffer</a> &amp;buffer) const</td></tr>
+<tr class="separator:aee2ff37831d686a8140403c10d7ebadd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab78fab4796ef5ec3f9576f19b54cfd04"><td class="memTemplParams" colspan="2">template&lt;typename CharT &gt; </td></tr>
+<tr class="memitem:ab78fab4796ef5ec3f9576f19b54cfd04"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#ab78fab4796ef5ec3f9576f19b54cfd04">write</a> (const std::basic_string&lt; CharT &gt; &amp;src) const</td></tr>
+<tr class="separator:ab78fab4796ef5ec3f9576f19b54cfd04"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a630b9ee6bb6d1669af11005d2fc3c582"><td class="memItemLeft" align="right" valign="top"><a id="a630b9ee6bb6d1669af11005d2fc3c582"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>inherit</b> (bool yes=true) const</td></tr>
+<tr class="separator:a630b9ee6bb6d1669af11005d2fc3c582"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2c4844b0bb53e30ace8ad17f5edde50b"><td class="memItemLeft" align="right" valign="top"><a id="a2c4844b0bb53e30ace8ad17f5edde50b"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>dont_inherit</b> () const</td></tr>
+<tr class="separator:a2c4844b0bb53e30ace8ad17f5edde50b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a9c98cce78725c975bfd1f87614c2eaee"><td class="memItemLeft" align="right" valign="top"><a id="a9c98cce78725c975bfd1f87614c2eaee"></a>
+static bool&#160;</td><td class="memItemRight" valign="bottom"><b>is_valid</b> (HANDLE)</td></tr>
+<tr class="separator:a9c98cce78725c975bfd1f87614c2eaee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1817fdf127291cf5f47d6429d8f468cd"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1Handle.html">Handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#a1817fdf127291cf5f47d6429d8f468cd">std_in</a> ()</td></tr>
+<tr class="separator:a1817fdf127291cf5f47d6429d8f468cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a76e96327afd0b943d996c90289f2883e"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1Handle.html">Handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#a76e96327afd0b943d996c90289f2883e">std_out</a> ()</td></tr>
+<tr class="separator:a76e96327afd0b943d996c90289f2883e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a894d880e1241c9516889a7a63a0c1750"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1Handle.html">Handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Handle.html#a894d880e1241c9516889a7a63a0c1750">std_err</a> ()</td></tr>
+<tr class="separator:a894d880e1241c9516889a7a63a0c1750"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a6c822b6e0b886e2200e6c7d9dc3e6604"><td class="memItemLeft" align="right" valign="top"><a id="a6c822b6e0b886e2200e6c7d9dc3e6604"></a>
+static constexpr std::size_t&#160;</td><td class="memItemRight" valign="bottom"><b>max_chunk_size</b> = 16 * 1024</td></tr>
+<tr class="separator:a6c822b6e0b886e2200e6c7d9dc3e6604"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>HANDLE wrapper. </p>
+<p>This class wraps HANDLE, allowing for painless reads and writes from a random handle. </p>
+
+<p class="definition">Definition at line <a class="el" href="handle_8hpp_source.html#l00025">25</a> of file <a class="el" href="handle_8hpp_source.html">handle.hpp</a>.</p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="a6f28cc73ae2e3e447251cef0160e3555"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6f28cc73ae2e3e447251cef0160e3555">&#9670;&nbsp;</a></span>close()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void winapi::Handle::close </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Close this handle. </p>
+
+<p class="definition">Definition at line <a class="el" href="handle_8cpp_source.html#l00047">47</a> of file <a class="el" href="handle_8cpp_source.html">handle.cpp</a>.</p>
+
+</div>
+</div>
+<a id="acc001a0f466d9c92cf7f2ef62896afc5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acc001a0f466d9c92cf7f2ef62896afc5">&#9670;&nbsp;</a></span>is_std()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool winapi::Handle::is_std </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Check if this is a standard console handle. </p>
+
+<p class="definition">Definition at line <a class="el" href="handle_8cpp_source.html#l00051">51</a> of file <a class="el" href="handle_8cpp_source.html">handle.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a1817fdf127291cf5f47d6429d8f468cd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1817fdf127291cf5f47d6429d8f468cd">&#9670;&nbsp;</a></span>std_in()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1Handle.html">Handle</a> winapi::Handle::std_in </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Check if this is the stdin handle. </p>
+
+<p class="definition">Definition at line <a class="el" href="handle_8cpp_source.html#l00055">55</a> of file <a class="el" href="handle_8cpp_source.html">handle.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a76e96327afd0b943d996c90289f2883e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a76e96327afd0b943d996c90289f2883e">&#9670;&nbsp;</a></span>std_out()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1Handle.html">Handle</a> winapi::Handle::std_out </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Check if this is the stdout handle. </p>
+
+<p class="definition">Definition at line <a class="el" href="handle_8cpp_source.html#l00059">59</a> of file <a class="el" href="handle_8cpp_source.html">handle.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a894d880e1241c9516889a7a63a0c1750"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a894d880e1241c9516889a7a63a0c1750">&#9670;&nbsp;</a></span>std_err()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1Handle.html">Handle</a> winapi::Handle::std_err </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Check if this is the stderr handle. </p>
+
+<p class="definition">Definition at line <a class="el" href="handle_8cpp_source.html#l00063">63</a> of file <a class="el" href="handle_8cpp_source.html">handle.cpp</a>.</p>
+
+</div>
+</div>
+<a id="ae340b095569654f8b709614f23577f2e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae340b095569654f8b709614f23577f2e">&#9670;&nbsp;</a></span>read()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1Buffer.html">Buffer</a> winapi::Handle::read </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Read everything from this handle. </p>
+
+<p class="definition">Definition at line <a class="el" href="handle_8cpp_source.html#l00093">93</a> of file <a class="el" href="handle_8cpp_source.html">handle.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a31c8440493e29cdd9b6fc40ffe8c06f1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a31c8440493e29cdd9b6fc40ffe8c06f1">&#9670;&nbsp;</a></span>read_chunk()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool winapi::Handle::read_chunk </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classwinapi_1_1Buffer.html">Buffer</a> &amp;&#160;</td>
+ <td class="paramname"><em>read_chunk</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Read a chunk from this handle. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">read_chunk</td><td>Receives the data read. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><code>true</code> if there's more data, <code>false</code> otherwise. </dd></dl>
+
+<p class="definition">Definition at line <a class="el" href="handle_8cpp_source.html#l00067">67</a> of file <a class="el" href="handle_8cpp_source.html">handle.cpp</a>.</p>
+
+</div>
+</div>
+<a id="afbfe1b7de229eb5656504e05acf9bbcc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afbfe1b7de229eb5656504e05acf9bbcc">&#9670;&nbsp;</a></span>write() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void winapi::Handle::write </td>
+ <td>(</td>
+ <td class="paramtype">const void *&#160;</td>
+ <td class="paramname"><em>data</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::size_t&#160;</td>
+ <td class="paramname"><em>nb</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Write data to this handle. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">data</td><td>Pointer to binary data. </td></tr>
+ <tr><td class="paramname">nb</td><td>Data size. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="handle_8cpp_source.html#l00109">109</a> of file <a class="el" href="handle_8cpp_source.html">handle.cpp</a>.</p>
+
+</div>
+</div>
+<a id="aee2ff37831d686a8140403c10d7ebadd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aee2ff37831d686a8140403c10d7ebadd">&#9670;&nbsp;</a></span>write() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void winapi::Handle::write </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classwinapi_1_1Buffer.html">Buffer</a> &amp;&#160;</td>
+ <td class="paramname"><em>buffer</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Write data to this handle. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">buffer</td><td>Binary data to write. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="handle_8cpp_source.html#l00125">125</a> of file <a class="el" href="handle_8cpp_source.html">handle.cpp</a>.</p>
+
+</div>
+</div>
+<a id="ab78fab4796ef5ec3f9576f19b54cfd04"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab78fab4796ef5ec3f9576f19b54cfd04">&#9670;&nbsp;</a></span>write() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename CharT &gt; </div>
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void winapi::Handle::write </td>
+ <td>(</td>
+ <td class="paramtype">const std::basic_string&lt; CharT &gt; &amp;&#160;</td>
+ <td class="paramname"><em>src</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Write data to this handle. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">src</td><td>Binary data to write. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="handle_8hpp_source.html#l00078">78</a> of file <a class="el" href="handle_8hpp_source.html">handle.hpp</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>include/winapi/<a class="el" href="handle_8hpp_source.html">handle.hpp</a></li>
+<li>src/<a class="el" href="handle_8cpp_source.html">handle.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1Handle.png b/classwinapi_1_1Handle.png
new file mode 100644
index 0000000..bb6aaf2
--- /dev/null
+++ b/classwinapi_1_1Handle.png
Binary files differ
diff --git a/classwinapi_1_1Pipe-members.html b/classwinapi_1_1Pipe-members.html
new file mode 100644
index 0000000..3fc8d48
--- /dev/null
+++ b/classwinapi_1_1Pipe-members.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1Pipe.html">Pipe</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::Pipe Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classwinapi_1_1Pipe.html">winapi::Pipe</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Pipe.html#aa41a6275dab93f4fc0d2e593aa9b39f0">Pipe</a>()</td><td class="entry"><a class="el" href="classwinapi_1_1Pipe.html">winapi::Pipe</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Pipe.html#a07412b04db253f1c24fe4aeda5db82e1">read_end</a>()</td><td class="entry"><a class="el" href="classwinapi_1_1Pipe.html">winapi::Pipe</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Pipe.html#afc45a1f2a5cdee7bbe4f73dd62d667ac">read_end</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1Pipe.html">winapi::Pipe</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Pipe.html#a19e504588020c68639154ed597151cd6">write_end</a>()</td><td class="entry"><a class="el" href="classwinapi_1_1Pipe.html">winapi::Pipe</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Pipe.html#ad010465685f521c17bd4b6731ed00e00">write_end</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1Pipe.html">winapi::Pipe</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1Pipe.html b/classwinapi_1_1Pipe.html
new file mode 100644
index 0000000..d966bdf
--- /dev/null
+++ b/classwinapi_1_1Pipe.html
@@ -0,0 +1,240 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::Pipe Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1Pipe.html">Pipe</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="classwinapi_1_1Pipe-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::Pipe Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Anonymous pipe wrapper.
+ <a href="classwinapi_1_1Pipe.html#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aa41a6275dab93f4fc0d2e593aa9b39f0"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Pipe.html#aa41a6275dab93f4fc0d2e593aa9b39f0">Pipe</a> ()</td></tr>
+<tr class="separator:aa41a6275dab93f4fc0d2e593aa9b39f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a07412b04db253f1c24fe4aeda5db82e1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classwinapi_1_1Handle.html">Handle</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Pipe.html#a07412b04db253f1c24fe4aeda5db82e1">read_end</a> ()</td></tr>
+<tr class="separator:a07412b04db253f1c24fe4aeda5db82e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc45a1f2a5cdee7bbe4f73dd62d667ac"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classwinapi_1_1Handle.html">Handle</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Pipe.html#afc45a1f2a5cdee7bbe4f73dd62d667ac">read_end</a> () const</td></tr>
+<tr class="separator:afc45a1f2a5cdee7bbe4f73dd62d667ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a19e504588020c68639154ed597151cd6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classwinapi_1_1Handle.html">Handle</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Pipe.html#a19e504588020c68639154ed597151cd6">write_end</a> ()</td></tr>
+<tr class="separator:a19e504588020c68639154ed597151cd6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad010465685f521c17bd4b6731ed00e00"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classwinapi_1_1Handle.html">Handle</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Pipe.html#ad010465685f521c17bd4b6731ed00e00">write_end</a> () const</td></tr>
+<tr class="separator:ad010465685f521c17bd4b6731ed00e00"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Anonymous pipe wrapper. </p>
+
+<p class="definition">Definition at line <a class="el" href="pipe_8hpp_source.html#l00015">15</a> of file <a class="el" href="pipe_8hpp_source.html">pipe.hpp</a>.</p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="aa41a6275dab93f4fc0d2e593aa9b39f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa41a6275dab93f4fc0d2e593aa9b39f0">&#9670;&nbsp;</a></span>Pipe()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::Pipe::Pipe </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Create a new pipe. </p>
+
+<p class="definition">Definition at line <a class="el" href="pipe_8cpp_source.html#l00041">41</a> of file <a class="el" href="pipe_8cpp_source.html">pipe.cpp</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a07412b04db253f1c24fe4aeda5db82e1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a07412b04db253f1c24fe4aeda5db82e1">&#9670;&nbsp;</a></span>read_end() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1Handle.html">Handle</a>&amp; winapi::Pipe::read_end </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Get the read end of the pipe. </p>
+
+<p class="definition">Definition at line <a class="el" href="pipe_8hpp_source.html#l00021">21</a> of file <a class="el" href="pipe_8hpp_source.html">pipe.hpp</a>.</p>
+
+</div>
+</div>
+<a id="afc45a1f2a5cdee7bbe4f73dd62d667ac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afc45a1f2a5cdee7bbe4f73dd62d667ac">&#9670;&nbsp;</a></span>read_end() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classwinapi_1_1Handle.html">Handle</a>&amp; winapi::Pipe::read_end </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+<p class="definition">Definition at line <a class="el" href="pipe_8hpp_source.html#l00023">23</a> of file <a class="el" href="pipe_8hpp_source.html">pipe.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a19e504588020c68639154ed597151cd6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a19e504588020c68639154ed597151cd6">&#9670;&nbsp;</a></span>write_end() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1Handle.html">Handle</a>&amp; winapi::Pipe::write_end </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Get the write end of the pipe. </p>
+
+<p class="definition">Definition at line <a class="el" href="pipe_8hpp_source.html#l00025">25</a> of file <a class="el" href="pipe_8hpp_source.html">pipe.hpp</a>.</p>
+
+</div>
+</div>
+<a id="ad010465685f521c17bd4b6731ed00e00"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad010465685f521c17bd4b6731ed00e00">&#9670;&nbsp;</a></span>write_end() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classwinapi_1_1Handle.html">Handle</a>&amp; winapi::Pipe::write_end </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+<p class="definition">Definition at line <a class="el" href="pipe_8hpp_source.html#l00027">27</a> of file <a class="el" href="pipe_8hpp_source.html">pipe.hpp</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>include/winapi/<a class="el" href="pipe_8hpp_source.html">pipe.hpp</a></li>
+<li>src/<a class="el" href="pipe_8cpp_source.html">pipe.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1Process-members.html b/classwinapi_1_1Process-members.html
new file mode 100644
index 0000000..7956a37
--- /dev/null
+++ b/classwinapi_1_1Process-members.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1Process.html">Process</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::Process Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classwinapi_1_1Process.html">winapi::Process</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">create</a>(ProcessParameters)</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Process.html#ac4eaeb85aa25acec5e4421e1239f315f">create</a>(const CommandLine &amp;)</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Process.html#a16be6c3dc62d500ca8924b359e5193cc">create</a>(const CommandLine &amp;, process::IO)</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Process.html#a4edc58e78ee81e5531af34fc4f806e24">current</a>()</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Process.html#a4fffc3755642f3db56902106f1b96040">default_permissions</a>()</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Process.html#a86cea0dd87e63ef93f6575d601ab31f5">get_exe_path</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Process.html#a359c11337c7e50370cd5375efa841131">get_exit_code</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Process.html#a1b65a0f6dc25c1810161f2c5c9648249">get_handle</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Process.html#aa44a8ca82178dfedd68865e4e47f7584">get_id</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Process.html#a4ddbc4be71879ea7f91b05ad7f44435c">get_resource</a>(uint32_t id)</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Process.html#ac700bc836a720384bed52a032628aaeb">get_resource_string</a>(uint32_t id)</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ID</b> typedef (defined in <a class="el" href="classwinapi_1_1Process.html">winapi::Process</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Process.html#a5b02393edb57bd902e321037133c40eb">is_running</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Process.html#a48964bbb7968bd7b6796e8a3306d58d9">open</a>(ID id, DWORD permissions=default_permissions())</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Process.html#af9d748078299957519ee67fd7f1e49b3">open_r</a>(ID)</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Process.html#a4fc3ed404c1cf67dabb7867d0c9f638c">read_permissions</a>()</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e">shell</a>(const ShellParameters &amp;)</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Process.html#a24e1cbd68bc2dda73220b840979a84b0">shell</a>(const CommandLine &amp;)</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Process.html#a1aedc4814dd9c154b6e03e572d873755">shut_down</a>(int ec=0) const</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1Process.html#a155aefb272a151126fe2a65d583be880">terminate</a>(int ec=0) const</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1Process.html#a273dcbc8cd69539d0f9fd4d1e09e67a7">wait</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1Process.html">winapi::Process</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1Process.html b/classwinapi_1_1Process.html
new file mode 100644
index 0000000..94d60f9
--- /dev/null
+++ b/classwinapi_1_1Process.html
@@ -0,0 +1,697 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::Process Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1Process.html">Process</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-types">Public Types</a> &#124;
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
+<a href="classwinapi_1_1Process-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::Process Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Create a new process or open an existing process.
+ <a href="classwinapi_1_1Process.html#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:aaa57c747a95ab5329dee9b271ceff520"><td class="memItemLeft" align="right" valign="top"><a id="aaa57c747a95ab5329dee9b271ceff520"></a>
+using&#160;</td><td class="memItemRight" valign="bottom"><b>ID</b> = DWORD</td></tr>
+<tr class="separator:aaa57c747a95ab5329dee9b271ceff520"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aa44a8ca82178dfedd68865e4e47f7584"><td class="memItemLeft" align="right" valign="top">ID&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#aa44a8ca82178dfedd68865e4e47f7584">get_id</a> () const</td></tr>
+<tr class="separator:aa44a8ca82178dfedd68865e4e47f7584"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1b65a0f6dc25c1810161f2c5c9648249"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classwinapi_1_1Handle.html">Handle</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#a1b65a0f6dc25c1810161f2c5c9648249">get_handle</a> () const</td></tr>
+<tr class="separator:a1b65a0f6dc25c1810161f2c5c9648249"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5b02393edb57bd902e321037133c40eb"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#a5b02393edb57bd902e321037133c40eb">is_running</a> () const</td></tr>
+<tr class="separator:a5b02393edb57bd902e321037133c40eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a273dcbc8cd69539d0f9fd4d1e09e67a7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#a273dcbc8cd69539d0f9fd4d1e09e67a7">wait</a> () const</td></tr>
+<tr class="separator:a273dcbc8cd69539d0f9fd4d1e09e67a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a155aefb272a151126fe2a65d583be880"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#a155aefb272a151126fe2a65d583be880">terminate</a> (int ec=0) const</td></tr>
+<tr class="separator:a155aefb272a151126fe2a65d583be880"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1aedc4814dd9c154b6e03e572d873755"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#a1aedc4814dd9c154b6e03e572d873755">shut_down</a> (int ec=0) const</td></tr>
+<tr class="separator:a1aedc4814dd9c154b6e03e572d873755"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a359c11337c7e50370cd5375efa841131"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#a359c11337c7e50370cd5375efa841131">get_exit_code</a> () const</td></tr>
+<tr class="separator:a359c11337c7e50370cd5375efa841131"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a86cea0dd87e63ef93f6575d601ab31f5"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#a86cea0dd87e63ef93f6575d601ab31f5">get_exe_path</a> () const</td></tr>
+<tr class="separator:a86cea0dd87e63ef93f6575d601ab31f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a6ef0ce275ef09ed6ef1e115afeee7e6a"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1Process.html">Process</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">create</a> (<a class="el" href="structwinapi_1_1ProcessParameters.html">ProcessParameters</a>)</td></tr>
+<tr class="separator:a6ef0ce275ef09ed6ef1e115afeee7e6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac4eaeb85aa25acec5e4421e1239f315f"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1Process.html">Process</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#ac4eaeb85aa25acec5e4421e1239f315f">create</a> (const <a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a> &amp;)</td></tr>
+<tr class="separator:ac4eaeb85aa25acec5e4421e1239f315f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a16be6c3dc62d500ca8924b359e5193cc"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1Process.html">Process</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#a16be6c3dc62d500ca8924b359e5193cc">create</a> (const <a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a> &amp;, <a class="el" href="structwinapi_1_1process_1_1IO.html">process::IO</a>)</td></tr>
+<tr class="separator:a16be6c3dc62d500ca8924b359e5193cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa9f7cbc9b0e5530f0746606aacc5584e"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1Process.html">Process</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e">shell</a> (const <a class="el" href="structwinapi_1_1ShellParameters.html">ShellParameters</a> &amp;)</td></tr>
+<tr class="separator:aa9f7cbc9b0e5530f0746606aacc5584e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a24e1cbd68bc2dda73220b840979a84b0"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1Process.html">Process</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#a24e1cbd68bc2dda73220b840979a84b0">shell</a> (const <a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a> &amp;)</td></tr>
+<tr class="separator:a24e1cbd68bc2dda73220b840979a84b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4edc58e78ee81e5531af34fc4f806e24"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1Process.html">Process</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#a4edc58e78ee81e5531af34fc4f806e24">current</a> ()</td></tr>
+<tr class="separator:a4edc58e78ee81e5531af34fc4f806e24"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a48964bbb7968bd7b6796e8a3306d58d9"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1Process.html">Process</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#a48964bbb7968bd7b6796e8a3306d58d9">open</a> (ID id, DWORD permissions=<a class="el" href="classwinapi_1_1Process.html#a4fffc3755642f3db56902106f1b96040">default_permissions</a>())</td></tr>
+<tr class="separator:a48964bbb7968bd7b6796e8a3306d58d9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af9d748078299957519ee67fd7f1e49b3"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1Process.html">Process</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#af9d748078299957519ee67fd7f1e49b3">open_r</a> (ID)</td></tr>
+<tr class="separator:af9d748078299957519ee67fd7f1e49b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4fffc3755642f3db56902106f1b96040"><td class="memItemLeft" align="right" valign="top">static DWORD&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#a4fffc3755642f3db56902106f1b96040">default_permissions</a> ()</td></tr>
+<tr class="separator:a4fffc3755642f3db56902106f1b96040"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4fc3ed404c1cf67dabb7867d0c9f638c"><td class="memItemLeft" align="right" valign="top">static DWORD&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#a4fc3ed404c1cf67dabb7867d0c9f638c">read_permissions</a> ()</td></tr>
+<tr class="separator:a4fc3ed404c1cf67dabb7867d0c9f638c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4ddbc4be71879ea7f91b05ad7f44435c"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="structwinapi_1_1Resource.html">Resource</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#a4ddbc4be71879ea7f91b05ad7f44435c">get_resource</a> (uint32_t id)</td></tr>
+<tr class="separator:a4ddbc4be71879ea7f91b05ad7f44435c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac700bc836a720384bed52a032628aaeb"><td class="memItemLeft" align="right" valign="top">static std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1Process.html#ac700bc836a720384bed52a032628aaeb">get_resource_string</a> (uint32_t id)</td></tr>
+<tr class="separator:ac700bc836a720384bed52a032628aaeb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Create a new process or open an existing process. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8hpp_source.html#l00054">54</a> of file <a class="el" href="process_8hpp_source.html">process.hpp</a>.</p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="a6ef0ce275ef09ed6ef1e115afeee7e6a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6ef0ce275ef09ed6ef1e115afeee7e6a">&#9670;&nbsp;</a></span>create() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1Process.html">Process</a> winapi::Process::create </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structwinapi_1_1ProcessParameters.html">ProcessParameters</a>&#160;</td>
+ <td class="paramname"><em>params</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Create a new process using <a class="el" href="structwinapi_1_1ProcessParameters.html" title="Process parameters for Process::create().">ProcessParameters</a>. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00241">241</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<a id="ac4eaeb85aa25acec5e4421e1239f315f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac4eaeb85aa25acec5e4421e1239f315f">&#9670;&nbsp;</a></span>create() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1Process.html">Process</a> winapi::Process::create </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a> &amp;&#160;</td>
+ <td class="paramname"><em>cmd_line</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Create a new process using the given command line. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00245">245</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a16be6c3dc62d500ca8924b359e5193cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a16be6c3dc62d500ca8924b359e5193cc">&#9670;&nbsp;</a></span>create() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1Process.html">Process</a> winapi::Process::create </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a> &amp;&#160;</td>
+ <td class="paramname"><em>cmd_line</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structwinapi_1_1process_1_1IO.html">process::IO</a>&#160;</td>
+ <td class="paramname"><em>io</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Create a new process using the given command line and IO settings. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00250">250</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<a id="aa9f7cbc9b0e5530f0746606aacc5584e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa9f7cbc9b0e5530f0746606aacc5584e">&#9670;&nbsp;</a></span>shell() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1Process.html">Process</a> winapi::Process::shell </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structwinapi_1_1ShellParameters.html">ShellParameters</a> &amp;&#160;</td>
+ <td class="paramname"><em>params</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Create a new shell process using <a class="el" href="structwinapi_1_1ShellParameters.html" title="Process parameters for Process::shell().">ShellParameters</a>. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00256">256</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a24e1cbd68bc2dda73220b840979a84b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a24e1cbd68bc2dda73220b840979a84b0">&#9670;&nbsp;</a></span>shell() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1Process.html">Process</a> winapi::Process::shell </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a> &amp;&#160;</td>
+ <td class="paramname"><em>cmd_line</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Create a new shell process using the given command line. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00260">260</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a4edc58e78ee81e5531af34fc4f806e24"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4edc58e78ee81e5531af34fc4f806e24">&#9670;&nbsp;</a></span>current()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1Process.html">Process</a> winapi::Process::current </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Open the current process. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00265">265</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a48964bbb7968bd7b6796e8a3306d58d9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a48964bbb7968bd7b6796e8a3306d58d9">&#9670;&nbsp;</a></span>open()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1Process.html">Process</a> winapi::Process::open </td>
+ <td>(</td>
+ <td class="paramtype">ID&#160;</td>
+ <td class="paramname"><em>id</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DWORD&#160;</td>
+ <td class="paramname"><em>permissions</em> = <code><a class="el" href="classwinapi_1_1Process.html#a4fffc3755642f3db56902106f1b96040">default_permissions</a>()</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Open an existing process. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">id</td><td><a class="el" href="classwinapi_1_1Process.html" title="Create a new process or open an existing process.">Process</a> ID. </td></tr>
+ <tr><td class="paramname">permissions</td><td>Required permissions. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00269">269</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<a id="af9d748078299957519ee67fd7f1e49b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af9d748078299957519ee67fd7f1e49b3">&#9670;&nbsp;</a></span>open_r()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1Process.html">Process</a> winapi::Process::open_r </td>
+ <td>(</td>
+ <td class="paramtype">ID&#160;</td>
+ <td class="paramname"><em>id</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Open an existing process with read permissions. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00273">273</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a4fffc3755642f3db56902106f1b96040"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4fffc3755642f3db56902106f1b96040">&#9670;&nbsp;</a></span>default_permissions()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">DWORD winapi::Process::default_permissions </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Permissions that allow to query process's status. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00277">277</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a4fc3ed404c1cf67dabb7867d0c9f638c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4fc3ed404c1cf67dabb7867d0c9f638c">&#9670;&nbsp;</a></span>read_permissions()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">DWORD winapi::Process::read_permissions </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Permissions that allows to read process's memory. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00281">281</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<a id="aa44a8ca82178dfedd68865e4e47f7584"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa44a8ca82178dfedd68865e4e47f7584">&#9670;&nbsp;</a></span>get_id()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">ID winapi::Process::get_id </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Get this process's ID. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8hpp_source.html#l00087">87</a> of file <a class="el" href="process_8hpp_source.html">process.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a1b65a0f6dc25c1810161f2c5c9648249"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1b65a0f6dc25c1810161f2c5c9648249">&#9670;&nbsp;</a></span>get_handle()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">const <a class="el" href="classwinapi_1_1Handle.html">Handle</a>&amp; winapi::Process::get_handle </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Get this process's handle. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8hpp_source.html#l00089">89</a> of file <a class="el" href="process_8hpp_source.html">process.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a5b02393edb57bd902e321037133c40eb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5b02393edb57bd902e321037133c40eb">&#9670;&nbsp;</a></span>is_running()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool winapi::Process::is_running </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Check if this process is running (i.e. not terminated). </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00285">285</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a273dcbc8cd69539d0f9fd4d1e09e67a7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a273dcbc8cd69539d0f9fd4d1e09e67a7">&#9670;&nbsp;</a></span>wait()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void winapi::Process::wait </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Wait for the process to terminate. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00301">301</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a155aefb272a151126fe2a65d583be880"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a155aefb272a151126fe2a65d583be880">&#9670;&nbsp;</a></span>terminate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void winapi::Process::terminate </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>ec</em> = <code>0</code></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Make this process terminate with an exit code. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00315">315</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a1aedc4814dd9c154b6e03e572d873755"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1aedc4814dd9c154b6e03e572d873755">&#9670;&nbsp;</a></span>shut_down()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void winapi::Process::shut_down </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>ec</em> = <code>0</code></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Same as calling <a class="el" href="classwinapi_1_1Process.html#a155aefb272a151126fe2a65d583be880">terminate()</a> and <a class="el" href="classwinapi_1_1Process.html#a273dcbc8cd69539d0f9fd4d1e09e67a7">wait()</a>. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00321">321</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a359c11337c7e50370cd5375efa841131"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a359c11337c7e50370cd5375efa841131">&#9670;&nbsp;</a></span>get_exit_code()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int winapi::Process::get_exit_code </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Get terminated process's exit code. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00326">326</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a86cea0dd87e63ef93f6575d601ab31f5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a86cea0dd87e63ef93f6575d601ab31f5">&#9670;&nbsp;</a></span>get_exe_path()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::string winapi::Process::get_exe_path </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Get this process's executable path. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00342">342</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a4ddbc4be71879ea7f91b05ad7f44435c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4ddbc4be71879ea7f91b05ad7f44435c">&#9670;&nbsp;</a></span>get_resource()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structwinapi_1_1Resource.html">Resource</a> winapi::Process::get_resource </td>
+ <td>(</td>
+ <td class="paramtype">uint32_t&#160;</td>
+ <td class="paramname"><em>id</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Get a binary resource from the process's executable. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00370">370</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<a id="ac700bc836a720384bed52a032628aaeb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac700bc836a720384bed52a032628aaeb">&#9670;&nbsp;</a></span>get_resource_string()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::string winapi::Process::get_resource_string </td>
+ <td>(</td>
+ <td class="paramtype">uint32_t&#160;</td>
+ <td class="paramname"><em>id</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Get a string resource from the process's executable. </p><dl class="section return"><dt>Returns</dt><dd>UTF-8 string. </dd></dl>
+
+<p class="definition">Definition at line <a class="el" href="process_8cpp_source.html#l00358">358</a> of file <a class="el" href="process_8cpp_source.html">process.cpp</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>include/winapi/<a class="el" href="process_8hpp_source.html">process.hpp</a></li>
+<li>src/<a class="el" href="process_8cpp_source.html">process.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1SharedMemory-members.html b/classwinapi_1_1SharedMemory-members.html
new file mode 100644
index 0000000..921d82f
--- /dev/null
+++ b/classwinapi_1_1SharedMemory-members.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1SharedMemory.html">SharedMemory</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::SharedMemory Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classwinapi_1_1SharedMemory.html">winapi::SharedMemory</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1SharedMemory.html#a475d4dcdf99d777cb0968d7631cc6f7e">create</a>(const std::string &amp;name, std::size_t nb)</td><td class="entry"><a class="el" href="classwinapi_1_1SharedMemory.html">winapi::SharedMemory</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1SharedMemory.html#ada3f0075608dd1541f54f004e18a4775">get</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1SharedMemory.html">winapi::SharedMemory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1SharedMemory.html#a82eafb0e7c2c6b5af1a7ff8945af2027">open</a>(const std::string &amp;name)</td><td class="entry"><a class="el" href="classwinapi_1_1SharedMemory.html">winapi::SharedMemory</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1SharedMemory.html#a44e75ba35ae3e470fb521f6274991673">ptr</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1SharedMemory.html">winapi::SharedMemory</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1SharedMemory.html b/classwinapi_1_1SharedMemory.html
new file mode 100644
index 0000000..e638368
--- /dev/null
+++ b/classwinapi_1_1SharedMemory.html
@@ -0,0 +1,245 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::SharedMemory Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1SharedMemory.html">SharedMemory</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
+<a href="classwinapi_1_1SharedMemory-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::SharedMemory Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Named shared memory region.
+ <a href="classwinapi_1_1SharedMemory.html#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ada3f0075608dd1541f54f004e18a4775"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1SharedMemory.html#ada3f0075608dd1541f54f004e18a4775">get</a> () const</td></tr>
+<tr class="separator:ada3f0075608dd1541f54f004e18a4775"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44e75ba35ae3e470fb521f6274991673"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1SharedMemory.html#a44e75ba35ae3e470fb521f6274991673">ptr</a> () const</td></tr>
+<tr class="separator:a44e75ba35ae3e470fb521f6274991673"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a475d4dcdf99d777cb0968d7631cc6f7e"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1SharedMemory.html">SharedMemory</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1SharedMemory.html#a475d4dcdf99d777cb0968d7631cc6f7e">create</a> (const std::string &amp;name, std::size_t nb)</td></tr>
+<tr class="separator:a475d4dcdf99d777cb0968d7631cc6f7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a82eafb0e7c2c6b5af1a7ff8945af2027"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1SharedMemory.html">SharedMemory</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1SharedMemory.html#a82eafb0e7c2c6b5af1a7ff8945af2027">open</a> (const std::string &amp;name)</td></tr>
+<tr class="separator:a82eafb0e7c2c6b5af1a7ff8945af2027"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Named shared memory region. </p>
+
+<p class="definition">Definition at line <a class="el" href="shmem_8hpp_source.html#l00019">19</a> of file <a class="el" href="shmem_8hpp_source.html">shmem.hpp</a>.</p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="a475d4dcdf99d777cb0968d7631cc6f7e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a475d4dcdf99d777cb0968d7631cc6f7e">&#9670;&nbsp;</a></span>create()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1SharedMemory.html">SharedMemory</a> winapi::SharedMemory::create </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">std::size_t&#160;</td>
+ <td class="paramname"><em>nb</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Creates a shared memory region. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">name</td><td>UTF-8 string. </td></tr>
+ <tr><td class="paramname">nb</td><td>Number of bytes. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="shmem_8cpp_source.html#l00040">40</a> of file <a class="el" href="shmem_8cpp_source.html">shmem.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a82eafb0e7c2c6b5af1a7ff8945af2027"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a82eafb0e7c2c6b5af1a7ff8945af2027">&#9670;&nbsp;</a></span>open()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1SharedMemory.html">SharedMemory</a> winapi::SharedMemory::open </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>name</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Opens a shared memory region. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">name</td><td>UTF-8 string. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="shmem_8cpp_source.html#l00059">59</a> of file <a class="el" href="shmem_8cpp_source.html">shmem.cpp</a>.</p>
+
+</div>
+</div>
+<a id="ada3f0075608dd1541f54f004e18a4775"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ada3f0075608dd1541f54f004e18a4775">&#9670;&nbsp;</a></span>get()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* winapi::SharedMemory::get </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Get pointer to the data. </p>
+
+<p class="definition">Definition at line <a class="el" href="shmem_8hpp_source.html#l00034">34</a> of file <a class="el" href="shmem_8hpp_source.html">shmem.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a44e75ba35ae3e470fb521f6274991673"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a44e75ba35ae3e470fb521f6274991673">&#9670;&nbsp;</a></span>ptr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* winapi::SharedMemory::ptr </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+<p class="definition">Definition at line <a class="el" href="shmem_8hpp_source.html#l00036">36</a> of file <a class="el" href="shmem_8hpp_source.html">shmem.hpp</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>include/winapi/<a class="el" href="shmem_8hpp_source.html">shmem.hpp</a></li>
+<li>src/<a class="el" href="shmem_8cpp_source.html">shmem.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1SharedObject-members.html b/classwinapi_1_1SharedObject-members.html
new file mode 100644
index 0000000..280061b
--- /dev/null
+++ b/classwinapi_1_1SharedObject-members.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1SharedObject.html">SharedObject</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::SharedObject&lt; T &gt; Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AlignedType</b> typedef (defined in <a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1SharedObject.html#acb4ef5283256d7463fe81c8b312b6745">create</a>(const std::string &amp;name, Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classwinapi_1_1SharedObject.html#a85d0943708ab0da78e1a189b1bbbd1eb">get</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1SharedObject.html#a08fda6ddde26e0a10170efaf07232761">open</a>(const std::string &amp;name)</td><td class="entry"><a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator*</b>() const (defined in <a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator-&gt;</b>() const (defined in <a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const SharedObject &amp;other) noexcept=default (defined in <a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="classwinapi_1_1SharedObject.html#a0dfaad2c143d60af8dc6c010a13d513a">ptr</a>() const</td><td class="entry"><a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SharedObject</b>(SharedObject &amp;&amp;other) noexcept=default (defined in <a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>SharedObject</b>(const SharedObject &amp;)=delete (defined in <a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~SharedObject</b>() (defined in <a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1SharedObject.html b/classwinapi_1_1SharedObject.html
new file mode 100644
index 0000000..786f40d
--- /dev/null
+++ b/classwinapi_1_1SharedObject.html
@@ -0,0 +1,279 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::SharedObject&lt; T &gt; Class Template Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1SharedObject.html">SharedObject</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-types">Public Types</a> &#124;
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
+<a href="classwinapi_1_1SharedObject-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::SharedObject&lt; T &gt; Class Template Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Easy way to represent a C++ object as a shared memory region.
+ <a href="classwinapi_1_1SharedObject.html#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a481a8ba345bccaa036f0655473daf0f5"><td class="memItemLeft" align="right" valign="top"><a id="a481a8ba345bccaa036f0655473daf0f5"></a>
+typedef std::aligned_storage&lt; sizeof(T), __alignof(T)&gt;::type&#160;</td><td class="memItemRight" valign="bottom"><b>AlignedType</b></td></tr>
+<tr class="separator:a481a8ba345bccaa036f0655473daf0f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a7548e763d3ba25bc843aec3d0adf37d7"><td class="memItemLeft" align="right" valign="top"><a id="a7548e763d3ba25bc843aec3d0adf37d7"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>SharedObject</b> (<a class="el" href="classwinapi_1_1SharedObject.html">SharedObject</a> &amp;&amp;other) noexcept=default</td></tr>
+<tr class="separator:a7548e763d3ba25bc843aec3d0adf37d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a13aa02b4a7b10419803eeadaaddc6b91"><td class="memItemLeft" align="right" valign="top"><a id="a13aa02b4a7b10419803eeadaaddc6b91"></a>
+<a class="el" href="classwinapi_1_1SharedObject.html">SharedObject</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="classwinapi_1_1SharedObject.html">SharedObject</a> &amp;other) noexcept=default</td></tr>
+<tr class="separator:a13aa02b4a7b10419803eeadaaddc6b91"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3042c30573e1f9c39decc0a316a3173d"><td class="memItemLeft" align="right" valign="top"><a id="a3042c30573e1f9c39decc0a316a3173d"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>SharedObject</b> (const <a class="el" href="classwinapi_1_1SharedObject.html">SharedObject</a> &amp;)=delete</td></tr>
+<tr class="separator:a3042c30573e1f9c39decc0a316a3173d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0dfaad2c143d60af8dc6c010a13d513a"><td class="memItemLeft" align="right" valign="top">T *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1SharedObject.html#a0dfaad2c143d60af8dc6c010a13d513a">ptr</a> () const</td></tr>
+<tr class="separator:a0dfaad2c143d60af8dc6c010a13d513a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a85d0943708ab0da78e1a189b1bbbd1eb"><td class="memItemLeft" align="right" valign="top">T &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1SharedObject.html#a85d0943708ab0da78e1a189b1bbbd1eb">get</a> () const</td></tr>
+<tr class="separator:a85d0943708ab0da78e1a189b1bbbd1eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa8b94a969eb4db7998c059d27e3f6ff8"><td class="memItemLeft" align="right" valign="top"><a id="aa8b94a969eb4db7998c059d27e3f6ff8"></a>
+T *&#160;</td><td class="memItemRight" valign="bottom"><b>operator-&gt;</b> () const</td></tr>
+<tr class="separator:aa8b94a969eb4db7998c059d27e3f6ff8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9a2b1d0f607e3109e47c4f147d5b85bd"><td class="memItemLeft" align="right" valign="top"><a id="a9a2b1d0f607e3109e47c4f147d5b85bd"></a>
+T &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator*</b> () const</td></tr>
+<tr class="separator:a9a2b1d0f607e3109e47c4f147d5b85bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:acb4ef5283256d7463fe81c8b312b6745"><td class="memTemplParams" colspan="2">template&lt;typename... Args&gt; </td></tr>
+<tr class="memitem:acb4ef5283256d7463fe81c8b312b6745"><td class="memTemplItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1SharedObject.html">SharedObject</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classwinapi_1_1SharedObject.html#acb4ef5283256d7463fe81c8b312b6745">create</a> (const std::string &amp;name, Args &amp;&amp;... args)</td></tr>
+<tr class="separator:acb4ef5283256d7463fe81c8b312b6745"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a08fda6ddde26e0a10170efaf07232761"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classwinapi_1_1SharedObject.html">SharedObject</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1SharedObject.html#a08fda6ddde26e0a10170efaf07232761">open</a> (const std::string &amp;name)</td></tr>
+<tr class="separator:a08fda6ddde26e0a10170efaf07232761"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><h3>template&lt;typename T&gt;<br />
+class winapi::SharedObject&lt; T &gt;</h3>
+
+<p>Easy way to represent a C++ object as a shared memory region. </p>
+
+<p class="definition">Definition at line <a class="el" href="shmem_8hpp_source.html#l00053">53</a> of file <a class="el" href="shmem_8hpp_source.html">shmem.hpp</a>.</p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="acb4ef5283256d7463fe81c8b312b6745"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acb4ef5283256d7463fe81c8b312b6745">&#9670;&nbsp;</a></span>create()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+<div class="memtemplate">
+template&lt;typename... Args&gt; </div>
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classwinapi_1_1SharedObject.html">SharedObject</a> <a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject</a>&lt; T &gt;::create </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Args &amp;&amp;...&#160;</td>
+ <td class="paramname"><em>args</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Create the object &amp; construct a shared memory region to store it. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">name</td><td>UTF-8 string, name of the shared memory region. </td></tr>
+ <tr><td class="paramname">args</td><td>Arguments to construct the object. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="shmem_8hpp_source.html#l00063">63</a> of file <a class="el" href="shmem_8hpp_source.html">shmem.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a08fda6ddde26e0a10170efaf07232761"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a08fda6ddde26e0a10170efaf07232761">&#9670;&nbsp;</a></span>open()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="classwinapi_1_1SharedObject.html">SharedObject</a> <a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject</a>&lt; T &gt;::open </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>name</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Open a shared memory region that stores the object. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">name</td><td>UTF-8 string, name of the shared memory region. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="shmem_8hpp_source.html#l00074">74</a> of file <a class="el" href="shmem_8hpp_source.html">shmem.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a0dfaad2c143d60af8dc6c010a13d513a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0dfaad2c143d60af8dc6c010a13d513a">&#9670;&nbsp;</a></span>ptr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">T* <a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject</a>&lt; T &gt;::ptr </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Get pointer to the object. </p>
+
+<p class="definition">Definition at line <a class="el" href="shmem_8hpp_source.html#l00090">90</a> of file <a class="el" href="shmem_8hpp_source.html">shmem.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a85d0943708ab0da78e1a189b1bbbd1eb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a85d0943708ab0da78e1a189b1bbbd1eb">&#9670;&nbsp;</a></span>get()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">T&amp; <a class="el" href="classwinapi_1_1SharedObject.html">winapi::SharedObject</a>&lt; T &gt;::get </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Get reference to the object. </p>
+
+<p class="definition">Definition at line <a class="el" href="shmem_8hpp_source.html#l00092">92</a> of file <a class="el" href="shmem_8hpp_source.html">shmem.hpp</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>include/winapi/<a class="el" href="shmem_8hpp_source.html">shmem.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1Sid-members.html b/classwinapi_1_1Sid-members.html
new file mode 100644
index 0000000..eab5337
--- /dev/null
+++ b/classwinapi_1_1Sid-members.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1Sid.html">Sid</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::Sid Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classwinapi_1_1Sid.html">winapi::Sid</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>builtin_administrators</b>() (defined in <a class="el" href="classwinapi_1_1Sid.html">winapi::Sid</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Sid.html">winapi::Sid</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Impl</b> typedef (defined in <a class="el" href="classwinapi_1_1Sid.html">winapi::Sid</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Sid.html">winapi::Sid</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>MAX_SID_SIZE</b> (defined in <a class="el" href="classwinapi_1_1Sid.html">winapi::Sid</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Sid.html">winapi::Sid</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator const SID &amp;</b>() const (defined in <a class="el" href="classwinapi_1_1Sid.html">winapi::Sid</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Sid.html">winapi::Sid</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator SID &amp;</b>() (defined in <a class="el" href="classwinapi_1_1Sid.html">winapi::Sid</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Sid.html">winapi::Sid</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Sid</b>(const Buffer &amp;buffer) (defined in <a class="el" href="classwinapi_1_1Sid.html">winapi::Sid</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Sid.html">winapi::Sid</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>to_string</b>() const (defined in <a class="el" href="classwinapi_1_1Sid.html">winapi::Sid</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Sid.html">winapi::Sid</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>well_known</b>(WELL_KNOWN_SID_TYPE type) (defined in <a class="el" href="classwinapi_1_1Sid.html">winapi::Sid</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1Sid.html">winapi::Sid</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1Sid.html b/classwinapi_1_1Sid.html
new file mode 100644
index 0000000..cdfba00
--- /dev/null
+++ b/classwinapi_1_1Sid.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::Sid Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1Sid.html">Sid</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-types">Public Types</a> &#124;
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
+<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
+<a href="classwinapi_1_1Sid-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::Sid Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a5046e38e6f2a0970dbf30515eec74f19"><td class="memItemLeft" align="right" valign="top"><a id="a5046e38e6f2a0970dbf30515eec74f19"></a>
+typedef SID&#160;</td><td class="memItemRight" valign="bottom"><b>Impl</b></td></tr>
+<tr class="separator:a5046e38e6f2a0970dbf30515eec74f19"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a0f566d428bbda566cceb78e416f5e444"><td class="memItemLeft" align="right" valign="top"><a id="a0f566d428bbda566cceb78e416f5e444"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Sid</b> (const <a class="el" href="classwinapi_1_1Buffer.html">Buffer</a> &amp;buffer)</td></tr>
+<tr class="separator:a0f566d428bbda566cceb78e416f5e444"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8d8a04ff3b137eea572dfd01c9ef7e49"><td class="memItemLeft" align="right" valign="top"><a id="a8d8a04ff3b137eea572dfd01c9ef7e49"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>operator SID &amp;</b> ()</td></tr>
+<tr class="separator:a8d8a04ff3b137eea572dfd01c9ef7e49"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afe72521f9eac9dfc35a37e8cc657ec31"><td class="memItemLeft" align="right" valign="top"><a id="afe72521f9eac9dfc35a37e8cc657ec31"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>operator const SID &amp;</b> () const</td></tr>
+<tr class="separator:afe72521f9eac9dfc35a37e8cc657ec31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:add27aaac6ebdf950c968016f5b3bb3a9"><td class="memItemLeft" align="right" valign="top"><a id="add27aaac6ebdf950c968016f5b3bb3a9"></a>
+std::string&#160;</td><td class="memItemRight" valign="bottom"><b>to_string</b> () const</td></tr>
+<tr class="separator:add27aaac6ebdf950c968016f5b3bb3a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:a64f3631a2ec817d45d956c53126fbf30"><td class="memItemLeft" align="right" valign="top"><a id="a64f3631a2ec817d45d956c53126fbf30"></a>
+static <a class="el" href="classwinapi_1_1Sid.html">Sid</a>&#160;</td><td class="memItemRight" valign="bottom"><b>well_known</b> (WELL_KNOWN_SID_TYPE type)</td></tr>
+<tr class="separator:a64f3631a2ec817d45d956c53126fbf30"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0b6bd1cb1f4c01aa30ff897a64f641da"><td class="memItemLeft" align="right" valign="top"><a id="a0b6bd1cb1f4c01aa30ff897a64f641da"></a>
+static <a class="el" href="classwinapi_1_1Sid.html">Sid</a>&#160;</td><td class="memItemRight" valign="bottom"><b>builtin_administrators</b> ()</td></tr>
+<tr class="separator:a0b6bd1cb1f4c01aa30ff897a64f641da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a1484aaa8826599ae7832129a030b253c"><td class="memItemLeft" align="right" valign="top"><a id="a1484aaa8826599ae7832129a030b253c"></a>
+static constexpr std::size_t&#160;</td><td class="memItemRight" valign="bottom"><b>MAX_SID_SIZE</b> = SECURITY_MAX_SID_SIZE</td></tr>
+<tr class="separator:a1484aaa8826599ae7832129a030b253c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p class="definition">Definition at line <a class="el" href="sid_8hpp_source.html#l00017">17</a> of file <a class="el" href="sid_8hpp_source.html">sid.hpp</a>.</p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>include/winapi/<a class="el" href="sid_8hpp_source.html">sid.hpp</a></li>
+<li>src/<a class="el" href="sid_8cpp_source.html">sid.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1error_1_1CategoryWindows-members.html b/classwinapi_1_1error_1_1CategoryWindows-members.html
new file mode 100644
index 0000000..cbc7e8b
--- /dev/null
+++ b/classwinapi_1_1error_1_1CategoryWindows-members.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><b>error</b></li><li class="navelem"><a class="el" href="classwinapi_1_1error_1_1CategoryWindows.html">CategoryWindows</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::error::CategoryWindows Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classwinapi_1_1error_1_1CategoryWindows.html">winapi::error::CategoryWindows</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CategoryWindows</b>()=default (defined in <a class="el" href="classwinapi_1_1error_1_1CategoryWindows.html">winapi::error::CategoryWindows</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1error_1_1CategoryWindows.html">winapi::error::CategoryWindows</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>message</b>(int32_t) const (defined in <a class="el" href="classwinapi_1_1error_1_1CategoryWindows.html">winapi::error::CategoryWindows</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1error_1_1CategoryWindows.html">winapi::error::CategoryWindows</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>name</b>() const noexcept (defined in <a class="el" href="classwinapi_1_1error_1_1CategoryWindows.html">winapi::error::CategoryWindows</a>)</td><td class="entry"><a class="el" href="classwinapi_1_1error_1_1CategoryWindows.html">winapi::error::CategoryWindows</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1error_1_1CategoryWindows.html b/classwinapi_1_1error_1_1CategoryWindows.html
new file mode 100644
index 0000000..6df65d2
--- /dev/null
+++ b/classwinapi_1_1error_1_1CategoryWindows.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::error::CategoryWindows Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><b>error</b></li><li class="navelem"><a class="el" href="classwinapi_1_1error_1_1CategoryWindows.html">CategoryWindows</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="classwinapi_1_1error_1_1CategoryWindows-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::error::CategoryWindows Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for winapi::error::CategoryWindows:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classwinapi_1_1error_1_1CategoryWindows.png" alt=""/>
+ </div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:abb348ee3f91fe704ce940f75e2f6241c"><td class="memItemLeft" align="right" valign="top"><a id="abb348ee3f91fe704ce940f75e2f6241c"></a>
+const char *&#160;</td><td class="memItemRight" valign="bottom"><b>name</b> () const noexcept</td></tr>
+<tr class="separator:abb348ee3f91fe704ce940f75e2f6241c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab94d207bddda426e3e8330233864f5df"><td class="memItemLeft" align="right" valign="top"><a id="ab94d207bddda426e3e8330233864f5df"></a>
+std::string&#160;</td><td class="memItemRight" valign="bottom"><b>message</b> (int32_t) const</td></tr>
+<tr class="separator:ab94d207bddda426e3e8330233864f5df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p class="definition">Definition at line <a class="el" href="error_8hpp_source.html#l00024">24</a> of file <a class="el" href="error_8hpp_source.html">error.hpp</a>.</p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>include/winapi/<a class="el" href="error_8hpp_source.html">error.hpp</a></li>
+<li>src/<a class="el" href="error_8cpp_source.html">error.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/classwinapi_1_1error_1_1CategoryWindows.png b/classwinapi_1_1error_1_1CategoryWindows.png
new file mode 100644
index 0000000..d69f8f5
--- /dev/null
+++ b/classwinapi_1_1error_1_1CategoryWindows.png
Binary files differ
diff --git a/closed.png b/closed.png
new file mode 100644
index 0000000..98cc2c9
--- /dev/null
+++ b/closed.png
Binary files differ
diff --git a/cmd__line_8cpp_source.html b/cmd__line_8cpp_source.html
new file mode 100644
index 0000000..6192ded
--- /dev/null
+++ b/cmd__line_8cpp_source.html
@@ -0,0 +1,249 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: src/cmd_line.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">cmd_line.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &lt;winapi/cmd_line.hpp&gt;</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="error_8hpp.html">winapi/error.hpp</a>&gt;</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;winapi/utf8.hpp&gt;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;winapi/utils.hpp&gt;</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; </div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;boost/algorithm/string.hpp&gt;</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// clang-format off</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;windows.h&gt;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;shellapi.h&gt;</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// clang-format on</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">namespace </span>{</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;std::vector&lt;std::string&gt; narrow_all(<span class="keywordtype">int</span> argc, <span class="keywordtype">wchar_t</span>** argv) {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; std::vector&lt;std::string&gt; utf;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; utf.reserve(argc);</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; argc; ++i)</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; utf.emplace_back(narrow(argv[i]));</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">return</span> utf;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;}</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;CommandLine do_parse(std::wstring src) {</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; boost::trim(src);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">if</span> (src.empty()) {</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">throw</span> std::runtime_error{<span class="stringliteral">&quot;Command line cannot be an empty string&quot;</span>};</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; }</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">int</span> argc = 0;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; std::unique_ptr&lt;wchar_t*, LocalDelete&gt; argv{::CommandLineToArgvW(src.c_str(), &amp;argc)};</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">if</span> (argv.get() == NULL) {</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;CommandLineToArgvW&quot;</span>);</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">if</span> (argc == 0) {</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">throw</span> std::runtime_error{<span class="stringliteral">&quot;Command line must contain at least one token&quot;</span>};</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> CommandLine{narrow_all(argc, argv.get())};</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;std::string split_argv0(std::vector&lt;std::string&gt;&amp; argv) {</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">if</span> (argv.empty()) {</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">throw</span> std::range_error{<span class="stringliteral">&quot;argv must contain at least one element&quot;</span>};</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">auto</span> argv0 = argv[0];</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; argv.erase(argv.begin());</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> argv0;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;}</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;std::vector&lt;std::string&gt; escape_all(<span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; xs) {</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; std::vector&lt;std::string&gt; escaped;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; escaped.reserve(xs.size());</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; x : xs)</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; escaped.emplace_back(CommandLine::escape(x));</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">return</span> escaped;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;}</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;} <span class="comment">// namespace</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
+<div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classwinapi_1_1CommandLine.html#aa07ee7bf5d61658f33e4a7571205ae5c"> 75</a></span>&#160;<a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a> <a class="code" href="classwinapi_1_1CommandLine.html#aa07ee7bf5d61658f33e4a7571205ae5c">CommandLine::query</a>() {</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">return</span> do_parse(::GetCommandLineW());</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;}</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classwinapi_1_1CommandLine.html#aabafd2d1d923c30c3da372909857e87e"> 79</a></span>&#160;<a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a> <a class="code" href="classwinapi_1_1CommandLine.html#aabafd2d1d923c30c3da372909857e87e">CommandLine::parse</a>(<span class="keyword">const</span> std::string&amp; src) {</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">return</span> do_parse(widen(src));</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;}</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classwinapi_1_1CommandLine.html#a7a7bc2a7461f2f275a12c9fda23d312d"> 83</a></span>&#160;<a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a> <a class="code" href="classwinapi_1_1CommandLine.html#a7a7bc2a7461f2f275a12c9fda23d312d">CommandLine::from_main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">wchar_t</span>* argv[]) {</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (argc &lt; 1)</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">throw</span> std::range_error{<span class="stringliteral">&quot;argc must be a positive number&quot;</span>};</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a>{narrow_all(argc, argv)};</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;}</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classwinapi_1_1CommandLine.html#a69e5c796f37637e39b2e1d7d95ba922a"> 89</a></span>&#160;<a class="code" href="classwinapi_1_1CommandLine.html#ad48bb83391e84db28c3c3c6bdf283003">CommandLine::CommandLine</a>(std::vector&lt;std::string&gt; argv) : m_args{std::move(argv)} {</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; m_argv0 = split_argv0(m_args);</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;}</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;std::string CommandLine::escape(<span class="keyword">const</span> std::string&amp; arg) {</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; std::ostringstream safe;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; safe &lt;&lt; <span class="charliteral">&#39;&quot;&#39;</span>;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = arg.cbegin(); it != arg.cend(); ++it) {</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; std::size_t numof_backslashes = 0;</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">for</span> (; it != arg.cend() &amp;&amp; *it == <span class="charliteral">&#39;\\&#39;</span>; ++it)</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; ++numof_backslashes;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">if</span> (it == arg.cend()) {</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; safe &lt;&lt; std::string(2 * numof_backslashes, <span class="charliteral">&#39;\\&#39;</span>);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; }</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">switch</span> (*it) {</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">case</span> L<span class="charliteral">&#39;&quot;&#39;</span>:</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; safe &lt;&lt; std::string(2 * numof_backslashes + 1, <span class="charliteral">&#39;\\&#39;</span>);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; safe &lt;&lt; std::string(numof_backslashes, <span class="charliteral">&#39;\\&#39;</span>);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; safe &lt;&lt; *it;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; safe &lt;&lt; <span class="charliteral">&#39;&quot;&#39;</span>;</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">return</span> safe.str();</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;}</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; </div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;std::string CommandLine::escape_cmd(<span class="keyword">const</span> std::string&amp; arg) {</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">static</span> constexpr <span class="keyword">auto</span> escape_symbol = <span class="charliteral">&#39;^&#39;</span>;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> std::string dangerous_symbols{<span class="stringliteral">&quot;^!\&quot;%&amp;()&lt;&gt;|&quot;</span>};</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keyword">auto</span> safe = escape(arg);</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> danger : dangerous_symbols) {</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; std::ostringstream replacement;</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; replacement &lt;&lt; escape_symbol &lt;&lt; danger;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; boost::replace_all(safe, std::string{danger}, replacement.str());</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; }</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">return</span> safe;</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;}</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; </div>
+<div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="classwinapi_1_1CommandLine.html#ac47e738f255a85b3e0605d40c0124b24"> 138</a></span>&#160;std::string <a class="code" href="classwinapi_1_1CommandLine.html#ac47e738f255a85b3e0605d40c0124b24">CommandLine::to_string</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">return</span> boost::algorithm::join(escape_argv(), std::string{token_sep()});</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;}</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; </div>
+<div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="classwinapi_1_1CommandLine.html#afb35d8d6d2b8b66bd6f21d0adc37017f"> 142</a></span>&#160;std::string <a class="code" href="classwinapi_1_1CommandLine.html#afb35d8d6d2b8b66bd6f21d0adc37017f">CommandLine::args_to_string</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">return</span> boost::algorithm::join(escape_args(), std::string{token_sep()});</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;}</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; </div>
+<div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classwinapi_1_1CommandLine.html#ac21d30a214f529f80b91186e9724cf41"> 146</a></span>&#160;std::vector&lt;std::string&gt; <a class="code" href="classwinapi_1_1CommandLine.html#ac21d30a214f529f80b91186e9724cf41">CommandLine::get_argv</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keyword">auto</span> argv = <a class="code" href="classwinapi_1_1CommandLine.html#aef5ea9b427d975af8e64948802b54af4">get_args</a>();</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; argv.emplace(argv.begin(), <a class="code" href="classwinapi_1_1CommandLine.html#a8f75a5f374397c1c1dcc4900bf44ee32">get_argv0</a>());</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">return</span> argv;</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;}</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; </div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;std::vector&lt;std::string&gt; CommandLine::escape_args()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">return</span> escape_all(<a class="code" href="classwinapi_1_1CommandLine.html#aef5ea9b427d975af8e64948802b54af4">get_args</a>());</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;}</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; </div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;std::vector&lt;std::string&gt; CommandLine::escape_argv()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">return</span> escape_all(<a class="code" href="classwinapi_1_1CommandLine.html#ac21d30a214f529f80b91186e9724cf41">get_argv</a>());</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;}</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html"><div class="ttname"><a href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></div><div class="ttdoc">Command line for the current process or for launching new processes.</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8hpp_source.html#l00021">cmd_line.hpp:21</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_a7a7bc2a7461f2f275a12c9fda23d312d"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#a7a7bc2a7461f2f275a12c9fda23d312d">winapi::CommandLine::from_main</a></div><div class="ttdeci">static CommandLine from_main(int argc, wchar_t *argv[])</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8cpp_source.html#l00083">cmd_line.cpp:83</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_a8f75a5f374397c1c1dcc4900bf44ee32"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#a8f75a5f374397c1c1dcc4900bf44ee32">winapi::CommandLine::get_argv0</a></div><div class="ttdeci">std::string get_argv0() const</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8hpp_source.html#l00087">cmd_line.hpp:87</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_aa07ee7bf5d61658f33e4a7571205ae5c"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#aa07ee7bf5d61658f33e4a7571205ae5c">winapi::CommandLine::query</a></div><div class="ttdeci">static CommandLine query()</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8cpp_source.html#l00075">cmd_line.cpp:75</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_aabafd2d1d923c30c3da372909857e87e"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#aabafd2d1d923c30c3da372909857e87e">winapi::CommandLine::parse</a></div><div class="ttdeci">static CommandLine parse(const std::string &amp;src)</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8cpp_source.html#l00079">cmd_line.cpp:79</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_ac21d30a214f529f80b91186e9724cf41"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#ac21d30a214f529f80b91186e9724cf41">winapi::CommandLine::get_argv</a></div><div class="ttdeci">std::vector&lt; std::string &gt; get_argv() const</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8cpp_source.html#l00146">cmd_line.cpp:146</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_ac47e738f255a85b3e0605d40c0124b24"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#ac47e738f255a85b3e0605d40c0124b24">winapi::CommandLine::to_string</a></div><div class="ttdeci">std::string to_string() const</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8cpp_source.html#l00138">cmd_line.cpp:138</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_ad48bb83391e84db28c3c3c6bdf283003"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#ad48bb83391e84db28c3c3c6bdf283003">winapi::CommandLine::CommandLine</a></div><div class="ttdeci">CommandLine()=default</div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_aef5ea9b427d975af8e64948802b54af4"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#aef5ea9b427d975af8e64948802b54af4">winapi::CommandLine::get_args</a></div><div class="ttdeci">const std::vector&lt; std::string &gt; &amp; get_args() const</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8hpp_source.html#l00096">cmd_line.hpp:96</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_afb35d8d6d2b8b66bd6f21d0adc37017f"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#afb35d8d6d2b8b66bd6f21d0adc37017f">winapi::CommandLine::args_to_string</a></div><div class="ttdeci">std::string args_to_string() const</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8cpp_source.html#l00142">cmd_line.cpp:142</a></div></div>
+<div class="ttc" id="aerror_8hpp_html"><div class="ttname"><a href="error_8hpp.html">error.hpp</a></div><div class="ttdoc">Make std::system_error work with GetLastError().</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/cmd__line_8hpp_source.html b/cmd__line_8hpp_source.html
new file mode 100644
index 0000000..0daf3a8
--- /dev/null
+++ b/cmd__line_8hpp_source.html
@@ -0,0 +1,152 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: include/winapi/cmd_line.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1714771db42b7b5a0cd2ebe6e9736ed.html">winapi</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">cmd_line.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="classwinapi_1_1CommandLine.html"> 21</a></span>&#160;<span class="keyword">class </span><a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a> {</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a> <a class="code" href="classwinapi_1_1CommandLine.html#aa07ee7bf5d61658f33e4a7571205ae5c">query</a>();</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a> <a class="code" href="classwinapi_1_1CommandLine.html#aabafd2d1d923c30c3da372909857e87e">parse</a>(<span class="keyword">const</span> std::string&amp; src);</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a> <a class="code" href="classwinapi_1_1CommandLine.html#a7a7bc2a7461f2f275a12c9fda23d312d">from_main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">wchar_t</span>* argv[]);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="classwinapi_1_1CommandLine.html#ad48bb83391e84db28c3c3c6bdf283003"> 43</a></span>&#160; <a class="code" href="classwinapi_1_1CommandLine.html#ad48bb83391e84db28c3c3c6bdf283003">CommandLine</a>() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classwinapi_1_1CommandLine.html#a90b5d19b9cb4bbad2515c97bd74731c8"> 50</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classwinapi_1_1CommandLine.html#a90b5d19b9cb4bbad2515c97bd74731c8">CommandLine</a>(<span class="keyword">const</span> std::string&amp; argv0, <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; args = {})</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; : m_argv0{argv0}, m_args{args} {}</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
+<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classwinapi_1_1CommandLine.html#ac0d211d82fd55cba2055a9679272a182"> 58</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classwinapi_1_1CommandLine.html#ac0d211d82fd55cba2055a9679272a182">CommandLine</a>(std::string&amp;&amp; argv0, std::vector&lt;std::string&gt;&amp;&amp; args = {})</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; : m_argv0{std::move(argv0)}, m_args{std::move(args)} {}</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classwinapi_1_1CommandLine.html#ad48bb83391e84db28c3c3c6bdf283003">CommandLine</a>(std::vector&lt;std::string&gt; argv);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">static</span> std::string escape(<span class="keyword">const</span> std::string&amp;);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">static</span> std::string escape_cmd(<span class="keyword">const</span> std::string&amp;);</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; std::string <a class="code" href="classwinapi_1_1CommandLine.html#ac47e738f255a85b3e0605d40c0124b24">to_string</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; std::string <a class="code" href="classwinapi_1_1CommandLine.html#afb35d8d6d2b8b66bd6f21d0adc37017f">args_to_string</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classwinapi_1_1CommandLine.html#a8f75a5f374397c1c1dcc4900bf44ee32"> 87</a></span>&#160; std::string <a class="code" href="classwinapi_1_1CommandLine.html#a8f75a5f374397c1c1dcc4900bf44ee32">get_argv0</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_argv0; }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
+<div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classwinapi_1_1CommandLine.html#ae87fa727498660661753d2d456873033"> 90</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classwinapi_1_1CommandLine.html#ae87fa727498660661753d2d456873033">has_args</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !<a class="code" href="classwinapi_1_1CommandLine.html#aef5ea9b427d975af8e64948802b54af4">get_args</a>().empty(); }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
+<div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classwinapi_1_1CommandLine.html#aef5ea9b427d975af8e64948802b54af4"> 96</a></span>&#160; <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; <a class="code" href="classwinapi_1_1CommandLine.html#aef5ea9b427d975af8e64948802b54af4">get_args</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_args; }</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; std::vector&lt;std::string&gt; <a class="code" href="classwinapi_1_1CommandLine.html#ac21d30a214f529f80b91186e9724cf41">get_argv</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">char</span> token_sep() { <span class="keywordflow">return</span> <span class="charliteral">&#39; &#39;</span>; }</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; std::string escape_argv0()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> escape(<a class="code" href="classwinapi_1_1CommandLine.html#a8f75a5f374397c1c1dcc4900bf44ee32">get_argv0</a>()); }</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; std::vector&lt;std::string&gt; escape_args() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; std::vector&lt;std::string&gt; escape_argv() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; std::string m_argv0;</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; std::vector&lt;std::string&gt; m_args;</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;};</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html"><div class="ttname"><a href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></div><div class="ttdoc">Command line for the current process or for launching new processes.</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8hpp_source.html#l00021">cmd_line.hpp:21</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_a7a7bc2a7461f2f275a12c9fda23d312d"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#a7a7bc2a7461f2f275a12c9fda23d312d">winapi::CommandLine::from_main</a></div><div class="ttdeci">static CommandLine from_main(int argc, wchar_t *argv[])</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8cpp_source.html#l00083">cmd_line.cpp:83</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_a8f75a5f374397c1c1dcc4900bf44ee32"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#a8f75a5f374397c1c1dcc4900bf44ee32">winapi::CommandLine::get_argv0</a></div><div class="ttdeci">std::string get_argv0() const</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8hpp_source.html#l00087">cmd_line.hpp:87</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_a90b5d19b9cb4bbad2515c97bd74731c8"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#a90b5d19b9cb4bbad2515c97bd74731c8">winapi::CommandLine::CommandLine</a></div><div class="ttdeci">CommandLine(const std::string &amp;argv0, const std::vector&lt; std::string &gt; &amp;args={})</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8hpp_source.html#l00050">cmd_line.hpp:50</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_aa07ee7bf5d61658f33e4a7571205ae5c"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#aa07ee7bf5d61658f33e4a7571205ae5c">winapi::CommandLine::query</a></div><div class="ttdeci">static CommandLine query()</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8cpp_source.html#l00075">cmd_line.cpp:75</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_aabafd2d1d923c30c3da372909857e87e"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#aabafd2d1d923c30c3da372909857e87e">winapi::CommandLine::parse</a></div><div class="ttdeci">static CommandLine parse(const std::string &amp;src)</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8cpp_source.html#l00079">cmd_line.cpp:79</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_ac0d211d82fd55cba2055a9679272a182"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#ac0d211d82fd55cba2055a9679272a182">winapi::CommandLine::CommandLine</a></div><div class="ttdeci">CommandLine(std::string &amp;&amp;argv0, std::vector&lt; std::string &gt; &amp;&amp;args={})</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8hpp_source.html#l00058">cmd_line.hpp:58</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_ac21d30a214f529f80b91186e9724cf41"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#ac21d30a214f529f80b91186e9724cf41">winapi::CommandLine::get_argv</a></div><div class="ttdeci">std::vector&lt; std::string &gt; get_argv() const</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8cpp_source.html#l00146">cmd_line.cpp:146</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_ac47e738f255a85b3e0605d40c0124b24"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#ac47e738f255a85b3e0605d40c0124b24">winapi::CommandLine::to_string</a></div><div class="ttdeci">std::string to_string() const</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8cpp_source.html#l00138">cmd_line.cpp:138</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_ad48bb83391e84db28c3c3c6bdf283003"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#ad48bb83391e84db28c3c3c6bdf283003">winapi::CommandLine::CommandLine</a></div><div class="ttdeci">CommandLine()=default</div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_ae87fa727498660661753d2d456873033"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#ae87fa727498660661753d2d456873033">winapi::CommandLine::has_args</a></div><div class="ttdeci">bool has_args() const</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8hpp_source.html#l00090">cmd_line.hpp:90</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_aef5ea9b427d975af8e64948802b54af4"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#aef5ea9b427d975af8e64948802b54af4">winapi::CommandLine::get_args</a></div><div class="ttdeci">const std::vector&lt; std::string &gt; &amp; get_args() const</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8hpp_source.html#l00096">cmd_line.hpp:96</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html_afb35d8d6d2b8b66bd6f21d0adc37017f"><div class="ttname"><a href="classwinapi_1_1CommandLine.html#afb35d8d6d2b8b66bd6f21d0adc37017f">winapi::CommandLine::args_to_string</a></div><div class="ttdeci">std::string args_to_string() const</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8cpp_source.html#l00142">cmd_line.cpp:142</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/dir_68267d1309a1af8e8297ef4c3efbcdba.html
new file mode 100644
index 0000000..36cca7c
--- /dev/null
+++ b/dir_68267d1309a1af8e8297ef4c3efbcdba.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: src Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">src Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/dir_d44c64559bbebec7f509842c48db8b23.html b/dir_d44c64559bbebec7f509842c48db8b23.html
new file mode 100644
index 0000000..90554ff
--- /dev/null
+++ b/dir_d44c64559bbebec7f509842c48db8b23.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: include Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">include Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/dir_f1714771db42b7b5a0cd2ebe6e9736ed.html b/dir_f1714771db42b7b5a0cd2ebe6e9736ed.html
new file mode 100644
index 0000000..1734f7a
--- /dev/null
+++ b/dir_f1714771db42b7b5a0cd2ebe6e9736ed.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: include/winapi Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1714771db42b7b5a0cd2ebe6e9736ed.html">winapi</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:error_8hpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="error_8hpp.html">error.hpp</a> <a href="error_8hpp_source.html">[code]</a></td></tr>
+<tr class="memdesc:error_8hpp"><td class="mdescLeft">&#160;</td><td class="mdescRight">Make <code>std::system_error</code> work with <code>GetLastError()</code>. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc.png b/doc.png
new file mode 100644
index 0000000..17edabf
--- /dev/null
+++ b/doc.png
Binary files differ
diff --git a/doxygen.css b/doxygen.css
new file mode 100644
index 0000000..ffbff02
--- /dev/null
+++ b/doxygen.css
@@ -0,0 +1,1793 @@
+/* The standard CSS for doxygen 1.9.1 */
+
+body, table, div, p, dl {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+p.reference, p.definition {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+ font-size: 150%;
+}
+
+.title {
+ font: 400 14px/28px Roboto,sans-serif;
+ font-size: 150%;
+ font-weight: bold;
+ margin: 10px 2px;
+}
+
+h2.groupheader {
+ border-bottom: 1px solid #879ECB;
+ color: #354C7B;
+ font-size: 150%;
+ font-weight: normal;
+ margin-top: 1.75em;
+ padding-top: 8px;
+ padding-bottom: 4px;
+ width: 100%;
+}
+
+h3.groupheader {
+ font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ -webkit-transition: text-shadow 0.5s linear;
+ -moz-transition: text-shadow 0.5s linear;
+ -ms-transition: text-shadow 0.5s linear;
+ -o-transition: text-shadow 0.5s linear;
+ transition: text-shadow 0.5s linear;
+ margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+ text-shadow: 0 0 15px cyan;
+}
+
+dt {
+ font-weight: bold;
+}
+
+ul.multicol {
+ -moz-column-gap: 1em;
+ -webkit-column-gap: 1em;
+ column-gap: 1em;
+ -moz-column-count: 3;
+ -webkit-column-count: 3;
+ column-count: 3;
+}
+
+p.startli, p.startdd {
+ margin-top: 2px;
+}
+
+th p.starttd, th p.intertd, th p.endtd {
+ font-size: 100%;
+ font-weight: 700;
+}
+
+p.starttd {
+ margin-top: 0px;
+}
+
+p.endli {
+ margin-bottom: 0px;
+}
+
+p.enddd {
+ margin-bottom: 4px;
+}
+
+p.endtd {
+ margin-bottom: 2px;
+}
+
+p.interli {
+}
+
+p.interdd {
+}
+
+p.intertd {
+}
+
+/* @end */
+
+caption {
+ font-weight: bold;
+}
+
+span.legend {
+ font-size: 70%;
+ text-align: center;
+}
+
+h3.version {
+ font-size: 90%;
+ text-align: center;
+}
+
+div.navtab {
+ border-right: 1px solid #A3B4D7;
+ padding-right: 15px;
+ text-align: right;
+ line-height: 110%;
+}
+
+div.navtab table {
+ border-spacing: 0;
+}
+
+td.navtab {
+ padding-right: 6px;
+ padding-left: 6px;
+}
+td.navtabHL {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ padding-right: 6px;
+ padding-left: 6px;
+}
+
+td.navtabHL a, td.navtabHL a:visited {
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+a.navtab {
+ font-weight: bold;
+}
+
+div.qindex{
+ text-align: center;
+ width: 100%;
+ line-height: 140%;
+ font-size: 130%;
+ color: #A0A0A0;
+}
+
+dt.alphachar{
+ font-size: 180%;
+ font-weight: bold;
+}
+
+.alphachar a{
+ color: black;
+}
+
+.alphachar a:hover, .alphachar a:visited{
+ text-decoration: none;
+}
+
+.classindex dl {
+ padding: 25px;
+ column-count:1
+}
+
+.classindex dd {
+ display:inline-block;
+ margin-left: 50px;
+ width: 90%;
+ line-height: 1.15em;
+}
+
+.classindex dl.odd {
+ background-color: #F8F9FC;
+}
+
+@media(min-width: 1120px) {
+ .classindex dl {
+ column-count:2
+ }
+}
+
+@media(min-width: 1320px) {
+ .classindex dl {
+ column-count:3
+ }
+}
+
+
+/* @group Link Styling */
+
+a {
+ color: #3D578C;
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: #4665A2;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+.contents a.qindexHL:visited {
+ color: #FFFFFF;
+}
+
+a.el {
+ font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+ color: #4665A2;
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+ color: #4665A2;
+}
+
+/* @end */
+
+dl.el {
+ margin-left: -1cm;
+}
+
+ul {
+ overflow: hidden; /*Fixed: list item bullets overlap floating elements*/
+}
+
+#side-nav ul {
+ overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */
+}
+
+#main-nav ul {
+ overflow: visible; /* reset ul rule for the navigation bar drop down lists */
+}
+
+.fragment {
+ text-align: left;
+ direction: ltr;
+ overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/
+ overflow-y: hidden;
+}
+
+pre.fragment {
+ border: 1px solid #C4CFE5;
+ background-color: #FBFCFD;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
+ font-family: monospace, fixed;
+ font-size: 105%;
+}
+
+div.fragment {
+ padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/
+ margin: 4px 8px 4px 2px;
+ background-color: #FBFCFD;
+ border: 1px solid #C4CFE5;
+}
+
+div.line {
+ font-family: monospace, fixed;
+ font-size: 13px;
+ min-height: 13px;
+ line-height: 1.0;
+ text-wrap: unrestricted;
+ white-space: -moz-pre-wrap; /* Moz */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ white-space: pre-wrap; /* CSS3 */
+ word-wrap: break-word; /* IE 5.5+ */
+ text-indent: -53px;
+ padding-left: 53px;
+ padding-bottom: 0px;
+ margin: 0px;
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+div.line:after {
+ content:"\000A";
+ white-space: pre;
+}
+
+div.line.glow {
+ background-color: cyan;
+ box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+ padding-right: 4px;
+ text-align: right;
+ border-right: 2px solid #0F0;
+ background-color: #E8E8E8;
+ white-space: pre;
+}
+span.lineno a {
+ background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+ background-color: #C8C8C8;
+}
+
+.lineno {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+div.ah, span.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #FFFFFF;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ padding: 0.2em;
+ border: solid thin #333;
+ border-radius: 0.5em;
+ -webkit-border-radius: .5em;
+ -moz-border-radius: .5em;
+ box-shadow: 2px 2px 3px #999;
+ -webkit-box-shadow: 2px 2px 3px #999;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+ background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
+}
+
+div.classindex ul {
+ list-style: none;
+ padding-left: 0;
+}
+
+div.classindex span.ai {
+ display: inline-block;
+}
+
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ font-weight: bold;
+}
+
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+}
+
+body {
+ background-color: white;
+ color: black;
+ margin: 0;
+}
+
+div.contents {
+ margin-top: 10px;
+ margin-left: 12px;
+ margin-right: 8px;
+}
+
+td.indexkey {
+ background-color: #EBEFF6;
+ font-weight: bold;
+ border: 1px solid #C4CFE5;
+ margin: 2px 0px 2px 0;
+ padding: 2px 10px;
+ white-space: nowrap;
+ vertical-align: top;
+}
+
+td.indexvalue {
+ background-color: #EBEFF6;
+ border: 1px solid #C4CFE5;
+ padding: 2px 10px;
+ margin: 2px 0px;
+}
+
+tr.memlist {
+ background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+ text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl, img.inline {
+ vertical-align: middle;
+}
+
+div.center {
+ text-align: center;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0px;
+}
+
+div.center img {
+ border: 0px;
+}
+
+address.footer {
+ text-align: right;
+ padding-right: 12px;
+}
+
+img.footer {
+ border: 0px;
+ vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+ color: #008000
+}
+
+span.keywordtype {
+ color: #604020
+}
+
+span.keywordflow {
+ color: #e08000
+}
+
+span.comment {
+ color: #800000
+}
+
+span.preprocessor {
+ color: #806020
+}
+
+span.stringliteral {
+ color: #002080
+}
+
+span.charliteral {
+ color: #008080
+}
+
+span.vhdldigit {
+ color: #ff00ff
+}
+
+span.vhdlchar {
+ color: #000000
+}
+
+span.vhdlkeyword {
+ color: #700070
+}
+
+span.vhdllogic {
+ color: #ff0000
+}
+
+blockquote {
+ background-color: #F7F8FB;
+ border-left: 2px solid #9CAFD4;
+ margin: 0 24px 0 4px;
+ padding: 0 12px 0 16px;
+}
+
+blockquote.DocNodeRTL {
+ border-left: 0;
+ border-right: 2px solid #9CAFD4;
+ margin: 0 4px 0 24px;
+ padding: 0 16px 0 12px;
+}
+
+/* @end */
+
+/*
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+
+form.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+input.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+ font-size: 75%;
+}
+
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+ background: #EBEFF6;
+ font-weight: bold;
+}
+
+hr {
+ height: 0px;
+ border: none;
+ border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+ height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+ border-spacing: 0px;
+ padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+ background-color: cyan;
+ box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ background-color: #F9FAFC;
+ border: none;
+ margin: 4px;
+ padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+ padding: 0px 8px 4px 8px;
+ color: #555;
+}
+
+.memSeparator {
+ border-bottom: 1px solid #DEE4F0;
+ line-height: 1px;
+ margin: 0px;
+ padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+ white-space: nowrap;
+}
+
+.memItemRight, .memTemplItemRight {
+ width: 100%;
+}
+
+.memTemplParams {
+ color: #4665A2;
+ white-space: nowrap;
+ font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtitle {
+ padding: 8px;
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ margin-bottom: -1px;
+ background-image: url('nav_f.png');
+ background-repeat: repeat-x;
+ background-color: #E2E8F2;
+ line-height: 1.25;
+ font-weight: 300;
+ float:left;
+}
+
+.permalink
+{
+ font-size: 65%;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.memtemplate {
+ font-size: 80%;
+ color: #4665A2;
+ font-weight: normal;
+ margin-left: 9px;
+}
+
+.memnav {
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.mempage {
+ width: 100%;
+}
+
+.memitem {
+ padding: 0;
+ margin-bottom: 10px;
+ margin-right: 5px;
+ -webkit-transition: box-shadow 0.5s linear;
+ -moz-transition: box-shadow 0.5s linear;
+ -ms-transition: box-shadow 0.5s linear;
+ -o-transition: box-shadow 0.5s linear;
+ transition: box-shadow 0.5s linear;
+ display: table !important;
+ width: 100%;
+}
+
+.memitem.glow {
+ box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+ font-weight: 400;
+ margin-left: 6px;
+}
+
+.memname td {
+ vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 0px 6px 0px;
+ color: #253555;
+ font-weight: bold;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ background-color: #DFE5F1;
+ /* opera specific markup */
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ border-top-right-radius: 4px;
+ /* firefox specific markup */
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ -moz-border-radius-topright: 4px;
+ /* webkit specific markup */
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ -webkit-border-top-right-radius: 4px;
+
+}
+
+.overload {
+ font-family: "courier new",courier,monospace;
+ font-size: 65%;
+}
+
+.memdoc, dl.reflist dd {
+ border-bottom: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 10px 2px 10px;
+ background-color: #FBFCFD;
+ border-top-width: 0;
+ background-image:url('nav_g.png');
+ background-repeat:repeat-x;
+ background-color: #FFFFFF;
+ /* opera specific markup */
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ /* firefox specific markup */
+ -moz-border-radius-bottomleft: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ /* webkit specific markup */
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+ padding: 5px;
+}
+
+dl.reflist dd {
+ margin: 0px 0px 10px 0px;
+ padding: 5px;
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #602020;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+.paramname code {
+ line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname {
+ font-weight: bold;
+ vertical-align: top;
+}
+
+.params .paramtype, .tparams .paramtype {
+ font-style: italic;
+ vertical-align: top;
+}
+
+.params .paramdir, .tparams .paramdir {
+ font-family: "courier new",courier,monospace;
+ vertical-align: top;
+}
+
+table.mlabels {
+ border-spacing: 0px;
+}
+
+td.mlabels-left {
+ width: 100%;
+ padding: 0px;
+}
+
+td.mlabels-right {
+ vertical-align: bottom;
+ padding: 0px;
+ white-space: nowrap;
+}
+
+span.mlabels {
+ margin-left: 8px;
+}
+
+span.mlabel {
+ background-color: #728DC1;
+ border-top:1px solid #5373B4;
+ border-left:1px solid #5373B4;
+ border-right:1px solid #C4CFE5;
+ border-bottom:1px solid #C4CFE5;
+ text-shadow: none;
+ color: white;
+ margin-right: 4px;
+ padding: 2px 3px;
+ border-radius: 3px;
+ font-size: 7pt;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+ margin: 10px 0px;
+ border-top: 1px solid #9CAFD4;
+ border-bottom: 1px solid #9CAFD4;
+ width: 100%;
+}
+
+.directory table {
+ border-collapse:collapse;
+}
+
+.directory td {
+ margin: 0px;
+ padding: 0px;
+ vertical-align: top;
+}
+
+.directory td.entry {
+ white-space: nowrap;
+ padding-right: 6px;
+ padding-top: 3px;
+}
+
+.directory td.entry a {
+ outline:none;
+}
+
+.directory td.entry a img {
+ border: none;
+}
+
+.directory td.desc {
+ width: 100%;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 3px;
+ border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+ padding-left: 6px;
+ background-color: #F7F8FB;
+}
+
+.directory img {
+ vertical-align: -30%;
+}
+
+.directory .levels {
+ white-space: nowrap;
+ width: 100%;
+ text-align: right;
+ font-size: 9pt;
+}
+
+.directory .levels span {
+ cursor: pointer;
+ padding-left: 2px;
+ padding-right: 2px;
+ color: #3D578C;
+}
+
+.arrow {
+ color: #9CAFD4;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ cursor: pointer;
+ font-size: 80%;
+ display: inline-block;
+ width: 16px;
+ height: 22px;
+}
+
+.icon {
+ font-family: Arial, Helvetica;
+ font-weight: bold;
+ font-size: 12px;
+ height: 14px;
+ width: 16px;
+ display: inline-block;
+ background-color: #728DC1;
+ color: white;
+ text-align: center;
+ border-radius: 4px;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+
+.icona {
+ width: 24px;
+ height: 22px;
+ display: inline-block;
+}
+
+.iconfopen {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('folderopen.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.iconfclosed {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('folderclosed.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.icondoc {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('doc.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+table.directory {
+ font: 400 14px Roboto,sans-serif;
+}
+
+/* @end */
+
+div.dynheader {
+ margin-top: 8px;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+address {
+ font-style: normal;
+ color: #2A3D61;
+}
+
+table.doxtable caption {
+ caption-side: top;
+}
+
+table.doxtable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+table.fieldtable {
+ /*width: 100%;*/
+ margin-bottom: 10px;
+ border: 1px solid #A8B8D9;
+ border-spacing: 0px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+ padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+ white-space: nowrap;
+ border-right: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+ padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+ border-bottom: 1px solid #A8B8D9;
+ /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+ margin-top: 0px;
+}
+
+.fieldtable td.fielddoc p:last-child {
+ margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+ border-bottom: none;
+}
+
+.fieldtable th {
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ font-size: 90%;
+ color: #253555;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ text-align:left;
+ font-weight: 400;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+ top: 0px;
+ left: 10px;
+ height: 36px;
+ background-image: url('tab_b.png');
+ z-index: 101;
+ overflow: hidden;
+ font-size: 13px;
+}
+
+.navpath ul
+{
+ font-size: 11px;
+ background-image:url('tab_b.png');
+ background-repeat:repeat-x;
+ background-position: 0 -5px;
+ height:30px;
+ line-height:30px;
+ color:#8AA0CC;
+ border:solid 1px #C2CDE4;
+ overflow:hidden;
+ margin:0px;
+ padding:0px;
+}
+
+.navpath li
+{
+ list-style-type:none;
+ float:left;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:url('bc_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+ height:32px;
+ display:block;
+ text-decoration: none;
+ outline: none;
+ color: #283A5D;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+}
+
+.navpath li.navelem a:hover
+{
+ color:#6884BD;
+}
+
+.navpath li.footer
+{
+ list-style-type:none;
+ float:right;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:none;
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+ font-size: 8pt;
+}
+
+
+div.summary
+{
+ float: right;
+ font-size: 8pt;
+ padding-right: 5px;
+ width: 50%;
+ text-align: right;
+}
+
+div.summary a
+{
+ white-space: nowrap;
+}
+
+table.classindex
+{
+ margin: 10px;
+ white-space: nowrap;
+ margin-left: 3%;
+ margin-right: 3%;
+ width: 94%;
+ border: 0;
+ border-spacing: 0;
+ padding: 0;
+}
+
+div.ingroups
+{
+ font-size: 8pt;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
+div.header
+{
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: #F9FAFC;
+ margin: 0px;
+ border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+ padding: 5px 5px 5px 10px;
+}
+
+.PageDocRTL-title div.headertitle {
+ text-align: right;
+ direction: rtl;
+}
+
+dl {
+ padding: 0 0 0 0;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */
+dl.section {
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+dl.section.DocNodeRTL {
+ margin-right: 0px;
+ padding-right: 0px;
+}
+
+dl.note {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #D0C000;
+}
+
+dl.note.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #D0C000;
+}
+
+dl.warning, dl.attention {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #FF0000;
+}
+
+dl.warning.DocNodeRTL, dl.attention.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #00D000;
+}
+
+dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #00D000;
+}
+
+dl.deprecated {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #505050;
+}
+
+dl.deprecated.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #505050;
+}
+
+dl.todo {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #00C0E0;
+}
+
+dl.todo.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #00C0E0;
+}
+
+dl.test {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #3030E0;
+}
+
+dl.test.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #3030E0;
+}
+
+dl.bug {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #C08050;
+}
+
+dl.bug.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #C08050;
+}
+
+dl.section dd {
+ margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+ text-align: center;
+ vertical-align: bottom;
+ border-collapse: separate;
+}
+
+#projectlogo img
+{
+ border: 0px none;
+}
+
+#projectalign
+{
+ vertical-align: middle;
+}
+
+#projectname
+{
+ font: 300% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 2px 0px;
+}
+
+#projectbrief
+{
+ font: 120% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ font: 50% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+ text-align: center;
+}
+
+.dotgraph
+{
+ text-align: center;
+}
+
+.mscgraph
+{
+ text-align: center;
+}
+
+.plantumlgraph
+{
+ text-align: center;
+}
+
+.diagraph
+{
+ text-align: center;
+}
+
+.caption
+{
+ font-weight: bold;
+}
+
+div.zoom
+{
+ border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+ margin-bottom:50px;
+}
+
+dl.citelist dt {
+ color:#334975;
+ float:left;
+ font-weight:bold;
+ margin-right:10px;
+ padding:5px;
+ text-align:right;
+ width:52px;
+}
+
+dl.citelist dd {
+ margin:2px 0 2px 72px;
+ padding:5px 0;
+}
+
+div.toc {
+ padding: 14px 25px;
+ background-color: #F4F6FA;
+ border: 1px solid #D8DFEE;
+ border-radius: 7px 7px 7px 7px;
+ float: right;
+ height: auto;
+ margin: 0 8px 10px 10px;
+ width: 200px;
+}
+
+.PageDocRTL-title div.toc {
+ float: left !important;
+ text-align: right;
+}
+
+div.toc li {
+ background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+ font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+ margin-top: 5px;
+ padding-left: 10px;
+ padding-top: 2px;
+}
+
+.PageDocRTL-title div.toc li {
+ background-position-x: right !important;
+ padding-left: 0 !important;
+ padding-right: 10px;
+}
+
+div.toc h3 {
+ font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+ color: #4665A2;
+ border-bottom: 0 none;
+ margin: 0;
+}
+
+div.toc ul {
+ list-style: none outside none;
+ border: medium none;
+ padding: 0px;
+}
+
+div.toc li.level1 {
+ margin-left: 0px;
+}
+
+div.toc li.level2 {
+ margin-left: 15px;
+}
+
+div.toc li.level3 {
+ margin-left: 30px;
+}
+
+div.toc li.level4 {
+ margin-left: 45px;
+}
+
+span.emoji {
+ /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html
+ * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort;
+ */
+}
+
+.PageDocRTL-title div.toc li.level1 {
+ margin-left: 0 !important;
+ margin-right: 0;
+}
+
+.PageDocRTL-title div.toc li.level2 {
+ margin-left: 0 !important;
+ margin-right: 15px;
+}
+
+.PageDocRTL-title div.toc li.level3 {
+ margin-left: 0 !important;
+ margin-right: 30px;
+}
+
+.PageDocRTL-title div.toc li.level4 {
+ margin-left: 0 !important;
+ margin-right: 45px;
+}
+
+.inherit_header {
+ font-weight: bold;
+ color: gray;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.inherit_header td {
+ padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+ display: none;
+}
+
+tr.heading h2 {
+ margin-top: 12px;
+ margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+ position: absolute;
+ display: none;
+}
+
+#powerTip {
+ cursor: default;
+ white-space: nowrap;
+ background-color: white;
+ border: 1px solid gray;
+ border-radius: 4px 4px 4px 4px;
+ box-shadow: 1px 1px 7px gray;
+ display: none;
+ font-size: smaller;
+ max-width: 80%;
+ opacity: 0.9;
+ padding: 1ex 1em 1em;
+ position: absolute;
+ z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+ color: grey;
+ font-style: italic;
+}
+
+#powerTip div.ttname a {
+ font-weight: bold;
+}
+
+#powerTip div.ttname {
+ font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+ color: #006318;
+}
+
+#powerTip div {
+ margin: 0px;
+ padding: 0px;
+ font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+ content: "";
+ position: absolute;
+ margin: 0px;
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.w:after, #powerTip.w:before,
+#powerTip.e:after, #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+}
+
+#powerTip.n:after, #powerTip.s:after,
+#powerTip.w:after, #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+ border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before, #powerTip.s:before,
+#powerTip.w:before, #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+ border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+ top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+ border-top-color: #FFFFFF;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+#powerTip.n:before {
+ border-top-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+ left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+ right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+ left: 14px;
+}
+
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+ border-bottom-color: #FFFFFF;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+ border-bottom-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+ left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+ right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+ left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+ left: 100%;
+}
+#powerTip.e:after {
+ border-left-color: #FFFFFF;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.e:before {
+ border-left-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+ right: 100%;
+}
+#powerTip.w:after {
+ border-right-color: #FFFFFF;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.w:before {
+ border-right-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+@media print
+{
+ #top { display: none; }
+ #side-nav { display: none; }
+ #nav-path { display: none; }
+ body { overflow:visible; }
+ h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+ .summary { display: none; }
+ .memitem { page-break-inside: avoid; }
+ #doc-content
+ {
+ margin-left:0 !important;
+ height:auto !important;
+ width:auto !important;
+ overflow:inherit;
+ display:inline;
+ }
+}
+
+/* @group Markdown */
+
+table.markdownTable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.markdownTable td, table.markdownTable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.markdownTable tr {
+}
+
+th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+th.markdownTableHeadLeft, td.markdownTableBodyLeft {
+ text-align: left
+}
+
+th.markdownTableHeadRight, td.markdownTableBodyRight {
+ text-align: right
+}
+
+th.markdownTableHeadCenter, td.markdownTableBodyCenter {
+ text-align: center
+}
+
+.DocNodeRTL {
+ text-align: right;
+ direction: rtl;
+}
+
+.DocNodeLTR {
+ text-align: left;
+ direction: ltr;
+}
+
+table.DocNodeRTL {
+ width: auto;
+ margin-right: 0;
+ margin-left: auto;
+}
+
+table.DocNodeLTR {
+ width: auto;
+ margin-right: auto;
+ margin-left: 0;
+}
+
+tt, code, kbd, samp
+{
+ display: inline-block;
+ direction:ltr;
+}
+/* @end */
+
+u {
+ text-decoration: underline;
+}
+
diff --git a/doxygen.svg b/doxygen.svg
new file mode 100644
index 0000000..d42dad5
--- /dev/null
+++ b/doxygen.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 104 31" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="a">
+ <stop stop-color="#5373B4" offset="0"/>
+ <stop stop-color="#7C95C6" offset="1"/>
+ </linearGradient>
+ <linearGradient id="d" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+ <linearGradient id="c" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientTransform="matrix(.6816 0 0 1.0248 72.391 -.91809)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+ <linearGradient id="b" x1="56.295" x2="56.295" y1="24.622" y2="26.574" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+ <linearGradient id="e" x1="49.067" x2="48.956" y1="19.719" y2="9.5227" gradientTransform="matrix(.97968 0 0 1.0207 -.25579 -.25579)" gradientUnits="userSpaceOnUse">
+ <stop stop-color="#C0CCE3" offset="0"/>
+ <stop stop-color="#EEF1F7" offset="1"/>
+ </linearGradient>
+ <filter id="f" x="-.010676" y="-.045304" width="1.0214" height="1.0906" color-interpolation-filters="sRGB">
+ <feGaussianBlur stdDeviation="0.45293203"/>
+ </filter>
+ </defs>
+ <g>
+ <path transform="translate(-2.5759 -27.848)" d="m13.609 32.203v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23645 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88018-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35277 3.7988-1.0566 1.0471-0.70387 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.92299-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.4611 0.28066 1.7988 0.84375 0.33777 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5976v-8.3926c0-0.84464-0.0765-1.6106-0.22851-2.2969-0.13511-0.70387-0.37971-1.2925-0.73438-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.063 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07028-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06051 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3438h-0.05078l-2.9648-9.3438zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914 0.38844 0.24635 0.6991 0.57184 0.93555 0.97656 0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13253 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10134 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88814-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70105 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.4927-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89025 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74023 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" filter="url(#f)" opacity=".3" stroke="#969696" xlink:href="#path141"/>
+ <path d="m0.97202 24.161 43.605-0.0019 0.0508 3.3061-43.6 0.04174z" fill="url(#d)" stroke="#000" stroke-width=".5"/>
+ <path d="m10.283 3.5547v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23644 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88017-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35278 3.7988-1.0566 1.0471-0.70386 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.923-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.461 0.28066 1.7988 0.84375 0.33778 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5977v-8.3926c0-0.84464-0.0765-1.6106-0.22852-2.2969-0.13511-0.70387-0.3797-1.2925-0.73437-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.062 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07027-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06052 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3437h-0.05078l-2.9648-9.3437zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914s0.6991 0.57184 0.93555 0.97656c0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13254 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10133 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88813-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70106 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.49271-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89026 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74024 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" fill="url(#e)" stroke="#4665A2" stroke-width=".7"/>
+ <path d="m52.988 27.291c0.99602-1.0359 1.3944-1.8725 1.7928-3.1076l3.8247-0.03984c0.3113 1.6096 0.82413 2.5137 1.6335 3.1474z" fill="url(#b)" stroke="#000" stroke-width=".5"/>
+ <path d="m73.89 24.04 28.885-0.2011-0.12476 3.3879-31.033 0.16229c1.2621-1.0234 1.9665-2.2859 2.2724-3.3491z" fill="url(#c)" stroke="#000" stroke-width=".41788"/>
+ </g>
+</svg>
diff --git a/dynsections.js b/dynsections.js
new file mode 100644
index 0000000..88f2c27
--- /dev/null
+++ b/dynsections.js
@@ -0,0 +1,128 @@
+/*
+ @licstart The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ 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.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
+ */
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+ content.hide();
+ summary.show();
+ $(linkObj).addClass('closed').removeClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ content.show();
+ summary.hide();
+ $(linkObj).removeClass('closed').addClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+ return false;
+}
+
+function updateStripes()
+{
+ $('table.directory tr').
+ removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+ $('table.directory tr').each(function() {
+ var l = this.id.split('_').length-1;
+ var i = $('#img'+this.id.substring(3));
+ var a = $('#arr'+this.id.substring(3));
+ if (l<level+1) {
+ i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+ a.html('&#9660;');
+ $(this).show();
+ } else if (l==level+1) {
+ i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+ a.html('&#9658;');
+ $(this).show();
+ } else {
+ $(this).hide();
+ }
+ });
+ updateStripes();
+}
+
+function toggleFolder(id)
+{
+ // the clicked row
+ var currentRow = $('#row_'+id);
+
+ // all rows after the clicked row
+ var rows = currentRow.nextAll("tr");
+
+ var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+ // only match elements AFTER this one (can't hide elements before)
+ var childRows = rows.filter(function() { return this.id.match(re); });
+
+ // first row is visible we are HIDING
+ if (childRows.filter(':first').is(':visible')===true) {
+ // replace down arrow by right arrow for current row
+ var currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ currentRowSpans.filter(".arrow").html('&#9658;');
+ rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+ } else { // we are SHOWING
+ // replace right arrow by down arrow for current row
+ var currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+ currentRowSpans.filter(".arrow").html('&#9660;');
+ // replace down arrows by right arrows for child rows
+ var childRowsSpans = childRows.find("span");
+ childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ childRowsSpans.filter(".arrow").html('&#9658;');
+ childRows.show(); //show all children
+ }
+ updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+ var rows = $('tr.inherit.'+id);
+ var img = $('tr.inherit_header.'+id+' img');
+ var src = $(img).attr('src');
+ if (rows.filter(':first').is(':visible')===true) {
+ rows.css('display','none');
+ $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ rows.css('display','table-row'); // using show() causes jump in firefox
+ $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+}
+/* @license-end */
+
+$(document).ready(function() {
+ $('.code,.codeRef').each(function() {
+ $(this).data('powertip',$('#a'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());
+ $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });
+ });
+});
diff --git a/error_8cpp_source.html b/error_8cpp_source.html
new file mode 100644
index 0000000..7ab038d
--- /dev/null
+++ b/error_8cpp_source.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: src/error.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">error.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="error_8hpp.html">winapi/error.hpp</a>&gt;</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &lt;winapi/utf8.hpp&gt;</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;windows.h&gt;</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; </div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;system_error&gt;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">namespace </span>error {</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">namespace </span>{</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;std::wstring trim_trailing_newline(<span class="keyword">const</span> std::wstring&amp; s) {</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> last_pos = s.find_last_not_of(L<span class="stringliteral">&quot;\r\n&quot;</span>);</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">if</span> (std::wstring::npos == last_pos)</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordflow">return</span> {};</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keywordflow">return</span> s.substr(0, last_pos + 1);</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;}</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;std::string build_what(DWORD code, <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">function</span>) {</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; std::ostringstream what;</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; what &lt;&lt; <span class="stringliteral">&quot;Function &quot;</span> &lt;&lt; <span class="keyword">function</span> &lt;&lt; <span class="stringliteral">&quot; failed with error code &quot;</span> &lt;&lt; code;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">return</span> what.str();</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;}</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;std::string format_message(int32_t code) {</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">wchar_t</span>* buf;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> len = ::FormatMessageW(</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; NULL,</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; code,</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">wchar_t</span>*<span class="keyword">&gt;</span>(&amp;buf),</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; 0,</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; NULL);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">if</span> (0 == len) {</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; ::LocalFree(buf);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;Couldn&#39;t format the error message&quot;</span>;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; }</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; std::wstring msg{buf, len};</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; ::LocalFree(buf);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">return</span> narrow(trim_trailing_newline(msg));</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;}</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;} <span class="comment">// namespace</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;std::string CategoryWindows::message(int32_t code)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">return</span> format_message(code);</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;}</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
+<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="error_8hpp.html#a70c25be1dfd40860d125203f27e664ce"> 61</a></span>&#160;std::system_error <a class="code" href="error_8hpp.html#a70c25be1dfd40860d125203f27e664ce">windows</a>(DWORD code, <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">function</span>) {</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; static_assert(<span class="keyword">sizeof</span>(DWORD) == <span class="keyword">sizeof</span>(int32_t), <span class="stringliteral">&quot;Aren&#39;t DWORDs the same size as ints?&quot;</span>);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">return</span> std::system_error{</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">static_cast&lt;</span>int32_t<span class="keyword">&gt;</span>(code), category_windows(), build_what(code, <span class="keyword">function</span>)};</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;} <span class="comment">// namespace error</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aerror_8hpp_html"><div class="ttname"><a href="error_8hpp.html">error.hpp</a></div><div class="ttdoc">Make std::system_error work with GetLastError().</div></div>
+<div class="ttc" id="aerror_8hpp_html_a70c25be1dfd40860d125203f27e664ce"><div class="ttname"><a href="error_8hpp.html#a70c25be1dfd40860d125203f27e664ce">winapi::error::windows</a></div><div class="ttdeci">std::system_error windows(DWORD code, const char *function)</div><div class="ttdef"><b>Definition:</b> <a href="error_8cpp_source.html#l00061">error.cpp:61</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/error_8hpp.html b/error_8hpp.html
new file mode 100644
index 0000000..bd24502
--- /dev/null
+++ b/error_8hpp.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: include/winapi/error.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1714771db42b7b5a0cd2ebe6e9736ed.html">winapi</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">error.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Make <code>std::system_error</code> work with <code>GetLastError()</code>.
+<a href="#details">More...</a></p>
+
+<p><a href="error_8hpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classwinapi_1_1error_1_1CategoryWindows.html">winapi::error::CategoryWindows</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:adaacba2bcf006c5932c1cc5f75c6275f"><td class="memItemLeft" align="right" valign="top"><a id="adaacba2bcf006c5932c1cc5f75c6275f"></a>
+const CategoryWindows &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>winapi::error::category_windows</b> ()</td></tr>
+<tr class="separator:adaacba2bcf006c5932c1cc5f75c6275f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a70c25be1dfd40860d125203f27e664ce"><td class="memItemLeft" align="right" valign="top">std::system_error&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="error_8hpp.html#a70c25be1dfd40860d125203f27e664ce">winapi::error::windows</a> (DWORD code, const char *function)</td></tr>
+<tr class="separator:a70c25be1dfd40860d125203f27e664ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab8f073a737dc23231845e6276d336126"><td class="memTemplParams" colspan="2"><a id="ab8f073a737dc23231845e6276d336126"></a>
+template&lt;typename Ret &gt; </td></tr>
+<tr class="memitem:ab8f073a737dc23231845e6276d336126"><td class="memTemplItemLeft" align="right" valign="top">std::runtime_error&#160;</td><td class="memTemplItemRight" valign="bottom"><b>winapi::error::custom</b> (Ret ret, const char *function)</td></tr>
+<tr class="separator:ab8f073a737dc23231845e6276d336126"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Make <code>std::system_error</code> work with <code>GetLastError()</code>. </p>
+
+<p class="definition">Definition in file <a class="el" href="error_8hpp_source.html">error.hpp</a>.</p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a70c25be1dfd40860d125203f27e664ce"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a70c25be1dfd40860d125203f27e664ce">&#9670;&nbsp;</a></span>windows()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::system_error winapi::error::windows </td>
+ <td>(</td>
+ <td class="paramtype">DWORD&#160;</td>
+ <td class="paramname"><em>code</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>function</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Build a <code>std::system_error</code> from the value of <code>GetLastError()</code>. </p><dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">code</td><td>Value of <code>GetLastError()</code>. </td></tr>
+ <tr><td class="paramname">function</td><td>Name of the function that failed, like "CreateFile". </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p class="definition">Definition at line <a class="el" href="error_8cpp_source.html#l00061">61</a> of file <a class="el" href="error_8cpp_source.html">error.cpp</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/error_8hpp_source.html b/error_8hpp_source.html
new file mode 100644
index 0000000..3eff8c1
--- /dev/null
+++ b/error_8hpp_source.html
@@ -0,0 +1,122 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: include/winapi/error.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1714771db42b7b5a0cd2ebe6e9736ed.html">winapi</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">error.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="error_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;windows.h&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;system_error&gt;</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">namespace </span>error {</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
+<div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="classwinapi_1_1error_1_1CategoryWindows.html"> 24</a></span>&#160;<span class="keyword">class </span><a class="code" href="classwinapi_1_1error_1_1CategoryWindows.html">CategoryWindows</a> : <span class="keyword">public</span> std::error_category {</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <a class="code" href="classwinapi_1_1error_1_1CategoryWindows.html">CategoryWindows</a>() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name() <span class="keyword">const</span> noexcept { <span class="keywordflow">return</span> <span class="stringliteral">&quot;Windows&quot;</span>; }</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; std::string message(int32_t) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;};</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classwinapi_1_1error_1_1CategoryWindows.html">CategoryWindows</a>&amp; category_windows() {</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="classwinapi_1_1error_1_1CategoryWindows.html">CategoryWindows</a> instance;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">return</span> instance;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;}</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;std::system_error windows(DWORD code, <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">function</span>);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> Ret&gt;</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;std::runtime_error custom(Ret ret, <span class="keyword">const</span> <span class="keywordtype">char</span>* <span class="keyword">function</span>) {</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; std::ostringstream oss;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; oss &lt;&lt; <span class="stringliteral">&quot;Function &quot;</span> &lt;&lt; <span class="keyword">function</span> &lt;&lt; <span class="stringliteral">&quot; failed with error code &quot;</span> &lt;&lt; ret;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">return</span> std::runtime_error{oss.str()};</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;}</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;} <span class="comment">// namespace error</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1error_1_1CategoryWindows_html"><div class="ttname"><a href="classwinapi_1_1error_1_1CategoryWindows.html">winapi::error::CategoryWindows</a></div><div class="ttdef"><b>Definition:</b> <a href="error_8hpp_source.html#l00024">error.hpp:24</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/file_8cpp_source.html b/file_8cpp_source.html
new file mode 100644
index 0000000..781d593
--- /dev/null
+++ b/file_8cpp_source.html
@@ -0,0 +1,236 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: src/file.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">file.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="error_8hpp.html">winapi/error.hpp</a>&gt;</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &lt;winapi/file.hpp&gt;</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;winapi/handle.hpp&gt;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;winapi/path.hpp&gt;</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;winapi/utf8.hpp&gt;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">namespace </span>{</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;std::wstring to_system_path(<span class="keyword">const</span> std::string&amp; path) {</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keywordflow">return</span> widen(path);</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;std::wstring to_system_path(<span class="keyword">const</span> CanonicalPath&amp; path) {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">return</span> widen(R<span class="stringliteral">&quot;(\\?\)&quot; + path.get());</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="stringliteral">}</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="stringliteral"></span> </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="stringliteral"></span><span class="keyword">struct </span>CreateFileParams {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">static</span> CreateFileParams read() {</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; CreateFileParams params;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; params.dwDesiredAccess = GENERIC_READ;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; params.dwShareMode = FILE_SHARE_READ;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; params.dwCreationDisposition = OPEN_EXISTING;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">return</span> params;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">static</span> CreateFileParams read_attributes() {</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">auto</span> params = read();</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; params.dwDesiredAccess = FILE_READ_ATTRIBUTES;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; params.dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> params;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">static</span> CreateFileParams write() {</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; CreateFileParams params;</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; params.dwDesiredAccess = GENERIC_WRITE;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; params.dwShareMode = FILE_SHARE_READ;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; params.dwCreationDisposition = OPEN_ALWAYS;</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">return</span> params;</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; DWORD dwDesiredAccess = 0;</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; DWORD dwShareMode = 0;</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; DWORD dwCreationDisposition = 0;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; CreateFileParams() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;};</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;File open_file(<span class="keyword">const</span> std::wstring&amp; path, <span class="keyword">const</span> CreateFileParams&amp; params) {</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; SECURITY_ATTRIBUTES attributes;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; std::memset(&amp;attributes, 0, <span class="keyword">sizeof</span>(attributes));</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; attributes.nLength = <span class="keyword">sizeof</span>(attributes);</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; attributes.bInheritHandle = TRUE;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> handle = ::CreateFileW(path.c_str(),</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; params.dwDesiredAccess,</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; params.dwShareMode,</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; &amp;attributes,</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; params.dwCreationDisposition,</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; FILE_ATTRIBUTE_NORMAL,</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; NULL);</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">if</span> (handle == INVALID_HANDLE_VALUE) {</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;CreateFileW&quot;</span>);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">return</span> File{Handle{handle}};</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;}</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="keywordtype">void</span> remove_file(<span class="keyword">const</span> std::wstring&amp; path) {</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> ret = ::DeleteFileW(path.c_str());</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">if</span> (!ret) {</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;DeleteFileW&quot;</span>);</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;}</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;} <span class="comment">// namespace</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
+<div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="classwinapi_1_1File.html#ad3bacd22beea28dcb0a0df846b5c4215"> 92</a></span>&#160;<a class="code" href="classwinapi_1_1File.html">File</a> <a class="code" href="classwinapi_1_1File.html#ad3bacd22beea28dcb0a0df846b5c4215">File::open_r</a>(<span class="keyword">const</span> std::string&amp; path) {</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">return</span> open_file(to_system_path(path), CreateFileParams::read());</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;}</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
+<div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="classwinapi_1_1File.html#aaa308b06a55f992f71e76f9e7a629647"> 96</a></span>&#160;<a class="code" href="classwinapi_1_1File.html">File</a> <a class="code" href="classwinapi_1_1File.html#ad3bacd22beea28dcb0a0df846b5c4215">File::open_r</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a>&amp; path) {</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> open_file(to_system_path(path), CreateFileParams::read());</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;}</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
+<div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classwinapi_1_1File.html#a7d7eeb56c9f33f6ec1814472c61e51f4"> 100</a></span>&#160;<a class="code" href="classwinapi_1_1File.html">File</a> <a class="code" href="classwinapi_1_1File.html#a7d7eeb56c9f33f6ec1814472c61e51f4">File::open_read_attributes</a>(<span class="keyword">const</span> std::string&amp; path) {</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> open_file(to_system_path(path), CreateFileParams::read_attributes());</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;}</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
+<div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="classwinapi_1_1File.html#aecba0e33d05893021f93a2348aeefa34"> 104</a></span>&#160;<a class="code" href="classwinapi_1_1File.html">File</a> <a class="code" href="classwinapi_1_1File.html#a7d7eeb56c9f33f6ec1814472c61e51f4">File::open_read_attributes</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a>&amp; path) {</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">return</span> open_file(to_system_path(path), CreateFileParams::read_attributes());</div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;}</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
+<div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classwinapi_1_1File.html#a36cda85b326592d7eadca5dc4a6b7981"> 108</a></span>&#160;<a class="code" href="classwinapi_1_1File.html">File</a> <a class="code" href="classwinapi_1_1File.html#a36cda85b326592d7eadca5dc4a6b7981">File::open_w</a>(<span class="keyword">const</span> std::string&amp; path) {</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">return</span> open_file(to_system_path(path), CreateFileParams::write());</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;}</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; </div>
+<div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="classwinapi_1_1File.html#a53bc6b8de007c630ac84d6519a520111"> 112</a></span>&#160;<a class="code" href="classwinapi_1_1File.html">File</a> <a class="code" href="classwinapi_1_1File.html#a36cda85b326592d7eadca5dc4a6b7981">File::open_w</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a>&amp; path) {</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">return</span> open_file(to_system_path(path), CreateFileParams::write());</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;}</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; </div>
+<div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classwinapi_1_1File.html#a453828fe42006bc7b6e925c41d1e965e"> 116</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classwinapi_1_1File.html#a453828fe42006bc7b6e925c41d1e965e">File::remove</a>(<span class="keyword">const</span> std::string&amp; path) {</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; remove_file(to_system_path(path));</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;}</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; </div>
+<div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classwinapi_1_1File.html#a7aa6987387481fc3b2fc5187b0563e97"> 120</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classwinapi_1_1File.html#a453828fe42006bc7b6e925c41d1e965e">File::remove</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a>&amp; path) {</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; remove_file(to_system_path(path));</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;}</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
+<div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classwinapi_1_1File.html#ad3c43351e4c032caa78525fc15e64ca7"> 124</a></span>&#160;std::size_t <a class="code" href="classwinapi_1_1File.html#ad3c43351e4c032caa78525fc15e64ca7">File::get_size</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; LARGE_INTEGER size;</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">if</span> (!GetFileSizeEx(get(), &amp;size))</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;GetFileSizeEx&quot;</span>);</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; </div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">if</span> (size.QuadPart &lt; 0 || size.QuadPart &gt; SIZE_MAX)</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">throw</span> std::runtime_error{<span class="stringliteral">&quot;invalid file size&quot;</span>};</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>std::size_t<span class="keyword">&gt;</span>(size.QuadPart);</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;}</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> FILE_ID_128&amp; a, <span class="keyword">const</span> FILE_ID_128&amp; b) {</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">return</span> 0 == std::memcmp(a.Identifier, b.Identifier, <span class="keyword">sizeof</span>(a.Identifier));</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;}</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; </div>
+<div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="classwinapi_1_1File.html#aed36137d5b730166cfec4e0f8a5a6fdd"> 139</a></span>&#160;<a class="code" href="structwinapi_1_1File_1_1ID.html">File::ID</a> <a class="code" href="classwinapi_1_1File.html#aed36137d5b730166cfec4e0f8a5a6fdd">File::query_id</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; FILE_ID_INFO id;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; </div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">if</span> (!GetFileInformationByHandleEx(get(), FileIdInfo, &amp;<span class="keywordtype">id</span>, <span class="keyword">sizeof</span>(<span class="keywordtype">id</span>)))</div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;GetFileInformationByHandleEx&quot;</span>);</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">return</span> {<span class="keywordtype">id</span>};</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;}</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1CanonicalPath_html"><div class="ttname"><a href="classwinapi_1_1CanonicalPath.html">winapi::CanonicalPath</a></div><div class="ttdoc">Absolute, canonical path.</div><div class="ttdef"><b>Definition:</b> <a href="path_8hpp_source.html#l00013">path.hpp:13</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1File_html"><div class="ttname"><a href="classwinapi_1_1File.html">winapi::File</a></div><div class="ttdoc">File I/O.</div><div class="ttdef"><b>Definition:</b> <a href="file_8hpp_source.html#l00029">file.hpp:29</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1File_html_a36cda85b326592d7eadca5dc4a6b7981"><div class="ttname"><a href="classwinapi_1_1File.html#a36cda85b326592d7eadca5dc4a6b7981">winapi::File::open_w</a></div><div class="ttdeci">static File open_w(const std::string &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="file_8cpp_source.html#l00108">file.cpp:108</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1File_html_a453828fe42006bc7b6e925c41d1e965e"><div class="ttname"><a href="classwinapi_1_1File.html#a453828fe42006bc7b6e925c41d1e965e">winapi::File::remove</a></div><div class="ttdeci">static void remove(const std::string &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="file_8cpp_source.html#l00116">file.cpp:116</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1File_html_a7d7eeb56c9f33f6ec1814472c61e51f4"><div class="ttname"><a href="classwinapi_1_1File.html#a7d7eeb56c9f33f6ec1814472c61e51f4">winapi::File::open_read_attributes</a></div><div class="ttdeci">static File open_read_attributes(const std::string &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="file_8cpp_source.html#l00100">file.cpp:100</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1File_html_ad3bacd22beea28dcb0a0df846b5c4215"><div class="ttname"><a href="classwinapi_1_1File.html#ad3bacd22beea28dcb0a0df846b5c4215">winapi::File::open_r</a></div><div class="ttdeci">static File open_r(const std::string &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="file_8cpp_source.html#l00092">file.cpp:92</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1File_html_ad3c43351e4c032caa78525fc15e64ca7"><div class="ttname"><a href="classwinapi_1_1File.html#ad3c43351e4c032caa78525fc15e64ca7">winapi::File::get_size</a></div><div class="ttdeci">std::size_t get_size() const</div><div class="ttdef"><b>Definition:</b> <a href="file_8cpp_source.html#l00124">file.cpp:124</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1File_html_aed36137d5b730166cfec4e0f8a5a6fdd"><div class="ttname"><a href="classwinapi_1_1File.html#aed36137d5b730166cfec4e0f8a5a6fdd">winapi::File::query_id</a></div><div class="ttdeci">ID query_id() const</div><div class="ttdef"><b>Definition:</b> <a href="file_8cpp_source.html#l00139">file.cpp:139</a></div></div>
+<div class="ttc" id="aerror_8hpp_html"><div class="ttname"><a href="error_8hpp.html">error.hpp</a></div><div class="ttdoc">Make std::system_error work with GetLastError().</div></div>
+<div class="ttc" id="astructwinapi_1_1File_1_1ID_html"><div class="ttname"><a href="structwinapi_1_1File_1_1ID.html">winapi::File::ID</a></div><div class="ttdef"><b>Definition:</b> <a href="file_8hpp_source.html#l00031">file.hpp:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/file_8hpp_source.html b/file_8hpp_source.html
new file mode 100644
index 0000000..c710d95
--- /dev/null
+++ b/file_8hpp_source.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: include/winapi/file.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1714771db42b7b5a0cd2ebe6e9736ed.html">winapi</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">file.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;handle.hpp&quot;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &quot;path.hpp&quot;</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; </div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;boost/functional/hash.hpp&gt;</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;windows.h&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> FILE_ID_128&amp; a, <span class="keyword">const</span> FILE_ID_128&amp; b);</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classwinapi_1_1File.html"> 29</a></span>&#160;<span class="keyword">class </span><a class="code" href="classwinapi_1_1File.html">File</a> : <span class="keyword">public</span> <a class="code" href="classwinapi_1_1Handle.html">Handle</a> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="structwinapi_1_1File_1_1ID.html"> 31</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structwinapi_1_1File_1_1ID.html">ID</a> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">const</span> FILE_ID_INFO impl;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code" href="structwinapi_1_1File_1_1ID.html">ID</a>&amp; other)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">return</span> impl.VolumeSerialNumber == other.impl.VolumeSerialNumber &amp;&amp;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; impl.FileId == other.impl.FileId;</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; }</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; };</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1File.html">File</a> <a class="code" href="classwinapi_1_1File.html#ad3bacd22beea28dcb0a0df846b5c4215">open_r</a>(<span class="keyword">const</span> std::string&amp;);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1File.html">File</a> <a class="code" href="classwinapi_1_1File.html#ad3bacd22beea28dcb0a0df846b5c4215">open_r</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a>&amp;);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1File.html">File</a> <a class="code" href="classwinapi_1_1File.html#a7d7eeb56c9f33f6ec1814472c61e51f4">open_read_attributes</a>(<span class="keyword">const</span> std::string&amp;);</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1File.html">File</a> <a class="code" href="classwinapi_1_1File.html#a7d7eeb56c9f33f6ec1814472c61e51f4">open_read_attributes</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a>&amp;);</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1File.html">File</a> <a class="code" href="classwinapi_1_1File.html#a36cda85b326592d7eadca5dc4a6b7981">open_w</a>(<span class="keyword">const</span> std::string&amp;);</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1File.html">File</a> <a class="code" href="classwinapi_1_1File.html#a36cda85b326592d7eadca5dc4a6b7981">open_w</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a>&amp;);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classwinapi_1_1File.html#a453828fe42006bc7b6e925c41d1e965e">remove</a>(<span class="keyword">const</span> std::string&amp;);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classwinapi_1_1File.html#a453828fe42006bc7b6e925c41d1e965e">remove</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a>&amp;);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
+<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classwinapi_1_1File.html#a4ae67aba44ba64654b888ace9b7dfb36"> 59</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classwinapi_1_1File.html#a4ae67aba44ba64654b888ace9b7dfb36">File</a>(<a class="code" href="classwinapi_1_1Handle.html">Handle</a>&amp;&amp; handle) : <a class="code" href="classwinapi_1_1Handle.html">Handle</a>{std::move(handle)} {}</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; std::size_t <a class="code" href="classwinapi_1_1File.html#ad3c43351e4c032caa78525fc15e64ca7">get_size</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; ID <a class="code" href="classwinapi_1_1File.html#aed36137d5b730166cfec4e0f8a5a6fdd">query_id</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;};</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="keyword">namespace </span>std {</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="keyword">template</span> &lt;&gt;</div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4.html"> 79</a></span>&#160;<span class="keyword">struct </span>hash&lt;winapi::File::ID&gt; {</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; std::size_t operator()(<span class="keyword">const</span> <a class="code" href="structwinapi_1_1File_1_1ID.html">winapi::File::ID</a>&amp; <span class="keywordtype">id</span>)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; std::size_t seed = 0;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; boost::hash_combine(seed, <span class="keywordtype">id</span>.impl.VolumeSerialNumber);</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; boost::hash_combine(seed, <span class="keywordtype">id</span>.impl.FileId.Identifier);</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">return</span> seed;</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;};</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; </div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;} <span class="comment">// namespace std</span></div>
+<div class="ttc" id="aclasswinapi_1_1CanonicalPath_html"><div class="ttname"><a href="classwinapi_1_1CanonicalPath.html">winapi::CanonicalPath</a></div><div class="ttdoc">Absolute, canonical path.</div><div class="ttdef"><b>Definition:</b> <a href="path_8hpp_source.html#l00013">path.hpp:13</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1File_html"><div class="ttname"><a href="classwinapi_1_1File.html">winapi::File</a></div><div class="ttdoc">File I/O.</div><div class="ttdef"><b>Definition:</b> <a href="file_8hpp_source.html#l00029">file.hpp:29</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1File_html_a36cda85b326592d7eadca5dc4a6b7981"><div class="ttname"><a href="classwinapi_1_1File.html#a36cda85b326592d7eadca5dc4a6b7981">winapi::File::open_w</a></div><div class="ttdeci">static File open_w(const std::string &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="file_8cpp_source.html#l00108">file.cpp:108</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1File_html_a453828fe42006bc7b6e925c41d1e965e"><div class="ttname"><a href="classwinapi_1_1File.html#a453828fe42006bc7b6e925c41d1e965e">winapi::File::remove</a></div><div class="ttdeci">static void remove(const std::string &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="file_8cpp_source.html#l00116">file.cpp:116</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1File_html_a4ae67aba44ba64654b888ace9b7dfb36"><div class="ttname"><a href="classwinapi_1_1File.html#a4ae67aba44ba64654b888ace9b7dfb36">winapi::File::File</a></div><div class="ttdeci">File(Handle &amp;&amp;handle)</div><div class="ttdef"><b>Definition:</b> <a href="file_8hpp_source.html#l00059">file.hpp:59</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1File_html_a7d7eeb56c9f33f6ec1814472c61e51f4"><div class="ttname"><a href="classwinapi_1_1File.html#a7d7eeb56c9f33f6ec1814472c61e51f4">winapi::File::open_read_attributes</a></div><div class="ttdeci">static File open_read_attributes(const std::string &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="file_8cpp_source.html#l00100">file.cpp:100</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1File_html_ad3bacd22beea28dcb0a0df846b5c4215"><div class="ttname"><a href="classwinapi_1_1File.html#ad3bacd22beea28dcb0a0df846b5c4215">winapi::File::open_r</a></div><div class="ttdeci">static File open_r(const std::string &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="file_8cpp_source.html#l00092">file.cpp:92</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1File_html_ad3c43351e4c032caa78525fc15e64ca7"><div class="ttname"><a href="classwinapi_1_1File.html#ad3c43351e4c032caa78525fc15e64ca7">winapi::File::get_size</a></div><div class="ttdeci">std::size_t get_size() const</div><div class="ttdef"><b>Definition:</b> <a href="file_8cpp_source.html#l00124">file.cpp:124</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1File_html_aed36137d5b730166cfec4e0f8a5a6fdd"><div class="ttname"><a href="classwinapi_1_1File.html#aed36137d5b730166cfec4e0f8a5a6fdd">winapi::File::query_id</a></div><div class="ttdeci">ID query_id() const</div><div class="ttdef"><b>Definition:</b> <a href="file_8cpp_source.html#l00139">file.cpp:139</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html"><div class="ttname"><a href="classwinapi_1_1Handle.html">winapi::Handle</a></div><div class="ttdoc">HANDLE wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="handle_8hpp_source.html#l00025">handle.hpp:25</a></div></div>
+<div class="ttc" id="astructwinapi_1_1File_1_1ID_html"><div class="ttname"><a href="structwinapi_1_1File_1_1ID.html">winapi::File::ID</a></div><div class="ttdef"><b>Definition:</b> <a href="file_8hpp_source.html#l00031">file.hpp:31</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/files.html b/files.html
new file mode 100644
index 0000000..6498961
--- /dev/null
+++ b/files.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: File List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">File List</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')">&#160;</span><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html" target="_self">include</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">&#9660;</span><span id="img_0_0_" class="iconfopen" onclick="toggleFolder('0_0_')">&#160;</span><a class="el" href="dir_f1714771db42b7b5a0cd2ebe6e9736ed.html" target="_self">winapi</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="buffer_8hpp_source.html"><span class="icondoc"></span></a><b>buffer.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_0_0_1_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="cmd__line_8hpp_source.html"><span class="icondoc"></span></a><b>cmd_line.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_0_0_2_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="error_8hpp_source.html"><span class="icondoc"></span></a><a class="el" href="error_8hpp.html" target="_self">error.hpp</a></td><td class="desc">Make <code>std::system_error</code> work with <code>GetLastError()</code> </td></tr>
+<tr id="row_0_0_3_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="file_8hpp_source.html"><span class="icondoc"></span></a><b>file.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_0_0_4_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="handle_8hpp_source.html"><span class="icondoc"></span></a><b>handle.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_0_0_5_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="path_8hpp_source.html"><span class="icondoc"></span></a><b>path.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_0_0_6_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="pipe_8hpp_source.html"><span class="icondoc"></span></a><b>pipe.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_0_0_7_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="process_8hpp_source.html"><span class="icondoc"></span></a><b>process.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_0_0_8_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="process__io_8hpp_source.html"><span class="icondoc"></span></a><b>process_io.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_0_0_9_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="resource_8hpp_source.html"><span class="icondoc"></span></a><b>resource.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_0_0_10_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="shmem_8hpp_source.html"><span class="icondoc"></span></a><b>shmem.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_0_0_11_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="sid_8hpp_source.html"><span class="icondoc"></span></a><b>sid.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_0_0_12_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="utils_8hpp_source.html"><span class="icondoc"></span></a><b>utils.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_0_0_13_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="window__style_8hpp_source.html"><span class="icondoc"></span></a><b>window_style.hpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span id="img_1_" class="iconfopen" onclick="toggleFolder('1_')">&#160;</span><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" target="_self">src</a></td><td class="desc"></td></tr>
+<tr id="row_1_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="cmd__line_8cpp_source.html"><span class="icondoc"></span></a><b>cmd_line.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="error_8cpp_source.html"><span class="icondoc"></span></a><b>error.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="file_8cpp_source.html"><span class="icondoc"></span></a><b>file.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="handle_8cpp_source.html"><span class="icondoc"></span></a><b>handle.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_4_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="path_8cpp_source.html"><span class="icondoc"></span></a><b>path.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="pipe_8cpp_source.html"><span class="icondoc"></span></a><b>pipe.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_6_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="process_8cpp_source.html"><span class="icondoc"></span></a><b>process.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="process__io_8cpp_source.html"><span class="icondoc"></span></a><b>process_io.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_8_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="shmem_8cpp_source.html"><span class="icondoc"></span></a><b>shmem.cpp</b></td><td class="desc"></td></tr>
+<tr id="row_1_9_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a href="sid_8cpp_source.html"><span class="icondoc"></span></a><b>sid.cpp</b></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/folderclosed.png b/folderclosed.png
new file mode 100644
index 0000000..bb8ab35
--- /dev/null
+++ b/folderclosed.png
Binary files differ
diff --git a/folderopen.png b/folderopen.png
new file mode 100644
index 0000000..d6c7f67
--- /dev/null
+++ b/folderopen.png
Binary files differ
diff --git a/functions.html b/functions.html
new file mode 100644
index 0000000..28923e4
--- /dev/null
+++ b/functions.html
@@ -0,0 +1,305 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a id="index_a"></a>- a -</h3><ul>
+<li>add()
+: <a class="el" href="classwinapi_1_1Buffer.html#a303645b281fb4f1a4d9e84f1d1370182">winapi::Buffer</a>
+</li>
+<li>args_to_string()
+: <a class="el" href="classwinapi_1_1CommandLine.html#afb35d8d6d2b8b66bd6f21d0adc37017f">winapi::CommandLine</a>
+</li>
+<li>as_utf16()
+: <a class="el" href="classwinapi_1_1Buffer.html#ac5ca93f1935f2259db0d68e1884897d5">winapi::Buffer</a>
+</li>
+<li>as_utf8()
+: <a class="el" href="classwinapi_1_1Buffer.html#afd8abcecacbcc9fdb4e5825068ebf561">winapi::Buffer</a>
+</li>
+</ul>
+
+
+<h3><a id="index_b"></a>- b -</h3><ul>
+<li>Buffer()
+: <a class="el" href="classwinapi_1_1Buffer.html#abb43686e0f2e5798bc7b2c0e47722458">winapi::Buffer</a>
+</li>
+</ul>
+
+
+<h3><a id="index_c"></a>- c -</h3><ul>
+<li>canonicalize()
+: <a class="el" href="classwinapi_1_1CanonicalPath.html#a7072d3b77d4f437246744c9c2a9407db">winapi::CanonicalPath</a>
+</li>
+<li>close()
+: <a class="el" href="classwinapi_1_1Handle.html#a6f28cc73ae2e3e447251cef0160e3555">winapi::Handle</a>
+</li>
+<li>CommandLine()
+: <a class="el" href="classwinapi_1_1CommandLine.html#ad48bb83391e84db28c3c3c6bdf283003">winapi::CommandLine</a>
+</li>
+<li>copy()
+: <a class="el" href="structwinapi_1_1Resource.html#ac3bf07d20d3ce6705693ae7a86eb565d">winapi::Resource</a>
+</li>
+<li>create()
+: <a class="el" href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">winapi::Process</a>
+, <a class="el" href="classwinapi_1_1SharedMemory.html#a475d4dcdf99d777cb0968d7631cc6f7e">winapi::SharedMemory</a>
+, <a class="el" href="classwinapi_1_1SharedObject.html#acb4ef5283256d7463fe81c8b312b6745">winapi::SharedObject&lt; T &gt;</a>
+</li>
+<li>current()
+: <a class="el" href="classwinapi_1_1Process.html#a4edc58e78ee81e5531af34fc4f806e24">winapi::Process</a>
+</li>
+</ul>
+
+
+<h3><a id="index_d"></a>- d -</h3><ul>
+<li>default_permissions()
+: <a class="el" href="classwinapi_1_1Process.html#a4fffc3755642f3db56902106f1b96040">winapi::Process</a>
+</li>
+</ul>
+
+
+<h3><a id="index_f"></a>- f -</h3><ul>
+<li>File()
+: <a class="el" href="classwinapi_1_1File.html#a4ae67aba44ba64654b888ace9b7dfb36">winapi::File</a>
+</li>
+<li>from_main()
+: <a class="el" href="classwinapi_1_1CommandLine.html#a7a7bc2a7461f2f275a12c9fda23d312d">winapi::CommandLine</a>
+</li>
+</ul>
+
+
+<h3><a id="index_g"></a>- g -</h3><ul>
+<li>get()
+: <a class="el" href="classwinapi_1_1SharedMemory.html#ada3f0075608dd1541f54f004e18a4775">winapi::SharedMemory</a>
+, <a class="el" href="classwinapi_1_1SharedObject.html#a85d0943708ab0da78e1a189b1bbbd1eb">winapi::SharedObject&lt; T &gt;</a>
+</li>
+<li>get_args()
+: <a class="el" href="classwinapi_1_1CommandLine.html#aef5ea9b427d975af8e64948802b54af4">winapi::CommandLine</a>
+</li>
+<li>get_argv()
+: <a class="el" href="classwinapi_1_1CommandLine.html#ac21d30a214f529f80b91186e9724cf41">winapi::CommandLine</a>
+</li>
+<li>get_argv0()
+: <a class="el" href="classwinapi_1_1CommandLine.html#a8f75a5f374397c1c1dcc4900bf44ee32">winapi::CommandLine</a>
+</li>
+<li>get_exe_path()
+: <a class="el" href="classwinapi_1_1Process.html#a86cea0dd87e63ef93f6575d601ab31f5">winapi::Process</a>
+</li>
+<li>get_exit_code()
+: <a class="el" href="classwinapi_1_1Process.html#a359c11337c7e50370cd5375efa841131">winapi::Process</a>
+</li>
+<li>get_handle()
+: <a class="el" href="classwinapi_1_1Process.html#a1b65a0f6dc25c1810161f2c5c9648249">winapi::Process</a>
+</li>
+<li>get_id()
+: <a class="el" href="classwinapi_1_1Process.html#aa44a8ca82178dfedd68865e4e47f7584">winapi::Process</a>
+</li>
+<li>get_resource()
+: <a class="el" href="classwinapi_1_1Process.html#a4ddbc4be71879ea7f91b05ad7f44435c">winapi::Process</a>
+</li>
+<li>get_resource_string()
+: <a class="el" href="classwinapi_1_1Process.html#ac700bc836a720384bed52a032628aaeb">winapi::Process</a>
+</li>
+<li>get_size()
+: <a class="el" href="classwinapi_1_1File.html#ad3c43351e4c032caa78525fc15e64ca7">winapi::File</a>
+</li>
+</ul>
+
+
+<h3><a id="index_h"></a>- h -</h3><ul>
+<li>has_args()
+: <a class="el" href="classwinapi_1_1CommandLine.html#ae87fa727498660661753d2d456873033">winapi::CommandLine</a>
+</li>
+</ul>
+
+
+<h3><a id="index_i"></a>- i -</h3><ul>
+<li>is_running()
+: <a class="el" href="classwinapi_1_1Process.html#a5b02393edb57bd902e321037133c40eb">winapi::Process</a>
+</li>
+<li>is_std()
+: <a class="el" href="classwinapi_1_1Handle.html#acc001a0f466d9c92cf7f2ef62896afc5">winapi::Handle</a>
+</li>
+</ul>
+
+
+<h3><a id="index_o"></a>- o -</h3><ul>
+<li>open()
+: <a class="el" href="classwinapi_1_1Process.html#a48964bbb7968bd7b6796e8a3306d58d9">winapi::Process</a>
+, <a class="el" href="classwinapi_1_1SharedMemory.html#a82eafb0e7c2c6b5af1a7ff8945af2027">winapi::SharedMemory</a>
+, <a class="el" href="classwinapi_1_1SharedObject.html#a08fda6ddde26e0a10170efaf07232761">winapi::SharedObject&lt; T &gt;</a>
+</li>
+<li>open_r()
+: <a class="el" href="classwinapi_1_1File.html#ad3bacd22beea28dcb0a0df846b5c4215">winapi::File</a>
+, <a class="el" href="classwinapi_1_1Process.html#af9d748078299957519ee67fd7f1e49b3">winapi::Process</a>
+</li>
+<li>open_read_attributes()
+: <a class="el" href="classwinapi_1_1File.html#a7d7eeb56c9f33f6ec1814472c61e51f4">winapi::File</a>
+</li>
+<li>open_w()
+: <a class="el" href="classwinapi_1_1File.html#a36cda85b326592d7eadca5dc4a6b7981">winapi::File</a>
+</li>
+</ul>
+
+
+<h3><a id="index_p"></a>- p -</h3><ul>
+<li>parse()
+: <a class="el" href="classwinapi_1_1CommandLine.html#aabafd2d1d923c30c3da372909857e87e">winapi::CommandLine</a>
+</li>
+<li>Pipe()
+: <a class="el" href="classwinapi_1_1Pipe.html#aa41a6275dab93f4fc0d2e593aa9b39f0">winapi::Pipe</a>
+</li>
+<li>ptr()
+: <a class="el" href="classwinapi_1_1SharedMemory.html#a44e75ba35ae3e470fb521f6274991673">winapi::SharedMemory</a>
+, <a class="el" href="classwinapi_1_1SharedObject.html#a0dfaad2c143d60af8dc6c010a13d513a">winapi::SharedObject&lt; T &gt;</a>
+</li>
+</ul>
+
+
+<h3><a id="index_q"></a>- q -</h3><ul>
+<li>query()
+: <a class="el" href="classwinapi_1_1CommandLine.html#aa07ee7bf5d61658f33e4a7571205ae5c">winapi::CommandLine</a>
+</li>
+<li>query_id()
+: <a class="el" href="classwinapi_1_1File.html#aed36137d5b730166cfec4e0f8a5a6fdd">winapi::File</a>
+</li>
+</ul>
+
+
+<h3><a id="index_r"></a>- r -</h3><ul>
+<li>read()
+: <a class="el" href="classwinapi_1_1Handle.html#ae340b095569654f8b709614f23577f2e">winapi::Handle</a>
+</li>
+<li>read_chunk()
+: <a class="el" href="classwinapi_1_1Handle.html#a31c8440493e29cdd9b6fc40ffe8c06f1">winapi::Handle</a>
+</li>
+<li>read_end()
+: <a class="el" href="classwinapi_1_1Pipe.html#a07412b04db253f1c24fe4aeda5db82e1">winapi::Pipe</a>
+</li>
+<li>read_permissions()
+: <a class="el" href="classwinapi_1_1Process.html#a4fc3ed404c1cf67dabb7867d0c9f638c">winapi::Process</a>
+</li>
+<li>remove()
+: <a class="el" href="classwinapi_1_1File.html#a453828fe42006bc7b6e925c41d1e965e">winapi::File</a>
+</li>
+</ul>
+
+
+<h3><a id="index_s"></a>- s -</h3><ul>
+<li>set()
+: <a class="el" href="classwinapi_1_1Buffer.html#ab09aa9c5075579510da463b4148ee610">winapi::Buffer</a>
+</li>
+<li>shell()
+: <a class="el" href="classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e">winapi::Process</a>
+</li>
+<li>shut_down()
+: <a class="el" href="classwinapi_1_1Process.html#a1aedc4814dd9c154b6e03e572d873755">winapi::Process</a>
+</li>
+<li>std_err()
+: <a class="el" href="classwinapi_1_1Handle.html#a894d880e1241c9516889a7a63a0c1750">winapi::Handle</a>
+</li>
+<li>std_in()
+: <a class="el" href="classwinapi_1_1Handle.html#a1817fdf127291cf5f47d6429d8f468cd">winapi::Handle</a>
+</li>
+<li>std_out()
+: <a class="el" href="classwinapi_1_1Handle.html#a76e96327afd0b943d996c90289f2883e">winapi::Handle</a>
+</li>
+<li>Stderr()
+: <a class="el" href="structwinapi_1_1process_1_1Stderr.html#a1daa6ec6ad6b30d9958b2ee76f086230">winapi::process::Stderr</a>
+</li>
+<li>Stdin()
+: <a class="el" href="structwinapi_1_1process_1_1Stdin.html#ab551f076d049c58b5391847ec0fe8999">winapi::process::Stdin</a>
+</li>
+<li>Stdout()
+: <a class="el" href="structwinapi_1_1process_1_1Stdout.html#a1afc245b79c17e05bee9931f347a34e5">winapi::process::Stdout</a>
+</li>
+</ul>
+
+
+<h3><a id="index_t"></a>- t -</h3><ul>
+<li>terminate()
+: <a class="el" href="classwinapi_1_1Process.html#a155aefb272a151126fe2a65d583be880">winapi::Process</a>
+</li>
+<li>to_string()
+: <a class="el" href="classwinapi_1_1CommandLine.html#ac47e738f255a85b3e0605d40c0124b24">winapi::CommandLine</a>
+</li>
+</ul>
+
+
+<h3><a id="index_w"></a>- w -</h3><ul>
+<li>wait()
+: <a class="el" href="classwinapi_1_1Process.html#a273dcbc8cd69539d0f9fd4d1e09e67a7">winapi::Process</a>
+</li>
+<li>write()
+: <a class="el" href="classwinapi_1_1Handle.html#afbfe1b7de229eb5656504e05acf9bbcc">winapi::Handle</a>
+</li>
+<li>write_end()
+: <a class="el" href="classwinapi_1_1Pipe.html#a19e504588020c68639154ed597151cd6">winapi::Pipe</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/functions_func.html b/functions_func.html
new file mode 100644
index 0000000..1f1cfb2
--- /dev/null
+++ b/functions_func.html
@@ -0,0 +1,305 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Class Members - Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a id="index_a"></a>- a -</h3><ul>
+<li>add()
+: <a class="el" href="classwinapi_1_1Buffer.html#a303645b281fb4f1a4d9e84f1d1370182">winapi::Buffer</a>
+</li>
+<li>args_to_string()
+: <a class="el" href="classwinapi_1_1CommandLine.html#afb35d8d6d2b8b66bd6f21d0adc37017f">winapi::CommandLine</a>
+</li>
+<li>as_utf16()
+: <a class="el" href="classwinapi_1_1Buffer.html#ac5ca93f1935f2259db0d68e1884897d5">winapi::Buffer</a>
+</li>
+<li>as_utf8()
+: <a class="el" href="classwinapi_1_1Buffer.html#afd8abcecacbcc9fdb4e5825068ebf561">winapi::Buffer</a>
+</li>
+</ul>
+
+
+<h3><a id="index_b"></a>- b -</h3><ul>
+<li>Buffer()
+: <a class="el" href="classwinapi_1_1Buffer.html#abb43686e0f2e5798bc7b2c0e47722458">winapi::Buffer</a>
+</li>
+</ul>
+
+
+<h3><a id="index_c"></a>- c -</h3><ul>
+<li>canonicalize()
+: <a class="el" href="classwinapi_1_1CanonicalPath.html#a7072d3b77d4f437246744c9c2a9407db">winapi::CanonicalPath</a>
+</li>
+<li>close()
+: <a class="el" href="classwinapi_1_1Handle.html#a6f28cc73ae2e3e447251cef0160e3555">winapi::Handle</a>
+</li>
+<li>CommandLine()
+: <a class="el" href="classwinapi_1_1CommandLine.html#ad48bb83391e84db28c3c3c6bdf283003">winapi::CommandLine</a>
+</li>
+<li>copy()
+: <a class="el" href="structwinapi_1_1Resource.html#ac3bf07d20d3ce6705693ae7a86eb565d">winapi::Resource</a>
+</li>
+<li>create()
+: <a class="el" href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">winapi::Process</a>
+, <a class="el" href="classwinapi_1_1SharedMemory.html#a475d4dcdf99d777cb0968d7631cc6f7e">winapi::SharedMemory</a>
+, <a class="el" href="classwinapi_1_1SharedObject.html#acb4ef5283256d7463fe81c8b312b6745">winapi::SharedObject&lt; T &gt;</a>
+</li>
+<li>current()
+: <a class="el" href="classwinapi_1_1Process.html#a4edc58e78ee81e5531af34fc4f806e24">winapi::Process</a>
+</li>
+</ul>
+
+
+<h3><a id="index_d"></a>- d -</h3><ul>
+<li>default_permissions()
+: <a class="el" href="classwinapi_1_1Process.html#a4fffc3755642f3db56902106f1b96040">winapi::Process</a>
+</li>
+</ul>
+
+
+<h3><a id="index_f"></a>- f -</h3><ul>
+<li>File()
+: <a class="el" href="classwinapi_1_1File.html#a4ae67aba44ba64654b888ace9b7dfb36">winapi::File</a>
+</li>
+<li>from_main()
+: <a class="el" href="classwinapi_1_1CommandLine.html#a7a7bc2a7461f2f275a12c9fda23d312d">winapi::CommandLine</a>
+</li>
+</ul>
+
+
+<h3><a id="index_g"></a>- g -</h3><ul>
+<li>get()
+: <a class="el" href="classwinapi_1_1SharedMemory.html#ada3f0075608dd1541f54f004e18a4775">winapi::SharedMemory</a>
+, <a class="el" href="classwinapi_1_1SharedObject.html#a85d0943708ab0da78e1a189b1bbbd1eb">winapi::SharedObject&lt; T &gt;</a>
+</li>
+<li>get_args()
+: <a class="el" href="classwinapi_1_1CommandLine.html#aef5ea9b427d975af8e64948802b54af4">winapi::CommandLine</a>
+</li>
+<li>get_argv()
+: <a class="el" href="classwinapi_1_1CommandLine.html#ac21d30a214f529f80b91186e9724cf41">winapi::CommandLine</a>
+</li>
+<li>get_argv0()
+: <a class="el" href="classwinapi_1_1CommandLine.html#a8f75a5f374397c1c1dcc4900bf44ee32">winapi::CommandLine</a>
+</li>
+<li>get_exe_path()
+: <a class="el" href="classwinapi_1_1Process.html#a86cea0dd87e63ef93f6575d601ab31f5">winapi::Process</a>
+</li>
+<li>get_exit_code()
+: <a class="el" href="classwinapi_1_1Process.html#a359c11337c7e50370cd5375efa841131">winapi::Process</a>
+</li>
+<li>get_handle()
+: <a class="el" href="classwinapi_1_1Process.html#a1b65a0f6dc25c1810161f2c5c9648249">winapi::Process</a>
+</li>
+<li>get_id()
+: <a class="el" href="classwinapi_1_1Process.html#aa44a8ca82178dfedd68865e4e47f7584">winapi::Process</a>
+</li>
+<li>get_resource()
+: <a class="el" href="classwinapi_1_1Process.html#a4ddbc4be71879ea7f91b05ad7f44435c">winapi::Process</a>
+</li>
+<li>get_resource_string()
+: <a class="el" href="classwinapi_1_1Process.html#ac700bc836a720384bed52a032628aaeb">winapi::Process</a>
+</li>
+<li>get_size()
+: <a class="el" href="classwinapi_1_1File.html#ad3c43351e4c032caa78525fc15e64ca7">winapi::File</a>
+</li>
+</ul>
+
+
+<h3><a id="index_h"></a>- h -</h3><ul>
+<li>has_args()
+: <a class="el" href="classwinapi_1_1CommandLine.html#ae87fa727498660661753d2d456873033">winapi::CommandLine</a>
+</li>
+</ul>
+
+
+<h3><a id="index_i"></a>- i -</h3><ul>
+<li>is_running()
+: <a class="el" href="classwinapi_1_1Process.html#a5b02393edb57bd902e321037133c40eb">winapi::Process</a>
+</li>
+<li>is_std()
+: <a class="el" href="classwinapi_1_1Handle.html#acc001a0f466d9c92cf7f2ef62896afc5">winapi::Handle</a>
+</li>
+</ul>
+
+
+<h3><a id="index_o"></a>- o -</h3><ul>
+<li>open()
+: <a class="el" href="classwinapi_1_1Process.html#a48964bbb7968bd7b6796e8a3306d58d9">winapi::Process</a>
+, <a class="el" href="classwinapi_1_1SharedMemory.html#a82eafb0e7c2c6b5af1a7ff8945af2027">winapi::SharedMemory</a>
+, <a class="el" href="classwinapi_1_1SharedObject.html#a08fda6ddde26e0a10170efaf07232761">winapi::SharedObject&lt; T &gt;</a>
+</li>
+<li>open_r()
+: <a class="el" href="classwinapi_1_1File.html#ad3bacd22beea28dcb0a0df846b5c4215">winapi::File</a>
+, <a class="el" href="classwinapi_1_1Process.html#af9d748078299957519ee67fd7f1e49b3">winapi::Process</a>
+</li>
+<li>open_read_attributes()
+: <a class="el" href="classwinapi_1_1File.html#a7d7eeb56c9f33f6ec1814472c61e51f4">winapi::File</a>
+</li>
+<li>open_w()
+: <a class="el" href="classwinapi_1_1File.html#a36cda85b326592d7eadca5dc4a6b7981">winapi::File</a>
+</li>
+</ul>
+
+
+<h3><a id="index_p"></a>- p -</h3><ul>
+<li>parse()
+: <a class="el" href="classwinapi_1_1CommandLine.html#aabafd2d1d923c30c3da372909857e87e">winapi::CommandLine</a>
+</li>
+<li>Pipe()
+: <a class="el" href="classwinapi_1_1Pipe.html#aa41a6275dab93f4fc0d2e593aa9b39f0">winapi::Pipe</a>
+</li>
+<li>ptr()
+: <a class="el" href="classwinapi_1_1SharedMemory.html#a44e75ba35ae3e470fb521f6274991673">winapi::SharedMemory</a>
+, <a class="el" href="classwinapi_1_1SharedObject.html#a0dfaad2c143d60af8dc6c010a13d513a">winapi::SharedObject&lt; T &gt;</a>
+</li>
+</ul>
+
+
+<h3><a id="index_q"></a>- q -</h3><ul>
+<li>query()
+: <a class="el" href="classwinapi_1_1CommandLine.html#aa07ee7bf5d61658f33e4a7571205ae5c">winapi::CommandLine</a>
+</li>
+<li>query_id()
+: <a class="el" href="classwinapi_1_1File.html#aed36137d5b730166cfec4e0f8a5a6fdd">winapi::File</a>
+</li>
+</ul>
+
+
+<h3><a id="index_r"></a>- r -</h3><ul>
+<li>read()
+: <a class="el" href="classwinapi_1_1Handle.html#ae340b095569654f8b709614f23577f2e">winapi::Handle</a>
+</li>
+<li>read_chunk()
+: <a class="el" href="classwinapi_1_1Handle.html#a31c8440493e29cdd9b6fc40ffe8c06f1">winapi::Handle</a>
+</li>
+<li>read_end()
+: <a class="el" href="classwinapi_1_1Pipe.html#a07412b04db253f1c24fe4aeda5db82e1">winapi::Pipe</a>
+</li>
+<li>read_permissions()
+: <a class="el" href="classwinapi_1_1Process.html#a4fc3ed404c1cf67dabb7867d0c9f638c">winapi::Process</a>
+</li>
+<li>remove()
+: <a class="el" href="classwinapi_1_1File.html#a453828fe42006bc7b6e925c41d1e965e">winapi::File</a>
+</li>
+</ul>
+
+
+<h3><a id="index_s"></a>- s -</h3><ul>
+<li>set()
+: <a class="el" href="classwinapi_1_1Buffer.html#ab09aa9c5075579510da463b4148ee610">winapi::Buffer</a>
+</li>
+<li>shell()
+: <a class="el" href="classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e">winapi::Process</a>
+</li>
+<li>shut_down()
+: <a class="el" href="classwinapi_1_1Process.html#a1aedc4814dd9c154b6e03e572d873755">winapi::Process</a>
+</li>
+<li>std_err()
+: <a class="el" href="classwinapi_1_1Handle.html#a894d880e1241c9516889a7a63a0c1750">winapi::Handle</a>
+</li>
+<li>std_in()
+: <a class="el" href="classwinapi_1_1Handle.html#a1817fdf127291cf5f47d6429d8f468cd">winapi::Handle</a>
+</li>
+<li>std_out()
+: <a class="el" href="classwinapi_1_1Handle.html#a76e96327afd0b943d996c90289f2883e">winapi::Handle</a>
+</li>
+<li>Stderr()
+: <a class="el" href="structwinapi_1_1process_1_1Stderr.html#a1daa6ec6ad6b30d9958b2ee76f086230">winapi::process::Stderr</a>
+</li>
+<li>Stdin()
+: <a class="el" href="structwinapi_1_1process_1_1Stdin.html#ab551f076d049c58b5391847ec0fe8999">winapi::process::Stdin</a>
+</li>
+<li>Stdout()
+: <a class="el" href="structwinapi_1_1process_1_1Stdout.html#a1afc245b79c17e05bee9931f347a34e5">winapi::process::Stdout</a>
+</li>
+</ul>
+
+
+<h3><a id="index_t"></a>- t -</h3><ul>
+<li>terminate()
+: <a class="el" href="classwinapi_1_1Process.html#a155aefb272a151126fe2a65d583be880">winapi::Process</a>
+</li>
+<li>to_string()
+: <a class="el" href="classwinapi_1_1CommandLine.html#ac47e738f255a85b3e0605d40c0124b24">winapi::CommandLine</a>
+</li>
+</ul>
+
+
+<h3><a id="index_w"></a>- w -</h3><ul>
+<li>wait()
+: <a class="el" href="classwinapi_1_1Process.html#a273dcbc8cd69539d0f9fd4d1e09e67a7">winapi::Process</a>
+</li>
+<li>write()
+: <a class="el" href="classwinapi_1_1Handle.html#afbfe1b7de229eb5656504e05acf9bbcc">winapi::Handle</a>
+</li>
+<li>write_end()
+: <a class="el" href="classwinapi_1_1Pipe.html#a19e504588020c68639154ed597151cd6">winapi::Pipe</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/handle_8cpp_source.html b/handle_8cpp_source.html
new file mode 100644
index 0000000..f27d365
--- /dev/null
+++ b/handle_8cpp_source.html
@@ -0,0 +1,225 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: src/handle.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">handle.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &lt;winapi/buffer.hpp&gt;</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="error_8hpp.html">winapi/error.hpp</a>&gt;</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;winapi/handle.hpp&gt;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;winapi/utils.hpp&gt;</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; </div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;windows.h&gt;</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;cassert&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">namespace </span>{</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;std::runtime_error write_file_incomplete(std::size_t expected, std::size_t actual) {</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; std::ostringstream oss;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; oss &lt;&lt; <span class="stringliteral">&quot;WriteFile could only write &quot;</span> &lt;&lt; actual &lt;&lt; <span class="stringliteral">&quot; bytes instead of &quot;</span> &lt;&lt; expected;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">return</span> std::runtime_error{oss.str()};</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keywordtype">bool</span> is_std_handle(HANDLE handle) {</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">return</span> handle == ::GetStdHandle(STD_INPUT_HANDLE) ||</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; handle == ::GetStdHandle(STD_OUTPUT_HANDLE) ||</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; handle == ::GetStdHandle(STD_ERROR_HANDLE);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;}</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;} <span class="comment">// namespace</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;Handle::Handle(HANDLE impl) : m_impl{impl} {}</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keywordtype">bool</span> Handle::is_valid()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordflow">return</span> m_impl &amp;&amp; is_valid(m_impl.get());</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;}</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="keywordtype">bool</span> Handle::is_valid(HANDLE handle) {</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordflow">return</span> handle != NULL &amp;&amp; handle != INVALID_HANDLE_VALUE;</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classwinapi_1_1Handle.html#a6f28cc73ae2e3e447251cef0160e3555"> 47</a></span>&#160;<span class="keywordtype">void</span> Handle::close() {</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; m_impl.reset();</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;}</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; </div>
+<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classwinapi_1_1Handle.html#acc001a0f466d9c92cf7f2ef62896afc5"> 51</a></span>&#160;<span class="keywordtype">bool</span> Handle::is_std()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">return</span> is_std_handle(m_impl.get());</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;}</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classwinapi_1_1Handle.html#a1817fdf127291cf5f47d6429d8f468cd"> 55</a></span>&#160;<a class="code" href="classwinapi_1_1Handle.html">Handle</a> Handle::std_in() {</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classwinapi_1_1Handle.html">Handle</a>{::GetStdHandle(STD_INPUT_HANDLE)};</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;}</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
+<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classwinapi_1_1Handle.html#a76e96327afd0b943d996c90289f2883e"> 59</a></span>&#160;<a class="code" href="classwinapi_1_1Handle.html">Handle</a> Handle::std_out() {</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classwinapi_1_1Handle.html">Handle</a>{::GetStdHandle(STD_OUTPUT_HANDLE)};</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;}</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
+<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classwinapi_1_1Handle.html#a894d880e1241c9516889a7a63a0c1750"> 63</a></span>&#160;<a class="code" href="classwinapi_1_1Handle.html">Handle</a> Handle::std_err() {</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classwinapi_1_1Handle.html">Handle</a>{::GetStdHandle(STD_ERROR_HANDLE)};</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;}</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
+<div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classwinapi_1_1Handle.html#a31c8440493e29cdd9b6fc40ffe8c06f1"> 67</a></span>&#160;<span class="keywordtype">bool</span> Handle::read_chunk(<a class="code" href="classwinapi_1_1Buffer.html">Buffer</a>&amp; buffer)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; buffer.resize(max_chunk_size);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; DWORD nb_read = 0;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">if</span> (buffer.size() &gt; std::numeric_limits&lt;DWORD&gt;::max())</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">throw</span> std::range_error{<span class="stringliteral">&quot;Read buffer is too large&quot;</span>};</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> ret =</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; ::ReadFile(m_impl.get(), buffer.data(), <span class="keyword">static_cast&lt;</span>DWORD<span class="keyword">&gt;</span>(buffer.size()), &amp;nb_read, NULL);</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; buffer.resize(nb_read);</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">if</span> (ret) {</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">return</span> nb_read != 0;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> ec = GetLastError();</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; </div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">switch</span> (ec) {</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">case</span> ERROR_BROKEN_PIPE:</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="comment">// We&#39;ve been reading from an anonymous pipe, and it&#39;s been closed.</span></div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">throw</span> error::windows(ec, <span class="stringliteral">&quot;ReadFile&quot;</span>);</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;}</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classwinapi_1_1Handle.html#ae340b095569654f8b709614f23577f2e"> 93</a></span>&#160;<a class="code" href="classwinapi_1_1Buffer.html">Buffer</a> Handle::read()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="classwinapi_1_1Buffer.html">Buffer</a> buffer;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">true</span>) {</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <a class="code" href="classwinapi_1_1Buffer.html">Buffer</a> chunk;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> next = read_chunk(chunk);</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; buffer.<a class="code" href="classwinapi_1_1Buffer.html#a303645b281fb4f1a4d9e84f1d1370182">add</a>(chunk);</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (!next) {</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">return</span> buffer;</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;}</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
+<div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classwinapi_1_1Handle.html#afbfe1b7de229eb5656504e05acf9bbcc"> 109</a></span>&#160;<span class="keywordtype">void</span> Handle::write(<span class="keyword">const</span> <span class="keywordtype">void</span>* data, std::size_t nb)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; DWORD nb_written = 0;</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; </div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">if</span> (nb &gt; std::numeric_limits&lt;DWORD&gt;::max())</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">throw</span> std::range_error{<span class="stringliteral">&quot;Write buffer is too large&quot;</span>};</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> ret = ::WriteFile(m_impl.get(), data, <span class="keyword">static_cast&lt;</span>DWORD<span class="keyword">&gt;</span>(nb), &amp;nb_written, NULL);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; </div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (!ret) {</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;WriteFile&quot;</span>);</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; }</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; </div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">if</span> (nb != nb_written) {</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">throw</span> write_file_incomplete(nb, nb_written);</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;}</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; </div>
+<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classwinapi_1_1Handle.html#aee2ff37831d686a8140403c10d7ebadd"> 125</a></span>&#160;<span class="keywordtype">void</span> Handle::write(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1Buffer.html">Buffer</a>&amp; buffer)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; write(buffer.data(), buffer.size());</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;}</div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; </div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="keywordtype">void</span> Handle::inherit(<span class="keywordtype">bool</span> yes)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">if</span> (!::SetHandleInformation(m_impl.get(), HANDLE_FLAG_INHERIT, yes ? 1 : 0)) {</div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;SetHandleInformation&quot;</span>);</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;}</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="keywordtype">void</span> Handle::Close::operator()(HANDLE impl)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span> (!is_valid(impl) || is_std_handle(impl))</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> ret = ::CloseHandle(impl);</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; assert(ret);</div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; WINAPI_UNUSED_PARAMETER(ret);</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;}</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1Buffer_html"><div class="ttname"><a href="classwinapi_1_1Buffer.html">winapi::Buffer</a></div><div class="ttdoc">Binary data container.</div><div class="ttdef"><b>Definition:</b> <a href="buffer_8hpp_source.html#l00024">buffer.hpp:24</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Buffer_html_a303645b281fb4f1a4d9e84f1d1370182"><div class="ttname"><a href="classwinapi_1_1Buffer.html#a303645b281fb4f1a4d9e84f1d1370182">winapi::Buffer::add</a></div><div class="ttdeci">void add(const Buffer &amp;src)</div><div class="ttdef"><b>Definition:</b> <a href="buffer_8hpp_source.html#l00079">buffer.hpp:79</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html"><div class="ttname"><a href="classwinapi_1_1Handle.html">winapi::Handle</a></div><div class="ttdoc">HANDLE wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="handle_8hpp_source.html#l00025">handle.hpp:25</a></div></div>
+<div class="ttc" id="aerror_8hpp_html"><div class="ttname"><a href="error_8hpp.html">error.hpp</a></div><div class="ttdoc">Make std::system_error work with GetLastError().</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/handle_8hpp_source.html b/handle_8hpp_source.html
new file mode 100644
index 0000000..179b098
--- /dev/null
+++ b/handle_8hpp_source.html
@@ -0,0 +1,152 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: include/winapi/handle.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1714771db42b7b5a0cd2ebe6e9736ed.html">winapi</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">handle.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;buffer.hpp&quot;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; </div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;windows.h&gt;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classwinapi_1_1Handle.html"> 25</a></span>&#160;<span class="keyword">class </span><a class="code" href="classwinapi_1_1Handle.html">Handle</a> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="classwinapi_1_1Handle.html">Handle</a>() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classwinapi_1_1Handle.html">Handle</a>(HANDLE);</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; HANDLE get()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_impl.get(); }</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; HANDLE ptr()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> get(); }</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">explicit</span> <span class="keyword">operator</span> HANDLE()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ptr(); }</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">bool</span> is_valid() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> is_valid(HANDLE);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classwinapi_1_1Handle.html#a6f28cc73ae2e3e447251cef0160e3555">close</a>();</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classwinapi_1_1Handle.html#acc001a0f466d9c92cf7f2ef62896afc5">is_std</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1Handle.html">Handle</a> <a class="code" href="classwinapi_1_1Handle.html#a1817fdf127291cf5f47d6429d8f468cd">std_in</a>();</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1Handle.html">Handle</a> <a class="code" href="classwinapi_1_1Handle.html#a76e96327afd0b943d996c90289f2883e">std_out</a>();</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1Handle.html">Handle</a> <a class="code" href="classwinapi_1_1Handle.html#a894d880e1241c9516889a7a63a0c1750">std_err</a>();</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="classwinapi_1_1Buffer.html">Buffer</a> <a class="code" href="classwinapi_1_1Handle.html#ae340b095569654f8b709614f23577f2e">read</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">static</span> constexpr std::size_t max_chunk_size = 16 * 1024;</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classwinapi_1_1Handle.html#a31c8440493e29cdd9b6fc40ffe8c06f1">read_chunk</a>(<a class="code" href="classwinapi_1_1Buffer.html">Buffer</a>&amp; <a class="code" href="classwinapi_1_1Handle.html#a31c8440493e29cdd9b6fc40ffe8c06f1">read_chunk</a>) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classwinapi_1_1Handle.html#afbfe1b7de229eb5656504e05acf9bbcc">write</a>(<span class="keyword">const</span> <span class="keywordtype">void</span>* data, std::size_t nb) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classwinapi_1_1Handle.html#afbfe1b7de229eb5656504e05acf9bbcc">write</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1Buffer.html">Buffer</a>&amp; buffer) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> CharT&gt;</div>
+<div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="classwinapi_1_1Handle.html#ab78fab4796ef5ec3f9576f19b54cfd04"> 78</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classwinapi_1_1Handle.html#ab78fab4796ef5ec3f9576f19b54cfd04">write</a>(<span class="keyword">const</span> std::basic_string&lt;CharT&gt;&amp; src)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="classwinapi_1_1Handle.html#afbfe1b7de229eb5656504e05acf9bbcc">write</a>(src.c_str(), src.size() * <span class="keyword">sizeof</span>(CharT));</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordtype">void</span> inherit(<span class="keywordtype">bool</span> yes = <span class="keyword">true</span>) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordtype">void</span> dont_inherit()<span class="keyword"> const </span>{ inherit(<span class="keyword">false</span>); }</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; </div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">struct </span>Close {</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordtype">void</span> operator()(HANDLE) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; };</div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; </div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; std::unique_ptr&lt;void, Close&gt; m_impl;</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;};</div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1Buffer_html"><div class="ttname"><a href="classwinapi_1_1Buffer.html">winapi::Buffer</a></div><div class="ttdoc">Binary data container.</div><div class="ttdef"><b>Definition:</b> <a href="buffer_8hpp_source.html#l00024">buffer.hpp:24</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html"><div class="ttname"><a href="classwinapi_1_1Handle.html">winapi::Handle</a></div><div class="ttdoc">HANDLE wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="handle_8hpp_source.html#l00025">handle.hpp:25</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html_a1817fdf127291cf5f47d6429d8f468cd"><div class="ttname"><a href="classwinapi_1_1Handle.html#a1817fdf127291cf5f47d6429d8f468cd">winapi::Handle::std_in</a></div><div class="ttdeci">static Handle std_in()</div><div class="ttdef"><b>Definition:</b> <a href="handle_8cpp_source.html#l00055">handle.cpp:55</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html_a31c8440493e29cdd9b6fc40ffe8c06f1"><div class="ttname"><a href="classwinapi_1_1Handle.html#a31c8440493e29cdd9b6fc40ffe8c06f1">winapi::Handle::read_chunk</a></div><div class="ttdeci">bool read_chunk(Buffer &amp;read_chunk) const</div><div class="ttdef"><b>Definition:</b> <a href="handle_8cpp_source.html#l00067">handle.cpp:67</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html_a6f28cc73ae2e3e447251cef0160e3555"><div class="ttname"><a href="classwinapi_1_1Handle.html#a6f28cc73ae2e3e447251cef0160e3555">winapi::Handle::close</a></div><div class="ttdeci">void close()</div><div class="ttdef"><b>Definition:</b> <a href="handle_8cpp_source.html#l00047">handle.cpp:47</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html_a76e96327afd0b943d996c90289f2883e"><div class="ttname"><a href="classwinapi_1_1Handle.html#a76e96327afd0b943d996c90289f2883e">winapi::Handle::std_out</a></div><div class="ttdeci">static Handle std_out()</div><div class="ttdef"><b>Definition:</b> <a href="handle_8cpp_source.html#l00059">handle.cpp:59</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html_a894d880e1241c9516889a7a63a0c1750"><div class="ttname"><a href="classwinapi_1_1Handle.html#a894d880e1241c9516889a7a63a0c1750">winapi::Handle::std_err</a></div><div class="ttdeci">static Handle std_err()</div><div class="ttdef"><b>Definition:</b> <a href="handle_8cpp_source.html#l00063">handle.cpp:63</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html_ab78fab4796ef5ec3f9576f19b54cfd04"><div class="ttname"><a href="classwinapi_1_1Handle.html#ab78fab4796ef5ec3f9576f19b54cfd04">winapi::Handle::write</a></div><div class="ttdeci">void write(const std::basic_string&lt; CharT &gt; &amp;src) const</div><div class="ttdef"><b>Definition:</b> <a href="handle_8hpp_source.html#l00078">handle.hpp:78</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html_acc001a0f466d9c92cf7f2ef62896afc5"><div class="ttname"><a href="classwinapi_1_1Handle.html#acc001a0f466d9c92cf7f2ef62896afc5">winapi::Handle::is_std</a></div><div class="ttdeci">bool is_std() const</div><div class="ttdef"><b>Definition:</b> <a href="handle_8cpp_source.html#l00051">handle.cpp:51</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html_ae340b095569654f8b709614f23577f2e"><div class="ttname"><a href="classwinapi_1_1Handle.html#ae340b095569654f8b709614f23577f2e">winapi::Handle::read</a></div><div class="ttdeci">Buffer read() const</div><div class="ttdef"><b>Definition:</b> <a href="handle_8cpp_source.html#l00093">handle.cpp:93</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html_afbfe1b7de229eb5656504e05acf9bbcc"><div class="ttname"><a href="classwinapi_1_1Handle.html#afbfe1b7de229eb5656504e05acf9bbcc">winapi::Handle::write</a></div><div class="ttdeci">void write(const void *data, std::size_t nb) const</div><div class="ttdef"><b>Definition:</b> <a href="handle_8cpp_source.html#l00109">handle.cpp:109</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/hierarchy.html b/hierarchy.html
new file mode 100644
index 0000000..e4cf3b6
--- /dev/null
+++ b/hierarchy.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Class Hierarchy</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Class Hierarchy</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1CanonicalPath.html" target="_self">winapi::CanonicalPath</a></td><td class="desc">Absolute, canonical path </td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1CommandLine.html" target="_self">winapi::CommandLine</a></td><td class="desc">Command line for the current process or for launching new processes </td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>std::error_category</b></td><td class="desc"></td></tr>
+<tr id="row_2_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1error_1_1CategoryWindows.html" target="_self">winapi::error::CategoryWindows</a></td><td class="desc"></td></tr>
+<tr id="row_3_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_3_" class="arrow" onclick="toggleFolder('3_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1Handle.html" target="_self">winapi::Handle</a></td><td class="desc">HANDLE wrapper </td></tr>
+<tr id="row_3_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1File.html" target="_self">winapi::File</a></td><td class="desc"><a class="el" href="classwinapi_1_1File.html" title="File I/O.">File</a> I/O </td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4.html" target="_self">std::hash&lt; winapi::File::ID &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1File_1_1ID.html" target="_self">winapi::File::ID</a></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1process_1_1IO.html" target="_self">winapi::process::IO</a></td><td class="desc">Child process <a class="el" href="structwinapi_1_1process_1_1IO.html" title="Child process IO settings.">IO</a> settings </td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1LocalDelete.html" target="_self">winapi::LocalDelete</a></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1Pipe.html" target="_self">winapi::Pipe</a></td><td class="desc">Anonymous pipe wrapper </td></tr>
+<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1Process.html" target="_self">winapi::Process</a></td><td class="desc">Create a new process or open an existing process </td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_10_" class="arrow" onclick="toggleFolder('10_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1ProcessParameters.html" target="_self">winapi::ProcessParameters</a></td><td class="desc"><a class="el" href="classwinapi_1_1Process.html" title="Create a new process or open an existing process.">Process</a> parameters for <a class="el" href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">Process::create()</a> </td></tr>
+<tr id="row_10_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1ShellParameters.html" target="_self">winapi::ShellParameters</a></td><td class="desc"><a class="el" href="classwinapi_1_1Process.html" title="Create a new process or open an existing process.">Process</a> parameters for <a class="el" href="classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e">Process::shell()</a> </td></tr>
+<tr id="row_11_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1Resource.html" target="_self">winapi::Resource</a></td><td class="desc">Resources embedded in a PE (Portable Executable) </td></tr>
+<tr id="row_12_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1SharedMemory.html" target="_self">winapi::SharedMemory</a></td><td class="desc">Named shared memory region </td></tr>
+<tr id="row_13_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1SharedObject.html" target="_self">winapi::SharedObject&lt; T &gt;</a></td><td class="desc">Easy way to represent a C++ object as a shared memory region </td></tr>
+<tr id="row_14_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1Sid.html" target="_self">winapi::Sid</a></td><td class="desc"></td></tr>
+<tr id="row_15_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_15_" class="arrow" onclick="toggleFolder('15_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1process_1_1Stream.html" target="_self">winapi::process::Stream</a></td><td class="desc"></td></tr>
+<tr id="row_15_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1process_1_1Stderr.html" target="_self">winapi::process::Stderr</a></td><td class="desc">Redirect child process's stderr </td></tr>
+<tr id="row_15_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1process_1_1Stdin.html" target="_self">winapi::process::Stdin</a></td><td class="desc">Redirect child process's stdin </td></tr>
+<tr id="row_15_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structwinapi_1_1process_1_1Stdout.html" target="_self">winapi::process::Stdout</a></td><td class="desc">Redirect child process's stdout </td></tr>
+<tr id="row_16_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_16_" class="arrow" onclick="toggleFolder('16_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>std::vector</b></td><td class="desc"></td></tr>
+<tr id="row_16_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classwinapi_1_1Buffer.html" target="_self">winapi::Buffer</a></td><td class="desc">Binary data container </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..6699400
--- /dev/null
+++ b/index.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi-common</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="PageDoc"><div class="header">
+ <div class="headertitle">
+<div class="title">winapi-common </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p><a class="anchor" id="md_README"></a></p>
+<p><a href="https://github.com/egor-tensin/winapi-common/actions/workflows/ci.yml"><img src="https://github.com/egor-tensin/winapi-common/actions/workflows/ci.yml/badge.svg" alt="CI" style="pointer-events: none;" class="inline"/></a></p>
+<p>C++ wrappers for various common WinAPI entities I've had to use in various projects over the years.</p>
+<h1><a class="anchor" id="autotoc_md0"></a>
+Development</h1>
+<p>Build using CMake. Depends on Boost.Test and Python 3 for running the tests. The project is Windows-only, so building with either MSVC or MinGW-w64 is required.</p>
+<p>There's a Makefile with useful shortcuts to build the project in the build/ directory (defaults to building with MinGW-w64): </p><pre class="fragment">make deps
+make build
+make test
+</pre> <h1><a class="anchor" id="autotoc_md1"></a>
+Documentation</h1>
+<p>Build &amp; display the documentation using </p><pre class="fragment">make docs
+</pre><p> View the online documentation at <a href="https://egor-tensin.github.io/winapi-common/">https://egor-tensin.github.io/winapi-common/</a>.</p>
+<h1><a class="anchor" id="autotoc_md2"></a>
+License</h1>
+<p>Distributed under the MIT License. See <a href="LICENSE.txt">LICENSE.txt</a> for details. </p>
+</div></div><!-- PageDoc -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/jquery.js b/jquery.js
new file mode 100644
index 0000000..103c32d
--- /dev/null
+++ b/jquery.js
@@ -0,0 +1,35 @@
+/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}k.fn=k.prototype={jquery:f,constructor:k,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=k.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return k.each(this,e)},map:function(n){return this.pushStack(k.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},k.extend=k.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(k.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||k.isPlainObject(n)?n:{},i=!1,a[t]=k.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},k.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t){b(e,{nonce:t&&t.nonce})},each:function(e,t){var n,r=0;if(d(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(p,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(d(Object(e))?k.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(d(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g.apply([],a)},guid:1,support:y}),"function"==typeof Symbol&&(k.fn[Symbol.iterator]=t[Symbol.iterator]),k.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var h=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,k="sizzle"+1*new Date,m=n.document,S=0,r=0,p=ue(),x=ue(),N=ue(),A=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",$=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",F=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="<a id='"+k+"'></a><select id='"+k+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!==C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!==C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(F," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[S,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[S,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[k]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,"$1"));return s[k]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[S,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[k]||(e[k]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===S&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[k]&&(v=Ce(v)),y&&!y[k]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[k]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(B,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=N[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[k]?i.push(a):o.push(a);(a=N(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=S+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t===C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument===C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(S=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(S=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=k.split("").sort(D).join("")===k,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);k.find=h,k.expr=h.selectors,k.expr[":"]=k.expr.pseudos,k.uniqueSort=k.unique=h.uniqueSort,k.text=h.getText,k.isXMLDoc=h.isXML,k.contains=h.contains,k.escapeSelector=h.escape;var T=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&k(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},N=k.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var D=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1<i.call(n,e)!==r}):k.filter(n,e,r)}k.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?k.find.matchesSelector(r,e)?[r]:[]:k.find.matches(e,k.grep(t,function(e){return 1===e.nodeType}))},k.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(k(e).filter(function(){for(t=0;t<r;t++)if(k.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)k.find(e,i[t],n);return 1<r?k.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&N.test(e)?k(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(k.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&k(e);if(!N.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&k.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?k.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(k(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(k.uniqueSort(k.merge(this.get(),k(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),k.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return T(e,"parentNode")},parentsUntil:function(e,t,n){return T(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return T(e,"nextSibling")},prevAll:function(e){return T(e,"previousSibling")},nextUntil:function(e,t,n){return T(e,"nextSibling",n)},prevUntil:function(e,t,n){return T(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return"undefined"!=typeof e.contentDocument?e.contentDocument:(A(e,"template")&&(e=e.content||e),k.merge([],e.childNodes))}},function(r,i){k.fn[r]=function(e,t){var n=k.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=k.filter(t,n)),1<this.length&&(O[r]||k.uniqueSort(n),H.test(r)&&n.reverse()),this.pushStack(n)}});var R=/[^\x20\t\r\n\f]+/g;function M(e){return e}function I(e){throw e}function W(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}k.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},k.each(e.match(R)||[],function(e,t){n[t]=!0}),n):k.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){k.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return k.each(arguments,function(e,t){var n;while(-1<(n=k.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<k.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},k.extend({Deferred:function(e){var o=[["notify","progress",k.Callbacks("memory"),k.Callbacks("memory"),2],["resolve","done",k.Callbacks("once memory"),k.Callbacks("once memory"),0,"resolved"],["reject","fail",k.Callbacks("once memory"),k.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return k.Deferred(function(r){k.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,M,s),l(u,o,I,s)):(u++,t.call(e,l(u,o,M,s),l(u,o,I,s),l(u,o,M,o.notifyWith))):(a!==M&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){k.Deferred.exceptionHook&&k.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==I&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(k.Deferred.getStackHook&&(t.stackTrace=k.Deferred.getStackHook()),C.setTimeout(t))}}return k.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:M,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:M)),o[2][3].add(l(0,e,m(n)?n:I))}).promise()},promise:function(e){return null!=e?k.extend(e,a):a}},s={};return k.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=k.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(W(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)W(i[t],a(t),o.reject);return o.promise()}});var $=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;k.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&$.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},k.readyException=function(e){C.setTimeout(function(){throw e})};var F=k.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),k.ready()}k.fn.ready=function(e){return F.then(e)["catch"](function(e){k.readyException(e)}),this},k.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--k.readyWait:k.isReady)||(k.isReady=!0)!==e&&0<--k.readyWait||F.resolveWith(E,[k])}}),k.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(k.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var _=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)_(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(k(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},z=/^-ms-/,U=/-([a-z])/g;function X(e,t){return t.toUpperCase()}function V(e){return e.replace(z,"ms-").replace(U,X)}var G=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Y(){this.expando=k.expando+Y.uid++}Y.uid=1,Y.prototype={cache:function(e){var t=e[this.expando];return t||(t={},G(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[V(t)]=n;else for(r in t)i[V(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][V(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(V):(t=V(t))in r?[t]:t.match(R)||[]).length;while(n--)delete r[t[n]]}(void 0===t||k.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!k.isEmptyObject(t)}};var Q=new Y,J=new Y,K=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function ee(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Z,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:K.test(i)?JSON.parse(i):i)}catch(e){}J.set(e,t,n)}else n=void 0;return n}k.extend({hasData:function(e){return J.hasData(e)||Q.hasData(e)},data:function(e,t,n){return J.access(e,t,n)},removeData:function(e,t){J.remove(e,t)},_data:function(e,t,n){return Q.access(e,t,n)},_removeData:function(e,t){Q.remove(e,t)}}),k.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=J.get(o),1===o.nodeType&&!Q.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=V(r.slice(5)),ee(o,r,i[r]));Q.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){J.set(this,n)}):_(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=J.get(o,n))?t:void 0!==(t=ee(o,n))?t:void 0;this.each(function(){J.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){J.remove(this,e)})}}),k.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Q.get(e,t),n&&(!r||Array.isArray(n)?r=Q.access(e,t,k.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=k.queue(e,t),r=n.length,i=n.shift(),o=k._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){k.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Q.get(e,n)||Q.access(e,n,{empty:k.Callbacks("once memory").add(function(){Q.remove(e,[t+"queue",n])})})}}),k.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?k.queue(this[0],t):void 0===n?this:this.each(function(){var e=k.queue(this,t,n);k._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&k.dequeue(this,t)})},dequeue:function(e){return this.each(function(){k.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=k.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Q.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var te=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ne=new RegExp("^(?:([+-])=|)("+te+")([a-z%]*)$","i"),re=["Top","Right","Bottom","Left"],ie=E.documentElement,oe=function(e){return k.contains(e.ownerDocument,e)},ae={composed:!0};ie.getRootNode&&(oe=function(e){return k.contains(e.ownerDocument,e)||e.getRootNode(ae)===e.ownerDocument});var se=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&oe(e)&&"none"===k.css(e,"display")},ue=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];for(o in i=n.apply(e,r||[]),t)e.style[o]=a[o];return i};function le(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return k.css(e,t,"")},u=s(),l=n&&n[3]||(k.cssNumber[t]?"":"px"),c=e.nodeType&&(k.cssNumber[t]||"px"!==l&&+u)&&ne.exec(k.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)k.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,k.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ce={};function fe(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Q.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&se(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ce[s])||(o=a.body.appendChild(a.createElement(s)),u=k.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ce[s]=u)))):"none"!==n&&(l[c]="none",Q.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}k.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){se(this)?k(this).show():k(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Q.set(e[n],"globalEval",!t||Q.get(t[n],"globalEval"))}ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;var me,xe,be=/<|&#?\w+;/;function we(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))k.merge(p,o.nodeType?[o]:o);else if(be.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+k.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;k.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<k.inArray(o,r))i&&i.push(o);else if(l=oe(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}me=E.createDocumentFragment().appendChild(E.createElement("div")),(xe=E.createElement("input")).setAttribute("type","radio"),xe.setAttribute("checked","checked"),xe.setAttribute("name","t"),me.appendChild(xe),y.checkClone=me.cloneNode(!0).cloneNode(!0).lastChild.checked,me.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,s)){a=k.event.handlers.call(this,s,l),t=0;while((i=a[t++])&&!s.isPropagationStopped()){s.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!s.isImmediatePropagationStopped())s.rnamespace&&!1!==o.namespace&&!s.rnamespace.test(o.namespace)||(s.handleObj=o,s.data=o.data,void 0!==(r=((k.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<k(i,this).index(l):k.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(k.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[k.expando]?e:new k.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&De(t,"click",ke),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&De(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Q.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},k.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},k.Event=function(e,t){if(!(this instanceof k.Event))return new k.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?ke:Se,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&k.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[k.expando]=!0},k.Event.prototype={constructor:k.Event,isDefaultPrevented:Se,isPropagationStopped:Se,isImmediatePropagationStopped:Se,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=ke,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=ke,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=ke,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},k.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Te.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Ce.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},k.event.addProp),k.each({focus:"focusin",blur:"focusout"},function(e,t){k.event.special[e]={setup:function(){return De(this,e,Ne),!1},trigger:function(){return De(this,e),!0},delegateType:t}}),k.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){k.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||k.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),k.fn.extend({on:function(e,t,n,r){return Ae(this,e,t,n,r)},one:function(e,t,n,r){return Ae(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,k(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Se),this.each(function(){k.event.remove(this,e,n,t)})}});var je=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/<script|<style|<link/i,Le=/checked\s*(?:[^=]|=\s*.checked.)/i,He=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n<r;n++)k.event.add(t,i,l[i][n]);J.hasData(e)&&(s=J.access(e),u=k.extend({},s),J.set(t,u))}}function Ie(n,r,i,o){r=g.apply([],r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Le.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Ie(t,r,i,o)});if(f&&(t=(e=we(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=k.map(ve(e,"script"),Pe)).length;c<f;c++)u=e,c!==p&&(u=k.clone(u,!0,!0),s&&k.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,k.map(a,Re),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Q.access(u,"globalEval")&&k.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?k._evalUrl&&!u.noModule&&k._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")}):b(u.textContent.replace(He,""),u,l))}return n}function We(e,t,n){for(var r,i=t?k.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||k.cleanData(ve(r)),r.parentNode&&(n&&oe(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}k.extend({htmlPrefilter:function(e){return e.replace(je,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Me(o[r],a[r]);else Me(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=k.event.special,o=0;void 0!==(n=e[o]);o++)if(G(n)){if(t=n[Q.expando]){if(t.events)for(r in t.events)i[r]?k.event.remove(n,r):k.removeEvent(n,r,t.handle);n[Q.expando]=void 0}n[J.expando]&&(n[J.expando]=void 0)}}}),k.fn.extend({detach:function(e){return We(this,e,!0)},remove:function(e){return We(this,e)},text:function(e){return _(this,function(e){return void 0===e?k.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Ie(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Oe(this,e).appendChild(e)})},prepend:function(){return Ie(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Oe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(k.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return k.clone(this,e,t)})},html:function(e){return _(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!qe.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=k.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(k.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Ie(this,arguments,function(e){var t=this.parentNode;k.inArray(this,n)<0&&(k.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),k.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){k.fn[e]=function(e){for(var t,n=[],r=k(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),k(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var $e=new RegExp("^("+te+")(?!px)[a-z%]+$","i"),Fe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Be=new RegExp(re.join("|"),"i");function _e(e,t,n){var r,i,o,a,s=e.style;return(n=n||Fe(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||oe(e)||(a=k.style(e,t)),!y.pixelBoxStyles()&&$e.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function ze(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(u){s.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",u.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",ie.appendChild(s).appendChild(u);var e=C.getComputedStyle(u);n="1%"!==e.top,a=12===t(e.marginLeft),u.style.right="60%",o=36===t(e.right),r=36===t(e.width),u.style.position="absolute",i=12===t(u.offsetWidth/3),ie.removeChild(s),u=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s=E.createElement("div"),u=E.createElement("div");u.style&&(u.style.backgroundClip="content-box",u.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===u.style.backgroundClip,k.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),a},scrollboxSize:function(){return e(),i}}))}();var Ue=["Webkit","Moz","ms"],Xe=E.createElement("div").style,Ve={};function Ge(e){var t=k.cssProps[e]||Ve[e];return t||(e in Xe?e:Ve[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Ue.length;while(n--)if((e=Ue[n]+t)in Xe)return e}(e)||e)}var Ye=/^(none|table(?!-c[ea]).+)/,Qe=/^--/,Je={position:"absolute",visibility:"hidden",display:"block"},Ke={letterSpacing:"0",fontWeight:"400"};function Ze(e,t,n){var r=ne.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function et(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=k.css(e,n+re[a],!0,i)),r?("content"===n&&(u-=k.css(e,"padding"+re[a],!0,i)),"margin"!==n&&(u-=k.css(e,"border"+re[a]+"Width",!0,i))):(u+=k.css(e,"padding"+re[a],!0,i),"padding"!==n?u+=k.css(e,"border"+re[a]+"Width",!0,i):s+=k.css(e,"border"+re[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function tt(e,t,n){var r=Fe(e),i=(!y.boxSizingReliable()||n)&&"border-box"===k.css(e,"boxSizing",!1,r),o=i,a=_e(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if($e.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||"auto"===a||!parseFloat(a)&&"inline"===k.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===k.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+et(e,t,n||(i?"border":"content"),o,r,a)+"px"}function nt(e,t,n,r,i){return new nt.prototype.init(e,t,n,r,i)}k.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=_e(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=V(t),u=Qe.test(t),l=e.style;if(u||(t=Ge(s)),a=k.cssHooks[t]||k.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=ne.exec(n))&&i[1]&&(n=le(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(k.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=V(t);return Qe.test(t)||(t=Ge(s)),(a=k.cssHooks[t]||k.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=_e(e,t,r)),"normal"===i&&t in Ke&&(i=Ke[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),k.each(["height","width"],function(e,u){k.cssHooks[u]={get:function(e,t,n){if(t)return!Ye.test(k.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?tt(e,u,n):ue(e,Je,function(){return tt(e,u,n)})},set:function(e,t,n){var r,i=Fe(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===k.css(e,"boxSizing",!1,i),s=n?et(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-et(e,u,"border",!1,i)-.5)),s&&(r=ne.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=k.css(e,u)),Ze(0,t,s)}}}),k.cssHooks.marginLeft=ze(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(_e(e,"marginLeft"))||e.getBoundingClientRect().left-ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),k.each({margin:"",padding:"",border:"Width"},function(i,o){k.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+re[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(k.cssHooks[i+o].set=Ze)}),k.fn.extend({css:function(e,t){return _(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Fe(e),i=t.length;a<i;a++)o[t[a]]=k.css(e,t[a],!1,r);return o}return void 0!==n?k.style(e,t,n):k.css(e,t)},e,t,1<arguments.length)}}),((k.Tween=nt).prototype={constructor:nt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||k.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(k.cssNumber[n]?"":"px")},cur:function(){var e=nt.propHooks[this.prop];return e&&e.get?e.get(this):nt.propHooks._default.get(this)},run:function(e){var t,n=nt.propHooks[this.prop];return this.options.duration?this.pos=t=k.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):nt.propHooks._default.set(this),this}}).init.prototype=nt.prototype,(nt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=k.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){k.fx.step[e.prop]?k.fx.step[e.prop](e):1!==e.elem.nodeType||!k.cssHooks[e.prop]&&null==e.elem.style[Ge(e.prop)]?e.elem[e.prop]=e.now:k.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=nt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},k.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},k.fx=nt.prototype.init,k.fx.step={};var rt,it,ot,at,st=/^(?:toggle|show|hide)$/,ut=/queueHooks$/;function lt(){it&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(lt):C.setTimeout(lt,k.fx.interval),k.fx.tick())}function ct(){return C.setTimeout(function(){rt=void 0}),rt=Date.now()}function ft(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=re[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function pt(e,t,n){for(var r,i=(dt.tweeners[t]||[]).concat(dt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function dt(o,e,t){var n,a,r=0,i=dt.prefilters.length,s=k.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=rt||ct(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:k.extend({},e),opts:k.extend(!0,{specialEasing:{},easing:k.easing._default},t),originalProperties:e,originalOptions:t,startTime:rt||ct(),duration:t.duration,tweens:[],createTween:function(e,t){var n=k.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=V(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=k.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=dt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(k._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return k.map(c,pt,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),k.fx.timer(k.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}k.Animation=k.extend(dt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return le(n.elem,e,ne.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(R);for(var n,r=0,i=e.length;r<i;r++)n=e[r],dt.tweeners[n]=dt.tweeners[n]||[],dt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&se(e),v=Q.get(e,"fxshow");for(r in n.queue||(null==(a=k._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,k.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],st.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||k.style(e,r)}if((u=!k.isEmptyObject(t))||!k.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Q.get(e,"display")),"none"===(c=k.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=k.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===k.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Q.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&fe([e],!0),p.done(function(){for(r in g||fe([e]),Q.remove(e,"fxshow"),d)k.style(e,r,d[r])})),u=pt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?dt.prefilters.unshift(e):dt.prefilters.push(e)}}),k.speed=function(e,t,n){var r=e&&"object"==typeof e?k.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return k.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in k.fx.speeds?r.duration=k.fx.speeds[r.duration]:r.duration=k.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&k.dequeue(this,r.queue)},r},k.fn.extend({fadeTo:function(e,t,n,r){return this.filter(se).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=k.isEmptyObject(t),o=k.speed(e,n,r),a=function(){var e=dt(this,k.extend({},t),o);(i||Q.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&!1!==i&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=k.timers,r=Q.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&ut.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||k.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Q.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=k.timers,o=n?n.length:0;for(t.finish=!0,k.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),k.each(["toggle","show","hide"],function(e,r){var i=k.fn[r];k.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(ft(r,!0),e,t,n)}}),k.each({slideDown:ft("show"),slideUp:ft("hide"),slideToggle:ft("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){k.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),k.timers=[],k.fx.tick=function(){var e,t=0,n=k.timers;for(rt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||k.fx.stop(),rt=void 0},k.fx.timer=function(e){k.timers.push(e),k.fx.start()},k.fx.interval=13,k.fx.start=function(){it||(it=!0,lt())},k.fx.stop=function(){it=null},k.fx.speeds={slow:600,fast:200,_default:400},k.fn.delay=function(r,e){return r=k.fx&&k.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},ot=E.createElement("input"),at=E.createElement("select").appendChild(E.createElement("option")),ot.type="checkbox",y.checkOn=""!==ot.value,y.optSelected=at.selected,(ot=E.createElement("input")).value="t",ot.type="radio",y.radioValue="t"===ot.value;var ht,gt=k.expr.attrHandle;k.fn.extend({attr:function(e,t){return _(this,k.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){k.removeAttr(this,e)})}}),k.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?k.prop(e,t,n):(1===o&&k.isXMLDoc(e)||(i=k.attrHooks[t.toLowerCase()]||(k.expr.match.bool.test(t)?ht:void 0)),void 0!==n?null===n?void k.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=k.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(R);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ht={set:function(e,t,n){return!1===t?k.removeAttr(e,n):e.setAttribute(n,n),n}},k.each(k.expr.match.bool.source.match(/\w+/g),function(e,t){var a=gt[t]||k.find.attr;gt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=gt[o],gt[o]=r,r=null!=a(e,t,n)?o:null,gt[o]=i),r}});var vt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;function mt(e){return(e.match(R)||[]).join(" ")}function xt(e){return e.getAttribute&&e.getAttribute("class")||""}function bt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(R)||[]}k.fn.extend({prop:function(e,t){return _(this,k.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[k.propFix[e]||e]})}}),k.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&k.isXMLDoc(e)||(t=k.propFix[t]||t,i=k.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=k.find.attr(e,"tabindex");return t?parseInt(t,10):vt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(k.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),k.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){k.propFix[this.toLowerCase()]=this}),k.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).addClass(t.call(this,e,xt(this)))});if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&" "+mt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).removeClass(t.call(this,e,xt(this)))});if(!arguments.length)return this.attr("class","");if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&" "+mt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){k(this).toggleClass(i.call(this,e,xt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=k(this),r=bt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=xt(this))&&Q.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Q.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+mt(xt(n))+" ").indexOf(t))return!0;return!1}});var wt=/\r/g;k.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,k(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=k.map(t,function(e){return null==e?"":e+""})),(r=k.valHooks[this.type]||k.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=k.valHooks[t.type]||k.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(wt,""):null==e?"":e:void 0}}),k.extend({valHooks:{option:{get:function(e){var t=k.find.attr(e,"value");return null!=t?t:mt(k.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=k(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=k.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<k.inArray(k.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),k.each(["radio","checkbox"],function(){k.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<k.inArray(k(e).val(),t)}},y.checkOn||(k.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var Tt=/^(?:focusinfocus|focusoutblur)$/,Ct=function(e){e.stopPropagation()};k.extend(k.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!Tt.test(d+k.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[k.expando]?e:new k.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:k.makeArray(t,[e]),c=k.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,Tt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Q.get(o,"events")||{})[e.type]&&Q.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&G(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!G(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),k.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Ct),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Ct),k.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=k.extend(new k.Event,n,{type:e,isSimulated:!0});k.event.trigger(r,null,t)}}),k.fn.extend({trigger:function(e,t){return this.each(function(){k.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return k.event.trigger(e,t,n,!0)}}),y.focusin||k.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){k.event.simulate(r,e.target,k.event.fix(e))};k.event.special[r]={setup:function(){var e=this.ownerDocument||this,t=Q.access(e,r);t||e.addEventListener(n,i,!0),Q.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this,t=Q.access(e,r)-1;t?Q.access(e,r,t):(e.removeEventListener(n,i,!0),Q.remove(e,r))}}});var Et=C.location,kt=Date.now(),St=/\?/;k.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||k.error("Invalid XML: "+e),t};var Nt=/\[\]$/,At=/\r?\n/g,Dt=/^(?:submit|button|image|reset|file)$/i,jt=/^(?:input|select|textarea|keygen)/i;function qt(n,e,r,i){var t;if(Array.isArray(e))k.each(e,function(e,t){r||Nt.test(n)?i(n,t):qt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)qt(n+"["+t+"]",e[t],r,i)}k.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!k.isPlainObject(e))k.each(e,function(){i(this.name,this.value)});else for(n in e)qt(n,e[n],t,i);return r.join("&")},k.fn.extend({serialize:function(){return k.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=k.prop(this,"elements");return e?k.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!k(this).is(":disabled")&&jt.test(this.nodeName)&&!Dt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=k(this).val();return null==n?null:Array.isArray(n)?k.map(n,function(e){return{name:t.name,value:e.replace(At,"\r\n")}}):{name:t.name,value:n.replace(At,"\r\n")}}).get()}});var Lt=/%20/g,Ht=/#.*$/,Ot=/([?&])_=[^&]*/,Pt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Rt=/^(?:GET|HEAD)$/,Mt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Ft=E.createElement("a");function Bt(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(R)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function _t(t,i,o,a){var s={},u=t===Wt;function l(e){var r;return s[e]=!0,k.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function zt(e,t){var n,r,i=k.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&k.extend(!0,e,r),e}Ft.href=Et.href,k.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":k.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,k.ajaxSettings),t):zt(k.ajaxSettings,e)},ajaxPrefilter:Bt(It),ajaxTransport:Bt(Wt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=k.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?k(y):k.event,x=k.Deferred(),b=k.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Pt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+"").replace(Mt,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(R)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Ft.protocol+"//"+Ft.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=k.param(v.data,v.traditional)),_t(It,v,t,T),h)return T;for(i in(g=k.event&&v.global)&&0==k.active++&&k.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Rt.test(v.type),f=v.url.replace(Ht,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Lt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(St.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Ot,"$1"),o=(St.test(f)?"&":"?")+"_="+kt+++o),v.url=f+o),v.ifModified&&(k.lastModified[f]&&T.setRequestHeader("If-Modified-Since",k.lastModified[f]),k.etag[f]&&T.setRequestHeader("If-None-Match",k.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+$t+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=_t(Wt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(k.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(k.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--k.active||k.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return k.get(e,t,n,"json")},getScript:function(e,t){return k.get(e,void 0,t,"script")}}),k.each(["get","post"],function(e,i){k[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),k.ajax(k.extend({url:e,type:i,dataType:r,data:t,success:n},k.isPlainObject(e)&&e))}}),k._evalUrl=function(e,t){return k.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){k.globalEval(e,t)}})},k.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=k(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){k(this).wrapInner(n.call(this,e))}):this.each(function(){var e=k(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){k(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){k(this).replaceWith(this.childNodes)}),this}}),k.expr.pseudos.hidden=function(e){return!k.expr.pseudos.visible(e)},k.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},k.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Ut={0:200,1223:204},Xt=k.ajaxSettings.xhr();y.cors=!!Xt&&"withCredentials"in Xt,y.ajax=Xt=!!Xt,k.ajaxTransport(function(i){var o,a;if(y.cors||Xt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Ut[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),k.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),k.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return k.globalEval(e),e}}}),k.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),k.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=k("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=mt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&k.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?k("<div>").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}}),k.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),k.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),k.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||k.guid++,i},k.holdReady=function(e){e?k.readyWait++:k.ready(!0)},k.isArray=Array.isArray,k.parseJSON=JSON.parse,k.nodeName=A,k.isFunction=m,k.isWindow=x,k.camelCase=V,k.type=w,k.now=Date.now,k.isNumeric=function(e){var t=k.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return k});var Qt=C.jQuery,Jt=C.$;return k.noConflict=function(e){return C.$===k&&(C.$=Jt),e&&C.jQuery===k&&(C.jQuery=Qt),k},e||(C.jQuery=C.$=k),k});
+/*! jQuery UI - v1.12.1 - 2019-01-27
+* http://jqueryui.com
+* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/resizable.js, widgets/mouse.js
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}t.ui=t.ui||{},t.ui.version="1.12.1";var i=0,s=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,n,o=s.call(arguments,1),a=0,r=o.length;r>a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,m,g,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),x={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,m=_.offset,g=t.extend({},m),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):h.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=h.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),x[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?g.left+=p:"center"===n.at[0]&&(g.left+=p/2),"bottom"===n.at[1]?g.top+=f:"center"===n.at[1]&&(g.top+=f/2),u=e(x.at,p,f),g.left+=u[0],g.top+=u[1],this.each(function(){var s,r,h=t(this),l=h.outerWidth(),c=h.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),k=l+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},g),T=e(x.my,h.outerWidth(),h.outerHeight());"right"===n.my[0]?D.left-=l:"center"===n.my[0]&&(D.left-=l/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=T[0],D.top+=T[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:l,elemHeight:c,collisionPosition:s,collisionWidth:k,collisionHeight:C,offset:[u[0]+T[0],u[1]+T[1]],my:n.my,at:n.at,within:b,elem:h})}),n.using&&(r=function(t){var e=m.left-D.left,i=e+p-l,s=m.top-D.top,r=s+f-c,u={target:{element:v,left:m.left,top:m.top,width:p,height:f},element:{element:h,left:D.left,top:D.top,width:l,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element
+},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/**
+ * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler
+ * Licensed under MIT
+ * @author Ariel Flesler
+ * @version 2.1.2
+ */
+;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1<b.axis.length;u&&(d/=2);b.offset=h(b.offset);b.over=h(b.over);return this.each(function(){function k(a){var k=$.extend({},b,{queue:!0,duration:d,complete:a&&function(){a.call(q,e,b)}});r.animate(f,k)}if(null!==a){var l=n(this),q=l?this.contentWindow||window:this,r=$(q),e=a,f={},t;switch(typeof e){case "number":case "string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(e)){e= h(e);break}e=l?$(e):$(e,q);case "object":if(e.length===0)return;if(e.is||e.style)t=(e=$(e)).offset()}var v=$.isFunction(b.offset)&&b.offset(q,e)||b.offset;$.each(b.axis.split(""),function(a,c){var d="x"===c?"Left":"Top",m=d.toLowerCase(),g="scroll"+d,h=r[g](),n=p.max(q,c);t?(f[g]=t[m]+(l?0:h-r.offset()[m]),b.margin&&(f[g]-=parseInt(e.css("margin"+d),10)||0,f[g]-=parseInt(e.css("border"+d+"Width"),10)||0),f[g]+=v[m]||0,b.over[m]&&(f[g]+=e["x"===c?"width":"height"]()*b.over[m])):(d=e[m],f[g]=d.slice&& "%"===d.slice(-1)?parseFloat(d)/100*n:d);b.limit&&/^\d+$/.test(f[g])&&(f[g]=0>=f[g]?0:Math.min(f[g],n));!a&&1<b.axis.length&&(h===f[g]?f={}:u&&(k(b.onAfterFirst),f={}))});k(b.onAfter)}})};p.max=function(a,d){var b="x"===d?"Width":"Height",h="scroll"+b;if(!n(a))return a[h]-$(a)[b.toLowerCase()]();var b="client"+b,k=a.ownerDocument||a.document,l=k.documentElement,k=k.body;return Math.max(l[h],k[h])-Math.min(l[b],k[b])};$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(a){return $(a.elem)[a.prop]()}, set:function(a){var d=this.get(a);if(a.options.interrupt&&a._last&&a._last!==d)return $(a.elem).stop();var b=Math.round(a.now);d!==b&&($(a.elem)[a.prop](b),a._last=this.get(a))}};return p});
+/*!
+ PowerTip v1.3.1 (2018-04-15)
+ https://stevenbenner.github.io/jquery-powertip/
+ Copyright (c) 2018 Steven Benner (http://stevenbenner.com/).
+ Released under MIT license.
+ https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
+*/
+(function(root,factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(typeof module==="object"&&module.exports){module.exports=factory(require("jquery"))}else{factory(root.jQuery)}})(this,function($){var $document=$(document),$window=$(window),$body=$("body");var DATA_DISPLAYCONTROLLER="displayController",DATA_HASACTIVEHOVER="hasActiveHover",DATA_FORCEDOPEN="forcedOpen",DATA_HASMOUSEMOVE="hasMouseMove",DATA_MOUSEONTOTIP="mouseOnToPopup",DATA_ORIGINALTITLE="originalTitle",DATA_POWERTIP="powertip",DATA_POWERTIPJQ="powertipjq",DATA_POWERTIPTARGET="powertiptarget",EVENT_NAMESPACE=".powertip",RAD2DEG=180/Math.PI,MOUSE_EVENTS=["click","dblclick","mousedown","mouseup","mousemove","mouseover","mouseout","mouseenter","mouseleave","contextmenu"];var session={tooltips:null,isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,closeDelayTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var Collision={none:0,top:1,bottom:2,left:4,right:8};$.fn.powerTip=function(opts,arg){var targetElements=this,options,tipController;if(!targetElements.length){return targetElements}if($.type(opts)==="string"&&$.powerTip[opts]){return $.powerTip[opts].call(targetElements,targetElements,arg)}options=$.extend({},$.fn.powerTip.defaults,opts);tipController=new TooltipController(options);initTracking();targetElements.each(function elementSetup(){var $this=$(this),dataPowertip=$this.data(DATA_POWERTIP),dataElem=$this.data(DATA_POWERTIPJQ),dataTarget=$this.data(DATA_POWERTIPTARGET),title=$this.attr("title");if(!dataPowertip&&!dataTarget&&!dataElem&&title){$this.data(DATA_POWERTIP,title);$this.data(DATA_ORIGINALTITLE,title);$this.removeAttr("title")}$this.data(DATA_DISPLAYCONTROLLER,new DisplayController($this,options,tipController))});if(!options.manual){$.each(options.openEvents,function(idx,evt){if($.inArray(evt,options.closeEvents)>-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference<options.intentSensitivity){cancelClose();closeAnyDelayed();tipController.showTip(element)}else{session.previousX=session.currentX;session.previousY=session.currentY;openTooltip()}}function cancelTimer(stopClose){hoverTimer=clearTimeout(hoverTimer);if(session.closeDelayTimeout&&myCloseDelay===session.closeDelayTimeout||stopClose){cancelClose()}}function cancelClose(){session.closeDelayTimeout=clearTimeout(session.closeDelayTimeout);session.delayInProgress=false}function closeAnyDelayed(){if(session.delayInProgress&&session.activeHover&&!session.activeHover.is(element)){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide(true)}}function repositionTooltip(){tipController.resetPosition(element)}this.show=openTooltip;this.hide=closeTooltip;this.cancel=cancelTimer;this.resetPosition=repositionTooltip}function PlacementCalculator(){function computePlacementCoords(element,placement,tipWidth,tipHeight,offset){var placementBase=placement.split("-")[0],coords=new CSSCoordinates,position;if(isSvgElement(element)){position=getSvgPlacement(element,placementBase)}else{position=getHtmlPlacement(element,placementBase)}switch(placement){case"n":coords.set("left",position.left-tipWidth/2);coords.set("bottom",session.windowHeight-position.top+offset);break;case"e":coords.set("left",position.left+offset);coords.set("top",position.top-tipHeight/2);break;case"s":coords.set("left",position.left-tipWidth/2);coords.set("top",position.top+offset);break;case"w":coords.set("top",position.top-tipHeight/2);coords.set("right",session.windowWidth-position.left+offset);break;case"nw":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"nw-alt":coords.set("left",position.left);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne":coords.set("left",position.left-20);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne-alt":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left);break;case"sw":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"sw-alt":coords.set("left",position.left);coords.set("top",position.top+offset);break;case"se":coords.set("left",position.left-20);coords.set("top",position.top+offset);break;case"se-alt":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left);break}return coords}function getHtmlPlacement(element,placement){var objectOffset=element.offset(),objectWidth=element.outerWidth(),objectHeight=element.outerHeight(),left,top;switch(placement){case"n":left=objectOffset.left+objectWidth/2;top=objectOffset.top;break;case"e":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight/2;break;case"s":left=objectOffset.left+objectWidth/2;top=objectOffset.top+objectHeight;break;case"w":left=objectOffset.left;top=objectOffset.top+objectHeight/2;break;case"nw":left=objectOffset.left;top=objectOffset.top;break;case"ne":left=objectOffset.left+objectWidth;top=objectOffset.top;break;case"sw":left=objectOffset.left;top=objectOffset.top+objectHeight;break;case"se":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight;break}return{top:top,left:left}}function getSvgPlacement(element,placement){var svgElement=element.closest("svg")[0],domElement=element[0],point=svgElement.createSVGPoint(),boundingBox=domElement.getBBox(),matrix=domElement.getScreenCTM(),halfWidth=boundingBox.width/2,halfHeight=boundingBox.height/2,placements=[],placementKeys=["nw","n","ne","e","se","s","sw","w"],coords,rotation,steps,x;function pushPlacement(){placements.push(point.matrixTransform(matrix))}point.x=boundingBox.x;point.y=boundingBox.y;pushPlacement();point.x+=halfWidth;pushPlacement();point.x+=halfWidth;pushPlacement();point.y+=halfHeight;pushPlacement();point.y+=halfHeight;pushPlacement();point.x-=halfWidth;pushPlacement();point.x-=halfWidth;pushPlacement();point.y-=halfHeight;pushPlacement();if(placements[0].y!==placements[1].y||placements[0].x!==placements[7].x){rotation=Math.atan2(matrix.b,matrix.a)*RAD2DEG;steps=Math.ceil((rotation%360-22.5)/45);if(steps<1){steps+=8}while(steps--){placementKeys.push(placementKeys.shift())}}for(x=0;x<placements.length;x++){if(placementKeys[x]===placement){coords=placements[x];break}}return{top:coords.y+session.scrollTop,left:coords.x+session.scrollLeft}}this.compute=computePlacementCoords}function TooltipController(options){var placementCalculator=new PlacementCalculator,tipElement=$("#"+options.popupId);if(tipElement.length===0){tipElement=$("<div/>",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.top<viewportTop||Math.abs(coords.bottom-session.windowHeight)-elementHeight<viewportTop){collisions|=Collision.top}if(coords.top+elementHeight>viewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.left<viewportLeft||coords.right+elementWidth>viewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right<viewportLeft){collisions|=Collision.right}return collisions}function countFlags(value){var count=0;while(value){value&=value-1;count++}return count}return $.powerTip});/*!
+ * jQuery UI Touch Punch 0.2.3
+ *
+ * Copyright 2011–2014, Dave Furfero
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ * jquery.ui.mouse.js
+ */
+!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017
+ * http://www.smartmenus.org/
+ * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("<span/>").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],$('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y<o.upEnd)&&a.eq(o.up?1:0).show(),o.y==n)mouse&&a.eq(o.up?0:1).hide(),this.menuScrollStop(t);else if(!e){this.opts.scrollAccelerate&&o.step<this.opts.scrollStep&&(o.step+=.2);var h=this;this.scrollTimeout=requestAnimationFrame(function(){h.menuScroll(t)})}},menuScrollMousewheel:function(t,e){if(this.getClosestMenu(e.target)==t[0]){e=e.originalEvent;var i=(e.wheelDelta||-e.detail)>0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file
diff --git a/menu.js b/menu.js
new file mode 100644
index 0000000..2fe2214
--- /dev/null
+++ b/menu.js
@@ -0,0 +1,51 @@
+/*
+ @licstart The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ 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.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
+ */
+function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
+ function makeTree(data,relPath) {
+ var result='';
+ if ('children' in data) {
+ result+='<ul>';
+ for (var i in data.children) {
+ result+='<li><a href="'+relPath+data.children[i].url+'">'+
+ data.children[i].text+'</a>'+
+ makeTree(data.children[i],relPath)+'</li>';
+ }
+ result+='</ul>';
+ }
+ return result;
+ }
+
+ $('#main-nav').append(makeTree(menudata,relPath));
+ $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
+ if (searchEnabled) {
+ if (serverSide) {
+ $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+relPath+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.svg" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
+ } else {
+ $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.svg" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.svg" alt=""/></a></span></div></li>');
+ }
+ }
+ $('#main-menu').smartmenus();
+}
+/* @license-end */
diff --git a/menudata.js b/menudata.js
new file mode 100644
index 0000000..a73cd7a
--- /dev/null
+++ b/menudata.js
@@ -0,0 +1,65 @@
+/*
+ @licstart The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ 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.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
+*/
+var menudata={children:[
+{text:"Main Page",url:"index.html"},
+{text:"Classes",url:"annotated.html",children:[
+{text:"Class List",url:"annotated.html"},
+{text:"Class Index",url:"classes.html"},
+{text:"Class Hierarchy",url:"hierarchy.html"},
+{text:"Class Members",url:"functions.html",children:[
+{text:"All",url:"functions.html",children:[
+{text:"a",url:"functions.html#index_a"},
+{text:"b",url:"functions.html#index_b"},
+{text:"c",url:"functions.html#index_c"},
+{text:"d",url:"functions.html#index_d"},
+{text:"f",url:"functions.html#index_f"},
+{text:"g",url:"functions.html#index_g"},
+{text:"h",url:"functions.html#index_h"},
+{text:"i",url:"functions.html#index_i"},
+{text:"o",url:"functions.html#index_o"},
+{text:"p",url:"functions.html#index_p"},
+{text:"q",url:"functions.html#index_q"},
+{text:"r",url:"functions.html#index_r"},
+{text:"s",url:"functions.html#index_s"},
+{text:"t",url:"functions.html#index_t"},
+{text:"w",url:"functions.html#index_w"}]},
+{text:"Functions",url:"functions_func.html",children:[
+{text:"a",url:"functions_func.html#index_a"},
+{text:"b",url:"functions_func.html#index_b"},
+{text:"c",url:"functions_func.html#index_c"},
+{text:"d",url:"functions_func.html#index_d"},
+{text:"f",url:"functions_func.html#index_f"},
+{text:"g",url:"functions_func.html#index_g"},
+{text:"h",url:"functions_func.html#index_h"},
+{text:"i",url:"functions_func.html#index_i"},
+{text:"o",url:"functions_func.html#index_o"},
+{text:"p",url:"functions_func.html#index_p"},
+{text:"q",url:"functions_func.html#index_q"},
+{text:"r",url:"functions_func.html#index_r"},
+{text:"s",url:"functions_func.html#index_s"},
+{text:"t",url:"functions_func.html#index_t"},
+{text:"w",url:"functions_func.html#index_w"}]}]}]},
+{text:"Files",url:"files.html",children:[
+{text:"File List",url:"files.html"}]}]}
diff --git a/nav_f.png b/nav_f.png
new file mode 100644
index 0000000..72a58a5
--- /dev/null
+++ b/nav_f.png
Binary files differ
diff --git a/nav_g.png b/nav_g.png
new file mode 100644
index 0000000..2093a23
--- /dev/null
+++ b/nav_g.png
Binary files differ
diff --git a/nav_h.png b/nav_h.png
new file mode 100644
index 0000000..33389b1
--- /dev/null
+++ b/nav_h.png
Binary files differ
diff --git a/open.png b/open.png
new file mode 100644
index 0000000..30f75c7
--- /dev/null
+++ b/open.png
Binary files differ
diff --git a/path_8cpp_source.html b/path_8cpp_source.html
new file mode 100644
index 0000000..5cd7a6c
--- /dev/null
+++ b/path_8cpp_source.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: src/path.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">path.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="error_8hpp.html">winapi/error.hpp</a>&gt;</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &lt;winapi/path.hpp&gt;</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;winapi/utf8.hpp&gt;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; </div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;windows.h&gt;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">namespace </span>{</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;std::wstring do_canonicalize(<span class="keyword">const</span> std::wstring&amp; path) {</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">static</span> constexpr std::size_t init_buffer_size = MAX_PATH;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; static_assert(init_buffer_size &gt; 0, <span class="stringliteral">&quot;init_buffer_size must be positive&quot;</span>);</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; std::vector&lt;wchar_t&gt; buffer;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; buffer.resize(init_buffer_size);</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">true</span>) {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">if</span> (buffer.size() &gt; std::numeric_limits&lt;DWORD&gt;::max())</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordflow">throw</span> std::range_error{<span class="stringliteral">&quot;Path buffer is too large&quot;</span>};</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> nch = ::GetFullPathNameW(</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; path.c_str(), <span class="keyword">static_cast&lt;</span>DWORD<span class="keyword">&gt;</span>(buffer.size()), buffer.data(), NULL);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">if</span> (nch == 0) {</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;GetFullPathNameW&quot;</span>);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">if</span> (nch &lt; buffer.size()) {</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> {buffer.data(), nch};</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">if</span> (nch &gt; buffer.size()) {</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; buffer.resize(2 * buffer.size());</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; }</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;} <span class="comment">// namespace</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;CanonicalPath::CanonicalPath(<span class="keyword">const</span> std::string&amp; path) : m_path(canonicalize(path)) {}</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
+<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classwinapi_1_1CanonicalPath.html#a7072d3b77d4f437246744c9c2a9407db"> 52</a></span>&#160;std::string CanonicalPath::canonicalize(<span class="keyword">const</span> std::string&amp; path) {</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> narrow(do_canonicalize(widen(path)));</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aerror_8hpp_html"><div class="ttname"><a href="error_8hpp.html">error.hpp</a></div><div class="ttdoc">Make std::system_error work with GetLastError().</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/path_8hpp_source.html b/path_8hpp_source.html
new file mode 100644
index 0000000..5729fa9
--- /dev/null
+++ b/path_8hpp_source.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: include/winapi/path.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1714771db42b7b5a0cd2ebe6e9736ed.html">winapi</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">path.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; </div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno"><a class="line" href="classwinapi_1_1CanonicalPath.html"> 13</a></span>&#160;<span class="keyword">class </span><a class="code" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a> {</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="keyword">static</span> std::string <a class="code" href="classwinapi_1_1CanonicalPath.html#a7072d3b77d4f437246744c9c2a9407db">canonicalize</a>(<span class="keyword">const</span> std::string&amp;);</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a>(<span class="keyword">const</span> std::string&amp;);</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; std::string get()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_path; }</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; std::string path()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> get(); }</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; std::string m_path;</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;};</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1CanonicalPath_html"><div class="ttname"><a href="classwinapi_1_1CanonicalPath.html">winapi::CanonicalPath</a></div><div class="ttdoc">Absolute, canonical path.</div><div class="ttdef"><b>Definition:</b> <a href="path_8hpp_source.html#l00013">path.hpp:13</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1CanonicalPath_html_a7072d3b77d4f437246744c9c2a9407db"><div class="ttname"><a href="classwinapi_1_1CanonicalPath.html#a7072d3b77d4f437246744c9c2a9407db">winapi::CanonicalPath::canonicalize</a></div><div class="ttdeci">static std::string canonicalize(const std::string &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="path_8cpp_source.html#l00052">path.cpp:52</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/pipe_8cpp_source.html b/pipe_8cpp_source.html
new file mode 100644
index 0000000..0b99a12
--- /dev/null
+++ b/pipe_8cpp_source.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: src/pipe.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pipe.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="error_8hpp.html">winapi/error.hpp</a>&gt;</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &lt;winapi/handle.hpp&gt;</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;winapi/pipe.hpp&gt;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; </div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;windows.h&gt;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keyword">namespace </span>{</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keywordtype">void</span> create_pipe(Handle&amp; read_end, Handle&amp; write_end) {</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; HANDLE read_end_impl = INVALID_HANDLE_VALUE;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; HANDLE write_end_impl = INVALID_HANDLE_VALUE;</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; SECURITY_ATTRIBUTES attributes;</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; std::memset(&amp;attributes, 0, <span class="keyword">sizeof</span>(attributes));</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; attributes.nLength = <span class="keyword">sizeof</span>(attributes);</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; attributes.bInheritHandle = TRUE;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">static</span> constexpr DWORD buffer_size = 16 * 1024;</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> ret = ::CreatePipe(&amp;read_end_impl, &amp;write_end_impl, &amp;attributes, buffer_size);</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">if</span> (!ret) {</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;CreatePipe&quot;</span>);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; }</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; read_end = Handle{read_end_impl};</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; write_end = Handle{write_end_impl};</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;}</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;} <span class="comment">// namespace</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classwinapi_1_1Pipe.html#aa41a6275dab93f4fc0d2e593aa9b39f0"> 41</a></span>&#160;<a class="code" href="classwinapi_1_1Pipe.html#aa41a6275dab93f4fc0d2e593aa9b39f0">Pipe::Pipe</a>() {</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; create_pipe(m_read_end, m_write_end);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;}</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1Pipe_html_aa41a6275dab93f4fc0d2e593aa9b39f0"><div class="ttname"><a href="classwinapi_1_1Pipe.html#aa41a6275dab93f4fc0d2e593aa9b39f0">winapi::Pipe::Pipe</a></div><div class="ttdeci">Pipe()</div><div class="ttdef"><b>Definition:</b> <a href="pipe_8cpp_source.html#l00041">pipe.cpp:41</a></div></div>
+<div class="ttc" id="aerror_8hpp_html"><div class="ttname"><a href="error_8hpp.html">error.hpp</a></div><div class="ttdoc">Make std::system_error work with GetLastError().</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/pipe_8hpp_source.html b/pipe_8hpp_source.html
new file mode 100644
index 0000000..273c136
--- /dev/null
+++ b/pipe_8hpp_source.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: include/winapi/pipe.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1714771db42b7b5a0cd2ebe6e9736ed.html">winapi</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">pipe.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;handle.hpp&quot;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; </div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="classwinapi_1_1Pipe.html"> 15</a></span>&#160;<span class="keyword">class </span><a class="code" href="classwinapi_1_1Pipe.html">Pipe</a> {</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <a class="code" href="classwinapi_1_1Pipe.html#aa41a6275dab93f4fc0d2e593aa9b39f0">Pipe</a>();</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="classwinapi_1_1Pipe.html#a07412b04db253f1c24fe4aeda5db82e1"> 21</a></span>&#160; <a class="code" href="classwinapi_1_1Handle.html">Handle</a>&amp; <a class="code" href="classwinapi_1_1Pipe.html#a07412b04db253f1c24fe4aeda5db82e1">read_end</a>() { <span class="keywordflow">return</span> m_read_end; }</div>
+<div class="line"><a name="l00023"></a><span class="lineno"><a class="line" href="classwinapi_1_1Pipe.html#afc45a1f2a5cdee7bbe4f73dd62d667ac"> 23</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classwinapi_1_1Handle.html">Handle</a>&amp; <a class="code" href="classwinapi_1_1Pipe.html#afc45a1f2a5cdee7bbe4f73dd62d667ac">read_end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_read_end; }</div>
+<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classwinapi_1_1Pipe.html#a19e504588020c68639154ed597151cd6"> 25</a></span>&#160; <a class="code" href="classwinapi_1_1Handle.html">Handle</a>&amp; <a class="code" href="classwinapi_1_1Pipe.html#a19e504588020c68639154ed597151cd6">write_end</a>() { <span class="keywordflow">return</span> m_write_end; }</div>
+<div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="classwinapi_1_1Pipe.html#ad010465685f521c17bd4b6731ed00e00"> 27</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classwinapi_1_1Handle.html">Handle</a>&amp; <a class="code" href="classwinapi_1_1Pipe.html#ad010465685f521c17bd4b6731ed00e00">write_end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_write_end; }</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <a class="code" href="classwinapi_1_1Handle.html">Handle</a> m_read_end;</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classwinapi_1_1Handle.html">Handle</a> m_write_end;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;};</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html"><div class="ttname"><a href="classwinapi_1_1Handle.html">winapi::Handle</a></div><div class="ttdoc">HANDLE wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="handle_8hpp_source.html#l00025">handle.hpp:25</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Pipe_html"><div class="ttname"><a href="classwinapi_1_1Pipe.html">winapi::Pipe</a></div><div class="ttdoc">Anonymous pipe wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="pipe_8hpp_source.html#l00015">pipe.hpp:15</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Pipe_html_a07412b04db253f1c24fe4aeda5db82e1"><div class="ttname"><a href="classwinapi_1_1Pipe.html#a07412b04db253f1c24fe4aeda5db82e1">winapi::Pipe::read_end</a></div><div class="ttdeci">Handle &amp; read_end()</div><div class="ttdef"><b>Definition:</b> <a href="pipe_8hpp_source.html#l00021">pipe.hpp:21</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Pipe_html_a19e504588020c68639154ed597151cd6"><div class="ttname"><a href="classwinapi_1_1Pipe.html#a19e504588020c68639154ed597151cd6">winapi::Pipe::write_end</a></div><div class="ttdeci">Handle &amp; write_end()</div><div class="ttdef"><b>Definition:</b> <a href="pipe_8hpp_source.html#l00025">pipe.hpp:25</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Pipe_html_aa41a6275dab93f4fc0d2e593aa9b39f0"><div class="ttname"><a href="classwinapi_1_1Pipe.html#aa41a6275dab93f4fc0d2e593aa9b39f0">winapi::Pipe::Pipe</a></div><div class="ttdeci">Pipe()</div><div class="ttdef"><b>Definition:</b> <a href="pipe_8cpp_source.html#l00041">pipe.cpp:41</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Pipe_html_ad010465685f521c17bd4b6731ed00e00"><div class="ttname"><a href="classwinapi_1_1Pipe.html#ad010465685f521c17bd4b6731ed00e00">winapi::Pipe::write_end</a></div><div class="ttdeci">const Handle &amp; write_end() const</div><div class="ttdef"><b>Definition:</b> <a href="pipe_8hpp_source.html#l00027">pipe.hpp:27</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Pipe_html_afc45a1f2a5cdee7bbe4f73dd62d667ac"><div class="ttname"><a href="classwinapi_1_1Pipe.html#afc45a1f2a5cdee7bbe4f73dd62d667ac">winapi::Pipe::read_end</a></div><div class="ttdeci">const Handle &amp; read_end() const</div><div class="ttdef"><b>Definition:</b> <a href="pipe_8hpp_source.html#l00023">pipe.hpp:23</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/process_8cpp_source.html b/process_8cpp_source.html
new file mode 100644
index 0000000..575b3c2
--- /dev/null
+++ b/process_8cpp_source.html
@@ -0,0 +1,503 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: src/process.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">process.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &lt;winapi/cmd_line.hpp&gt;</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="error_8hpp.html">winapi/error.hpp</a>&gt;</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;winapi/handle.hpp&gt;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;winapi/process.hpp&gt;</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;winapi/process_io.hpp&gt;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;winapi/resource.hpp&gt;</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;winapi/utf8.hpp&gt;</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// clang-format off</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;windows.h&gt;</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;shellapi.h&gt;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment">// clang-format on</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">namespace </span>{</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">using</span> EscapedCommandLine = std::vector&lt;wchar_t&gt;;</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;EscapedCommandLine escape_command_line(<span class="keyword">const</span> CommandLine&amp; cmd_line) {</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> unicode_cmd_line = widen(cmd_line.to_string());</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; EscapedCommandLine buffer;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; buffer.reserve(unicode_cmd_line.size() + 1);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; buffer.assign(unicode_cmd_line.cbegin(), unicode_cmd_line.cend());</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; buffer.emplace_back(L<span class="charliteral">&#39;\0&#39;</span>);</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> buffer;</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;}</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;Handle create_process(ProcessParameters&amp; params) {</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">/*</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment"> * When creating a new console process, the options are:</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="comment"> * 1) inherit the parent console (the default),</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment"> * 2) CREATE_NO_WINDOW,</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment"> * 3) CREATE_NEW_CONSOLE,</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment"> * 4) DETACHED_PROCESS.</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment"> * Child processes can inherit the console.</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment"> * By that I mean they will display their output in the same window.</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment"> * If both the child process and the parent process read from stdin, there</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment"> * is no way to say which process will read any given input byte.</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment"> * There&#39;s an excellent guide into all the intricacies of the CreateProcess</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment"> * system call at</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment"> * https://github.com/rprichard/win32-console-docs/blob/master/README.md</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment"> * Another useful link is https://ikriv.com/dev/cpp/ConsoleProxy/flags.</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">static</span> constexpr DWORD default_dwCreationFlags = CREATE_UNICODE_ENVIRONMENT;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; STARTUPINFOW startup_info;</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; std::memset(&amp;startup_info, 0, <span class="keyword">sizeof</span>(startup_info));</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; startup_info.cb = <span class="keyword">sizeof</span>(startup_info);</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">if</span> (params.io) {</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; startup_info.dwFlags |= STARTF_USESTDHANDLES;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; startup_info.hStdInput = <span class="keyword">static_cast&lt;</span>HANDLE<span class="keyword">&gt;</span>(params.io-&gt;std_in.handle);</div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; startup_info.hStdOutput = <span class="keyword">static_cast&lt;</span>HANDLE<span class="keyword">&gt;</span>(params.io-&gt;std_out.handle);</div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; startup_info.hStdError = <span class="keyword">static_cast&lt;</span>HANDLE<span class="keyword">&gt;</span>(params.io-&gt;std_err.handle);</div>
+<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
+<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keyword">auto</span> dwCreationFlags = default_dwCreationFlags;</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">switch</span> (params.console_mode) {</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">case</span> ProcessParameters::ConsoleNone:</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; dwCreationFlags |= CREATE_NO_WINDOW;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">case</span> ProcessParameters::ConsoleInherit:</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="comment">// This is the default.</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">case</span> ProcessParameters::ConsoleNew:</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; dwCreationFlags |= CREATE_NEW_CONSOLE;</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
+<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; PROCESS_INFORMATION child_info;</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; std::memset(&amp;child_info, 0, <span class="keyword">sizeof</span>(child_info));</div>
+<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">auto</span> cmd_line = escape_command_line(params.cmd_line);</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> ret = ::CreateProcessW(NULL,</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; cmd_line.data(),</div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; NULL,</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; NULL,</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; TRUE,</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; dwCreationFlags,</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; NULL,</div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; NULL,</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; &amp;startup_info,</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; &amp;child_info);</div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">if</span> (!ret) {</div>
+<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;CreateProcessW&quot;</span>);</div>
+<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div>
+<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div>
+<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; </div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">if</span> (params.io) {</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; params.io-&gt;close();</div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; </div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; Handle process{child_info.hProcess};</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; Handle thread{child_info.hThread};</div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; </div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">return</span> process;</div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;}</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;Handle shell_execute(<span class="keyword">const</span> ShellParameters&amp; params) {</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> lpVerb = params.verb ? widen(*params.verb) : L<span class="stringliteral">&quot;open&quot;</span>;</div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> lpFile = widen(params.cmd_line.get_argv0());</div>
+<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> lpParameters = widen(params.cmd_line.args_to_string());</div>
+<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
+<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">static</span> constexpr uint32_t default_fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;</div>
+<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; </div>
+<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keyword">auto</span> fMask = default_fMask;</div>
+<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keyword">auto</span> nShow = SW_SHOWDEFAULT;</div>
+<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; </div>
+<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">switch</span> (params.console_mode) {</div>
+<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">case</span> ProcessParameters::ConsoleNone:</div>
+<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; nShow = SW_HIDE;</div>
+<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">case</span> ProcessParameters::ConsoleInherit:</div>
+<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; fMask |= SEE_MASK_NO_CONSOLE;</div>
+<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">case</span> ProcessParameters::ConsoleNew:</div>
+<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="comment">// This is the default.</span></div>
+<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div>
+<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; </div>
+<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; SHELLEXECUTEINFOW info;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; std::memset(&amp;info, 0, <span class="keyword">sizeof</span>(info));</div>
+<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; info.cbSize = <span class="keyword">sizeof</span>(info);</div>
+<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; info.fMask = fMask;</div>
+<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; info.lpVerb = lpVerb.c_str();</div>
+<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; info.lpFile = lpFile.c_str();</div>
+<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">if</span> (!lpParameters.empty())</div>
+<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; info.lpParameters = lpParameters.c_str();</div>
+<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; info.nShow = nShow;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; </div>
+<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span> (!::ShellExecuteExW(&amp;info)) {</div>
+<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;ShellExecuteExW&quot;</span>);</div>
+<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; }</div>
+<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; </div>
+<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">return</span> Handle{info.hProcess};</div>
+<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;}</div>
+<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; </div>
+<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;Handle open_process(DWORD <span class="keywordtype">id</span>, DWORD permissions) {</div>
+<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; Handle process{OpenProcess(permissions, FALSE, <span class="keywordtype">id</span>)};</div>
+<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">if</span> (!process.is_valid()) {</div>
+<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;OpenProcess&quot;</span>);</div>
+<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div>
+<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">return</span> process;</div>
+<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;}</div>
+<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; </div>
+<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="keyword">class </span>PathBuffer {</div>
+<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; PathBuffer() : m_size{min_size} { m_data.resize(m_size); }</div>
+<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; </div>
+<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; DWORD get_size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_size; }</div>
+<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; </div>
+<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordtype">wchar_t</span>* get_data() { <span class="keywordflow">return</span> m_data.data(); }</div>
+<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; </div>
+<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordtype">void</span> grow() {</div>
+<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">if</span> (m_size &lt; min_size) {</div>
+<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; m_size = min_size;</div>
+<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="comment">// Check if we can still multiply by two.</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">if</span> (std::numeric_limits&lt;decltype(m_size)&gt;::max() - m_size &lt; m_size)</div>
+<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">throw</span> std::range_error{<span class="stringliteral">&quot;Path buffer is too large&quot;</span>};</div>
+<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; m_size *= 2;</div>
+<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; }</div>
+<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; m_data.resize(m_size);</div>
+<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</div>
+<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; </div>
+<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keyword">static</span> constexpr DWORD min_size = MAX_PATH;</div>
+<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; </div>
+<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; DWORD m_size;</div>
+<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; std::vector&lt;wchar_t&gt; m_data;</div>
+<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;};</div>
+<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; </div>
+<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;std::string get_current_exe_path(PathBuffer&amp; buffer) {</div>
+<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; SetLastError(ERROR_SUCCESS);</div>
+<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; </div>
+<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> ec = ::GetModuleFileNameW(NULL, buffer.get_data(), buffer.get_size());</div>
+<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; </div>
+<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">if</span> (ec == 0) {</div>
+<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;GetModuleFileNameW&quot;</span>);</div>
+<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; }</div>
+<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; </div>
+<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">if</span> (ec == buffer.get_size() &amp;&amp; GetLastError() == ERROR_INSUFFICIENT_BUFFER) {</div>
+<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; buffer.grow();</div>
+<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordflow">return</span> get_current_exe_path(buffer);</div>
+<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; }</div>
+<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; </div>
+<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">return</span> narrow(buffer.get_data());</div>
+<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;}</div>
+<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; </div>
+<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;std::string get_current_exe_path() {</div>
+<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; PathBuffer buffer;</div>
+<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">return</span> get_current_exe_path(buffer);</div>
+<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;}</div>
+<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; </div>
+<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;std::string get_exe_path(<span class="keyword">const</span> Handle&amp; process, PathBuffer&amp; buffer) {</div>
+<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keyword">auto</span> size = buffer.get_size();</div>
+<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; </div>
+<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> ec = ::QueryFullProcessImageNameW(process.get(), 0, buffer.get_data(), &amp;size);</div>
+<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; </div>
+<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">if</span> (ec != 0) {</div>
+<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">return</span> narrow(buffer.get_data());</div>
+<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div>
+<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; </div>
+<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {</div>
+<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; buffer.grow();</div>
+<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">return</span> get_exe_path(process, buffer);</div>
+<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div>
+<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; </div>
+<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;QueryFullProcessImageNameW&quot;</span>);</div>
+<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;}</div>
+<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; </div>
+<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;std::string get_exe_path(<span class="keyword">const</span> Handle&amp; process) {</div>
+<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; PathBuffer buffer;</div>
+<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">return</span> get_exe_path(process, buffer);</div>
+<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;}</div>
+<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; </div>
+<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;} <span class="comment">// namespace</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; </div>
+<div class="line"><a name="l00241"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a"> 241</a></span>&#160;<a class="code" href="classwinapi_1_1Process.html">Process</a> <a class="code" href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">Process::create</a>(<a class="code" href="structwinapi_1_1ProcessParameters.html">ProcessParameters</a> params) {</div>
+<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classwinapi_1_1Process.html">Process</a>{create_process(params)};</div>
+<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;}</div>
+<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; </div>
+<div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#ac4eaeb85aa25acec5e4421e1239f315f"> 245</a></span>&#160;<a class="code" href="classwinapi_1_1Process.html">Process</a> <a class="code" href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">Process::create</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a>&amp; cmd_line) {</div>
+<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <a class="code" href="structwinapi_1_1ProcessParameters.html">ProcessParameters</a> params{cmd_line};</div>
+<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">create</a>(std::move(params));</div>
+<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;}</div>
+<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; </div>
+<div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#a16be6c3dc62d500ca8924b359e5193cc"> 250</a></span>&#160;<a class="code" href="classwinapi_1_1Process.html">Process</a> <a class="code" href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">Process::create</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a>&amp; cmd_line, <a class="code" href="structwinapi_1_1process_1_1IO.html">process::IO</a> io) {</div>
+<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <a class="code" href="structwinapi_1_1ProcessParameters.html">ProcessParameters</a> params{cmd_line};</div>
+<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; params.io = std::move(io);</div>
+<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">create</a>(std::move(params));</div>
+<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;}</div>
+<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; </div>
+<div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e"> 256</a></span>&#160;<a class="code" href="classwinapi_1_1Process.html">Process</a> <a class="code" href="classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e">Process::shell</a>(<span class="keyword">const</span> <a class="code" href="structwinapi_1_1ShellParameters.html">ShellParameters</a>&amp; params) {</div>
+<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classwinapi_1_1Process.html">Process</a>{shell_execute(params)};</div>
+<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;}</div>
+<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; </div>
+<div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#a24e1cbd68bc2dda73220b840979a84b0"> 260</a></span>&#160;<a class="code" href="classwinapi_1_1Process.html">Process</a> <a class="code" href="classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e">Process::shell</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a>&amp; cmd_line) {</div>
+<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <a class="code" href="structwinapi_1_1ShellParameters.html">ShellParameters</a> params{cmd_line};</div>
+<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e">shell</a>(params);</div>
+<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;}</div>
+<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; </div>
+<div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#a4edc58e78ee81e5531af34fc4f806e24"> 265</a></span>&#160;<a class="code" href="classwinapi_1_1Process.html">Process</a> <a class="code" href="classwinapi_1_1Process.html#a4edc58e78ee81e5531af34fc4f806e24">Process::current</a>() {</div>
+<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classwinapi_1_1Process.html">Process</a>{::GetCurrentProcessId(), <a class="code" href="classwinapi_1_1Handle.html">Handle</a>{::GetCurrentProcess()}};</div>
+<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;}</div>
+<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; </div>
+<div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#a48964bbb7968bd7b6796e8a3306d58d9"> 269</a></span>&#160;<a class="code" href="classwinapi_1_1Process.html">Process</a> <a class="code" href="classwinapi_1_1Process.html#a48964bbb7968bd7b6796e8a3306d58d9">Process::open</a>(DWORD <span class="keywordtype">id</span>, DWORD permissions) {</div>
+<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classwinapi_1_1Process.html">Process</a>{id, open_process(<span class="keywordtype">id</span>, permissions)};</div>
+<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;}</div>
+<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; </div>
+<div class="line"><a name="l00273"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#af9d748078299957519ee67fd7f1e49b3"> 273</a></span>&#160;<a class="code" href="classwinapi_1_1Process.html">Process</a> <a class="code" href="classwinapi_1_1Process.html#af9d748078299957519ee67fd7f1e49b3">Process::open_r</a>(DWORD <span class="keywordtype">id</span>) {</div>
+<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classwinapi_1_1Process.html#a48964bbb7968bd7b6796e8a3306d58d9">open</a>(<span class="keywordtype">id</span>, <a class="code" href="classwinapi_1_1Process.html#a4fc3ed404c1cf67dabb7867d0c9f638c">read_permissions</a>());</div>
+<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;}</div>
+<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; </div>
+<div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#a4fffc3755642f3db56902106f1b96040"> 277</a></span>&#160;DWORD <a class="code" href="classwinapi_1_1Process.html#a4fffc3755642f3db56902106f1b96040">Process::default_permissions</a>() {</div>
+<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">return</span> PROCESS_QUERY_INFORMATION;</div>
+<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;}</div>
+<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; </div>
+<div class="line"><a name="l00281"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#a4fc3ed404c1cf67dabb7867d0c9f638c"> 281</a></span>&#160;DWORD <a class="code" href="classwinapi_1_1Process.html#a4fc3ed404c1cf67dabb7867d0c9f638c">Process::read_permissions</a>() {</div>
+<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classwinapi_1_1Process.html#a4fffc3755642f3db56902106f1b96040">default_permissions</a>() | PROCESS_VM_READ;</div>
+<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;}</div>
+<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; </div>
+<div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#a5b02393edb57bd902e321037133c40eb"> 285</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classwinapi_1_1Process.html#a5b02393edb57bd902e321037133c40eb">Process::is_running</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> ret = ::WaitForSingleObject(<span class="keyword">static_cast&lt;</span>HANDLE<span class="keyword">&gt;</span>(m_handle), 0);</div>
+<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; </div>
+<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">switch</span> (ret) {</div>
+<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">case</span> WAIT_OBJECT_0:</div>
+<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">case</span> WAIT_TIMEOUT:</div>
+<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">case</span> WAIT_FAILED:</div>
+<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;WaitForSingleObject&quot;</span>);</div>
+<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// Shouldn&#39;t happen.</span></div>
+<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">throw</span> error::custom(ret, <span class="stringliteral">&quot;WaitForSingleObject&quot;</span>);</div>
+<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div>
+<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;}</div>
+<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; </div>
+<div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#a273dcbc8cd69539d0f9fd4d1e09e67a7"> 301</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classwinapi_1_1Process.html#a273dcbc8cd69539d0f9fd4d1e09e67a7">Process::wait</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> ret = ::WaitForSingleObject(<span class="keyword">static_cast&lt;</span>HANDLE<span class="keyword">&gt;</span>(m_handle), INFINITE);</div>
+<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; </div>
+<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">switch</span> (ret) {</div>
+<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">case</span> WAIT_OBJECT_0:</div>
+<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">case</span> WAIT_FAILED:</div>
+<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;WaitForSingleObject&quot;</span>);</div>
+<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="comment">// Shouldn&#39;t happen.</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">throw</span> error::custom(ret, <span class="stringliteral">&quot;WaitForSingleObject&quot;</span>);</div>
+<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; }</div>
+<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;}</div>
+<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; </div>
+<div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#a155aefb272a151126fe2a65d583be880"> 315</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classwinapi_1_1Process.html#a155aefb272a151126fe2a65d583be880">Process::terminate</a>(<span class="keywordtype">int</span> ec)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">if</span> (!::TerminateProcess(<span class="keyword">static_cast&lt;</span>HANDLE<span class="keyword">&gt;</span>(m_handle), <span class="keyword">static_cast&lt;</span>UINT<span class="keyword">&gt;</span>(ec))) {</div>
+<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;TerminateProcess&quot;</span>);</div>
+<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; }</div>
+<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;}</div>
+<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; </div>
+<div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#a1aedc4814dd9c154b6e03e572d873755"> 321</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classwinapi_1_1Process.html#a1aedc4814dd9c154b6e03e572d873755">Process::shut_down</a>(<span class="keywordtype">int</span> ec)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <a class="code" href="classwinapi_1_1Process.html#a155aefb272a151126fe2a65d583be880">terminate</a>(ec);</div>
+<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <a class="code" href="classwinapi_1_1Process.html#a273dcbc8cd69539d0f9fd4d1e09e67a7">wait</a>();</div>
+<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;}</div>
+<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; </div>
+<div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#a359c11337c7e50370cd5375efa841131"> 326</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="classwinapi_1_1Process.html#a359c11337c7e50370cd5375efa841131">Process::get_exit_code</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; DWORD ec = 0;</div>
+<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; </div>
+<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> ret = ::GetExitCodeProcess(<span class="keyword">static_cast&lt;</span>HANDLE<span class="keyword">&gt;</span>(m_handle), &amp;ec);</div>
+<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; </div>
+<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">if</span> (!ret) {</div>
+<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;GetExitCodeProcess&quot;</span>);</div>
+<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div>
+<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; </div>
+<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keywordflow">if</span> (ec == STILL_ACTIVE) {</div>
+<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">throw</span> std::runtime_error{<span class="stringliteral">&quot;Attempted to query the exit code of a running process&quot;</span>};</div>
+<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; }</div>
+<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; </div>
+<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(ec);</div>
+<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;}</div>
+<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; </div>
+<div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#a86cea0dd87e63ef93f6575d601ab31f5"> 342</a></span>&#160;std::string <a class="code" href="classwinapi_1_1Process.html#a86cea0dd87e63ef93f6575d601ab31f5">Process::get_exe_path</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">if</span> (m_handle.get() == ::GetCurrentProcess()) {</div>
+<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">return</span> get_current_exe_path();</div>
+<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordflow">return</span> winapi::get_exe_path(m_handle);</div>
+<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; }</div>
+<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;}</div>
+<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; </div>
+<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;HMODULE Process::get_exe_module() {</div>
+<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> module = ::GetModuleHandleW(NULL);</div>
+<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">if</span> (module == NULL) {</div>
+<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;GetModuleHandleW&quot;</span>);</div>
+<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; }</div>
+<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">return</span> module;</div>
+<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;}</div>
+<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; </div>
+<div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#ac700bc836a720384bed52a032628aaeb"> 358</a></span>&#160;std::string <a class="code" href="classwinapi_1_1Process.html#ac700bc836a720384bed52a032628aaeb">Process::get_resource_string</a>(uint32_t <span class="keywordtype">id</span>) {</div>
+<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordtype">wchar_t</span>* s = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; </div>
+<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> nch = ::LoadStringW(get_exe_module(), <span class="keywordtype">id</span>, <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">wchar_t</span>*<span class="keyword">&gt;</span>(&amp;s), 0);</div>
+<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; </div>
+<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">if</span> (nch &lt;= 0) {</div>
+<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;LoadStringW&quot;</span>);</div>
+<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; }</div>
+<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; </div>
+<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">return</span> narrow(s, nch * <span class="keyword">sizeof</span>(<span class="keywordtype">wchar_t</span>));</div>
+<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;}</div>
+<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; </div>
+<div class="line"><a name="l00370"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#a4ddbc4be71879ea7f91b05ad7f44435c"> 370</a></span>&#160;<a class="code" href="structwinapi_1_1Resource.html">Resource</a> <a class="code" href="classwinapi_1_1Process.html#a4ddbc4be71879ea7f91b05ad7f44435c">Process::get_resource</a>(uint32_t <span class="keywordtype">id</span>) {</div>
+<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> module = get_exe_module();</div>
+<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; </div>
+<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> src = ::FindResourceA(module, MAKEINTRESOURCEA(<span class="keywordtype">id</span>), RT_RCDATA);</div>
+<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; </div>
+<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordflow">if</span> (src == NULL) {</div>
+<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;FindResourceA&quot;</span>);</div>
+<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; }</div>
+<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; </div>
+<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> resource = ::LoadResource(module, src);</div>
+<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; </div>
+<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">if</span> (resource == NULL) {</div>
+<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;LoadResource&quot;</span>);</div>
+<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; }</div>
+<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; </div>
+<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> data = ::LockResource(resource);</div>
+<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; </div>
+<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">if</span> (data == NULL) {</div>
+<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; std::ostringstream oss;</div>
+<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; oss &lt;&lt; <span class="stringliteral">&quot;Couldn&#39;t get data pointer for resource with ID &quot;</span> &lt;&lt; id;</div>
+<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">throw</span> std::runtime_error{oss.str()};</div>
+<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; }</div>
+<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; </div>
+<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> nb = ::SizeofResource(module, src);</div>
+<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; </div>
+<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">return</span> {data, nb};</div>
+<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;}</div>
+<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; </div>
+<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;Process::Process(<a class="code" href="classwinapi_1_1Handle.html">Handle</a>&amp;&amp; handle) : <a class="code" href="classwinapi_1_1Process.html">Process</a>{::GetProcessId(handle.get()), std::move(handle)} {}</div>
+<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; </div>
+<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;Process::Process(ID <span class="keywordtype">id</span>, Handle&amp;&amp; handle) : m_id{id}, m_handle{std::move(handle)} {}</div>
+<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; </div>
+<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html"><div class="ttname"><a href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></div><div class="ttdoc">Command line for the current process or for launching new processes.</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8hpp_source.html#l00021">cmd_line.hpp:21</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html"><div class="ttname"><a href="classwinapi_1_1Handle.html">winapi::Handle</a></div><div class="ttdoc">HANDLE wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="handle_8hpp_source.html#l00025">handle.hpp:25</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html"><div class="ttname"><a href="classwinapi_1_1Process.html">winapi::Process</a></div><div class="ttdoc">Create a new process or open an existing process.</div><div class="ttdef"><b>Definition:</b> <a href="process_8hpp_source.html#l00054">process.hpp:54</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a155aefb272a151126fe2a65d583be880"><div class="ttname"><a href="classwinapi_1_1Process.html#a155aefb272a151126fe2a65d583be880">winapi::Process::terminate</a></div><div class="ttdeci">void terminate(int ec=0) const</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00315">process.cpp:315</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a1aedc4814dd9c154b6e03e572d873755"><div class="ttname"><a href="classwinapi_1_1Process.html#a1aedc4814dd9c154b6e03e572d873755">winapi::Process::shut_down</a></div><div class="ttdeci">void shut_down(int ec=0) const</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00321">process.cpp:321</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a273dcbc8cd69539d0f9fd4d1e09e67a7"><div class="ttname"><a href="classwinapi_1_1Process.html#a273dcbc8cd69539d0f9fd4d1e09e67a7">winapi::Process::wait</a></div><div class="ttdeci">void wait() const</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00301">process.cpp:301</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a359c11337c7e50370cd5375efa841131"><div class="ttname"><a href="classwinapi_1_1Process.html#a359c11337c7e50370cd5375efa841131">winapi::Process::get_exit_code</a></div><div class="ttdeci">int get_exit_code() const</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00326">process.cpp:326</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a48964bbb7968bd7b6796e8a3306d58d9"><div class="ttname"><a href="classwinapi_1_1Process.html#a48964bbb7968bd7b6796e8a3306d58d9">winapi::Process::open</a></div><div class="ttdeci">static Process open(ID id, DWORD permissions=default_permissions())</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00269">process.cpp:269</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a4ddbc4be71879ea7f91b05ad7f44435c"><div class="ttname"><a href="classwinapi_1_1Process.html#a4ddbc4be71879ea7f91b05ad7f44435c">winapi::Process::get_resource</a></div><div class="ttdeci">static Resource get_resource(uint32_t id)</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00370">process.cpp:370</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a4edc58e78ee81e5531af34fc4f806e24"><div class="ttname"><a href="classwinapi_1_1Process.html#a4edc58e78ee81e5531af34fc4f806e24">winapi::Process::current</a></div><div class="ttdeci">static Process current()</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00265">process.cpp:265</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a4fc3ed404c1cf67dabb7867d0c9f638c"><div class="ttname"><a href="classwinapi_1_1Process.html#a4fc3ed404c1cf67dabb7867d0c9f638c">winapi::Process::read_permissions</a></div><div class="ttdeci">static DWORD read_permissions()</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00281">process.cpp:281</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a4fffc3755642f3db56902106f1b96040"><div class="ttname"><a href="classwinapi_1_1Process.html#a4fffc3755642f3db56902106f1b96040">winapi::Process::default_permissions</a></div><div class="ttdeci">static DWORD default_permissions()</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00277">process.cpp:277</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a5b02393edb57bd902e321037133c40eb"><div class="ttname"><a href="classwinapi_1_1Process.html#a5b02393edb57bd902e321037133c40eb">winapi::Process::is_running</a></div><div class="ttdeci">bool is_running() const</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00285">process.cpp:285</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a6ef0ce275ef09ed6ef1e115afeee7e6a"><div class="ttname"><a href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">winapi::Process::create</a></div><div class="ttdeci">static Process create(ProcessParameters)</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00241">process.cpp:241</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a86cea0dd87e63ef93f6575d601ab31f5"><div class="ttname"><a href="classwinapi_1_1Process.html#a86cea0dd87e63ef93f6575d601ab31f5">winapi::Process::get_exe_path</a></div><div class="ttdeci">std::string get_exe_path() const</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00342">process.cpp:342</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_aa9f7cbc9b0e5530f0746606aacc5584e"><div class="ttname"><a href="classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e">winapi::Process::shell</a></div><div class="ttdeci">static Process shell(const ShellParameters &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00256">process.cpp:256</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_ac700bc836a720384bed52a032628aaeb"><div class="ttname"><a href="classwinapi_1_1Process.html#ac700bc836a720384bed52a032628aaeb">winapi::Process::get_resource_string</a></div><div class="ttdeci">static std::string get_resource_string(uint32_t id)</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00358">process.cpp:358</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_af9d748078299957519ee67fd7f1e49b3"><div class="ttname"><a href="classwinapi_1_1Process.html#af9d748078299957519ee67fd7f1e49b3">winapi::Process::open_r</a></div><div class="ttdeci">static Process open_r(ID)</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00273">process.cpp:273</a></div></div>
+<div class="ttc" id="aerror_8hpp_html"><div class="ttname"><a href="error_8hpp.html">error.hpp</a></div><div class="ttdoc">Make std::system_error work with GetLastError().</div></div>
+<div class="ttc" id="astructwinapi_1_1ProcessParameters_html"><div class="ttname"><a href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></div><div class="ttdoc">Process parameters for Process::create().</div><div class="ttdef"><b>Definition:</b> <a href="process_8hpp_source.html#l00024">process.hpp:24</a></div></div>
+<div class="ttc" id="astructwinapi_1_1Resource_html"><div class="ttname"><a href="structwinapi_1_1Resource.html">winapi::Resource</a></div><div class="ttdoc">Resources embedded in a PE (Portable Executable).</div><div class="ttdef"><b>Definition:</b> <a href="resource_8hpp_source.html#l00015">resource.hpp:15</a></div></div>
+<div class="ttc" id="astructwinapi_1_1ShellParameters_html"><div class="ttname"><a href="structwinapi_1_1ShellParameters.html">winapi::ShellParameters</a></div><div class="ttdoc">Process parameters for Process::shell().</div><div class="ttdef"><b>Definition:</b> <a href="process_8hpp_source.html#l00039">process.hpp:39</a></div></div>
+<div class="ttc" id="astructwinapi_1_1process_1_1IO_html"><div class="ttname"><a href="structwinapi_1_1process_1_1IO.html">winapi::process::IO</a></div><div class="ttdoc">Child process IO settings.</div><div class="ttdef"><b>Definition:</b> <a href="process__io_8hpp_source.html#l00061">process_io.hpp:61</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/process_8hpp_source.html b/process_8hpp_source.html
new file mode 100644
index 0000000..a7e9a14
--- /dev/null
+++ b/process_8hpp_source.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: include/winapi/process.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1714771db42b7b5a0cd2ebe6e9736ed.html">winapi</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">process.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;cmd_line.hpp&quot;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &quot;handle.hpp&quot;</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &quot;process_io.hpp&quot;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;resource.hpp&quot;</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;boost/optional.hpp&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;windows.h&gt;</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
+<div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="structwinapi_1_1ProcessParameters.html"> 24</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structwinapi_1_1ProcessParameters.html">ProcessParameters</a> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">enum</span> ConsoleCreationMode {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; ConsoleNone,</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; ConsoleInherit,</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; ConsoleNew,</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; };</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structwinapi_1_1ProcessParameters.html">ProcessParameters</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a>&amp; cmd_line) : cmd_line{cmd_line} {}</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a> cmd_line;</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; boost::optional&lt;process::IO&gt; io;</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; ConsoleCreationMode console_mode = ConsoleNew;</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;};</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="structwinapi_1_1ShellParameters.html"> 39</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structwinapi_1_1ShellParameters.html">ShellParameters</a> : <a class="code" href="structwinapi_1_1ProcessParameters.html">ProcessParameters</a> {</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">static</span> <a class="code" href="structwinapi_1_1ShellParameters.html">ShellParameters</a> runas(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a>&amp; cmd_line) {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="structwinapi_1_1ShellParameters.html">ShellParameters</a> params{cmd_line};</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; params.verb = <span class="stringliteral">&quot;runas&quot;</span>;</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> params;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structwinapi_1_1ShellParameters.html">ShellParameters</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a>&amp; cmd_line) : <a class="code" href="structwinapi_1_1ProcessParameters.html">ProcessParameters</a>{cmd_line} {}</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; boost::optional&lt;std::string&gt; verb;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;};</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; </div>
+<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html"> 54</a></span>&#160;<span class="keyword">class </span><a class="code" href="classwinapi_1_1Process.html">Process</a> {</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">using</span> ID = DWORD;</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1Process.html">Process</a> <a class="code" href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">create</a>(<a class="code" href="structwinapi_1_1ProcessParameters.html">ProcessParameters</a>);</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1Process.html">Process</a> <a class="code" href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">create</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a>&amp;);</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1Process.html">Process</a> <a class="code" href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">create</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a>&amp;, <a class="code" href="structwinapi_1_1process_1_1IO.html">process::IO</a>);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1Process.html">Process</a> <a class="code" href="classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e">shell</a>(<span class="keyword">const</span> <a class="code" href="structwinapi_1_1ShellParameters.html">ShellParameters</a>&amp;);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1Process.html">Process</a> <a class="code" href="classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e">shell</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CommandLine.html">CommandLine</a>&amp;);</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1Process.html">Process</a> <a class="code" href="classwinapi_1_1Process.html#a4edc58e78ee81e5531af34fc4f806e24">current</a>();</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1Process.html">Process</a> <a class="code" href="classwinapi_1_1Process.html#a48964bbb7968bd7b6796e8a3306d58d9">open</a>(ID <span class="keywordtype">id</span>, DWORD permissions = <a class="code" href="classwinapi_1_1Process.html#a4fffc3755642f3db56902106f1b96040">default_permissions</a>());</div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1Process.html">Process</a> <a class="code" href="classwinapi_1_1Process.html#af9d748078299957519ee67fd7f1e49b3">open_r</a>(ID);</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; </div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keyword">static</span> DWORD <a class="code" href="classwinapi_1_1Process.html#a4fffc3755642f3db56902106f1b96040">default_permissions</a>();</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keyword">static</span> DWORD <a class="code" href="classwinapi_1_1Process.html#a4fc3ed404c1cf67dabb7867d0c9f638c">read_permissions</a>();</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; </div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#aa44a8ca82178dfedd68865e4e47f7584"> 87</a></span>&#160; ID <a class="code" href="classwinapi_1_1Process.html#aa44a8ca82178dfedd68865e4e47f7584">get_id</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_id; }</div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classwinapi_1_1Process.html#a1b65a0f6dc25c1810161f2c5c9648249"> 89</a></span>&#160; <span class="keyword">const</span> <a class="code" href="classwinapi_1_1Handle.html">Handle</a>&amp; <a class="code" href="classwinapi_1_1Process.html#a1b65a0f6dc25c1810161f2c5c9648249">get_handle</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_handle; }</div>
+<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
+<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classwinapi_1_1Process.html#a5b02393edb57bd902e321037133c40eb">is_running</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classwinapi_1_1Process.html#a273dcbc8cd69539d0f9fd4d1e09e67a7">wait</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classwinapi_1_1Process.html#a155aefb272a151126fe2a65d583be880">terminate</a>(<span class="keywordtype">int</span> ec = 0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classwinapi_1_1Process.html#a1aedc4814dd9c154b6e03e572d873755">shut_down</a>(<span class="keywordtype">int</span> ec = 0) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classwinapi_1_1Process.html#a359c11337c7e50370cd5375efa841131">get_exit_code</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; </div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; std::string <a class="code" href="classwinapi_1_1Process.html#a86cea0dd87e63ef93f6575d601ab31f5">get_exe_path</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; </div>
+<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">static</span> <a class="code" href="structwinapi_1_1Resource.html">Resource</a> <a class="code" href="classwinapi_1_1Process.html#a4ddbc4be71879ea7f91b05ad7f44435c">get_resource</a>(uint32_t <span class="keywordtype">id</span>);</div>
+<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">static</span> std::string <a class="code" href="classwinapi_1_1Process.html#ac700bc836a720384bed52a032628aaeb">get_resource_string</a>(uint32_t <span class="keywordtype">id</span>);</div>
+<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
+<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classwinapi_1_1Process.html">Process</a>(<a class="code" href="classwinapi_1_1Handle.html">Handle</a>&amp;&amp; handle);</div>
+<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="classwinapi_1_1Process.html">Process</a>(ID, <a class="code" href="classwinapi_1_1Handle.html">Handle</a>&amp;&amp; handle);</div>
+<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
+<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keyword">static</span> HMODULE get_exe_module();</div>
+<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; </div>
+<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; ID m_id;</div>
+<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="classwinapi_1_1Handle.html">Handle</a> m_handle;</div>
+<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;};</div>
+<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; </div>
+<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1CommandLine_html"><div class="ttname"><a href="classwinapi_1_1CommandLine.html">winapi::CommandLine</a></div><div class="ttdoc">Command line for the current process or for launching new processes.</div><div class="ttdef"><b>Definition:</b> <a href="cmd__line_8hpp_source.html#l00021">cmd_line.hpp:21</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html"><div class="ttname"><a href="classwinapi_1_1Handle.html">winapi::Handle</a></div><div class="ttdoc">HANDLE wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="handle_8hpp_source.html#l00025">handle.hpp:25</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html"><div class="ttname"><a href="classwinapi_1_1Process.html">winapi::Process</a></div><div class="ttdoc">Create a new process or open an existing process.</div><div class="ttdef"><b>Definition:</b> <a href="process_8hpp_source.html#l00054">process.hpp:54</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a155aefb272a151126fe2a65d583be880"><div class="ttname"><a href="classwinapi_1_1Process.html#a155aefb272a151126fe2a65d583be880">winapi::Process::terminate</a></div><div class="ttdeci">void terminate(int ec=0) const</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00315">process.cpp:315</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a1aedc4814dd9c154b6e03e572d873755"><div class="ttname"><a href="classwinapi_1_1Process.html#a1aedc4814dd9c154b6e03e572d873755">winapi::Process::shut_down</a></div><div class="ttdeci">void shut_down(int ec=0) const</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00321">process.cpp:321</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a1b65a0f6dc25c1810161f2c5c9648249"><div class="ttname"><a href="classwinapi_1_1Process.html#a1b65a0f6dc25c1810161f2c5c9648249">winapi::Process::get_handle</a></div><div class="ttdeci">const Handle &amp; get_handle() const</div><div class="ttdef"><b>Definition:</b> <a href="process_8hpp_source.html#l00089">process.hpp:89</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a273dcbc8cd69539d0f9fd4d1e09e67a7"><div class="ttname"><a href="classwinapi_1_1Process.html#a273dcbc8cd69539d0f9fd4d1e09e67a7">winapi::Process::wait</a></div><div class="ttdeci">void wait() const</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00301">process.cpp:301</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a359c11337c7e50370cd5375efa841131"><div class="ttname"><a href="classwinapi_1_1Process.html#a359c11337c7e50370cd5375efa841131">winapi::Process::get_exit_code</a></div><div class="ttdeci">int get_exit_code() const</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00326">process.cpp:326</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a48964bbb7968bd7b6796e8a3306d58d9"><div class="ttname"><a href="classwinapi_1_1Process.html#a48964bbb7968bd7b6796e8a3306d58d9">winapi::Process::open</a></div><div class="ttdeci">static Process open(ID id, DWORD permissions=default_permissions())</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00269">process.cpp:269</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a4ddbc4be71879ea7f91b05ad7f44435c"><div class="ttname"><a href="classwinapi_1_1Process.html#a4ddbc4be71879ea7f91b05ad7f44435c">winapi::Process::get_resource</a></div><div class="ttdeci">static Resource get_resource(uint32_t id)</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00370">process.cpp:370</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a4edc58e78ee81e5531af34fc4f806e24"><div class="ttname"><a href="classwinapi_1_1Process.html#a4edc58e78ee81e5531af34fc4f806e24">winapi::Process::current</a></div><div class="ttdeci">static Process current()</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00265">process.cpp:265</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a4fc3ed404c1cf67dabb7867d0c9f638c"><div class="ttname"><a href="classwinapi_1_1Process.html#a4fc3ed404c1cf67dabb7867d0c9f638c">winapi::Process::read_permissions</a></div><div class="ttdeci">static DWORD read_permissions()</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00281">process.cpp:281</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a4fffc3755642f3db56902106f1b96040"><div class="ttname"><a href="classwinapi_1_1Process.html#a4fffc3755642f3db56902106f1b96040">winapi::Process::default_permissions</a></div><div class="ttdeci">static DWORD default_permissions()</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00277">process.cpp:277</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a5b02393edb57bd902e321037133c40eb"><div class="ttname"><a href="classwinapi_1_1Process.html#a5b02393edb57bd902e321037133c40eb">winapi::Process::is_running</a></div><div class="ttdeci">bool is_running() const</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00285">process.cpp:285</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a6ef0ce275ef09ed6ef1e115afeee7e6a"><div class="ttname"><a href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">winapi::Process::create</a></div><div class="ttdeci">static Process create(ProcessParameters)</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00241">process.cpp:241</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_a86cea0dd87e63ef93f6575d601ab31f5"><div class="ttname"><a href="classwinapi_1_1Process.html#a86cea0dd87e63ef93f6575d601ab31f5">winapi::Process::get_exe_path</a></div><div class="ttdeci">std::string get_exe_path() const</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00342">process.cpp:342</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_aa44a8ca82178dfedd68865e4e47f7584"><div class="ttname"><a href="classwinapi_1_1Process.html#aa44a8ca82178dfedd68865e4e47f7584">winapi::Process::get_id</a></div><div class="ttdeci">ID get_id() const</div><div class="ttdef"><b>Definition:</b> <a href="process_8hpp_source.html#l00087">process.hpp:87</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_aa9f7cbc9b0e5530f0746606aacc5584e"><div class="ttname"><a href="classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e">winapi::Process::shell</a></div><div class="ttdeci">static Process shell(const ShellParameters &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00256">process.cpp:256</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_ac700bc836a720384bed52a032628aaeb"><div class="ttname"><a href="classwinapi_1_1Process.html#ac700bc836a720384bed52a032628aaeb">winapi::Process::get_resource_string</a></div><div class="ttdeci">static std::string get_resource_string(uint32_t id)</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00358">process.cpp:358</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Process_html_af9d748078299957519ee67fd7f1e49b3"><div class="ttname"><a href="classwinapi_1_1Process.html#af9d748078299957519ee67fd7f1e49b3">winapi::Process::open_r</a></div><div class="ttdeci">static Process open_r(ID)</div><div class="ttdef"><b>Definition:</b> <a href="process_8cpp_source.html#l00273">process.cpp:273</a></div></div>
+<div class="ttc" id="astructwinapi_1_1ProcessParameters_html"><div class="ttname"><a href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></div><div class="ttdoc">Process parameters for Process::create().</div><div class="ttdef"><b>Definition:</b> <a href="process_8hpp_source.html#l00024">process.hpp:24</a></div></div>
+<div class="ttc" id="astructwinapi_1_1Resource_html"><div class="ttname"><a href="structwinapi_1_1Resource.html">winapi::Resource</a></div><div class="ttdoc">Resources embedded in a PE (Portable Executable).</div><div class="ttdef"><b>Definition:</b> <a href="resource_8hpp_source.html#l00015">resource.hpp:15</a></div></div>
+<div class="ttc" id="astructwinapi_1_1ShellParameters_html"><div class="ttname"><a href="structwinapi_1_1ShellParameters.html">winapi::ShellParameters</a></div><div class="ttdoc">Process parameters for Process::shell().</div><div class="ttdef"><b>Definition:</b> <a href="process_8hpp_source.html#l00039">process.hpp:39</a></div></div>
+<div class="ttc" id="astructwinapi_1_1process_1_1IO_html"><div class="ttname"><a href="structwinapi_1_1process_1_1IO.html">winapi::process::IO</a></div><div class="ttdoc">Child process IO settings.</div><div class="ttdef"><b>Definition:</b> <a href="process__io_8hpp_source.html#l00061">process_io.hpp:61</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/process__io_8cpp_source.html b/process__io_8cpp_source.html
new file mode 100644
index 0000000..8890791
--- /dev/null
+++ b/process__io_8cpp_source.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: src/process_io.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">process_io.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &lt;winapi/file.hpp&gt;</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &lt;winapi/handle.hpp&gt;</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;winapi/path.hpp&gt;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;winapi/process_io.hpp&gt;</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; </div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="keyword">namespace </span>process {</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
+<div class="line"><a name="l00017"></a><span class="lineno"><a class="line" href="structwinapi_1_1process_1_1Stdin.html#ab551f076d049c58b5391847ec0fe8999"> 17</a></span>&#160;<a class="code" href="structwinapi_1_1process_1_1Stdin.html#ab551f076d049c58b5391847ec0fe8999">Stdin::Stdin</a>() : <a class="code" href="structwinapi_1_1process_1_1Stream.html">Stream</a>{<a class="code" href="classwinapi_1_1Handle.html">Handle</a>::std_in()} {}</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
+<div class="line"><a name="l00019"></a><span class="lineno"><a class="line" href="structwinapi_1_1process_1_1Stdout.html#a1afc245b79c17e05bee9931f347a34e5"> 19</a></span>&#160;<a class="code" href="structwinapi_1_1process_1_1Stdout.html#a1afc245b79c17e05bee9931f347a34e5">Stdout::Stdout</a>() : <a class="code" href="structwinapi_1_1process_1_1Stream.html">Stream</a>{<a class="code" href="classwinapi_1_1Handle.html">Handle</a>::std_out()} {}</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="structwinapi_1_1process_1_1Stderr.html#aefbbae355c05c41f177ed5c3f769809c"> 21</a></span>&#160;<a class="code" href="structwinapi_1_1process_1_1Stderr.html#aefbbae355c05c41f177ed5c3f769809c">Stderr::Stderr</a>() : <a class="code" href="structwinapi_1_1process_1_1Stream.html">Stream</a>{<a class="code" href="classwinapi_1_1Handle.html">Handle</a>::std_err()} {}</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno"><a class="line" href="structwinapi_1_1process_1_1Stdin.html#a68803e010fad2a3634c031bc14a0d857"> 23</a></span>&#160;<a class="code" href="structwinapi_1_1process_1_1Stdin.html#ab551f076d049c58b5391847ec0fe8999">Stdin::Stdin</a>(<span class="keyword">const</span> std::string&amp; path) : <a class="code" href="structwinapi_1_1process_1_1Stream.html">Stream</a>{<a class="code" href="classwinapi_1_1File.html">File</a>::open_r(path)} {}</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="structwinapi_1_1process_1_1Stdin.html#a77e20c39f33a6b8e8ffffa8972c924a7"> 25</a></span>&#160;<a class="code" href="structwinapi_1_1process_1_1Stdin.html#ab551f076d049c58b5391847ec0fe8999">Stdin::Stdin</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a>&amp; path) : <a class="code" href="structwinapi_1_1process_1_1Stream.html">Stream</a>{<a class="code" href="classwinapi_1_1File.html">File</a>::open_r(path)} {}</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="structwinapi_1_1process_1_1Stdout.html#a7319a44d66f5c109bea89a04ca4c4ba2"> 27</a></span>&#160;<a class="code" href="structwinapi_1_1process_1_1Stdout.html#a1afc245b79c17e05bee9931f347a34e5">Stdout::Stdout</a>(<span class="keyword">const</span> std::string&amp; path) : <a class="code" href="structwinapi_1_1process_1_1Stream.html">Stream</a>{<a class="code" href="classwinapi_1_1File.html">File</a>::open_w(path)} {}</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="structwinapi_1_1process_1_1Stdout.html#ab70d4bff6f55c51fec06efdaa4fcdb81"> 29</a></span>&#160;<a class="code" href="structwinapi_1_1process_1_1Stdout.html#a1afc245b79c17e05bee9931f347a34e5">Stdout::Stdout</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a>&amp; path) : <a class="code" href="structwinapi_1_1process_1_1Stream.html">Stream</a>{<a class="code" href="classwinapi_1_1File.html">File</a>::open_w(path)} {}</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
+<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="structwinapi_1_1process_1_1Stderr.html#a9906ac147b47c7e7b8a299e942cb77c5"> 31</a></span>&#160;<a class="code" href="structwinapi_1_1process_1_1Stderr.html#aefbbae355c05c41f177ed5c3f769809c">Stderr::Stderr</a>(<span class="keyword">const</span> std::string&amp; path) : <a class="code" href="structwinapi_1_1process_1_1Stream.html">Stream</a>{<a class="code" href="classwinapi_1_1File.html">File</a>::open_w(path)} {}</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
+<div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="structwinapi_1_1process_1_1Stderr.html#a1daa6ec6ad6b30d9958b2ee76f086230"> 33</a></span>&#160;<a class="code" href="structwinapi_1_1process_1_1Stderr.html#aefbbae355c05c41f177ed5c3f769809c">Stderr::Stderr</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a>&amp; path) : <a class="code" href="structwinapi_1_1process_1_1Stream.html">Stream</a>{<a class="code" href="classwinapi_1_1File.html">File</a>::open_w(path)} {}</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
+<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="structwinapi_1_1process_1_1Stdin.html#afc350d91445057721b1d87a4e759da4e"> 35</a></span>&#160;<a class="code" href="structwinapi_1_1process_1_1Stdin.html#ab551f076d049c58b5391847ec0fe8999">Stdin::Stdin</a>(<a class="code" href="classwinapi_1_1Pipe.html">Pipe</a>&amp; pipe) : <a class="code" href="structwinapi_1_1process_1_1Stream.html">Stream</a>{std::move(pipe.read_end())} {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; pipe.<a class="code" href="classwinapi_1_1Pipe.html#a19e504588020c68639154ed597151cd6">write_end</a>().dont_inherit();</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;}</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="structwinapi_1_1process_1_1Stdout.html#afa84e724674b234d395c766b3d04582d"> 39</a></span>&#160;<a class="code" href="structwinapi_1_1process_1_1Stdout.html#a1afc245b79c17e05bee9931f347a34e5">Stdout::Stdout</a>(<a class="code" href="classwinapi_1_1Pipe.html">Pipe</a>&amp; pipe) : <a class="code" href="structwinapi_1_1process_1_1Stream.html">Stream</a>{std::move(pipe.write_end())} {</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; pipe.<a class="code" href="classwinapi_1_1Pipe.html#a07412b04db253f1c24fe4aeda5db82e1">read_end</a>().dont_inherit();</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;}</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="structwinapi_1_1process_1_1Stderr.html#a0fca971e15b205e971a18c206d1c8003"> 43</a></span>&#160;<a class="code" href="structwinapi_1_1process_1_1Stderr.html#aefbbae355c05c41f177ed5c3f769809c">Stderr::Stderr</a>(<a class="code" href="classwinapi_1_1Pipe.html">Pipe</a>&amp; pipe) : <a class="code" href="structwinapi_1_1process_1_1Stream.html">Stream</a>{std::move(pipe.write_end())} {</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; pipe.<a class="code" href="classwinapi_1_1Pipe.html#a07412b04db253f1c24fe4aeda5db82e1">read_end</a>().dont_inherit();</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keywordtype">void</span> IO::close() {</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; std_in.handle.<a class="code" href="classwinapi_1_1Handle.html#a6f28cc73ae2e3e447251cef0160e3555">close</a>();</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; std_out.handle.<a class="code" href="classwinapi_1_1Handle.html#a6f28cc73ae2e3e447251cef0160e3555">close</a>();</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; std_err.handle.<a class="code" href="classwinapi_1_1Handle.html#a6f28cc73ae2e3e447251cef0160e3555">close</a>();</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;}</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;} <span class="comment">// namespace process</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1CanonicalPath_html"><div class="ttname"><a href="classwinapi_1_1CanonicalPath.html">winapi::CanonicalPath</a></div><div class="ttdoc">Absolute, canonical path.</div><div class="ttdef"><b>Definition:</b> <a href="path_8hpp_source.html#l00013">path.hpp:13</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1File_html"><div class="ttname"><a href="classwinapi_1_1File.html">winapi::File</a></div><div class="ttdoc">File I/O.</div><div class="ttdef"><b>Definition:</b> <a href="file_8hpp_source.html#l00029">file.hpp:29</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html"><div class="ttname"><a href="classwinapi_1_1Handle.html">winapi::Handle</a></div><div class="ttdoc">HANDLE wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="handle_8hpp_source.html#l00025">handle.hpp:25</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html_a6f28cc73ae2e3e447251cef0160e3555"><div class="ttname"><a href="classwinapi_1_1Handle.html#a6f28cc73ae2e3e447251cef0160e3555">winapi::Handle::close</a></div><div class="ttdeci">void close()</div><div class="ttdef"><b>Definition:</b> <a href="handle_8cpp_source.html#l00047">handle.cpp:47</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Pipe_html"><div class="ttname"><a href="classwinapi_1_1Pipe.html">winapi::Pipe</a></div><div class="ttdoc">Anonymous pipe wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="pipe_8hpp_source.html#l00015">pipe.hpp:15</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Pipe_html_a07412b04db253f1c24fe4aeda5db82e1"><div class="ttname"><a href="classwinapi_1_1Pipe.html#a07412b04db253f1c24fe4aeda5db82e1">winapi::Pipe::read_end</a></div><div class="ttdeci">Handle &amp; read_end()</div><div class="ttdef"><b>Definition:</b> <a href="pipe_8hpp_source.html#l00021">pipe.hpp:21</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Pipe_html_a19e504588020c68639154ed597151cd6"><div class="ttname"><a href="classwinapi_1_1Pipe.html#a19e504588020c68639154ed597151cd6">winapi::Pipe::write_end</a></div><div class="ttdeci">Handle &amp; write_end()</div><div class="ttdef"><b>Definition:</b> <a href="pipe_8hpp_source.html#l00025">pipe.hpp:25</a></div></div>
+<div class="ttc" id="astructwinapi_1_1process_1_1Stderr_html_aefbbae355c05c41f177ed5c3f769809c"><div class="ttname"><a href="structwinapi_1_1process_1_1Stderr.html#aefbbae355c05c41f177ed5c3f769809c">winapi::process::Stderr::Stderr</a></div><div class="ttdeci">Stderr()</div><div class="ttdef"><b>Definition:</b> <a href="process__io_8cpp_source.html#l00021">process_io.cpp:21</a></div></div>
+<div class="ttc" id="astructwinapi_1_1process_1_1Stdin_html_ab551f076d049c58b5391847ec0fe8999"><div class="ttname"><a href="structwinapi_1_1process_1_1Stdin.html#ab551f076d049c58b5391847ec0fe8999">winapi::process::Stdin::Stdin</a></div><div class="ttdeci">Stdin()</div><div class="ttdef"><b>Definition:</b> <a href="process__io_8cpp_source.html#l00017">process_io.cpp:17</a></div></div>
+<div class="ttc" id="astructwinapi_1_1process_1_1Stdout_html_a1afc245b79c17e05bee9931f347a34e5"><div class="ttname"><a href="structwinapi_1_1process_1_1Stdout.html#a1afc245b79c17e05bee9931f347a34e5">winapi::process::Stdout::Stdout</a></div><div class="ttdeci">Stdout()</div><div class="ttdef"><b>Definition:</b> <a href="process__io_8cpp_source.html#l00019">process_io.cpp:19</a></div></div>
+<div class="ttc" id="astructwinapi_1_1process_1_1Stream_html"><div class="ttname"><a href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a></div><div class="ttdef"><b>Definition:</b> <a href="process__io_8hpp_source.html#l00018">process_io.hpp:18</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/process__io_8hpp_source.html b/process__io_8hpp_source.html
new file mode 100644
index 0000000..a7dc74b
--- /dev/null
+++ b/process__io_8hpp_source.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: include/winapi/process_io.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1714771db42b7b5a0cd2ebe6e9736ed.html">winapi</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">process_io.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;handle.hpp&quot;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &quot;path.hpp&quot;</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &quot;pipe.hpp&quot;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keyword">namespace </span>process {</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="structwinapi_1_1process_1_1Stream.html"> 18</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structwinapi_1_1process_1_1Stream.html">Stream</a> {</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <a class="code" href="structwinapi_1_1process_1_1Stream.html">Stream</a>(<a class="code" href="classwinapi_1_1Handle.html">Handle</a>&amp;&amp; handle) : handle{std::move(handle)} {}</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <a class="code" href="classwinapi_1_1Handle.html">Handle</a> handle;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;};</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="structwinapi_1_1process_1_1Stdin.html"> 25</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structwinapi_1_1process_1_1Stdin.html">Stdin</a> : <a class="code" href="structwinapi_1_1process_1_1Stream.html">Stream</a> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="structwinapi_1_1process_1_1Stdin.html#ab551f076d049c58b5391847ec0fe8999">Stdin</a>();</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structwinapi_1_1process_1_1Stdin.html#ab551f076d049c58b5391847ec0fe8999">Stdin</a>(<span class="keyword">const</span> std::string&amp; file);</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structwinapi_1_1process_1_1Stdin.html#ab551f076d049c58b5391847ec0fe8999">Stdin</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a>&amp; file);</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structwinapi_1_1process_1_1Stdin.html#ab551f076d049c58b5391847ec0fe8999">Stdin</a>(<a class="code" href="classwinapi_1_1Pipe.html">Pipe</a>&amp;);</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;};</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
+<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="structwinapi_1_1process_1_1Stdout.html"> 37</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structwinapi_1_1process_1_1Stdout.html">Stdout</a> : <a class="code" href="structwinapi_1_1process_1_1Stream.html">Stream</a> {</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="structwinapi_1_1process_1_1Stdout.html#a1afc245b79c17e05bee9931f347a34e5">Stdout</a>();</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structwinapi_1_1process_1_1Stdout.html#a1afc245b79c17e05bee9931f347a34e5">Stdout</a>(<span class="keyword">const</span> std::string&amp; file);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structwinapi_1_1process_1_1Stdout.html#a1afc245b79c17e05bee9931f347a34e5">Stdout</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a>&amp; file);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structwinapi_1_1process_1_1Stdout.html#a1afc245b79c17e05bee9931f347a34e5">Stdout</a>(<a class="code" href="classwinapi_1_1Pipe.html">Pipe</a>&amp;);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;};</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
+<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="structwinapi_1_1process_1_1Stderr.html"> 49</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structwinapi_1_1process_1_1Stderr.html">Stderr</a> : <a class="code" href="structwinapi_1_1process_1_1Stream.html">Stream</a> {</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="structwinapi_1_1process_1_1Stderr.html#aefbbae355c05c41f177ed5c3f769809c">Stderr</a>();</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structwinapi_1_1process_1_1Stderr.html#aefbbae355c05c41f177ed5c3f769809c">Stderr</a>(<span class="keyword">const</span> std::string&amp; file);</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structwinapi_1_1process_1_1Stderr.html#aefbbae355c05c41f177ed5c3f769809c">Stderr</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a>&amp; file);</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structwinapi_1_1process_1_1Stderr.html#aefbbae355c05c41f177ed5c3f769809c">Stderr</a>(<a class="code" href="classwinapi_1_1Pipe.html">Pipe</a>&amp;);</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;};</div>
+<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
+<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="structwinapi_1_1process_1_1IO.html"> 61</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structwinapi_1_1process_1_1IO.html">IO</a> {</div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="structwinapi_1_1process_1_1IO.html">IO</a>() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; </div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">void</span> close();</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="structwinapi_1_1process_1_1Stdin.html">Stdin</a> std_in;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="structwinapi_1_1process_1_1Stdout.html">Stdout</a> std_out;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="structwinapi_1_1process_1_1Stderr.html">Stderr</a> std_err;</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;};</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;} <span class="comment">// namespace process</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1CanonicalPath_html"><div class="ttname"><a href="classwinapi_1_1CanonicalPath.html">winapi::CanonicalPath</a></div><div class="ttdoc">Absolute, canonical path.</div><div class="ttdef"><b>Definition:</b> <a href="path_8hpp_source.html#l00013">path.hpp:13</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html"><div class="ttname"><a href="classwinapi_1_1Handle.html">winapi::Handle</a></div><div class="ttdoc">HANDLE wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="handle_8hpp_source.html#l00025">handle.hpp:25</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Pipe_html"><div class="ttname"><a href="classwinapi_1_1Pipe.html">winapi::Pipe</a></div><div class="ttdoc">Anonymous pipe wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="pipe_8hpp_source.html#l00015">pipe.hpp:15</a></div></div>
+<div class="ttc" id="astructwinapi_1_1process_1_1IO_html"><div class="ttname"><a href="structwinapi_1_1process_1_1IO.html">winapi::process::IO</a></div><div class="ttdoc">Child process IO settings.</div><div class="ttdef"><b>Definition:</b> <a href="process__io_8hpp_source.html#l00061">process_io.hpp:61</a></div></div>
+<div class="ttc" id="astructwinapi_1_1process_1_1Stderr_html"><div class="ttname"><a href="structwinapi_1_1process_1_1Stderr.html">winapi::process::Stderr</a></div><div class="ttdoc">Redirect child process's stderr.</div><div class="ttdef"><b>Definition:</b> <a href="process__io_8hpp_source.html#l00049">process_io.hpp:49</a></div></div>
+<div class="ttc" id="astructwinapi_1_1process_1_1Stderr_html_aefbbae355c05c41f177ed5c3f769809c"><div class="ttname"><a href="structwinapi_1_1process_1_1Stderr.html#aefbbae355c05c41f177ed5c3f769809c">winapi::process::Stderr::Stderr</a></div><div class="ttdeci">Stderr()</div><div class="ttdef"><b>Definition:</b> <a href="process__io_8cpp_source.html#l00021">process_io.cpp:21</a></div></div>
+<div class="ttc" id="astructwinapi_1_1process_1_1Stdin_html"><div class="ttname"><a href="structwinapi_1_1process_1_1Stdin.html">winapi::process::Stdin</a></div><div class="ttdoc">Redirect child process's stdin.</div><div class="ttdef"><b>Definition:</b> <a href="process__io_8hpp_source.html#l00025">process_io.hpp:25</a></div></div>
+<div class="ttc" id="astructwinapi_1_1process_1_1Stdin_html_ab551f076d049c58b5391847ec0fe8999"><div class="ttname"><a href="structwinapi_1_1process_1_1Stdin.html#ab551f076d049c58b5391847ec0fe8999">winapi::process::Stdin::Stdin</a></div><div class="ttdeci">Stdin()</div><div class="ttdef"><b>Definition:</b> <a href="process__io_8cpp_source.html#l00017">process_io.cpp:17</a></div></div>
+<div class="ttc" id="astructwinapi_1_1process_1_1Stdout_html"><div class="ttname"><a href="structwinapi_1_1process_1_1Stdout.html">winapi::process::Stdout</a></div><div class="ttdoc">Redirect child process's stdout.</div><div class="ttdef"><b>Definition:</b> <a href="process__io_8hpp_source.html#l00037">process_io.hpp:37</a></div></div>
+<div class="ttc" id="astructwinapi_1_1process_1_1Stdout_html_a1afc245b79c17e05bee9931f347a34e5"><div class="ttname"><a href="structwinapi_1_1process_1_1Stdout.html#a1afc245b79c17e05bee9931f347a34e5">winapi::process::Stdout::Stdout</a></div><div class="ttdeci">Stdout()</div><div class="ttdef"><b>Definition:</b> <a href="process__io_8cpp_source.html#l00019">process_io.cpp:19</a></div></div>
+<div class="ttc" id="astructwinapi_1_1process_1_1Stream_html"><div class="ttname"><a href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a></div><div class="ttdef"><b>Definition:</b> <a href="process__io_8hpp_source.html#l00018">process_io.hpp:18</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/resource_8hpp_source.html b/resource_8hpp_source.html
new file mode 100644
index 0000000..ca1bcbb
--- /dev/null
+++ b/resource_8hpp_source.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: include/winapi/resource.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1714771db42b7b5a0cd2ebe6e9736ed.html">winapi</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">resource.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;buffer.hpp&quot;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; </div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="structwinapi_1_1Resource.html"> 15</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structwinapi_1_1Resource.html">Resource</a> {</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; <span class="comment">// This is just a pointer to static data.</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <a class="code" href="structwinapi_1_1Resource.html">Resource</a>() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <a class="code" href="structwinapi_1_1Resource.html">Resource</a>(<span class="keyword">const</span> <span class="keywordtype">void</span>* data, std::size_t nb) : data{data}, nb{nb} {}</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno"><a class="line" href="structwinapi_1_1Resource.html#ac3bf07d20d3ce6705693ae7a86eb565d"> 23</a></span>&#160; <a class="code" href="classwinapi_1_1Buffer.html">Buffer</a> <a class="code" href="structwinapi_1_1Resource.html#ac3bf07d20d3ce6705693ae7a86eb565d">copy</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> {data, nb}; }</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">const</span> <span class="keywordtype">void</span>* data = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; std::size_t nb = 0;</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;};</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1Buffer_html"><div class="ttname"><a href="classwinapi_1_1Buffer.html">winapi::Buffer</a></div><div class="ttdoc">Binary data container.</div><div class="ttdef"><b>Definition:</b> <a href="buffer_8hpp_source.html#l00024">buffer.hpp:24</a></div></div>
+<div class="ttc" id="astructwinapi_1_1Resource_html"><div class="ttname"><a href="structwinapi_1_1Resource.html">winapi::Resource</a></div><div class="ttdoc">Resources embedded in a PE (Portable Executable).</div><div class="ttdef"><b>Definition:</b> <a href="resource_8hpp_source.html#l00015">resource.hpp:15</a></div></div>
+<div class="ttc" id="astructwinapi_1_1Resource_html_ac3bf07d20d3ce6705693ae7a86eb565d"><div class="ttname"><a href="structwinapi_1_1Resource.html#ac3bf07d20d3ce6705693ae7a86eb565d">winapi::Resource::copy</a></div><div class="ttdeci">Buffer copy() const</div><div class="ttdef"><b>Definition:</b> <a href="resource_8hpp_source.html#l00023">resource.hpp:23</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/search/all_0.html b/search/all_0.html
new file mode 100644
index 0000000..1ec5b2d
--- /dev/null
+++ b/search/all_0.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_0.js b/search/all_0.js
new file mode 100644
index 0000000..985f4a0
--- /dev/null
+++ b/search/all_0.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['add_0',['add',['../classwinapi_1_1Buffer.html#a303645b281fb4f1a4d9e84f1d1370182',1,'winapi::Buffer']]],
+ ['args_5fto_5fstring_1',['args_to_string',['../classwinapi_1_1CommandLine.html#afb35d8d6d2b8b66bd6f21d0adc37017f',1,'winapi::CommandLine']]],
+ ['as_5futf16_2',['as_utf16',['../classwinapi_1_1Buffer.html#ac5ca93f1935f2259db0d68e1884897d5',1,'winapi::Buffer']]],
+ ['as_5futf8_3',['as_utf8',['../classwinapi_1_1Buffer.html#afd8abcecacbcc9fdb4e5825068ebf561',1,'winapi::Buffer']]]
+];
diff --git a/search/all_1.html b/search/all_1.html
new file mode 100644
index 0000000..9f80e90
--- /dev/null
+++ b/search/all_1.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_1.js b/search/all_1.js
new file mode 100644
index 0000000..5a78cb8
--- /dev/null
+++ b/search/all_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['buffer_4',['Buffer',['../classwinapi_1_1Buffer.html#abb43686e0f2e5798bc7b2c0e47722458',1,'winapi::Buffer::Buffer(std::initializer_list&lt; unsigned char &gt; lst)'],['../classwinapi_1_1Buffer.html#a46241e1fd3443c383c3930329ca9e0dd',1,'winapi::Buffer::Buffer(Parent &amp;&amp;src)'],['../classwinapi_1_1Buffer.html#aa3566a7ac7025a2f88abe116082b55a7',1,'winapi::Buffer::Buffer(const std::basic_string&lt; CharT &gt; &amp;src)'],['../classwinapi_1_1Buffer.html#ab3649ebbd0cbc4b20d02b660a52be89c',1,'winapi::Buffer::Buffer(const void *src, std::size_t nb)'],['../classwinapi_1_1Buffer.html',1,'winapi::Buffer']]]
+];
diff --git a/search/all_10.html b/search/all_10.html
new file mode 100644
index 0000000..3bf1196
--- /dev/null
+++ b/search/all_10.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_10.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_10.js b/search/all_10.js
new file mode 100644
index 0000000..1edfaf2
--- /dev/null
+++ b/search/all_10.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['wait_69',['wait',['../classwinapi_1_1Process.html#a273dcbc8cd69539d0f9fd4d1e09e67a7',1,'winapi::Process']]],
+ ['winapi_2dcommon_70',['winapi-common',['../index.html',1,'']]],
+ ['windows_71',['windows',['../error_8hpp.html#a70c25be1dfd40860d125203f27e664ce',1,'winapi::error']]],
+ ['write_72',['write',['../classwinapi_1_1Handle.html#afbfe1b7de229eb5656504e05acf9bbcc',1,'winapi::Handle::write(const void *data, std::size_t nb) const'],['../classwinapi_1_1Handle.html#aee2ff37831d686a8140403c10d7ebadd',1,'winapi::Handle::write(const Buffer &amp;buffer) const'],['../classwinapi_1_1Handle.html#ab78fab4796ef5ec3f9576f19b54cfd04',1,'winapi::Handle::write(const std::basic_string&lt; CharT &gt; &amp;src) const']]],
+ ['write_5fend_73',['write_end',['../classwinapi_1_1Pipe.html#a19e504588020c68639154ed597151cd6',1,'winapi::Pipe::write_end()'],['../classwinapi_1_1Pipe.html#ad010465685f521c17bd4b6731ed00e00',1,'winapi::Pipe::write_end() const']]]
+];
diff --git a/search/all_2.html b/search/all_2.html
new file mode 100644
index 0000000..02cfffc
--- /dev/null
+++ b/search/all_2.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_2.js b/search/all_2.js
new file mode 100644
index 0000000..7d37183
--- /dev/null
+++ b/search/all_2.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+ ['canonicalize_5',['canonicalize',['../classwinapi_1_1CanonicalPath.html#a7072d3b77d4f437246744c9c2a9407db',1,'winapi::CanonicalPath']]],
+ ['canonicalpath_6',['CanonicalPath',['../classwinapi_1_1CanonicalPath.html',1,'winapi']]],
+ ['categorywindows_7',['CategoryWindows',['../classwinapi_1_1error_1_1CategoryWindows.html',1,'winapi::error']]],
+ ['close_8',['close',['../classwinapi_1_1Handle.html#a6f28cc73ae2e3e447251cef0160e3555',1,'winapi::Handle']]],
+ ['commandline_9',['CommandLine',['../classwinapi_1_1CommandLine.html#ad48bb83391e84db28c3c3c6bdf283003',1,'winapi::CommandLine::CommandLine()=default'],['../classwinapi_1_1CommandLine.html#a90b5d19b9cb4bbad2515c97bd74731c8',1,'winapi::CommandLine::CommandLine(const std::string &amp;argv0, const std::vector&lt; std::string &gt; &amp;args={})'],['../classwinapi_1_1CommandLine.html#ac0d211d82fd55cba2055a9679272a182',1,'winapi::CommandLine::CommandLine(std::string &amp;&amp;argv0, std::vector&lt; std::string &gt; &amp;&amp;args={})'],['../classwinapi_1_1CommandLine.html#a69e5c796f37637e39b2e1d7d95ba922a',1,'winapi::CommandLine::CommandLine(std::vector&lt; std::string &gt; argv)'],['../classwinapi_1_1CommandLine.html',1,'winapi::CommandLine']]],
+ ['copy_10',['copy',['../structwinapi_1_1Resource.html#ac3bf07d20d3ce6705693ae7a86eb565d',1,'winapi::Resource']]],
+ ['create_11',['create',['../classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a',1,'winapi::Process::create(ProcessParameters)'],['../classwinapi_1_1Process.html#ac4eaeb85aa25acec5e4421e1239f315f',1,'winapi::Process::create(const CommandLine &amp;)'],['../classwinapi_1_1Process.html#a16be6c3dc62d500ca8924b359e5193cc',1,'winapi::Process::create(const CommandLine &amp;, process::IO)'],['../classwinapi_1_1SharedMemory.html#a475d4dcdf99d777cb0968d7631cc6f7e',1,'winapi::SharedMemory::create()'],['../classwinapi_1_1SharedObject.html#acb4ef5283256d7463fe81c8b312b6745',1,'winapi::SharedObject::create()']]],
+ ['current_12',['current',['../classwinapi_1_1Process.html#a4edc58e78ee81e5531af34fc4f806e24',1,'winapi::Process']]]
+];
diff --git a/search/all_3.html b/search/all_3.html
new file mode 100644
index 0000000..39767b8
--- /dev/null
+++ b/search/all_3.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_3.js b/search/all_3.js
new file mode 100644
index 0000000..a270dc5
--- /dev/null
+++ b/search/all_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['default_5fpermissions_13',['default_permissions',['../classwinapi_1_1Process.html#a4fffc3755642f3db56902106f1b96040',1,'winapi::Process']]]
+];
diff --git a/search/all_4.html b/search/all_4.html
new file mode 100644
index 0000000..fc40463
--- /dev/null
+++ b/search/all_4.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_4.js b/search/all_4.js
new file mode 100644
index 0000000..19293a8
--- /dev/null
+++ b/search/all_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['error_2ehpp_14',['error.hpp',['../error_8hpp.html',1,'']]]
+];
diff --git a/search/all_5.html b/search/all_5.html
new file mode 100644
index 0000000..9dd9344
--- /dev/null
+++ b/search/all_5.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_5.js b/search/all_5.js
new file mode 100644
index 0000000..bdd029e
--- /dev/null
+++ b/search/all_5.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['file_15',['File',['../classwinapi_1_1File.html#a4ae67aba44ba64654b888ace9b7dfb36',1,'winapi::File::File()'],['../classwinapi_1_1File.html',1,'winapi::File']]],
+ ['from_5fmain_16',['from_main',['../classwinapi_1_1CommandLine.html#a7a7bc2a7461f2f275a12c9fda23d312d',1,'winapi::CommandLine']]]
+];
diff --git a/search/all_6.html b/search/all_6.html
new file mode 100644
index 0000000..f1e516d
--- /dev/null
+++ b/search/all_6.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_6.js b/search/all_6.js
new file mode 100644
index 0000000..209259e
--- /dev/null
+++ b/search/all_6.js
@@ -0,0 +1,14 @@
+var searchData=
+[
+ ['get_17',['get',['../classwinapi_1_1SharedMemory.html#ada3f0075608dd1541f54f004e18a4775',1,'winapi::SharedMemory::get()'],['../classwinapi_1_1SharedObject.html#a85d0943708ab0da78e1a189b1bbbd1eb',1,'winapi::SharedObject::get()']]],
+ ['get_5fargs_18',['get_args',['../classwinapi_1_1CommandLine.html#aef5ea9b427d975af8e64948802b54af4',1,'winapi::CommandLine']]],
+ ['get_5fargv_19',['get_argv',['../classwinapi_1_1CommandLine.html#ac21d30a214f529f80b91186e9724cf41',1,'winapi::CommandLine']]],
+ ['get_5fargv0_20',['get_argv0',['../classwinapi_1_1CommandLine.html#a8f75a5f374397c1c1dcc4900bf44ee32',1,'winapi::CommandLine']]],
+ ['get_5fexe_5fpath_21',['get_exe_path',['../classwinapi_1_1Process.html#a86cea0dd87e63ef93f6575d601ab31f5',1,'winapi::Process']]],
+ ['get_5fexit_5fcode_22',['get_exit_code',['../classwinapi_1_1Process.html#a359c11337c7e50370cd5375efa841131',1,'winapi::Process']]],
+ ['get_5fhandle_23',['get_handle',['../classwinapi_1_1Process.html#a1b65a0f6dc25c1810161f2c5c9648249',1,'winapi::Process']]],
+ ['get_5fid_24',['get_id',['../classwinapi_1_1Process.html#aa44a8ca82178dfedd68865e4e47f7584',1,'winapi::Process']]],
+ ['get_5fresource_25',['get_resource',['../classwinapi_1_1Process.html#a4ddbc4be71879ea7f91b05ad7f44435c',1,'winapi::Process']]],
+ ['get_5fresource_5fstring_26',['get_resource_string',['../classwinapi_1_1Process.html#ac700bc836a720384bed52a032628aaeb',1,'winapi::Process']]],
+ ['get_5fsize_27',['get_size',['../classwinapi_1_1File.html#ad3c43351e4c032caa78525fc15e64ca7',1,'winapi::File']]]
+];
diff --git a/search/all_7.html b/search/all_7.html
new file mode 100644
index 0000000..8ddbf6c
--- /dev/null
+++ b/search/all_7.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_7.js b/search/all_7.js
new file mode 100644
index 0000000..99b4d91
--- /dev/null
+++ b/search/all_7.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['handle_28',['Handle',['../classwinapi_1_1Handle.html',1,'winapi']]],
+ ['has_5fargs_29',['has_args',['../classwinapi_1_1CommandLine.html#ae87fa727498660661753d2d456873033',1,'winapi::CommandLine']]],
+ ['hash_3c_20winapi_3a_3afile_3a_3aid_20_3e_30',['hash&lt; winapi::File::ID &gt;',['../structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4.html',1,'std']]]
+];
diff --git a/search/all_8.html b/search/all_8.html
new file mode 100644
index 0000000..83c55ae
--- /dev/null
+++ b/search/all_8.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_8.js b/search/all_8.js
new file mode 100644
index 0000000..881113a
--- /dev/null
+++ b/search/all_8.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['id_31',['ID',['../structwinapi_1_1File_1_1ID.html',1,'winapi::File']]],
+ ['io_32',['IO',['../structwinapi_1_1process_1_1IO.html',1,'winapi::process']]],
+ ['is_5frunning_33',['is_running',['../classwinapi_1_1Process.html#a5b02393edb57bd902e321037133c40eb',1,'winapi::Process']]],
+ ['is_5fstd_34',['is_std',['../classwinapi_1_1Handle.html#acc001a0f466d9c92cf7f2ef62896afc5',1,'winapi::Handle']]]
+];
diff --git a/search/all_9.html b/search/all_9.html
new file mode 100644
index 0000000..1e263c1
--- /dev/null
+++ b/search/all_9.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_9.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_9.js b/search/all_9.js
new file mode 100644
index 0000000..6f0715a
--- /dev/null
+++ b/search/all_9.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['localdelete_35',['LocalDelete',['../structwinapi_1_1LocalDelete.html',1,'winapi']]]
+];
diff --git a/search/all_a.html b/search/all_a.html
new file mode 100644
index 0000000..3a6cac1
--- /dev/null
+++ b/search/all_a.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_a.js b/search/all_a.js
new file mode 100644
index 0000000..7c63c94
--- /dev/null
+++ b/search/all_a.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['open_36',['open',['../classwinapi_1_1Process.html#a48964bbb7968bd7b6796e8a3306d58d9',1,'winapi::Process::open()'],['../classwinapi_1_1SharedMemory.html#a82eafb0e7c2c6b5af1a7ff8945af2027',1,'winapi::SharedMemory::open()'],['../classwinapi_1_1SharedObject.html#a08fda6ddde26e0a10170efaf07232761',1,'winapi::SharedObject::open()']]],
+ ['open_5fr_37',['open_r',['../classwinapi_1_1File.html#ad3bacd22beea28dcb0a0df846b5c4215',1,'winapi::File::open_r(const std::string &amp;)'],['../classwinapi_1_1File.html#aaa308b06a55f992f71e76f9e7a629647',1,'winapi::File::open_r(const CanonicalPath &amp;)'],['../classwinapi_1_1Process.html#af9d748078299957519ee67fd7f1e49b3',1,'winapi::Process::open_r()']]],
+ ['open_5fread_5fattributes_38',['open_read_attributes',['../classwinapi_1_1File.html#a7d7eeb56c9f33f6ec1814472c61e51f4',1,'winapi::File::open_read_attributes(const std::string &amp;)'],['../classwinapi_1_1File.html#aecba0e33d05893021f93a2348aeefa34',1,'winapi::File::open_read_attributes(const CanonicalPath &amp;)']]],
+ ['open_5fw_39',['open_w',['../classwinapi_1_1File.html#a36cda85b326592d7eadca5dc4a6b7981',1,'winapi::File::open_w(const std::string &amp;)'],['../classwinapi_1_1File.html#a53bc6b8de007c630ac84d6519a520111',1,'winapi::File::open_w(const CanonicalPath &amp;)']]]
+];
diff --git a/search/all_b.html b/search/all_b.html
new file mode 100644
index 0000000..130deb4
--- /dev/null
+++ b/search/all_b.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_b.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_b.js b/search/all_b.js
new file mode 100644
index 0000000..ff248a5
--- /dev/null
+++ b/search/all_b.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['parse_40',['parse',['../classwinapi_1_1CommandLine.html#aabafd2d1d923c30c3da372909857e87e',1,'winapi::CommandLine']]],
+ ['pipe_41',['Pipe',['../classwinapi_1_1Pipe.html#aa41a6275dab93f4fc0d2e593aa9b39f0',1,'winapi::Pipe::Pipe()'],['../classwinapi_1_1Pipe.html',1,'winapi::Pipe']]],
+ ['process_42',['Process',['../classwinapi_1_1Process.html',1,'winapi']]],
+ ['processparameters_43',['ProcessParameters',['../structwinapi_1_1ProcessParameters.html',1,'winapi']]],
+ ['ptr_44',['ptr',['../classwinapi_1_1SharedMemory.html#a44e75ba35ae3e470fb521f6274991673',1,'winapi::SharedMemory::ptr()'],['../classwinapi_1_1SharedObject.html#a0dfaad2c143d60af8dc6c010a13d513a',1,'winapi::SharedObject::ptr()']]]
+];
diff --git a/search/all_c.html b/search/all_c.html
new file mode 100644
index 0000000..3dd5af0
--- /dev/null
+++ b/search/all_c.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_c.js b/search/all_c.js
new file mode 100644
index 0000000..9369c55
--- /dev/null
+++ b/search/all_c.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['query_45',['query',['../classwinapi_1_1CommandLine.html#aa07ee7bf5d61658f33e4a7571205ae5c',1,'winapi::CommandLine']]],
+ ['query_5fid_46',['query_id',['../classwinapi_1_1File.html#aed36137d5b730166cfec4e0f8a5a6fdd',1,'winapi::File']]]
+];
diff --git a/search/all_d.html b/search/all_d.html
new file mode 100644
index 0000000..af7f2f0
--- /dev/null
+++ b/search/all_d.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_d.js b/search/all_d.js
new file mode 100644
index 0000000..5cba3be
--- /dev/null
+++ b/search/all_d.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['read_47',['read',['../classwinapi_1_1Handle.html#ae340b095569654f8b709614f23577f2e',1,'winapi::Handle']]],
+ ['read_5fchunk_48',['read_chunk',['../classwinapi_1_1Handle.html#a31c8440493e29cdd9b6fc40ffe8c06f1',1,'winapi::Handle']]],
+ ['read_5fend_49',['read_end',['../classwinapi_1_1Pipe.html#a07412b04db253f1c24fe4aeda5db82e1',1,'winapi::Pipe::read_end()'],['../classwinapi_1_1Pipe.html#afc45a1f2a5cdee7bbe4f73dd62d667ac',1,'winapi::Pipe::read_end() const']]],
+ ['read_5fpermissions_50',['read_permissions',['../classwinapi_1_1Process.html#a4fc3ed404c1cf67dabb7867d0c9f638c',1,'winapi::Process']]],
+ ['remove_51',['remove',['../classwinapi_1_1File.html#a453828fe42006bc7b6e925c41d1e965e',1,'winapi::File::remove(const std::string &amp;)'],['../classwinapi_1_1File.html#a7aa6987387481fc3b2fc5187b0563e97',1,'winapi::File::remove(const CanonicalPath &amp;)']]],
+ ['resource_52',['Resource',['../structwinapi_1_1Resource.html',1,'winapi']]]
+];
diff --git a/search/all_e.html b/search/all_e.html
new file mode 100644
index 0000000..e25df42
--- /dev/null
+++ b/search/all_e.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_e.js b/search/all_e.js
new file mode 100644
index 0000000..7fdaf12
--- /dev/null
+++ b/search/all_e.js
@@ -0,0 +1,17 @@
+var searchData=
+[
+ ['set_53',['set',['../classwinapi_1_1Buffer.html#a0b2fad438202fbcfd4946baf3f879f59',1,'winapi::Buffer::set(const std::basic_string&lt; CharT &gt; &amp;src)'],['../classwinapi_1_1Buffer.html#ab09aa9c5075579510da463b4148ee610',1,'winapi::Buffer::set(const void *src, std::size_t nb)']]],
+ ['sharedmemory_54',['SharedMemory',['../classwinapi_1_1SharedMemory.html',1,'winapi']]],
+ ['sharedobject_55',['SharedObject',['../classwinapi_1_1SharedObject.html',1,'winapi']]],
+ ['shell_56',['shell',['../classwinapi_1_1Process.html#a24e1cbd68bc2dda73220b840979a84b0',1,'winapi::Process::shell(const CommandLine &amp;)'],['../classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e',1,'winapi::Process::shell(const ShellParameters &amp;)']]],
+ ['shellparameters_57',['ShellParameters',['../structwinapi_1_1ShellParameters.html',1,'winapi']]],
+ ['shut_5fdown_58',['shut_down',['../classwinapi_1_1Process.html#a1aedc4814dd9c154b6e03e572d873755',1,'winapi::Process']]],
+ ['sid_59',['Sid',['../classwinapi_1_1Sid.html',1,'winapi']]],
+ ['std_5ferr_60',['std_err',['../classwinapi_1_1Handle.html#a894d880e1241c9516889a7a63a0c1750',1,'winapi::Handle']]],
+ ['std_5fin_61',['std_in',['../classwinapi_1_1Handle.html#a1817fdf127291cf5f47d6429d8f468cd',1,'winapi::Handle']]],
+ ['std_5fout_62',['std_out',['../classwinapi_1_1Handle.html#a76e96327afd0b943d996c90289f2883e',1,'winapi::Handle']]],
+ ['stderr_63',['Stderr',['../structwinapi_1_1process_1_1Stderr.html#aefbbae355c05c41f177ed5c3f769809c',1,'winapi::process::Stderr::Stderr()'],['../structwinapi_1_1process_1_1Stderr.html#a9906ac147b47c7e7b8a299e942cb77c5',1,'winapi::process::Stderr::Stderr(const std::string &amp;file)'],['../structwinapi_1_1process_1_1Stderr.html#a1daa6ec6ad6b30d9958b2ee76f086230',1,'winapi::process::Stderr::Stderr(const CanonicalPath &amp;file)'],['../structwinapi_1_1process_1_1Stderr.html#a0fca971e15b205e971a18c206d1c8003',1,'winapi::process::Stderr::Stderr(Pipe &amp;)'],['../structwinapi_1_1process_1_1Stderr.html',1,'winapi::process::Stderr']]],
+ ['stdin_64',['Stdin',['../structwinapi_1_1process_1_1Stdin.html#ab551f076d049c58b5391847ec0fe8999',1,'winapi::process::Stdin::Stdin()'],['../structwinapi_1_1process_1_1Stdin.html#a68803e010fad2a3634c031bc14a0d857',1,'winapi::process::Stdin::Stdin(const std::string &amp;file)'],['../structwinapi_1_1process_1_1Stdin.html#a77e20c39f33a6b8e8ffffa8972c924a7',1,'winapi::process::Stdin::Stdin(const CanonicalPath &amp;file)'],['../structwinapi_1_1process_1_1Stdin.html#afc350d91445057721b1d87a4e759da4e',1,'winapi::process::Stdin::Stdin(Pipe &amp;)'],['../structwinapi_1_1process_1_1Stdin.html',1,'winapi::process::Stdin']]],
+ ['stdout_65',['Stdout',['../structwinapi_1_1process_1_1Stdout.html#afa84e724674b234d395c766b3d04582d',1,'winapi::process::Stdout::Stdout(Pipe &amp;)'],['../structwinapi_1_1process_1_1Stdout.html#ab70d4bff6f55c51fec06efdaa4fcdb81',1,'winapi::process::Stdout::Stdout(const CanonicalPath &amp;file)'],['../structwinapi_1_1process_1_1Stdout.html#a7319a44d66f5c109bea89a04ca4c4ba2',1,'winapi::process::Stdout::Stdout(const std::string &amp;file)'],['../structwinapi_1_1process_1_1Stdout.html#a1afc245b79c17e05bee9931f347a34e5',1,'winapi::process::Stdout::Stdout()'],['../structwinapi_1_1process_1_1Stdout.html',1,'winapi::process::Stdout']]],
+ ['stream_66',['Stream',['../structwinapi_1_1process_1_1Stream.html',1,'winapi::process']]]
+];
diff --git a/search/all_f.html b/search/all_f.html
new file mode 100644
index 0000000..b23da6c
--- /dev/null
+++ b/search/all_f.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_f.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/all_f.js b/search/all_f.js
new file mode 100644
index 0000000..125e527
--- /dev/null
+++ b/search/all_f.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['terminate_67',['terminate',['../classwinapi_1_1Process.html#a155aefb272a151126fe2a65d583be880',1,'winapi::Process']]],
+ ['to_5fstring_68',['to_string',['../classwinapi_1_1CommandLine.html#ac47e738f255a85b3e0605d40c0124b24',1,'winapi::CommandLine']]]
+];
diff --git a/search/classes_0.html b/search/classes_0.html
new file mode 100644
index 0000000..af8159e
--- /dev/null
+++ b/search/classes_0.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/classes_0.js b/search/classes_0.js
new file mode 100644
index 0000000..934d173
--- /dev/null
+++ b/search/classes_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['buffer_74',['Buffer',['../classwinapi_1_1Buffer.html',1,'winapi']]]
+];
diff --git a/search/classes_1.html b/search/classes_1.html
new file mode 100644
index 0000000..576e916
--- /dev/null
+++ b/search/classes_1.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/classes_1.js b/search/classes_1.js
new file mode 100644
index 0000000..d98081f
--- /dev/null
+++ b/search/classes_1.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['canonicalpath_75',['CanonicalPath',['../classwinapi_1_1CanonicalPath.html',1,'winapi']]],
+ ['categorywindows_76',['CategoryWindows',['../classwinapi_1_1error_1_1CategoryWindows.html',1,'winapi::error']]],
+ ['commandline_77',['CommandLine',['../classwinapi_1_1CommandLine.html',1,'winapi']]]
+];
diff --git a/search/classes_2.html b/search/classes_2.html
new file mode 100644
index 0000000..956405e
--- /dev/null
+++ b/search/classes_2.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/classes_2.js b/search/classes_2.js
new file mode 100644
index 0000000..d7824b8
--- /dev/null
+++ b/search/classes_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['file_78',['File',['../classwinapi_1_1File.html',1,'winapi']]]
+];
diff --git a/search/classes_3.html b/search/classes_3.html
new file mode 100644
index 0000000..d33343b
--- /dev/null
+++ b/search/classes_3.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/classes_3.js b/search/classes_3.js
new file mode 100644
index 0000000..0c23547
--- /dev/null
+++ b/search/classes_3.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['handle_79',['Handle',['../classwinapi_1_1Handle.html',1,'winapi']]],
+ ['hash_3c_20winapi_3a_3afile_3a_3aid_20_3e_80',['hash&lt; winapi::File::ID &gt;',['../structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4.html',1,'std']]]
+];
diff --git a/search/classes_4.html b/search/classes_4.html
new file mode 100644
index 0000000..8430b07
--- /dev/null
+++ b/search/classes_4.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/classes_4.js b/search/classes_4.js
new file mode 100644
index 0000000..31a1fdc
--- /dev/null
+++ b/search/classes_4.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['id_81',['ID',['../structwinapi_1_1File_1_1ID.html',1,'winapi::File']]],
+ ['io_82',['IO',['../structwinapi_1_1process_1_1IO.html',1,'winapi::process']]]
+];
diff --git a/search/classes_5.html b/search/classes_5.html
new file mode 100644
index 0000000..c2f1b76
--- /dev/null
+++ b/search/classes_5.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/classes_5.js b/search/classes_5.js
new file mode 100644
index 0000000..b61a065
--- /dev/null
+++ b/search/classes_5.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['localdelete_83',['LocalDelete',['../structwinapi_1_1LocalDelete.html',1,'winapi']]]
+];
diff --git a/search/classes_6.html b/search/classes_6.html
new file mode 100644
index 0000000..e39847c
--- /dev/null
+++ b/search/classes_6.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/classes_6.js b/search/classes_6.js
new file mode 100644
index 0000000..ab9a60d
--- /dev/null
+++ b/search/classes_6.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['pipe_84',['Pipe',['../classwinapi_1_1Pipe.html',1,'winapi']]],
+ ['process_85',['Process',['../classwinapi_1_1Process.html',1,'winapi']]],
+ ['processparameters_86',['ProcessParameters',['../structwinapi_1_1ProcessParameters.html',1,'winapi']]]
+];
diff --git a/search/classes_7.html b/search/classes_7.html
new file mode 100644
index 0000000..a2c4d1a
--- /dev/null
+++ b/search/classes_7.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/classes_7.js b/search/classes_7.js
new file mode 100644
index 0000000..5608448
--- /dev/null
+++ b/search/classes_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['resource_87',['Resource',['../structwinapi_1_1Resource.html',1,'winapi']]]
+];
diff --git a/search/classes_8.html b/search/classes_8.html
new file mode 100644
index 0000000..17003e4
--- /dev/null
+++ b/search/classes_8.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/classes_8.js b/search/classes_8.js
new file mode 100644
index 0000000..2cb4e19
--- /dev/null
+++ b/search/classes_8.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+ ['sharedmemory_88',['SharedMemory',['../classwinapi_1_1SharedMemory.html',1,'winapi']]],
+ ['sharedobject_89',['SharedObject',['../classwinapi_1_1SharedObject.html',1,'winapi']]],
+ ['shellparameters_90',['ShellParameters',['../structwinapi_1_1ShellParameters.html',1,'winapi']]],
+ ['sid_91',['Sid',['../classwinapi_1_1Sid.html',1,'winapi']]],
+ ['stderr_92',['Stderr',['../structwinapi_1_1process_1_1Stderr.html',1,'winapi::process']]],
+ ['stdin_93',['Stdin',['../structwinapi_1_1process_1_1Stdin.html',1,'winapi::process']]],
+ ['stdout_94',['Stdout',['../structwinapi_1_1process_1_1Stdout.html',1,'winapi::process']]],
+ ['stream_95',['Stream',['../structwinapi_1_1process_1_1Stream.html',1,'winapi::process']]]
+];
diff --git a/search/close.svg b/search/close.svg
new file mode 100644
index 0000000..a933eea
--- /dev/null
+++ b/search/close.svg
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ viewBox="0 0 11 11"
+ height="11"
+ width="11"
+ id="svg2"
+ version="1.1">
+ <metadata
+ id="metadata8">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs6" />
+ <path
+ id="path12"
+ d="M 5.5 0.5 A 5 5 0 0 0 0.5 5.5 A 5 5 0 0 0 5.5 10.5 A 5 5 0 0 0 10.5 5.5 A 5 5 0 0 0 5.5 0.5 z M 3.5820312 3 A 0.58291923 0.58291923 0 0 1 4 3.1757812 L 5.5 4.6757812 L 7 3.1757812 A 0.58291923 0.58291923 0 0 1 7.4003906 3 A 0.58291923 0.58291923 0 0 1 7.8242188 4 L 6.3242188 5.5 L 7.8242188 7 A 0.58291923 0.58291923 0 1 1 7 7.8242188 L 5.5 6.3242188 L 4 7.8242188 A 0.58291923 0.58291923 0 1 1 3.1757812 7 L 4.6757812 5.5 L 3.1757812 4 A 0.58291923 0.58291923 0 0 1 3.5820312 3 z "
+ style="stroke-width:1.09870648;fill:#bababa;fill-opacity:1" />
+</svg>
diff --git a/search/files_0.html b/search/files_0.html
new file mode 100644
index 0000000..9498842
--- /dev/null
+++ b/search/files_0.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/files_0.js b/search/files_0.js
new file mode 100644
index 0000000..37bc924
--- /dev/null
+++ b/search/files_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['error_2ehpp_96',['error.hpp',['../error_8hpp.html',1,'']]]
+];
diff --git a/search/functions_0.html b/search/functions_0.html
new file mode 100644
index 0000000..eb4c501
--- /dev/null
+++ b/search/functions_0.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/functions_0.js b/search/functions_0.js
new file mode 100644
index 0000000..c32ce48
--- /dev/null
+++ b/search/functions_0.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['add_97',['add',['../classwinapi_1_1Buffer.html#a303645b281fb4f1a4d9e84f1d1370182',1,'winapi::Buffer']]],
+ ['args_5fto_5fstring_98',['args_to_string',['../classwinapi_1_1CommandLine.html#afb35d8d6d2b8b66bd6f21d0adc37017f',1,'winapi::CommandLine']]],
+ ['as_5futf16_99',['as_utf16',['../classwinapi_1_1Buffer.html#ac5ca93f1935f2259db0d68e1884897d5',1,'winapi::Buffer']]],
+ ['as_5futf8_100',['as_utf8',['../classwinapi_1_1Buffer.html#afd8abcecacbcc9fdb4e5825068ebf561',1,'winapi::Buffer']]]
+];
diff --git a/search/functions_1.html b/search/functions_1.html
new file mode 100644
index 0000000..ef4088b
--- /dev/null
+++ b/search/functions_1.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/functions_1.js b/search/functions_1.js
new file mode 100644
index 0000000..aedb5c3
--- /dev/null
+++ b/search/functions_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['buffer_101',['Buffer',['../classwinapi_1_1Buffer.html#abb43686e0f2e5798bc7b2c0e47722458',1,'winapi::Buffer::Buffer(std::initializer_list&lt; unsigned char &gt; lst)'],['../classwinapi_1_1Buffer.html#a46241e1fd3443c383c3930329ca9e0dd',1,'winapi::Buffer::Buffer(Parent &amp;&amp;src)'],['../classwinapi_1_1Buffer.html#aa3566a7ac7025a2f88abe116082b55a7',1,'winapi::Buffer::Buffer(const std::basic_string&lt; CharT &gt; &amp;src)'],['../classwinapi_1_1Buffer.html#ab3649ebbd0cbc4b20d02b660a52be89c',1,'winapi::Buffer::Buffer(const void *src, std::size_t nb)']]]
+];
diff --git a/search/functions_2.html b/search/functions_2.html
new file mode 100644
index 0000000..ca5aa10
--- /dev/null
+++ b/search/functions_2.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/functions_2.js b/search/functions_2.js
new file mode 100644
index 0000000..462cc29
--- /dev/null
+++ b/search/functions_2.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['canonicalize_102',['canonicalize',['../classwinapi_1_1CanonicalPath.html#a7072d3b77d4f437246744c9c2a9407db',1,'winapi::CanonicalPath']]],
+ ['close_103',['close',['../classwinapi_1_1Handle.html#a6f28cc73ae2e3e447251cef0160e3555',1,'winapi::Handle']]],
+ ['commandline_104',['CommandLine',['../classwinapi_1_1CommandLine.html#ad48bb83391e84db28c3c3c6bdf283003',1,'winapi::CommandLine::CommandLine()=default'],['../classwinapi_1_1CommandLine.html#a90b5d19b9cb4bbad2515c97bd74731c8',1,'winapi::CommandLine::CommandLine(const std::string &amp;argv0, const std::vector&lt; std::string &gt; &amp;args={})'],['../classwinapi_1_1CommandLine.html#ac0d211d82fd55cba2055a9679272a182',1,'winapi::CommandLine::CommandLine(std::string &amp;&amp;argv0, std::vector&lt; std::string &gt; &amp;&amp;args={})'],['../classwinapi_1_1CommandLine.html#a69e5c796f37637e39b2e1d7d95ba922a',1,'winapi::CommandLine::CommandLine(std::vector&lt; std::string &gt; argv)']]],
+ ['copy_105',['copy',['../structwinapi_1_1Resource.html#ac3bf07d20d3ce6705693ae7a86eb565d',1,'winapi::Resource']]],
+ ['create_106',['create',['../classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a',1,'winapi::Process::create(ProcessParameters)'],['../classwinapi_1_1Process.html#ac4eaeb85aa25acec5e4421e1239f315f',1,'winapi::Process::create(const CommandLine &amp;)'],['../classwinapi_1_1Process.html#a16be6c3dc62d500ca8924b359e5193cc',1,'winapi::Process::create(const CommandLine &amp;, process::IO)'],['../classwinapi_1_1SharedMemory.html#a475d4dcdf99d777cb0968d7631cc6f7e',1,'winapi::SharedMemory::create()'],['../classwinapi_1_1SharedObject.html#acb4ef5283256d7463fe81c8b312b6745',1,'winapi::SharedObject::create()']]],
+ ['current_107',['current',['../classwinapi_1_1Process.html#a4edc58e78ee81e5531af34fc4f806e24',1,'winapi::Process']]]
+];
diff --git a/search/functions_3.html b/search/functions_3.html
new file mode 100644
index 0000000..d79f55b
--- /dev/null
+++ b/search/functions_3.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/functions_3.js b/search/functions_3.js
new file mode 100644
index 0000000..90e14d9
--- /dev/null
+++ b/search/functions_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['default_5fpermissions_108',['default_permissions',['../classwinapi_1_1Process.html#a4fffc3755642f3db56902106f1b96040',1,'winapi::Process']]]
+];
diff --git a/search/functions_4.html b/search/functions_4.html
new file mode 100644
index 0000000..1657cad
--- /dev/null
+++ b/search/functions_4.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/functions_4.js b/search/functions_4.js
new file mode 100644
index 0000000..9c81509
--- /dev/null
+++ b/search/functions_4.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['file_109',['File',['../classwinapi_1_1File.html#a4ae67aba44ba64654b888ace9b7dfb36',1,'winapi::File']]],
+ ['from_5fmain_110',['from_main',['../classwinapi_1_1CommandLine.html#a7a7bc2a7461f2f275a12c9fda23d312d',1,'winapi::CommandLine']]]
+];
diff --git a/search/functions_5.html b/search/functions_5.html
new file mode 100644
index 0000000..9301d6b
--- /dev/null
+++ b/search/functions_5.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/functions_5.js b/search/functions_5.js
new file mode 100644
index 0000000..408d8b5
--- /dev/null
+++ b/search/functions_5.js
@@ -0,0 +1,14 @@
+var searchData=
+[
+ ['get_111',['get',['../classwinapi_1_1SharedMemory.html#ada3f0075608dd1541f54f004e18a4775',1,'winapi::SharedMemory::get()'],['../classwinapi_1_1SharedObject.html#a85d0943708ab0da78e1a189b1bbbd1eb',1,'winapi::SharedObject::get()']]],
+ ['get_5fargs_112',['get_args',['../classwinapi_1_1CommandLine.html#aef5ea9b427d975af8e64948802b54af4',1,'winapi::CommandLine']]],
+ ['get_5fargv_113',['get_argv',['../classwinapi_1_1CommandLine.html#ac21d30a214f529f80b91186e9724cf41',1,'winapi::CommandLine']]],
+ ['get_5fargv0_114',['get_argv0',['../classwinapi_1_1CommandLine.html#a8f75a5f374397c1c1dcc4900bf44ee32',1,'winapi::CommandLine']]],
+ ['get_5fexe_5fpath_115',['get_exe_path',['../classwinapi_1_1Process.html#a86cea0dd87e63ef93f6575d601ab31f5',1,'winapi::Process']]],
+ ['get_5fexit_5fcode_116',['get_exit_code',['../classwinapi_1_1Process.html#a359c11337c7e50370cd5375efa841131',1,'winapi::Process']]],
+ ['get_5fhandle_117',['get_handle',['../classwinapi_1_1Process.html#a1b65a0f6dc25c1810161f2c5c9648249',1,'winapi::Process']]],
+ ['get_5fid_118',['get_id',['../classwinapi_1_1Process.html#aa44a8ca82178dfedd68865e4e47f7584',1,'winapi::Process']]],
+ ['get_5fresource_119',['get_resource',['../classwinapi_1_1Process.html#a4ddbc4be71879ea7f91b05ad7f44435c',1,'winapi::Process']]],
+ ['get_5fresource_5fstring_120',['get_resource_string',['../classwinapi_1_1Process.html#ac700bc836a720384bed52a032628aaeb',1,'winapi::Process']]],
+ ['get_5fsize_121',['get_size',['../classwinapi_1_1File.html#ad3c43351e4c032caa78525fc15e64ca7',1,'winapi::File']]]
+];
diff --git a/search/functions_6.html b/search/functions_6.html
new file mode 100644
index 0000000..9c4f5fc
--- /dev/null
+++ b/search/functions_6.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/functions_6.js b/search/functions_6.js
new file mode 100644
index 0000000..eddb4da
--- /dev/null
+++ b/search/functions_6.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['has_5fargs_122',['has_args',['../classwinapi_1_1CommandLine.html#ae87fa727498660661753d2d456873033',1,'winapi::CommandLine']]]
+];
diff --git a/search/functions_7.html b/search/functions_7.html
new file mode 100644
index 0000000..46b5c0f
--- /dev/null
+++ b/search/functions_7.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/functions_7.js b/search/functions_7.js
new file mode 100644
index 0000000..a5698bc
--- /dev/null
+++ b/search/functions_7.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['is_5frunning_123',['is_running',['../classwinapi_1_1Process.html#a5b02393edb57bd902e321037133c40eb',1,'winapi::Process']]],
+ ['is_5fstd_124',['is_std',['../classwinapi_1_1Handle.html#acc001a0f466d9c92cf7f2ef62896afc5',1,'winapi::Handle']]]
+];
diff --git a/search/functions_8.html b/search/functions_8.html
new file mode 100644
index 0000000..31a1d95
--- /dev/null
+++ b/search/functions_8.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/functions_8.js b/search/functions_8.js
new file mode 100644
index 0000000..ebfa88a
--- /dev/null
+++ b/search/functions_8.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['open_125',['open',['../classwinapi_1_1Process.html#a48964bbb7968bd7b6796e8a3306d58d9',1,'winapi::Process::open()'],['../classwinapi_1_1SharedMemory.html#a82eafb0e7c2c6b5af1a7ff8945af2027',1,'winapi::SharedMemory::open()'],['../classwinapi_1_1SharedObject.html#a08fda6ddde26e0a10170efaf07232761',1,'winapi::SharedObject::open()']]],
+ ['open_5fr_126',['open_r',['../classwinapi_1_1File.html#ad3bacd22beea28dcb0a0df846b5c4215',1,'winapi::File::open_r(const std::string &amp;)'],['../classwinapi_1_1File.html#aaa308b06a55f992f71e76f9e7a629647',1,'winapi::File::open_r(const CanonicalPath &amp;)'],['../classwinapi_1_1Process.html#af9d748078299957519ee67fd7f1e49b3',1,'winapi::Process::open_r()']]],
+ ['open_5fread_5fattributes_127',['open_read_attributes',['../classwinapi_1_1File.html#a7d7eeb56c9f33f6ec1814472c61e51f4',1,'winapi::File::open_read_attributes(const std::string &amp;)'],['../classwinapi_1_1File.html#aecba0e33d05893021f93a2348aeefa34',1,'winapi::File::open_read_attributes(const CanonicalPath &amp;)']]],
+ ['open_5fw_128',['open_w',['../classwinapi_1_1File.html#a36cda85b326592d7eadca5dc4a6b7981',1,'winapi::File::open_w(const std::string &amp;)'],['../classwinapi_1_1File.html#a53bc6b8de007c630ac84d6519a520111',1,'winapi::File::open_w(const CanonicalPath &amp;)']]]
+];
diff --git a/search/functions_9.html b/search/functions_9.html
new file mode 100644
index 0000000..9a8e429
--- /dev/null
+++ b/search/functions_9.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_9.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/functions_9.js b/search/functions_9.js
new file mode 100644
index 0000000..8ec2200
--- /dev/null
+++ b/search/functions_9.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['parse_129',['parse',['../classwinapi_1_1CommandLine.html#aabafd2d1d923c30c3da372909857e87e',1,'winapi::CommandLine']]],
+ ['pipe_130',['Pipe',['../classwinapi_1_1Pipe.html#aa41a6275dab93f4fc0d2e593aa9b39f0',1,'winapi::Pipe']]],
+ ['ptr_131',['ptr',['../classwinapi_1_1SharedMemory.html#a44e75ba35ae3e470fb521f6274991673',1,'winapi::SharedMemory::ptr()'],['../classwinapi_1_1SharedObject.html#a0dfaad2c143d60af8dc6c010a13d513a',1,'winapi::SharedObject::ptr()']]]
+];
diff --git a/search/functions_a.html b/search/functions_a.html
new file mode 100644
index 0000000..5ecc152
--- /dev/null
+++ b/search/functions_a.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/functions_a.js b/search/functions_a.js
new file mode 100644
index 0000000..12da348
--- /dev/null
+++ b/search/functions_a.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['query_132',['query',['../classwinapi_1_1CommandLine.html#aa07ee7bf5d61658f33e4a7571205ae5c',1,'winapi::CommandLine']]],
+ ['query_5fid_133',['query_id',['../classwinapi_1_1File.html#aed36137d5b730166cfec4e0f8a5a6fdd',1,'winapi::File']]]
+];
diff --git a/search/functions_b.html b/search/functions_b.html
new file mode 100644
index 0000000..e301fed
--- /dev/null
+++ b/search/functions_b.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_b.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/functions_b.js b/search/functions_b.js
new file mode 100644
index 0000000..e263748
--- /dev/null
+++ b/search/functions_b.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['read_134',['read',['../classwinapi_1_1Handle.html#ae340b095569654f8b709614f23577f2e',1,'winapi::Handle']]],
+ ['read_5fchunk_135',['read_chunk',['../classwinapi_1_1Handle.html#a31c8440493e29cdd9b6fc40ffe8c06f1',1,'winapi::Handle']]],
+ ['read_5fend_136',['read_end',['../classwinapi_1_1Pipe.html#a07412b04db253f1c24fe4aeda5db82e1',1,'winapi::Pipe::read_end()'],['../classwinapi_1_1Pipe.html#afc45a1f2a5cdee7bbe4f73dd62d667ac',1,'winapi::Pipe::read_end() const']]],
+ ['read_5fpermissions_137',['read_permissions',['../classwinapi_1_1Process.html#a4fc3ed404c1cf67dabb7867d0c9f638c',1,'winapi::Process']]],
+ ['remove_138',['remove',['../classwinapi_1_1File.html#a453828fe42006bc7b6e925c41d1e965e',1,'winapi::File::remove(const std::string &amp;)'],['../classwinapi_1_1File.html#a7aa6987387481fc3b2fc5187b0563e97',1,'winapi::File::remove(const CanonicalPath &amp;)']]]
+];
diff --git a/search/functions_c.html b/search/functions_c.html
new file mode 100644
index 0000000..c4f3268
--- /dev/null
+++ b/search/functions_c.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/functions_c.js b/search/functions_c.js
new file mode 100644
index 0000000..7e17b46
--- /dev/null
+++ b/search/functions_c.js
@@ -0,0 +1,12 @@
+var searchData=
+[
+ ['set_139',['set',['../classwinapi_1_1Buffer.html#ab09aa9c5075579510da463b4148ee610',1,'winapi::Buffer::set(const void *src, std::size_t nb)'],['../classwinapi_1_1Buffer.html#a0b2fad438202fbcfd4946baf3f879f59',1,'winapi::Buffer::set(const std::basic_string&lt; CharT &gt; &amp;src)']]],
+ ['shell_140',['shell',['../classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e',1,'winapi::Process::shell(const ShellParameters &amp;)'],['../classwinapi_1_1Process.html#a24e1cbd68bc2dda73220b840979a84b0',1,'winapi::Process::shell(const CommandLine &amp;)']]],
+ ['shut_5fdown_141',['shut_down',['../classwinapi_1_1Process.html#a1aedc4814dd9c154b6e03e572d873755',1,'winapi::Process']]],
+ ['std_5ferr_142',['std_err',['../classwinapi_1_1Handle.html#a894d880e1241c9516889a7a63a0c1750',1,'winapi::Handle']]],
+ ['std_5fin_143',['std_in',['../classwinapi_1_1Handle.html#a1817fdf127291cf5f47d6429d8f468cd',1,'winapi::Handle']]],
+ ['std_5fout_144',['std_out',['../classwinapi_1_1Handle.html#a76e96327afd0b943d996c90289f2883e',1,'winapi::Handle']]],
+ ['stderr_145',['Stderr',['../structwinapi_1_1process_1_1Stderr.html#a1daa6ec6ad6b30d9958b2ee76f086230',1,'winapi::process::Stderr::Stderr(const CanonicalPath &amp;file)'],['../structwinapi_1_1process_1_1Stderr.html#a0fca971e15b205e971a18c206d1c8003',1,'winapi::process::Stderr::Stderr(Pipe &amp;)'],['../structwinapi_1_1process_1_1Stderr.html#a9906ac147b47c7e7b8a299e942cb77c5',1,'winapi::process::Stderr::Stderr(const std::string &amp;file)'],['../structwinapi_1_1process_1_1Stderr.html#aefbbae355c05c41f177ed5c3f769809c',1,'winapi::process::Stderr::Stderr()']]],
+ ['stdin_146',['Stdin',['../structwinapi_1_1process_1_1Stdin.html#ab551f076d049c58b5391847ec0fe8999',1,'winapi::process::Stdin::Stdin()'],['../structwinapi_1_1process_1_1Stdin.html#a68803e010fad2a3634c031bc14a0d857',1,'winapi::process::Stdin::Stdin(const std::string &amp;file)'],['../structwinapi_1_1process_1_1Stdin.html#a77e20c39f33a6b8e8ffffa8972c924a7',1,'winapi::process::Stdin::Stdin(const CanonicalPath &amp;file)'],['../structwinapi_1_1process_1_1Stdin.html#afc350d91445057721b1d87a4e759da4e',1,'winapi::process::Stdin::Stdin(Pipe &amp;)']]],
+ ['stdout_147',['Stdout',['../structwinapi_1_1process_1_1Stdout.html#a1afc245b79c17e05bee9931f347a34e5',1,'winapi::process::Stdout::Stdout()'],['../structwinapi_1_1process_1_1Stdout.html#a7319a44d66f5c109bea89a04ca4c4ba2',1,'winapi::process::Stdout::Stdout(const std::string &amp;file)'],['../structwinapi_1_1process_1_1Stdout.html#ab70d4bff6f55c51fec06efdaa4fcdb81',1,'winapi::process::Stdout::Stdout(const CanonicalPath &amp;file)'],['../structwinapi_1_1process_1_1Stdout.html#afa84e724674b234d395c766b3d04582d',1,'winapi::process::Stdout::Stdout(Pipe &amp;)']]]
+];
diff --git a/search/functions_d.html b/search/functions_d.html
new file mode 100644
index 0000000..7a1ed06
--- /dev/null
+++ b/search/functions_d.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/functions_d.js b/search/functions_d.js
new file mode 100644
index 0000000..69cba9d
--- /dev/null
+++ b/search/functions_d.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['terminate_148',['terminate',['../classwinapi_1_1Process.html#a155aefb272a151126fe2a65d583be880',1,'winapi::Process']]],
+ ['to_5fstring_149',['to_string',['../classwinapi_1_1CommandLine.html#ac47e738f255a85b3e0605d40c0124b24',1,'winapi::CommandLine']]]
+];
diff --git a/search/functions_e.html b/search/functions_e.html
new file mode 100644
index 0000000..22d2a6b
--- /dev/null
+++ b/search/functions_e.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/functions_e.js b/search/functions_e.js
new file mode 100644
index 0000000..2824e2c
--- /dev/null
+++ b/search/functions_e.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['wait_150',['wait',['../classwinapi_1_1Process.html#a273dcbc8cd69539d0f9fd4d1e09e67a7',1,'winapi::Process']]],
+ ['windows_151',['windows',['../error_8hpp.html#a70c25be1dfd40860d125203f27e664ce',1,'winapi::error']]],
+ ['write_152',['write',['../classwinapi_1_1Handle.html#afbfe1b7de229eb5656504e05acf9bbcc',1,'winapi::Handle::write(const void *data, std::size_t nb) const'],['../classwinapi_1_1Handle.html#aee2ff37831d686a8140403c10d7ebadd',1,'winapi::Handle::write(const Buffer &amp;buffer) const'],['../classwinapi_1_1Handle.html#ab78fab4796ef5ec3f9576f19b54cfd04',1,'winapi::Handle::write(const std::basic_string&lt; CharT &gt; &amp;src) const']]],
+ ['write_5fend_153',['write_end',['../classwinapi_1_1Pipe.html#a19e504588020c68639154ed597151cd6',1,'winapi::Pipe::write_end()'],['../classwinapi_1_1Pipe.html#ad010465685f521c17bd4b6731ed00e00',1,'winapi::Pipe::write_end() const']]]
+];
diff --git a/search/mag_sel.svg b/search/mag_sel.svg
new file mode 100644
index 0000000..03626f6
--- /dev/null
+++ b/search/mag_sel.svg
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="svg2"
+ width="20"
+ height="19"
+ viewBox="0 0 20 19"
+ sodipodi:docname="mag_sel.svg"
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
+ <metadata
+ id="metadata8">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs6" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="2096"
+ id="namedview4"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="32"
+ inkscape:cx="5.9792688"
+ inkscape:cy="1.1436277"
+ inkscape:window-x="1920"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg2" />
+ <circle
+ style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ id="path4611"
+ cx="5.5"
+ cy="8.5"
+ r="3.5" />
+ <path
+ style="fill:#656565;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 11,7 13.5,10 16,7 Z"
+ id="path4609"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 8.1085854,11.109059 2.7823556,2.782356"
+ id="path4630"
+ inkscape:connector-curvature="0" />
+</svg>
diff --git a/search/nomatches.html b/search/nomatches.html
new file mode 100644
index 0000000..2b9360b
--- /dev/null
+++ b/search/nomatches.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</body>
+</html>
diff --git a/search/pages_0.html b/search/pages_0.html
new file mode 100644
index 0000000..8517b48
--- /dev/null
+++ b/search/pages_0.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="pages_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/search/pages_0.js b/search/pages_0.js
new file mode 100644
index 0000000..262bffa
--- /dev/null
+++ b/search/pages_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['winapi_2dcommon_154',['winapi-common',['../index.html',1,'']]]
+];
diff --git a/search/search.css b/search/search.css
new file mode 100644
index 0000000..9074198
--- /dev/null
+++ b/search/search.css
@@ -0,0 +1,257 @@
+/*---------------- Search Box */
+
+#MSearchBox {
+ white-space : nowrap;
+ background: white;
+ border-radius: 0.65em;
+ box-shadow: inset 0.5px 0.5px 3px 0px #555;
+ z-index: 102;
+}
+
+#MSearchBox .left {
+ display: inline-block;
+ vertical-align: middle;
+ height: 1.4em;
+}
+
+#MSearchSelect {
+ display: inline-block;
+ vertical-align: middle;
+ height: 1.4em;
+ padding: 0 0 0 0.3em;
+ margin: 0;
+}
+
+#MSearchField {
+ display: inline-block;
+ vertical-align: middle;
+ width: 7.5em;
+ height: 1.1em;
+ margin: 0 0.15em;
+ padding: 0;
+ line-height: 1em;
+ border:none;
+ color: #909090;
+ outline: none;
+ font-family: Arial, Verdana, sans-serif;
+ -webkit-border-radius: 0px;
+ border-radius: 0px;
+ background: none;
+}
+
+
+#MSearchBox .right {
+ display: inline-block;
+ vertical-align: middle;
+ width: 1.4em;
+ height: 1.4em;
+}
+
+#MSearchClose {
+ display: none;
+ font-size: inherit;
+ background : none;
+ border: none;
+ margin: 0;
+ padding: 0;
+ outline: none;
+
+}
+
+#MSearchCloseImg {
+ height: 1.4em;
+ padding: 0.3em;
+ margin: 0;
+}
+
+.MSearchBoxActive #MSearchField {
+ color: #000000;
+}
+
+#main-menu > li:last-child {
+ /* This <li> object is the parent of the search bar */
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 36px;
+ margin-right: 1em;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #90A5CE;
+ background-color: #F9FAFC;
+ z-index: 10001;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+ font: 8pt Arial, Verdana, sans-serif;
+ padding-left: 2px;
+ padding-right: 12px;
+ border: 0px;
+}
+
+span.SelectionMark {
+ margin-right: 4px;
+ font-family: monospace;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem {
+ display: block;
+ outline-style: none;
+ color: #000000;
+ text-decoration: none;
+ padding-left: 6px;
+ padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+ color: #000000;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem:hover {
+ color: #FFFFFF;
+ background-color: #3D578C;
+ outline-style: none;
+ text-decoration: none;
+ cursor: pointer;
+ display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+ width: 60ex;
+ height: 15em;
+}
+
+#MSearchResultsWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #000;
+ background-color: #EEF1F7;
+ z-index:10000;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+ clear:both;
+ padding-bottom: 15px;
+}
+
+.SREntry {
+ font-size: 10pt;
+ padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+ font-size: 8pt;
+ padding: 1px 5px;
+}
+
+body.SRPage {
+ margin: 5px 2px;
+}
+
+.SRChildren {
+ padding-left: 3ex; padding-bottom: .5em
+}
+
+.SRPage .SRChildren {
+ display: none;
+}
+
+.SRSymbol {
+ font-weight: bold;
+ color: #425E97;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRScope {
+ display: block;
+ color: #425E97;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+ text-decoration: underline;
+}
+
+span.SRScope {
+ padding-left: 4px;
+ font-family: Arial, Verdana, sans-serif;
+}
+
+.SRPage .SRStatus {
+ padding: 2px 5px;
+ font-size: 8pt;
+ font-style: italic;
+ font-family: Arial, Verdana, sans-serif;
+}
+
+.SRResult {
+ display: none;
+}
+
+div.searchresults {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+/*---------------- External search page results */
+
+.searchresult {
+ background-color: #F0F3F8;
+}
+
+.pages b {
+ color: white;
+ padding: 5px 5px 3px 5px;
+ background-image: url("../tab_a.png");
+ background-repeat: repeat-x;
+ text-shadow: 0 1px 1px #000000;
+}
+
+.pages {
+ line-height: 17px;
+ margin-left: 4px;
+ text-decoration: none;
+}
+
+.hl {
+ font-weight: bold;
+}
+
+#searchresults {
+ margin-bottom: 20px;
+}
+
+.searchpages {
+ margin-top: 10px;
+}
+
diff --git a/search/search.js b/search/search.js
new file mode 100644
index 0000000..fb226f7
--- /dev/null
+++ b/search/search.js
@@ -0,0 +1,816 @@
+/*
+ @licstart The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ 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.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
+ */
+function convertToId(search)
+{
+ var result = '';
+ for (i=0;i<search.length;i++)
+ {
+ var c = search.charAt(i);
+ var cn = c.charCodeAt(0);
+ if (c.match(/[a-z0-9\u0080-\uFFFF]/))
+ {
+ result+=c;
+ }
+ else if (cn<16)
+ {
+ result+="_0"+cn.toString(16);
+ }
+ else
+ {
+ result+="_"+cn.toString(16);
+ }
+ }
+ return result;
+}
+
+function getXPos(item)
+{
+ var x = 0;
+ if (item.offsetWidth)
+ {
+ while (item && item!=document.body)
+ {
+ x += item.offsetLeft;
+ item = item.offsetParent;
+ }
+ }
+ return x;
+}
+
+function getYPos(item)
+{
+ var y = 0;
+ if (item.offsetWidth)
+ {
+ while (item && item!=document.body)
+ {
+ y += item.offsetTop;
+ item = item.offsetParent;
+ }
+ }
+ return y;
+}
+
+/* A class handling everything associated with the search panel.
+
+ Parameters:
+ name - The name of the global variable that will be
+ storing this instance. Is needed to be able to set timeouts.
+ resultPath - path to use for external files
+*/
+function SearchBox(name, resultsPath, inFrame, label, extension)
+{
+ if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
+ if (!extension || extension == "") { extension = ".html"; }
+
+ // ---------- Instance variables
+ this.name = name;
+ this.resultsPath = resultsPath;
+ this.keyTimeout = 0;
+ this.keyTimeoutLength = 500;
+ this.closeSelectionTimeout = 300;
+ this.lastSearchValue = "";
+ this.lastResultsPage = "";
+ this.hideTimeout = 0;
+ this.searchIndex = 0;
+ this.searchActive = false;
+ this.insideFrame = inFrame;
+ this.searchLabel = label;
+ this.extension = extension;
+
+ // ----------- DOM Elements
+
+ this.DOMSearchField = function()
+ { return document.getElementById("MSearchField"); }
+
+ this.DOMSearchSelect = function()
+ { return document.getElementById("MSearchSelect"); }
+
+ this.DOMSearchSelectWindow = function()
+ { return document.getElementById("MSearchSelectWindow"); }
+
+ this.DOMPopupSearchResults = function()
+ { return document.getElementById("MSearchResults"); }
+
+ this.DOMPopupSearchResultsWindow = function()
+ { return document.getElementById("MSearchResultsWindow"); }
+
+ this.DOMSearchClose = function()
+ { return document.getElementById("MSearchClose"); }
+
+ this.DOMSearchBox = function()
+ { return document.getElementById("MSearchBox"); }
+
+ // ------------ Event Handlers
+
+ // Called when focus is added or removed from the search field.
+ this.OnSearchFieldFocus = function(isActive)
+ {
+ this.Activate(isActive);
+ }
+
+ this.OnSearchSelectShow = function()
+ {
+ var searchSelectWindow = this.DOMSearchSelectWindow();
+ var searchField = this.DOMSearchSelect();
+
+ if (this.insideFrame)
+ {
+ var left = getXPos(searchField);
+ var top = getYPos(searchField);
+ left += searchField.offsetWidth + 6;
+ top += searchField.offsetHeight;
+
+ // show search selection popup
+ searchSelectWindow.style.display='block';
+ left -= searchSelectWindow.offsetWidth;
+ searchSelectWindow.style.left = left + 'px';
+ searchSelectWindow.style.top = top + 'px';
+ }
+ else
+ {
+ var left = getXPos(searchField);
+ var top = getYPos(searchField);
+ top += searchField.offsetHeight;
+
+ // show search selection popup
+ searchSelectWindow.style.display='block';
+ searchSelectWindow.style.left = left + 'px';
+ searchSelectWindow.style.top = top + 'px';
+ }
+
+ // stop selection hide timer
+ if (this.hideTimeout)
+ {
+ clearTimeout(this.hideTimeout);
+ this.hideTimeout=0;
+ }
+ return false; // to avoid "image drag" default event
+ }
+
+ this.OnSearchSelectHide = function()
+ {
+ this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
+ this.closeSelectionTimeout);
+ }
+
+ // Called when the content of the search field is changed.
+ this.OnSearchFieldChange = function(evt)
+ {
+ if (this.keyTimeout) // kill running timer
+ {
+ clearTimeout(this.keyTimeout);
+ this.keyTimeout = 0;
+ }
+
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==40 || e.keyCode==13)
+ {
+ if (e.shiftKey==1)
+ {
+ this.OnSearchSelectShow();
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ child.focus();
+ return;
+ }
+ }
+ return;
+ }
+ else
+ {
+ window.frames.MSearchResults.postMessage("take_focus", "*");
+ }
+ }
+ else if (e.keyCode==27) // Escape out of the search field
+ {
+ this.DOMSearchField().blur();
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.lastSearchValue = '';
+ this.Activate(false);
+ return;
+ }
+
+ // strip whitespaces
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+
+ if (searchValue != this.lastSearchValue) // search value has changed
+ {
+ if (searchValue != "") // non-empty search
+ {
+ // set timer for search update
+ this.keyTimeout = setTimeout(this.name + '.Search()',
+ this.keyTimeoutLength);
+ }
+ else // empty search field
+ {
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.lastSearchValue = '';
+ }
+ }
+ }
+
+ this.SelectItemCount = function(id)
+ {
+ var count=0;
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ count++;
+ }
+ }
+ return count;
+ }
+
+ this.SelectItemSet = function(id)
+ {
+ var i,j=0;
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ var node = child.firstChild;
+ if (j==id)
+ {
+ node.innerHTML='&#8226;';
+ }
+ else
+ {
+ node.innerHTML='&#160;';
+ }
+ j++;
+ }
+ }
+ }
+
+ // Called when an search filter selection is made.
+ // set item with index id as the active item
+ this.OnSelectItem = function(id)
+ {
+ this.searchIndex = id;
+ this.SelectItemSet(id);
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+ if (searchValue!="" && this.searchActive) // something was found -> do a search
+ {
+ this.Search();
+ }
+ }
+
+ this.OnSearchSelectKey = function(evt)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
+ {
+ this.searchIndex++;
+ this.OnSelectItem(this.searchIndex);
+ }
+ else if (e.keyCode==38 && this.searchIndex>0) // Up
+ {
+ this.searchIndex--;
+ this.OnSelectItem(this.searchIndex);
+ }
+ else if (e.keyCode==13 || e.keyCode==27)
+ {
+ this.OnSelectItem(this.searchIndex);
+ this.CloseSelectionWindow();
+ this.DOMSearchField().focus();
+ }
+ return false;
+ }
+
+ // --------- Actions
+
+ // Closes the results window.
+ this.CloseResultsWindow = function()
+ {
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.Activate(false);
+ }
+
+ this.CloseSelectionWindow = function()
+ {
+ this.DOMSearchSelectWindow().style.display = 'none';
+ }
+
+ // Performs a search.
+ this.Search = function()
+ {
+ this.keyTimeout = 0;
+
+ // strip leading whitespace
+ var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
+
+ var code = searchValue.toLowerCase().charCodeAt(0);
+ var idxChar = searchValue.substr(0, 1).toLowerCase();
+ if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
+ {
+ idxChar = searchValue.substr(0, 2);
+ }
+
+ var resultsPage;
+ var resultsPageWithSearch;
+ var hasResultsPage;
+
+ var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
+ if (idx!=-1)
+ {
+ var hexCode=idx.toString(16);
+ resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension;
+ resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+ hasResultsPage = true;
+ }
+ else // nothing available for this search term
+ {
+ resultsPage = this.resultsPath + '/nomatches' + this.extension;
+ resultsPageWithSearch = resultsPage;
+ hasResultsPage = false;
+ }
+
+ window.frames.MSearchResults.location = resultsPageWithSearch;
+ var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
+
+ if (domPopupSearchResultsWindow.style.display!='block')
+ {
+ var domSearchBox = this.DOMSearchBox();
+ this.DOMSearchClose().style.display = 'inline-block';
+ if (this.insideFrame)
+ {
+ var domPopupSearchResults = this.DOMPopupSearchResults();
+ domPopupSearchResultsWindow.style.position = 'relative';
+ domPopupSearchResultsWindow.style.display = 'block';
+ var width = document.body.clientWidth - 8; // the -8 is for IE :-(
+ domPopupSearchResultsWindow.style.width = width + 'px';
+ domPopupSearchResults.style.width = width + 'px';
+ }
+ else
+ {
+ var domPopupSearchResults = this.DOMPopupSearchResults();
+ var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
+ var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1;
+ domPopupSearchResultsWindow.style.display = 'block';
+ left -= domPopupSearchResults.offsetWidth;
+ domPopupSearchResultsWindow.style.top = top + 'px';
+ domPopupSearchResultsWindow.style.left = left + 'px';
+ }
+ }
+
+ this.lastSearchValue = searchValue;
+ this.lastResultsPage = resultsPage;
+ }
+
+ // -------- Activation Functions
+
+ // Activates or deactivates the search panel, resetting things to
+ // their default values if necessary.
+ this.Activate = function(isActive)
+ {
+ if (isActive || // open it
+ this.DOMPopupSearchResultsWindow().style.display == 'block'
+ )
+ {
+ this.DOMSearchBox().className = 'MSearchBoxActive';
+
+ var searchField = this.DOMSearchField();
+
+ if (searchField.value == this.searchLabel) // clear "Search" term upon entry
+ {
+ searchField.value = '';
+ this.searchActive = true;
+ }
+ }
+ else if (!isActive) // directly remove the panel
+ {
+ this.DOMSearchBox().className = 'MSearchBoxInactive';
+ this.DOMSearchField().value = this.searchLabel;
+ this.searchActive = false;
+ this.lastSearchValue = ''
+ this.lastResultsPage = '';
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+// The class that handles everything on the search results page.
+function SearchResults(name)
+{
+ // The number of matches from the last run of <Search()>.
+ this.lastMatchCount = 0;
+ this.lastKey = 0;
+ this.repeatOn = false;
+
+ // Toggles the visibility of the passed element ID.
+ this.FindChildElement = function(id)
+ {
+ var parentElement = document.getElementById(id);
+ var element = parentElement.firstChild;
+
+ while (element && element!=parentElement)
+ {
+ if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren')
+ {
+ return element;
+ }
+
+ if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes())
+ {
+ element = element.firstChild;
+ }
+ else if (element.nextSibling)
+ {
+ element = element.nextSibling;
+ }
+ else
+ {
+ do
+ {
+ element = element.parentNode;
+ }
+ while (element && element!=parentElement && !element.nextSibling);
+
+ if (element && element!=parentElement)
+ {
+ element = element.nextSibling;
+ }
+ }
+ }
+ }
+
+ this.Toggle = function(id)
+ {
+ var element = this.FindChildElement(id);
+ if (element)
+ {
+ if (element.style.display == 'block')
+ {
+ element.style.display = 'none';
+ }
+ else
+ {
+ element.style.display = 'block';
+ }
+ }
+ }
+
+ // Searches for the passed string. If there is no parameter,
+ // it takes it from the URL query.
+ //
+ // Always returns true, since other documents may try to call it
+ // and that may or may not be possible.
+ this.Search = function(search)
+ {
+ if (!search) // get search word from URL
+ {
+ search = window.location.search;
+ search = search.substring(1); // Remove the leading '?'
+ search = unescape(search);
+ }
+
+ search = search.replace(/^ +/, ""); // strip leading spaces
+ search = search.replace(/ +$/, ""); // strip trailing spaces
+ search = search.toLowerCase();
+ search = convertToId(search);
+
+ var resultRows = document.getElementsByTagName("div");
+ var matches = 0;
+
+ var i = 0;
+ while (i < resultRows.length)
+ {
+ var row = resultRows.item(i);
+ if (row.className == "SRResult")
+ {
+ var rowMatchName = row.id.toLowerCase();
+ rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
+
+ if (search.length<=rowMatchName.length &&
+ rowMatchName.substr(0, search.length)==search)
+ {
+ row.style.display = 'block';
+ matches++;
+ }
+ else
+ {
+ row.style.display = 'none';
+ }
+ }
+ i++;
+ }
+ document.getElementById("Searching").style.display='none';
+ if (matches == 0) // no results
+ {
+ document.getElementById("NoMatches").style.display='block';
+ }
+ else // at least one result
+ {
+ document.getElementById("NoMatches").style.display='none';
+ }
+ this.lastMatchCount = matches;
+ return true;
+ }
+
+ // return the first item with index index or higher that is visible
+ this.NavNext = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index++;
+ }
+ return focusItem;
+ }
+
+ this.NavPrev = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index--;
+ }
+ return focusItem;
+ }
+
+ this.ProcessKeys = function(e)
+ {
+ if (e.type == "keydown")
+ {
+ this.repeatOn = false;
+ this.lastKey = e.keyCode;
+ }
+ else if (e.type == "keypress")
+ {
+ if (!this.repeatOn)
+ {
+ if (this.lastKey) this.repeatOn = true;
+ return false; // ignore first keypress after keydown
+ }
+ }
+ else if (e.type == "keyup")
+ {
+ this.lastKey = 0;
+ this.repeatOn = false;
+ }
+ return this.lastKey!=0;
+ }
+
+ this.Nav = function(evt,itemIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ var newIndex = itemIndex-1;
+ var focusItem = this.NavPrev(newIndex);
+ if (focusItem)
+ {
+ var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
+ if (child && child.style.display == 'block') // children visible
+ {
+ var n=0;
+ var tmpElem;
+ while (1) // search for last child
+ {
+ tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
+ if (tmpElem)
+ {
+ focusItem = tmpElem;
+ }
+ else // found it!
+ {
+ break;
+ }
+ n++;
+ }
+ }
+ }
+ if (focusItem)
+ {
+ focusItem.focus();
+ }
+ else // return focus to search field
+ {
+ parent.document.getElementById("MSearchField").focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = itemIndex+1;
+ var focusItem;
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem && elem.style.display == 'block') // children visible
+ {
+ focusItem = document.getElementById('Item'+itemIndex+'_c0');
+ }
+ if (!focusItem) focusItem = this.NavNext(newIndex);
+ if (focusItem) focusItem.focus();
+ }
+ else if (this.lastKey==39) // Right
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'block';
+ }
+ else if (this.lastKey==37) // Left
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'none';
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+
+ this.NavChild = function(evt,itemIndex,childIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ if (childIndex>0)
+ {
+ var newIndex = childIndex-1;
+ document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
+ }
+ else // already at first child, jump to parent
+ {
+ document.getElementById('Item'+itemIndex).focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = childIndex+1;
+ var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
+ if (!elem) // last child, jump to parent next parent
+ {
+ elem = this.NavNext(itemIndex+1);
+ }
+ if (elem)
+ {
+ elem.focus();
+ }
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+}
+
+function setKeyActions(elem,action)
+{
+ elem.setAttribute('onkeydown',action);
+ elem.setAttribute('onkeypress',action);
+ elem.setAttribute('onkeyup',action);
+}
+
+function setClassAttr(elem,attr)
+{
+ elem.setAttribute('class',attr);
+ elem.setAttribute('className',attr);
+}
+
+function createResults()
+{
+ var results = document.getElementById("SRResults");
+ for (var e=0; e<searchData.length; e++)
+ {
+ var id = searchData[e][0];
+ var srResult = document.createElement('div');
+ srResult.setAttribute('id','SR_'+id);
+ setClassAttr(srResult,'SRResult');
+ var srEntry = document.createElement('div');
+ setClassAttr(srEntry,'SREntry');
+ var srLink = document.createElement('a');
+ srLink.setAttribute('id','Item'+e);
+ setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
+ setClassAttr(srLink,'SRSymbol');
+ srLink.innerHTML = searchData[e][1][0];
+ srEntry.appendChild(srLink);
+ if (searchData[e][1].length==2) // single result
+ {
+ srLink.setAttribute('href',searchData[e][1][1][0]);
+ if (searchData[e][1][1][1])
+ {
+ srLink.setAttribute('target','_parent');
+ }
+ var srScope = document.createElement('span');
+ setClassAttr(srScope,'SRScope');
+ srScope.innerHTML = searchData[e][1][1][2];
+ srEntry.appendChild(srScope);
+ }
+ else // multiple results
+ {
+ srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
+ var srChildren = document.createElement('div');
+ setClassAttr(srChildren,'SRChildren');
+ for (var c=0; c<searchData[e][1].length-1; c++)
+ {
+ var srChild = document.createElement('a');
+ srChild.setAttribute('id','Item'+e+'_c'+c);
+ setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
+ setClassAttr(srChild,'SRScope');
+ srChild.setAttribute('href',searchData[e][1][c+1][0]);
+ if (searchData[e][1][c+1][1])
+ {
+ srChild.setAttribute('target','_parent');
+ }
+ srChild.innerHTML = searchData[e][1][c+1][2];
+ srChildren.appendChild(srChild);
+ }
+ srEntry.appendChild(srChildren);
+ }
+ srResult.appendChild(srEntry);
+ results.appendChild(srResult);
+ }
+}
+
+function init_search()
+{
+ var results = document.getElementById("MSearchSelectWindow");
+ for (var key in indexSectionLabels)
+ {
+ var link = document.createElement('a');
+ link.setAttribute('class','SelectItem');
+ link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
+ link.href='javascript:void(0)';
+ link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
+ results.appendChild(link);
+ }
+ searchBox.OnSelectItem(0);
+}
+/* @license-end */
diff --git a/search/search_l.png b/search/search_l.png
new file mode 100644
index 0000000..fd5f7da
--- /dev/null
+++ b/search/search_l.png
Binary files differ
diff --git a/search/search_m.png b/search/search_m.png
new file mode 100644
index 0000000..b429a16
--- /dev/null
+++ b/search/search_m.png
Binary files differ
diff --git a/search/search_r.png b/search/search_r.png
new file mode 100644
index 0000000..1af5d21
--- /dev/null
+++ b/search/search_r.png
Binary files differ
diff --git a/search/searchdata.js b/search/searchdata.js
new file mode 100644
index 0000000..a1efb83
--- /dev/null
+++ b/search/searchdata.js
@@ -0,0 +1,27 @@
+var indexSectionsWithContent =
+{
+ 0: "abcdefghilopqrstw",
+ 1: "bcfhilprs",
+ 2: "e",
+ 3: "abcdfghiopqrstw",
+ 4: "w"
+};
+
+var indexSectionNames =
+{
+ 0: "all",
+ 1: "classes",
+ 2: "files",
+ 3: "functions",
+ 4: "pages"
+};
+
+var indexSectionLabels =
+{
+ 0: "All",
+ 1: "Classes",
+ 2: "Files",
+ 3: "Functions",
+ 4: "Pages"
+};
+
diff --git a/shmem_8cpp_source.html b/shmem_8cpp_source.html
new file mode 100644
index 0000000..8805185
--- /dev/null
+++ b/shmem_8cpp_source.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: src/shmem.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">shmem.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="error_8hpp.html">winapi/error.hpp</a>&gt;</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &lt;winapi/handle.hpp&gt;</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;winapi/shmem.hpp&gt;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;winapi/utf8.hpp&gt;</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;winapi/utils.hpp&gt;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;windows.h&gt;</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">namespace </span>{</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keywordtype">void</span>* do_map(<span class="keyword">const</span> Handle&amp; mapping, std::size_t nb = 0) {</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> addr = ::MapViewOfFile(<span class="keyword">static_cast&lt;</span>HANDLE<span class="keyword">&gt;</span>(mapping), FILE_MAP_ALL_ACCESS, 0, 0, nb);</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keywordflow">if</span> (addr == NULL) {</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;MapViewOfFile&quot;</span>);</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; }</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> addr;</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;} <span class="comment">// namespace</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keywordtype">void</span> SharedMemory::Unmap::operator()(<span class="keywordtype">void</span>* ptr)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> ret = ::UnmapViewOfFile(ptr);</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; assert(ret);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; WINAPI_UNUSED_PARAMETER(ret);</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;};</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classwinapi_1_1SharedMemory.html#a475d4dcdf99d777cb0968d7631cc6f7e"> 40</a></span>&#160;<a class="code" href="classwinapi_1_1SharedMemory.html">SharedMemory</a> <a class="code" href="classwinapi_1_1SharedMemory.html#a475d4dcdf99d777cb0968d7631cc6f7e">SharedMemory::create</a>(<span class="keyword">const</span> std::string&amp; name, std::size_t nb) {</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> nb64 = <span class="keyword">static_cast&lt;</span>std::uint64_t<span class="keyword">&gt;</span>(nb);</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; static_assert(<span class="keyword">sizeof</span>(nb64) == 2 * <span class="keyword">sizeof</span>(DWORD), <span class="stringliteral">&quot;sizeof(DWORD) != 32&quot;</span>);</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> nb_low = <span class="keyword">static_cast&lt;</span>DWORD<span class="keyword">&gt;</span>(nb64);</div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> nb_high = <span class="keyword">static_cast&lt;</span>DWORD<span class="keyword">&gt;</span>(nb64 &gt;&gt; 32);</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> mapping_impl = ::CreateFileMappingW(</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, nb_high, nb_low, widen(name).c_str());</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (mapping_impl == NULL) {</div>
+<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;CreateFileMappingW&quot;</span>);</div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div>
+<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <a class="code" href="classwinapi_1_1Handle.html">Handle</a> mapping{mapping_impl};</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> addr = do_map(mapping);</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">return</span> {std::move(mapping), addr};</div>
+<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;}</div>
+<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
+<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classwinapi_1_1SharedMemory.html#a82eafb0e7c2c6b5af1a7ff8945af2027"> 59</a></span>&#160;<a class="code" href="classwinapi_1_1SharedMemory.html">SharedMemory</a> <a class="code" href="classwinapi_1_1SharedMemory.html#a82eafb0e7c2c6b5af1a7ff8945af2027">SharedMemory::open</a>(<span class="keyword">const</span> std::string&amp; name) {</div>
+<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> mapping_impl = ::OpenFileMappingW(FILE_MAP_ALL_ACCESS, FALSE, widen(name).c_str());</div>
+<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span> (mapping_impl == NULL) {</div>
+<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;OpenFileMappingW&quot;</span>);</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="classwinapi_1_1Handle.html">Handle</a> mapping{mapping_impl};</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> addr = do_map(mapping);</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">return</span> {std::move(mapping), addr};</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;}</div>
+<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
+<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1Handle_html"><div class="ttname"><a href="classwinapi_1_1Handle.html">winapi::Handle</a></div><div class="ttdoc">HANDLE wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="handle_8hpp_source.html#l00025">handle.hpp:25</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1SharedMemory_html"><div class="ttname"><a href="classwinapi_1_1SharedMemory.html">winapi::SharedMemory</a></div><div class="ttdoc">Named shared memory region.</div><div class="ttdef"><b>Definition:</b> <a href="shmem_8hpp_source.html#l00019">shmem.hpp:19</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1SharedMemory_html_a475d4dcdf99d777cb0968d7631cc6f7e"><div class="ttname"><a href="classwinapi_1_1SharedMemory.html#a475d4dcdf99d777cb0968d7631cc6f7e">winapi::SharedMemory::create</a></div><div class="ttdeci">static SharedMemory create(const std::string &amp;name, std::size_t nb)</div><div class="ttdef"><b>Definition:</b> <a href="shmem_8cpp_source.html#l00040">shmem.cpp:40</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1SharedMemory_html_a82eafb0e7c2c6b5af1a7ff8945af2027"><div class="ttname"><a href="classwinapi_1_1SharedMemory.html#a82eafb0e7c2c6b5af1a7ff8945af2027">winapi::SharedMemory::open</a></div><div class="ttdeci">static SharedMemory open(const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="shmem_8cpp_source.html#l00059">shmem.cpp:59</a></div></div>
+<div class="ttc" id="aerror_8hpp_html"><div class="ttname"><a href="error_8hpp.html">error.hpp</a></div><div class="ttdoc">Make std::system_error work with GetLastError().</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/shmem_8hpp_source.html b/shmem_8hpp_source.html
new file mode 100644
index 0000000..c885195
--- /dev/null
+++ b/shmem_8hpp_source.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: include/winapi/shmem.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1714771db42b7b5a0cd2ebe6e9736ed.html">winapi</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">shmem.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;handle.hpp&quot;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; </div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
+<div class="line"><a name="l00019"></a><span class="lineno"><a class="line" href="classwinapi_1_1SharedMemory.html"> 19</a></span>&#160;<span class="keyword">class </span><a class="code" href="classwinapi_1_1SharedMemory.html">SharedMemory</a> {</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1SharedMemory.html">SharedMemory</a> <a class="code" href="classwinapi_1_1SharedMemory.html#a475d4dcdf99d777cb0968d7631cc6f7e">create</a>(<span class="keyword">const</span> std::string&amp; name, std::size_t nb);</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1SharedMemory.html">SharedMemory</a> <a class="code" href="classwinapi_1_1SharedMemory.html#a82eafb0e7c2c6b5af1a7ff8945af2027">open</a>(<span class="keyword">const</span> std::string&amp; name);</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
+<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classwinapi_1_1SharedMemory.html#ada3f0075608dd1541f54f004e18a4775"> 34</a></span>&#160; <span class="keywordtype">void</span>* <a class="code" href="classwinapi_1_1SharedMemory.html#ada3f0075608dd1541f54f004e18a4775">get</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_addr.get(); }</div>
+<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="classwinapi_1_1SharedMemory.html#a44e75ba35ae3e470fb521f6274991673"> 36</a></span>&#160; <span class="keywordtype">void</span>* <a class="code" href="classwinapi_1_1SharedMemory.html#a44e75ba35ae3e470fb521f6274991673">ptr</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classwinapi_1_1SharedMemory.html#ada3f0075608dd1541f54f004e18a4775">get</a>(); }</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">struct </span>Unmap {</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">void</span> operator()(<span class="keywordtype">void</span>*) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; };</div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; SharedMemory() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; SharedMemory(Handle&amp;&amp; handle, <span class="keywordtype">void</span>* addr) : m_handle{std::move(handle)}, m_addr{addr} {}</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; Handle m_handle;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; std::unique_ptr&lt;void, Unmap&gt; m_addr;</div>
+<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;};</div>
+<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; </div>
+<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classwinapi_1_1SharedObject.html"> 53</a></span>&#160;<span class="keyword">class </span><a class="code" href="classwinapi_1_1SharedObject.html">SharedObject</a> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">typedef</span> <span class="keyword">typename</span> std::aligned_storage&lt;<span class="keyword">sizeof</span>(T), __alignof(T)&gt;::type AlignedType;</div>
+<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
+<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Args&gt;</div>
+<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classwinapi_1_1SharedObject.html#acb4ef5283256d7463fe81c8b312b6745"> 63</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1SharedObject.html">SharedObject</a> <a class="code" href="classwinapi_1_1SharedObject.html#acb4ef5283256d7463fe81c8b312b6745">create</a>(<span class="keyword">const</span> std::string&amp; name, Args&amp;&amp;... args) {</div>
+<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="classwinapi_1_1SharedObject.html">SharedObject</a> obj{<a class="code" href="classwinapi_1_1SharedMemory.html#a475d4dcdf99d777cb0968d7631cc6f7e">SharedMemory::create</a>(name, <span class="keyword">sizeof</span>(AlignedType))};</div>
+<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">new</span> (obj.ptr()) T(std::forward&lt;Args&gt;(args)...);</div>
+<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; obj.m_destruct = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">return</span> obj;</div>
+<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div>
+<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
+<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classwinapi_1_1SharedObject.html#a08fda6ddde26e0a10170efaf07232761"> 74</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1SharedObject.html">SharedObject</a> <a class="code" href="classwinapi_1_1SharedObject.html#a08fda6ddde26e0a10170efaf07232761">open</a>(<span class="keyword">const</span> std::string&amp; name) {</div>
+<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="classwinapi_1_1SharedObject.html">SharedObject</a> obj{<a class="code" href="classwinapi_1_1SharedMemory.html#a82eafb0e7c2c6b5af1a7ff8945af2027">SharedMemory::open</a>(name)};</div>
+<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">return</span> obj;</div>
+<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div>
+<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
+<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="classwinapi_1_1SharedObject.html">SharedObject</a>(<a class="code" href="classwinapi_1_1SharedObject.html">SharedObject</a>&amp;&amp; other) noexcept = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="classwinapi_1_1SharedObject.html">SharedObject</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1SharedObject.html">SharedObject</a>&amp; other) noexcept = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="classwinapi_1_1SharedObject.html">SharedObject</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1SharedObject.html">SharedObject</a>&amp;) = <span class="keyword">delete</span>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
+<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; ~<a class="code" href="classwinapi_1_1SharedObject.html">SharedObject</a>() {</div>
+<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (m_destruct &amp;&amp; <a class="code" href="classwinapi_1_1SharedObject.html#a0dfaad2c143d60af8dc6c010a13d513a">ptr</a>()) {</div>
+<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="classwinapi_1_1SharedObject.html#a0dfaad2c143d60af8dc6c010a13d513a">ptr</a>()-&gt;~T();</div>
+<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div>
+<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div>
+<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
+<div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classwinapi_1_1SharedObject.html#a0dfaad2c143d60af8dc6c010a13d513a"> 90</a></span>&#160; T* <a class="code" href="classwinapi_1_1SharedObject.html#a0dfaad2c143d60af8dc6c010a13d513a">ptr</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(m_shmem.<a class="code" href="classwinapi_1_1SharedMemory.html#a44e75ba35ae3e470fb521f6274991673">ptr</a>()); }</div>
+<div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="classwinapi_1_1SharedObject.html#a85d0943708ab0da78e1a189b1bbbd1eb"> 92</a></span>&#160; T&amp; <a class="code" href="classwinapi_1_1SharedObject.html#a85d0943708ab0da78e1a189b1bbbd1eb">get</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<a class="code" href="classwinapi_1_1SharedObject.html#a0dfaad2c143d60af8dc6c010a13d513a">ptr</a>(); }</div>
+<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; </div>
+<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; T* operator-&gt;()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classwinapi_1_1SharedObject.html#a0dfaad2c143d60af8dc6c010a13d513a">ptr</a>(); }</div>
+<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; T&amp; operator*()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classwinapi_1_1SharedObject.html#a85d0943708ab0da78e1a189b1bbbd1eb">get</a>(); }</div>
+<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; </div>
+<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">explicit</span> SharedObject(SharedMemory&amp;&amp; shmem) : m_shmem(std::move(shmem)) {}</div>
+<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
+<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; SharedMemory m_shmem;</div>
+<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="comment">// Destruct only once, no matter the number of mappings.</span></div>
+<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">bool</span> m_destruct = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;};</div>
+<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; </div>
+<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1SharedMemory_html"><div class="ttname"><a href="classwinapi_1_1SharedMemory.html">winapi::SharedMemory</a></div><div class="ttdoc">Named shared memory region.</div><div class="ttdef"><b>Definition:</b> <a href="shmem_8hpp_source.html#l00019">shmem.hpp:19</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1SharedMemory_html_a44e75ba35ae3e470fb521f6274991673"><div class="ttname"><a href="classwinapi_1_1SharedMemory.html#a44e75ba35ae3e470fb521f6274991673">winapi::SharedMemory::ptr</a></div><div class="ttdeci">void * ptr() const</div><div class="ttdef"><b>Definition:</b> <a href="shmem_8hpp_source.html#l00036">shmem.hpp:36</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1SharedMemory_html_a475d4dcdf99d777cb0968d7631cc6f7e"><div class="ttname"><a href="classwinapi_1_1SharedMemory.html#a475d4dcdf99d777cb0968d7631cc6f7e">winapi::SharedMemory::create</a></div><div class="ttdeci">static SharedMemory create(const std::string &amp;name, std::size_t nb)</div><div class="ttdef"><b>Definition:</b> <a href="shmem_8cpp_source.html#l00040">shmem.cpp:40</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1SharedMemory_html_a82eafb0e7c2c6b5af1a7ff8945af2027"><div class="ttname"><a href="classwinapi_1_1SharedMemory.html#a82eafb0e7c2c6b5af1a7ff8945af2027">winapi::SharedMemory::open</a></div><div class="ttdeci">static SharedMemory open(const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="shmem_8cpp_source.html#l00059">shmem.cpp:59</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1SharedMemory_html_ada3f0075608dd1541f54f004e18a4775"><div class="ttname"><a href="classwinapi_1_1SharedMemory.html#ada3f0075608dd1541f54f004e18a4775">winapi::SharedMemory::get</a></div><div class="ttdeci">void * get() const</div><div class="ttdef"><b>Definition:</b> <a href="shmem_8hpp_source.html#l00034">shmem.hpp:34</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1SharedObject_html"><div class="ttname"><a href="classwinapi_1_1SharedObject.html">winapi::SharedObject</a></div><div class="ttdoc">Easy way to represent a C++ object as a shared memory region.</div><div class="ttdef"><b>Definition:</b> <a href="shmem_8hpp_source.html#l00053">shmem.hpp:53</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1SharedObject_html_a08fda6ddde26e0a10170efaf07232761"><div class="ttname"><a href="classwinapi_1_1SharedObject.html#a08fda6ddde26e0a10170efaf07232761">winapi::SharedObject::open</a></div><div class="ttdeci">static SharedObject open(const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="shmem_8hpp_source.html#l00074">shmem.hpp:74</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1SharedObject_html_a0dfaad2c143d60af8dc6c010a13d513a"><div class="ttname"><a href="classwinapi_1_1SharedObject.html#a0dfaad2c143d60af8dc6c010a13d513a">winapi::SharedObject::ptr</a></div><div class="ttdeci">T * ptr() const</div><div class="ttdef"><b>Definition:</b> <a href="shmem_8hpp_source.html#l00090">shmem.hpp:90</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1SharedObject_html_a85d0943708ab0da78e1a189b1bbbd1eb"><div class="ttname"><a href="classwinapi_1_1SharedObject.html#a85d0943708ab0da78e1a189b1bbbd1eb">winapi::SharedObject::get</a></div><div class="ttdeci">T &amp; get() const</div><div class="ttdef"><b>Definition:</b> <a href="shmem_8hpp_source.html#l00092">shmem.hpp:92</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1SharedObject_html_acb4ef5283256d7463fe81c8b312b6745"><div class="ttname"><a href="classwinapi_1_1SharedObject.html#acb4ef5283256d7463fe81c8b312b6745">winapi::SharedObject::create</a></div><div class="ttdeci">static SharedObject create(const std::string &amp;name, Args &amp;&amp;... args)</div><div class="ttdef"><b>Definition:</b> <a href="shmem_8hpp_source.html#l00063">shmem.hpp:63</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/sid_8cpp_source.html b/sid_8cpp_source.html
new file mode 100644
index 0000000..b3951d7
--- /dev/null
+++ b/sid_8cpp_source.html
@@ -0,0 +1,127 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: src/sid.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">sid.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &lt;winapi/buffer.hpp&gt;</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="error_8hpp.html">winapi/error.hpp</a>&gt;</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;winapi/sid.hpp&gt;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;winapi/utf8.hpp&gt;</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;winapi/utils.hpp&gt;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// clang-format off</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;windows.h&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;sddl.h&gt;</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// clang-format on</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;Sid Sid::well_known(WELL_KNOWN_SID_TYPE type) {</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; Buffer buffer;</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; buffer.resize(MAX_SID_SIZE);</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">auto</span> cb = <span class="keyword">static_cast&lt;</span>DWORD<span class="keyword">&gt;</span>(buffer.size());</div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">if</span> (!::CreateWellKnownSid(type, NULL, buffer.data(), &amp;cb))</div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;CreateWellKnownSid&quot;</span>);</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; buffer.resize(cb);</div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">return</span> Sid{buffer};</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;}</div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;Sid Sid::builtin_administrators() {</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> well_known(WinBuiltinAdministratorsSid);</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;}</div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;std::string Sid::to_string()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">wchar_t</span>* s = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
+<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">if</span> (!::ConvertSidToStringSidW(<span class="keyword">const_cast&lt;</span>Impl*<span class="keyword">&gt;</span>(&amp;get_impl()), &amp;s))</div>
+<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">throw</span> error::windows(GetLastError(), <span class="stringliteral">&quot;ConvertSidToStringSidW&quot;</span>);</div>
+<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
+<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">return</span> narrow(std::unique_ptr&lt;wchar_t, LocalDelete&gt;{s}.get());</div>
+<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div>
+<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
+<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aerror_8hpp_html"><div class="ttname"><a href="error_8hpp.html">error.hpp</a></div><div class="ttdoc">Make std::system_error work with GetLastError().</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/sid_8hpp_source.html b/sid_8hpp_source.html
new file mode 100644
index 0000000..c37466e
--- /dev/null
+++ b/sid_8hpp_source.html
@@ -0,0 +1,121 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: include/winapi/sid.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1714771db42b7b5a0cd2ebe6e9736ed.html">winapi</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">sid.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &quot;buffer.hpp&quot;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; </div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;windows.h&gt;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
+<div class="line"><a name="l00017"></a><span class="lineno"><a class="line" href="classwinapi_1_1Sid.html"> 17</a></span>&#160;<span class="keyword">class </span><a class="code" href="classwinapi_1_1Sid.html">Sid</a> {</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">public</span>:</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">static</span> constexpr std::size_t MAX_SID_SIZE = SECURITY_MAX_SID_SIZE;</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">typedef</span> SID Impl;</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1Sid.html">Sid</a> well_known(WELL_KNOWN_SID_TYPE type);</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">static</span> <a class="code" href="classwinapi_1_1Sid.html">Sid</a> builtin_administrators();</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classwinapi_1_1Sid.html">Sid</a>(<span class="keyword">const</span> <a class="code" href="classwinapi_1_1Buffer.html">Buffer</a>&amp; buffer) : m_buffer(buffer) {}</div>
+<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">explicit</span> <span class="keyword">operator</span> SID&amp;() { <span class="keywordflow">return</span> get_impl(); }</div>
+<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">explicit</span> <span class="keyword">operator</span> <span class="keyword">const</span> SID&amp;() <span class="keyword">const</span> { <span class="keywordflow">return</span> get_impl(); }</div>
+<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
+<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; std::string to_string() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
+<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">private</span>:</div>
+<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; Impl&amp; get_impl() { <span class="keywordflow">return</span> *<span class="keyword">reinterpret_cast&lt;</span>SID*<span class="keyword">&gt;</span>(m_buffer.data()); }</div>
+<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> Impl&amp; get_impl()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>SID*<span class="keyword">&gt;</span>(m_buffer.data()); }</div>
+<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
+<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <a class="code" href="classwinapi_1_1Buffer.html">Buffer</a> m_buffer;</div>
+<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;};</div>
+<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
+<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="aclasswinapi_1_1Buffer_html"><div class="ttname"><a href="classwinapi_1_1Buffer.html">winapi::Buffer</a></div><div class="ttdoc">Binary data container.</div><div class="ttdef"><b>Definition:</b> <a href="buffer_8hpp_source.html#l00024">buffer.hpp:24</a></div></div>
+<div class="ttc" id="aclasswinapi_1_1Sid_html"><div class="ttname"><a href="classwinapi_1_1Sid.html">winapi::Sid</a></div><div class="ttdef"><b>Definition:</b> <a href="sid_8hpp_source.html#l00017">sid.hpp:17</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/splitbar.png b/splitbar.png
new file mode 100644
index 0000000..fe895f2
--- /dev/null
+++ b/splitbar.png
Binary files differ
diff --git a/structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4-members.html b/structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4-members.html
new file mode 100644
index 0000000..04c95c5
--- /dev/null
+++ b/structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4-members.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>std</b></li><li class="navelem"><a class="el" href="structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4.html">hash&lt; winapi::File::ID &gt;</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">std::hash&lt; winapi::File::ID &gt; Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4.html">std::hash&lt; winapi::File::ID &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator()</b>(const winapi::File::ID &amp;id) const (defined in <a class="el" href="structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4.html">std::hash&lt; winapi::File::ID &gt;</a>)</td><td class="entry"><a class="el" href="structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4.html">std::hash&lt; winapi::File::ID &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4.html b/structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4.html
new file mode 100644
index 0000000..6addbd0
--- /dev/null
+++ b/structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: std::hash&lt; winapi::File::ID &gt; Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>std</b></li><li class="navelem"><a class="el" href="structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4.html">hash&lt; winapi::File::ID &gt;</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="structstd_1_1hash_3_01winapi_1_1File_1_1ID_01_4-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">std::hash&lt; winapi::File::ID &gt; Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a17c14482fbbb4f855e866e28873eff85"><td class="memItemLeft" align="right" valign="top"><a id="a17c14482fbbb4f855e866e28873eff85"></a>
+std::size_t&#160;</td><td class="memItemRight" valign="bottom"><b>operator()</b> (const <a class="el" href="structwinapi_1_1File_1_1ID.html">winapi::File::ID</a> &amp;id) const</td></tr>
+<tr class="separator:a17c14482fbbb4f855e866e28873eff85"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p class="definition">Definition at line <a class="el" href="file_8hpp_source.html#l00079">79</a> of file <a class="el" href="file_8hpp_source.html">file.hpp</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>include/winapi/<a class="el" href="file_8hpp_source.html">file.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1File_1_1ID-members.html b/structwinapi_1_1File_1_1ID-members.html
new file mode 100644
index 0000000..2cb6ac2
--- /dev/null
+++ b/structwinapi_1_1File_1_1ID-members.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1File.html">File</a></li><li class="navelem"><a class="el" href="structwinapi_1_1File_1_1ID.html">ID</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::File::ID Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structwinapi_1_1File_1_1ID.html">winapi::File::ID</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>impl</b> (defined in <a class="el" href="structwinapi_1_1File_1_1ID.html">winapi::File::ID</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1File_1_1ID.html">winapi::File::ID</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>operator==</b>(const ID &amp;other) const (defined in <a class="el" href="structwinapi_1_1File_1_1ID.html">winapi::File::ID</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1File_1_1ID.html">winapi::File::ID</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1File_1_1ID.html b/structwinapi_1_1File_1_1ID.html
new file mode 100644
index 0000000..166cc7c
--- /dev/null
+++ b/structwinapi_1_1File_1_1ID.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::File::ID Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="classwinapi_1_1File.html">File</a></li><li class="navelem"><a class="el" href="structwinapi_1_1File_1_1ID.html">ID</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="structwinapi_1_1File_1_1ID-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::File::ID Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a914e439f24dd68d58a86abf5f512f163"><td class="memItemLeft" align="right" valign="top"><a id="a914e439f24dd68d58a86abf5f512f163"></a>
+bool&#160;</td><td class="memItemRight" valign="bottom"><b>operator==</b> (const <a class="el" href="structwinapi_1_1File_1_1ID.html">ID</a> &amp;other) const</td></tr>
+<tr class="separator:a914e439f24dd68d58a86abf5f512f163"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a5b090edcb0acaaeee4f5402d7986a40a"><td class="memItemLeft" align="right" valign="top"><a id="a5b090edcb0acaaeee4f5402d7986a40a"></a>
+const FILE_ID_INFO&#160;</td><td class="memItemRight" valign="bottom"><b>impl</b></td></tr>
+<tr class="separator:a5b090edcb0acaaeee4f5402d7986a40a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p class="definition">Definition at line <a class="el" href="file_8hpp_source.html#l00031">31</a> of file <a class="el" href="file_8hpp_source.html">file.hpp</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>include/winapi/<a class="el" href="file_8hpp_source.html">file.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1LocalDelete-members.html b/structwinapi_1_1LocalDelete-members.html
new file mode 100644
index 0000000..97678d3
--- /dev/null
+++ b/structwinapi_1_1LocalDelete-members.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="structwinapi_1_1LocalDelete.html">LocalDelete</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::LocalDelete Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structwinapi_1_1LocalDelete.html">winapi::LocalDelete</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator()</b>(void *ptr) const (defined in <a class="el" href="structwinapi_1_1LocalDelete.html">winapi::LocalDelete</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1LocalDelete.html">winapi::LocalDelete</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1LocalDelete.html b/structwinapi_1_1LocalDelete.html
new file mode 100644
index 0000000..7634a4c
--- /dev/null
+++ b/structwinapi_1_1LocalDelete.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::LocalDelete Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="structwinapi_1_1LocalDelete.html">LocalDelete</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="structwinapi_1_1LocalDelete-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::LocalDelete Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a9dfe9a88212da29b7e3006324081484d"><td class="memItemLeft" align="right" valign="top"><a id="a9dfe9a88212da29b7e3006324081484d"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>operator()</b> (void *ptr) const</td></tr>
+<tr class="separator:a9dfe9a88212da29b7e3006324081484d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p class="definition">Definition at line <a class="el" href="utils_8hpp_source.html#l00016">16</a> of file <a class="el" href="utils_8hpp_source.html">utils.hpp</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>include/winapi/<a class="el" href="utils_8hpp_source.html">utils.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1ProcessParameters-members.html b/structwinapi_1_1ProcessParameters-members.html
new file mode 100644
index 0000000..4fd5cef
--- /dev/null
+++ b/structwinapi_1_1ProcessParameters-members.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="structwinapi_1_1ProcessParameters.html">ProcessParameters</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::ProcessParameters Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cmd_line</b> (defined in <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>console_mode</b> (defined in <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ConsoleCreationMode</b> enum name (defined in <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ConsoleInherit</b> enum value (defined in <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ConsoleNew</b> enum value (defined in <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ConsoleNone</b> enum value (defined in <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>io</b> (defined in <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ProcessParameters</b>(const CommandLine &amp;cmd_line) (defined in <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1ProcessParameters.html b/structwinapi_1_1ProcessParameters.html
new file mode 100644
index 0000000..f4cfe6f
--- /dev/null
+++ b/structwinapi_1_1ProcessParameters.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::ProcessParameters Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="structwinapi_1_1ProcessParameters.html">ProcessParameters</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-types">Public Types</a> &#124;
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="structwinapi_1_1ProcessParameters-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::ProcessParameters Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a class="el" href="classwinapi_1_1Process.html" title="Create a new process or open an existing process.">Process</a> parameters for <a class="el" href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">Process::create()</a>.
+ <a href="structwinapi_1_1ProcessParameters.html#details">More...</a></p>
+<div class="dynheader">
+Inheritance diagram for winapi::ProcessParameters:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="structwinapi_1_1ProcessParameters.png" usemap="#winapi::ProcessParameters_map" alt=""/>
+ <map id="winapi::ProcessParameters_map" name="winapi::ProcessParameters_map">
+<area href="structwinapi_1_1ShellParameters.html" title="Process parameters for Process::shell()." alt="winapi::ShellParameters" shape="rect" coords="0,56,164,80"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a2ab1e1625eb2c17a11e329b58bbfcec3"><td class="memItemLeft" align="right" valign="top"><a id="a2ab1e1625eb2c17a11e329b58bbfcec3"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>ConsoleCreationMode</b> { <b>ConsoleNone</b>
+, <b>ConsoleInherit</b>
+, <b>ConsoleNew</b>
+ }</td></tr>
+<tr class="separator:a2ab1e1625eb2c17a11e329b58bbfcec3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ab9653217e2901e0f10fff4eacc93de9f"><td class="memItemLeft" align="right" valign="top"><a id="ab9653217e2901e0f10fff4eacc93de9f"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>ProcessParameters</b> (const <a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a> &amp;cmd_line)</td></tr>
+<tr class="separator:ab9653217e2901e0f10fff4eacc93de9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a15bb7145aa21f3adeb89c68535b8eec6"><td class="memItemLeft" align="right" valign="top"><a id="a15bb7145aa21f3adeb89c68535b8eec6"></a>
+<a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a>&#160;</td><td class="memItemRight" valign="bottom"><b>cmd_line</b></td></tr>
+<tr class="separator:a15bb7145aa21f3adeb89c68535b8eec6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7c83b30a13516143babbaf605b1b96ac"><td class="memItemLeft" align="right" valign="top"><a id="a7c83b30a13516143babbaf605b1b96ac"></a>
+boost::optional&lt; <a class="el" href="structwinapi_1_1process_1_1IO.html">process::IO</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>io</b></td></tr>
+<tr class="separator:a7c83b30a13516143babbaf605b1b96ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac9f68ddb611627f71aa09cbce5189d15"><td class="memItemLeft" align="right" valign="top"><a id="ac9f68ddb611627f71aa09cbce5189d15"></a>
+ConsoleCreationMode&#160;</td><td class="memItemRight" valign="bottom"><b>console_mode</b> = ConsoleNew</td></tr>
+<tr class="separator:ac9f68ddb611627f71aa09cbce5189d15"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="classwinapi_1_1Process.html" title="Create a new process or open an existing process.">Process</a> parameters for <a class="el" href="classwinapi_1_1Process.html#a6ef0ce275ef09ed6ef1e115afeee7e6a">Process::create()</a>. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8hpp_source.html#l00024">24</a> of file <a class="el" href="process_8hpp_source.html">process.hpp</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>include/winapi/<a class="el" href="process_8hpp_source.html">process.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1ProcessParameters.png b/structwinapi_1_1ProcessParameters.png
new file mode 100644
index 0000000..d7c2ad5
--- /dev/null
+++ b/structwinapi_1_1ProcessParameters.png
Binary files differ
diff --git a/structwinapi_1_1Resource-members.html b/structwinapi_1_1Resource-members.html
new file mode 100644
index 0000000..cbb3a2a
--- /dev/null
+++ b/structwinapi_1_1Resource-members.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="structwinapi_1_1Resource.html">Resource</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::Resource Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structwinapi_1_1Resource.html">winapi::Resource</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="structwinapi_1_1Resource.html#ac3bf07d20d3ce6705693ae7a86eb565d">copy</a>() const</td><td class="entry"><a class="el" href="structwinapi_1_1Resource.html">winapi::Resource</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>data</b> (defined in <a class="el" href="structwinapi_1_1Resource.html">winapi::Resource</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1Resource.html">winapi::Resource</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>nb</b> (defined in <a class="el" href="structwinapi_1_1Resource.html">winapi::Resource</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1Resource.html">winapi::Resource</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Resource</b>()=default (defined in <a class="el" href="structwinapi_1_1Resource.html">winapi::Resource</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1Resource.html">winapi::Resource</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Resource</b>(const void *data, std::size_t nb) (defined in <a class="el" href="structwinapi_1_1Resource.html">winapi::Resource</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1Resource.html">winapi::Resource</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1Resource.html b/structwinapi_1_1Resource.html
new file mode 100644
index 0000000..cb3c58b
--- /dev/null
+++ b/structwinapi_1_1Resource.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::Resource Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="structwinapi_1_1Resource.html">Resource</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="structwinapi_1_1Resource-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::Resource Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Resources embedded in a PE (Portable Executable).
+ <a href="structwinapi_1_1Resource.html#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a239c755ee366eede6f7e206aac5f6f71"><td class="memItemLeft" align="right" valign="top"><a id="a239c755ee366eede6f7e206aac5f6f71"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Resource</b> (const void *data, std::size_t nb)</td></tr>
+<tr class="separator:a239c755ee366eede6f7e206aac5f6f71"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac3bf07d20d3ce6705693ae7a86eb565d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classwinapi_1_1Buffer.html">Buffer</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structwinapi_1_1Resource.html#ac3bf07d20d3ce6705693ae7a86eb565d">copy</a> () const</td></tr>
+<tr class="separator:ac3bf07d20d3ce6705693ae7a86eb565d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a4674a3cde3dc20fd49157c3918b8e412"><td class="memItemLeft" align="right" valign="top"><a id="a4674a3cde3dc20fd49157c3918b8e412"></a>
+const void *&#160;</td><td class="memItemRight" valign="bottom"><b>data</b> = nullptr</td></tr>
+<tr class="separator:a4674a3cde3dc20fd49157c3918b8e412"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a81a5053b1fe776914318576edac19928"><td class="memItemLeft" align="right" valign="top"><a id="a81a5053b1fe776914318576edac19928"></a>
+std::size_t&#160;</td><td class="memItemRight" valign="bottom"><b>nb</b> = 0</td></tr>
+<tr class="separator:a81a5053b1fe776914318576edac19928"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Resources embedded in a PE (Portable Executable). </p>
+
+<p class="definition">Definition at line <a class="el" href="resource_8hpp_source.html#l00015">15</a> of file <a class="el" href="resource_8hpp_source.html">resource.hpp</a>.</p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="ac3bf07d20d3ce6705693ae7a86eb565d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac3bf07d20d3ce6705693ae7a86eb565d">&#9670;&nbsp;</a></span>copy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classwinapi_1_1Buffer.html">Buffer</a> winapi::Resource::copy </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Extract resource data into a <a class="el" href="classwinapi_1_1Buffer.html" title="Binary data container.">Buffer</a> instance. </p>
+
+<p class="definition">Definition at line <a class="el" href="resource_8hpp_source.html#l00023">23</a> of file <a class="el" href="resource_8hpp_source.html">resource.hpp</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>include/winapi/<a class="el" href="resource_8hpp_source.html">resource.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1ShellParameters-members.html b/structwinapi_1_1ShellParameters-members.html
new file mode 100644
index 0000000..1dba6f2
--- /dev/null
+++ b/structwinapi_1_1ShellParameters-members.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="structwinapi_1_1ShellParameters.html">ShellParameters</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::ShellParameters Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structwinapi_1_1ShellParameters.html">winapi::ShellParameters</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>cmd_line</b> (defined in <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>console_mode</b> (defined in <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ConsoleCreationMode</b> enum name (defined in <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ConsoleInherit</b> enum value (defined in <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>ConsoleNew</b> enum value (defined in <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ConsoleNone</b> enum value (defined in <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>io</b> (defined in <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ProcessParameters</b>(const CommandLine &amp;cmd_line) (defined in <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>runas</b>(const CommandLine &amp;cmd_line) (defined in <a class="el" href="structwinapi_1_1ShellParameters.html">winapi::ShellParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ShellParameters.html">winapi::ShellParameters</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>ShellParameters</b>(const CommandLine &amp;cmd_line) (defined in <a class="el" href="structwinapi_1_1ShellParameters.html">winapi::ShellParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ShellParameters.html">winapi::ShellParameters</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>verb</b> (defined in <a class="el" href="structwinapi_1_1ShellParameters.html">winapi::ShellParameters</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1ShellParameters.html">winapi::ShellParameters</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1ShellParameters.html b/structwinapi_1_1ShellParameters.html
new file mode 100644
index 0000000..888a929
--- /dev/null
+++ b/structwinapi_1_1ShellParameters.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::ShellParameters Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><a class="el" href="structwinapi_1_1ShellParameters.html">ShellParameters</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="structwinapi_1_1ShellParameters-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::ShellParameters Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><a class="el" href="classwinapi_1_1Process.html" title="Create a new process or open an existing process.">Process</a> parameters for <a class="el" href="classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e">Process::shell()</a>.
+ <a href="structwinapi_1_1ShellParameters.html#details">More...</a></p>
+<div class="dynheader">
+Inheritance diagram for winapi::ShellParameters:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="structwinapi_1_1ShellParameters.png" usemap="#winapi::ShellParameters_map" alt=""/>
+ <map id="winapi::ShellParameters_map" name="winapi::ShellParameters_map">
+<area href="structwinapi_1_1ProcessParameters.html" title="Process parameters for Process::create()." alt="winapi::ProcessParameters" shape="rect" coords="0,0,164,24"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aafe0a6aeeb1459f62538f10fb088d9bb"><td class="memItemLeft" align="right" valign="top"><a id="aafe0a6aeeb1459f62538f10fb088d9bb"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>ShellParameters</b> (const <a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a> &amp;cmd_line)</td></tr>
+<tr class="separator:aafe0a6aeeb1459f62538f10fb088d9bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_structwinapi_1_1ProcessParameters"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_structwinapi_1_1ProcessParameters')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td></tr>
+<tr class="memitem:ab9653217e2901e0f10fff4eacc93de9f inherit pub_methods_structwinapi_1_1ProcessParameters"><td class="memItemLeft" align="right" valign="top"><a id="ab9653217e2901e0f10fff4eacc93de9f"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>ProcessParameters</b> (const <a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a> &amp;cmd_line)</td></tr>
+<tr class="separator:ab9653217e2901e0f10fff4eacc93de9f inherit pub_methods_structwinapi_1_1ProcessParameters"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
+Static Public Member Functions</h2></td></tr>
+<tr class="memitem:abd9f3b35b7a5f7c15dcb388bdcad95bf"><td class="memItemLeft" align="right" valign="top"><a id="abd9f3b35b7a5f7c15dcb388bdcad95bf"></a>
+static <a class="el" href="structwinapi_1_1ShellParameters.html">ShellParameters</a>&#160;</td><td class="memItemRight" valign="bottom"><b>runas</b> (const <a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a> &amp;cmd_line)</td></tr>
+<tr class="separator:abd9f3b35b7a5f7c15dcb388bdcad95bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a899fe7dbc6a51215c4d62a5e4862f70f"><td class="memItemLeft" align="right" valign="top"><a id="a899fe7dbc6a51215c4d62a5e4862f70f"></a>
+boost::optional&lt; std::string &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>verb</b></td></tr>
+<tr class="separator:a899fe7dbc6a51215c4d62a5e4862f70f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_attribs_structwinapi_1_1ProcessParameters"><td colspan="2" onclick="javascript:toggleInherit('pub_attribs_structwinapi_1_1ProcessParameters')"><img src="closed.png" alt="-"/>&#160;Public Attributes inherited from <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td></tr>
+<tr class="memitem:a15bb7145aa21f3adeb89c68535b8eec6 inherit pub_attribs_structwinapi_1_1ProcessParameters"><td class="memItemLeft" align="right" valign="top"><a id="a15bb7145aa21f3adeb89c68535b8eec6"></a>
+<a class="el" href="classwinapi_1_1CommandLine.html">CommandLine</a>&#160;</td><td class="memItemRight" valign="bottom"><b>cmd_line</b></td></tr>
+<tr class="separator:a15bb7145aa21f3adeb89c68535b8eec6 inherit pub_attribs_structwinapi_1_1ProcessParameters"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7c83b30a13516143babbaf605b1b96ac inherit pub_attribs_structwinapi_1_1ProcessParameters"><td class="memItemLeft" align="right" valign="top"><a id="a7c83b30a13516143babbaf605b1b96ac"></a>
+boost::optional&lt; <a class="el" href="structwinapi_1_1process_1_1IO.html">process::IO</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>io</b></td></tr>
+<tr class="separator:a7c83b30a13516143babbaf605b1b96ac inherit pub_attribs_structwinapi_1_1ProcessParameters"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac9f68ddb611627f71aa09cbce5189d15 inherit pub_attribs_structwinapi_1_1ProcessParameters"><td class="memItemLeft" align="right" valign="top"><a id="ac9f68ddb611627f71aa09cbce5189d15"></a>
+ConsoleCreationMode&#160;</td><td class="memItemRight" valign="bottom"><b>console_mode</b> = ConsoleNew</td></tr>
+<tr class="separator:ac9f68ddb611627f71aa09cbce5189d15 inherit pub_attribs_structwinapi_1_1ProcessParameters"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_types_structwinapi_1_1ProcessParameters"><td colspan="2" onclick="javascript:toggleInherit('pub_types_structwinapi_1_1ProcessParameters')"><img src="closed.png" alt="-"/>&#160;Public Types inherited from <a class="el" href="structwinapi_1_1ProcessParameters.html">winapi::ProcessParameters</a></td></tr>
+<tr class="memitem:a2ab1e1625eb2c17a11e329b58bbfcec3 inherit pub_types_structwinapi_1_1ProcessParameters"><td class="memItemLeft" align="right" valign="top"><a id="a2ab1e1625eb2c17a11e329b58bbfcec3"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>ConsoleCreationMode</b> { <b>ConsoleNone</b>
+, <b>ConsoleInherit</b>
+, <b>ConsoleNew</b>
+ }</td></tr>
+<tr class="separator:a2ab1e1625eb2c17a11e329b58bbfcec3 inherit pub_types_structwinapi_1_1ProcessParameters"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p><a class="el" href="classwinapi_1_1Process.html" title="Create a new process or open an existing process.">Process</a> parameters for <a class="el" href="classwinapi_1_1Process.html#aa9f7cbc9b0e5530f0746606aacc5584e">Process::shell()</a>. </p>
+
+<p class="definition">Definition at line <a class="el" href="process_8hpp_source.html#l00039">39</a> of file <a class="el" href="process_8hpp_source.html">process.hpp</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>include/winapi/<a class="el" href="process_8hpp_source.html">process.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1ShellParameters.png b/structwinapi_1_1ShellParameters.png
new file mode 100644
index 0000000..26a67de
--- /dev/null
+++ b/structwinapi_1_1ShellParameters.png
Binary files differ
diff --git a/structwinapi_1_1process_1_1IO-members.html b/structwinapi_1_1process_1_1IO-members.html
new file mode 100644
index 0000000..d767f25
--- /dev/null
+++ b/structwinapi_1_1process_1_1IO-members.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><b>process</b></li><li class="navelem"><a class="el" href="structwinapi_1_1process_1_1IO.html">IO</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::process::IO Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structwinapi_1_1process_1_1IO.html">winapi::process::IO</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>close</b>() (defined in <a class="el" href="structwinapi_1_1process_1_1IO.html">winapi::process::IO</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1IO.html">winapi::process::IO</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>IO</b>()=default (defined in <a class="el" href="structwinapi_1_1process_1_1IO.html">winapi::process::IO</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1IO.html">winapi::process::IO</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>std_err</b> (defined in <a class="el" href="structwinapi_1_1process_1_1IO.html">winapi::process::IO</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1IO.html">winapi::process::IO</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>std_in</b> (defined in <a class="el" href="structwinapi_1_1process_1_1IO.html">winapi::process::IO</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1IO.html">winapi::process::IO</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>std_out</b> (defined in <a class="el" href="structwinapi_1_1process_1_1IO.html">winapi::process::IO</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1IO.html">winapi::process::IO</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1process_1_1IO.html b/structwinapi_1_1process_1_1IO.html
new file mode 100644
index 0000000..925fd85
--- /dev/null
+++ b/structwinapi_1_1process_1_1IO.html
@@ -0,0 +1,112 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::process::IO Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><b>process</b></li><li class="navelem"><a class="el" href="structwinapi_1_1process_1_1IO.html">IO</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="structwinapi_1_1process_1_1IO-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::process::IO Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Child process <a class="el" href="structwinapi_1_1process_1_1IO.html" title="Child process IO settings.">IO</a> settings.
+ <a href="structwinapi_1_1process_1_1IO.html#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a8efa07ccd09c4abfa320ca2ee5a5b41d"><td class="memItemLeft" align="right" valign="top"><a id="a8efa07ccd09c4abfa320ca2ee5a5b41d"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>close</b> ()</td></tr>
+<tr class="separator:a8efa07ccd09c4abfa320ca2ee5a5b41d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a655142cfeabaebd4ca1bd8775ea17e63"><td class="memItemLeft" align="right" valign="top"><a id="a655142cfeabaebd4ca1bd8775ea17e63"></a>
+<a class="el" href="structwinapi_1_1process_1_1Stdin.html">Stdin</a>&#160;</td><td class="memItemRight" valign="bottom"><b>std_in</b></td></tr>
+<tr class="separator:a655142cfeabaebd4ca1bd8775ea17e63"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab48c95912423af98bdd6fd01e8488afd"><td class="memItemLeft" align="right" valign="top"><a id="ab48c95912423af98bdd6fd01e8488afd"></a>
+<a class="el" href="structwinapi_1_1process_1_1Stdout.html">Stdout</a>&#160;</td><td class="memItemRight" valign="bottom"><b>std_out</b></td></tr>
+<tr class="separator:ab48c95912423af98bdd6fd01e8488afd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afe468514849ff40adb5f57425abeda52"><td class="memItemLeft" align="right" valign="top"><a id="afe468514849ff40adb5f57425abeda52"></a>
+<a class="el" href="structwinapi_1_1process_1_1Stderr.html">Stderr</a>&#160;</td><td class="memItemRight" valign="bottom"><b>std_err</b></td></tr>
+<tr class="separator:afe468514849ff40adb5f57425abeda52"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Child process <a class="el" href="structwinapi_1_1process_1_1IO.html" title="Child process IO settings.">IO</a> settings. </p>
+
+<p class="definition">Definition at line <a class="el" href="process__io_8hpp_source.html#l00061">61</a> of file <a class="el" href="process__io_8hpp_source.html">process_io.hpp</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following files:<ul>
+<li>include/winapi/<a class="el" href="process__io_8hpp_source.html">process_io.hpp</a></li>
+<li>src/<a class="el" href="process__io_8cpp_source.html">process_io.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1process_1_1Stderr-members.html b/structwinapi_1_1process_1_1Stderr-members.html
new file mode 100644
index 0000000..f0b7788
--- /dev/null
+++ b/structwinapi_1_1process_1_1Stderr-members.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><b>process</b></li><li class="navelem"><a class="el" href="structwinapi_1_1process_1_1Stderr.html">Stderr</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::process::Stderr Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structwinapi_1_1process_1_1Stderr.html">winapi::process::Stderr</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>handle</b> (defined in <a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stderr.html#aefbbae355c05c41f177ed5c3f769809c">Stderr</a>()</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stderr.html">winapi::process::Stderr</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stderr.html#a9906ac147b47c7e7b8a299e942cb77c5">Stderr</a>(const std::string &amp;file)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stderr.html">winapi::process::Stderr</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stderr.html#a1daa6ec6ad6b30d9958b2ee76f086230">Stderr</a>(const CanonicalPath &amp;file)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stderr.html">winapi::process::Stderr</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stderr.html#a0fca971e15b205e971a18c206d1c8003">Stderr</a>(Pipe &amp;)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stderr.html">winapi::process::Stderr</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Stream</b>(Handle &amp;&amp;handle) (defined in <a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1process_1_1Stderr.html b/structwinapi_1_1process_1_1Stderr.html
new file mode 100644
index 0000000..981c9a1
--- /dev/null
+++ b/structwinapi_1_1process_1_1Stderr.html
@@ -0,0 +1,232 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::process::Stderr Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><b>process</b></li><li class="navelem"><a class="el" href="structwinapi_1_1process_1_1Stderr.html">Stderr</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="structwinapi_1_1process_1_1Stderr-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::process::Stderr Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Redirect child process's stderr.
+ <a href="structwinapi_1_1process_1_1Stderr.html#details">More...</a></p>
+<div class="dynheader">
+Inheritance diagram for winapi::process::Stderr:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="structwinapi_1_1process_1_1Stderr.png" usemap="#winapi::process::Stderr_map" alt=""/>
+ <map id="winapi::process::Stderr_map" name="winapi::process::Stderr_map">
+<area href="structwinapi_1_1process_1_1Stream.html" alt="winapi::process::Stream" shape="rect" coords="0,0,144,24"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aefbbae355c05c41f177ed5c3f769809c"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structwinapi_1_1process_1_1Stderr.html#aefbbae355c05c41f177ed5c3f769809c">Stderr</a> ()</td></tr>
+<tr class="separator:aefbbae355c05c41f177ed5c3f769809c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9906ac147b47c7e7b8a299e942cb77c5"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structwinapi_1_1process_1_1Stderr.html#a9906ac147b47c7e7b8a299e942cb77c5">Stderr</a> (const std::string &amp;file)</td></tr>
+<tr class="separator:a9906ac147b47c7e7b8a299e942cb77c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1daa6ec6ad6b30d9958b2ee76f086230"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structwinapi_1_1process_1_1Stderr.html#a1daa6ec6ad6b30d9958b2ee76f086230">Stderr</a> (const <a class="el" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a> &amp;file)</td></tr>
+<tr class="separator:a1daa6ec6ad6b30d9958b2ee76f086230"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0fca971e15b205e971a18c206d1c8003"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structwinapi_1_1process_1_1Stderr.html#a0fca971e15b205e971a18c206d1c8003">Stderr</a> (<a class="el" href="classwinapi_1_1Pipe.html">Pipe</a> &amp;)</td></tr>
+<tr class="separator:a0fca971e15b205e971a18c206d1c8003"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_structwinapi_1_1process_1_1Stream"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_structwinapi_1_1process_1_1Stream')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a></td></tr>
+<tr class="memitem:a1b8a77ad3b50e85a4594e2e5bebf1c58 inherit pub_methods_structwinapi_1_1process_1_1Stream"><td class="memItemLeft" align="right" valign="top"><a id="a1b8a77ad3b50e85a4594e2e5bebf1c58"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Stream</b> (<a class="el" href="classwinapi_1_1Handle.html">Handle</a> &amp;&amp;handle)</td></tr>
+<tr class="separator:a1b8a77ad3b50e85a4594e2e5bebf1c58 inherit pub_methods_structwinapi_1_1process_1_1Stream"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_attribs_structwinapi_1_1process_1_1Stream"><td colspan="2" onclick="javascript:toggleInherit('pub_attribs_structwinapi_1_1process_1_1Stream')"><img src="closed.png" alt="-"/>&#160;Public Attributes inherited from <a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a></td></tr>
+<tr class="memitem:a0c88866185c1fe4639311053855a5498 inherit pub_attribs_structwinapi_1_1process_1_1Stream"><td class="memItemLeft" align="right" valign="top"><a id="a0c88866185c1fe4639311053855a5498"></a>
+<a class="el" href="classwinapi_1_1Handle.html">Handle</a>&#160;</td><td class="memItemRight" valign="bottom"><b>handle</b></td></tr>
+<tr class="separator:a0c88866185c1fe4639311053855a5498 inherit pub_attribs_structwinapi_1_1process_1_1Stream"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Redirect child process's stderr. </p>
+
+<p class="definition">Definition at line <a class="el" href="process__io_8hpp_source.html#l00049">49</a> of file <a class="el" href="process__io_8hpp_source.html">process_io.hpp</a>.</p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="aefbbae355c05c41f177ed5c3f769809c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aefbbae355c05c41f177ed5c3f769809c">&#9670;&nbsp;</a></span>Stderr() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::process::Stderr::Stderr </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>No redirection. </p>
+
+<p class="definition">Definition at line <a class="el" href="process__io_8cpp_source.html#l00021">21</a> of file <a class="el" href="process__io_8cpp_source.html">process_io.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a9906ac147b47c7e7b8a299e942cb77c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9906ac147b47c7e7b8a299e942cb77c5">&#9670;&nbsp;</a></span>Stderr() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::process::Stderr::Stderr </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>file</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">explicit</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Redirect child process's stderr to a file. </p>
+
+<p class="definition">Definition at line <a class="el" href="process__io_8cpp_source.html#l00031">31</a> of file <a class="el" href="process__io_8cpp_source.html">process_io.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a1daa6ec6ad6b30d9958b2ee76f086230"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1daa6ec6ad6b30d9958b2ee76f086230">&#9670;&nbsp;</a></span>Stderr() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::process::Stderr::Stderr </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a> &amp;&#160;</td>
+ <td class="paramname"><em>file</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">explicit</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+<p class="definition">Definition at line <a class="el" href="process__io_8cpp_source.html#l00033">33</a> of file <a class="el" href="process__io_8cpp_source.html">process_io.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a0fca971e15b205e971a18c206d1c8003"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0fca971e15b205e971a18c206d1c8003">&#9670;&nbsp;</a></span>Stderr() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::process::Stderr::Stderr </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classwinapi_1_1Pipe.html">Pipe</a> &amp;&#160;</td>
+ <td class="paramname"><em>pipe</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">explicit</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Redirect child process's stderr to a pipe. </p>
+
+<p class="definition">Definition at line <a class="el" href="process__io_8cpp_source.html#l00043">43</a> of file <a class="el" href="process__io_8cpp_source.html">process_io.cpp</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following files:<ul>
+<li>include/winapi/<a class="el" href="process__io_8hpp_source.html">process_io.hpp</a></li>
+<li>src/<a class="el" href="process__io_8cpp_source.html">process_io.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1process_1_1Stderr.png b/structwinapi_1_1process_1_1Stderr.png
new file mode 100644
index 0000000..4afe733
--- /dev/null
+++ b/structwinapi_1_1process_1_1Stderr.png
Binary files differ
diff --git a/structwinapi_1_1process_1_1Stdin-members.html b/structwinapi_1_1process_1_1Stdin-members.html
new file mode 100644
index 0000000..d697d2c
--- /dev/null
+++ b/structwinapi_1_1process_1_1Stdin-members.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><b>process</b></li><li class="navelem"><a class="el" href="structwinapi_1_1process_1_1Stdin.html">Stdin</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::process::Stdin Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structwinapi_1_1process_1_1Stdin.html">winapi::process::Stdin</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>handle</b> (defined in <a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stdin.html#ab551f076d049c58b5391847ec0fe8999">Stdin</a>()</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stdin.html">winapi::process::Stdin</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stdin.html#a68803e010fad2a3634c031bc14a0d857">Stdin</a>(const std::string &amp;file)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stdin.html">winapi::process::Stdin</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stdin.html#a77e20c39f33a6b8e8ffffa8972c924a7">Stdin</a>(const CanonicalPath &amp;file)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stdin.html">winapi::process::Stdin</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stdin.html#afc350d91445057721b1d87a4e759da4e">Stdin</a>(Pipe &amp;)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stdin.html">winapi::process::Stdin</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Stream</b>(Handle &amp;&amp;handle) (defined in <a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1process_1_1Stdin.html b/structwinapi_1_1process_1_1Stdin.html
new file mode 100644
index 0000000..449e0f2
--- /dev/null
+++ b/structwinapi_1_1process_1_1Stdin.html
@@ -0,0 +1,232 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::process::Stdin Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><b>process</b></li><li class="navelem"><a class="el" href="structwinapi_1_1process_1_1Stdin.html">Stdin</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="structwinapi_1_1process_1_1Stdin-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::process::Stdin Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Redirect child process's stdin.
+ <a href="structwinapi_1_1process_1_1Stdin.html#details">More...</a></p>
+<div class="dynheader">
+Inheritance diagram for winapi::process::Stdin:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="structwinapi_1_1process_1_1Stdin.png" usemap="#winapi::process::Stdin_map" alt=""/>
+ <map id="winapi::process::Stdin_map" name="winapi::process::Stdin_map">
+<area href="structwinapi_1_1process_1_1Stream.html" alt="winapi::process::Stream" shape="rect" coords="0,0,144,24"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ab551f076d049c58b5391847ec0fe8999"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structwinapi_1_1process_1_1Stdin.html#ab551f076d049c58b5391847ec0fe8999">Stdin</a> ()</td></tr>
+<tr class="separator:ab551f076d049c58b5391847ec0fe8999"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a68803e010fad2a3634c031bc14a0d857"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structwinapi_1_1process_1_1Stdin.html#a68803e010fad2a3634c031bc14a0d857">Stdin</a> (const std::string &amp;file)</td></tr>
+<tr class="separator:a68803e010fad2a3634c031bc14a0d857"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a77e20c39f33a6b8e8ffffa8972c924a7"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structwinapi_1_1process_1_1Stdin.html#a77e20c39f33a6b8e8ffffa8972c924a7">Stdin</a> (const <a class="el" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a> &amp;file)</td></tr>
+<tr class="separator:a77e20c39f33a6b8e8ffffa8972c924a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc350d91445057721b1d87a4e759da4e"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structwinapi_1_1process_1_1Stdin.html#afc350d91445057721b1d87a4e759da4e">Stdin</a> (<a class="el" href="classwinapi_1_1Pipe.html">Pipe</a> &amp;)</td></tr>
+<tr class="separator:afc350d91445057721b1d87a4e759da4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_structwinapi_1_1process_1_1Stream"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_structwinapi_1_1process_1_1Stream')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a></td></tr>
+<tr class="memitem:a1b8a77ad3b50e85a4594e2e5bebf1c58 inherit pub_methods_structwinapi_1_1process_1_1Stream"><td class="memItemLeft" align="right" valign="top"><a id="a1b8a77ad3b50e85a4594e2e5bebf1c58"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Stream</b> (<a class="el" href="classwinapi_1_1Handle.html">Handle</a> &amp;&amp;handle)</td></tr>
+<tr class="separator:a1b8a77ad3b50e85a4594e2e5bebf1c58 inherit pub_methods_structwinapi_1_1process_1_1Stream"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_attribs_structwinapi_1_1process_1_1Stream"><td colspan="2" onclick="javascript:toggleInherit('pub_attribs_structwinapi_1_1process_1_1Stream')"><img src="closed.png" alt="-"/>&#160;Public Attributes inherited from <a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a></td></tr>
+<tr class="memitem:a0c88866185c1fe4639311053855a5498 inherit pub_attribs_structwinapi_1_1process_1_1Stream"><td class="memItemLeft" align="right" valign="top"><a id="a0c88866185c1fe4639311053855a5498"></a>
+<a class="el" href="classwinapi_1_1Handle.html">Handle</a>&#160;</td><td class="memItemRight" valign="bottom"><b>handle</b></td></tr>
+<tr class="separator:a0c88866185c1fe4639311053855a5498 inherit pub_attribs_structwinapi_1_1process_1_1Stream"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Redirect child process's stdin. </p>
+
+<p class="definition">Definition at line <a class="el" href="process__io_8hpp_source.html#l00025">25</a> of file <a class="el" href="process__io_8hpp_source.html">process_io.hpp</a>.</p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="ab551f076d049c58b5391847ec0fe8999"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab551f076d049c58b5391847ec0fe8999">&#9670;&nbsp;</a></span>Stdin() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::process::Stdin::Stdin </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>No redirection. </p>
+
+<p class="definition">Definition at line <a class="el" href="process__io_8cpp_source.html#l00017">17</a> of file <a class="el" href="process__io_8cpp_source.html">process_io.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a68803e010fad2a3634c031bc14a0d857"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a68803e010fad2a3634c031bc14a0d857">&#9670;&nbsp;</a></span>Stdin() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::process::Stdin::Stdin </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>file</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">explicit</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Make child process read form a file. </p>
+
+<p class="definition">Definition at line <a class="el" href="process__io_8cpp_source.html#l00023">23</a> of file <a class="el" href="process__io_8cpp_source.html">process_io.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a77e20c39f33a6b8e8ffffa8972c924a7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a77e20c39f33a6b8e8ffffa8972c924a7">&#9670;&nbsp;</a></span>Stdin() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::process::Stdin::Stdin </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a> &amp;&#160;</td>
+ <td class="paramname"><em>file</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">explicit</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+<p class="definition">Definition at line <a class="el" href="process__io_8cpp_source.html#l00025">25</a> of file <a class="el" href="process__io_8cpp_source.html">process_io.cpp</a>.</p>
+
+</div>
+</div>
+<a id="afc350d91445057721b1d87a4e759da4e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afc350d91445057721b1d87a4e759da4e">&#9670;&nbsp;</a></span>Stdin() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::process::Stdin::Stdin </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classwinapi_1_1Pipe.html">Pipe</a> &amp;&#160;</td>
+ <td class="paramname"><em>pipe</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">explicit</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Make child process read form a pipe. </p>
+
+<p class="definition">Definition at line <a class="el" href="process__io_8cpp_source.html#l00035">35</a> of file <a class="el" href="process__io_8cpp_source.html">process_io.cpp</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following files:<ul>
+<li>include/winapi/<a class="el" href="process__io_8hpp_source.html">process_io.hpp</a></li>
+<li>src/<a class="el" href="process__io_8cpp_source.html">process_io.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1process_1_1Stdin.png b/structwinapi_1_1process_1_1Stdin.png
new file mode 100644
index 0000000..a3a7565
--- /dev/null
+++ b/structwinapi_1_1process_1_1Stdin.png
Binary files differ
diff --git a/structwinapi_1_1process_1_1Stdout-members.html b/structwinapi_1_1process_1_1Stdout-members.html
new file mode 100644
index 0000000..3bd29ef
--- /dev/null
+++ b/structwinapi_1_1process_1_1Stdout-members.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><b>process</b></li><li class="navelem"><a class="el" href="structwinapi_1_1process_1_1Stdout.html">Stdout</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::process::Stdout Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structwinapi_1_1process_1_1Stdout.html">winapi::process::Stdout</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>handle</b> (defined in <a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a></td><td class="entry"></td></tr>
+ <tr><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stdout.html#a1afc245b79c17e05bee9931f347a34e5">Stdout</a>()</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stdout.html">winapi::process::Stdout</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stdout.html#a7319a44d66f5c109bea89a04ca4c4ba2">Stdout</a>(const std::string &amp;file)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stdout.html">winapi::process::Stdout</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stdout.html#ab70d4bff6f55c51fec06efdaa4fcdb81">Stdout</a>(const CanonicalPath &amp;file)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stdout.html">winapi::process::Stdout</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stdout.html#afa84e724674b234d395c766b3d04582d">Stdout</a>(Pipe &amp;)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stdout.html">winapi::process::Stdout</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Stream</b>(Handle &amp;&amp;handle) (defined in <a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1process_1_1Stdout.html b/structwinapi_1_1process_1_1Stdout.html
new file mode 100644
index 0000000..54f8f1d
--- /dev/null
+++ b/structwinapi_1_1process_1_1Stdout.html
@@ -0,0 +1,232 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::process::Stdout Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><b>process</b></li><li class="navelem"><a class="el" href="structwinapi_1_1process_1_1Stdout.html">Stdout</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="structwinapi_1_1process_1_1Stdout-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::process::Stdout Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Redirect child process's stdout.
+ <a href="structwinapi_1_1process_1_1Stdout.html#details">More...</a></p>
+<div class="dynheader">
+Inheritance diagram for winapi::process::Stdout:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="structwinapi_1_1process_1_1Stdout.png" usemap="#winapi::process::Stdout_map" alt=""/>
+ <map id="winapi::process::Stdout_map" name="winapi::process::Stdout_map">
+<area href="structwinapi_1_1process_1_1Stream.html" alt="winapi::process::Stream" shape="rect" coords="0,0,144,24"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a1afc245b79c17e05bee9931f347a34e5"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structwinapi_1_1process_1_1Stdout.html#a1afc245b79c17e05bee9931f347a34e5">Stdout</a> ()</td></tr>
+<tr class="separator:a1afc245b79c17e05bee9931f347a34e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7319a44d66f5c109bea89a04ca4c4ba2"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structwinapi_1_1process_1_1Stdout.html#a7319a44d66f5c109bea89a04ca4c4ba2">Stdout</a> (const std::string &amp;file)</td></tr>
+<tr class="separator:a7319a44d66f5c109bea89a04ca4c4ba2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab70d4bff6f55c51fec06efdaa4fcdb81"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structwinapi_1_1process_1_1Stdout.html#ab70d4bff6f55c51fec06efdaa4fcdb81">Stdout</a> (const <a class="el" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a> &amp;file)</td></tr>
+<tr class="separator:ab70d4bff6f55c51fec06efdaa4fcdb81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afa84e724674b234d395c766b3d04582d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structwinapi_1_1process_1_1Stdout.html#afa84e724674b234d395c766b3d04582d">Stdout</a> (<a class="el" href="classwinapi_1_1Pipe.html">Pipe</a> &amp;)</td></tr>
+<tr class="separator:afa84e724674b234d395c766b3d04582d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_structwinapi_1_1process_1_1Stream"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_structwinapi_1_1process_1_1Stream')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a></td></tr>
+<tr class="memitem:a1b8a77ad3b50e85a4594e2e5bebf1c58 inherit pub_methods_structwinapi_1_1process_1_1Stream"><td class="memItemLeft" align="right" valign="top"><a id="a1b8a77ad3b50e85a4594e2e5bebf1c58"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Stream</b> (<a class="el" href="classwinapi_1_1Handle.html">Handle</a> &amp;&amp;handle)</td></tr>
+<tr class="separator:a1b8a77ad3b50e85a4594e2e5bebf1c58 inherit pub_methods_structwinapi_1_1process_1_1Stream"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_attribs_structwinapi_1_1process_1_1Stream"><td colspan="2" onclick="javascript:toggleInherit('pub_attribs_structwinapi_1_1process_1_1Stream')"><img src="closed.png" alt="-"/>&#160;Public Attributes inherited from <a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a></td></tr>
+<tr class="memitem:a0c88866185c1fe4639311053855a5498 inherit pub_attribs_structwinapi_1_1process_1_1Stream"><td class="memItemLeft" align="right" valign="top"><a id="a0c88866185c1fe4639311053855a5498"></a>
+<a class="el" href="classwinapi_1_1Handle.html">Handle</a>&#160;</td><td class="memItemRight" valign="bottom"><b>handle</b></td></tr>
+<tr class="separator:a0c88866185c1fe4639311053855a5498 inherit pub_attribs_structwinapi_1_1process_1_1Stream"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Redirect child process's stdout. </p>
+
+<p class="definition">Definition at line <a class="el" href="process__io_8hpp_source.html#l00037">37</a> of file <a class="el" href="process__io_8hpp_source.html">process_io.hpp</a>.</p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a1afc245b79c17e05bee9931f347a34e5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1afc245b79c17e05bee9931f347a34e5">&#9670;&nbsp;</a></span>Stdout() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::process::Stdout::Stdout </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>No redirection. </p>
+
+<p class="definition">Definition at line <a class="el" href="process__io_8cpp_source.html#l00019">19</a> of file <a class="el" href="process__io_8cpp_source.html">process_io.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a7319a44d66f5c109bea89a04ca4c4ba2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7319a44d66f5c109bea89a04ca4c4ba2">&#9670;&nbsp;</a></span>Stdout() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::process::Stdout::Stdout </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>file</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">explicit</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Redirect child process's stdout to a file. </p>
+
+<p class="definition">Definition at line <a class="el" href="process__io_8cpp_source.html#l00027">27</a> of file <a class="el" href="process__io_8cpp_source.html">process_io.cpp</a>.</p>
+
+</div>
+</div>
+<a id="ab70d4bff6f55c51fec06efdaa4fcdb81"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab70d4bff6f55c51fec06efdaa4fcdb81">&#9670;&nbsp;</a></span>Stdout() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::process::Stdout::Stdout </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classwinapi_1_1CanonicalPath.html">CanonicalPath</a> &amp;&#160;</td>
+ <td class="paramname"><em>file</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">explicit</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
+
+<p class="definition">Definition at line <a class="el" href="process__io_8cpp_source.html#l00029">29</a> of file <a class="el" href="process__io_8cpp_source.html">process_io.cpp</a>.</p>
+
+</div>
+</div>
+<a id="afa84e724674b234d395c766b3d04582d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afa84e724674b234d395c766b3d04582d">&#9670;&nbsp;</a></span>Stdout() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">winapi::process::Stdout::Stdout </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classwinapi_1_1Pipe.html">Pipe</a> &amp;&#160;</td>
+ <td class="paramname"><em>pipe</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">explicit</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p>Redirect child process's stdout to a pipe. </p>
+
+<p class="definition">Definition at line <a class="el" href="process__io_8cpp_source.html#l00039">39</a> of file <a class="el" href="process__io_8cpp_source.html">process_io.cpp</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following files:<ul>
+<li>include/winapi/<a class="el" href="process__io_8hpp_source.html">process_io.hpp</a></li>
+<li>src/<a class="el" href="process__io_8cpp_source.html">process_io.cpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1process_1_1Stdout.png b/structwinapi_1_1process_1_1Stdout.png
new file mode 100644
index 0000000..f750620
--- /dev/null
+++ b/structwinapi_1_1process_1_1Stdout.png
Binary files differ
diff --git a/structwinapi_1_1process_1_1Stream-members.html b/structwinapi_1_1process_1_1Stream-members.html
new file mode 100644
index 0000000..5688eb0
--- /dev/null
+++ b/structwinapi_1_1process_1_1Stream-members.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><b>process</b></li><li class="navelem"><a class="el" href="structwinapi_1_1process_1_1Stream.html">Stream</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">winapi::process::Stream Member List</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>handle</b> (defined in <a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0"><td class="entry"><b>Stream</b>(Handle &amp;&amp;handle) (defined in <a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a>)</td><td class="entry"><a class="el" href="structwinapi_1_1process_1_1Stream.html">winapi::process::Stream</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1process_1_1Stream.html b/structwinapi_1_1process_1_1Stream.html
new file mode 100644
index 0000000..d24cacd
--- /dev/null
+++ b/structwinapi_1_1process_1_1Stream.html
@@ -0,0 +1,112 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: winapi::process::Stream Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><b>winapi</b></li><li class="navelem"><b>process</b></li><li class="navelem"><a class="el" href="structwinapi_1_1process_1_1Stream.html">Stream</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-attribs">Public Attributes</a> &#124;
+<a href="structwinapi_1_1process_1_1Stream-members.html">List of all members</a> </div>
+ <div class="headertitle">
+<div class="title">winapi::process::Stream Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="dynheader">
+Inheritance diagram for winapi::process::Stream:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="structwinapi_1_1process_1_1Stream.png" usemap="#winapi::process::Stream_map" alt=""/>
+ <map id="winapi::process::Stream_map" name="winapi::process::Stream_map">
+<area href="structwinapi_1_1process_1_1Stderr.html" title="Redirect child process&#39;s stderr." alt="winapi::process::Stderr" shape="rect" coords="0,56,144,80"/>
+<area href="structwinapi_1_1process_1_1Stdin.html" title="Redirect child process&#39;s stdin." alt="winapi::process::Stdin" shape="rect" coords="154,56,298,80"/>
+<area href="structwinapi_1_1process_1_1Stdout.html" title="Redirect child process&#39;s stdout." alt="winapi::process::Stdout" shape="rect" coords="308,56,452,80"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a1b8a77ad3b50e85a4594e2e5bebf1c58"><td class="memItemLeft" align="right" valign="top"><a id="a1b8a77ad3b50e85a4594e2e5bebf1c58"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Stream</b> (<a class="el" href="classwinapi_1_1Handle.html">Handle</a> &amp;&amp;handle)</td></tr>
+<tr class="separator:a1b8a77ad3b50e85a4594e2e5bebf1c58"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:a0c88866185c1fe4639311053855a5498"><td class="memItemLeft" align="right" valign="top"><a id="a0c88866185c1fe4639311053855a5498"></a>
+<a class="el" href="classwinapi_1_1Handle.html">Handle</a>&#160;</td><td class="memItemRight" valign="bottom"><b>handle</b></td></tr>
+<tr class="separator:a0c88866185c1fe4639311053855a5498"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p class="definition">Definition at line <a class="el" href="process__io_8hpp_source.html#l00018">18</a> of file <a class="el" href="process__io_8hpp_source.html">process_io.hpp</a>.</p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>include/winapi/<a class="el" href="process__io_8hpp_source.html">process_io.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/structwinapi_1_1process_1_1Stream.png b/structwinapi_1_1process_1_1Stream.png
new file mode 100644
index 0000000..6c245e9
--- /dev/null
+++ b/structwinapi_1_1process_1_1Stream.png
Binary files differ
diff --git a/sync_off.png b/sync_off.png
new file mode 100644
index 0000000..3b443fc
--- /dev/null
+++ b/sync_off.png
Binary files differ
diff --git a/sync_on.png b/sync_on.png
new file mode 100644
index 0000000..e08320f
--- /dev/null
+++ b/sync_on.png
Binary files differ
diff --git a/tab_a.png b/tab_a.png
new file mode 100644
index 0000000..3b725c4
--- /dev/null
+++ b/tab_a.png
Binary files differ
diff --git a/tab_b.png b/tab_b.png
new file mode 100644
index 0000000..e2b4a86
--- /dev/null
+++ b/tab_b.png
Binary files differ
diff --git a/tab_h.png b/tab_h.png
new file mode 100644
index 0000000..fd5cb70
--- /dev/null
+++ b/tab_h.png
Binary files differ
diff --git a/tab_s.png b/tab_s.png
new file mode 100644
index 0000000..ab478c9
--- /dev/null
+++ b/tab_s.png
Binary files differ
diff --git a/tabs.css b/tabs.css
new file mode 100644
index 0000000..7d45d36
--- /dev/null
+++ b/tabs.css
@@ -0,0 +1 @@
+.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}}
diff --git a/utils_8hpp_source.html b/utils_8hpp_source.html
new file mode 100644
index 0000000..f969662
--- /dev/null
+++ b/utils_8hpp_source.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: include/winapi/utils.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1714771db42b7b5a0cd2ebe6e9736ed.html">winapi</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">utils.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;windows.h&gt;</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; </div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;cassert&gt;</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#define WINAPI_UNUSED_PARAMETER(...) (void)(__VA_ARGS__)</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
+<div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="structwinapi_1_1LocalDelete.html"> 16</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structwinapi_1_1LocalDelete.html">LocalDelete</a> {</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keywordtype">void</span> operator()(<span class="keywordtype">void</span>* ptr)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> ret = ::LocalFree(ptr);</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; assert(ret == NULL);</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; WINAPI_UNUSED_PARAMETER(ret);</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; }</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;};</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;} <span class="comment">// namespace winapi</span></div>
+<div class="ttc" id="astructwinapi_1_1LocalDelete_html"><div class="ttname"><a href="structwinapi_1_1LocalDelete.html">winapi::LocalDelete</a></div><div class="ttdef"><b>Definition:</b> <a href="utils_8hpp_source.html#l00016">utils.hpp:16</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/window__style_8hpp_source.html b/window__style_8hpp_source.html
new file mode 100644
index 0000000..348ef88
--- /dev/null
+++ b/window__style_8hpp_source.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>winapi_common: include/winapi/window_style.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">winapi_common
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1714771db42b7b5a0cd2ebe6e9736ed.html">winapi</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle">
+<div class="title">window_style.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// Copyright (c) 2020 Egor Tensin &lt;Egor.Tensin@gmail.com&gt;</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// This file is part of the &quot;winapi-common&quot; project.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// For details, see https://github.com/egor-tensin/winapi-common.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// Distributed under the MIT License.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
+<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#pragma once</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
+<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="keyword">namespace </span>winapi {</div>
+<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; </div>
+<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="keyword">enum class</span> WindowStyle {</div>
+<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; <span class="comment">// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; ForceMinimize = 11,</div>
+<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; Hide = 0,</div>
+<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; Maximize = 3,</div>
+<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; Minimize = 6,</div>
+<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; Restore = 9,</div>
+<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; Show = 5,</div>
+<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; ShowDefault = 10,</div>
+<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; ShowMaximized = 3,</div>
+<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; ShowMinimized = 2,</div>
+<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; ShowMinNoActive = 7,</div>
+<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; ShowNA = 8,</div>
+<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; ShowNoActivate = 4,</div>
+<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; ShowNormal = 1,</div>
+<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;};</div>
+<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;} <span class="comment">// namespace winapi</span></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>