@shitiandmw/node-pty 1.1.0-agent.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/LICENSE +69 -0
  2. package/README.md +170 -0
  3. package/binding.gyp +111 -0
  4. package/deps/.editorconfig +2 -0
  5. package/deps/winpty/.drone.yml +17 -0
  6. package/deps/winpty/.gitattributes +19 -0
  7. package/deps/winpty/LICENSE +21 -0
  8. package/deps/winpty/Makefile +166 -0
  9. package/deps/winpty/README.md +151 -0
  10. package/deps/winpty/RELEASES.md +280 -0
  11. package/deps/winpty/VERSION.txt +1 -0
  12. package/deps/winpty/configure +167 -0
  13. package/deps/winpty/misc/BufferResizeTests.cc +90 -0
  14. package/deps/winpty/misc/ChangeScreenBuffer.cc +53 -0
  15. package/deps/winpty/misc/ClearConsole.cc +72 -0
  16. package/deps/winpty/misc/ConinMode.cc +117 -0
  17. package/deps/winpty/misc/ConinMode.ps1 +116 -0
  18. package/deps/winpty/misc/ConoutMode.cc +113 -0
  19. package/deps/winpty/misc/DebugClient.py +42 -0
  20. package/deps/winpty/misc/DebugServer.py +63 -0
  21. package/deps/winpty/misc/DumpLines.py +5 -0
  22. package/deps/winpty/misc/EnableExtendedFlags.txt +46 -0
  23. package/deps/winpty/misc/Font-Report-June2016/CP437-Consolas.txt +528 -0
  24. package/deps/winpty/misc/Font-Report-June2016/CP437-Lucida.txt +633 -0
  25. package/deps/winpty/misc/Font-Report-June2016/CP932.txt +630 -0
  26. package/deps/winpty/misc/Font-Report-June2016/CP936.txt +630 -0
  27. package/deps/winpty/misc/Font-Report-June2016/CP949.txt +630 -0
  28. package/deps/winpty/misc/Font-Report-June2016/CP950.txt +630 -0
  29. package/deps/winpty/misc/Font-Report-June2016/MinimumWindowWidths.txt +16 -0
  30. package/deps/winpty/misc/Font-Report-June2016/Results.txt +4 -0
  31. package/deps/winpty/misc/Font-Report-June2016/Windows10SetFontBugginess.txt +144 -0
  32. package/deps/winpty/misc/FontSurvey.cc +100 -0
  33. package/deps/winpty/misc/FormatChar.h +21 -0
  34. package/deps/winpty/misc/FreezePerfTest.cc +62 -0
  35. package/deps/winpty/misc/GetCh.cc +20 -0
  36. package/deps/winpty/misc/GetConsolePos.cc +41 -0
  37. package/deps/winpty/misc/GetFont.cc +261 -0
  38. package/deps/winpty/misc/IdentifyConsoleWindow.ps1 +51 -0
  39. package/deps/winpty/misc/IsNewConsole.cc +87 -0
  40. package/deps/winpty/misc/MouseInputNotes.txt +90 -0
  41. package/deps/winpty/misc/MoveConsoleWindow.cc +34 -0
  42. package/deps/winpty/misc/Notes.txt +219 -0
  43. package/deps/winpty/misc/OSVersion.cc +27 -0
  44. package/deps/winpty/misc/ScreenBufferFreezeInactive.cc +101 -0
  45. package/deps/winpty/misc/ScreenBufferTest.cc +671 -0
  46. package/deps/winpty/misc/ScreenBufferTest2.cc +151 -0
  47. package/deps/winpty/misc/SelectAllTest.cc +45 -0
  48. package/deps/winpty/misc/SetBufferSize.cc +32 -0
  49. package/deps/winpty/misc/SetCursorPos.cc +10 -0
  50. package/deps/winpty/misc/SetFont.cc +145 -0
  51. package/deps/winpty/misc/SetWindowRect.cc +36 -0
  52. package/deps/winpty/misc/ShowArgv.cc +12 -0
  53. package/deps/winpty/misc/ShowConsoleInput.cc +40 -0
  54. package/deps/winpty/misc/Spew.py +5 -0
  55. package/deps/winpty/misc/TestUtil.cc +172 -0
  56. package/deps/winpty/misc/UnicodeDoubleWidthTest.cc +102 -0
  57. package/deps/winpty/misc/UnicodeWideTest1.cc +246 -0
  58. package/deps/winpty/misc/UnicodeWideTest2.cc +130 -0
  59. package/deps/winpty/misc/UnixEcho.cc +89 -0
  60. package/deps/winpty/misc/Utf16Echo.cc +46 -0
  61. package/deps/winpty/misc/VeryLargeRead.cc +122 -0
  62. package/deps/winpty/misc/VkEscapeTest.cc +56 -0
  63. package/deps/winpty/misc/Win10ResizeWhileFrozen.cc +52 -0
  64. package/deps/winpty/misc/Win10WrapTest1.cc +57 -0
  65. package/deps/winpty/misc/Win10WrapTest2.cc +30 -0
  66. package/deps/winpty/misc/Win32Echo1.cc +26 -0
  67. package/deps/winpty/misc/Win32Echo2.cc +19 -0
  68. package/deps/winpty/misc/Win32Test1.cc +46 -0
  69. package/deps/winpty/misc/Win32Test2.cc +70 -0
  70. package/deps/winpty/misc/Win32Test3.cc +78 -0
  71. package/deps/winpty/misc/Win32Write1.cc +44 -0
  72. package/deps/winpty/misc/WindowsBugCrashReader.cc +27 -0
  73. package/deps/winpty/misc/WriteConsole.cc +106 -0
  74. package/deps/winpty/misc/build32.sh +9 -0
  75. package/deps/winpty/misc/build64.sh +9 -0
  76. package/deps/winpty/misc/color-test.sh +212 -0
  77. package/deps/winpty/misc/font-notes.txt +300 -0
  78. package/deps/winpty/misc/winbug-15048.cc +201 -0
  79. package/deps/winpty/ship/build-pty4j-libpty.bat +36 -0
  80. package/deps/winpty/ship/common_ship.py +53 -0
  81. package/deps/winpty/ship/make_msvc_package.py +165 -0
  82. package/deps/winpty/ship/ship.py +108 -0
  83. package/deps/winpty/src/agent/Agent.cc +613 -0
  84. package/deps/winpty/src/agent/Agent.h +103 -0
  85. package/deps/winpty/src/agent/AgentCreateDesktop.cc +84 -0
  86. package/deps/winpty/src/agent/AgentCreateDesktop.h +28 -0
  87. package/deps/winpty/src/agent/ConsoleFont.cc +632 -0
  88. package/deps/winpty/src/agent/ConsoleFont.h +28 -0
  89. package/deps/winpty/src/agent/ConsoleInput.cc +852 -0
  90. package/deps/winpty/src/agent/ConsoleInput.h +109 -0
  91. package/deps/winpty/src/agent/ConsoleInputReencoding.cc +121 -0
  92. package/deps/winpty/src/agent/ConsoleInputReencoding.h +36 -0
  93. package/deps/winpty/src/agent/ConsoleLine.cc +152 -0
  94. package/deps/winpty/src/agent/ConsoleLine.h +41 -0
  95. package/deps/winpty/src/agent/Coord.h +87 -0
  96. package/deps/winpty/src/agent/DebugShowInput.cc +239 -0
  97. package/deps/winpty/src/agent/DebugShowInput.h +32 -0
  98. package/deps/winpty/src/agent/DefaultInputMap.cc +422 -0
  99. package/deps/winpty/src/agent/DefaultInputMap.h +28 -0
  100. package/deps/winpty/src/agent/DsrSender.h +30 -0
  101. package/deps/winpty/src/agent/EventLoop.cc +99 -0
  102. package/deps/winpty/src/agent/EventLoop.h +47 -0
  103. package/deps/winpty/src/agent/InputMap.cc +246 -0
  104. package/deps/winpty/src/agent/InputMap.h +114 -0
  105. package/deps/winpty/src/agent/LargeConsoleRead.cc +71 -0
  106. package/deps/winpty/src/agent/LargeConsoleRead.h +68 -0
  107. package/deps/winpty/src/agent/NamedPipe.cc +378 -0
  108. package/deps/winpty/src/agent/NamedPipe.h +125 -0
  109. package/deps/winpty/src/agent/Scraper.cc +699 -0
  110. package/deps/winpty/src/agent/Scraper.h +103 -0
  111. package/deps/winpty/src/agent/SimplePool.h +75 -0
  112. package/deps/winpty/src/agent/SmallRect.h +143 -0
  113. package/deps/winpty/src/agent/Terminal.cc +535 -0
  114. package/deps/winpty/src/agent/Terminal.h +69 -0
  115. package/deps/winpty/src/agent/UnicodeEncoding.h +157 -0
  116. package/deps/winpty/src/agent/UnicodeEncodingTest.cc +189 -0
  117. package/deps/winpty/src/agent/Win32Console.cc +107 -0
  118. package/deps/winpty/src/agent/Win32Console.h +67 -0
  119. package/deps/winpty/src/agent/Win32ConsoleBuffer.cc +193 -0
  120. package/deps/winpty/src/agent/Win32ConsoleBuffer.h +99 -0
  121. package/deps/winpty/src/agent/main.cc +114 -0
  122. package/deps/winpty/src/agent/subdir.mk +61 -0
  123. package/deps/winpty/src/configurations.gypi +60 -0
  124. package/deps/winpty/src/debugserver/DebugServer.cc +117 -0
  125. package/deps/winpty/src/debugserver/subdir.mk +41 -0
  126. package/deps/winpty/src/include/winpty.h +242 -0
  127. package/deps/winpty/src/include/winpty_constants.h +131 -0
  128. package/deps/winpty/src/libwinpty/AgentLocation.cc +75 -0
  129. package/deps/winpty/src/libwinpty/AgentLocation.h +28 -0
  130. package/deps/winpty/src/libwinpty/LibWinptyException.h +54 -0
  131. package/deps/winpty/src/libwinpty/WinptyInternal.h +72 -0
  132. package/deps/winpty/src/libwinpty/subdir.mk +46 -0
  133. package/deps/winpty/src/libwinpty/winpty.cc +970 -0
  134. package/deps/winpty/src/shared/AgentMsg.h +38 -0
  135. package/deps/winpty/src/shared/BackgroundDesktop.cc +122 -0
  136. package/deps/winpty/src/shared/BackgroundDesktop.h +73 -0
  137. package/deps/winpty/src/shared/Buffer.cc +103 -0
  138. package/deps/winpty/src/shared/Buffer.h +102 -0
  139. package/deps/winpty/src/shared/DebugClient.cc +187 -0
  140. package/deps/winpty/src/shared/DebugClient.h +38 -0
  141. package/deps/winpty/src/shared/GenRandom.cc +138 -0
  142. package/deps/winpty/src/shared/GenRandom.h +55 -0
  143. package/deps/winpty/src/shared/GetCommitHash.bat +13 -0
  144. package/deps/winpty/src/shared/Mutex.h +54 -0
  145. package/deps/winpty/src/shared/OsModule.h +63 -0
  146. package/deps/winpty/src/shared/OwnedHandle.cc +36 -0
  147. package/deps/winpty/src/shared/OwnedHandle.h +45 -0
  148. package/deps/winpty/src/shared/PrecompiledHeader.h +43 -0
  149. package/deps/winpty/src/shared/StringBuilder.h +227 -0
  150. package/deps/winpty/src/shared/StringBuilderTest.cc +114 -0
  151. package/deps/winpty/src/shared/StringUtil.cc +55 -0
  152. package/deps/winpty/src/shared/StringUtil.h +80 -0
  153. package/deps/winpty/src/shared/TimeMeasurement.h +63 -0
  154. package/deps/winpty/src/shared/UnixCtrlChars.h +45 -0
  155. package/deps/winpty/src/shared/UpdateGenVersion.bat +20 -0
  156. package/deps/winpty/src/shared/WindowsSecurity.cc +460 -0
  157. package/deps/winpty/src/shared/WindowsSecurity.h +104 -0
  158. package/deps/winpty/src/shared/WindowsVersion.cc +252 -0
  159. package/deps/winpty/src/shared/WindowsVersion.h +29 -0
  160. package/deps/winpty/src/shared/WinptyAssert.cc +55 -0
  161. package/deps/winpty/src/shared/WinptyAssert.h +64 -0
  162. package/deps/winpty/src/shared/WinptyException.cc +57 -0
  163. package/deps/winpty/src/shared/WinptyException.h +43 -0
  164. package/deps/winpty/src/shared/WinptyVersion.cc +42 -0
  165. package/deps/winpty/src/shared/WinptyVersion.h +27 -0
  166. package/deps/winpty/src/shared/winpty_snprintf.h +99 -0
  167. package/deps/winpty/src/subdir.mk +5 -0
  168. package/deps/winpty/src/tests/subdir.mk +28 -0
  169. package/deps/winpty/src/tests/trivial_test.cc +158 -0
  170. package/deps/winpty/src/unix-adapter/InputHandler.cc +114 -0
  171. package/deps/winpty/src/unix-adapter/InputHandler.h +56 -0
  172. package/deps/winpty/src/unix-adapter/OutputHandler.cc +80 -0
  173. package/deps/winpty/src/unix-adapter/OutputHandler.h +53 -0
  174. package/deps/winpty/src/unix-adapter/Util.cc +86 -0
  175. package/deps/winpty/src/unix-adapter/Util.h +31 -0
  176. package/deps/winpty/src/unix-adapter/WakeupFd.cc +70 -0
  177. package/deps/winpty/src/unix-adapter/WakeupFd.h +42 -0
  178. package/deps/winpty/src/unix-adapter/main.cc +729 -0
  179. package/deps/winpty/src/unix-adapter/subdir.mk +41 -0
  180. package/deps/winpty/src/winpty.gyp +234 -0
  181. package/deps/winpty/vcbuild.bat +83 -0
  182. package/lib/conpty_console_list_agent.js +16 -0
  183. package/lib/conpty_console_list_agent.js.map +1 -0
  184. package/lib/eventEmitter2.js +47 -0
  185. package/lib/eventEmitter2.js.map +1 -0
  186. package/lib/eventEmitter2.test.js +30 -0
  187. package/lib/eventEmitter2.test.js.map +1 -0
  188. package/lib/index.js +52 -0
  189. package/lib/index.js.map +1 -0
  190. package/lib/interfaces.js +7 -0
  191. package/lib/interfaces.js.map +1 -0
  192. package/lib/shared/conout.js +11 -0
  193. package/lib/shared/conout.js.map +1 -0
  194. package/lib/terminal.js +190 -0
  195. package/lib/terminal.js.map +1 -0
  196. package/lib/terminal.test.js +139 -0
  197. package/lib/terminal.test.js.map +1 -0
  198. package/lib/testUtils.test.js +28 -0
  199. package/lib/testUtils.test.js.map +1 -0
  200. package/lib/types.js +7 -0
  201. package/lib/types.js.map +1 -0
  202. package/lib/unixTerminal.js +346 -0
  203. package/lib/unixTerminal.js.map +1 -0
  204. package/lib/unixTerminal.test.js +351 -0
  205. package/lib/unixTerminal.test.js.map +1 -0
  206. package/lib/utils.js +39 -0
  207. package/lib/utils.js.map +1 -0
  208. package/lib/windowsConoutConnection.js +125 -0
  209. package/lib/windowsConoutConnection.js.map +1 -0
  210. package/lib/windowsPtyAgent.js +320 -0
  211. package/lib/windowsPtyAgent.js.map +1 -0
  212. package/lib/windowsPtyAgent.test.js +90 -0
  213. package/lib/windowsPtyAgent.test.js.map +1 -0
  214. package/lib/windowsTerminal.js +199 -0
  215. package/lib/windowsTerminal.js.map +1 -0
  216. package/lib/windowsTerminal.test.js +219 -0
  217. package/lib/windowsTerminal.test.js.map +1 -0
  218. package/lib/worker/conoutSocketWorker.js +22 -0
  219. package/lib/worker/conoutSocketWorker.js.map +1 -0
  220. package/package.json +68 -0
  221. package/prebuilds/darwin-arm64/pty.node +0 -0
  222. package/prebuilds/darwin-arm64/spawn-helper +0 -0
  223. package/prebuilds/darwin-x64/pty.node +0 -0
  224. package/prebuilds/darwin-x64/spawn-helper +0 -0
  225. package/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  226. package/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  227. package/prebuilds/win32-arm64/conpty.node +0 -0
  228. package/prebuilds/win32-arm64/conpty.pdb +0 -0
  229. package/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  230. package/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  231. package/prebuilds/win32-arm64/pty.node +0 -0
  232. package/prebuilds/win32-arm64/pty.pdb +0 -0
  233. package/prebuilds/win32-arm64/winpty-agent.exe +0 -0
  234. package/prebuilds/win32-arm64/winpty-agent.pdb +0 -0
  235. package/prebuilds/win32-arm64/winpty.dll +0 -0
  236. package/prebuilds/win32-arm64/winpty.pdb +0 -0
  237. package/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  238. package/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  239. package/prebuilds/win32-x64/conpty.node +0 -0
  240. package/prebuilds/win32-x64/conpty.pdb +0 -0
  241. package/prebuilds/win32-x64/conpty_console_list.node +0 -0
  242. package/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  243. package/prebuilds/win32-x64/pty.node +0 -0
  244. package/prebuilds/win32-x64/pty.pdb +0 -0
  245. package/prebuilds/win32-x64/winpty-agent.exe +0 -0
  246. package/prebuilds/win32-x64/winpty-agent.pdb +0 -0
  247. package/prebuilds/win32-x64/winpty.dll +0 -0
  248. package/prebuilds/win32-x64/winpty.pdb +0 -0
  249. package/scripts/gen-compile-commands.js +8 -0
  250. package/scripts/increment-version.js +54 -0
  251. package/scripts/post-install.js +99 -0
  252. package/scripts/prebuild.js +39 -0
  253. package/scripts/sync-prebuild.js +31 -0
  254. package/scripts/verify-darwin-fd-leak.js +63 -0
  255. package/src/conpty_console_list_agent.ts +15 -0
  256. package/src/eventEmitter2.test.ts +30 -0
  257. package/src/eventEmitter2.ts +48 -0
  258. package/src/index.ts +52 -0
  259. package/src/interfaces.ts +130 -0
  260. package/src/native.d.ts +54 -0
  261. package/src/shared/conout.ts +15 -0
  262. package/src/terminal.test.ts +119 -0
  263. package/src/terminal.ts +211 -0
  264. package/src/testUtils.test.ts +23 -0
  265. package/src/tsconfig.json +22 -0
  266. package/src/types.ts +15 -0
  267. package/src/unix/pty.cc +808 -0
  268. package/src/unix/spawn-helper.cc +23 -0
  269. package/src/unixTerminal.test.ts +367 -0
  270. package/src/unixTerminal.ts +388 -0
  271. package/src/utils.ts +29 -0
  272. package/src/win/conpty.cc +583 -0
  273. package/src/win/conpty.h +41 -0
  274. package/src/win/conpty_console_list.cc +44 -0
  275. package/src/win/path_util.cc +95 -0
  276. package/src/win/path_util.h +26 -0
  277. package/src/win/winpty.cc +333 -0
  278. package/src/windowsConoutConnection.ts +82 -0
  279. package/src/windowsPtyAgent.test.ts +94 -0
  280. package/src/windowsPtyAgent.ts +321 -0
  281. package/src/windowsTerminal.test.ts +229 -0
  282. package/src/windowsTerminal.ts +203 -0
  283. package/src/worker/conoutSocketWorker.ts +22 -0
  284. package/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
  285. package/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
  286. package/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
  287. package/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
  288. package/typings/node-pty.d.ts +211 -0
@@ -0,0 +1,201 @@
1
+ /*
2
+
3
+ Test program demonstrating a problem in Windows 15048's ReadConsoleOutput API.
4
+
5
+ To compile:
6
+
7
+ cl /nologo /EHsc winbug-15048.cc shell32.lib
8
+
9
+ Example of regressed input:
10
+
11
+ Case 1:
12
+
13
+ > chcp 932
14
+ > winbug-15048 -face-gothic 3044
15
+
16
+ Correct output:
17
+
18
+ 1**34 (nb: U+3044 replaced with '**' to avoid MSVC encoding warning)
19
+ 5678
20
+
21
+ ReadConsoleOutputW (both rows, 3 cols)
22
+ row 0: U+0031(0007) U+3044(0107) U+3044(0207) U+0033(0007)
23
+ row 1: U+0035(0007) U+0036(0007) U+0037(0007) U+0038(0007)
24
+
25
+ ReadConsoleOutputW (both rows, 4 cols)
26
+ row 0: U+0031(0007) U+3044(0107) U+3044(0207) U+0033(0007) U+0034(0007)
27
+ row 1: U+0035(0007) U+0036(0007) U+0037(0007) U+0038(0007) U+0020(0007)
28
+
29
+ ReadConsoleOutputW (second row)
30
+ row 1: U+0035(0007) U+0036(0007) U+0037(0007) U+0038(0007) U+0020(0007)
31
+
32
+ ...
33
+
34
+ Win10 15048 bad output:
35
+
36
+ 1**34
37
+ 5678
38
+
39
+ ReadConsoleOutputW (both rows, 3 cols)
40
+ row 0: U+0031(0007) U+3044(0007) U+0033(0007) U+0035(0007)
41
+ row 1: U+0036(0007) U+0037(0007) U+0038(0007) U+0000(0000)
42
+
43
+ ReadConsoleOutputW (both rows, 4 cols)
44
+ row 0: U+0031(0007) U+3044(0007) U+0033(0007) U+0034(0007) U+0035(0007)
45
+ row 1: U+0036(0007) U+0037(0007) U+0038(0007) U+0020(0007) U+0000(0000)
46
+
47
+ ReadConsoleOutputW (second row)
48
+ row 1: U+0035(0007) U+0036(0007) U+0037(0007) U+0038(0007) U+0020(0007)
49
+
50
+ ...
51
+
52
+ The U+3044 character (HIRAGANA LETTER I) occupies two columns, but it only
53
+ fills one record in the ReadConsoleOutput output buffer, which has the
54
+ effect of shifting the first cell of the second row into the last cell of
55
+ the first row. Ordinarily, the first and second cells would also have the
56
+ COMMON_LVB_LEADING_BYTE and COMMON_LVB_TRAILING_BYTE attributes set, which
57
+ allows winpty to detect the double-column character.
58
+
59
+ Case 2:
60
+
61
+ > chcp 437
62
+ > winbug-15048 -face "Lucida Console" -h 4 221A
63
+
64
+ The same issue happens with U+221A (SQUARE ROOT), but only in certain
65
+ fonts. The console seems to think this character occupies two columns
66
+ if the font is sufficiently small. The Windows console properties dialog
67
+ doesn't allow fonts below 5 pt, but winpty tries to use 2pt and 4pt Lucida
68
+ Console to allow very large console windows.
69
+
70
+ Case 3:
71
+
72
+ > chcp 437
73
+ > winbug-15048 -face "Lucida Console" -h 12 FF12
74
+
75
+ The console selection system thinks U+FF12 (FULLWIDTH DIGIT TWO) occupies
76
+ two columns, which happens to be correct, but it's displayed as a single
77
+ column unrecognized character. It otherwise behaves the same as the other
78
+ cases.
79
+
80
+ */
81
+
82
+ #include <windows.h>
83
+ #include <assert.h>
84
+ #include <string.h>
85
+ #include <stdlib.h>
86
+ #include <stdio.h>
87
+ #include <wchar.h>
88
+
89
+ #include <string>
90
+
91
+ #define COUNT_OF(array) (sizeof(array) / sizeof((array)[0]))
92
+
93
+ // See https://en.wikipedia.org/wiki/List_of_CJK_fonts
94
+ const wchar_t kMSGothic[] = { 0xff2d, 0xff33, 0x0020, 0x30b4, 0x30b7, 0x30c3, 0x30af, 0 }; // Japanese
95
+ const wchar_t kNSimSun[] = { 0x65b0, 0x5b8b, 0x4f53, 0 }; // Simplified Chinese
96
+ const wchar_t kMingLight[] = { 0x7d30, 0x660e, 0x9ad4, 0 }; // Traditional Chinese
97
+ const wchar_t kGulimChe[] = { 0xad74, 0xb9bc, 0xccb4, 0 }; // Korean
98
+
99
+ static void set_font(const wchar_t *name, int size) {
100
+ const HANDLE conout = GetStdHandle(STD_OUTPUT_HANDLE);
101
+ CONSOLE_FONT_INFOEX fontex {};
102
+ fontex.cbSize = sizeof(fontex);
103
+ fontex.dwFontSize.Y = size;
104
+ fontex.FontWeight = 400;
105
+ fontex.FontFamily = 0x36;
106
+ wcsncpy(fontex.FaceName, name, COUNT_OF(fontex.FaceName));
107
+ assert(SetCurrentConsoleFontEx(conout, FALSE, &fontex));
108
+ }
109
+
110
+ static void usage(const wchar_t *prog) {
111
+ printf("Usage: %ls [options]\n", prog);
112
+ printf(" -h HEIGHT\n");
113
+ printf(" -face FACENAME\n");
114
+ printf(" -face-{gothic|simsun|minglight|gulimche) [JP,CN-sim,CN-tra,KR]\n");
115
+ printf(" hhhh -- print U+hhhh\n");
116
+ exit(1);
117
+ }
118
+
119
+ static void dump_region(SMALL_RECT region, const char *name) {
120
+ const HANDLE conout = GetStdHandle(STD_OUTPUT_HANDLE);
121
+
122
+ CHAR_INFO buf[1000];
123
+ memset(buf, 0xcc, sizeof(buf));
124
+
125
+ const int w = region.Right - region.Left + 1;
126
+ const int h = region.Bottom - region.Top + 1;
127
+
128
+ assert(ReadConsoleOutputW(
129
+ conout, buf, { (short)w, (short)h }, { 0, 0 },
130
+ &region));
131
+
132
+ printf("\n");
133
+ printf("ReadConsoleOutputW (%s)\n", name);
134
+ for (int y = 0; y < h; ++y) {
135
+ printf("row %d: ", region.Top + y);
136
+ for (int i = 0; i < region.Left * 13; ++i) {
137
+ printf(" ");
138
+ }
139
+ for (int x = 0; x < w; ++x) {
140
+ const int i = y * w + x;
141
+ printf("U+%04x(%04x) ", buf[i].Char.UnicodeChar, buf[i].Attributes);
142
+ }
143
+ printf("\n");
144
+ }
145
+ }
146
+
147
+ int main() {
148
+ wchar_t *cmdline = GetCommandLineW();
149
+ int argc = 0;
150
+ wchar_t **argv = CommandLineToArgvW(cmdline, &argc);
151
+ const wchar_t *font_name = L"Lucida Console";
152
+ int font_height = 8;
153
+ int test_ch = 0xff12; // U+FF12 FULLWIDTH DIGIT TWO
154
+
155
+ for (int i = 1; i < argc; ++i) {
156
+ const std::wstring arg = argv[i];
157
+ const std::wstring next = i + 1 < argc ? argv[i + 1] : L"";
158
+ if (arg == L"-face" && i + 1 < argc) {
159
+ font_name = argv[i + 1];
160
+ i++;
161
+ } else if (arg == L"-face-gothic") {
162
+ font_name = kMSGothic;
163
+ } else if (arg == L"-face-simsun") {
164
+ font_name = kNSimSun;
165
+ } else if (arg == L"-face-minglight") {
166
+ font_name = kMingLight;
167
+ } else if (arg == L"-face-gulimche") {
168
+ font_name = kGulimChe;
169
+ } else if (arg == L"-h" && i + 1 < argc) {
170
+ font_height = _wtoi(next.c_str());
171
+ i++;
172
+ } else if (arg.c_str()[0] != '-') {
173
+ test_ch = wcstol(arg.c_str(), NULL, 16);
174
+ } else {
175
+ printf("Unrecognized argument: %ls\n", arg.c_str());
176
+ usage(argv[0]);
177
+ }
178
+ }
179
+
180
+ const HANDLE conout = GetStdHandle(STD_OUTPUT_HANDLE);
181
+
182
+ set_font(font_name, font_height);
183
+
184
+ system("cls");
185
+ DWORD actual = 0;
186
+ wchar_t output[] = L"1234\n5678\n";
187
+ output[1] = test_ch;
188
+ WriteConsoleW(conout, output, 10, &actual, nullptr);
189
+
190
+ dump_region({ 0, 0, 3, 1 }, "both rows, 3 cols");
191
+ dump_region({ 0, 0, 4, 1 }, "both rows, 4 cols");
192
+ dump_region({ 0, 1, 4, 1 }, "second row");
193
+ dump_region({ 0, 0, 4, 0 }, "first row");
194
+ dump_region({ 1, 0, 4, 0 }, "first row, skip 1");
195
+ dump_region({ 2, 0, 4, 0 }, "first row, skip 2");
196
+ dump_region({ 3, 0, 4, 0 }, "first row, skip 3");
197
+
198
+ set_font(font_name, 14);
199
+
200
+ return 0;
201
+ }
@@ -0,0 +1,36 @@
1
+ @echo off
2
+
3
+ setlocal
4
+ cd %~dp0..
5
+ set Path=C:\Python27;C:\Program Files\Git\cmd;%Path%
6
+
7
+ call "%VS140COMNTOOLS%\VsDevCmd.bat" || goto :fail
8
+
9
+ rmdir /s/q build-libpty 2>NUL
10
+ mkdir build-libpty\win
11
+ mkdir build-libpty\win\x86
12
+ mkdir build-libpty\win\x86_64
13
+ mkdir build-libpty\win\xp
14
+
15
+ rmdir /s/q src\Release 2>NUL
16
+ rmdir /s/q src\.vs 2>NUL
17
+ del src\*.vcxproj src\*.vcxproj.filters src\*.sln src\*.sdf 2>NUL
18
+
19
+ call vcbuild.bat --msvc-platform Win32 --gyp-msvs-version 2015 --toolset v140_xp || goto :fail
20
+ copy src\Release\Win32\winpty.dll build-libpty\win\xp || goto :fail
21
+ copy src\Release\Win32\winpty-agent.exe build-libpty\win\xp || goto :fail
22
+
23
+ call vcbuild.bat --msvc-platform Win32 --gyp-msvs-version 2015 || goto :fail
24
+ copy src\Release\Win32\winpty.dll build-libpty\win\x86 || goto :fail
25
+ copy src\Release\Win32\winpty-agent.exe build-libpty\win\x86 || goto :fail
26
+
27
+ call vcbuild.bat --msvc-platform x64 --gyp-msvs-version 2015 || goto :fail
28
+ copy src\Release\x64\winpty.dll build-libpty\win\x86_64 || goto :fail
29
+ copy src\Release\x64\winpty-agent.exe build-libpty\win\x86_64 || goto :fail
30
+
31
+ echo success
32
+ goto :EOF
33
+
34
+ :fail
35
+ echo error: build failed
36
+ exit /b 1
@@ -0,0 +1,53 @@
1
+ import os
2
+ import sys
3
+
4
+ if os.name != "nt":
5
+ sys.exit("Error: ship scripts require native Python 2.7. (wrong os.name)")
6
+ if sys.version_info[0:2] != (2,7):
7
+ sys.exit("Error: ship scripts require native Python 2.7. (wrong version)")
8
+
9
+ import glob
10
+ import shutil
11
+ import subprocess
12
+ from distutils.spawn import find_executable
13
+
14
+ topDir = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
15
+
16
+ with open(topDir + "/VERSION.txt", "rt") as f:
17
+ winptyVersion = f.read().strip()
18
+
19
+ def rmrf(patterns):
20
+ for pattern in patterns:
21
+ for path in glob.glob(pattern):
22
+ if os.path.isdir(path) and not os.path.islink(path):
23
+ print "+ rm -r " + path
24
+ sys.stdout.flush()
25
+ shutil.rmtree(path)
26
+ elif os.path.isfile(path):
27
+ print "+ rm " + path
28
+ sys.stdout.flush()
29
+ os.remove(path)
30
+
31
+ def mkdir(path):
32
+ if not os.path.isdir(path):
33
+ os.makedirs(path)
34
+
35
+ def requireExe(name, guesses):
36
+ if find_executable(name) is None:
37
+ for guess in guesses:
38
+ if os.path.exists(guess):
39
+ newDir = os.path.dirname(guess)
40
+ print "Adding " + newDir + " to Path to provide " + name
41
+ os.environ["Path"] = newDir + ";" + os.environ["Path"]
42
+ ret = find_executable(name)
43
+ if ret is None:
44
+ sys.exit("Error: required EXE is missing from Path: " + name)
45
+ return ret
46
+
47
+ requireExe("git.exe", [
48
+ "C:\\Program Files\\Git\\cmd\\git.exe",
49
+ "C:\\Program Files (x86)\\Git\\cmd\\git.exe"
50
+ ])
51
+
52
+ commitHash = subprocess.check_output(["git.exe", "rev-parse", "HEAD"]).decode().strip()
53
+ defaultPathEnviron = "C:\\Windows\\System32;C:\\Windows"
@@ -0,0 +1,165 @@
1
+ #!python
2
+
3
+ # Copyright (c) 2016 Ryan Prichard
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to
7
+ # deal in the Software without restriction, including without limitation the
8
+ # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
9
+ # sell copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21
+ # IN THE SOFTWARE.
22
+
23
+ #
24
+ # Run with native CPython 2.7.
25
+ #
26
+ # This script looks for MSVC using a version-specific environment variable,
27
+ # such as VS140COMNTOOLS for MSVC 2015.
28
+ #
29
+
30
+ import common_ship
31
+
32
+ import argparse
33
+ import os
34
+ import shutil
35
+ import subprocess
36
+ import sys
37
+
38
+ os.chdir(common_ship.topDir)
39
+ ZIP_TOOL = common_ship.requireExe("7z.exe", [
40
+ "C:\\Program Files\\7-Zip\\7z.exe",
41
+ "C:\\Program Files (x86)\\7-Zip\\7z.exe",
42
+ ])
43
+
44
+ MSVC_VERSION_TABLE = {
45
+ "2015" : {
46
+ "package_name" : "msvc2015",
47
+ "gyp_version" : "2015",
48
+ "common_tools_env" : "VS140COMNTOOLS",
49
+ "xp_toolset" : "v140_xp",
50
+ },
51
+ "2013" : {
52
+ "package_name" : "msvc2013",
53
+ "gyp_version" : "2013",
54
+ "common_tools_env" : "VS120COMNTOOLS",
55
+ "xp_toolset" : "v120_xp",
56
+ },
57
+ }
58
+
59
+ ARCH_TABLE = {
60
+ "x64" : {
61
+ "msvc_platform" : "x64",
62
+ },
63
+ "ia32" : {
64
+ "msvc_platform" : "Win32",
65
+ },
66
+ }
67
+
68
+ def readArguments():
69
+ parser = argparse.ArgumentParser()
70
+ parser.add_argument("--msvc-version", default="2015")
71
+ ret = parser.parse_args()
72
+ if ret.msvc_version not in MSVC_VERSION_TABLE:
73
+ sys.exit("Error: unrecognized version: " + ret.msvc_version + ". " +
74
+ "Versions: " + " ".join(sorted(MSVC_VERSION_TABLE.keys())))
75
+ return ret
76
+
77
+ ARGS = readArguments()
78
+
79
+ def checkoutGyp():
80
+ if os.path.isdir("build-gyp"):
81
+ return
82
+ subprocess.check_call([
83
+ "git.exe",
84
+ "clone",
85
+ "https://chromium.googlesource.com/external/gyp",
86
+ "build-gyp"
87
+ ])
88
+
89
+ def cleanMsvc():
90
+ common_ship.rmrf("""
91
+ src/Release src/.vs src/gen
92
+ src/*.vcxproj src/*.vcxproj.filters src/*.sln src/*.sdf
93
+ """.split())
94
+
95
+ def build(arch, packageDir, xp=False):
96
+ archInfo = ARCH_TABLE[arch]
97
+ versionInfo = MSVC_VERSION_TABLE[ARGS.msvc_version]
98
+
99
+ devCmdPath = os.path.join(os.environ[versionInfo["common_tools_env"]], "VsDevCmd.bat")
100
+ if not os.path.isfile(devCmdPath):
101
+ sys.exit("Error: MSVC environment script missing: " + devCmdPath)
102
+
103
+ newEnv = os.environ.copy()
104
+ newEnv["PATH"] = os.path.dirname(sys.executable) + ";" + common_ship.defaultPathEnviron
105
+ commandLine = (
106
+ '"' + devCmdPath + '" && '
107
+ " vcbuild.bat" +
108
+ " --gyp-msvs-version " + versionInfo["gyp_version"] +
109
+ " --msvc-platform " + archInfo["msvc_platform"] +
110
+ " --commit-hash " + common_ship.commitHash
111
+ )
112
+
113
+ subprocess.check_call(commandLine, shell=True, env=newEnv)
114
+
115
+ archPackageDir = os.path.join(packageDir, arch)
116
+ if xp:
117
+ archPackageDir += "_xp"
118
+
119
+ common_ship.mkdir(archPackageDir + "/bin")
120
+ common_ship.mkdir(archPackageDir + "/lib")
121
+
122
+ binSrc = os.path.join(common_ship.topDir, "src/Release", archInfo["msvc_platform"])
123
+
124
+ shutil.copy(binSrc + "/winpty.dll", archPackageDir + "/bin")
125
+ shutil.copy(binSrc + "/winpty-agent.exe", archPackageDir + "/bin")
126
+ shutil.copy(binSrc + "/winpty-debugserver.exe", archPackageDir + "/bin")
127
+ shutil.copy(binSrc + "/winpty.lib", archPackageDir + "/lib")
128
+
129
+ def buildPackage():
130
+ versionInfo = MSVC_VERSION_TABLE[ARGS.msvc_version]
131
+
132
+ packageName = "winpty-%s-%s" % (
133
+ common_ship.winptyVersion,
134
+ versionInfo["package_name"],
135
+ )
136
+
137
+ packageRoot = os.path.join(common_ship.topDir, "ship/packages")
138
+ packageDir = os.path.join(packageRoot, packageName)
139
+ packageFile = packageDir + ".zip"
140
+
141
+ common_ship.rmrf([packageDir])
142
+ common_ship.rmrf([packageFile])
143
+ common_ship.mkdir(packageDir)
144
+
145
+ checkoutGyp()
146
+ cleanMsvc()
147
+ build("ia32", packageDir, True)
148
+ build("x64", packageDir, True)
149
+ cleanMsvc()
150
+ build("ia32", packageDir)
151
+ build("x64", packageDir)
152
+
153
+ topDir = common_ship.topDir
154
+
155
+ common_ship.mkdir(packageDir + "/include")
156
+ shutil.copy(topDir + "/src/include/winpty.h", packageDir + "/include")
157
+ shutil.copy(topDir + "/src/include/winpty_constants.h", packageDir + "/include")
158
+ shutil.copy(topDir + "/LICENSE", packageDir)
159
+ shutil.copy(topDir + "/README.md", packageDir)
160
+ shutil.copy(topDir + "/RELEASES.md", packageDir)
161
+
162
+ subprocess.check_call([ZIP_TOOL, "a", packageFile, "."], cwd=packageDir)
163
+
164
+ if __name__ == "__main__":
165
+ buildPackage()
@@ -0,0 +1,108 @@
1
+ #!python
2
+
3
+ # Copyright (c) 2015 Ryan Prichard
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to
7
+ # deal in the Software without restriction, including without limitation the
8
+ # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
9
+ # sell copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21
+ # IN THE SOFTWARE.
22
+
23
+ #
24
+ # Run with native CPython 2.7 on a 64-bit computer.
25
+ #
26
+ # Each of the targets in BUILD_TARGETS must be installed to the default
27
+ # location. Each target must have the appropriate MinGW and non-MinGW
28
+ # compilers installed, as well as make and tar.
29
+ #
30
+
31
+ import common_ship
32
+
33
+ import multiprocessing
34
+ import os
35
+ import shutil
36
+ import subprocess
37
+ import sys
38
+
39
+ os.chdir(common_ship.topDir)
40
+
41
+ def dllVersion(path):
42
+ version = subprocess.check_output(
43
+ ["powershell.exe",
44
+ "[System.Diagnostics.FileVersionInfo]::GetVersionInfo(\"" + path + "\").FileVersion"])
45
+ return version.strip()
46
+
47
+ # Determine other build parameters.
48
+ print "Determining Cygwin/MSYS2 DLL versions..."
49
+ sys.stdout.flush()
50
+ BUILD_TARGETS = [
51
+ # {
52
+ # "name": "msys",
53
+ # "path": "C:\\MinGW\\bin;C:\\MinGW\\msys\\1.0\\bin",
54
+ # # The parallel make.exe in the original MSYS/MinGW project hangs.
55
+ # "make_binary": "mingw32-make.exe",
56
+ # },
57
+ {
58
+ "name": "msys2-" + dllVersion("C:\\msys32\\usr\\bin\\msys-2.0.dll") + "-ia32",
59
+ "path": "C:\\msys32\\mingw32\\bin;C:\\msys32\\usr\\bin",
60
+ },
61
+ {
62
+ "name": "msys2-" + dllVersion("C:\\msys64\\usr\\bin\\msys-2.0.dll") + "-x64",
63
+ "path": "C:\\msys64\\mingw64\\bin;C:\\msys64\\usr\\bin",
64
+ },
65
+ {
66
+ "name": "cygwin-" + dllVersion("C:\\cygwin\\bin\\cygwin1.dll") + "-ia32",
67
+ "path": "C:\\cygwin\\bin",
68
+ },
69
+ {
70
+ "name": "cygwin-" + dllVersion("C:\\cygwin64\\bin\\cygwin1.dll") + "-x64",
71
+ "path": "C:\\cygwin64\\bin",
72
+ },
73
+ ]
74
+
75
+ def buildTarget(target):
76
+ packageName = "winpty-" + common_ship.winptyVersion + "-" + target["name"]
77
+ if os.path.exists("ship\\packages\\" + packageName):
78
+ shutil.rmtree("ship\\packages\\" + packageName)
79
+ oldPath = os.environ["PATH"]
80
+ os.environ["PATH"] = target["path"] + ";" + common_ship.defaultPathEnviron
81
+ subprocess.check_call(["sh.exe", "configure"])
82
+ makeBinary = target.get("make_binary", "make.exe")
83
+ subprocess.check_call([makeBinary, "clean"])
84
+ makeBaseCmd = [
85
+ makeBinary,
86
+ "USE_PCH=0",
87
+ "COMMIT_HASH=" + common_ship.commitHash,
88
+ "PREFIX=ship/packages/" + packageName
89
+ ]
90
+ subprocess.check_call(makeBaseCmd + ["all", "tests", "-j%d" % multiprocessing.cpu_count()])
91
+ subprocess.check_call(["build\\trivial_test.exe"])
92
+ subprocess.check_call(makeBaseCmd + ["install"])
93
+ subprocess.check_call(["tar.exe", "cvfz",
94
+ packageName + ".tar.gz",
95
+ packageName], cwd=os.path.join(os.getcwd(), "ship", "packages"))
96
+ os.environ["PATH"] = oldPath
97
+
98
+ def main():
99
+ oldPath = os.environ["PATH"]
100
+ for t in BUILD_TARGETS:
101
+ os.environ["PATH"] = t["path"] + ";" + common_ship.defaultPathEnviron
102
+ subprocess.check_output(["tar.exe", "--help"])
103
+ subprocess.check_output(["make.exe", "--help"])
104
+ for t in BUILD_TARGETS:
105
+ buildTarget(t)
106
+
107
+ if __name__ == "__main__":
108
+ main()